Subversion Repositories NedoOS

Rev

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