AzAtom, и да, порядок выполнения DJNZ запоминается по названию самой мнемоники: Dec B, Jump if Not Zero
Вид для печати
AzAtom, и да, порядок выполнения DJNZ запоминается по названию самой мнемоники: Dec B, Jump if Not Zero
Ещё один вопрос назрел. Что будет, если в программе после префикса DD будет идти не обычная команда, а префикс FD или подряд 2-3 префикса DD? Просто переключится на другой регистр?
Если будут префиксы не DDCB, а наоборот CBDD, как отреагирует процессор?
Здесь http://emuverse.ru/wiki/Zilog_Z80/%D...B0%D0%BD%D0%B4 хорошо описаны команды, но не написано, как будет вести себя процессор при другой последовательности префиксов.
Прошу не отправлять проверять в эмуляторе.
По первому вопросу - да, будет на каждый префикс переключаться на другой регистр. Причем вся эта последовательность префиксов с командой за ней будет считаться как одна команда, которая не может быть прервана прерыванием.
По второму - CB DD нормальная команда Z80 - SET 3,L.
Точно, ступил с CB DD.
столкнулся тут с непоняткой на тему команды RETI у Z80, непонятно как она действует на флаги IFF, в одних справочниках пишут что "копируется IFF2 в IFF1", в других пишут что "не меняются", при этом в доке от Zilog написано
но у Ларченко и Родионова в книге написано что эти флаги копируются, в эмуле тогож Unreal исходниках в RETI тоже копия делаетсяЦитата:
However, this instruction does not enable interrupts that were disabled when the interrupt routine was entered. Before doing the RETI instruction, the enable interrupt instruction (EI) should be executed to allow recognition of interrupts after completion of the current service routine
как в реальности то?
В любом случае это важно только в обработчике немаскируемых прерываний с командой в конце RETI вместо RETN, т.к. при обработке маскируемых прерываний в оба флага IFF2 и IFF1 заносится 0. Дока от Zilog просто говорит, что RETI не включает прерывания, о копировании флагов ничего не сказано.
"All the ED xx RET? instructions copy IFF2 to IFF1, even RETI (ED 4D), which the official documentation does not note. The only difference between RETI and RETN is that peripheral devices which allow daisy-chaining of interrupts (eg the Z80 PIO) recognise the ED 4D sequence as 'end of interrupt' and then know that they can allow a further interrupt to be passed to the processor." Отсюда: https://wwwold.fizyka.umk.pl/~jacek/...0reference.htm
Я вот такую табличку забрал на https://vtrd.in/z80ops.html с clrhome.org
Удобная.
Добавлю вроде бы лучшую книжку, где про Z80 изложено наверное всё. Спасибо китайскому товарищу. Может кому будет не лень с гуглом всё это обрусить. :) Книжице уже более 15 лет...
Несложно догадаться, что RETI при выходе из маскируемого прерывания, если обработчик флаги не менял, просто опять запишет запрет на прерывания. Поэтому Z80 и требует EI перед RET/RETI. Если RETI используется для выхода из немаскируемого прерывания, то флаг прерывания восстановится таким, каким он был на старте обработчика. Ничего в IFF2 не копируется - в официальных доках ошибка. Об этом и другая информация про Z80 изложена на русском года 3 назад - буду рад добавочной информации и критическим замечаниям.