Господа, я рад, что мне удалось слегка порвать ваши шаблоны, и вы наконец прониклись
. И так, подитожим что мы имеем в сухом остатке:
1) При использовании короткой адресации порта #7FFD командой out(#fd), a с установленными старшими разрядами аккумулятора D7=0, D6=1 невозможно определить к какой странице обращается программа - к n, или к 8+n, т.к. конечный результат определяется только архитектурой компьютера. Т.е. в компьютере с ОЗУ 128к обращение произойдёт к странице n, а в комьютере с ОЗУ по стандарту Pentagon512 обращение произойдёт к странице 8+n;
2) Такой дуализм приводит к коллизиям, если совместно с короткой адресацией #7FFD применяется полная адресация.
А теперь о сути
- то, что вопрос не решаем аппаратно, не значит что он не решаем вообще
. Но решение лежит не в аппаратной плоскости, а в плоскости стандартизации
. Предлагаю обратиться к опыту коллег с WoS, решивших в своё время вопрос о стандартизации использования в софте короткой адресации порта #7FFD. Напомню суть их решения: раньше кодеры, при использовании out(#fd), a выставляли D6 аккумулятора как бог на душу положит, что приводило к конфликтам с многочисленными клонами, в т.ч. с ZX Spectrum +3. Поэтому они установили стандарт использования out(#fd), a , жёстко определяющий для старших разрядов аккумулятора D7=0, D6=1. Таким образом весь софт, не удовлетворявший этому стандарту становился нелегитимным и подлежал переделке
. И они таки его переделывали, в т.ч. и наши Пентовые демки
.
Теперь вернёмся к нашим баранам
. Как справедливо заметил noleg, софта приводящего к коллизиям довольно таки мало, а значит стандартизация этого вопроса не приведёт к очень большим проблемам и затратам. Полагаю, основная масса софта, использующего out(#fd), a - это программы требующие быстрой перерисовки экрана методом копирования информации со страниц устанавливаемых в окно CPU3 на страницу 5. Собственно, на более быстром переключении страниц с помощью короткой адресации #7FFD в окне CPU3 и происходит экономия времени. Теперь, собсно, о сути предлагаемого стандарта:
1) Целью данного стандарта является разрешение вопроса безконфликтного исполнения программ использующих out(#fd), a на компьютерах с моделью памяти ZX128 и Pentagon512.
2) Суть стандарта состоит в:
- запрете использования в связанных процедурах разных способов адресации #7FFD. Связанными процедурами при этом считаются процедуры, предполагающие использование одних и тех же страниц памяти в окне CPU3;
- запрете использования при видеовыводе любой другой страницы кроме 5;
- запрете обращения к странице 5 через окно CPU3 посредством out(#fd), a.
Как видите, правила соглашения вполне естественны для программ использующих out(#fd), a. Такое соглашение полностью исключит коллизии, возникающие из-за связанного обращения к #7FFD с помощью короткой и полной адресации.
Теперь о выводах, которые следуют из такого стандарта:
1) В клоне Pentagon512 отпадает необходимость в переключении размера ОЗУ 512k/128k для программ совместимых с ZX128;
2) Программы для ZX128, использующие out(#fd), a не могут размещаться одной непрерывной областью в памяти Pentagon512, в связи с чем, при использовании в Pentagon512 RAM-диска, необходима корректировка его драйвера для изменения используемых им страниц на 0, 1, 3, 4, 6, 7, 10, 13, 16-31*;
3) Программы для Pentagon512, соответствующие этому стандарту могут исполняться расширенными ZX Spectrum 128 использующими наиболее простой способ расширения памяти с помощью внешних устройств, подключаемых к краевому разъёму, и отключением внутренней памяти, используемой исключительно CPU, что значительно расширяет аудиторию потребителей таких программ.
* Дополнительное соглашение:
1) В связи с неизбежностью переделки драйвера RAM-диска, предлагаю заодно поменять весовые коэффициенты старших разрядов #7FFD:
A17'=D7 #7FFD
A18'=D6 #7FFD
Таким образом в новой нумерации RAM-диск 384k будет использовать страницы: 0, 1, 3, 4, 6, 7, 8-15, 18, 21, 24-31;
2) Принять в качестве кроссплатформенного стандарта для программ объёмом 256k, стандарт, уже используемый в ZXM-Phoenix, и позволяющий исполнять без переделки программы на платформах SKAY(ZXM-Phoenix), KAY, Pentagon512:
A14'=D0 #7FFD
A15'=D1 #7FFD
A16'=D2 #7FFD
A17'=D7 #7FFD
В этом случае для Pentagon512 RAM-диск 256k будет использовать страницы: 8-15, 24-31;