2011-12-14 3 views
6

Я заметил из таблицы Zilog на Z80, что с группой инструкций ввода/вывода (IN и OUT) содержимое различных регистров часто помещается в верхние 8 бит адресной шины (в зависимости от команды), причем младшие 8 бит выбирают одно из 256 теоретически подключенных устройств.Недокументированная адресация 16-разрядного ввода-вывода на Z80

Мой вопрос в том, в чем смысл делать это с помощью этих верхних 8 бит? Я знаю, что некоторые машины используют это в чем-то, связанном с уменьшением сложности декодирования, но серьезно ли они используются для чего-либо? Я хочу реализовать инструкции точно так же, как предлагает Z80, но я не вижу смысла в реализации этого поведения, поскольку он нестандартен. Это поведение описано как недокументированное, поэтому, например, в «Системе Master Sega», мне это сойдет с рук? Большое спасибо.

С уважением, Фил Поттер

+1

Недокументированное, но техническое описание? – chance

+0

Извините, что я имел в виду, хотя это поведение является нормальным - адресация устройств ввода-вывода носит исключительно 8-битный характер. – PhilPotter1987

ответ

5

поведение полностью documented от Zilog (страницы 269-287).

Я полагаю, что некоторые периферийные устройства могут использовать верхние биты A8..A15 адресной шины как своего рода 8-битный параметр.

+0

Спасибо :-) Лучше эмулируйте это поведение в любом случае. – PhilPotter1987

+1

«Уменьшающаяся сложность декодирования», на которую указывает Фил, является наиболее распространенным использованием - использование одной адресной строки непосредственно, поскольку устройство разрешает/отключает более дешевое, чем логическое объединение нескольких, и не слишком расточительно, когда их 16. Клавиатуры на 8-битных микрофонах склонны использовать это поведение для обработки части адреса порта в качестве своего рода параметра, за исключением того, что вы включаете или отключаете линии клавиатуры с адресными линиями (так что это похоже на маску), и результат заканчивается тем, что логическое И всех затронутых линий (не специально, потому что плата была открытым коллектором). – Tommy

2

Некоторые системы используют верхние 8 бит в качестве адреса и младшие 8 бит в качестве параметра. Главным примером является CPC Amstrad. Это делает OUT (C), r почти единственной полезной инструкцией, хотя, конечно, теперь она действует как OUT (B), r; C часто используется в качестве параметра для удобства. Следствием является то, что OUT (п), А становится почти совершенно бесполезным, если не случится хотите отправить 0x34 в порт 0x34 и т.д.

+1

Amstrad на самом деле имеет довольно много [портов] (http://www.cpcwiki.eu/index.php/I/O_Port_Summary), где все 16 бит должны использоваться. –

0

На ZX Spectrum клавиатура может быть прочитана только чтение из порта 0xfe в то время как самые высокие 8 адресных линий выбирают одну из 8 групп из 5 клавиш. Например, если вы хотите сканировать ключи Q, W, E, R и T верхние 8 битов адресной шины должны быть 0xfb:

ld bc,#fbfe 
    in a,(c)  ; reading from port 0xfe while upper 8 address lines are 0xfb 

Это точно так же, как:

ld a,#fb 
    in a,(#fe)  ; reading from port 0xfe while upper 8 address lines are 0xfb 

некоторых игровых автоматов из 80-х общаться с сложения и с выводом более 8 бит за один раз с одной командой out - дополнительные биты считываются из верхних адресных строк.