( ESOP stdlib, macro part ) |00 @Control [ &framevec $2 &io $2 &random $1 &status $1 &sound $1 &syscall $1 ] ( control block macros ) %SETSCRVEC { .Control/framevec DEO2 } %INKEY { .Control/io DEI2 } %PXL { .Control/io DEO2 } %PXLk { DUP2 PXL } %RND { .Control/random DEI } %STACKTRACE { #ff .Control/random DEO } %DEVSTAT { .Control/status DEI } %SND { .Control/sound DEO } %SYS { .Control/syscall DEO } ( some syscall macros ) %HLT { #1f SYS } ( val -- ) %DBG { #20 SYS SYS } ( val -- val ) %DBGBYTE { DUP DBG } ( val* -- val* ) %DBGSHORT { DUP2 SWP DBG DBG } ( input helper macros ) %KP-0 { #0001 } %KP-1 { #0002 } %KP-2 { #0004 } %KP-3 { #0008 } %KP-4 { #0010 } %KP-5 { #0020 } %KP-6 { #0040 } %KP-7 { #0080 } %KP-8 { #0100 } %KP-9 { #0200 } %KP-A { #0400 } %KP-B { #0800 } %KP-C { #1000 } %KP-D { #2000 } %KP-STAR { #4000 } %KP-HASH { #8000 } ( jump to label or subroutine if a particular key is pressed ) ( label* keymask* -- ) %JMPKEY { INKEY AND2 ORA ROT ROT JCN2 } %JSRKEY { INKEY AND2 SWP2 JSR2 } ( misc macros ) ( byte to short ) %BTS { #00 SWP } ( decrement ) %DEC { #01 SUB } ( get the bit or the nibble of a specific number ) ( val bitnum -- bit ) %GETBIT { SFT #01 AND } ( val* bitnum -- bit ) %GETBIT2 { SFT2 #0001 AND2 NIP } ( val* nibnum -- nibble ) %GETNIBBLE { #20 SFT SFT2 #000f AND2 NIP }