( TCH | 2019. 05. 26., v – 22:50 )

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?