Machine interface
code bye $9588 end-code
code sleep $9588 end-code
code standby $9588 end-code
code break $9598 end-code
code sei $9478 end-code
code cli $94f8 end-code
code reset $940c $0000 end-code
code wdt! $95a8 $9100 $0060 $6108 $9300 $0060 $93a0 $0060
$91a9 $91b9 end-code
Stack manipulation
code dup $93ba $93aa end-code
code 2dup $01fe $9101 $9111 $93ba $93aa $931a $930a end-code
code drop $91a9 $91b9 end-code
code swap $01fd $91a9 $91b9 $93fa $93ea end-code
code over $01fe $93ba $93aa $91a1 $91b1 end-code
code rot $9119 $9109 $91e9 $91f9 $930a $931a $93ba $93aa $01df end-code
code ?dup $018d $2b01 $f011 $93ba $93aa end-code
code nip $9622 end-code
Logical operators
code and $91e9 $91f9 $23ae $23bf end-code
code or $91e9 $91f9 $2bae $2bbf end-code
code invert $95a0 $95b0 end-code
code not $efef $27ae $27be end-code
code xor $91e9 $91f9 $27ae $27bf end-code
code aligned $9611 $7fae end-code
code bswap $2f0b $2fba $2fa0 end-code
Arithmetic
code + $91e9 $91f9 $0fae $1fbf end-code
code - $91e9 $91f9 $1bea $0bfb $01df end-code
code u/mod $9129 $9139 $2744 $1b55 $e101 $1f22 $1f33 $950a
$f421 $935a $934a $01d9 $c00b $1f44 $1f55 $1b4a
$0b5b $f420 $0f4a $1f5b $9488 $cfef $9408 $cfed end-code
code abs $23bb $f00a $c003 $95a0 $95b0 $9611 end-code
code 1+ $9611 end-code
code 2+ $9612 end-code
code 4+ $9614 end-code
code 1- $9711 end-code
code 2- $9712 end-code
code 4- $9714 end-code
code char+ $9611 end-code
code cell+ $9612 end-code
code char- $9711 end-code
code cell- $9712 end-code
code 2/ $95b5 $95a7 end-code
code 2* $0faa $1fbb end-code
code cells $0faa $1fbb end-code
code chars end-code
code cell $93ba $93aa $e0a2 $e0b0 end-code
code /cell $95b6 $95a7 end-code
code lshift $2fea $2beb $91e9 $91f9 $f021 $0fee $1fff $9711
$f7e1 $01df end-code
code rshift $2fea $2beb $91e9 $91f9 $f021 $95f6 $95e7 $9711
$f7e1 $01df end-code
code shl $0faa $1fbb end-code
code shr $95b6 $95a7 end-code
code 0= $2bab $f019 $e0a0 $e0b0 $c001 $9711 end-code
code 0<> $2bab $f011 $efaf $efbf end-code
code 0< $e000 $17a0 $07b0 $e0a0 $e0b0 $f00c $c001 $9711 end-code
code 0> $e000 $17a0 $07b0 $efaf $efbf $f011 $f00c $c001 $9611 end-code
code = $9109 $9119 $1ba0 $0bb1 $f019 $e0a0 $e0b0 $c001 $9711 end-code
code < $9109 $9119 $1b0a $0b1b $e0a0 $e0b0 $f00a $c002 $efaf $efbf end-code
code u< $9109 $9119 $171b $070a $e0a0 $e0b0 $f008 $c001 $9711 end-code
code m+ $9129 $9139 $9109 $9119 $e050 $e040 $0fa0 $1fb1
$1f24 $1f35 $93ba $93aa $01d9 end-code
code um* $9149 $9159 $01bd $2422 $9f75 $01d0 $9f64 $0180
$9f74 $0d10 $1da1 $1db2 $9f56 $0d10 $1da1 $1db2
$931a $930a end-code
code m* $9149 $9159 $01bd $2422 $0275 $01d0 $9f64 $0180
$0374 $09b2 $0d10 $1da1 $1db2 $0356 $09b2 $0d10
$1da1 $1db2 $931a $930a end-code
code negate $efef $27ae $27be $9611 end-code
: true $ffff ;
: false 0 ;
: 0<= 0> negate ;
: 0>= 0< negate ;
: tuck swap over ;
: 2swap rot >r rot r> ;
: ?negate 0< if negate then ;
: dnegate swap invert swap invert 1 m+ ;
: ?dnegate 0< if dnegate then ;
: dabs dup ?dnegate ;
: u* um* drop ;
: * m* drop ;
: h! ! ;
: h@ @ ;
: /mod 2dup xor 0< >r
swap dup 0< dup >r if negate then
swap dup 0< if negate then
u/mod swap r> if negate then swap r> if negate then ;
: sm/rem nip /mod ; :TODO: 32/16 signed division
code um/mod $9129 $9139 $9109 $9119 $e140 $0f00 $1f11 $1f22
$1f33 $f018 $172a $073b $f018 $1b2a $0b3b $6001
$954a $f799 $933a $932a $01d8 end-code
: */mod >r m* r> sm/rem ;
: */ */mod swap drop ;
: bis! tuck c@ or swap c! ;
: bic! swap invert over c@ and swap c! ;
: xor! tuck c@ xor swap c! ;
: bit@ c@ and 0<> ;