;CB2-Tracker im IRQ fuer CBM 8000
*=$9000 ;Routine liegt im ZusatzRAM ab $9000
lodat=$55
hidat=$56
loirq=$90
hiirq=$91
irq=$e455
loton=$e848
hiton=$e849
klang=$e84a
register=$e84b
ldx #$00 ;LoByte Daten laden
ldy #$04 ;HiByte Daten laden
stx $55 ;in LoVektor schreiben
sty $56 ;in HiVektor schreiben
lda register ;Inhalt des Kontrollregisters laden
ora #%11101111 ;Schieberegister einschalten
sta register ;und zurueckschreiben
ldx <neuirq ;LoByte neuirq laden
ldy >neuirq ;HiByte neuirq laden
sei ;IRQ verbieten
stx $90 ;in LoIRQ schreiben
sty $91 ;in HiIRQ schreiben
cli ;IRQ zulassen
rts
;-------------------------------------------------------------------------------
neuirq ldy #$00 ;"Zaehler" initialisieren
lda ($55),y ;Byte fuer HiTon laden
cmp #$ff ;mit Flag fuer "konstante Werte" vergleichen
beq weiter3 ;
sta hiton ;HiByte der Frequenz schreiben
inc $55 ;LoByte Daten erhoehen
bne weiter1 ;auf Blockgrenze testen
inc $56 ;HiByte Daten erhoehen
weiter1 lda ($55),y ;Byte fuer LoTon laden
sta loton ;LoByte der Frequenz schreiben
inc $55 ;LoByte Daten erhoehen
bne weiter2 ;auf Blockgrenze testen
inc $56 ;HiByte Daten erhoehen
weiter2 lda ($55),y ;Bitmuster des Klangs laden
cmp #$ff ;mit Flag fuer "Ende" vergleichen
beq ende ;
sta klang ;und in Schieberegister schreiben
weiter3 inc $55 ;LoByte Daten erhoehen
bne weiter4 ;auf Blockgrenze testen
inc $56 ;HiByte Daten erhoehen
weiter4 jmp irq ;zur normalen IRQ-Routine springen
;-------------------------------------------------------------------------------
ende ldx #$55 ;LoByte der IRQ-Routine laden
ldy #$e4 ;HiByte der IRQ-Routine laden
sei ;Interrupt verbieten
stx $90 ;LoByte des Vektors schreiben
sty $91 ;HiByte des Vektors schreiben
lda register ;Inhalt des Kontrollregisters laden
and #%00010000 ;Schieberegister ausschalten
sta register ;und zurueckschreiben
cli ;Interrupt zulassen
jmp irq ;zur normalen IRQ-Routine springenLetzte Änderung: 2019-01-04 09:53:30