PDA

Просмотр полной версии : тестик для реалов и эмулей



psb
30.05.2005, 12:56
Вот, скажите, пожалуйста, будет ли мигать бордюр:



DI
LD A,#80
LD I,A

LD HL,#8000,DE,#8001,BC,257
LD (HL),#81:LDIR

LD A,#C3,HL,INT
LD (#8181),A,(#8182),HL

IM 2

LOOP EI
JP LOOP

INT PUSH AF
LD A,R:OUT (254),A
POP AF

RET


и, есть ли разница мужду тем (^^^) и следующим:



DI
LD A,#80
LD I,A

LD HL,#8000,DE,#8001,BC,257
LD (HL),#81:LDIR

LD A,#C3,HL,INT
LD (#8181),A,(#8182),HL

IM 2

LOOP EI
JP LOOP

INT PUSH AF
LD A,R:OUT (254),A
POP AF
EI
RET


дело в том, что в UnrealSpeccy 1й кусок не мигает, и я слабо верю, что так и должно быть ;)

поправьте меня, если я не прав :))

SAM style
30.05.2005, 13:42
ei + jp loop ест 14 тактов (2 команды, r=r+2) и вопрос в том, сколько их влезет в одно прерывание за вычетом тех тактов, которые уйдут на выполнение проги INT (лишний ei там добавляет 4 такта и 1 команду), да и то не везде будет одинаково, если вспомнить о тормозилке на scorpion (напр. push af без нее делается 11.5 тактов, с ней - 12). В итоге:

пусть INTtick - число тактов на прогу INT (непостоянно)
FRAMEtick - тактов в прерывании (зависит от компа)

count=(FRAMEtick-INTtick)/14 - скока раз сделается ei:jp loop
delta=count*2 - команд
total1=delta+5 - команд между ld a,r и ld a,r в следующем прерывании
total2=delta+6 - то же с лишней ei

если (total1 and 7)=0, то в натуре ничего мигать не будет

Тут еще оговорка - я без понятия, сколько тактов ест и меняет ли R сам приход прерывания (переход на прогу INT)

lvd
30.05.2005, 14:41
DI
LD A,#80
LD I,A

LD HL,#8000,DE,#8001,BC,257
LD (HL),#81:LDIR

LD A,#C3,HL,INT
LD (#8181),A,(#8182),HL

IM 2

LOOP EI
JP LOOP

INT PUSH AF
LD A,R:OUT (254),A
POP AF

RET

дело в том, что в UnrealSpeccy 1й кусок не мигает, и я слабо верю, что так и должно быть ;)

поправьте меня, если я не прав :))

Оно может не мигать по очень банальной причине - после EI в течение одной команды прерывания запрещены, если до этого были запрещены. Вообще это задумывалось для того, при выходе из прерываний ( ei:ret ) стек не переполнялся, а как оно в унреале эмулируется - х его з. У тебя вообще в первом куске кода прерывания ловятся? Убери push-pop af, а ld a,r замени на inc a - что получается?

SMT
30.05.2005, 19:56
lvd: в эмуляторе не должно мигать, int специально запрещён после EI (кажись, такой тест на "реальность" спектрума был в игре колобок-зуум)

psb: а что, действительно, второй кусок мигает?

psb
01.06.2005, 17:54
че-то странное получается.. видимо, как-то такты попадают во втором случае... если изменить хоть одну команду - всё виснет :)))

и еще, кто проверит это на реале? есть подозрение, что на реале будут оба куска работать ;)

caro
01.06.2005, 18:47
че-то странное получается.. видимо, как-то такты попадают во втором случае... если изменить хоть одну команду - всё виснет :)))

и еще, кто проверит это на реале? есть подозрение, что на реале будут оба куска работать ;)На реале все работает. Об этой проблеме я писал еще в багах для Unreal v0.21b5 (псевдо баг 10).
Достаточно изменить в INI файле Frame на один такт (вместо 71680 сделать 71681) и все заработает.

SMT
01.06.2005, 19:22
caro: работает - значит мигает, или не мигает? случай, описанный в usbugz немного не тот. там прерывание попадало на EI, но из-за того, что на реальном спектруме длина прерывания не 0, оно ещё было активно на следующей команде. но тут после EI опять EI...

caro
02.06.2005, 13:11
caro: работает - значит мигает, или не мигает?Честно говоря вчера написал, что работают оба варианта не проверяя.
Для обьективности откомпилировал оба теста и запустил на своем Кворуме.
Как я и ожидал работают оба теста абсолютно одинаково.

случай, описанный в usbugz немного не тот. там прерывание попадало на EI, но из-за того, что на реальном спектруме длина прерывания не 0, оно ещё было активно на следующей команде. но тут после EI опять EI...Да нет после EI идет JP, а вот после него до выполнения слудующего EI и выполняется прерывание.

SMT
02.06.2005, 19:50
caro: тогда согласен, природа явления та же самая.. значит, этот пример будет прекрасно работать на эмуляторах с длинным int'ом, например RealSpectrum или Z80Stealth

psb
02.06.2005, 20:02
а на машинах, с интом меньше 4-6 тактов тоже работать не будет?

я неспроста решил эти тесты выложить... видел в одной деме такое, и эта дема висла в эмуле.

SMT
03.06.2005, 06:57
как называется дема?


а на машинах, с интом меньше 4-6 тактов тоже работать не будет?а есть такие машины?...

psb
03.06.2005, 13:06
дема называется Bobering 2000: Kapralaktam...
http://demo.raww.net/files/Bobering.zip

а компы такие есть... :)