prog8/prog8lib/prog8lib.p8

269 lines
2.5 KiB
Plaintext
Raw Normal View History

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
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
; 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 +
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
push_float_from_indexed_var
rts
2018-10-23 23:39:52 +00:00
pop_var_float
rts
pop_float_to_indexed_var
rts
2018-10-23 23:39:52 +00:00
pop_mem_float
rts
2018-10-23 23:39:52 +00:00
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
add_w
rts ; @todo inline?
add_uw
rts ; @todo inline?
sub_w
rts ; @todo inline?
sub_uw
rts ; @todo inline?
mul_b
rts
mul_ub
rts
mul_w
rts
mul_uw
rts
div_b
rts
div_ub
rts
div_w
rts
div_uw
rts
remainder_b
rts
remainder_ub
rts
remainder_w
rts
remainder_uw
rts
remainder_f
rts
equal_ub
rts
equal_b
rts
equal_w
rts
equal_uw
rts
equal_f
rts
less_ub
rts
less_b
rts
less_w
rts
less_uw
rts
less_f
rts
lesseq_ub
rts
lesseq_b
rts
lesseq_w
rts
lesseq_uw
rts
lesseq_f
rts
greater_ub
rts
greater_b
rts
greater_w
rts
greater_uw
rts
greater_f
rts
greatereq_ub
rts
greatereq_b
rts
greatereq_w
rts
greatereq_uw
rts
greatereq_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
}