ZX PORTs LIST
A15 A14 A13 A12 A11 A10 A9 A8 : A7 A6 A5 A4 A3 A2 A1 A0 __________________________________________________________________ : X X X X X X X X : X X X X X X X X T T T T T T T T T ¦ <--- #XXFE порт клавиатуры ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ #XXFE ¦ ¦ ¦ 0 0* 0* ¦ ¦ 0 порт 1 0 ¦ порт #1F ¦ ¦клавиатуры #FFFD #BFFD KEMPSTON JOYSTIK ¦ ¦ AY-3-8910(12) ¦ ¦ 0 музыкальный сопроцессор L- X #7B,#FB 0 ------ порт #XXFD ¦ ¦ ¦ порт принтера AY-3-8910(12) 0 0 * 0 * (напр. ZX-LPRINT II-III) ¦ порт #7FFD переключатель порт #7FFD страниц RAM-DISK (128K) RAM-DISK (128K) |
A3 & A4 используются в Interface1
http://zx.pk.ru/showthread.php?t=9585
В фирменном ZX Spectrum (48) предусмотрена возможность блокировки порта #FE (физически реализованного в ULA), с помощью сигнала IORQULA. Этот сигнал выведен на краевой (системный) разъем ZX Spectrum (PIN 13B). Используя IORQULA внешние устройства могут блокировать (отключать) встроенные порты компьютера.
В начале 80-х ZX Spectrum стал «обрастать» периферией, но порты внешних устройств, как правило, вписывались в схему упрощенной адресации и не требовали блокировки встроенного в ZX Spectrum порта #FE. Однако отсутствие стандарта адресации портов приводило к появлению устройств использующих одни и те же адреса портов ввода-вывода. Чтобы избежать конфликтов многие производители использовали особенность физического подключения внешних устройств к ZX Spectrum: последовательное подключение к краевому разъему. Например, ZX Interface 1 подключался непосредственно к ZX Spectrum, к ZX Interface 1 подключался ZX Interface 2, а к ZX Interface 2 подключался ZX Printer.
Аналогичное решение использовалось в Beta Disk Interface который подключенный ближе к компьютеру, мог отключать порты устройств подключенных далее. Для этого использовался сигнал IORQ, который деактивировался (для устройств подключенных далее) при переходе в ПЗУ с TR-DOS и подключении портов ВГ93. Во время клонирования отечественные разработчики повторили и эту особенность фирменной схемы.
Отключение порта #FE ZX Spectrum (через IORQULA) у фирменного контроллера Beta Disk Interface не использовалось. Что касается портов AY и #7FFD, они не отключаются в фирменных ZX Spectrum 128 вообще и контроллерами Beta Disk Interface в частности. Разумеется, наши разработчики могли применять собственные решения, но как это было реализовано в оригинале, я рассказал выше.
---T-----T--T--T--T--T--T--T--T--T--T--T--T--T--T-----T----¬ ¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦ PORT¦PROC¦ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-----+----+ ¦ 0 0 0 0¦ 0 0 0 0¦ 1 1 1 1¦ 1 1 1 1¦ #FF ¦ I/O¦-АТРИБУТЫ,ВГ. ¦ ¦ ¦ - - - -¦ - - - -¦ ¦ ¦ ¦ 0 0 0 0¦ 0 0 0 0¦ 1 1 1 1¦ 1 1 1 0¦ #FE ¦ I/O¦- :)) ¦ ¦ ¦ ¦ -¦ ¦ ¦ ¦ X X X X¦ X X X X¦ 1 1 1 1¦ 1 1 1 0¦#XXFE¦ IN ¦-D0-D4-KEYBOARD ¦ - - - -¦ - - - -¦ ¦ -¦ ¦ ¦ ¦ 0 0 0 0¦ 0 0 0 0¦ 1 1 1 1¦ 1 0 1 1¦ #FB ¦ I/O¦-PRINTER,RS-232, ¦ ¦ ¦ - ¦ - ¦ ¦ ¦LPT-COVOX,CHACHE ¦ 0 0 0 0¦ 0 0 0 0¦ 0 1 1 1¦ 1 0 1 1¦ #7B ¦ OUT¦-PRINTER,COVOX-D9, ¦ ¦ ¦ - ¦ - ¦ ¦ ¦CHACHE ¦ 0 0 0 0¦ 0 0 0 0¦ 1 1 1 1¦ 0 1 1 1¦ #F7 ¦ I/O¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ 0 0 0 0¦ 0 0 0 0¦ 1 1 1 0¦ 0 1 1 1¦ #E7 ¦ I/O¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ 0 0 0 0¦ 0 0 0 0¦ 1 1 1 0¦ 1 1 1 1¦ #EF ¦ I/O¦-CDOS MODEM ¦ ¦ ¦ - -¦ - - -¦ ¦ ¦ ¦ 0 0 0 0¦ 0 0 0 0¦ 0 0 0 1¦ 1 1 1 1¦ #1F ¦ I/O¦-KEMPSTON, ¦ ¦ -¦ - - ¦ - -¦ ¦ ¦ ВГ ¦ 0 0 0 0¦ 0 0 0 0¦ 0 1 1 1¦ 1 1 1 1¦ #7F ¦ OUT¦-ВГ ¦ ¦ ¦ ¦ ¦ ¦ ¦ 0 0 0 0¦ 0 0 0 0¦ 0 0 0 0¦ 1 1 1 1¦ #0F ¦ OUT¦ -¬ ¦ ¦ ¦ - - -¦ - ¦ ¦ ¦ ¦ ¦ 0 0 0 0¦ 0 0 0 0¦ 0 0 0 1¦ 1 1 1 1¦(#1F)¦ OUT¦ -+->SNDRIVE L.O ¦ ¦ ¦ - - -¦ - ¦ ¦ ¦ ¦ 0 0 0 0¦ 0 0 0 0¦ 0 1 0 0¦ 1 1 1 1¦ #4F ¦ OUT¦ -T->SNDRIVE R.O ¦ ¦ ¦ - - -¦ - ¦ ¦ ¦ ¦ ¦ 0 0 0 0¦ 0 0 0 0¦ 0 1 0 1¦ 1 1 1 1¦ #5F ¦ I/O¦ -- ¦ ¦ ¦ - - -¦ - ¦ ¦ ¦ ¦ 0 0 0 0¦ 0 0 0 0¦ 0 0 1 1¦ 1 1 1 1¦ #3F ¦ I/O¦-ВГ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ 0 0 0 0¦ 0 0 0 0¦ 1 1 1 1¦ 1 1 0 1¦ #FD ¦ OUT¦-MEMORY 128 ¦ - - - ¦ - ¦ ¦ - ¦ ¦ ¦ ¦ 0 1 1 1¦ 1 1 1 1¦ 1 1 1 1¦ 1 1 0 1¦#7FFD¦ OUT¦- -"-^ ¦ - - ¦ ¦ ¦ - ¦ ¦ ¦ PENTAGON 512 ¦ 0 0 0 1¦ 1 1 1 1¦ 1 1 1 1¦ 1 1 0 1¦#1FFD¦ OUT¦-SCORPION 256 ¦ - - - ¦ - ¦ ¦ - ¦ ¦ ¦ ¦ 1 1 1 1¦ 1 1 0 1¦ 1 1 1 1¦ 1 1 0 1¦#FDFD¦ OUT¦-ATM 512 ¦ - - - ¦ - ¦ ¦ - ¦ ¦ ¦ ¦ 1 1 0 1¦ 1 1 1 1¦ 1 1 1 1¦ 1 1 0 1¦#DFFD¦ OUT¦-PROFI 1024 ¦ - - - ¦ - ¦ ¦ - ¦ ¦ ¦ ¦ 1 0 1 1¦ 1 1 1 1¦ 1 1 1 1¦ 1 1 0 1¦#BFFD¦ OUT¦-AY-CHIP WR ¦ - - - ¦ - ¦ ¦ - ¦ ¦ ¦ ¦ 1 1 1 1¦ 1 1 1 1¦ 1 1 1 1¦ 1 1 0 1¦#FFFD¦ I/O¦-AY-CHIP SEL,RD ¦ - - - ¦ - ¦ ¦ - ¦ ¦ ¦ ¦ 1 1 1 0¦ 1 1 1 1¦ 1 1 1 1¦ 0 1 1 1¦#EFF7¦ I/O¦-GLUCK PORT ¦ - - - -¦ - - - -¦ ¦ - ¦ ¦ ¦ ¦ 1 0 1 1¦ 1 1 1 1¦ 1 1 1 1¦ 0 1 1 1¦#BFF7¦ I/O¦-CMOS DATA ¦ - - - -¦ - - - -¦ ¦ - ¦ ¦ ¦ ¦ 1 1 0 1¦ 1 1 1 1¦ 1 1 1 1¦ 0 1 1 1¦#DFF7¦ I/O¦-CMOS REG SEL ¦ - - - -¦ - - - -¦ ¦ - ¦ ¦ ¦ ¦ 1 1 1 1¦ 1 0 1 0¦ 1 1 0 1¦ 1 1 1 1¦#FADF¦ IN ¦-K. MOUSE КHОПКИ ¦ ¦ - -¦ - - ¦ - -¦ ¦ ¦ ¦ 1 1 1 1¦ 1 0 1 1¦ 1 1 0 1¦ 1 1 1 1¦#FBDF¦ IN ¦-"-КООРДИHАТА X ¦ ¦ - -¦ - - ¦ - -¦ ¦ ¦ ¦ 1 1 1 1¦ 1 1 1 1¦ 1 1 0 1¦ 1 1 1 1¦#FFDF¦ IN ¦-"-КООРДИHАТА Y ¦ ¦ - -¦ - - ¦ - -¦ ¦ ¦ L-----------+-----------+-----------+-----------¦-----+----- |
PORTs
Started - х.з. Last updete - 21 oct 2006
Время от времени буду расширять и дополнять...
Порт #FE
Обслуживание клавиатуры , магнитофона , динамика , бордюра .
. |
DEC | HEX | BIN | |||||||||||||||
A15 | A14 | A13 | A12 | A11 | A10 | A9 | A8 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | |||
Порт | 254 | #FE | * | * | * | * | * | * | * | * | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
Дешифруется по A0 .
Двунапрвленный порт , ввод и вывод реализован на раздельных микросхемах .
Значение битов при вводе данных -- D0-D4 - линии ответа клавиатуры (с.м. таблицу) , D6 - данные от магнитофона . D5 и D7 не используются .
Порты линий опроса
Линии опр. |
Линии ответа | DEC | HEX | Порты линий опроса BIN | |||||||||||||||||||
KD4 | KD3 | KD2 | KD1 | KD0 | A15 | A14 | A13 | A12 | A11 | A10 | A9 | A8 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | |||
KA8 | V | C | X | Z | CS | 65278 | #FEFE | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
KA9 | G | F | D | S | A | 65022 | #FDFE | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
KA10 | T | R | E | W | Q | 64510 | #FBFE | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
KA11 | 5 | 4 | 3 | 2 | 1 | 63486 | #F7FE | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
KA12 | 6 | 7 | 8 | 9 | 0 | 61438 | #EFFE | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
KA13 | Y | U | I | O | P | 57342 | #DFFE | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
KA14 | H | J | K | L | EN | 49150 | #BFFE | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
KA15 | B | N | M | SS | SP | 32766 | #7FFE | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
Управлением опроса клавиатуры занимается спец. подпрограмма ПЗУ (с.м. описание ПЗУ) , которая последовательно цеклически меняет старшие биты (A8-A15) порта #FE .
Значение битов при выводе данных -- D0-D2 - цвет бордюра (с.м. таблицу) , D3 - данные на магнитофон , D4 - динамик . D5 , D6 , D7 не используются .
Выбор цвета бордюра
Цвет |
D2
|
D1
|
D0
|
BLACK |
0
|
0
|
0
|
BLUE |
0
|
0
|
1
|
RED |
0
|
1
|
0
|
MAGENTA |
0
|
1
|
1
|
GREEN |
1
|
0
|
0
|
CYAN |
1
|
0
|
1
|
YELLOW |
1
|
1
|
0
|
WHITE |
1
|
1
|
1
|
Порт #1F (#DF)
Kempston Joystick .
. |
DEC | HEX | BIN | |||||||||||||||
A15 | A14 | A13 | A12 | A11 | A10 | A9 | A8 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | |||
Порт | 31 | #1F | X | X | X | X | X | X | X | X | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
Дешифруется по A5 .
Значение битов - D0 LEFT , D1 RIGHT , D2 UP , D3 DOWN , D4 FIRE , D5 D6 D7 не используются , но по стандарту сних должны считываться нули .
http://zx.pk.ru/showpost.php?p=285589&postcount=152
http://zx.pk.ru/showpost.php?p=285646&postcount=154
Порт #FF
Чтение значения атрибутов .
. |
DEC | HEX | BIN | |||||||||||||||
A15 | A14 | A13 | A12 | A11 | A10 | A9 | A8 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | |||
Порт | 255 | #FF | x | x | x | x | x | x | x | x | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Не дешифруется !
В фирменых компьютерах этот порт не дешифруется (его просто нет) , но из-за особенностей архитектуры (шина данных VRAM подключена к шине данных пpоцессоpа чеpез резисторы 470 Ом) при чтении из этого порта , на самом деле считываются данные с ш.д. VRAM которые считывались видео контроллером в последнюю очередь . Обычно это значение атрибута отображаемого в данный момент времени , или значение #FF если контроллер не занят выводом графики .
В наших клонах ш. д. VRAM и пpоцессоpа разделена буфеpным регистром , поэтому из пустого поpта считывается всегда #FF (т.к. шина данных пpоцессоpа подтянута pезистоpами к +5V и ни что на неё не влияет).
Несколько игровых прграмм используют этот порт для синхронизации вывода графики на экран , вследствии чего не работают на клонах . (скорее всего вы найдёте эти программы уже в пропатченном виде , работоспособные на любых клонах)
Порт #FD / #7FFD
Системный порт 128к.
. |
DEC | HEX | BIN | |||||||||||||||
A15 | A14 | A13 | A12 | A11 | A10 | A9 | A8 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | |||
Порт | 253 | #FD | * | * | * | * | * | * | * | * | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
Порт | 32765 | #7FFD | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
Дешифруется по A1 и A15 .
Значение битов .
D0 D1 D2 выбор страницы впечатываемой по адресу C000-FFFFh (с.м. таблицу ниже) . D3 выбор экранной области для видео контроллера (RAM-5/RAM-7). D4 выбор версии ПЗУ 0=128 , 1=48 . D5 блокировка системного порта 0=none , 1=blocking . D6 , D7 не используются .
Z80 | 7FFDh | PAGE | RAM Sel | ||||||
A15 | A14 | bit 2 | bit 1 | bit 0 | № | A16M | A15M | A14M | |
0 | 0 | - | - | - | ROM | 0 | 0 | 0 | |
0 | 1 | - | - | - | RAM-5 | 1 | 0 | 1 | |
1 | 0 | - | - | - | RAM-2 | 0 | 1 | 0 | |
0 | 1 | 1 | 0 | 0 | 0 | RAM-0 | 0 | 0 | 0 |
1 | 1 | 1 | 0 | 0 | 1 | RAM-1 | 0 | 0 | 1 |
2 | 1 | 1 | 0 | 1 | 0 | RAM-2 | 0 | 1 | 0 |
3 | 1 | 1 | 0 | 1 | 1 | RAM-3 | 0 | 1 | 1 |
4 | 1 | 1 | 1 | 0 | 0 | RAM-4 | 1 | 0 | 0 |
5 | 1 | 1 | 1 | 0 | 1 | RAM-5 | 1 | 0 | 1 |
6 | 1 | 1 | 1 | 1 | 0 | RAM-6 | 1 | 1 | 0 |
7 | 1 | 1 | 1 | 1 | 1 | RAM-7 | 1 | 1 | 1 |
Запись в страницу ROM заблокированна , поэтому попытка записи в ROM не изменит страницу RAM-0 .
Порт #EFF7 (Gluck)
. |
DEC | HEX | BIN | |||||||||||||||
A15 | A14 | A13 | A12 | A11 | A10 | A9 | A8 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | |||
Порт | 61431 | #EFF7 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
Дешифруется по A3,A12,A13,A14,A15 .
bit 0 - Hardware Multicolor
(0- выключено, 1- включено)
Атрибут на байт (два цвета на каждые восемь точек по горизонтали). Экранная область в памяти - #4000-57FF (стандартный экран без атрибутов). Область атрибутов - #6000-77FF . Биты 6 и 7 в атрибутах отвечают за "яркость бумаги" и "яркость чернил" . Адреса второго экрана - #C000-C800 , адреса атрибутов второго экрана #E000-E800 .
bit1 - 512x192
(0- выключено, 1- включено)
Однобитный (без атрибутов) расширенный по горизонтали экран . Экранная область чётных (0-62) столбцов - #4000-57FF , не чётных (1-63) столбцов - #6000-77FF . Адреса второго экрана - #C000-C800 и #E000-E800 .
bit2 - Disable Memory Above 128k
(0- нет блокировки, 1- блокированна)
Блокирует память выше 128к .
bit3 - Read/Onli Cahe (старое назначение - TURBO CPU)
(0- запись разрешена, 1- запись запрещена)
Блокировка записи в кеш .
bit4 - GIGASCREEN
Аппаратное цеклическое переключение между экранными областями памяти (первой и второй). Можно использовать совместно с битами 0 или 1 .
bit5 - DMA Sound Blaster
Звуковая карта использующая возможности видео контроллера для аппаратного проигрывания сэмплов .
bit6 - 384x304
Без бордюрный видео режим .
bit7 - CMOC
Часы реального времени . Запись/чтение данных через порт #BFF7 . Выбор регистров через порт #DFF7 .
. |
DEC | HEX | BIN | |||||||||||||||
A15 | A14 | A13 | A12 | A11 | A10 | A9 | A8 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | |||
Порт | 61431 | #EFF7 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
Порт | 49143 | #BFF7 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
Порт | 57335 | #DFF7 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |