Pokey Interrupts
Verfasst: 03.05.2024 10:49
Hi,
ich spiele gerade ein wenig mit den Pokey-Interrupts des Atari rum.
Ich habe gedacht, statt die Musikroutinen nur im VBI alle 1/50s aufzurufen, warum nicht die Pokey Interrupts nehmen und z.B. alle 1/100s die Musikroutinen aufrufen.
Grund:
Änderungen in der Musik kämen schneller, das klingt nochmal viel besser. Beispiel, ein schönes Plopp in Turbo-Basic:
Wenn man das versucht mit Änderungen nur alle 1/50s aber ähnlich flott, klingt es furchtbar. Da es nicht 16 Änderungen sind sondern vielleicht 2 oder 3.
Hat das schon mal jemand verwendet/ausprobiert?
Hier mal der Initialisierungscode, um einen Pokey Interrupt (den 2.) zu starten.
Der eigentliche Interrupt selbst:
Er zählt einen Counter hoch und macht den Hintergrund schwarz oder grau. Das wandert ein wenig, weil die Interrupts nicht absolut synchron zum Screen kommen. Das OS speichert uns den Akku auf den Stack, bei RTI muss man den Akku per PLA nur wieder herstellen.
Die Interrupts kommen auf PAL alle 1/100s also 2 pro VBI, allerdings kann man jetzt keine Musik mehr spielen, weil die Interrupts an den Pokey Registern hängen. Sobald man AUDF1 und oder AUFD2 ändert, um eine andere Frequenz zu spielen, ändert sich das Laufzeitverhalten der Interrupts.
Weiß jemand mehr?
ich spiele gerade ein wenig mit den Pokey-Interrupts des Atari rum.
Ich habe gedacht, statt die Musikroutinen nur im VBI alle 1/50s aufzurufen, warum nicht die Pokey Interrupts nehmen und z.B. alle 1/100s die Musikroutinen aufrufen.
Grund:
Änderungen in der Musik kämen schneller, das klingt nochmal viel besser. Beispiel, ein schönes Plopp in Turbo-Basic:
Code: Alles auswählen
FOR I=15 TO 0 STEP -1
SOUND 0,35,10,I
NEXT I
Hat das schon mal jemand verwendet/ausprobiert?
Hier mal der Initialisierungscode, um einen Pokey Interrupt (den 2.) zu starten.
Code: Alles auswählen
lda #<pokey_interrupt_2
sta VTIMR2
lda #>pokey_interrupt_2
sta VTIMR2+1
lda 16
ora #2 ; erlaube pokey timer2
sta 16
lda #$10 ; 16 Bit Auflösung für Kanal 1&2
sta AUDCTL
lda #<634 ; Auf PAL 63334 / Anzahl Interrupts
sta AUDF1
lda #>634
sta AUDF2
lda #1 ; Interrupt starten
sta STIMER
lda #128+2 ; Pokey Interrupt 2 erlauben
sta IRQEN
rts
Er zählt einen Counter hoch und macht den Hintergrund schwarz oder grau. Das wandert ein wenig, weil die Interrupts nicht absolut synchron zum Screen kommen. Das OS speichert uns den Akku auf den Stack, bei RTI muss man den Akku per PLA nur wieder herstellen.
Code: Alles auswählen
counter=203
pokey_interrupt_2
inc counter
lda counter
and #1
beq white
lda #0 ; schwarzer Hintergrund
sta COLBK
sta 712
pla ; Pokey Interrupt verlassen, das ist so richtig!
rti
white
lda #$06 ; grauer Hintergrund
sta COLBK
sta 712
pla
rti
Weiß jemand mehr?