#include "forth.h"
/* Setting and examining memory. */

PRIMITIVE ("!", Fstore, Sstore, NON_IMMEDIATE, ( n a -- ) )
{
  /* Store n into address a. */
  long *addr = (long *) POP;
  long n = POP;
  *addr = n;
}


PRIMITIVE ("@", Ffetch, Sfetch, NON_IMMEDIATE, ( a -- n ) )
{
  /* Replace a with *a. */
  *sp = *((long *) *sp);
}


PRIMITIVE ("c!", Fcstore, Scstore, NON_IMMEDIATE, ( n a -- ) )
{
  /* Store n into address a. */
  char *addr = (char *) POP;
  char n = (char) POP;
  *addr = n;
}


PRIMITIVE ("c@", Fcfetch, Scfetch, NON_IMMEDIATE, ( a -- n ) )
{
  /* Replace a with *a. */
  *sp = (long) *((char *) *sp);
}


PRIMITIVE ("here", Fhere, Shere, NON_IMMEDIATE, ( -- dp ) )
{
  PUSH ((long) dp);
}


PRIMITIVE ("allot", Fallot, Sallot, NON_IMMEDIATE, ( n -- ) )
{
  /* Increment dp by the number of BYTES, not words. */
  char *bdp = (char *) dp;
  bdp += POP;
  dp = (long *) bdp;
}


PRIMITIVE ("arena", Farena, Sarena, NON_IMMEDIATE, ( -- arena) )
{
  PUSH ((long) arena);
}
