Вложений: 1
Выбор и резервирование адресов для новых устройств
Всем привет ! У меня, как и у многоих разработчиков постоянно встает вопрос, как выбрать адрес для нового устройства. Что нам известно по теме адресации прортов Спектрума:
Когда в 1982 г. выпустили ZX Spectrum - применяли упрощенную адресацию. Для дешифрации использовали только младший байт адреса и анализировали только один бит для каждого устройства. Например, клавиатура выбиралась, когда бита адреса A0 = 0, Kempston джойстик, когда А5 = 0. Со временем устройств наделали много, адресация у них разная. Более подробнее может рассказать Black Cat. У него есть описание всех портов. Это очень полезный документ, когда мы хотим узнать адрес существующего устройства.
Но как нам быть, когда в новом устройстве нужно выбрать адрес ? Какие адреса свободные ? Кроме этого - процесс разработки нового устройства может быть долгим. А в это время несколько разработчиков аппаратуры для Спектрума могут планировать обращение к одинаковым портам. Какой же выход ?
1. Использовать схему блокировки портов как предложил Nemo для трех слотов ZX-BUS в KAY-2010. Потом я модернизировал эту схему для ускорения работы в плате для большего количества слотов. Эта схема применяется в моем проекте модульного компьютера с 7 слотами, KAY-2010 с 4 слотами, тройнике ZX-BUS TEE, новом Scoprione c 4 слотами.
Принцип такой - устройство анализирует шину адреса и если адрес ее, то она выставляет на выход IORQGE=1, который отключает прохождение сигнала IORQ на следующие слоты ZX-BUS. Это позволяет защитить устройства от выхода из строя, если они случайно среагируют на один адрес и выдадут данные на шину данных. Только тут тоже возникают проблемы, если устройство только на чтение или на запись или в фомировании IORQGE используется сигнал IORQ.
2. Поэтому, для формирования IORQGE анализировать только шину адреса и сигнал DOS=1 . Нельзя в формирователе использовать сигналы IORQ, M1, RD и WR !
3. Для дешифрации новых устройств использовать все 16 бит адреса.
4. Новые устройства устанавливать в более приоритетные слоты.
5. Выбрать младший адрес для новых устройств. Он будет общий, а различаться будут по старшему. Предлагаю использовать 5F, затем 9F. С одной стороны, он совпадает с адресом кемпстона A5=0, но джойстик адресуется как 1F или DF, а мышка DF. Поэтому 5F и 9F - свободные.
6. Распределить в этой теме по 2 адреса из старшего байта для основных разработчиков на этом форуме. Всего возможны 512 адресов. То есть этот диапазон резервируется за разработчиком и он сможет спроектировать два новых устройства с использованием по одному адресу или одно устройство с двумя адресами на плате.
7. Кто планирует сделать устройство должен написать занимаемые адреса, например, в этой теме. Начинать с адреса 5F: 005F,015F, 025F...FF5F. Затем 9F: 009F,019F, 029F...FF9F.
Это обеспечит возможность работы новых устройств в одном компьютере без конфликтов. Если у кого есть информация по другим свободным адресам - добавьте.
Список зарезервированных адресов устройств ввода и вывода:
005F и 015F - caro
025F и 035F - CHRV
045F и 055F - KOE
065F и 075F - Mick
085F и 095F - MVV
0A5F и 0B5F - TS-Labs
0C5F и 0D5F - zst
В редких случаях, если двух адресов для устройства мало или одновременно делается несколько устройств, можно зарезервировать 4,6,8 адресов. После изготовления устройства - эти адреса считаются использованными. И разработчик может зарезервировать следующие два адреса.
Надо добавить ники разработчиков, которых я забыл упомянуть.