Exemplo n.º 1
0
void op_push_stack(void)
{
  zword space = LOWORD(operand[1]);
  if(space) {
    LOWORDwrite(operand[1] + space * ZWORD_SIZE, operand[0]);
    LOWORDwrite(operand[1], space - 1);
    mop_take_branch();
  } else {
    mop_skip_branch();
  }
}
Exemplo n.º 2
0
void op_pop_stack(void)
{
  zword i;
  if(numoperands < 2 || operand[1] == 0) {
    for(i = 0; i < operand[0]; i++)
      stack_pop();
  } else {
    zword space = LOWORD(operand[1]) + operand[0];
    LOWORDwrite(operand[1], space);
  }
}
Exemplo n.º 3
0
static void addparsed(zword *parse_dest, int word_num, int length, int off)
{
  if(zversion <= 4)
    off+=1;
  else
    off+=2;

  LOWORDwrite(*parse_dest, word_num);
  *parse_dest+=ZWORD_SIZE;
  LOBYTEwrite(*parse_dest, length);
  *parse_dest+=1;
  LOBYTEwrite(*parse_dest, off);
  *parse_dest+=1;
}
Exemplo n.º 4
0
void op_pull(void)
{
  if(zversion == 6) {  /* v6 uses user stacks */
    if(numoperands == 0 || operand[0] == 0)
      mop_store_result(stack_pop());
    else {
      zword space = LOWORD(operand[0]) + 1; /* One more slot is free */
      LOWORDwrite(operand[0], space);
      mop_store_result(LOWORD(operand[0] + space * ZWORD_SIZE));
    }
  } else {
    zword val = stack_pop();
    set_var(operand[0], val);
  }
}
Exemplo n.º 5
0
N_INLINE void set_var(int var, zword val)
{
  if(var < 0x10) {
    if(var != 0) {
#ifndef FAST
      if(var > stack_frames[frame_count].num_locals)
	n_show_error(E_INSTR, "setting nonexistant local", var);
#endif
      local_vars[var - 1] = val;
    } else {
      stack_push(val);
    }
  } else {
    LOWORDwrite(z_globaltable + (var - 0x10) * ZWORD_SIZE, val);
  }
}