
I needed to use 16bit logic to ashive this. Also moved out dx*2, dy*2 calculation outside of loop for better performance.
59 lines
852 B
ArmAsm
Executable file
59 lines
852 B
ArmAsm
Executable file
|
|
.macro Add_16 a_low, a_hi, b_low, b_hi ; a = a + b
|
|
CLC
|
|
LDA b_low
|
|
ADC a_low
|
|
STA a_low
|
|
LDA b_hi
|
|
ADC a_hi
|
|
STA a_hi
|
|
.endmacro
|
|
|
|
.macro Sub_16 a_low, a_hi, b_low, b_hi ; a = a - b
|
|
SEC
|
|
LDA a_low
|
|
SBC b_low
|
|
STA a_low
|
|
LDA a_hi
|
|
SBC b_hi
|
|
STA a_hi
|
|
.endmacro
|
|
|
|
|
|
.macro mult_16 low_, hi_ ; [low, hi] = [low, hi]*2
|
|
CLC
|
|
ROL low_
|
|
ROL hi_
|
|
.endmacro
|
|
|
|
|
|
;.proc Sub_abs_8 ;return, primary, secondary
|
|
; LDA primary
|
|
; SEC
|
|
; SBC secondary
|
|
; BPL end_;we got z positive result
|
|
; LDA secondary
|
|
; SEC
|
|
; SBC primary
|
|
; end_:
|
|
; STA return
|
|
;.endproc
|
|
;
|
|
;.proc poer ;low, hi, in ; [low, hi] = [in]^2
|
|
; LDY in
|
|
; STY low
|
|
; LDA #$00
|
|
; STA hi
|
|
; ;pow:
|
|
; DEY ; count = count -1
|
|
; BEQ y_pow_end;
|
|
; CLC
|
|
; LDA in
|
|
; ADC low
|
|
; STA low
|
|
; LDA #$00
|
|
; ADC hi
|
|
; STA hi
|
|
; ;jmp pow
|
|
; y_pow_end:
|
|
;.endproc
|