Вот в этой теме есть полезная информация http://zx-pk.ru/threads/21212-tajmin...8-)/page2.html. Проведя эксперименты с эмулятором ZXMAK2 пришёл к выводу, что все клоны имеющие соотношение takt/int = 65184/1 и количество линий в кадре 291 с этими програмками не работают и похоже мне всё же приснилось, что они работали. Может какое-то влияние оказывает торможение памяти.
Остаётся не понятным код программы - что происходит когда отрабатывают 69888 тактов? Почему не доходит до rst 0? Тут какая то хитрость. Если тактов меньше и int приходит раньше, то доходт до rst 0.
код
Код:
ALIGNINT:
ld de, _align
push de
ld de, _try
push de
im 2
halt
rst 0 ; the interrupt handler never returns (it pops the last value off the stack) Обработчик прерывания никогда не возвращается (он выталкивает последнее значение из стека)
_try ; 46T+
push de ; 57T+
ld bc,32677 ; 67T+
call DELAY ; 32744T+
ld bc,(FRAMET) ; 32764T+
call DELAY ; 69884T+
nop ; 69888T+ - the idea seems to be that if we run for exactly FRAME tacts, we are perfectly aligned Идея состоит в том, что если Мы бежим точно за тактами FRAME, Мы идеально выровнены
pop de
rst 0 ; really crazy way to handle timing errors (e.g. it crashes on Scorpion due to unaccounted M1 delays) Действительно сумасшедший способ обработки временных ошибок (Например, он терпит крушение на Scorpion из-за неучтенных задержек M1)
_align ; 55T
inc de
halt
rst 0