2018-09-15 14:21:05 +00:00
|
|
|
; Prog8 internal library routines - always included by the compiler
|
2017-12-30 12:34:52 +00:00
|
|
|
;
|
2018-01-08 02:31:23 +00:00
|
|
|
; Written by Irmen de Jong (irmen@razorvine.net) - license: GNU GPL 3.0
|
2018-01-13 13:17:18 +00:00
|
|
|
;
|
2017-12-30 12:34:52 +00:00
|
|
|
; indent format: TABS, size=8
|
|
|
|
|
|
|
|
|
2018-09-15 14:21:05 +00:00
|
|
|
~ prog8_lib {
|
2017-12-30 19:03:19 +00:00
|
|
|
; note: the following ZP scratch registers must be the same as in c64lib
|
2018-10-21 21:03:15 +00:00
|
|
|
memory ubyte SCRATCH_ZP1 = $02 ; scratch register #1 in ZP
|
|
|
|
memory ubyte SCRATCH_ZP2 = $03 ; scratch register #2 in ZP
|
|
|
|
memory uword SCRATCH_ZPWORD1 = $fb ; scratch word in ZP ($fb/$fc)
|
|
|
|
memory uword SCRATCH_ZPWORD2 = $fd ; scratch word in ZP ($fd/$fe)
|
2017-12-30 12:34:52 +00:00
|
|
|
|
|
|
|
|
2018-08-12 23:30:33 +00:00
|
|
|
%asm {{
|
2017-12-30 12:34:52 +00:00
|
|
|
|
2018-10-21 21:03:15 +00:00
|
|
|
; 16-bit rotate right (as opposed to the 6502's usual 17-bit rotate with carry)
|
|
|
|
; the word is placed in SCRATCH_ZPWORD1
|
|
|
|
ror2_word
|
|
|
|
lsr SCRATCH_ZPWORD1+1
|
|
|
|
ror SCRATCH_ZPWORD1
|
2018-02-03 00:44:14 +00:00
|
|
|
bcc +
|
2018-10-21 21:03:15 +00:00
|
|
|
lda SCRATCH_ZPWORD1+1
|
|
|
|
ora #$80
|
|
|
|
sta SCRATCH_ZPWORD1+1
|
2018-02-04 21:00:08 +00:00
|
|
|
+ rts
|
|
|
|
|
2018-10-23 23:39:52 +00:00
|
|
|
|
|
|
|
|
|
|
|
; @todo: stubs for now
|
2018-10-25 21:17:10 +00:00
|
|
|
; @todo: move float operations to their own library (only included when floats are enabled)
|
2018-10-23 23:39:52 +00:00
|
|
|
|
|
|
|
ub2float
|
|
|
|
rts
|
|
|
|
|
2018-10-26 22:34:42 +00:00
|
|
|
b2float
|
|
|
|
rts
|
|
|
|
|
2018-10-23 23:39:52 +00:00
|
|
|
uw2float
|
|
|
|
rts
|
|
|
|
|
2018-10-26 22:34:42 +00:00
|
|
|
w2float
|
|
|
|
rts
|
|
|
|
|
2018-10-23 23:39:52 +00:00
|
|
|
push_float
|
|
|
|
rts
|
|
|
|
|
|
|
|
pop_var_float
|
|
|
|
rts
|
|
|
|
|
|
|
|
copy_float
|
|
|
|
rts
|
|
|
|
|
|
|
|
inc_var_f
|
|
|
|
rts
|
|
|
|
|
|
|
|
dec_var_f
|
|
|
|
rts
|
|
|
|
|
|
|
|
div_f
|
|
|
|
rts
|
|
|
|
|
|
|
|
add_f
|
|
|
|
rts
|
|
|
|
|
|
|
|
sub_f
|
|
|
|
rts
|
|
|
|
|
|
|
|
mul_f
|
|
|
|
rts
|
|
|
|
|
2018-10-25 21:17:10 +00:00
|
|
|
neg_f
|
|
|
|
rts
|
|
|
|
|
2018-10-23 23:39:52 +00:00
|
|
|
sub_uw
|
|
|
|
rts
|
|
|
|
|
|
|
|
less_ub
|
|
|
|
rts
|
|
|
|
|
|
|
|
less_f
|
|
|
|
rts
|
|
|
|
|
2018-10-25 21:17:10 +00:00
|
|
|
|
|
|
|
func_sin
|
|
|
|
rts
|
|
|
|
func_cos
|
|
|
|
rts
|
|
|
|
func_abs
|
|
|
|
rts
|
|
|
|
func_acos
|
|
|
|
rts
|
|
|
|
func_asin
|
|
|
|
rts
|
|
|
|
func_tan
|
|
|
|
rts
|
|
|
|
func_atan
|
|
|
|
rts
|
|
|
|
func_ln
|
|
|
|
rts
|
|
|
|
func_log2
|
|
|
|
rts
|
|
|
|
func_log10
|
|
|
|
rts
|
|
|
|
func_sqrt
|
|
|
|
rts
|
|
|
|
func_rad
|
|
|
|
rts
|
|
|
|
func_deg
|
|
|
|
rts
|
|
|
|
func_round
|
|
|
|
rts
|
|
|
|
func_floor
|
|
|
|
rts
|
|
|
|
func_ceil
|
|
|
|
rts
|
|
|
|
func_max
|
|
|
|
rts
|
|
|
|
func_min
|
|
|
|
rts
|
|
|
|
func_avg
|
|
|
|
rts
|
|
|
|
func_sum
|
|
|
|
rts
|
|
|
|
func_len
|
|
|
|
rts
|
|
|
|
func_any
|
|
|
|
rts
|
|
|
|
func_all
|
|
|
|
rts
|
|
|
|
func_rnd
|
|
|
|
rts
|
|
|
|
func_rndw
|
|
|
|
rts
|
|
|
|
func_rndf
|
|
|
|
rts
|
|
|
|
func_wrd
|
|
|
|
rts
|
|
|
|
func_uwrd
|
|
|
|
rts
|
|
|
|
func_str2byte
|
|
|
|
rts
|
|
|
|
func_str2ubyte
|
|
|
|
rts
|
|
|
|
func_str2word
|
|
|
|
rts
|
|
|
|
func_str2uword
|
|
|
|
rts
|
|
|
|
func_str2float
|
|
|
|
rts
|
|
|
|
|
2018-08-12 23:30:33 +00:00
|
|
|
}}
|
2017-12-30 12:34:52 +00:00
|
|
|
}
|