Просмотр полной версии : тестик для реалов и эмулей
Вот, скажите, пожалуйста, будет ли мигать бордюр:
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)
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 - что получается?
lvd: в эмуляторе не должно мигать, int специально запрещён после EI (кажись, такой тест на "реальность" спектрума был в игре колобок-зуум)
psb: а что, действительно, второй кусок мигает?
че-то странное получается.. видимо, как-то такты попадают во втором случае... если изменить хоть одну команду - всё виснет :)))
и еще, кто проверит это на реале? есть подозрение, что на реале будут оба куска работать ;)
че-то странное получается.. видимо, как-то такты попадают во втором случае... если изменить хоть одну команду - всё виснет :)))
и еще, кто проверит это на реале? есть подозрение, что на реале будут оба куска работать ;)На реале все работает. Об этой проблеме я писал еще в багах для Unreal v0.21b5 (псевдо баг 10).
Достаточно изменить в INI файле Frame на один такт (вместо 71680 сделать 71681) и все заработает.
caro: работает - значит мигает, или не мигает? случай, описанный в usbugz немного не тот. там прерывание попадало на EI, но из-за того, что на реальном спектруме длина прерывания не 0, оно ещё было активно на следующей команде. но тут после EI опять EI...
caro: работает - значит мигает, или не мигает?Честно говоря вчера написал, что работают оба варианта не проверяя.
Для обьективности откомпилировал оба теста и запустил на своем Кворуме.
Как я и ожидал работают оба теста абсолютно одинаково.
случай, описанный в usbugz немного не тот. там прерывание попадало на EI, но из-за того, что на реальном спектруме длина прерывания не 0, оно ещё было активно на следующей команде. но тут после EI опять EI...Да нет после EI идет JP, а вот после него до выполнения слудующего EI и выполняется прерывание.
caro: тогда согласен, природа явления та же самая.. значит, этот пример будет прекрасно работать на эмуляторах с длинным int'ом, например RealSpectrum или Z80Stealth
а на машинах, с интом меньше 4-6 тактов тоже работать не будет?
я неспроста решил эти тесты выложить... видел в одной деме такое, и эта дема висла в эмуле.
как называется дема?
а на машинах, с интом меньше 4-6 тактов тоже работать не будет?а есть такие машины?...
дема называется Bobering 2000: Kapralaktam...
http://demo.raww.net/files/Bobering.zip
а компы такие есть... :)
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot