Не срабатывает "ловушка" адреса - порт 28h (TRAP_A). Простые тесты:
В итоге в AX у нас 8000h . Че такое '8' я хз, но следующие 3 байта явно смещение, по которому произошла запись. Здесь все ок, все работает как ожидалось.Код:mov ax, 0B800h mov es,ax mov di,0 mov al,'O' ; буква O mov ah,7 ; белым по черному mov cx,1 ; один раз rep stosw in ax,28h call PrintHexAX
Что в AX? Правильно - тот же 8000h, хотя очень бы хотелось видеть там 8002h по логике, потому что второй символ у нас записался в B800:0002.Код:mov ax, 0B800h mov es,ax mov di,0 mov al,'O' ; буква O mov ah,7 ; белым по черному mov cx,2 ; два раза rep stosw in ax,28h call PrintHexAX
Ну и в довершение:
В AX у нас 8004h как и должно быть.Код:mov ax, 0B800h mov es,ax mov di,0 mov al,'O' ; буква O mov ah,7 ; белым по черному mov cx,3 ; три раза rep stosw in ax,28h call PrintHexAX
Из этого следует, что глюка в аппаратной реализации защелки адреса. Тут уж я умываю руки. В качестве великого костыля конечно можно при вызове NMI рендерить не один символ, а два сразу - текущий и соседний, но во-первых это дополнительное место нужно, во-вторых исходников 91 года биоса нет, а 89 года BIOS уж очень какой-то неказистый.




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 

