add div by pow(2)
This commit is contained in:
parent
43dc08e5fd
commit
b92694aeb5
106
util/math.s65
Normal file
106
util/math.s65
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
;********************************************************************************
|
||||||
|
; @module math
|
||||||
|
; @type utility
|
||||||
|
; @details
|
||||||
|
; Math library
|
||||||
|
;********************************************************************************
|
||||||
|
.ifndef INCLUDE_MATH
|
||||||
|
INCLUDE_MATH = 1
|
||||||
|
|
||||||
|
.scope math
|
||||||
|
|
||||||
|
;********************************************************************************
|
||||||
|
; @macro Divide a num (or A) by a factor
|
||||||
|
; @param num: Memory or A
|
||||||
|
; @param divider: must be power of 2
|
||||||
|
;********************************************************************************
|
||||||
|
.macro div num,divider
|
||||||
|
.if divider = 2
|
||||||
|
lsr num
|
||||||
|
.elseif divider = 4
|
||||||
|
lsr num
|
||||||
|
lsr num
|
||||||
|
.elseif divider = 8
|
||||||
|
lsr num
|
||||||
|
lsr num
|
||||||
|
lsr num
|
||||||
|
.elseif divider = 16
|
||||||
|
.repeat 4
|
||||||
|
lsr num
|
||||||
|
.endrepeat
|
||||||
|
.elseif divider = 32
|
||||||
|
.repeat 5
|
||||||
|
lsr num
|
||||||
|
.endrepeat
|
||||||
|
.elseif divider = 64
|
||||||
|
.repeat 6
|
||||||
|
lsr num
|
||||||
|
.endrepeat
|
||||||
|
.elseif divider = 128
|
||||||
|
.repeat 7
|
||||||
|
lsr num
|
||||||
|
.endrepeat
|
||||||
|
.else
|
||||||
|
.error "div macro: divider % 2 != 0"
|
||||||
|
.endif
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
; .macro Amult1 factor
|
||||||
|
; phx
|
||||||
|
; ldx factor
|
||||||
|
; AmultX
|
||||||
|
; plx
|
||||||
|
; .endmacro
|
||||||
|
|
||||||
|
; https://www.llx.com/Neil/a2/mult.html
|
||||||
|
; .macro mult num1,num2,result
|
||||||
|
; lda #0
|
||||||
|
; ldx #8
|
||||||
|
; L1:
|
||||||
|
; lsr num2
|
||||||
|
; bcc L2
|
||||||
|
; clc
|
||||||
|
; adc num1
|
||||||
|
; L2:
|
||||||
|
; ror
|
||||||
|
; ror result
|
||||||
|
; dex
|
||||||
|
; bne L1
|
||||||
|
; sta result+1
|
||||||
|
; .endmacro
|
||||||
|
|
||||||
|
; 00110101
|
||||||
|
; 10010011
|
||||||
|
; -------^
|
||||||
|
; =00110101
|
||||||
|
; 00110101
|
||||||
|
; 01001001
|
||||||
|
; -------^
|
||||||
|
; =00110101
|
||||||
|
; 00110101
|
||||||
|
; 00100100
|
||||||
|
; -------^
|
||||||
|
; =00000000
|
||||||
|
; 00110101
|
||||||
|
; 00010010
|
||||||
|
; -------^
|
||||||
|
; =00000000
|
||||||
|
; 00110101
|
||||||
|
; 00001001
|
||||||
|
; -------^
|
||||||
|
; 00110101
|
||||||
|
; 00110101
|
||||||
|
; 00000100
|
||||||
|
; -------^
|
||||||
|
; =00000000
|
||||||
|
; 00110101
|
||||||
|
; 00000010
|
||||||
|
; -------^
|
||||||
|
; =00000000
|
||||||
|
; 00110101
|
||||||
|
; 00000001
|
||||||
|
; 00110101
|
||||||
|
|
||||||
|
|
||||||
|
.endscope
|
||||||
|
.endif ; guard
|
Loading…
Reference in New Issue
Block a user