Недокументированная 16-битная адресация ввода / вывода на Z80 - PullRequest
6 голосов
/ 14 декабря 2011

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

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

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

Ответы [ 3 ]

5 голосов
/ 14 декабря 2011

Поведение полностью задокументировано Зилогом (стр. 269-287).

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

2 голосов
/ 20 декабря 2012

Некоторые системы используют старшие 8 бит в качестве адреса и младшие 8 бит в качестве параметра.Амстрадский КТК является основным примером.Это делает OUT (C), r почти единственной полезной инструкцией, хотя, конечно, теперь она фактически действует как OUT (B), r;C часто используется в качестве параметра для удобства.Следствием этого является то, что OUT (n), A становится практически полностью бесполезным, если только вы не хотите отправить 0x34 на порт 0x34 и т. Д.

0 голосов
/ 04 августа 2017

На 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 - дополнительные биты считываются из верхних адресных строк.

...