CoreForth-0

avr/core.ft.md


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<> ;