Math, memory & stack manipulation --------------------------------- off ( n -- ) writes 0 to given address, good for zeroing variable. ex: MyVariable off on ( n -- ) writes -1 (true flag) to given address. ex: MyVariable on 2dup ( n1 n2 -- n1 n2 n1 n2 ) 2drop ( n1 n2 -- ) nip ( n1 n2 -- n2 ) neg ( n1 -- -n1 ) negotiate bit@ ( n bit -- result ) return specified bit from n. ex: 38 2 bit@ (result will be 1) to32bit ( n1 n2 n3 n4 -- n32 ) treat 4 last stack elements as bytes and unite them into 32 bit dword. Most significant byte on top. ex: 12 76 23 11 to32bit result: 186076172 to8bit ( n32 -- n1 n2 n3 n4 ) break 32 bit number into 4 bytes. Useful if you need to send 32 bit numbers thru 8 bit COM port. ex: 186076172 to8bit result: 12 76 23 11 mod ( n1 n2 -- reminder ) divide n1 by n2 and returns reminder. ex: 12 5 mod result: 2 bound ( low n high -- n ) check if n is in given bounds, if not then incarease/decarease it to match bounds. ex: 5 80 15 bound result: 15 5 10 15 bound result: 10 5 -10 15 bound result: 5 bound? ( low n high -- result ) returns true if n is in the given bounds. tab ( col -- spaces) calculate amount of spaces to add ta reach next tabulation from given column. count ( addr -- addr+1 n ) Useful for returning bytes from constantly incareasing address. Module "type" is nice example. c, ( n -- ) store one byte at memory specified by "h". And incarease "h" by 1. , ( n -- ) store 32 bit number at memory specified by "h". And incarease "h" by 4. cmove ( addr1 addr2 n -- ) copy "n" amount of bytes from memory at "addr1" to memory at "addr2". rnd ( limit -- result ) generates random number in range 0 to "limit"-1. abs ( n -- |n| ) returns absolute value of "n"