Как всем известно, каноническая длина INT составляет 71680 тактов для Pentagon и 69888 тактов для Scorpion и оригинального Spectrum. Я написал следующий позорный код, печатающий при вызове из Basic число, пропорциональное кол.-ву тактов:
PHP код:
di
ld hl, $8000
push hl: pop de: inc de
ld bc, 257
ld a, $c3
ld (hl), a
ldir
ld hl, INT
ld de, $c3c3
ld bc, INTLEN
ldir
ld a, $80
ld i, a
im 2
ei
ld bc, 0
ld a, 1
halt
.loop
inc bc ; 6
jr .loop ; 12
INT
or a ; 4
jr z, .exit1 ; 7
dec a ; 4
.exit2
ei ; 4
ret ; 10
.exit1
pop hl
im 1
jr .exit2
INTLEN = $ - INT
Запускаю в Unreal с моделью ULA = Pentagon. Получаю 3980. Где-то еще я слышал, что на уход в прерывание z80 тратит 19 таков.
Начинаем считать длину INT: 3980 x (6+12) + (4+7+4+4+10) + 19 = 3980x18+29+19 =71688 вместо 71680.
Вопрос к гуру мультиколоров: Что я делаю не так?