281 lines
6.4 KiB
Tal
281 lines
6.4 KiB
Tal
|100
|
|
LIT2r 0000
|
|
|
|
!{ @i $2 } #0000 ;i STA2
|
|
&while.0 ;i LDA2 #0006 LTH2 #03 JCN !{
|
|
;fixed_size ;i LDA2 #0002 MUL2 ADD2 LDA2 nat_to_str_ str/<print>
|
|
;{ #0002 ADD2 } !{ 20 00 } str/<print>
|
|
;i LDA2 #0001 ADD2 ;i STA2 !&while.0 }
|
|
;{ #0002 ADD2 } !{ 0a 00 } str/<print>
|
|
POP2r BRK @sext
|
|
#80 ANDk EQU #ff MUL SWP JMP2r
|
|
@sdiv
|
|
OVR #80 AND ?&b_neg &b_pos OVR2 POP #80 AND ?&a_neg_b_pos DIV2 JMP2r &a_neg_b_pos SWP2 #0000 SWP2 SUB2 SWP2 DIV2 #0000 SWP2 SUB2 JMP2r
|
|
&b_neg #0000 SWP2 SUB2 OVR2 POP #80 AND ?&a_neg_b_neg DIV2 #0000 SWP2 SUB2 JMP2r
|
|
&a_neg_b_neg #0000 ROT2 SUB2 SWP2 DIV2 JMP2r
|
|
|
|
@aalloc_ ( size* -- result* )
|
|
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
|
;mem_length_ LDA2 STH2kr STA2
|
|
;mem_length_ LDA2k STH2kr INC2 INC2 LDA2 ADD2 SWP2 STA2
|
|
;mem_ STH2kr LDA2 ADD2 !&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@areturn_ ( size* src* checkpoint* -- result* )
|
|
OVR2r LIT2r 000a SUB2r STH2kr #0008 ADD2 STA2
|
|
STH2kr #0006 ADD2 STA2
|
|
STH2kr #0004 ADD2 STA2
|
|
;mem_ STH2kr #0008 ADD2 LDA2 ADD2 STH2kr INC2 INC2 STA2
|
|
STH2kr #0006 ADD2 LDA2 STH2kr INC2 INC2 LDA2 NEQ2 ?&end.1
|
|
STH2kr #0006 ADD2 LDA2 !&return
|
|
|
|
&end.1
|
|
#0000 STH2kr STA2
|
|
|
|
&begin.2
|
|
STH2kr LDA2 STH2kr #0004 ADD2 LDA2 LTH2 #00 EQU ?&break.2
|
|
STH2kr #0006 ADD2 LDA2 STH2kr LDA2 ADD2 LDA sext
|
|
STH2kr INC2 INC2 LDA2 STH2kr LDA2 ADD2 STA
|
|
POP
|
|
|
|
&continue.2
|
|
STH2kr LDA2k INC2k ROT2 STA2
|
|
POP2 !&begin.2
|
|
|
|
&break.2
|
|
STH2kr #0008 ADD2 LDA2 STH2kr #0004 ADD2 LDA2 ADD2 ;mem_length_ STA2
|
|
#0000 ;mem_ ;mem_length_ LDA2 ADD2 STA
|
|
POP STH2kr INC2 INC2 LDA2 !&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@afree_ ( -- result* )
|
|
OVR2r #0000 ;mem_length_ STA2
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@amcpy_ ( length* from* -- result* )
|
|
OVR2r LIT2r 0008 SUB2r STH2kr #0006 ADD2 STA2
|
|
STH2kr #0004 ADD2 STA2
|
|
STH2kr #0004 ADD2 LDA2 aalloc_
|
|
STH2kr INC2 INC2 STA2
|
|
#0000 STH2kr STA2
|
|
|
|
&begin.1
|
|
STH2kr LDA2 STH2kr #0004 ADD2 LDA2 LTH2 #00 EQU ?&break.1
|
|
STH2kr #0006 ADD2 LDA2 STH2kr LDA2 ADD2 LDA sext
|
|
STH2kr INC2 INC2 LDA2 STH2kr LDA2 ADD2 STA
|
|
POP
|
|
|
|
&continue.1
|
|
STH2kr LDA2k INC2k ROT2 STA2
|
|
POP2 !&begin.1
|
|
|
|
&break.1
|
|
STH2kr INC2 INC2 LDA2 !&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@nat_to_str_ ( n* -- result* )
|
|
OVR2r LIT2r 000a SUB2r STH2kr #0008 ADD2 STA2
|
|
#0005 STH2kr STA2
|
|
|
|
&begin.1
|
|
STH2kr #0008 ADD2 LDA2 #000a OVR2 OVR2 DIV2 MUL2 SUB2 #0030 ADD2 STH2kr INC2 INC2 STH2kr LDA2k #0001 SUB2 SWP2 STA2k
|
|
POP2 ADD2 STA
|
|
POP STH2kr #0008 ADD2 LDA2k #000a DIV2 SWP2 STA2
|
|
|
|
&continue.1
|
|
#0000 STH2kr #0008 ADD2 LDA2 LTH2 ?&begin.1
|
|
|
|
&break.1
|
|
#0005 STH2kr LDA2 SUB2 STH2kr INC2 INC2 STH2kr LDA2 ADD2 amcpy_
|
|
!&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@int_to_str_ ( n* -- result* )
|
|
OVR2r LIT2r 000c SUB2r STH2kr #000a ADD2 STA2
|
|
#0006 STH2kr INC2 INC2 STA2
|
|
STH2kr #000a ADD2 LDA2 #8000 EOR2 #8000 LTH2 #00 SWP #0000 NEQ2 #00 SWP STH2kr STA
|
|
POP LDAkr STHr sext
|
|
#0000 EQU2 ?&end.1
|
|
#0000 STH2kr #000a ADD2 LDA2 SUB2 STH2kr #000a ADD2 STA2
|
|
|
|
&end.1
|
|
|
|
&begin.2
|
|
STH2kr #000a ADD2 LDA2 #000a OVR2 OVR2 sdiv/b_pos
|
|
MUL2 SUB2 #0030 ADD2 STH2kr #0004 ADD2 STH2kr INC2 INC2 LDA2k #0001 SUB2 SWP2 STA2k
|
|
POP2 ADD2 STA
|
|
POP STH2kr #000a ADD2 LDA2k #000a sdiv/b_pos
|
|
SWP2 STA2
|
|
|
|
&continue.2
|
|
#8000 STH2kr #000a ADD2 LDA2 #8000 EOR2 LTH2 ?&begin.2
|
|
|
|
&break.2
|
|
LDAkr STHr sext
|
|
#0000 EQU2 ?&end.3
|
|
#002d STH2kr #0004 ADD2 STH2kr INC2 INC2 LDA2k #0001 SUB2 SWP2 STA2k
|
|
POP2 ADD2 STA
|
|
POP
|
|
|
|
&end.3
|
|
#0006 STH2kr INC2 INC2 LDA2 SUB2 STH2kr #0004 ADD2 STH2kr INC2 INC2 LDA2 ADD2 amcpy_
|
|
!&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@int_to_nat_ ( n* -- result* )
|
|
OVR2r LIT2r 0002 SUB2r STH2kr STA2
|
|
STH2kr LDA2 !&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@nat_to_int_ ( n* -- result* )
|
|
OVR2r LIT2r 0002 SUB2r STH2kr STA2
|
|
STH2kr LDA2 !&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@int_add_ ( b* a* -- result* )
|
|
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
|
STH2kr STA2
|
|
STH2kr INC2 INC2 LDA2 STH2kr LDA2 ADD2 !&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@int_sub_ ( b* a* -- result* )
|
|
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
|
STH2kr STA2
|
|
STH2kr INC2 INC2 LDA2 STH2kr LDA2 SUB2 !&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@int_mul_ ( b* a* -- result* )
|
|
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
|
STH2kr STA2
|
|
STH2kr INC2 INC2 LDA2 STH2kr LDA2 MUL2 !&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@int_div_ ( b* a* -- result* )
|
|
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
|
STH2kr STA2
|
|
STH2kr INC2 INC2 LDA2 STH2kr LDA2 sdiv
|
|
!&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@int_eq_ ( b* a* -- result* )
|
|
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
|
STH2kr STA2
|
|
STH2kr INC2 INC2 LDA2 STH2kr LDA2 EQU2 #00 SWP !&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@int_ne_ ( b* a* -- result* )
|
|
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
|
STH2kr STA2
|
|
STH2kr INC2 INC2 LDA2 STH2kr LDA2 NEQ2 #00 SWP !&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@int_lt_ ( b* a* -- result* )
|
|
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
|
STH2kr STA2
|
|
STH2kr INC2 INC2 LDA2 #8000 EOR2 STH2kr LDA2 #8000 EOR2 LTH2 #00 SWP !&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@int_le_ ( b* a* -- result* )
|
|
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
|
STH2kr STA2
|
|
STH2kr INC2 INC2 LDA2 #8000 EOR2 STH2kr LDA2 #8000 EOR2 GTH2 #00 SWP #01 EOR !&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@int_gt_ ( b* a* -- result* )
|
|
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
|
STH2kr STA2
|
|
STH2kr LDA2 #8000 EOR2 STH2kr INC2 INC2 LDA2 #8000 EOR2 LTH2 #00 SWP !&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@int_ge_ ( b* a* -- result* )
|
|
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
|
STH2kr STA2
|
|
STH2kr LDA2 #8000 EOR2 STH2kr INC2 INC2 LDA2 #8000 EOR2 GTH2 #00 SWP #01 EOR !&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@int_neg_ ( f* -- result* )
|
|
OVR2r LIT2r 0002 SUB2r STH2kr STA2
|
|
#0000 STH2kr LDA2 SUB2 !&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@int_abs_ ( f* -- result* )
|
|
OVR2r LIT2r 0002 SUB2r STH2kr STA2
|
|
STH2kr LDA2 #8000 EOR2 #8000 LTH2 ?&then.1
|
|
STH2kr LDA2 !&end.1
|
|
|
|
&then.1
|
|
#0000 STH2kr LDA2 SUB2
|
|
|
|
&end.1
|
|
!&return
|
|
#0000
|
|
|
|
&return
|
|
POP2r JMP2r
|
|
|
|
@str/<print> ( str* -- )
|
|
LDAk DUP ?{ POP POP2 JMP2r }
|
|
#18 DEO
|
|
INC2 !/<print>
|
|
|
|
@mem_length_ #0000
|
|
@mem_ @fixed_size 0001 0002 0003 0004 0005 0006
|
|
|