67 lines
1.6 KiB
Text
67 lines
1.6 KiB
Text
|00 @System [ &vector $2 &wst $1 &rst $1 &eaddr $2 &ecode $1 &pad $1 &r $2 &g $2 &b $2 &debug $1 &halt $1 ]
|
|
|10 @Console [ &vector $2 &read $1 &pad $5 &write $1 &error $1 ]
|
|
|
|
( program )
|
|
|0100 @on-reset ( -> )
|
|
#0a02
|
|
DUP2 SWP ;Labels/a <print-arg> ;Labels/b <print-arg>
|
|
bitwise
|
|
halt
|
|
BRK
|
|
|
|
@bitwise ( a b -- )
|
|
;Labels/not <print-str> ;Labels/a <print-str> ;Labels/equ <print-str> DUP2 [ POP #ff EOR ] <print-result>
|
|
;Labels/and <print-label> DUP2 [ AND ] <print-result>
|
|
;Labels/or <print-label> DUP2 [ ORA ] <print-result>
|
|
;Labels/xor <print-label> DUP2 [ EOR ] <print-result>
|
|
;Labels/shl <print-label> DUP2 [ #40 SFT SFT ] <print-result>
|
|
;Labels/shr <print-label> DUP2 [ SFT ] <print-result>
|
|
;Labels/rol <print-label> DUP2 [ #40 SFT #00 ROT ROT SFT2 ORA ] <print-result>
|
|
;Labels/ror <print-label> [ SWP #00 ROT SFT2 ORA ] <print-result>
|
|
JMP2r
|
|
|
|
@halt ( -- )
|
|
#01 .System/halt DEO
|
|
BRK
|
|
|
|
@<print-arg> ( a name* -- )
|
|
<print-str> ;Labels/equ <print-str> <print-result>
|
|
JMP2r
|
|
|
|
@<print-result> ( a -- )
|
|
<print-hex> ;Labels/newline <print-str>
|
|
JMP2r
|
|
|
|
@<print-label> ( label* -- )
|
|
;Labels/a <print-str>
|
|
<print-str>
|
|
;Labels/b <print-str>
|
|
;Labels/equ <print-str>
|
|
JMP2r
|
|
|
|
@<print-hex> ( byte -- )
|
|
[ LIT "$ ] .Console/write DEO
|
|
DUP #04 SFT <print-hex>/l
|
|
&l ( -- )
|
|
#0f AND DUP #09 GTH #27 MUL ADD [ LIT "0 ] ADD .Console/write DEO
|
|
JMP2r
|
|
|
|
@<print-str> ( str* -- )
|
|
&while ( -- )
|
|
LDAk .Console/write DEO
|
|
INC2 LDAk ?&while
|
|
POP2 JMP2r
|
|
|
|
@Labels
|
|
&a "a 20 $1
|
|
&b "b 20 $1
|
|
&equ "= 20 $1
|
|
&newline 0a $1
|
|
¬ "NOT 20 $1
|
|
&and "AND 20 $1
|
|
&or "OR 20 $1
|
|
&xor "XOR 20 $1
|
|
&shl "SHL 20 $1
|
|
&shr "SHR 20 $1
|
|
&rol "ROL 20 $1
|
|
&ror "ROR 20 $1
|