73 lines
1.4 KiB
Text
73 lines
1.4 KiB
Text
%\n { 0a } %\s { 20 } %\0 { 00 }
|
|
%newline { [ LIT2 \n -Console/write ] DEO }
|
|
|
|
%not { #ff EOR }
|
|
%and { AND }
|
|
%or { ORA }
|
|
%xor { EOR }
|
|
%shl { #40 SFT SFT }
|
|
%shr { SFT }
|
|
%rol { #40 SFT #00 ROT ROT SFT2 ORA }
|
|
%ror { SWP #00 ROT SFT2 ORA }
|
|
|
|
|18 @Console/write
|
|
|
|
|100
|
|
|
|
#0a02
|
|
DUP2 SWP ;msgs/a print/arg ;msgs/b print/arg
|
|
bitwise
|
|
|
|
BRK
|
|
|
|
@bitwise ( a b -- )
|
|
;msgs/not print/str ;msgs/a print/str
|
|
;msgs/equ print/str OVR not print/result
|
|
;msgs/and print/label DUP2 and print/result
|
|
;msgs/or print/label DUP2 or print/result
|
|
;msgs/xor print/label DUP2 xor print/result
|
|
;msgs/shl print/label DUP2 shl print/result
|
|
;msgs/shr print/label DUP2 shr print/result
|
|
;msgs/rol print/label DUP2 rol print/result
|
|
;msgs/ror print/label ror !print/result
|
|
|
|
@print/label ( label* -- )
|
|
;msgs/a /str
|
|
/str
|
|
;msgs/b /str
|
|
;msgs/equ !/str
|
|
|
|
@print/byte ( byte -- )
|
|
[ LIT "$ ] .Console/write DEO
|
|
DUP #04 SFT /nibble
|
|
( >> )
|
|
|
|
@print/nibble ( -- )
|
|
#0f AND DUP #09 GTH #27 MUL ADD [ LIT "0 ] ADD .Console/write DEO
|
|
JMP2r
|
|
|
|
@print/arg ( a name* -- )
|
|
/str ;msgs/equ /str
|
|
( >> )
|
|
|
|
@print/result ( a -- )
|
|
/byte newline
|
|
JMP2r
|
|
|
|
@print/str ( str* -- )
|
|
LDAk .Console/write DEO
|
|
INC2 LDAk ?/str
|
|
POP2 JMP2r
|
|
|
|
@msgs [
|
|
&a "a \s \0
|
|
&b "b \s \0
|
|
&equ "= \s \0
|
|
¬ "NOT \s \0
|
|
&and "AND \s \0
|
|
&or "OR \s \0
|
|
&xor "XOR \s \0
|
|
&shl "SHL \s \0
|
|
&shr "SHR \s \0
|
|
&rol "ROL \s \0
|
|
&ror "ROR \s \0 ]
|