Обдумывая установку CP/M в плату, обзываемую здесь "Ленинград-1", стал искать информацию о том, как аппаратно в отечественных промышленных клонах ZX-48K получали CP/M. Интересует как включается CP/M именно в ZX-Spectrum с 48K, т.к в 128-мых клонах для CP/M использовался стандартный второй экран на E000, включаемый битом D3 порта #7FFD (и расположеный в 7-й странице памяти).
Замечу, что Spectrum-128 в оригинале непригоден для CP/M, т.к у него в адресах 0...3FFF ПЗУ не отключается. Для CP/M в клонах добавляют какой-то порт для отключения ПЗУ и включения так называемого "теневого ОЗУ".
Оказалось, что из нескольких сотен клонов ZX, лишь в нескольких из них была CP/M. Изначально я знал, что CP/M использовалась в TIMEX, самом первом клоне ZX. Знал также, что CP/M была в Хоббите, т.к когда-то имел полную его документацию. Увы, информации о управляющих архитектурой портах TIMEX-а и Хоббита не нашёл.
Зато узнал, что CP/M была в Кворуме и нашёл описание его портов служащих для реконфигурации архитектуры под CP/M. Т.о в Кворуме-64 это делает порт #0, а в Кворуме-128 - порт #80FD. А в Балтике, где тоже есть CP/M, используется порт #7E (бит D7 отключает ПЗУ, бит D2 перемещает экран на C000).
В итоге, сделал вывод, что стандарта управляющих портов для реконфигурации архитектуры под CP/M не существует и каждый волен это делать как угодно, лишь бы не конфликтовало с портами Spectrum-128.
Также стал искать в каких расширенных клонах ZX есть режим 512*192. Оказалось таких клонов ещё меньше, чем клонов, имеющих реконфигуратор под CP/M. Во-первых, это тот же TIMEX-2048/2068. А из отечественных клонов режим 512*192 имеется лишь в Пентагоне-128 и в Байте-01.
Но и в этих клонах управление видео режимом оказалось разное. Т.е и на режим двойного разрешения стандарта нет.
В Пентагоне-128 режим 512*192 включается 1-м битом порта #EFF7. А в Байте 01 включение двойного разрешения осуществляется установкой 7-го бита в порте #05. Остальные биты порта #05 используются для установки цвета символов и фона для всего экрана. Адрес дополнительной экранной области такой же, как и в TIMEX (#6000), так что возможно и управляющий порт тот же.
Здесь указано, что режим 512*192 во всех клонах, где он реализован - монохромный, что свидетельствует о том, что используются не 2 параллельные банки, а лишь одна. Вторая плоскость читается вместо атрибутов, отсюда и монохромность. Потому-то у них адрес второй плоскости - другой.
Я же думаю о использовании двух параллельных банок, как в ОРИОНЕ, и экранный адрес второй плоскости - тот же самый, только физически она находится в другой банке ОЗУ и считывается одновременно. Причём атрибуты считываются обычным образом, т.к никаких вторжений в схему видеогенератора нет. И для раскраски для каждого знакоместа имеется байт атрибутов. Так и получается режим 512*192, но цветной.
Причём, если нужен только текст и скорость не важна, то аппаратно этот режим можно значительно упростить. Тогда используются не 2 сдвиговых регистра ИР9 на такте 14 МГЦ, а добавляется только один регистр ИР9 на такте 7 МГЦ для второй банки ОЗУ и мультиплексор коммутирующий выходы обоих ИР9-тых с частотой 14 МГЦ (плюс КП11 переключающий выходы RGBI, чтобы был один общий видео выход). При этом в одном полупериоде сигнала 14 МГЦ на видео-выход уходит сигнал считанный из одной банки ОЗУ, а в другом полупериоде из другой.
Разрешение по горизонтали удваивается, но для программирования (особенно графики) такой режим неудобен и заметно тормознут, хотя аппаратная доработка проста. Я делал такой режим в ОРИОНЕ в 1991 и имею соответствующий драйвер вывода текста. С точки зрения программирования лучше потратить на несколько TTL-корпусов больше и получить нормальную байтовую графику и отсутствие потери скорости при символах шириной в байт.
С другой стороны, если обе экранные области перенести в одну банку (тогда сокращается TPA, но отпадает тормозящая вывод коммутация банок) и отказаться от возможности считывания второй банки (тогда отпадает буфер чтения ИР22, D32 для второй банки), то доработка упрощается. Кроме доп.банки ОЗУ надо ИР9, две КП11 и несколько корпусов логики. При этом усложняется программирование, но упрощается апп.доработка.