mirror of
https://github.com/irmen/prog8.git
synced 2024-10-19 07:23:56 +00:00
improved sqrt16
This commit is contained in:
parent
47cbc7b1f9
commit
95c0425151
@ -708,53 +708,40 @@ func_sqrt16_into_A .proc
|
|||||||
.pend
|
.pend
|
||||||
|
|
||||||
func_sqrt16 .proc
|
func_sqrt16 .proc
|
||||||
; TODO is this one faster? http://6502org.wikidot.com/software-math-sqrt
|
; integer square root from http://6502org.wikidot.com/software-math-sqrt
|
||||||
|
txa
|
||||||
|
pha
|
||||||
lda P8ESTACK_LO+1,x
|
lda P8ESTACK_LO+1,x
|
||||||
sta P8ZP_SCRATCH_W2
|
ldy P8ESTACK_HI+1,x
|
||||||
lda P8ESTACK_HI+1,x
|
sta P8ZP_SCRATCH_W1
|
||||||
sta P8ZP_SCRATCH_W2+1
|
sty P8ZP_SCRATCH_W1+1
|
||||||
stx P8ZP_SCRATCH_REG
|
|
||||||
ldy #$00 ; r = 0
|
|
||||||
ldx #$07
|
|
||||||
clc ; clear bit 16 of m
|
|
||||||
_loop
|
|
||||||
tya
|
|
||||||
ora _stab-1,x
|
|
||||||
sta P8ZP_SCRATCH_B1 ; (r asl 8) | (d asl 7)
|
|
||||||
lda P8ZP_SCRATCH_W2+1
|
|
||||||
bcs _skip0 ; m >= 65536? then t <= m is always true
|
|
||||||
cmp P8ZP_SCRATCH_B1
|
|
||||||
bcc _skip1 ; t <= m
|
|
||||||
_skip0
|
|
||||||
sbc P8ZP_SCRATCH_B1
|
|
||||||
sta P8ZP_SCRATCH_W2+1 ; m = m - t
|
|
||||||
tya
|
|
||||||
ora _stab,x
|
|
||||||
tay ; r = r or d
|
|
||||||
_skip1
|
|
||||||
asl P8ZP_SCRATCH_W2
|
|
||||||
rol P8ZP_SCRATCH_W2+1 ; m = m asl 1
|
|
||||||
dex
|
|
||||||
bne _loop
|
|
||||||
|
|
||||||
; last iteration
|
|
||||||
bcs _skip2
|
|
||||||
sty P8ZP_SCRATCH_B1
|
|
||||||
lda P8ZP_SCRATCH_W2
|
|
||||||
cmp #$80
|
|
||||||
lda P8ZP_SCRATCH_W2+1
|
|
||||||
sbc P8ZP_SCRATCH_B1
|
|
||||||
bcc _skip3
|
|
||||||
_skip2
|
|
||||||
iny ; r = r or d (d is 1 here)
|
|
||||||
_skip3
|
|
||||||
ldx P8ZP_SCRATCH_REG
|
|
||||||
tya
|
|
||||||
sta P8ESTACK_LO+1,x
|
|
||||||
lda #0
|
lda #0
|
||||||
sta P8ESTACK_HI+1,x
|
sta P8ZP_SCRATCH_B1
|
||||||
|
sta P8ZP_SCRATCH_REG
|
||||||
|
ldx #8
|
||||||
|
- sec
|
||||||
|
lda P8ZP_SCRATCH_W1+1
|
||||||
|
sbc #$40
|
||||||
|
tay
|
||||||
|
lda P8ZP_SCRATCH_REG
|
||||||
|
sbc P8ZP_SCRATCH_B1
|
||||||
|
bcc +
|
||||||
|
sty P8ZP_SCRATCH_W1+1
|
||||||
|
sta P8ZP_SCRATCH_REG
|
||||||
|
+ rol P8ZP_SCRATCH_B1
|
||||||
|
asl P8ZP_SCRATCH_W1
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
rol P8ZP_SCRATCH_REG
|
||||||
|
asl P8ZP_SCRATCH_W1
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
rol P8ZP_SCRATCH_REG
|
||||||
|
dex
|
||||||
|
bne -
|
||||||
|
pla
|
||||||
|
tax
|
||||||
|
lda P8ZP_SCRATCH_B1
|
||||||
|
sta P8ESTACK_LO+1,x
|
||||||
rts
|
rts
|
||||||
_stab .byte $01,$02,$04,$08,$10,$20,$40,$80
|
|
||||||
.pend
|
.pend
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
%import textio
|
%import textio
|
||||||
%import floats
|
|
||||||
%import syslib
|
%import syslib
|
||||||
%zeropage basicsafe
|
%zeropage basicsafe
|
||||||
|
|
||||||
@ -9,29 +8,28 @@
|
|||||||
main {
|
main {
|
||||||
|
|
||||||
sub start() {
|
sub start() {
|
||||||
float[] fls = [1.1, 2.2, 0.0, 4.4, 3.3]
|
uword num
|
||||||
float fl
|
ubyte ss
|
||||||
ubyte ii
|
|
||||||
|
|
||||||
|
num = 65535
|
||||||
fls[2] = sin(fls[0])
|
ss = sqrt16(num)
|
||||||
for ii in 0 to len(fls)-1 {
|
txt.print_ub(ss)
|
||||||
floats.print_f(fls[ii])
|
|
||||||
txt.chrout('\n')
|
|
||||||
}
|
|
||||||
txt.chrout('\n')
|
txt.chrout('\n')
|
||||||
|
|
||||||
fls[3] = cos(fls[0])
|
num = 20000
|
||||||
for ii in 0 to len(fls)-1 {
|
ss = sqrt16(num)
|
||||||
floats.print_f(fls[ii])
|
txt.print_ub(ss)
|
||||||
txt.chrout('\n')
|
txt.chrout('\n')
|
||||||
}
|
|
||||||
|
|
||||||
|
num = 9999
|
||||||
|
ss = sqrt16(num)
|
||||||
|
txt.print_ub(ss)
|
||||||
|
txt.chrout('\n')
|
||||||
|
|
||||||
; fl = getfloat()
|
num = 500
|
||||||
;
|
ss = sqrt16(num)
|
||||||
; floats.print_f(fl)
|
txt.print_ub(ss)
|
||||||
; txt.chrout('\n')
|
txt.chrout('\n')
|
||||||
|
|
||||||
testX()
|
testX()
|
||||||
}
|
}
|
||||||
@ -45,9 +43,9 @@ main {
|
|||||||
return "foobar"
|
return "foobar"
|
||||||
}
|
}
|
||||||
|
|
||||||
; sub getfloat() -> float {
|
sub getfloat() -> float {
|
||||||
; return 4.56789
|
return 123.456789
|
||||||
; }
|
}
|
||||||
|
|
||||||
sub mcp(uword from, uword dest, ubyte length) {
|
sub mcp(uword from, uword dest, ubyte length) {
|
||||||
txt.print_uw(from)
|
txt.print_uw(from)
|
||||||
|
Loading…
Reference in New Issue
Block a user