SuperCPU Tutorial Listings - Part 2
Listing 2.1
; From here on Flash 8 AssBlaster Source Code Format is used.
; Make sure to get F8-AssBlaster V1.2 !
; Subtraction 16 Bit
; 6510-Version
£ba $c000
lda value1
sec
sbc value2
sta result
lda value1+1
sbc value2+1
sta result+1
rts
value1:
£by $7a,$10
value2:
£by $5d,$02
result:
£by $00,$00
Listing 2.2
; Subtraction 16 Bit
; 65816-Version
£ba $c000
sei
clc ; clear
xce ; e-flag
; go native!
rep #%00100000 ; Akku 16 Bit
lda value1
sec
sbc value2
sta result
sep #%00100000 ; Akku 8 Bit
sec ; back to
xce ; emulation-mode
cli
rts
value1:
£by $7a,$10
value2:
£by $5d,$02
result:
£by $00,$00
Listing 2.3
; Addition 16 Bit
; 65816-Version
£ba $c000
sei
clc ; clear
xce ; e-flag
; go native!
rep #%00100000 ; Akku 16 Bit
lda value1
clc
adc value2
sta result
sep #%00100000 ; Akku 8 Bit
sec ; back to
xce ; emulation-mode
cli
rts
value1:
£by $31,$6a
value2:
£by $4b,$13
result:
£by $00,$00
Listing 2.4
; Multiplication 16 Bit * 16 Bit = 16 Bit
; 6510-Version
£ba $c000
ldx #0 ; initialize
ldy #0 ; registers for result
mult1:
lda value1 ; operator 1 (lo)
ora value1+1 ; operator 1 (hi)
beq done ; 0? ready
lsr value1+1 ; right bit
ror value1 ; of operator
bcc mult2 ; no addition!
clc
tya
adc value2
tay
txa
adc value2+1
tax
mult2:
asl value2 ; shift operator 2
rol value2+1 ; for next loop
jmp mult1
done:
sty result
stx result+1
rts
value1:
£by $32,$04
value2:
£by $4b,$13
result:
£by $00,$00
Listing 2.5
; Multiplication 16 Bit * 16 Bit = 16 Bit
; 65816-Version
£ba $c000
sei
clc ; native
xce ; mode
rep #%01100000 ; accu & index
; 16 bit
£al ; tell assembler
£rl ; about 16bit a®.
lda #$0000 ; init. result
mult1:
ldx value1 ; operator 1
beq done ; 0? ready
lsr value1 ; right bit oper.1
bcc mult2 ; clear? no add.
clc
adc value2
mult2:
asl value2
jmp mult1
done:
sta result
sep #%00110000 ; 8 bit for accu&x/y
£as ; tell assembler
£rs
sec ; switch to
xce ; emulation mode
cli
rts
value1:
£by $32,$04
value2:
£by $4b,$13
result:
£by $00,$00
Listing 2.6
; Example 16 Bit Indexregisters
; 65816
£ba $c000
sei
clc ; clear
xce ; e-flag, go native
rep #%00010000 ; 16 bit indexregisters
£rl ; tell assembler
ldx #$5000
loop:
lda $1000,x
sta $2000,x
dex
bne loop
lda #$00
sta $fc
sta $fe
lda #$20
sta $fd
lda #$40
sta $ff
ldy #$0000
loop2:
lda ($fc),y
sta ($fe),y
iny
cpy #$3000
bne loop2
sep #%00010000 ; back to 8 bit
£rs ; tell assembler
sec ; back to
xce ; emulation-mode
cli
rts
Assembler Code © by Malte Mundt
Partial translation and cosmetical changes by Count Zero/SCS*TRC
[ Listings Part 1 ][
Tutorial Part 2 ][ Index ][ Listings
Part 3 ]