amforth - Forth pro ATmega
Tato stránka zpřístupňuje křížovou referenci jazyka amforth. Odkazy se generují automaticky na základě zdrojových souborů jazyka amforth.
| Základní informace | |
|---|---|
| Stránka jazyka amforth | http://amforth.sourceforge.net/ |
| Stránka pro download | http://sourceforge.net/projects/amforth |
| Subversion server | https://amforth.svn.sourceforge.net/svnroot/amforth |
| Subversion Info | |
| URL | https://amforth.svn.sourceforge.net/svnroot/amforth/trunk |
| Repository Root | https://amforth.svn.sourceforge.net/svnroot/amforth |
| Repository UUID | 1be2a6a9-e81f-0410-9be0-e59bd151596a |
| Last Changed Author | mtrute |
| Last Changed Rev | 328 |
| Last Changed Date | 2007-06-11 08:42:09 +0200 (Mon, 11 Jun 2007) |
| Word | Label | Definition |
|---|---|---|
| ! | STORE | ( n addr -- ) Memory R( -- ) write 16bit to RAM memory (or IO or CPU registers) |
| # | SHARP | ( d1 -- d2) Numeric IO R( -- ) compiles next digit to HLD |
| #> | SHARP_G | ( d1 -- addr count ) Numeric IO R( -- ) convert HLD buffer to a usable string |
| #int | NUMINT | ( -- n ) Interrupt R( -- ) number of interrupt vectors (0 based) |
| #s | SHARP_S | ( d1 -- 0) Numeric IO R( -- ) call # until a value of zero is reached |
| #tib | NUMBERTIB | ( -- addr ) System R( -- ) address of variable holding the number of characters in TIB |
| ' | TICK | ( -- XT ) Dictionary R( -- ) search dictionary, returns XT or throw an exception -13 |
| ( | LPARENTHESIS | ( -- ) Compiler R( -- ) skip everything up to the closing bracket on the same line |
| * | MUL | ( n1 n2 -- n3 ) Arithmetics R( -- ) multiply routine |
| */ | STARSLASH | (n1 n2 n3 -- n4) Arithmetics R( -- ) signed multiply and division with double precision intermediate |
| */mod | STARSLASHMOD | ( n1 n2 n3 -- rem quot) Arithmetics R( -- ) signed multiply and division with double precision intermediate and remainder |
| + | PLUS | ( n1 n2 -- n3) Arithmetics R( -- ) addition |
| +! | PLUSSTORE | ( n addr -- ) Arithmetics R( -- ) add value to content of RAM address |
| +loop | PLOOP | ( addr -- ) Control Structure R( -- ) compile +loop and resolve branch |
| , | COMMA | ( n -- ) Dictionary R( -- ) compile 16 bit into flash at here. |
| - | MINUS | ( n1 n2 -- n3 ) Arithmetics R( -- ) subtract |
| . | DOT | ( n -- ) Numeric IO R( -- ) prints TOS in free number format |
| ." | DOTSTRING | ( -- ) Compiler R( -- ) compiles string into dictionary to be typed at runtime |
| ." | DOTSTRING | ( -- ) Compiler R( -- ) compiles string into dictionary to be typed at runtime |
| .s | DOTS | ( -- ) Tools R( -- ) stack dump |
| .s | DOTS | ( -- ) Tools R( -- ) stack dump |
| / | SLASH | ( n1 n2 -- n3) Arithmetics R( -- ) diviion |
| /int | INTOFF | ( -- sreg ) Interrupt R( -- ) turns off all interrupts and leaves SREG in TOS |
| /key | SLASHKEY | ( -- f) Character IO R( -- ) fetch 'key? vector and execute it if not zero. Leave true if a character can be read, false otherwise |
| /mod | SLASHMOD | ( n1 n2 -- rem quot) Arithmetics R( -- ) signed division n1/n2 with remainder |
| /string | SLASHSTRING | ( addr1 u1 n-- addr2 u2 ) String R( -- ) adjust string from addr1 to addr1+n, reduce length from u1 to u2 |
| 0 | ZERO | ( -- 0 ) Arithmetics R( -- ) leaves the value 0 on TOS |
| 0< | LESSZERO | ( n1 -- flag) Compare R( -- ) compare with zero |
| 0<> | NOTEQUALZERO | ( n -- flag ) Compare R( -- ) compare with zero |
| 0= | EQUALZERO | ( n -- flag ) Compare R( -- ) compare with 0 (zero) |
| 0> | GREATERZERO | ( n1 -- flag ) Compare R( -- ) compare with zero |
| 1+ | 1PLUS | ( n1 -- n2 ) Arithmetics R( -- ) optimized increment |
| 1- | 1MINUS | ( n1 -- n2 ) Arithmetics R( -- ) optimized decrement (CORE) |
| 1ms | 1MS | ( -- ) Time R(--) busy waits (almost) exactly 1 millisecond |
| 2* | 2STAR | ( n1 -- n2 ) Arithmetics R( -- ) arithmetic shift left |
| 2/ | 2SLASH | ( n1 -- n2 ) Arithmetics R( -- ) arithmetic shift right |
| : | COLON | ( -- ) Compiler R( -- ) create named entry in the dictionary |
| :noname | COLONNONAME | ( -- xt ) Compiler R( -- ) create unnamed entry in the dictionary |
| ; | SEMICOLON | ( -- ) Compiler R( -- ) finish colon defintion, compiles (exit) and returns to interpreter state |
| < | LESS | ( n1 n2 -- flasg) Compare R( -- ) compare two values |
| <# | L_SHARP | ( -- ) Numeric IO R( -- ) emties counted string at address from hld |
| <> | NOTEQUAL | ( n1 n2 -- flag) Compare R( -- ) compare two values |
| = | EQUAL | ( n1 n2 -- flag ) Compare R( -- ) compares two values |
| > | GREATER | ( n1 n2 -- flag ) Compare R( -- ) compares two values (signed) |
| >< | BYTESWAP | ( n1 -- n2 ) Arithmetics R( -- ) swap the bytes of the TOS |
| >in | G_IN | ( -- addr ) System R( -- ) pointer to current read position in TIB |
| >r | TO_R | ( n -- ) Stack R( -- n) move TOS to TOR |
| ?do | QDO | ( -- addr ) Control Structure R( -- ) start do .. [+]loop |
| ?do | QDO | ( -- addr ) Control Structure R( -- ) start do .. [+]loop |
| ?dup | QDUP | ( n1 -- [ n1 n1 ] | 0) Stack R( -- ) duplicate TOS if non-zero |
| @ | FETCH | ( addr -- n ) Memory R( -- ) read 1 cell from RAM (or IO or CPU register) |
| Edefer | EDEFER | ( n <name> -- ) Compiler R( -- ) creates a defer vector which is kept in eeprom. |
| Edefer | EDEFER | ( n <name> -- ) Compiler R( -- ) creates a defer vector which is kept in eeprom. |
| Rdefer | RDEFER | ( n <name> -- ) Compiler R( -- ) creates a RAM based defer vector |
| Rdefer | RDEFER | ( n <name> -- ) Compiler R( -- ) creates a RAM based defer vector |
| [ | LBRACKET | ( -- ) Compiler R( -- ) put system to interpreter state |
| ['] | BRACKETTICK | ( -- XT ) Compiler R( -- ) what does ' in the interpreter mode do in colon definitions |
| \ | BACKSLASH | ( -- ) Compiler R( -- ) everything up to the end of the current line is a comment |
| ] | RBRACKET | ( -- ) Compiler R( -- ) turn on compiler |
| abort | ABORT | ( n*x -- ) Exceptions R( n*y -- ) send an exception -1 |
| abort" | ABORTSTRING | ( n*x -- ) Exceptions R( n*y -- ) check flag. If true emit some text and throw exception -2 |
| abort" | ABORTSTRING | ( n*x -- ) Exceptions R( n*y -- ) check flag. If true emit some text and throw exception -2 |
| abs | ABS | ( n1 -- u1 ) Arithmetics R( -- ) get the absolute value |
| accept | ACCEPT | ( addr n1 -- n2 ) System R( -- ) reads a line with with KEY into addr until n2 characters are reveived or cr/lf detected. |
| again | AGAIN | ( addr -- ) Control Structure R( -- ) go back to begin |
| allot | ALLOT | ( n -- ) System R( -- ) allocate memory in RAM |
| and | AND | ( n1 n2 -- n3 ) Logic R( -- ) bitwise and |
| base | BASE | ( -- addr ) Numeric IO R( -- ) base fo numeric IO |
| baud0 | BAUD0 | ( -- v) System Value R( -- ) returns usart0 baudrate |
| begin | BEGIN | ( -- addr ) Control Structure R( -- ) start a control structture |
| bl | BL | ( -- 32 ) Character IO R( -- ) put ascii code of the blank to the stack |
| c! | CSTORE | ( c addr -- ) Memory R( -- ) store a byte to RAM address |
| c@ | CFETCH | ( addr - c1 ) Memory R( -- ) fetch a single byte from RAM (or IO or CPU register) |
| case | CASE | ( -- 0 ) Control Structure R( -- ) |
| case | CASE | ( -- 0 ) Control Structure R( -- ) |
| catch | CATCH | ( xt -- ) Exceptions R( -- ) or R( ny -- ) execute the XT and restore stack frame if an exception is thrown |
| char | CHAR | ( -- c ) Tools R( -- ) first character of the next word |
| cmove> | CMOVE_G | (addr-from addr-to n -- ) Memory R( -- ) copy data in RAM |
| cold | COLD | ( -- ) System R( -- ) main entry word. executes turnkey operation and executes quit |
| compile | COMPILE | ( -- ) Dictionary R( -- ) copy the next flash cell to HERE |
| constant | CONSTANT | ( n -- ) Compiler R( -- ) create a named constant |
| count | COUNT | ( addr -- addr+1 n) String R( -- ) addr is the address of a counted string in RAM |
| cr | CR | ( -- ) Character IO R( -- ) emits CR/LF |
| create | CREATE | ( -- ) Dictionary R( -- ) create a complete dictionary header. |
| cscan | CSCAN | ( addr1 n1 c -- addr1 n2 ) String R( -- ) Scan string at addr1/n1 until first c, leaving addr1/n2, char at n2 is last non-c character |
| cskip | CSKIP | ( addr1 n1 c -- addr2 n2 ) String R( -- ) skips leading occurancies in string at addr1/n1 leaving addr2/n2 pointing to the 1st non-c character |
| d+ | DPLUS | ( d1 d2 -- d3) Arithmetics R( -- ) add double cell values |
| d+ | DPLUS | ( d1 d2 -- d3) Arithmetics R( -- ) add double cell values |
| d- | DMINUS | ( d1 d2 -- d3 ) Arithmetics R( -- ) subtract double cell values |
| d- | DMINUS | ( d1 d2 -- d3 ) Arithmetics R( -- ) subtract double cell values |
| d2* | D2STAR | ( d1 -- d2 ) Arithmetics R( -- ) shift a double cell left |
| d2* | D2STAR | ( d1 -- d2 ) Arithmetics R( -- ) shift a double cell left |
| d2/ | D2SLASH | ( d1 -- d2 ) Arithmetics R( -- ) shift a double cell value right |
| d< | DLESS | ( d1 d2 -- flasg) Compare R( -- ) compare two values |
| d> | DGREATER | ( d1 d2 -- flag ) Compare R( -- ) compares two values (signed) |
| d>s | D2S | ( d1 -- n1 ) Conversion R( -- ) shrink double cell value to single cell. |
| decimal | DECIMAL | ( -- ) Numeric IO R( -- ) set base to 10 (decimal) |
| defer! | DEFERSTORE | ( xt1 xt2 -- ) System R( -- ) stores xt1 as the xt to be executed when xt2 is called |
| defer@ | DEFERFETCH | ( xt1 -- xt2 ) System R( -- ) returns the XT assoziates with the given XT |
| depth | DEPTH | ( -- n ) Stack R( -- ) currently used data stack size in cells |
| digit | DIGIT | ( c base -- number flag ) Numeric IO R( -- ) convert character to number, set flag if successful |
| dinvert | DINVERT | ( d1 -- d2) Arithmetics R( -- ) flip all bits in the double cell value |
| dinvert | DINVERT | ( d1 -- d2) Arithmetics R( -- ) flip all bits in the double cell value |
| do | DO | ( -- addr ) Control Structure R( -- ) start do .. [+]loop |
| does> | DOES | ( -- ) Compiler R( -- ) |
| dp | DP | ( -- eaddr) System Pointer R( -- ) first unused address in flash (NRWW is always used) |
| drop | DROP | ( n -- ) Stack R( -- ) drop TOS |
| dup | DUP | ( n -- n n ) Stack R( -- ) duplicate TOS |
| e! | ESTORE | ( n addr -- ) Memory R( -- ) write to eeprom address |
| e@ | EFETCH | ( addr - n) Memory R( -- ) read 2 bytes from eeprom |
| edp | EDP | ( -- eaddr) System Pointer R( -- ) first unused address in eeprom |
| else | ELSE | ( addr1 -- addr2) Compiler R( -- ) |
| emit | EMIT | ( -- eaddr) Character IO R( -- ) fetch the emit vector and execute it |
| emit? | EMITQ | ( -- c) Character IO R( -- ) fetch emit? vector and execute it |
| endcase | ENDCASE | ( f -- ) Compiler R( -- ) |
| endcase | ENDCASE | ( f -- ) Compiler R( -- ) |
| endof | ENDOF | ( addr1 -- addr2 ) Compiler R( -- ) |
| endof | ENDOF | ( addr1 -- addr2 ) Compiler R( -- ) |
| execute | EXECUTE | ( xt -- ) System R( -- ) execute XT |
| exit | EXIT | ( -- ) Compiler R( xt -- ) end of current colon word |
| f_cpu | F_CPU | ( -- f_cou ) System R( -- ) put the cpu frequency on stack |
| find | FIND | ( addr -- -- [ addr 0 ] | [ xt [-1|1]] ) Tools R( -- ) search dictionary |
| handler | HANDLER | ( -- addr ) Exceptions R( -- ) used by catch/throw |
| heap | HEAP | ( -- eaddr) System Pointer R( -- ) address of first unallocated RAM |
| here | HERE | ( -- addr ) System Pointer R( -- ) |
| hex | HEX | ( -- ) Numeric IO R( -- ) set base to 16 (decimal) |
| hld | HLD | ( -- addr ) Numeric IO R( -- ) address of buffer for pictured numeric output |
| hold | HOLD | ( c -- ) Numeric IO R( -- ) prepend character to pictured numeric output buffer |
| i | I | ( -- n ) Control Structure R( loop-sys -- loop-sys) current loop counter |
| i! | ISTORE | ( n addr -- ) Memory R( -- ) writes a cell in flash |
| i@ | IFETCH | ( addr -- n1 ) Memory R( -- ) reads a cell from flash, addr is cell address, not byte addres first byte gets into the lower word on tos |
| icount | ICOUNT | ( adr -- adr n ) Tools R( -- ) get count byte out of packed counted string in flash |
| idump | IDUMP | ( addr len -- ) Tools R( -- ) dumps flash memory beginning with address addr and len cells long |
| idump | IDUMP | ( addr len -- ) Tools R( -- ) dumps flash memory beginning with address addr and len cells long |
| if | IF | ( -- addr ) Control Structure R( -- ) start conditional branch |
| immediate | IMMEDIATE | ( -- ) Compiler R( -- ) set immediate flag |
| int | INTON | ( -- ) Interrupt R( -- ) turns on all interrupts |
| int! | INTSTORE | ( xt i -- ) Interrupt R( -- ) stores XT as interrupt vector i |
| int@ | INTFETCH | ( i -- xt ) Interrupt R( -- ) fetches XT from interrupt vector i |
| interpret | INTERPRET | ( -- ) System R(i*x - j*x ) interpret input word by word. may throw exceptions |
| invert | INVERT | ( n1 -- n2) Arithmetics R( -- ) 1-complement of TOS |
| is | IS | ( xt1 c<char> -- ) System R( --) stores xt into defer or compiles code to do so at runtime |
| is | IS | ( xt1 c<char> -- ) System R( --) stores xt into defer or compiles code to do so at runtime |
| itype | ITYPE | ( addr n -- ) Tools R( -- ) reads packed string from flash and emit it |
| j | J | ( -- n ) Control Structure R( loop-sys1 loop-sys2 -- loop-sys1 loop-sys2) loop counter of outer loop |
| key | KEY | ( -- c ) Character IO R( -- ) fetch key vector and execute it |
| key? | KEYQ | ( -- f) Character IO R( -- ) fetch 'key? vector and execute it. Leave true if a character can be read, false otherwise |
| leave | LEAVE | ( -- ) R(next limit counter -- next ) runtime of leave |
| leave | LEAVE | ( -- ) R(next limit counter -- next ) runtime of leave |
| literal | LITERAL | ( n -- ) Compiler R( -- ) compile a literal in colon defintions |
| log2 | LOG2 | ( n1 -- n2 ) Arithmetics R( -- ) logarithm base 2 or highest set bitnumber |
| loop | LOOP | ( addr -- ) Control Structure R( -- ) cpmpile (loop) and resolve branch |
| lshift | LSHIFT | ( n1 n2 -- n3) Arithmetics R( -- ) logical shift left |
| m* | MSTAR | ( n1 n2 -- d) Arithmetics R( -- ) multiply 2 cells to a double cell |
| max | MAX | ( n1 n2 -- n1|n2 ) Compare R( -- ) compare two values, leave the bigger one |
| min | MIN | ( n1 n2 -- n1|n2 ) Compare R( -- ) compare two values leave the smaller one |
| mod | MOD | ( n1 n2 -- n3) Arithmetics R( -- ) remainder of division |
| negate | NEGATE | ( n1 -- n2 ) Logic R( -- ) 2-complement |
| noop | NOOP | ( -- ) Tools R( -- ) do nothing |
| not | NOT | ( flag -- flag' ) Logic R( -- ) identical to 0= |
| number | NUMBER | (addr -- n ) Numeric IO R( -- ) convert a word to a number, throw exception -1 on error |
| of | OF | ( -- ) Compiler R( -- ) see case |
| of | OF | ( -- ) Compiler R( -- ) see case |
| or | OR | ( n1 n2 -- n3 ) Logic R( -- ) logical or |
| over | OVER | ( n1 n2 -- n1 n2 n1 ) Stack R( -- ) stack manipulation |
| pad | PAD | ( -- addr ) System Pointer R( -- ) scratch buffer. |
| parse | PARSE | ( char "ccc" -- c-addr u ) String R( -- ) in input buffer parse ccc delimited string by the delimiter char. |
| pause | PAUSE | ( -- ) Multitasking R( -- ) fetch pause vector and execute it. may make a context/task switch |
| quit | QUIT | ( -- ) System R( -- ) main loop of amforth. accept - interpret in an endless loop |
| r> | R_FROM | ( -- n ) Stack R( n --) move TOR to TOS |
| r@ | R_FETCH | ( -- n) Stack R( n -- n ) fetch content of TOR |
| recurse | RECURSE | ( -- ) Compiler R( -- ) compile XT of the word beeing currently defined into dictionary (! not conforming to ANS!) |
| refill | REFILL | ( -- f ) IO R( -- ) refills the input buffer |
| repeat | REPEAT | (addr1 -- addr2 ) Control Structure R( -- ) go back to begin |
| rot | ROT | ( n1 n2 n3 -- n2 n3 n1) Stack R( -- ) stack manupulation |
| rp | RP | ( -- addr) Stackpointer R( -- ) address of variable to store the return stack pointer for inactive tasks |
| rp! | RP_STORE | ( n -- ) Stackpointer R( -- xy) set return stack pointer |
| rp0 | RP0 | ( -- addr) Stackpointer R( -- ) start value of return stack |
| rp@ | RP_FETCH | ( -- n) Stackpointer R( -- ) current return stack pointer address |
| rshift | RSHIFT | ( n1 n2 -- n3 ) Arithmetics R( -- ) logical shift right |
| rx0 | RX0 | ( -- c) Hardware Access R( --) get 1 character from input queue, wait if needed |
| rx0? | RX0Q | ( -- f) Hardware Access R( --) check if unread characters are in the input queue. |
| s" | SQUOTE | ( <cchar> -- ) Compiler R( -- ) compiles a string to flash, at runtime leaves ( -- addr count) on stack |
| s" | SQUOTE | ( <cchar> -- ) Compiler R( -- ) compiles a string to flash, at runtime leaves ( -- addr count) on stack |
| s, | SCOMMA | ( addr len -- ) Compiler R( -- ) compiles a string from RAM to Flash |
| s>d | S2D | ( n1 -- d1 ) Conversion R( -- ) extend (signed) single cell value to double cell |
| sign | SIGN | ( n -- ) Numeric IO R( -- ) place a - in HLD if value is negative |
| sleep | SLEEP | ( -- ) Interrupt R( -- ) calls the MCU sleep instruction. Not useful itself! |
| source | SOURCE | ( addr1 u1 n-- addr2 u2 ) System R( -- ) adjust string from addr1 to addr1+n, reduce length from u1 to u2 |
| sp | SP | ( -- addr) Stackpointer R( -- ) address of variable to store data stack pointer for inactive tasks |
| sp! | SP_STORE | ( addr -- i*x) Stackpointer R( -- ) data stack pointer changed to addr |
| sp0 | SP0 | ( -- addr) Stackpointer R( -- ) start of data stack |
| sp@ | SP_FETCH | ( -- n) Stackpointer R( -- ) current data stack pointer |
| space | SPACE | ( -- ) Character IO R( -- ) emits a space (bl) |
| state | STATE | ( -- addr ) Compiler R( -- ) system state |
| swap | SWAP | ( n1 n2 -- n2 n1) Stack R( -- ) stack manipulation |
| then | THEN | ( addr -- ) Compiler R( -- ) finish if |
| throw | THROW | ( n -- ) Exceptions R( -- ) throw an exception |
| tib | TIB | ( -- addr ) System Pointer R( -- ) terminal input buffer address |
| to | TO | ( n <name> -- ) Tools R( --) store the TOS to value (an EEPROM 16bit cell) |
| turnkey | TURNKEY | ( -- eaddr) System Pointer R( -- ) address of the variable that holds an XT to be started by cold before quit takes over |
| tx0 | TX0 | (c -- ) Hardware Access R( --) put 1 character into output queue, wait if needed, enable UDRIE0 interrupt |
| tx0? | TX0Q | ( -- f) Hardware Access R( --) check if a character can be appended to output queue. |
| type | TYPE | ( addr n -- ) Character IO R( -- ) emits a string |
| u*/mod | USTARSLASHMOD | ( u1 u2 u3 -- rem quot) Arithmetics R( -- ) unsigned division with remainder u3 * u2 / u1 |
| u. | UDOT | ( n -- ) Numeric IO R( -- ) unsigned numeric output |
| u. | UDOT | ( n -- ) Numeric IO R( -- ) unsigned numeric output |
| u/mod | USLASHMOD | (u1 u2 -- rem quot) Arithmetics R( -- ) unsigned division with remainder |
| u< | ULESS | ( u1 u2 -- flasg) Compare R( -- ) compare values u1 < u2 (unsigned) |
| u> | UGREATER | ( u1 u2 -- flag ) Compare R( -- ) compares u1 > u2 (unsigned) |
| um/mod | UMSLASHMOD | ( ud u2 -- rem quot) Arithmetics R( -- ) unsigned division ud / u2 with remainder |
| unloop | UNLOOP | ( -- ) Control Structure R(loop-sys -- ) remove loop-sys |
| until | UNTIL | ( addr -- ) Compiler R( -- ) finish begin with conditional branch |
| unused | UNUSED | ( -- n ) Tools R( -- ) number of unused flash cells |
| up! | UP_STORE | ( addr -- ) System R( -- ) set user pointer |
| up@ | UP_FETCH | ( -- addr ) System R( -- ) get user pointer |
| usart0 | USART0 | ( -- ) Hardware Access R( --) initialize usart0 |
| user | USER | ( n -- ) Compiler R( -- ) define a new user variable |
| value | VALUE | ( n <name> -- ) Compiler R( -- ) allocate space for 1 cell in EEPROM. used in conjunction with TO |
| variable | VARIABLE | ( -- ) Compiler R( -- ) create a variable entry and allocate RAM space for it |
| ver | VER | ( -- ) Tools R( -- ) emits the version string |
| wdr | WDR | ( -- ) Interrupt R( -- ) calls the MCU wdr instruction |
| while | WHILE | ( dest -- orig dest ) Control Structure R( -- ) control structure |
| word | WORD | ( c -- addr ) Tools R( -- ) skip leading delimiter characters and parses TIB to the next delimiter. copy the word into PAD |
| words | WORDS | ( -- ) Tools R( -- ) emits a list of all (visible) words in the dictionary |
| words | WORDS | ( -- ) Tools R( -- ) emits a list of all (visible) words in the dictionary |
| xor | XOR | ( n1 n2 -- n3) Logic R( -- ) exclusive or |