TriOS/forth/cog.lib

75 lines
1.7 KiB
Plaintext

hex
ifnot: lib:cog
: lib:cog ;
\ cog special register
ifnot: ctra 1F8 wconstant ctra :;
ifnot: ctrb 1F9 wconstant ctrb :;
ifnot: frqa 1FA wconstant frqa :;
ifnot: frqb 1FB wconstant frqb :;
ifnot: phsa 1FC wconstant phsa :;
ifnot: phsb 1FD wconstant phsb :;
ifnot: vcfg 1FE wconstant vcfg :;
ifnot: vscl 1FF wconstant vscl :;
\ this words needs to align with the assembler code
ifnot: _faddrmask : _faddrmask 1 _cv ;
ifnot: _flongmask : _flongmask 2 _cv ;
ifnot: _stptr : _stptr 5 _cv ;
ifnot: _sttos : _sttos 7 _cv ;
ifnot: _treg1 : _treg1 8 _cv ;
ifnot: _treg2 : _treg2 9 _cv ;
ifnot: _treg3 : _treg3 a _cv ;
ifnot: _treg4 : _treg4 b _cv ;
ifnot: _treg5 : _treg5 c _cv ;
ifnot: _treg6 : _treg6 d _cv ;
ifnot: _stbot : _stbot e _cv ;
ifnot: _sttop : _sttop 2e _cv ;
ifnot: _rsbot : _rsbot _sttop ;
\ waitcnt ( n1 n2 -- n1 ) \ wait until n1, add n2 to n1
ifnot: waitcnt
: waitcnt _execasm2>1 1F1 _cnip ;
\ waitpeq ( n1 n2 -- ) \ wait until state n1 is equal to
\ ina anded with n2
ifnot: waitpeq
: waitpeq _execasm2>0 1E0 _cnip ;
\ waitpne ( n1 n2 -- ) \ wait until state n1 is not equal
\ to ina anded with n2
ifnot: waitpne
: waitpne _execasm2>0 1E8 _cnip ;
\ lockret ( n1 -- ) deallocate a lock, previously allocated
\ via locknew
ifnot: lockret
: lockret 5 hubop 2drop ;
\ locknew ( -- n2 ) allocate a lock, result is in n2, -1
\ if unsuccessful
ifnot: locknew
: locknew -1 4 hubop -1 = if drop -1 then ;
\ cog+ ( -- ) add a forth cog
ifnot: cog+
: cog+ (cog+) ;
\ (cog-) ( -- ) stop first forth cog, cannot be executed form
\ the first forth cog
ifnot: (cog-)
: (cog-) nfcog cogstop ;
\ cog- ( -- ) stop first forth cog, cannot be executed form
\ the first forth cog
ifnot: cog-
: cog- (cog-) ;