1

Тема: NMI, IRQ, развёртка и совмещение видеорежимов

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

2

Re: NMI, IRQ, развёртка и совмещение видеорежимов

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

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

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

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

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

3 Отредактировано SnakE (11-03-2020 16:29)

Re: NMI, IRQ, развёртка и совмещение видеорежимов

Я почти разобрался в прерываниях, в основном благодаря вот этой статье: http://agatcomp.ru/Hard/clock.shtml. Но какие-то тонкости от меня ускользают.

С 9 всё просто: отрицательный фронт NMI совпадает с началом кадра. IRQ срабатывает каждые 8 экранных строк, в начале каждой текстовой строки. Низкий уровень IRQ держится одну экранную строку = 64 такта, в этом интервале возможны повторные срабатывания обработчика IRQ. Остальные 448 тактов уровень IRQ высокий. С этими параметрами идеально эмулируются часы Бадера.

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=732&download=0

А вот с 7 не очень выходит. Тут отрицательный фронт NMI совпадает с концом кадра / началом обратного хода луча. IRQ имеет низкий уровень в течение 16 экранных строк, и затем высокий в течение 16 строк. Период IRQ получается 32 строки. Но в полном кадре 312 строк, на 32 не делится. Поэтому последний, десятый период IRQ в каждом кадре укорачивается на 8 строк. Это всё очень хорошо согласуется со статьёй Владимира.

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=731&download=0

Проблем здесь две:

  • Поскольку сигнал IRQ имеет кадровую периодичность, есть минимум два варианта, где этот период может начинаться: вместе с NMI или вместе с началом видимого кадра.

  • В обоих случаях "Магические фигуры" из "Роботландии" эмулируются неправильно: нижняя часть фигур обрезается фрагментом в текстовом режиме.

Хорошо бы снять с семёрки осциллограммы NMI и IRQ двухканальным осциллографом, чтобы было видно их взаимный тайминг.

Ниже есть два скриншота "Магических фигур": один с синхронизацией IRQ по NMI, второй с синхронизацией по началу кадра. Я специально использовал неправильный знакогенератор, чтобы было видно область, занимаемую текстом.

Post's attachments

combined7-frame-sync.png, 5.49 kb, 514 x 544
combined7-frame-sync.png 5.49 kb, 225 downloads since 2020-03-11 

combined7-nmi-sync.png, 5.62 kb, 514 x 544
combined7-nmi-sync.png 5.62 kb, 208 downloads since 2020-03-11 

Attachment icon interrupts7.png 15.67 kb, 94 downloads since 2020-03-11 

Attachment icon interrupts9.png 14.75 kb, 82 downloads since 2020-03-11 

4

Re: NMI, IRQ, развёртка и совмещение видеорежимов

SnakE пишет:

Хорошо бы снять с семёрки осциллограммы NMI и IRQ двухканальным осциллографом, чтобы было видно их взаимный тайминг.

Если ни у кого не будет возможности сделать это в ближайшие дни, я на следующей неделе свожу "семёрку" на работу и сниму осциллограммы.

5

Re: NMI, IRQ, развёртка и совмещение видеорежимов

Наверное, будет полезно сразу снять 6 каналов: IRQ, NMI, ССИ, КСИ, СГИ, КГИ.
И посмотреть, будут ли они меняться при смене видеорежимов.

И если уже начинать это делать - то сразу для семёры и девятки.

6

Re: NMI, IRQ, развёртка и совмещение видеорежимов

У меня на работе осциллограф 4-канальный, поэтому больше сигналов снять не смогу. Может быть, здесь есть кто-нибудь с более жирным оборудованием и возможностью без трудностей доставить к нему "Агат"?

7 Отредактировано avivanov76 (12-03-2020 00:07)

Re: NMI, IRQ, развёртка и совмещение видеорежимов

SnakE пишет:

Хорошо бы снять с семёрки осциллограммы NMI и IRQ двухканальным осциллографом

О, недавно снимал такие картинки, пока плату семерки чинил и вот эту программку отлаживал.
Первая картинка NMI и IRQ (irq00001_1.png), вторая (irq00002_1.png) - они же, но чуть крупнее. Видно, что отрицательный фронт IRQ совпадает с началом видимого кадра.

Третья картинка - NMI относительно ССИ (nmi_ssi0_1.png, ССИ снизу). Отрицательный фронт NMI приходит за 3 мкс до ССИ.

Снято в режиме Т32, но причин, чтобы NMI и IRQ менялись в разных режимах, я в схеме не нахожу. Они формируются из сигналов счетчика строк, а он работает во всех режимах одинаково.

Post's attachments

irq00001_1.png, 4.52 kb, 320 x 234
irq00001_1.png 4.52 kb, 422 downloads since 2020-03-11 

irq00002_1.png, 4.17 kb, 320 x 234
irq00002_1.png 4.17 kb, 205 downloads since 2020-03-11 

nmi_ssi0_1.png, 3.89 kb, 320 x 234
nmi_ssi0_1.png 3.89 kb, 219 downloads since 2020-03-11 

8

Re: NMI, IRQ, развёртка и совмещение видеорежимов

avivanov76 пишет:

Видно, что отрицательный фронт IRQ совпадает с началом видимого кадра.

Супер, спасибо! Как раз то, что надо.

Ещё вопрос, может ли кто-нибудь запустить "Магические фигуры" из "Роботландии" на реальной семёрке с "испорченным" знакогенератором, и сделать фотографию? Под испорченным ЗГ я имею в виду, например, притянуть выход ПЗУ генератора к земле, чтобы все символы отображались белыми квадратиками. Тогда в режиме совмещения будет видно в точности, где заканчивается графика и начинается текст.

9

Re: NMI, IRQ, развёртка и совмещение видеорежимов

Когда вопросы есть о каких-то прогах: давайте сразу ссылки - откуда их брать (ссылку или аттач).
Это и быстрее для отвечающего и не возникнет недоразумений через путаницу разных версий прог (у нас вообще нет, наверное, ни одной проги, которая бы была только в одном однозначном, единственно верном, варианте)

10

Re: NMI, IRQ, развёртка и совмещение видеорежимов

http://agatcomp.ru/Apps/Robotlandia.shtml

11

Re: NMI, IRQ, развёртка и совмещение видеорежимов

Конкретно интересует вот этот диск: SHKOLNI7-3.DSK. Правда, есть непонятка: этот диск лежит в подкаталоге EMUL. Рядом есть каталог ORIGINAL, там есть диск LOAD3.dsk. Этот диск в эмуляторе не работает вообще, виснет на загрузке. Оба диска лежат тут: https://my.pcloud.com/publink/show?code … NI7YnsdyPk . Приаттачить не могу, вроде как на сервере закончилось место.

Чтобы получить картинку магической фигуры, нужно

  • Загрузиться с диска

  • Выбрать Рапиру (нажать на клавиатуре "Р")

  • В списке выбрать "Магические фигуры" (3 раза стрелка вверх, Ввод)

  • Пропустить сообщение об авторах любой кнопкой

  • Выбрать одну из фигур, нажав на клавиатуре 1, 2, 3 или 4 -- на моих скриншотах "Звезда", номер 2

12 Отредактировано Voldemar0 (13-03-2020 10:13)

Re: NMI, IRQ, развёртка и совмещение видеорежимов

>  Этот диск в эмуляторе не работает вообще, виснет на загрузке.

Не знаю, зачем вообще load3 публиковался - это образы патченной Школьницы для работы в сетевом классе Агатов. Причем там головой была XT, схем связного железа нет. Связь по парпорту, прокол собственный. Но это - к Игорю.

SHKOLN - это те же проги, но возвращенные в родную среду обычной Школьницы.

У меня сейчас нет 140ки под рукой, но попробую перетащить в ИКП-840-версию семёрочной Школьницы,
если запуститься на реале - покажу что как.

13 Отредактировано Voldemar0 (13-03-2020 15:15)

Re: NMI, IRQ, развёртка и совмещение видеорежимов

Прогу запустил, проверил:
переключение режима происходит чуть левее центра последней строки графики в проге "магические фигуры".

\---------/             - это ещё графика (таблица 3x3 в проге)
      ........             - тут происходит переключение (физическая скан-строка)
********             - это уже строка текстового режима

Точка переключения немного вправо-влево подёргивается, видимо, тут какий-то программный джиттер (где-то точек 4-8 графики).

Т.е. если пересчитать в адреса памяти, то:
графстраница MGR начинается в адресе $2000
и она выводиться примерно до адресов $3958.
Дальше ДК идёт уже в текстовом режиме.

фоточка:
https://hdd.tomsk.ru/gallery/afekxkbi#obkxzsbb

Тоже Школьница, в диалоговом режиме включил совмещение текста и gr 64x64:
https://hdd.tomsk.ru/gallery/hinarqpy#cfsakqdm

По докам на РАПИРу переключение происходит до 6й строки снизу (т.е. 6 строк по любому будут выведены).
Никаких регулировок не предусматривается, текст всегда внизу. Например:

РЖМ("Н2К");

У меня есть ещё несколько прог под бейсик, где используется совмещение,
но они все под Бейсик-60, под ИКП надо немного допиливать.

14 Отредактировано Voldemar0 (13-03-2020 18:44)

Re: NMI, IRQ, развёртка и совмещение видеорежимов

Замеры:

Семёрка:

    Период:     частота:     высокий уровень:     низкий уровень:
КГИ    20.0 ms        50.1 Hz        3.59 ms            16.4 ms
КСИ    20.0 ms        50.1 Hz        0.256 ms        19.7 ms
Задерка КСИ относительно КГИ: 1.80 ms

    Период:     частота:     высокий уровень:     низкий уровень:
СГИ    64.0 mks    15.62 KHz    15.3 mks        48.8 mks
ССИ    64.0 mks    15.62 KHz    3.1 mks            61.0 mks
Задержка ССИ относительно СГИ: 3.1 mks

!NMI является инверсией от КГИ.


Девятка:

    Период:     частота:     высокий уровень:     низкий уровень:
КГИ    20.0 ms        50.1 Hz        3.59 ms            16.4 ms
КСИ    20.0 ms        50.1 Hz        0.192 ms        19.8 ms
Задерка КСИ относительно КГИ: 1.60 ms

    Период:     частота:     высокий уровень:     низкий уровень:
СГИ    64.0 mks    15.6 KHz    21.3 mks        42.7 mks
ССИ    64.0 mks    15.6 KHz    4.01 mks        60.1 mks
Задержка ССИ относительно СГИ: 6.67 mks

!NMI является копией КГИ.

К девятке следует относиться критичнее, так как сигналы СГИ и КГИ у неё
- судя по схеме - неоднократно модифицировались,
к тому же пометка КГИ и СГИ появляется в схеме на несоединенных выводах микрух.

Такое впечатление, что на монохромный разъём сперва выводили СГИ и КГИ, а затем КГИ заменили на некий микс из этих двух сигналов. Также на этот разъём зачем-то протащили 10 МГц.

Этот графики снимались со следующих точек:
СГИ - D92.8, D67.16
ССИ - D67.19
КГИ - D69.2, D92.9
КСИ - D69.5


А теперь наслаждаемся графиками.
И в архиве data данные в виде циферок.


PS Вообще, странно, что разрабы как-то прокосячили насчёт прерывания IRQ: оно и на девятке-то долго тянется (как раз период горизонтальной развёртки - 64 такта ЦП), а уж на семёрке вообще почти в 20 раз больше - замучаешся отбиваться от вызовов обработчика.

Post's attachments

Attachment icon data.zip 39.12 kb, 424 downloads since 2020-03-13 

Attachment icon scr-hor7.png 10.08 kb, 109 downloads since 2020-03-13 

Attachment icon scr-hor9.png 10.09 kb, 105 downloads since 2020-03-13 

Attachment icon scr-ver7.png 10.75 kb, 101 downloads since 2020-03-13 

Attachment icon scr-ver9.png 10.46 kb, 102 downloads since 2020-03-13 

15

Re: NMI, IRQ, развёртка и совмещение видеорежимов

> Также на этот разъём зачем-то протащили 10 МГц.
Интересно, не было ли тут какой-то задумки с чем-то вроде некинескопного дисплея?
Например, если взять очень много лампочек накаливания, вольт на 12, и сделать большой коммутатор,
то 10 МГц как раз будут сигналом тактирования для офигенного размера дисплея с отличными углами обзора...

16

Re: NMI, IRQ, развёртка и совмещение видеорежимов

Voldemar0 пишет:

10 МГц как раз будут сигналом тактирования для офигенного размера дисплея с отличными углами обзора...

Или стадионного табло. Или, что неплохо, конвертера в VGA.

17 Отредактировано garnizon (13-03-2020 21:55)

Re: NMI, IRQ, развёртка и совмещение видеорежимов

Так а разве табло 256x256:
" с одного из Агатов информация выводится на этот большой матричный экран, установленный в витрине у входа" не подходит?   http://agatcomp.ru/Reading/period/nj1987_05.djvu

От А.Голова:
"Ещё в компьютерном центре установили большой экран (метра 1,5х1,5). Какая-то ленинградская контора разработала плату видеоконтроллера для Агата и собрали экран из больших люминесцентных модулей 32х32 зелёных точки каждый производства ПО Светлана (из этих модулей делали экраны для разных военных систем). Мы сделали всякие демки и они крутились по кругу. Экран неплохо был виден с Дмитровского шоссе."

18

Re: NMI, IRQ, развёртка и совмещение видеорежимов

garnizon пишет:

Какая-то ленинградская контора разработала плату видеоконтроллера для Агата и собрали экран из больших люминесцентных модулей 32х32"

Ага, вот зачем в семерке вытащен 5 МГц на первый слот.

Voldemar0 пишет:

Вообще, странно, что разрабы как-то прокосячили насчёт прерывания IRQ: оно и на девятке-то долго тянется (как раз период горизонтальной развёртки - 64 такта ЦП), а уж на семёрке вообще почти в 20 раз больше - замучаешся отбиваться от вызовов обработчика.

Возможно, совмещение режимов изначально не планировалось, а когда его попросили сделать, то разработчики решили не трогать и так уж не слишком простой ДК семерки и придумали схему с перываниями. Только забыли, что IRQ обрабатывается ЦП несколько иначе.

Отбиваться-то от вызовов несложно: длительность запроса IRQ на семерке 1024 мкс ~ 1045 тактов ЦП. На входе в обработчик тупо ставится задержка, чтобы в сумме обработка занимала эти 1045 тактов. Проблема в том, что скважность 50% и получается, что и так небольшая производительность ЦП уполовинивается.

19

Re: NMI, IRQ, развёртка и совмещение видеорежимов

Voldemar0 пишет:

переключение режима происходит чуть левее центра последней строки графики в проге "магические фигуры"

Спасибо за фотки! Буду разбираться, почему у меня переключение происходит в другом месте.

Voldemar0 пишет:

Точка переключения немного вправо-влево подёргивается, видимо, тут какий-то программный джиттер (где-то точек 4-8 графики)

Проц переходит по вектору прерывания, когда заканчивается инструкция. Поэтому когда поступает сигнал IRQ, возможны 3 варианта: инструкция только что закончилась и сразу происходит переход, до конца инструкции остался 1 такт, и до конца инструкции осталось 2 такта. 1 такт = 2 пискеля MGR, поэтому дёргания в пределах 4 пикселей можно объяснить. Если они больше, то не знаю.

20

Re: NMI, IRQ, развёртка и совмещение видеорежимов

SnakE пишет:

когда поступает сигнал IRQ, возможны 3 варианта

Почему 3?
Самая длинная инструкция у 6502 - 7 тактов. По-моему, получается 7 вариантов, с задержкой вызова обработчика от 0 до 6 тактов.
Или точно известно, что в момент поступления IRQ процессор выполняет только 3 тактовые команды?

21

Re: NMI, IRQ, развёртка и совмещение видеорежимов

avivanov76 пишет:

Почему 3?

Так запомнилось с детства... :)
А какие команды выполняются дольше 3 тактов? Косвенная адресация по Y наверное долгая, но я уже деталей не помню, как микрокод работает. Но в общем да, если взять самую долгую команду в цикле мигания курсора и ожидания нажатия клавиши, и кол-во тактов умножить на два, получится кол-во пикселей MGR, на которое может прыгать точка переключения с графики на текст.

22

Re: NMI, IRQ, развёртка и совмещение видеорежимов

SnakE пишет:

А какие команды выполняются дольше 3 тактов?

Смотри здесь, и обрати внимание на раздел "Обработка прерываний".

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

23

Re: NMI, IRQ, развёртка и совмещение видеорежимов

И правда, всякие косвенные адресации долгие.

LeoN пишет:

обрати внимание на раздел "Обработка прерываний"

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

24

Re: NMI, IRQ, развёртка и совмещение видеорежимов

Я поиграл с таймингами. По дороге нашёл ошибку в эмуляторе, из-за которой обработка NMI могла прерываться обработчиком IRQ. Так вот, у IRQ семёрки скважность не 50%. Результаты, идентичные реалу, получаются, если у IRQ низкий уровень (активный) длится 830 тактов, и высокий (пауза) -- 2048-830=1218 тактов. Ну и каждая 10 пауза на 512 тактов короче, т.е. 1218-512=706 тактов. Средняя скважность получается 8300/(312*64)=42%

25

Re: NMI, IRQ, развёртка и совмещение видеорежимов

Вспомнился бородатый анекдот: "Если баланс не сошелся, значит, в нем ошибка. Если баланс сошелся, значит ошибок две."

На первых 9 импульсах IRQ у семерки совершенно точно скважность 50%.

Во-первых, это продиктовано схемой семерки. Пока значение счетчика строк находится в диапазоне от 0 до 287, этот счетчик не может на своих выходах выдавать другую скважность.
Счетчик считает импульсы, приходящие на вход. Первый импульс ставит разряд в 1, второй в 0. Длительность импульсов одинаковая, поэтому время нахождения в каждом состоянии тоже одинаковое.

А во-вторых, это было независимо измерено двумя человеками на реальном железе.

Поэтому я думаю, что надо продолжить поиск ошибок в эмуляторе. Вероятность, что в нем остались еще ошибки, намного выше, чем вероятность, что два человека слажали, а в "Агате" нарушаются принципы работы цифровых схем.


Кстати, как в эмуляторе определяется длительность этих сигналов? В тактах процессора?
Это неправильно. У ЦП свой тактовый генератор, у ДК свой.

1 такт ЦП это 1/14300000/14 = 0,979 мкс
Период IRQ 2048 мкс, это составляет 2048/0,979=2091,93 такта ЦП