SuperCPU Tutorial Listings - Part 8



Listing 8.1

; SuperCPU with SuperRAM-Card
; transfering memory areas
; using Long-LDA and Long-STA

; by M. Mundt for GO64! in 1997


  £ba $c000

       ldx #$00
copy1:
       lda $0400,x     ; part of screen
       sta $020000,x   ; to ramcard
       inx
       bne copy1


key1:
       jsr $f142       ; wait for key
       beq key1


       ldx #$00
copy2:
       lda $020000,x   ; move and fill some
       sta $07b000,x   ; stuff
       stz $0400,x
       inx
       bne copy2

key2:
       jsr $f142
       beq key2

       ldx #$00
copy3:
       lda $07b000,x   ; restore screen
       sta $0400,x
       inx
       bne copy3
       rts





Listing 8.2


; Data Bank Register
; and indirect adressing using
; 3 ZeroPage-Bytes

; by M. Mundt for GO64! in 1997         


 £ba $c000

       sei          ; disable IRQ else Crash :)

       phb          ; save data bank register

       lda #$50     ; make a pointer $04a050
       sta $fa      ; from $fa-$fc
       lda #$a0
       sta $fb
       lda #$04
       sta $fc

       lda #$21     ; testvalue
       sta [$fa]    ; to $04a050
                    ; (,y is not needed)

       lda #$04     ; bank 4
       pha          ; becomes
       plb          ; data bank

; from now on all standard- 
; memory-accesses (not long-adressing)  
; goes to bank 4!

       lda $a050    ; get value from $04a050
       sta $000400  ; write to screen ('!')

; sta $0400 would write to $040400 !

       lda #$07  ; bank 7 becomes
       pha       ; data bank
       plb

       lda $a050
       sta $000401

; now the value from $07a050 gets written to
; the screen

       lda $04a050
       sta $000402

; the most secure way :) 
; takes more bytes and a cycle more though

       plb       ; restore original data bank
                 ; usually (0) :)
       cli
       rts





Listing 8.3

; SuperCPU with SuperRAM-Card
; Indexing crossing Bank-Boundaries

; written by M.Mundt for GO64! in 1997


 £ba $c000


       ldx #$00
       ldy #0
fill:
       tya
       sta $0400,x   ; fill screen with
       iny           ; chars 0-255
       lda #0        ; nullen in speicher
       sta $020000,x ; fill start of bank with
       inx           ; zero to see what happens
       bne fill      ; after $02ffff+1


       ldx #$00
copyto:
       lda $0400,x
       sta $02ff80,x
       inx
       bne copyto

; after $80 bytes are copied address 
; $030000 is reached. 
; And the CPU stores there for real,
; not to $020000 !

key1:
       jsr $f142
       beq key1

       jsr $e544 ; clr

key2:
       jsr $f142
       beq key2

       ldx #$00
copyback:
       lda $02ff80,x   ; restore original
       sta $0400,x     ; screen
       lda $020000,x   ; visualize zeros
       sta $0500,x     ; which still should
       inx             ; be there
       bne copyback

       rts
                             

Assembler Code © by Malte Mundt

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

[ Listings Part 7 ][ Tutorial Part 8 ][ Index ]