Сегодня немного исследовал Поиск на предмет не прорисовки каждого второго байта с V20. Для этого взял родной BIOS, из которого выкинул монитор и работу с кассетой, а вместо этого после всей инициализации сделал тестовую программку - записывает один символ в видео-память, ждет пару секунд, записывает два символа в видео-память, ждет пару секунд и так по кругу. Такого плана:
Код:
again:
MOV DX,01
CALL BEEP_ERROR
mov ax, 0B800h
mov es,ax
mov di,0
mov al,'1' ; буква 1
mov ah,7 ; белым по черному
mov cx,1 ; один раз
rep stosw
mov cx,200
call delay_pit
MOV DX,02
CALL BEEP_ERROR
mov ax, 0B800h
mov es,ax
mov di,160
mov al,'2' ; буква 2
mov ah,7 ; белым по черному
mov cx,2 ; два раза
rep stosw
mov cx,200
call delay_pit
jmp again
Смотрел сигналы IO/M- (признак обращения к памяти), TRAPSEL - это после дешифрации адреса РТ5 и дальше TRAPL, TRAPH и TRAPDAT после ИД7 уходящие на регистровую память для защелок адреса и данных. Вот так выглядит запись одного байта в приближении:
IO/M стал высокий (идет доступ к памяти), РТ5 видит что доступ к памяти и адреса совпали с B8000, дешифровала TRAPSEL, ИД7 в свою очередь защелкнула сначала младший байт на шине адреса, затем старший. Все понятно.
Дальше полный цикл для обоих процов NEC V20 и 8088. Полный цикл - запись одного байта, ожидание, запись двух байт. Это 8088:
Это V20:
В целом - все очень похоже, за исключением TRAPSEL, который на 8088 проце активно живет, а на V20 не очень. Но нас интересует момент записи двух байт сразу. Это вторая "черточка" из TRAPL и TRAPH на рисунках. Приближаем:
Это 8088:
Сначала адрес первого байта защелкнули, потом адрес второго байта. Все четко.
А это уже V20, то же место:
Адрес первого байта защелкнули, а дальше... - а дальше ничего. Самое удивительное, что IO/M- дальше не сработал. Соотвественно РТ5 и не рыпнулась даже, и как следствие ни адрес ни защелкнулся, ни NMI не вызвалось. Просто тупо игнор.
Не понимаю