-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME.RUS
284 lines (237 loc) · 23.6 KB
/
README.RUS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
.utf8! for english readme, please read README.TXT
< logo placeholder >
S3VBEFIX - TSR fix for S3 VESA 2.0 BIOS v.0.6.1
blah-blah copyleft (cl) 2o16-2o24 by Artem Vasilev - wbcbz7
. _ _____________________________________________________________________ _ .
0x0. disclaimer
сей "продукт" распространяется "как есть", если в процессе работы сей проги
ваш цомпутер ВНЕЗАПНО скопытится\взорвется или потеряются данные (но вероят-
ность этого стремится к нулю), то я как автор не несу НИКАКОЙ ответственности
за произошедшие деяния (не, ну набить морду можно, но не более того :)
0x1. а что это вообще такое?!
Ну, начну с того, что у S3-шек где-то с 97-го года есть классные видеобиосы
версий 2.0x (начиная с Trio64V2/DX и ViRGE/DX), в которых есть ПОЛНАЯ поддержка
VBE 2.0 с целым букетом разных видеорежимов (в том числе мелких типа 320x240)
и вполне безглючной работой (UniVBE уже нервничает, а S3VBE20 так вообще :),
по крайней мере 90% софтов\игр\демок\интрошек работают без проблем.
...однако...
...без ложечки вонючей жижи не обошлось. Вылезло несколько неприятненьких
багов, портящих приятное впечатление, и я решил их таки пофиксить.
в общем, так и появилась сия TSR-ина :)
upd. o2.1o.2o22: набралось достаточно фидбека, решил слегка обновить
0x2. системныя требования
- 100% IBM PC/AT-совместимый персональный компьютер (ну тут ничего особенного)
- процессор - 80386 иливыше
- память... около 1 кб свободной (сама прога занимает где-то 900-1200 байт в
зависимости от количества VESA-режимов). ОЧЕНЬ рекомендуется грузить в UMB!
- система... на MS-DOS 3.3 и выше должно работать (проверял на 6.22 и 7.1)
- и самое главное - ВИДЕОКАРТА! конечно же S3 ;), ОЧЕНЬ желательно с версией
BIOS 2.0 или выше (проверить очень просто - если БЕЗ всяких VESA-резидентов
проги говорят о наличии VBE 2.0, то у вас как раз нужная версия видеобиоса)
если у вас Trio64V+, можно попробовать режим "фейкового VBE 2.0" (см. ниже),
ну а если в наличии ViRGE/DX, Trio3D или Savage - вперед!
PCI или AGP - без разницы, но с VLB-картами ничего обещать не могу.
0x3. фичи
что же вообще умеет S3VBEFIX?
- фикс primary stream fifo fetch
этот самый fifo fetch используется для оптимизации производительности карты
в 2D, но по факту нужен лишь в VESA-режимах. Прикол в том, что видеобиос по
возврату в VGA-режим забывает этот самый fifo fetch отключить, в результате
могут возникнуть неприяные глюки, вот пример:
- запускаем Quake, обязательно БЕЗ ключа -stdvid!
- переключиться в VGA-режим 320x200 (vid_mode 0 в консоли)
- выполняем vid_describemodes, ищем там номер VESA(!)-режима 320x240
- vid_mode #, # - наш номер (если его нет, то, скорее всего, у вас видеобиоc
версии 1.x, и про VESA 2.0 режимы он не знает)
- переключаемся в любой Mode-X режим с шириной 360 пикселов (напр. 360x480)
- ...а теперь внимательно смотрим на правый край экрана. впечатляет?
если наблюдается мусор или черные полосы справа, то баг пойман.
- выходим из кваки и опять смотрим на правый край экрана. теперь в текстовом
режиме можно наблюдать мусор справа (особенно заметно на панелях NC\VC)
На Trio3D дела обстоят хуже - там fifo fetch с кривыми параметрами включен
ПОСТОЯННО, причем текстовый режим пашет нормально, а Mode-X-режимы 360x???
перестают корректно отображаться. вообще.
S3VBEFIX просто отключает primary stream fifo fetch во всех VGA-режимах, тем
самым все проблемы устраняются. На скорость это не влияет - можете убедиться
сами :)
- поддержка VESA 320x[400\480] 8/15/16/24/32bpp режимов
добавлена для некоторых демок/интр (в основном от replay :), которые так и
норовят использовать эти режимы, а другие юзать не умеют.
по сути, это режимы 320x200/240 со сброшенным битом doublescan.
- переопределение объема установленной памяти, версии VBE и макс.числа страниц
вкратце - если есть кривая софтина, которую колбасит от слишком большого
количества памяти на видяшке или из-за кривого детекта версии VBE, или же
криво работает double/triple buffering, то можно эту прогу обмануть.
кроме того, можно использоать эту фичу для "фейкового" VBE 2.0, см. ниже
- настройка линейного кадрового буфера (LFB)
в некоторых случаях требуется отключить LFB или хотя бы пометить VESA-режимы
как не поддерживающие LFB, для чего можно использовать ключ /S1. Ключ /S2,
наоборот, помечает все VESA режимы как поддерживающие LFB, и дополнительно
позволяет вручную включить его в случае, если BIOS не имеет поддержки.
опять же, полезен для фейкового VBE 2.0, см.ниже
/S0 - использовать настрйоки BIOS
- фикс установки LFB-режимов
сначала устанавливается banked-режим с сохранением флагов, затем в случае
успеха ставится LFB-режим без очистки экрана (OR 0x8000) и проверяется факт
его инициализации в железе. Фиксит зависания с включенным бустером, также
позволяет реализовать "фейковый" VBE 2.0 (см. ниже)
- собственные процедуры VBE Get/Set Palette (0x4F09) и Display Window (0x4F05)
стандартный код смены банков не дружит с бустером, поэтому S3VBEFIX тащит
за собой собственную реализацию. Ключом /Q можно добавить альтернативную
процедуру чтения/записи палитры, необходимую для "фейкового" VBE 2.0 и прог
и игр типа Quake, которые брезгуют в VBE-режимах долбить палитру в порты :)
- принудительные настройки для set display start
как известно, для функции установки начальной позиции кадра (AX=0x4F07)
можно задать флаг "ждать обратного хода луча" (BL = 0x80 вместо 0x00).
Проблема в том, что некоторые софты используют его некорректно, из-за чего
картинку начинает колбасить\глючить\рвать
Задается через ключ /S[x].
- бустер (ускоритель) для VESA banked режимов
ну и самое вкусное :p
Да, это и есть тот самый ускоритель из S3SPDUP, толкьо теперь уже не нужно
грузить S3VBE20 для его корректной работы - все работает отдельно!
Сам принцип работы прост - для окна по адресу 0xA0000 включается линейная
адресация, но переключение банков остается (кстати, в даташитах этот режим
является документированным!). Причем прирост скорости виден невооруженным
глазом - на моей P200MMX скорость записи в видеопамять возрастает с 22 МБ\с
до нереальных 80-85 МБ\с, как в линейных режимах!
(кто не верит - возьмите VIDSPEED или VIDBENCH и сравните!)
Увы, дальше ускорять LFB-режимы некуда - они и так по скорости на уровне
Matrox Millennium или Tseng ET6000 и без всяких бустеров, также не имеет
смысла включать бустер для VGA-режимов - можно поиметь проблемы с Mode-X.
Включается\отключается ускоритель ключом /B[+\-].
ВНИМАНИЕ: бустер НЕ работает на S3 Savage!
- перед установкой VGA-режимов принудительно форсится предел в 256кб VRAM,
некоторые видеобиосы, в частности от Vision864/868, забывают ставить его.
симптомы - мусор при аппаратном скроллинге, например в Commander Keen.
- сброс триггера индекс/данные для контроллера атрибутов во время установки
режима - фиксит скролл в Kukoo 2 и еще по мелочи
следующие фичи - только для S3 Trio3D/Savage
- установка разрядности палитры в RAMDAC (Trio3d и выше)
Старые S3-шки (ViRGE/DX и ранее) поддерживают только 6 бит на канал (18 бит
всего) в палитре для ЦАПа в палитровых режимах. Trio3D и новее могут исполь-
зовать режим 8 бит на канал (24 бит всего), в итоге давая большее число
цветов и оттенков из палитры (16,7 млн против 262144). Некоторые игры (типа
Terra Nova) вроде бы поддерживают этот режим, но работают в нем криво (цвета
слишком темные либо вообще закосячены нафиг), посему ключом /D6 можно заста-
вить эти проги использовать 6 бит на канал в палитре. /D0 или /D8 - вернуть
возможность менять разрядность палитры (на ViRGE/DX и старше этот ключ бес-
бесполезен, так как палитру больше 6 бит на канал они не умеют аппаратно)
- гамма-коррекция в Hi/TrueColor режимах
малополезная фишка (пока нет ни одной программы, которая ее умела бы), но
поскольку она документирована начиная с VBE 2.0, и RAMDAC в Trio3D/Savage
поддерживает гамма-коррекцию, то почему бы и нет?
По умолчанию настраивается линейная гамма (00..FF), собственные кривые (8
бит на канал) загружаются аналогично палитре в 256-цветных режимах.
Вот, пожалуй, и все фичи на текущий момент, если хотите узнать больше, можно
почитать TODO.TXT (но он написан в таком стиле, что глаза болеть начинают :))
0x4. инструкция по применению
Запускается как обычно - [LH] S3VBEFIX.COM <параметр> <параметр>...
где <параметр>:
- /M[x] - переопределение объема видеопамяти (x - объем памяти в блоках
по 64 килобайт, /M16 - 1 МБ, /M0 - по умолчанию)
- /P[x] - ограничить макс. число видеостраниц (x - предел, x = 0 - по
умолчанию - 127 страниц)
- /V[x] - задать возвращаемую версию VBE (/V102 - 1.2, /V200 - 2.0)
- /Q - заменить процедуру чтения/записи палитры (0x4F09) (до выгрузки!)
- /X - добавить VESA-режимы 320x400 and 320x480 (до выгрузки!)
- /L - управление LFB:
x = 0 - по умолчанию, x = 1 - выключить
x = 2 - включить несмотря ни на что (для фейкового VBE 2.0)
- /S[x] - настройка работы флага "ждать ретрейса" для set display start:
x = 0 - флагом управляет приложение
x = 1 - всегда ждать ретрейса, даже если флаг не установлен
x = 2 - не ждать ретрейса, даже если флаг установлен
- /B[+\-] - включить\отключить бустер для VESA banked режимов (кроме Savage)
по умолчанию ускоритель отключен.
- /I - дополнительно перехватывать INT 6D, отключает выгрузку!
- /U, /R - выгрузить резидент из памяти. НАСТОЯТЕЛЬНО рекомендую выгружать
прогу именно этим ключом, (НЕ при помощи RELEASE или VC), иначе
при включенном бустере не будет восстановлен адрес LFB в карте,
в результате машина может повиснуть при установке LFB-режимов.
S3 Trio3D/Savage only:
- /D[x] - задать режим работы RAMDAC (/D6 - всегда использовать 6 бит на
канал, /D0 или /D8 - разрешить переключение разрядности RAMDAC)
- /G[+/-] - включить/отключить гамма-коррекцию в Hi/TrueColor
- LH - грузить S3VBEFIX в верхнюю память (рекомендуется при ее наличии)
пример:
S3VBEFIX.COM /B+ /S2 - включить бустер, при установке начала отображения
кадра игнорировать флаг "ждать ретрейса)
S3VBEFIX.COM /M32 - установить объем видеопамяти 2 МБ
Кстати, некоторые параметры можно менять прямо во время работы резидента.
Также можно заменить косую черту на дефис, а также "развернуть" ключи:
"S3VBEFIX.COM /BOOSTER=+ /MEMORY=8" и "S3VBEFIX.COM -b+ -m8" равнозначны.
Регистр букв значения также не имеет.
Ключи /Q и /X раздувают размер TSR в памяти и действуют до его выгрузки.
0x5. фейковый VBE 2.0
ВНИМАНИЕ: очень экспериментальная фича, для владельцев VBE 1.2 карт типа
Trio64/V+/оригинальной ViRGE, добавляет _частичную_ поддержку VBE 2.0 с LFB
ТОЛЬКО НА СВОЙ СТРАХ И РИСК, если есть возможность - лучше UniVBE/S3VBE20
включается так: S3VBEFIX /V200 /L2 /Q
ключ /Q нужен для Quake и других программ, которые работают с палитрой через
функцию 0x4F09, поскольку в VBE 1.2 она не определена.
Никаких новых VESA-режимов не добавляется (кроме случая с ключом /X, но если
оригинальный BIOS не предоставляет VESA-режимы 320x200 / 320x240, то тогда и
320x400 / 320x480 не будет и ключ /X оказывается бесполезен).
Кроме того, VBE 2.0-поля в информации об адаптере (0x4F00) остаются пустыми,
некоторым программам такое может не понравиться.
Разумеется, protected mode интерфейс (0x4F0A) также не реализован.
0x5. встроенный int10 api и некоторая инфа по резидентной части
используется в основном для проверки на наличие в памяти резидента.
вход: AX = 0xCE00
DX = 0x656E ('ne') -.
выход: AX = 0x0000 > (pretty nice, eh? ^.^)
DX = 0x6F6B ('ko') -'
ES:BX = точка входа в обработчик int10
дополнительные переменные:
word ptr ES:[BX-8] - сигнатура S3VBEFIX = 'fK'
word ptr ES:[BX-6] - версия S3VBEFIX в формате 0x1234 - v.12.3.4
word ptr ES:[BX-4] - смещение к внутренним переменным
word ptr ES:[BX-2] - флаг inTSR (0x0001, если уже внутри обработчика)
dword ptr ES:[BX+9] - указатель на предыдущий обработчик int10
- если AX и DX не равны выходным значениям, то S3VBEFIX не загружен.
- если возвращенное значение ES:BX не равно значению после int0x21 AX=0x3510
то S3VBEFIX не является последнем в цепочке int10, выгрузка невозможна
- можно временно отключить S3VBEFIX, если установить флаг inTSR в 0x0001, но
на текущий момент данная фича не используется (0 - нормальная работа)
- так как резидент просто пропитан самомодифицирующимся кодом, то на данный
момент нет надежного способа определить местоположение ВСЕХ внутренних пере-
менных, так что изменять их следует ТОЛЬКО соответстующей версией S3VBEFIX,
чтобы вдруг не поймать сюрприз в виде глюков или зависаний ;)
может быть, заюзаю дырки в PSP
- кстати да, резидент частично перекрывает PSP (находится по смещению CS:0x40,
но перед компиляцией можно поменять данное значение), но не стоит надеяться,
что резидент ЖЕЛЕЗНО располагается в этой области.
0x6. баги\глюки
- ключ /M[x]
Настоятельно не рекомендуется устанавливать размер видеопамяти больший, чем
установлено на карте, в противном случае возможны сюрпризы в виде вылетов
или зависаний программ. (не пиши там, где нельзя :)
Кроме того, возможны проблемы у владельцев видеокарт с >=64 МБ видеопамяти -
при показе текущего статуса S3VBEFIX будет отображать неверный объем, помимо
этого, неизвестно, будет ли работать резидент корректно - в общем, все на
свой страх и риск (хотя, насколько я знаю, S3-шек с 64 и более метрами не
так и много, мне они не попадались ни разу)
- VBETEST
и всё-таки он иногда глючит :) по ощущениям умудряется обходить S3VBEFIX
исправлено:
- VBETEST.EXE и ключ /M[x]
VBETEST из SciTech Display Doctor может рухнуть при попытке скроллинга вир-
туального экрана во время тестов видеорежимов, если использован ключ /M[x].
>>после добавления фикса функции 0x4F06 проблема ушла.
- Chasm: The Rift и Runtime Error 216 после установки режима
>>фикс процедуры переключения банков, там вообще был рассадник багов.
Если что-то еще откажется нормально работать либо же поломается по причине
моей проги - пишите.
0x7. планы
в TODO.TXT. а вообще, пока всё заморожено и обновляется очень редко :)
возможно, вырежу часть фич в отдельный универсальный резидент, а специфич-
ные для каждого чипа вещи можно сделать в отдельных TSRах.
0x8. исходные коды и авторский булшит
исходники доступны в репе на github: https://github.com/wbcbz7/S3VBEFIX
0x9. координаты
mailto: wbcbz7.at(at)gmail.com
telegram: (at)wbcbz7
discord: wbcbz7#3519, можно найти на https://discord.io/demoscene
vogons.org - wbc, phantom.sannata.ru and other sites - wbcbz7
...вот и все :)