Так вот, карта памяти следующая. По сбросу включен Mode_3, который на самом деле является стандартным специалистом. При этом, порт клавиатуры расположен по адресам F800-FFFF, весь набор портов по адресам F000-F7FF, 8 устройств по 4 ячейки. При этом, клавиатурный ППА доступен так же по адреса F000-F003 и так далее до F7E0..F7E3. Для аналогии с режимом МХа, предлагаю использовать именно F7E0..F7FF для обращения к портам. Младшие 32КБ занимает ПЗУ, которое может быть отключено (по сбросу оно включается автоматически). Остальную область занимает основное ОЗУ с экраном. ПЗУ в Mode_3 может быть отключено... Сам регистр режимов доступен по адресам F7FC-F7FF в режиме Mode_3 и FFFC-FFFF в остальных 3х (Mode_0, Mode_1 и Mode_2 - это режимы МХа). При этом, Mode_0 соответствует выключению ПЗУ и RAM диска в режиме МХ, Mode_1 соответствет включению RAM диска в режиме МХ (при этом я пока сохранил дешифрацию МХа: диск занимает с 0000 по FFBF, в своем скорее всего порежу диск до 0000-FEFF, что упростит схему дешифратора), а Mode_2 соответствет включению внутреннего ПЗУ в режиме МХ. Замечу, что ПЗУ стоит на 64КБ (можно и больше, но уже странично), а в карте процессора он занимает всего 32КБ. Т.е., в ПЗУ 2 страницы по 32КБ и каждая из них соответствет своему режиму (т.е., для стандартного это 0000-7FFF в ПЗУ, а для МХа - 8000-FFFF), что позволяет записывать уникальный софт для каждого режима.
Процесс загрузки я уже оглашал: по сбросу режим стандартного спеца, там пускается софт выбора режима, по типу спектрума128, если выбирается стандартный - то грузится система с карты (или ПЗУ, если карта не вставлена, круто же?) и ПЗУ отключается. Либо формируется шлюз в окне процессора (FFC0-FFDF), который переключает режим на Mode_2 и прыгает в 0000, запуская ПЗУ в режиме МХа. Как видно, все просто и логично. Думаю, карту памяти все представили и рисовать ее нет необходимости. С портами тоже все прозрачно.
.....
Карта памяти уже обсуждалась мной ранее, я лишь напомню ее области:
[Режим 0: MX RAM (запись в FFFCH)]
0000H - FFDFH = Основное ОЗУ.
FFE0H - FFFFH = Порты ввода-вывода
[Режим 1: MX EXT RAM (запись в FFFDH)]
0000H - FFBFH = Дополнительное ОЗУ
FFC0H - FFDFH = Основное ОЗУ (шлюз)
FFE0H - FFFFH = Порты ввода-вывода
[Режим 2: MX ROM (запись в FFFEH)]
0000H - 7FFFH = ПЗУ МХа, включая систему в первых 16КБ
8000H - FFDFH = Основное ОЗУ
FFE0H - FFFFH = Порты ввода-вывода
[Режим 3: STD (запись в FFFFH или по сбросу)]
0000H - 7FFFH = ПЗУ (секция STD) или основное ОЗУ, управление: FFFAH
8000H - EFFFH = Основное ОЗУ
F000H - FFFFH = Порты ввода-вывода, причем в области F800H-FFFFH блокируется на ППА клавиатуры
.....
По сбросу там 0, т.е. ROM включен и 5 цвет выбран.
ПЗУ для текущего варианта. Монитор v4 (который мы пользовали на кружке). Выход в него стандартный - СТР+ВК (надо будет пофиксить для автозапуска, так как без магнитофона автозагрузка не нужна). Расширенные директивы:
{B} - Basic "Практик"
{E} - Редактор текстов "Практик" (aka ED^7000)
{A} - Ассемблер "Микрон", адаптированный на работу с редактором "Практик" и перенесенный в 8000H
{Z} - Дизассемблер "Микрон", адаптированный на работу с редактором "Практик" и перенесенный в 8000H
{X} - Переход в режим МХ.
Ассемблер и дизассемблер что-то партачат - там со стеком чтото я перемудрил видимо, при работе на оригинальном Спеце он работает а вот на моем (с ОЗУ заместо ПЗУ) подвисает, потом пофиксю. Так что не пользуйте их. Остальное работает нормально. ОЗУ не портится при сбросе.
Карта памяти в режиме стандарт:
0000H - 7FFFH = ROM/RAM
8000H - EFFFH = RAM
F000H - F7FFH = IOPs
F800H - FFFFH = SYSPPA (IOP.#0)
ПЗУ нужно только для старта (там же я держу бэйсик, редактор и асм с дасмом, загружая их оттуда в ОЗУ по расширенным директивам Монитора v4), оно же загружает монитор и ПСПЗУ в родные адреса.
..............
Итак, поменял я 561ИЕ10 в строке на связку 1533ИЕ10. Глюк в цвете фона сразу же пропал! Более того, я выяснил, что за глюк с точками слева и пропавшими точками справа! Оказалось, 555ИР16 (сдвиг) пишет по спаду, а ТМ8 (атрибуты) по фронту. Как итог - полточки рассинхронизации + задержки в логике = почти на точку опаздывал сдвиг относительно атрибутов! Атрибуты были строго на своем месте, а точки опаздывали... Так что этот узел надо переделать. Подобрать более внятные регистры (один на сдвиг и один на хранение атрибутов), желательно полностью синхронные... Кстати, можно сделать бордюр как у спектрума...