#lang planet zwizwa/staapl/pic18 \ -*- forth -*-
provide-all
\ On-target immediate words implementing the control words.
staapl pic18/double-math
staapl pic18/double-pred
staapl pic18/execute
staapl pic18/dtc
\ This needs "comma" and a way to back-patch words. The idea is to
\ compile to a RAM buffer first, and transfer it to FLASH when it's
\ done.
staapl pic18/double-comma
macro
: _address word-address lohi forth
: _mask #x3F and : _lmask _mask #x40 or : _compile _mask _, : _literal _lmask _, : _0 0 0
\ These compile unconditional and conditional jump.
: _jump, ' _run _address exitbit _compile : _0=jump, ' _0=run
\ Jumps are proper primitives. They take a single argument which we
\ compile as a literal.
: _hole _here@ _0 _literal : _lpack _>> _lmask : _then _>r _here@ _lpack _r> _!
: _if _hole _0=jump, : _else _>r _hole _jump, _r> _then
: _begin _here@ : _again _lpack _, _jump, : _until _lpack _, _0=jump,
\ COMPLICATIONS: because of the exit bit, jump targets need to be
\ protected so the previous instruction doesn't get exit-tagged. See
\ -m.ss