Exemple #1
0
static void addq_b(struct cpu *cpu, int s, int mode)
{
  BYTE d,r;

  d = ea_read_byte(cpu, mode, 1);
  r = s+d;
  ea_write_byte(cpu, mode, r);

  ADD_CYCLE(4);

  cpu_set_flags_add(cpu, 0, d&0x80, r&0x80, r);
}
Exemple #2
0
static void not_b(struct cpu *cpu, WORD op)
{
  BYTE r;

  ADD_CYCLE(4);
  if(op&0x38) {
    ADD_CYCLE(4);
  }
  r = ~ea_read_byte(cpu, op&0x3f, 1);
  ea_set_prefetch_before_write();
  ea_write_byte(cpu, op&0x3f, r);
  cpu_set_flags_move(cpu, r&0x80, r);
}
Exemple #3
0
static void negx_b(struct cpu *cpu, WORD op)
{
  BYTE d,r;

  d = ea_read_byte(cpu, op&0x3f, 1);
  r = 0-d;
  if(CHKX) r -= 1;
  ea_set_prefetch_before_write();
  ea_write_byte(cpu, op&0x3f, r);

  ADD_CYCLE(4);
  if(op&0x38) {
    ADD_CYCLE(4);
  }
  cpu_set_flags_negx(cpu, d&0x80, r&0x80, r);
}
Exemple #4
0
static void subi_b(struct cpu *cpu, WORD op)
{
  BYTE s,d,r;
  
  s = bus_read_word(cpu->pc)&0xff;
  cpu->pc += 2;
  if(op&0x38) {
    ADD_CYCLE(12);
  } else {
    ADD_CYCLE(8);
  }
  d = ea_read_byte(cpu, op&0x3f, 1);
  r = d-s;
  ea_set_prefetch_before_write();
  ea_write_byte(cpu, op&0x3f, r);
  cpu_set_flags_sub(cpu, s&0x80, d&0x80, r&0x80, r);
}
Exemple #5
0
static void bset_r(struct cpu *cpu, int reg, int mode)
{
  BYTE b,d;
  
  b = cpu->d[reg]&31;
  if(mode&0x38) {
    ADD_CYCLE(4);
    d = ea_read_byte(cpu, mode, 1);
    if(d & (1<<(b&7))) CLRZ; else SETZ;
    d |= (1<<(b&7));
    ea_set_prefetch_before_write();
    ea_write_byte(cpu, mode, d);
  } else {
    ADD_CYCLE(6);
    if(cpu->d[mode&7] & (1<<b)) CLRZ; else SETZ;
    cpu->d[mode&7] |= (1<<b);
  }
}
Exemple #6
0
static void bset_i(struct cpu *cpu, int mode)
{
  BYTE b,d;

  b = (BYTE)bus_read_word(cpu->pc)&0xff;
  b &= 31;
  cpu->pc += 2;
  if(mode&0x38) {
    ADD_CYCLE(8);
    d = ea_read_byte(cpu, mode, 1);
    if(d & (1<<(b&7))) CLRZ; else SETZ;
    d |= (1<<(b&7));
    ea_set_prefetch_before_write();
    ea_write_byte(cpu, mode, d);
  } else {
    ADD_CYCLE(10);
    if(cpu->d[mode&7] & (1<<b)) CLRZ; else SETZ;
    cpu->d[mode&7] |= (1<<b);
  }
}
Exemple #7
0
void scc1(struct cpu *cpu, WORD op)
{
  int r;

  ENTER;
  
  if(op&0x38) {
    r = 1;
    ADD_CYCLE(4);
  } else {
    r = 0;
    ADD_CYCLE(6);
  }
  
  switch((op&0xf00)>>8) {
  case 0: /* ST */
    ADD_CYCLE(2);
    ea_set_prefetch_before_write();
    ea_write_byte(cpu, op&0x3f, 0xff);
    return;
  case 1: /* SF */
    break;
  case 2: /* SHI */
    if(!CHKC && !CHKZ) {
      ADD_CYCLE(2);
      ea_set_prefetch_before_write();
      ea_write_byte(cpu, op&0x3f, 0xff);
      return;
    }
    break;
  case 3: /* SLS */
    if(CHKC || CHKZ) {
      ADD_CYCLE(2);
      ea_set_prefetch_before_write();
      ea_write_byte(cpu, op&0x3f, 0xff);
      return;
    }
    break;
  case 4: /* SCC */
    if(!CHKC) {
      ADD_CYCLE(2);
      ea_set_prefetch_before_write();
      ea_write_byte(cpu, op&0x3f, 0xff);
      return;
    }
    break;
  case 5: /* SCS */
    if(CHKC) {
      ADD_CYCLE(2);
      ea_set_prefetch_before_write();
      ea_write_byte(cpu, op&0x3f, 0xff);
      return;
    }
    break;
  case 6: /* SNE */
    if(!CHKZ) {
      ADD_CYCLE(2);
      ea_set_prefetch_before_write();
      ea_write_byte(cpu, op&0x3f, 0xff);
      return;
    }
    break;
  case 7: /* SEQ */
    if(CHKZ) {
      ADD_CYCLE(2);
      ea_set_prefetch_before_write();
      ea_write_byte(cpu, op&0x3f, 0xff);
      return;
    }
    break;
  case 8: /* SVC */
    if(!CHKV) {
      ADD_CYCLE(2);
      ea_set_prefetch_before_write();
      ea_write_byte(cpu, op&0x3f, 0xff);
      return;
    }
    break;
  case 9: /* SVS */
    if(CHKV) {
      ADD_CYCLE(2);
      ea_set_prefetch_before_write();
      ea_write_byte(cpu, op&0x3f, 0xff);
      return;
    }
    break;
  case 10: /* SPL */
    if(!CHKN) {
      ADD_CYCLE(2);
      ea_set_prefetch_before_write();
      ea_write_byte(cpu, op&0x3f, 0xff);
      return;
    }
    break;
  case 11: /* SMI */
    if(CHKN) {
      ADD_CYCLE(2);
      ea_set_prefetch_before_write();
      ea_write_byte(cpu, op&0x3f, 0xff);
      return;
    }
    break;
  case 12: /* SGE */
    if((CHKN && CHKV) || (!CHKN && !CHKV)) {
      ADD_CYCLE(2);
      ea_set_prefetch_before_write();
      ea_write_byte(cpu, op&0x3f, 0xff);
      return;
    }
    break;
  case 13: /* SLT */
    if((CHKN & !CHKV) | ((!CHKN) & CHKV)) {
      ADD_CYCLE(2);
      ea_set_prefetch_before_write();
      ea_write_byte(cpu, op&0x3f, 0xff);
      return;
    }
    break;
  case 14: /* SGT */
    if((CHKN && CHKV && !CHKZ) || (!CHKN && !CHKV && !CHKZ)) {
      ADD_CYCLE(2);
      ea_set_prefetch_before_write();
      ea_write_byte(cpu, op&0x3f, 0xff);
      return;
    }
    break;
  case 15: /* SLE */
    if(CHKZ || (CHKN && !CHKV) || (!CHKN && CHKV)) {
      ADD_CYCLE(2);
      ea_set_prefetch_before_write();
      ea_write_byte(cpu, op&0x3f, 0xff);
      return;
    }
    break;
  }
  if(!r) {
    ADD_CYCLE(2);
  }
  ea_set_prefetch_before_write();
  ea_write_byte(cpu, op&0x3f, 0x00);
}