1

Тема: NMI и строчная развёртка

Может кто-нибудь подсказать, сколько времени проходит между вызовом вектора NMI и началом отрисовки первой строки? Похоже, в семёрке и девятке эти тайминги разные. Мне это нужно для более точной эмуляции совмещения видеорежимов.

2

Re: NMI и строчная развёртка

Вот что давным-давно писал мне Олег:

Я вроде уже сам разобрался (точнее, подобрал нужные значения), но всё равно попробую пояснить, что имелось в виду.

Сами по себе таймерные прерывания в агатах малоинтересны, за исключением того, что они жестко привязаны к работе видеоконтроллера. Частота NMI всегда равна 50 Гц и они происходят во время обратного хода развертки. А вот с IRQ все несколько сложнее. Вот мне и хотелось выяснить, как соотносятся сигналы прерываний с ходом луча развертки. Осциллографом это выяснять довольно малопродуктивно, поэтому была мысль разобраться с механизмом их генерации. Сейчас я реализовал вариант, близкий к реальности: устойчиво работает совмещение текста с графикой в рапире семерки (РЖМ("ВК"");) и совмещение T32 и T64 для девятки в диске часов Бадера. В рапире для девятки, как я понял, совмещенный режим хотя и документирован, но в реальности не поддерживается (даже не включаются таймерные прерывания) из-за особенностей работы видео-контроллера.

Но вообще, если у кого-нибудь будет возможность померить прерывания на семерке и девятке, интересуют следующие параметры: частота (лучше всего кратность относительно NMI) и длительность (лучше всего в тактах процессора). Судя по всему, на семерке длительность IRQ гораздо больше, чем на девятке. По крайней мере, гораздо больше ложных (повторных) вызовов обработчика IRQ. В эмуляторе я подобрал значение длительности равное 700 тактов для семерки и 100 - для девятки. Прерывания для семерки происходят каждые 16 строк изображения с кратностью 20 относительно NMI (с учетом невидимых на экране строк). Для девятки прерывания происходят каждые 8 строк с кратностью 40 относительно NMI. Но эти значения были подобраны экспериментально.

Как это работает в эмуляторе, можно будет скоро посмотреть, я сейчас готовлю к выпуску версию 1.7, в которой этот механизм уже будет реализован.