С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Уточняю, что длина INT-а должна быть не менее чем длина самой длинной команды, а это, вроде бы, 23 такта.
По поводу LDIR-а, т.к. он может оперироват большущими блоками и выполняться куда больше чем 23 такта, то выполняется он так:
1. читается код команды (LDIR) из памяти
2. читается байт из (HL)
3. пишется байт в (DE)
4. увеличивается HL, DE, уменьшается BC
5. если BC = 0 то PC = PC + 2
6. Анализируется INT, если = 0 то выполняется прерывание
Таким образом, когда BC <> 0 счетчик PC не изменяется и повторно читается та же самая команда (LDIR) из памяти.
т.е. прерывание может быть обработано после выборки команды, но до ее выполнения? Можно ссылочку на источник информации? Просто в Z80 Family CPU User Manual (um0080.pdf) написано (Timing / Interrupt Request/Acknowledge Cycle): The CPU samples the interrupt signal (/INT) with the rising edge of the last clock cycle at the end of any instruction.
Ммм... Наврал, похоже. Прерывания разрешаются в конце действа. Точнее, после выполнения всех действий команды принимается в расчет установленный сигнал на ноге INT. С этим и связано упомянутое ранее требование к длине инта- если сигнал на ноге пропадет до конца выполнения текущей команды, то прерывание не засчитается. Вроде так...
Только так !!!
У фирменного спека есть прекрасная особенность ... Если сделать HALT в момент торможения, то есть когда отрисовывается пиксель экрана, то число тактов при окончании исполнения HALT будет делиться на 4 !!! В итоге, если вы хотите сделаьть мультиколорный эффект, то просто делаете один HALT в середине отрисовки экрана, и вы ввалитесь в прерывание чётко с первыйм тактом самого инта. Таким образом вы всегда будете синхронизированы с лучём, и можете рисовать на брдюре и на экране одновременно, - пиксель в пиксель ... На пентагоне такое сделать нельзя !!! Всегда будет несовпадение как минимум на 4 пикселя !!!
Original Speccy - BEST ...
AAA когда меня режут, я терплю, но когда дополняют, становится нестерпимо.
Hi Robus, вот чего никогда не мог сделать так это понять что ты хотел сказать с первого раза
Вот и тут пришлось мне 10 минут думать над этой фразой. На скоко я понимаю речь тут идет о том что если сделать HALT до того как ULA прочитает последний байт в текущем кадре то схема торможения проца выровняет последующие выполнения операций NOP таким образом что при поступлении сигнала прерывания процессор начнет выполнять процедуру обработчик прерывания всегда в один и тот же такт по отношению к кадровому синхроимпульсу и самому сигналу прерывания. Если же сденать HALT в нижней части border-a под paper-ом то никакого торможения и выравнивания выполнения NOP-ов не произойдет и учитывая что сигнал прерывания может прийти на 1,2,3,4 такте команды NOP можно ожидать различное время начала выполнения процедуры обработчика прерывания а значит и срыв синхронизации эфектов multicolora.
Но вот вопрос как по другому можно синхронизироватся? Порт 0xff ?
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)