- Точный момент кадрового прерывания в БК-0011М
-
? Alexander "Sandro" Tishin@ - 06.05.2020 09:03
Наконец-то нашлось время проверить по схеме электрической принципиальной. В общем, там всё просто, как валенок: на самом деле (как я и подозревал) там сделан простенький детектор поля гашения видеосигнала на двух триггерах. Конкретно, на первом триггере из D28 (К555ИЕ5, четырёхразрядный счётчик - делитель) и D3.2 (К555ТМ2, два D-триггера со сбросом и установкой, использован второй).
¤
Оба тактируются непосредственно выходом синхросмеси с 1801ВП1-37, но на самом деле важен только строчный синхроимпульс, так как во время кадрового детектор стоит в защёлкнутом состоянии и ждёт начала изображения. Тактирование происходит по заднему фронту, так как синхроимпульс -- инверсный.
¤
Логика работы: если между двумя строчными импульсами не было записи в пиксельные сдвиговые регистры, то запрос на прерывание взводится; если произошла запись (т.е. пошёл вывод на экран) -- то снимается. Иначе сохраняется предыдущее значение.
¤
То есть, если считать первую видимую строку изображения за №0, то прерывание начинается в конце ССИ, замыкающего строку 256, и запрос удерживается до первого видимого пикселя строки 0. Итого 62.66 строки, или примерно 4010 мкс. Прорва времени, за него можно очень много перерисовать. Это вам не всякие вредные машинки с прерыванием аккурат в начале видимой области ;)
¤
Тонкости:
Если включен короткий экран, то детектор сработает на ССИ, замыкающем 64 строку. Если включить короткий экран во время вывода нижних 192 строк, то прерывание произойдёт через одну полную строку (на втором ССИ). Таким образом можно вызвать несколько прерываний на кадр.
Бит в регистре 177662 непосредственно запрещает запись единицы во второй триггер. Таким образом, после разрешения кадровых прерываний прерывание произойдёт по первому фронту _любого_ синхросигнала. Включая выравнивающие импульсы на на КСИ. Таким образом тоже можно вызвать несколько прерываний, но уже на поле вертикального гашения.
¤
Отсюда следует, что если нужны нормальные кадровые прерывания, то оба этих бита лучше не изменять во время работы программы. Один раз настроил, и всё.
¤
¤
Ну, собственно, вот и вся теория :)
¤
Совсем точные времена в тактах напишу как-нибудь позже (не сегодня, сегодня буду программы писать).