SuperCPU Tutorial Listings - Part 6



Listing 6.1


; 65816
; relocatable Code by Stack-relative
; indirect-indexed Adressing   [ Oh My :) ]
; Using the PER-command
; written in 1997 by Malte Mundt
; for GO64!

 ba $c000

; PER pushes the difference between program
; counter and label to the stack
; and therefore works memory independent.

       per data0

       ldy #0

; 1,S  means: Stackpointer +1 (You need +1 to get the label right)
; ,Y   adds the value of Y-Register

; The processor calculates the adress of the pointer
; and gets the byte to the accu using it.

       lda (1,S),y   ; get data0

       sta $0400     ; write to screen

       iny
       lda (1,S),y   ; now get data1
       sta $d020     ; write to border color
       iny
       lda (1,S),y   ; get data2
       sta $d021     ; write to background
       iny
       lda (1,S),y   ; get data3
       sta $d800     ; write to color-ram

       pla           ; clean up stack
       pla
       rts

data0:
 by $21
data1:
 by $00
data2:
 by $07
data3:
 by $01


; This might look confusing at first sight, but with a cool
; macro assembler, great code is possible :) /cz






Listing 6.2

; 65816
; relocatible Code by using stack-relative
; adressing and the
; PER-command
; written in 1997 by Malte Mundt
; for GO64!

 ba $c000


; PER pushes the difference between program
; counter and label to the stack
; and therefore works memory independent.

       per text       ; start of text is moved
                      ; to stack while prog is running

       lda 2,S        ; get highbyte
       tay
       lda 1,S        ; get lowbyte
       jsr $ab1e      ; print text
       pla            ; clean up stack
       pla
       rts

text:
 tx "the quick brown fox jumps"
 by $0d
 tx "over the lazy dog ..."
 by 0
                                        

Assembler Code by Malte Mundt

Partial translation and cosmetical changes by Count Zero/SCS*TRC

[ Listings Part 5 ][ Tutorial Part 6 ][ Index ][ Listings Part 7 ]