1.
Порт #BF и сигнал DOSEN.JPG - схема дешифрации и собственно функционирования открытого системного порта IN/OUT #xxBF, а также изменения в работе сиграла выборки теневых портов TR-DOS и прочих - DOSEN в связи с работой порта #BF (введение принудительного включения теневых портов без переключения ПЗУ).
2.
Порты #xxF7 и #xxE7.JPG - собственно работа с диспетчером памяти как через порт АТМ #xFF7, через порт ZX-Evo #x7F7 (доступный только посредством порта #BF), а также параллельный доступ к диспетчеру памяти (как обычному - 1Мб в АТМ, так и расширенному до 4Мб в ZX-Evo - выбор переключается через порт #BF) через порт #xxE7.
3.
Расширение палитры с 64 до 4096 цветов.JPG - тут говорит все само за себя - посредством порта #BF включается расширенный доступ к палитре через порт теневой #xxFF (использование для адресации дополнительный линий цвета старших адресов A8-A15).
Еще раз опишу кратко порты по представленной схеме:
= = = = = = = = =
OUT #xxBF - открытый порт дополнительной системной конфигурации. Доступен всегда. После включения компьютера или после сброса все
=========
значения равны нулю.
D0 - сигнал DOSEN2 (управление скрытыми портами) =0 - все теневые порты выключены, если не были включены иным способом (через переход в ПЗУ TR-DOS). =1 - включаются абсолютно все теневые порты, в том числе становится доступен порт расширенного диспетчера памяти (адресация до 4Мб ОЗУ) #x7F7, который при ином способе открытия теневых портов остается недоступным для совместимости с классическим АТМ.
При этом DOSEN2 через логические элементы смешивается со стандартным сигналом DOSEN и дает новый сигнал DOSENX, который подводится ко всем микросхемам всюду вместо "старого" сигнала DOSEN, за единственным исключением - к микросхеме D10.14 (555КП11), отвечающей за смену конфигурации памяти (включение TR-DOS) по прежнему остается подключен DOSEN. Таким образом обеспечивается смена конфигурации только при включении теневых портов через TR-DOS, а при использовании порта #BF страницы ПЗУ подменяться не будут.
D1 - сигнал PGSN (управление альтернативным доступом к диспетчеру памяти). =0 - при альтернативном обращении к диспетчеру памяти через короткий (теневой) порт #xxE7 этот порт работает как обычный АТМ-диспетчер на 1Мб (как по #xFF7). =1 - порт #xxE7 работает как расширенный диспетчер ZX-Evo на 4Мб (как по #x7F7, но с сохранением короткой адресации).
D2-D4 - в АТМ не задействованы. Для совместимости с этим же портом в ZX-Evo всегда устанавливать их в 0.
D5 - сигнал EXT_PAL (управление расширенной палитрой). =0 - доступна для установки через запись в короткий (теневой) порт #FF только стандартная палитра (16 цветов из 64). =0 - включается доступ к расширенной палитре (16 цветов из 4096). При этом дополнительный данные в палитру передаются через адресные линии A8=A15 порта #xxFF (в противном случае эти адресные линии ни на что не влияют). Ранее установленные цвета палитры сохраняются вне зависимости от того, какой доступ к палитре включен.
D6-D7 - в АТМ не задействованы. Для совместимости с этим же портом в ZX-Evo всегда устанавливать их в 0.
= = = = = = = =
IN #xxBF - обратный предыдущему порт. Позволяет считывать ранее записанные значения. А поэтому:
=========
D0 - DOSEN2
D1 - PGSN
D2-D4 - в ATM всегда равны 0 (ZX-Evo могут быть разные значения)
D5 - EXT_PAL
D6-D7 всегда равны 0
Также остается добавить, что на этом же дешифраторе 555ИД7 по предложенной схеме разведен порт кемпстон-джойстика IN #1F (доступен только при выключенных теневых портах).
= = = = = = = = =
Порты (теневые) диспетчера памяти #xFF7 и #x7F7 - полностью соответствуют соответствующим портам в ZX-Evo.
========================================
При этом оба эти порта сидят на одном и том же сигнале с дешифратора #x7F7, только доступа к дополнительным линиям данных открывается через адрес A11=0. Он завязан на сигнал DOSEN2, который может его блокировать и тогда #x7F7 становится неотличим от стандартного АТМовского #xFF7. Таким образом расширение диспетчера памяти до 4Мб ОЗУ (через порты #xxF7, конечно) будет доступным только, если теневые порты включатся через порт #BF и никак не иначе.
Запись в порт #x7F7 меняет страницу в каком либо окне текущей (активной) карты памяти. При этом неактивная карта памяти остаётся неизменной. Какая карта памяти активна, задаёт бит 4 порта #7FFD.
Внимание! При записи в этот порт остаётся неизменным режим подмены младших бит номера страницы ОЗУ (бит «dos7ffd» порта #xFF7). Однако, запись в #x7F7 безусловно включает ОЗУ в окне (очищает бит «ramnrom» порта #xFF7)
= = = = = = = = =
Порты (теневые) параллельного доступа к диспетчеру памяти #FFE7 и #FEE7 - еще один способ обратиться к диспетчеру по короткой
============================================================
адресации.
Изначально на АТМ эти порты уже присутствую, т.е. их дешифрация разведена (D31.13 и D31.15 соответственно), но не задействована. Эти порты достались "в наследство" от старых версий АТМ (v6.xx), где они были нужны для управления контроллером XT-клавы. А сейчас просто их сигналы ведут " в никуда". Эти порты отличаются друг от друга адресной линией A8, которая, таким образом, мешает неполной адресации по младшей половине адресов. Поэтому для наших целей используются одновременно оба порта, чьи сигналы выборки слиты в единый сигнал /E7_PORT - единый адрес
OUT #xxE7.
При помощи A14 и A15 выбирается четверть адресного пространства, с которой будет работать диспетчер. A8-A13 никак не определены, но по умолчанию считается, что они равны 1, и тогда получаем следующие параллельные порты доступа к диспетчеру памяти:
#3FE7, #7FE7, #BFE7, #FFE7.
А вот программировать диспетчер памяти это порт может как по стандарту АТМ, так и по расширенному стандарту ZX-Evo в зависимости от сигнала PGSN
порта #xxBF, в обоих случаях не теряя преимуществ неполной адресации:
При PGSN=0 - он соответствует порту #xFF7:
D0-D5 - инверсный номер страницы ОЗУ или ПЗУ (от 0 до 63)
D6 - выбор между отображением ОЗУ или ПЗУ
D7 - коммутатор порта #7FFD
При этом работа в выбранной четверти адресного пространства идет только с первым (нижним) мегабайтом, вне зависимости от того, какие страницы какими портами раньше включались.
При PGSN=1 он соответствует порту #x7F7:
D0-D7 - инверсный номер страницы ОЗУ (от 0 до 255)
При этом в обязательном порядке в выбранной четверти адресного пространства включается именно ОЗУ, а коммутатор порта #7FFD отключается.
Через теневой порт #xFE7 можно использовать все варианты доступа к диспетчеру памяти вне зависимости от способа, каким образом были включены теневые порты - через TR-DOS или через порт #xxBF. Ну а тот софт, который использует короткую адресацию диспетчера в АТМ (это прежде всего xBIOS с его эмулятором ВГ93) теперь стало возможно достаточно легко переделать под работу со всеми 4Мб ОЗУ, просто осуществив замену порта и внедрив переключатель режимов через #BF.
= = = = = = = = = = = = =
Порт OUT #FF (теневой) - порт палитры (отключаемый через системный порт #xx77) м по совместительству системный регистр 1818ВГ93.
===================
Выбирается "стандартным" для ATM и ZX-Evo сигналом /UCS, однако работает в двух режимах, соответственно короткой и полной адресации, выбираемых, соответственно, сигналом EXT_PAL порта #xxBF.
При EXT_PAL=0 порт #FF выбирается только младшей половиной адресов (A0-A7), что соответствует стандартам ATM и ZX-Evo, а передаваемые ему данные о палитре принимают следующую форму:
(данные о цветах инверсны!!!)
D0 - B1
D1 - R1
D2 - 1 (для совместимости с ВГ93)
D3 - 1 (для совместимости с ВГ93)
D4 - G1
D5 - B0
D6 - R0
D7 - G0
В итоге имеем по 2 бита на каждый основной цвет (стандарт 222 или B0B1+R0R1+G0G1) или по 4 оттенка на каждый RGB - итого 4*4*4=64 цвета в палитре всего при 16 отображаемых одновременно.
При EXT_PAL=1 порт #FF (а точнее уже #xxFF) формируется как младшей половиной адресов A0-A7, так и старшей A8-A15. Последние выполняют функцию передачи данных о дополнительных битах RGB-цветов. В итоге выбор палитры будет выглядеть так:
(данные о цветах инверсны!!!)
D0 - B3
D1 - R3
D2 - 1 (для совместимости с ВГ93)
D3 - 1 (для совместимости с ВГ93)
D4 - G3
D5 - B2
D6 - R2
D7 - G2
A8 - B1
A9 - R1
A10 - 1 (для совместимости с ВГ93)
A11 - 1 (для совместимости с ВГ93)
A12 - G1
A13 - B0
A14 - R0
A15 - G0
В итоге имеем уже по 4 бита на каждый основной цвет (стандарт 444 или B0B1B2B3+R0R1R2R3+G0G1G2G3) или по 16 оттенков на каждый RGB - итого 16*16*16=4096 цвета в палитре всего при 16 отображаемых одновременно.
Расширенная адресация затрудняет, а в случае применения таких команд как OUTI/OTIR делает невозможным работу со стандартной АТМ-палитрой, но для этого и был введен блокиратор EXT_PAL, который после включения или сброса по умолчанию равен 0, что означает, что доступ к расширенной палитре закрыт, а без него порт #FF полностью совместим с "классическим" АТМ.
[свернуть]