( 54K . lib/string ) |10 @Console/vector $2 &read $1 &pad $4 &type $1 &write $1 &error $1 |100 @on-reset ( -> ) ;tests/end ;tests &>l LDA2k JSR2 INC2 INC2 GTH2k ?&>l POP2 POP2 ( lb ) #0a18 DEO ( debugger ) #010e DEO ( exit ) #800f DEO BRK @tests [ =u8/ =u16/ ] &end $2 ( @|u8 ) %u8/mod ( a b -- a%b ) { DIVk MUL SUB } %u8/min ( a b -- min ) { LTHk [ JMP SWP ] POP } %u8/max ( a b -- min ) { GTHk [ JMP SWP ] POP } @u8/pow ( v exp -- v^exp ) OVR STH &>lp #01 SUB DUP ?{ POP2 STHr JMP2r } OVR STH MULr !&>lp @u8/sqrt ( n -- sq ) DUP ?{ JMP2r } INCk ?{ POP #10 JMP2r } INC #01 SFT [ LITr 01 ] &>ls STHkr SUB INCr DUP STHkr GTH ?&>ls POP STHr JMP2r @u8/ ( byte -- ) DUP #04 SFT / ( >> ) & ( byte -- ) #0f AND DUP #09 GTH #27 MUL ADD ( >> ) & ( d -- ) [ LIT "0 ] ADD #18 DEO JMP2r @u8/ ( u8 -- ) DUP #0a LTH ?{ DUP #64 LTH ?{ ( 100 ) DUP #64 DIV / #64 /mod } ( 10 ) DUP #0a DIV / #0a /mod } ( 1 ) !/ ( @|u16 ) %s16/abs ( a* -- res* ) { DUP2k #1f SFT2 MUL2 SUB2 } %s16/lth ( a* b* -- f ) { SUB2 POP #07 SFT } %s16/gth ( a* b* -- f ) { SWP2 s16/lth } %u16/mod ( a* b* -- a%b* ) { DIV2k MUL2 SUB2 } %u16/min ( a b -- min ) { LTH2k [ JMP SWP2 ] POP2 } %u16/max ( a b -- min ) { GTH2k [ JMP SWP2 ] POP2 } @u16/pow ( v* exp* -- v^exp* ) OVR2 STH2 &>lp #0001 SUB2 ORAk ?{ POP2 POP2 STH2r JMP2r } OVR2 STH2 MUL2r !&>lp @u16/sqrt ( n* -- sq* ) ORAk ?{ POP JMP2r } INC2k ORA ?{ INC SWP INC2 JMP2r } INC2 #01 SFT2 [ LIT2r 0001 ] &>ls STH2kr SUB2 INC2r DUP2 STH2kr GTH2 ?&>ls POP2 STH2r JMP2r @u16/ ( short* -- ) SWP u8/ !u8/ ( @|u32 ) @u32/ ( hs* ls* -- ) SWP2 /u16 &u16 ( hb lb -- ) SWP /u8 &u8 ( xx -- ) DUP #04 SFT /u4 &u4 ( x -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD .Console/write DEO JMP2r ( @|Tests ) @u8/ ( -- value ) ;&name str/ #06 #04 /mod #02 NEQ ?&fail #06 #04 /min #04 NEQ ?&fail #04 #06 /min #04 NEQ ?&fail #06 #04 /max #06 NEQ ?&fail #04 #06 /max #06 NEQ ?&fail #02 #03 /pow #08 NEQ ?&fail #03 #03 /pow #1b NEQ ?&fail #04 /sqrt #02 NEQ ?&fail #01 JMP2r &fail #00 JMP2r &name 0a "u8: 20 $1 @u16/ ( -- ) ;&name str/ #0006 #0004 /mod #0002 NEQ2 ?&fail #0006 #0004 /min #0004 NEQ2 ?&fail #0004 #0006 /min #0004 NEQ2 ?&fail #0006 #0004 /max #0006 NEQ2 ?&fail #0004 #0006 /max #0006 NEQ2 ?&fail #0002 #0003 /pow #0008 NEQ2 ?&fail #0003 #0003 /pow #001b NEQ2 ?&fail #0004 /sqrt #0002 NEQ2 ?&fail #01 JMP2r &fail #00 JMP2r &name 0a "u16: 20 $1 @ ( bool -- ) #30 ADD #18 DEO JMP2r @str/ ( str* -- ) LDAk DUP ?{ POP POP2 JMP2r } #18 DEO INC2 !/