Инструкция Intel 8080: OUT

Я пытаюсь эмулировать набор инструкций Intel 8080, и я застрял на этой инструкции OUT D8, который согласно книге Intel 8080/8085 на языке программирования ассемблера говорит, что

OUT Инструкция помещает содержимое аккумулятора на восьмибитную шину данных, а номер выбранного порта на шестнадцатибитную адресную шину. Поскольку число портов варьируется от 0 до 255, номер порта дублируется на адресной шине.

Дело в том, что я не понимаю, что это делает. Может ли кто-нибудь объяснить мне это или направить меня к статье или книге, которая это объясняет.

2 ответа

Можно подумать, что 8080 и его производные имеют 17-разрядную адресную шину, а не 16-разрядную шину, на которую обычно ссылаются. Верхний бит этой адресной шины является строкой запроса ввода / вывода микросхемы (IORQ).

При использовании обычных нагрузок и сохранений старший бит всегда сбрасывается. Когда вы выполняете вход или выход, верхний бит всегда установлен.

Intel назвала эту линию и ожидала, что она будет использоваться для связи с периферийными микросхемами, отсюда и название, гораздо более ограниченная форма доступной адресации, расширенные затраты на доступ и тот факт, что ни счетчик программы, ни указатель стека не могут указывать на это. Площадь адресного пространства.

В связи с этим у Intel возникает проблема, заключающаяся в том, что им нужно заполнить 16-битную адресную шину, но они принимают только 8-битный параметр. Что они на самом деле делают, так это загружают аккумулятор в верхние 8 бит. Так что, если у вас было:

LD A, 0xfe
OUT (0xdc)

Затем значение 0xfe будет выведено на адрес порта 0xfedc.

(кроме: извинения за синтаксис Zilog, а не Intel; возможно, интересно, Z80 добавляет кучу инструкций, таких как OUT (C), A которые действительно сбрасывают весь BC на адресную шину, а не просто в C, и большинство производителей микросхем Z80 были совершенно счастливы использовать полный 16-битный адрес, так как это позволило им использовать упрощенную логику компонента, к которому обращается, если эта адресная строка низкий, но при этом оставаясь приличным диапазоном для внешних периферийных устройств)

Для подражания это значит
когда порты IN/OUT существуют в эмулируемом устройстве - простые данные IN/OUT в порту
когда эмулируемое устройство имеет подключенные к памяти порты -
затем
OUT AB -> в STA ABAB
IN 12 -> LDAX 1212

для разработчика аппаратного обеспечения это означает, что когда выполняется вход / выход, адресная шина имеет a15-8 = a7-a0 и =portNum

Другие вопросы по тегам