mirror of
https://github.com/irmen/prog8.git
synced 2024-11-23 22:33:12 +00:00
147 lines
2.5 KiB
NASM
147 lines
2.5 KiB
NASM
|
; --- floating point builtin functions
|
||
|
|
||
|
|
||
|
func_sign_f_stack .proc
|
||
|
jsr func_sign_f_into_A
|
||
|
sta P8ESTACK_LO,x
|
||
|
dex
|
||
|
rts
|
||
|
.pend
|
||
|
|
||
|
func_sign_f_into_A .proc
|
||
|
jsr MOVFM
|
||
|
jmp SIGN
|
||
|
.pend
|
||
|
|
||
|
func_swap_f .proc
|
||
|
; -- swap floats pointed to by SCRATCH_ZPWORD1, SCRATCH_ZPWORD2
|
||
|
ldy #4
|
||
|
- lda (P8ZP_SCRATCH_W1),y
|
||
|
pha
|
||
|
lda (P8ZP_SCRATCH_W2),y
|
||
|
sta (P8ZP_SCRATCH_W1),y
|
||
|
pla
|
||
|
sta (P8ZP_SCRATCH_W2),y
|
||
|
dey
|
||
|
bpl -
|
||
|
rts
|
||
|
.pend
|
||
|
|
||
|
func_reverse_f .proc
|
||
|
; --- reverse an array of floats (array in P8ZP_SCRATCH_W1, num elements in A)
|
||
|
_left_index = P8ZP_SCRATCH_W2
|
||
|
_right_index = P8ZP_SCRATCH_W2+1
|
||
|
_loop_count = P8ZP_SCRATCH_REG
|
||
|
pha
|
||
|
jsr a_times_5
|
||
|
sec
|
||
|
sbc #5
|
||
|
sta _right_index
|
||
|
lda #0
|
||
|
sta _left_index
|
||
|
pla
|
||
|
lsr a
|
||
|
sta _loop_count
|
||
|
_loop ; push the left indexed float on the stack
|
||
|
ldy _left_index
|
||
|
lda (P8ZP_SCRATCH_W1),y
|
||
|
pha
|
||
|
iny
|
||
|
lda (P8ZP_SCRATCH_W1),y
|
||
|
pha
|
||
|
iny
|
||
|
lda (P8ZP_SCRATCH_W1),y
|
||
|
pha
|
||
|
iny
|
||
|
lda (P8ZP_SCRATCH_W1),y
|
||
|
pha
|
||
|
iny
|
||
|
lda (P8ZP_SCRATCH_W1),y
|
||
|
pha
|
||
|
; copy right index float to left index float
|
||
|
ldy _right_index
|
||
|
lda (P8ZP_SCRATCH_W1),y
|
||
|
ldy _left_index
|
||
|
sta (P8ZP_SCRATCH_W1),y
|
||
|
inc _left_index
|
||
|
inc _right_index
|
||
|
ldy _right_index
|
||
|
lda (P8ZP_SCRATCH_W1),y
|
||
|
ldy _left_index
|
||
|
sta (P8ZP_SCRATCH_W1),y
|
||
|
inc _left_index
|
||
|
inc _right_index
|
||
|
ldy _right_index
|
||
|
lda (P8ZP_SCRATCH_W1),y
|
||
|
ldy _left_index
|
||
|
sta (P8ZP_SCRATCH_W1),y
|
||
|
inc _left_index
|
||
|
inc _right_index
|
||
|
ldy _right_index
|
||
|
lda (P8ZP_SCRATCH_W1),y
|
||
|
ldy _left_index
|
||
|
sta (P8ZP_SCRATCH_W1),y
|
||
|
inc _left_index
|
||
|
inc _right_index
|
||
|
ldy _right_index
|
||
|
lda (P8ZP_SCRATCH_W1),y
|
||
|
ldy _left_index
|
||
|
sta (P8ZP_SCRATCH_W1),y
|
||
|
; pop the float off the stack into the right index float
|
||
|
ldy _right_index
|
||
|
pla
|
||
|
sta (P8ZP_SCRATCH_W1),y
|
||
|
dey
|
||
|
pla
|
||
|
sta (P8ZP_SCRATCH_W1),y
|
||
|
dey
|
||
|
pla
|
||
|
sta (P8ZP_SCRATCH_W1),y
|
||
|
dey
|
||
|
pla
|
||
|
sta (P8ZP_SCRATCH_W1),y
|
||
|
dey
|
||
|
pla
|
||
|
sta (P8ZP_SCRATCH_W1),y
|
||
|
inc _left_index
|
||
|
lda _right_index
|
||
|
sec
|
||
|
sbc #9
|
||
|
sta _right_index
|
||
|
dec _loop_count
|
||
|
bne _loop
|
||
|
rts
|
||
|
|
||
|
.pend
|
||
|
|
||
|
|
||
|
|
||
|
a_times_5 .proc
|
||
|
sta P8ZP_SCRATCH_B1
|
||
|
asl a
|
||
|
asl a
|
||
|
clc
|
||
|
adc P8ZP_SCRATCH_B1
|
||
|
rts
|
||
|
.pend
|
||
|
|
||
|
func_any_f_into_A .proc
|
||
|
jsr a_times_5
|
||
|
jmp prog8_lib.func_any_b_into_A
|
||
|
.pend
|
||
|
|
||
|
func_all_f_into_A .proc
|
||
|
jsr a_times_5
|
||
|
jmp prog8_lib.func_all_b_into_A
|
||
|
.pend
|
||
|
|
||
|
func_any_f_stack .proc
|
||
|
jsr a_times_5
|
||
|
jmp prog8_lib.func_any_b_stack
|
||
|
.pend
|
||
|
|
||
|
func_all_f_stack .proc
|
||
|
jsr a_times_5
|
||
|
jmp prog8_lib.func_all_b_stack
|
||
|
.pend
|