Да, DrPass оказался прав. Все дело в прямом выводе в видеопамять.
---------- Post added at 13:43 ---------- Previous post was at 12:23 ----------
rep stosw - когда заполняю b800 одним символом - рисуется каждый первый. Каждый второй не рисуется. Потом, если переключить на 1 активную страницу и потом снова на нулевую - все символы отрисовываются нормально (то есть в памяти они по факту есть).
Смарю NMISER.ASM. IN AX,TRAP_A - пытается получить в AX адрес (смещение?) записавшегося байта. Далее там некоторые перетрубации с получением символа из памяти и его аттрибута, сравнение - текущая ли активная страница, вычисление смещения в выходном буфере и отрисовка символа.
Заремил сравнение текущая ли страница или нет (потому что если не текущая - выход из обработчика), конкретно указал что рисуем всегда символ 'O' цветом 7. Результат - все то же самое, вижу только нечетные 'O', четных на экране не вижу.
Кстати интересный момент - эмулятор SovietPC не честно работает. Он игнорит обработчик NMI и рисует изображение своими какими-то процедурами внутренними (возможно берет символы сразу с B800).
Отсюда вывод - либо на четных символах NMI вообще не вызывается, либо вызывается, но в AX получает рандом вместо корректного смещения. Особенность работы NEC V20 с командами stosb/stosw?




Ответить с цитированием