Пока неясно, что такое
- управляющие флаги 0, 1
- запись в порт 015 (0Dh)
- чтение порта 7
Неясно, почему биты состояния отрисовываются на не месте. Может быть, порт 015 = сброс адреса ЗУ?
Пока неясно, что такое
- управляющие флаги 0, 1
- запись в порт 015 (0Dh)
- чтение порта 7
Неясно, почему биты состояния отрисовываются на не месте. Может быть, порт 015 = сброс адреса ЗУ?
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Где про управляющие флаги 0 и 1 говорится? Что за флаги?
В схеме есть У0Н и У1Н, которые включают низким уровнем соответствующую страницу РОН (0 или 1) через вывод в порты 17 и 16 соответственно, как написано в моем предыдущем сообщении.
Остальное попробую посмотреть.
---------- Post added at 14:39 ---------- Previous post was at 14:27 ----------
Вывод в порт 015 является сигналом "~Сброс флага", который идет на клавиатуру и сбрасывает там флаг ФКН, который вводится из порта 13.
Да, все биты, которые вводятся из портов 01 (ФПРН), 10 (ФПЕРВ), 12 (РЕДВ), 13 (ФКН), 14 (СДВВ), 15 (ДКВ), 16 (ДУПЛН), 17 (ЛИНВ) вводятся через старший бит байта.
ОК, что-то протормозил.
Пока можно сказать, что флаг 0 низким уровнем блокирует прохождение сигнала ЗСРВ в плате ГС, что запрещает загрузку выходного сдвигового регистра видео данными из ПЗУ знакогенератора и регистр продолжает гнать нули на выходе вместо изображения символов.
---------- Post added at 15:19 ---------- Previous post was at 15:12 ----------
То есть, например, если в момент строчного синхроимпульса процессор сбросит флаг 0, то это погасит строку (битовую). В символе 11 битовых строк - 8 для данных знакогенератора и 3 маркерных строки, когда активен сигнал МСВ (вводится через флаг 1).
По выводу флага 1 надо выяснять дальше...
Ну что ж, по поводу флага 0 надо добавить, что низким уровнем он также блокирует формирование сигнала РИН (режим индикации), который разрешает автоинкремент счетчика символов в ЗУ при индикации. Таким образом, при сброшенном флаге 0 процессор может спокойно работать с ЗУ.
Сброшенный флаг 1 разрешает стандартную блокировку отображения во время 3 маркерных строк (также запретом ЗСРВ) под символами.
Установленный флаг 1 включает режим 5 Гц запрета/разрешения отображения во время 3 маркерных строк. Т.е., очевидно разрешает мигать курсору. Но, похоже, что он должен включаться программно строго во время формирования МСВ (активен вдоль всех 3 битовых маркерных строк), но только на время отображения того символа, под которым курсор! Т.е., похоже, процессор как-то должен программно отслеживать (может по жесткой времянной привязке выполнения команд к времени отображения строки?) момент отображения курсора и в этот момент включать флаг 1, а потом сразу выключать?
Флаг 3, повторю, также блокировкой ЗСРВ, запрещает отображение всей символьной служебной строки.
---------- Post added at 17:28 ---------- Previous post was at 17:24 ----------
Сигнал чтения порта 7, повторю, никуда не идет. Проверил даже на реальной корзине 15ИЭ! То есть, скорее всего, чтение порта 7 - просто загрузка значения -1 (0xFF) в аккумулятор. Может рудимент какой-то старой корзины, но сейчас должен приводить просто к указанному результату.
Стараемся, взаимное спасибо за усилия по эмуляторам
Добавлю:
Отображение одного символа (10 точек строки - 10 импульсов СИН0) равно выполнению 2 команд. То есть для отображения курсора проц теоретически может считать строки символов (возможно ориентироваться по имульсам МСВ). При формировании МСВ в подстроке с курсором по каждому строчному синхроимпульсу можно загрузить счетчик номером столбца курсора (может плюс-минус 1 или 2), сделать столько двухкомандных декрементов по счетчику, потом выполнить что-то типа sfl #1, nop, cfl #1.
Но что-то я такого в прошивке не нахожу .
Чем-то похожий фрагмент:
Но что-то не сходится по описанной выше времянкеКод:000000C0: C9 sfl #$01 000000C1: 6C lla #$0c 000000C2: 85 sfc #$05 000000C3: C1 cfl #$01
Еще по поводу отображения спецсимволов:
Спецсимволы - те, у которых разряды 5 и 6 номера равны 0. Для такого символа в номере на входе знакогенератора устанавливается бит 6 (т.е. 0x00 становится 0x40 и т.д.), далее при РЕДВ=1 они гасятся (также через блокировку ЗСРВ), а при РЕДВ=0 мигают с частотой 5 Гц, как курсор.
Кстати, по поводу реальной эмуляции отображения - кто помнит, у 15ИЭ точки были явно видны. Выходной сигнал ГС стробируется по И с частотой точек, поэтому каждая точка отделяется от соседней по горизонтали таким же промежутком . А по вертикали промежуток, очевидно, обеспечивался большой скоростью вертикальной развертки из-за низкого числа строк по вертикали.
По поводу отображения курсора есть у меня смутное подозрение, что используется область памяти с адреса 0xF50. В нужную позицию при выводе просто записывается байт с кодом 127 (0x7F). Есть еще строка с адреса 0xFA0, она в коде также используется.
Для подобных украшений в MESS есть поддержка pixel shaders:
http://forums.bannister.org/ubbthrea...t&Number=69832
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)