rk65c02/examples/mul_8bit_to_8bits.s

51 lines
934 B
ArmAsm

.org 0xC000
start: jsr mul_8bit_to_8bits
stp
; mul_8bit_to_8bits
; Multiplies 2 numbers (passed on stack) and returns result on stack.
; General 8bit * 8bit = 8bit multiply
; by White Flame 20030207
; adapted as rk65c02 example by rkujawa
; Instead of using a bit counter, this routine early-exits when num2 reaches
; zero, thus saving iterations.
; .X and .Y are preserved
; num1 and num2 get clobbered
.set num1,0x10
.set num2,0x11
.set retl,0x12
.set reth,0x13
mul_8bit_to_8bits:
pla ; pull return address
sta retl
pla
sta reth
pla ; pull num1 from stack
sta num1
pla ; pull num2 from stack
sta num2
lda #0x00
beq enterl
doAdd: clc
adc num1
loop: asl num1
; For an accumulating multiply (A = A + num1 * num2),
; set up num1 and num2, then enter here.
enterl: lsr num2
bcs doAdd
bne loop
end:
pha ; save result to stack
lda reth ; restore return address
pha
lda retl
pha
rts ; return from function