Rev 1383 | Details | Compare with Previous | Last modification | View Log
Rev | Author | Line No. | Line |
---|---|---|---|
1382 | alone | 1 | пройдены тесты 186: |
2 | add |
||
3 | bitwise: лишнее 10 (AF) на 7-й (and ah,al) - The state of the AF flag is undefined. лишнее 80 (SF) на 14-й (or cx,word[4]) - не был сформирован знак в LOG16 (fixed), 10-й с конца (test ah,al): лишнее 10 (AF) - The state of the AF flag is undefined. |
||
1383 | alone | 4 | cmpneg |
5 | control |
||
6 | jmpmov |
||
1037 | alone | 7 | |
1383 | alone | 8 | провалены тесты: |
9 | bcdconv: все флаги неверны, +2e неверный результат daa 5496 вм. 5490 (где-то неправильный AF?) |
||
10 | datatrnf c1: pop %cx (non-standard) |
||
11 | div: все флаги неверны, +0x10 0000 вм ffff: |
||
12 | mov dx,0ffffh |
||
13 | mov ax,0ffffh |
||
14 | mov cx,01h |
||
15 | mov word[bp],02h |
||
16 | div cx ;ffff ffff/0001 |
||
17 | add bp,02h |
||
18 | mov word[12],ax |
||
19 | mov word[14],cx |
||
20 | mov word[16],dx <---- |
||
21 | +0x14 8000 вм ffff: |
||
22 | mov dx,0ffffh |
||
23 | mov ax,0ffffh |
||
24 | mov word[18],0ffffh |
||
25 | mov word[bp],04h |
||
26 | div word[18] ;ffff ffff/ffff |
||
27 | add bp,02h |
||
28 | mov word[20],ax |
||
29 | mov word[22],dx |
||
1382 | alone | 30 | |
1383 | alone | 31 | |
32 | |||
1382 | alone | 33 | para512: на старте рисует поверх всего экрана кучу блоков размером 256*65536 - так и надо? пока костыль для rep stosb 65536=0 |
34 | |||
1362 | alone | 35 | cgademo: небольшое затирание надписи |
1382 | alone | 36 | digger: запарывается немного меню [один спрайт движения влево уже не запарывается после фикса знака в LOG16) |
37 | |||
1383 | alone | 38 | mision: огонь триггерится, а не работает при нажатом |
39 | malar: запарывается немного меню, [игра не запускается при cs=0400, запускается при 1000) |
||
40 | sorryass сломалось |
||
1086 | alone | 41 | |
42 | |||
1203 | alone | 43 | еще странный косяк по х86 |
44 | если запусить rogue он то отлично работает |
||
45 | но не работает выход с эмулятора по 135 |
||
46 | [19:38] alone_coder: да, это надо пофиксить. прерывание не захватывается |
||
47 | |||
48 | |||
1291 | alone | 49 | livin: |
50 | 37d8 похоже на логику движения с замедлением |
||
51 | de31,32 - какие-то переменные движения |
||
52 | поставил нопы 37c2, 37e0 вместо inc - не помогло |
||
1203 | alone | 53 | |
1087 | alone | 54 | добавить вариант declputm16_oldpg, где писать в обратном порядке, чтобы можно было включить старую страницу |
1085 | alone | 55 | |
56 | |||
1086 | alone | 57 | в некоторых случаях ld b,tscrpgs можно заменить на inc b? |
1085 | alone | 58 | |
1086 | alone | 59 | |
1087 | alone | 60 | что эффективнее - быстрый sp с проверкой 18t при каждой записи r16 (чтобы включить страницу) или sp как обычный регистр (и лишний сегмент под код)? |
1086 | alone | 61 | |
62 | в call/jmp/ret сделать такую же проверку быстрого выхода, как в jr |
||
63 | |||
64 | |||
65 | флаги чётности и переполнения отключать настройкой? |
||
66 | имеет смысл отключить оба в сдвигах |
||
67 | чётность оставить только в логике |
||
68 | переполнения оставить только в арифметике |
||
69 | |||
70 | |||
1063 | alone | 71 | не формировать сразу флаг чётности, а копировать последний результат в регистр. когда надо будет перейти по чётности (это редко надо), тогда и посчитаем чётность |
1037 | alone | 72 | тогда логические операции и сдвиги через rlca/rla/rrca/rra, чтобы не менять флаги вообще, кроме C |
73 | флаг AC (x86) = флаг H (Z80) |
||
74 | |||
1063 | alone | 75 | сдвиги также формируют флаг O: The OF flag is affected only on 1-bit shifts. For left shifts, the OF flag is set to 0 if the most significant bit of the result is the same as the CF flag (that is, the top two bits of the original operand were the same); otherwise, it is set to 1. For the SAR instruction, the OF flag is cleared for all 1-bit shifts. For the SHR instruction, the OF flag is set to the most-significant bit of the original operand. https://c9x.me/x86/html/file_module_x86_id_285.html The OF flag is defined only for the 1-bit rotates; it is undefined in all other cases (except that a zero-bit rotate does nothing, that is affects no flags). For left rotates, the OF flag is set to the exclusive OR of the CF bit (after the rotate) and the most-significant bit of the result. For right rotates, the OF flag is set to the exclusive OR of the two most-significant bits of the result. https://c9x.me/x86/html/file_module_x86_id_273.html |
1037 | alone | 76 | |
1063 | alone | 77 | во всех командах вручную хранить данные для флага O? rra:ld of,a:rla (если два старших бита разные, то это переполнение). к сожалению, нельзя объединить с данными для флага P (чтобы потом проверять с учётом C), т.к. не все команды меняют одновременно P, O, C (логические сдвиги - только O, C). |
1037 | alone | 78 | тогда все сдвиги точно соответствуют сдвигам на Z80 (логические - через rrca/..., арифметические - через #cb xx) |
79 | нужно хранить в регистрах: |
||
1082 | alone | 80 | 8 parity data (d'?) |
81 | 8 overflow data (e'?) |
||
1037 | alone | 82 | |
1063 | alone | 83 | лучше для единообразия хранить все регистры в памяти |
84 | parity,overflow в ix? ничего не даст? |
||
1057 | alone | 85 | |
1037 | alone | 86 | fs,gs нужны только для 386? |
87 | |||
1040 | alone | 88 | лучше CS всегда включать в конкретное окно (4000) и хранить пересчитанный PC |
1062 | alone | 89 | SS всегда включать в другое конкретное окно (8000) (sp не пересчитан для единообразия, но после его изменения надо encodeSP) |
1040 | alone | 90 | третье окно (c000) под данные |
1037 | alone | 91 | |
92 | как адресовать память по ?s:de = (?s*16 + de)/16384 и mod 16384: |
||
93 | ?s*16 сразу хранить как 24 бита (для всех ?s) |
||
94 | |||
1203 | alone | 95 | |
96 | |||
97 | |||
98 | int 10h |
||
99 | ah=10h Установить регистры палитры для EGA. Работает при наличии EGA-совместимой карты.(включая VGA-совместимые) |
||
100 | |||
101 | Выбирает цвета, используемые данным атрибутом экрана. умалчиваемые цвета те же, что используются с CGA (см. атрибуты экрана ). |
||
102 | |||
103 | Вход: |
||
104 | AL Подфункция |
||
105 | |||
106 | |||
107 | BL = регистр (идентифицирует 4-битовый цвет; 0-15) |
||
108 | BH = значение регистра (6-битовый rgbRGB выдаваемый цвет) |
||
109 | |||
110 | Примечание: |
||
111 | Существует недокументированная особенность этой функции - возможны значения вышё 15, однако менять эти регистры крайне не реккомендуется. В частности в RBIL приведена следующая информация: |
||
112 | 10h attribute mode control register (should let BIOS control this) |
||
113 | 11h overscan color register |
||
114 | 12h color plane enable register (bits 3-0 enable corresponding text attribute bit) |
||
115 | 13h horizontal PEL panning register |
||
116 | 14h color select register |
||
117 | 1 Установить регистр рамки. |
||
118 | |||
119 | BH = значение регистра (6-битовый rgbRGB выдаваемый цвет) |
||
120 | |||
121 | Примечание: |
||
122 | На оригинальном IBM PC эта функция записывает данные в не правильный регистр |
||
123 | 2 Установить все регистры палитры и регистр границы |
||
124 | |||
125 | ES:DX => 17 байт (регистры палитры (байты 0-15) и регистр границы (байты 16)) |
||
126 | |||
127 | Примечание: |
||
128 | Некоторые Биосы не правильно работают, если BH не равен нулю |
||
129 | 3 Выбрать яркость или мерцание |
||
130 | |||
131 | BL,бит7 = 0:яркость фона (16 возможных цветов фона) |
||
132 | BL,бит7 = 1: мерцание (8 цветов фона + мерцание переднего плана) |
||
133 | |||
134 | Примечание: |
||
135 | Некоторые Биосы не правильно работают, если BH не равен нулю |
||
136 | 7 Чтение регистра палитры |
||
137 | |||
138 | BL = номер читаемого регистра палитры (0-15). |
||
139 | |||
140 | Выход: |
||
141 | BH = содержимое регистра палитры. |
||
142 | |||
143 | Примечание: |
||
144 | необходима VGA-совместимая видеокарточка |
||
145 | |||
146 | Существует недокументированная особенность этой функции - возможны значения вышё 15. подробнее в подфункции 0 |
||
147 | 8 Чтение регистра цвета рамки |
||
148 | необходима VGA-совместимая видеокарточка |
||
149 | |||
150 | Выход: |
||
151 | BH = содержимое регистра цвета рамки |
||
152 | 9 Чтение всех регистров палитры |
||
153 | ES:DX - указатель на 17-байтовую таблицу.(регистры палитры(байт 0-15) и регистр бордюра (байт 16)) |
||
154 | |||
155 | Выход: |
||
156 | По адресу ES:DX содержится таблица, заполненная значениями из регистров палитры |
||
157 | |||
158 | Примечание: |
||
159 | необходима VGA-совместимая видеокарточка |
||
160 | |||
161 | Рекомендуется заполнить таблицу каким-либо известным вам значением, т.к. функция никак не сообщает о неудачном выполнении. |
||
162 | 10h Установка одного регистра таблицы цветов (регистра ЦАП) |
||
163 | необходима VGA-совместимая видеокарточка |
||
164 | |||
165 | BX = номер регистра таблицы цветов (0-255); |
||
166 | DH = интенсивность красного цвета (6 бит); |
||
167 | CH = интенсивность зеленого цвета (6 бит); |
||
168 | CL = интенсивность синего цвета (6 бит). |
||
169 | 12h Установка нескольких регистров таблицы цветов (регистров ЦАП) |
||
170 | необходима VGA-совместимая видеокарточка |
||
171 | |||
172 | BX = номер первого регистра таблицы цветов (0-255); |
||
173 | CX = число устанавливаемых регистров (1-256); |
||
174 | ES:DX - адрес записываемых данных. должен содержать cx блоков по три байта, где старший байт - интенсивность красного цвета, средний - залёного, младший - синего. |
||
175 | 13h Выбор подмножества цветов |
||
176 | необходима VGA-совместимая видеокарточка |
||
177 | BL = 0 выбор режима: |
||
178 | BH = 0 : 4 подмножества из 64 цветов; |
||
179 | BH = 1 : 16 подмножеств из 16 цветов; |
||
180 | BL = 1 выбор активного подмножества: |
||
181 | BH = номер подмножества (0-4 или 0-15, в зависимости от установок, сделанных с помощью BL=0). |
||
182 | |||
183 | Примечание: |
||
184 | Функция не поддерживается в видеорежимах с номером 13h или больше. |
||
185 | 15h Чтение регистра таблицы цветов (регистра ЦАП) |
||
186 | BL = номер читаемого регистра (0-255). |
||
187 | |||
188 | Выход: |
||
189 | DH = интенсивность красного цвета (6 бит); |
||
190 | CH = интенсивность зеленого цвета (6 бит); |
||
191 | CL = интенсивность синего цвета (6 бит); |
||
192 | |||
193 | Примечание: |
||
194 | необходима VGA-совместимая видеокарточка |
||
195 | |||
196 | На некоторых старых боисах функция изменяет значение регистра AX |
||
197 | 17h Чтение нескольких регистров таблицы цветов (регистров ЦАП) |
||
198 | BL = номер первого регистра таблицы цветов (0-255);цы цветов (0-255); |
||
199 | CX = число считываемых регистров (ES:DX - адрес таблицы цветов (CX блоков по 3 байта); |
||
200 | |||
201 | Выход: |
||
202 | Данные в таблице по адресу ES:DX. |
||
203 | |||
204 | Примечание |
||
205 | необходима VGA-совместимая видеокарточка |
||
206 | |||
207 | Таблица цветов содержит по три байта на один регистр таблицы цветов. В каждом байте значащимии являются только младшие 6 бит. Старший байт - интенсивность красного цвета, средний - залёного, младший - синего. |
||
208 | 18h Установить PEL-маску |
||
209 | необходима VGA-совместимая видеокарточка |
||
210 | |||
211 | BL = Новое значение PEL |
||
212 | 19h Читать PEL-маску |
||
213 | необходима VGA-совместимая видеокарточка |
||
214 | |||
215 | BL = Значение PEL BL = Значение PEL |
||
216 | 1Ah Определение режима подмножества цветов |
||
217 | необходима VGA-совместимая видеокарточка |
||
218 | |||
219 | |||
220 | Выход: |
||
221 | BL = 0 - используются 4 цветовых подмножества по 64 цвета; |
||
222 | 1 - используются 16 цветовых подмножеств по 16 цветов; |
||
223 | BH - номер подмножества, используемого в данный момент. |
||
224 | 1Bh Установка палитры из градаций серого цвета |
||
225 | необходима VGA-совместимая видеокарточка |
||
226 | |||
227 | BX = номер первого регистра таблицы цветов (0-255);цы цветов (0-255); |
||
228 | CX = число модифицируемых регистров (1-256). |
||
229 | |||
230 | Примечание: |
||
231 | Регистр палитры: |
||
232 | биты 7 и 6 не используются |
||
233 | используемые биты: |
||
234 | 5 - r |
||
235 | 4 - g |
||
236 | 3 - b |
||
237 | 2 - R |
||
238 | 2 - G |
||
239 | |||
240 | По некоторым сведениям, эта функция разрушает содержимое регистров si, di, bp, sp, bx, ax. Так что при ее использовании следует соблюдать осторожность и в случае ошибок сохранять и затем восстанавливать упомянутые регистры |
||
241 | Документация на PhoenixBios (rev 6) не описывает эту функцию. возможно, она не поддерживается |
||
1410 | alone | 242 | |
243 | |||
244 | https://ru.wikipedia.org/wiki/Program_Segment_Prefix |
||
245 | |||
246 | http://neurofox.ru/help/dosmz |
||
247 | |||
248 | https://www.old-games.ru/game/2304.html |
||
249 | |||
250 | dosbox debugger https://www.vogons.org/viewtopic.php?f=39&t=3944 |