Azt értem, hogy megméri, hogy 4 vagy 6 Mhz-es beállítás kell-e a Dave-nek de pontosan hogyan is?
Az 1 kHz-es megszakításokat számolja két video megszakítás (az .l2 két hívása) között. Ez 20 4 MHz-es gépen, és 30 6 MHz esetén, mivel turbós gépen az 1 kHz-es megszakítás is gyorsul.
.l2: in a, (0b4h)
and 11h
or c
rlca
and 66h
ld c, a ; -ON--ON-
rlca ; ON--ON--
xor c ; OXN-OXN-
Itt az O a bit előző értéke, az N az új érték, az X pedig a kettő közötti XOR művelet eredménye. A byte felső fele a video megszakítás, az alsó pedig az 1 kHz-es megszakítás állapota. Tehát a 2. bit 1, ha 1 kHz-es megszakítás történt (le- és felfutó él is), és a 6. és 7. bit 1 video megszakításnál (lefutó él):
bit 2, a
jr z, .l3
inc l ; 1 kHz interrupt
.l3: cp 0c0h
jr c, .l2 ; not 50 Hz interrupt ?
És jól gondolom, hogy ezt az AYRESET rutint így csak a program elején kell hívni, menet közben amikor a játék resetelgeti az AY-t (konkrét esetben úgy tûnik minden hangeffektnél), akkor oda praktikusabb egy csak a regisztertörléseket alkalmazó egyszerûbb verziót rakni?
Ha az eredeti kódban is csak az AY regiszterek nullázása található, akkor természetesen az átiratba is az kerülhet a regiszter írás emuláció hívásával.