!!!Accessing Memory [{TableOfContents }] !!Reading Memory locations In Basic, we use PEEK(addr) to read a memory location. This example read the first joystick {{{ ... 100 STICK = PEEK(632) 110 IF STICK = 15 THEN PRINT "centered" 120 IF STICK = 14 THEN PRINT "up" 130 IF STICK = 13 THEN PRINT "down" ... }}} In Forth, there are two words to read memory. {{{ @ }}} (called FETCH) reads a 16bit value from a memory location and places the value on the stack. {{{ C@ }}} (called C-FETCH) reads a 8bit value (a byte). Both words need (=consume) the address on the stack. {{{ @ ( addr -- 16b ) C@ ( addr -- 8b ) }}} In the Atari, Memory location 632/$278 is the shadow register for the first joystick port ([PORTA]/54016). So the above BASIC example would be in FORTH: {{{ &632 C@ DUP 15 = IF ." centered " THEN DUP 14 = IF ." up " THEN 13 = IF ." down " THEN }}} !!Writing memory locations The counterpart to @ (FETCH) and C@ (C-FETCH) are ! (STORE) and C! (C-STORE). These words take a value and an address from the stack and store the value at the address. The Stack comments for this words are: {{{ ! ( 16b addr -- ) C! ( 8b addr -- ) }}} The below BASIC line changes the background color of the screen to black, writing the value 0 in memory location 709 ([COLOR1]): {{{ 100 POKE 709,0 }}} In Forth, we write {{{ 0 709 C! }}}