Busszal.
Félretéve a viccet, nem értem, hogy miért kéne rasztermegszakításokkal baszakodni a lapozáshoz.
Írtam egy példát (nem a legszebb megoldásokkal, pl. a lapozót nyugodtan lehetett volna inline is, de most már mindegy):
*= $0801
; BASIC "0 SYS2061"
.byte $0b, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00
; ($d418).b := $0f
lda #$0f
sta $d418
; ($d405).b := $00
lda #$00
sta $d405
; ($d406).b := $f0
lda #$f0
sta $d406
; ($d404).b := $21
lda #$21
sta $d404
; p.i = 1
sei
; useram()
jsr useram
; ($0400).l := $00000000
lda #$00
sta $0400
sta $0401
sta $0402
sta $0403
; (RAM:$d400).l := $00000000
sta $d400
sta $d401
sta $d402
sta $d403
- ; repeat (IO:$d400).l := (RAM:$d400).l++ until false
ldx $d400
jsr useio
stx $d400
stx $0400
jsr useram
inc $d400
bne -
ldx $d401
jsr useio
stx $d401
stx $0401
jsr useram
inc $d401
bne -
ldx $d402
jsr useio
stx $d402
stx $0402
jsr useram
inc $d402
bne -
ldx $d403
jsr useio
stx $d403
stx $0403
jsr useram
inc $d403
bne -
beq -
useram ; ($01).b := $30
lda #$30
sta $01
rts
useio ; ($01).b := $37
lda #$37
sta $01
rts
tass64-gyel lehet assemblálni (eredeti forrás itt), ha nincs 64tass, vagy nem akarsz szarakodni vele, akkor a bináris itt: http://oscomp.hu/depot/sidfreq_same_address.prg.
Amint látod, egy mezei ciklus van itt, ami a $d400-$d403 címeket (SID voice 1 frequency és pulse width) inkrementálja, mégpedig úgy, hogy nem használ rá más címet, hanem ugyanazt a címet írja és olvassa, az I/O és a RAM terület között váltogatva. Az aktuális állást $0400-től $0403-ig ki is jelzi. A SID rendületlenül zajong, a számláló rendületlenül pörög, a CPU pedig rendületlenül váltogat a két terület között. Ugyanezt akár bitmap módban is el lehetne játszani, csak épp így egyszerűbb volt gyorsan egy példát összedobni. Hol van itt szükség a rasztermegszakításokkal való baszakodásra?