Na az előző hozzáadásával (most még a videomegszakba nem építettem bele a lekapcsolást, mert az 80X ritkábban fut le, tehát oda bármit is rakok elég gyors lesz), ilyenre módosult a megszak (mostmár nem kommenteztem be, aki az elsőt érti, latni fogja a két EXX közötti marha nagy különbséget):
void IRQ() __naked
{
__asm
di
ex af, af
in a, (0xb4)
and #0x2
jr z, IRQ_NoAudio
ld a, #D_Ints+ 0x2
out (0xb4), a
exx
ld a, #0xf9
out (D_Page1), a
ld a, (de)
out (0xa8), a
inc de
ld a, (hl)
out (0xac), a
inc hl
ld a, #0xfc
out (D_Page1), a
exx
ex af, af
ei
ret
IRQ_NoAudio:
ld a, #D_Ints+ 0x20
out (0xb4), a
ld a, #1
ld (_g_WasIRQ), a
ex af, af
ei
ret
__endasm;
}
És igazából ugyanennek akkor lehet készíteni egy ilyen verziót is, ami talán egyetlen hajszálnyival gyorsabb mint az előző:
void IRQ() __naked
{
__asm
di
ex af, af
in a, (0xb4)
and #0x2
jr z, IRQ_NoAudio
ld a, #D_Ints+ 0x2
out (0xb4), a
exx
ld a, #0xf9
out (D_Page1), a
ld c, #0xa8
outi
ex de, hl
ld c, #0xac
outi
ex de, hl
ld a, #0xfc
out (D_Page1), a
exx
ex af, af
ei
ret
IRQ_NoAudio:
ld a, #D_Ints+ 0x20
out (0xb4), a
ld a, #1
ld (_g_WasIRQ), a
ex af, af
ei
ret
__endasm;
}
De ami viszont nagyon érdekes. Mindkét verzióra igaz, hogy mégha egymáshoz képest nincs is nagy különbség, de az előzőhöz képest azért komoly különbséget vártam ...
És nincs. Azért jobb, ezeket fogom alkalmazni, nem az elsőt, de csak ha 5% -ra javult ... tehát akkor mostmár mondjuk fix 25% a lassulás az előző 30% -hoz képest ... Persze mindez szemre a raszteridőn, de akkor is ... Többet vártam.
Úgy látszik a többi megszak kód, az exx -ekkel, meg a b4 írással, video megszak megkülönböztetéssel, lapozással és talaán magának a CPU -nak a megszak overhead- jével mindez sokkal nagyobb tétel, mint maga a tényleges hangadás ... így hiába gyorsítottam halálba a hangkiadást, akkor is lassú maradt egészében ...