SYS 49152 → JUMP TO $C000 (MACHINE CODE EXECUTING)

[08] 6502 ASSEMBLER

Register, Zero-Page & Rasterzeilen-Interrupts
DE | EN

Die Architektur des MOS 6502

Im Gegensatz zu modernen x86- oder ARM-CPUs arbeitet der 6502 mit extrem wenigen internen Registern:

Zero-Page-Magie ($00–$FF): Die ersten 256 Bytes im RAM benötigen nur eine 8-Bit-Adresse. Lese- und Schreibzugriffe auf die Zero-Page sparen einen vollen Taktzyklus pro Instruktion!

Der klassische Rasterbar-Interrupt

Wie man mit wenigen Zeilen Assembler die Rahmenfarbe synchron zum Kathodenstrahl des CRT-Monitors ändert:

* = $c000          ; Startadresse im RAM (SYS 49152)

sei                ; Interrupts sperren
lda #$7f
sta $dc0d          ; CIA1 Timer-Interrupts deaktivieren

lda #$01
sta $d01a          ; VIC-II Raster-Interrupt aktivieren

lda #100           ; Ziel-Rasterzeile (Zeile 100)
sta $d012
lda $d011
and #$7f           ; High-Bit der Rasterzeile auf 0
sta $d011

lda #<irq_routine  ; Low-Byte des IRQ-Handlers
sta $0314          ; KERNAL IRQ-Vektor verbiegen
lda #>irq_routine  ; High-Byte des IRQ-Handlers
sta $0315

cli                ; Interrupts wieder freigeben
rts                ; Zurück zu BASIC

irq_routine:
inc $d020          ; Rahmenfarbe ändern (Visueller Rasterbalken!)
dec $d020          ; Rahmenfarbe zurücksetzen

asl $d019          ; VIC-II Interrupt quittieren
jmp $ea31          ; Standard-KERNAL IRQ ausführen