GA144 note: one node RAM

A node X can use all 64 words of a neighbor node R0 as RAM.

Assuming X's b register points to R0, and R0 is executing from port X, this is how node X reads word at addr from node R0:

: ramread ( addr -- v ) @p !b !b @p a! @ !p @b ;

it works by sending a tiny four-opcode program @p a! @ !p to node R0. R0 executes this program:

@p asks X for another word

asks for another word a! stores the word in R0's a register

stores the word in R0's register @ fetches from R0's RAM at address a

fetches from R0's RAM at address !p writes the result back to the caller, in this case node X.

After node X has sent this program to R0, it reads the result back from R0.

Writing to R0 can be done in a couple of ways. To write a value v to the same location as was just read, X can do:

: ramwrite ( v -- ) @p !b !b ; @p ! . .

The trick here is that R0's a already points to the correct word, because of the preceding ramread .

The above are good factors for a read/modify/write, for example to negate a word in RAM:

call ramread - call ramwrite