Граждане программеры, возник вопрос: щас прорабатывается концепция хитрой железки, и вот возникла необходимость железяке передавать команды и параметры, железяка достаточно умная теоретически умеет прослушивать шину спекка и соответствующим образом реагировать. В общем нужна помощь искушонных в Z80 людей.
Так как планируется свести к минимуму колво портов в адресном пространстве машинки мы добавляем всего 2 порта 1-индекс внутреннего регистра, 2 непосредственно адресуемый регистр в связи с этим становиться неудобно передавать параметры,
так как получается следующего вида манипуляции
1. устанавливаем в первом порту номер регистра для параметра 1
2. записываем параметр в порт 2
и так для каждого регистра. плюс ситуация усугубляется еще и тем что параметры очень часто первышають 8 бит (то есть могут встречаться 2 байтные параметры)
Была одна из мыслей реализовать следующим образом передачу параметров.
ld h,код команды
ld l, первый 1 байтый параметр
push hl // записываем в стек
ld hl,параметр2
push hl
ld hl,параметр3
push hl
ld hl,параметр4
push hl
ld a,a // признак железяке что необходимо исполнить команду
// возвращаем стек в нормальное состояние
pop hl
pop hl
pop hl
pop hl
Железяка ведет себя следующим образом, у нее есть FIFO буфер длинной в 8 байт, железяка прослушивает шину и видет что процу попалась команда PUSH HL после чего следует 2 цикла записи в память - железка пихает их в FIFO буфер
Далее если процу попадается команда ld a,a она это дело воспринимает как признак для исполнения команды (код команды получается лежит в FIFO как самый старый байт). То есть метод как бы позволяет без проблем передавать 16 бит параметры и команды, но у него есть существенные недостатки
1. Юзается стек
2. если между инструкциями PUSH HL происходит прерыание и в обработчике прерываний тоже встречаются команды PUSH HL то естественно железяка засунет эти байты в FIFO очередь (то есть уже совсем левые параметры)
3. Нужно стек возвращать в исходное состояние - а это лишние траты тактов проца
В общем это я привел один из примеров что бы было видно что можно достаточно нетривиально поступать.
Основные требования к методу это
1. Скорость работы
2. возможность удобно передавать 2 байтные параметры (хоят тут выменя можете разубедить что вы 2 байтные параметры можете пердавать и байтику и вам это не мешает)
3. предусмотреть возможность что количество параметров может быть непостоянно
И еще так как тема относиться вроде бы к железяке добавлю что железяку тут не обсужаю, важно мнение программистов которые теоретически будут работать с данным делом и важна оптимальность взаимоотношения железяки и программаного обеспечения