Этот тест вообще сбрасывается почти везде и почти по любому поводу.
Такой пользовательский интерфейс! :)
Вид для печати
так всетаки, есть у кого-то еще реальный пентагон?
Собсна,все отличие в добавлении 10-тактовой jp $ + 3 в обработчик прерывания. Причина видится мне в том, что в обработчике используются нечетнотактовые pop hl и or 4. Похоже, jp $ + 3 это компенисрует. Сделано методом тыка и отлажено в Unreal.
Код:ld (exit_addr),hl
ld bc,#06ff
.return:
xor a
ld hl,.loop
ei
.loop:
dec a
jp (hl)
.isr:
pop hl
ld e,(hl)
rl e
rla
ld e,d
ld d,a
sub e
sub c
sbc a,a
or 4
dec b
and b
jp $ + 3 ; 10 for even M1 machines
jr nz,.return
inc hl ; 6
exit_addr = $ + 1
jp #0000 ; 10
Посмотрел схему Пентагона. Процессор имеет приоритет над видео-контроллером. Как только активен MREQ и на шине адреса - оперативка, в следующем такте происходит чтение памяти процессором. Все остальное время каждый такт происходит по очереди чтение атрибутов или пикселей. Так как они считываются асинхронно с границей знакоместа, то сначала они помещаются в буферные регистры, а на границе знакоместа переносятся в регистры вывода, а оттуда попиксельно выталкиваются на экран.
Исходя из выше-сказанного, мерцание пикселей в тесте легко объясняется. Судя по всему за один кадр видео-контроллер успевает считать нечетное количество байт (атрибуты + пиксели). Поэтому, в одном кадре непосредственно после записи #FF в верхний левый угол экрана считываются пиксели (полоска есть), а в другом - считываются атрибуты, а пиксели уже считались до записи (полоски нет).
RAT - чтение атрибутов, RPX - чтение пикселей, WRT - запись CPUКод:Tackts: 17983 | 17984 | 17985
Frame 0: RAT=32 | WRT=FF | RPX=FF (полоска есть)
Frame 1: RPX=00 | WRT=FF | RAT=32 (полоски нет)
---------- Post added at 13:04 ---------- Previous post was at 12:52 ----------
Получается, что на текущий момент ни один из эмуляторов точно не воспроизводит времянку Пентагона.
Забавно, всегда считал, что эмулировать Пентагон проще всего. Оказалось, наоборот.
И было бы неплохо, что бы были версии этих тестов для прошивки в ПЗУ