static void tst_w(struct cpu *cpu, WORD op) { WORD s; s = ea_read_word(cpu, op&0x3f, 0); cpu_set_flags_move(cpu, s&0x8000, s); ADD_CYCLE(4); }
static void addq_w(struct cpu *cpu, int s, int mode) { WORD d,r; d = ea_read_word(cpu, mode, 1); r = s+d; ea_write_word(cpu, mode, r); ADD_CYCLE(4); cpu_set_flags_add(cpu, 0, d&0x8000, r&0x8000, r); }
static void negx_w(struct cpu *cpu, WORD op) { WORD d,r; d = ea_read_word(cpu, op&0x3f, 1); r = 0-d; if(CHKX) r -= 1; ea_set_prefetch_before_write(); ea_write_word(cpu, op&0x3f, r); ADD_CYCLE(4); if(op&0x38) { ADD_CYCLE(4); } cpu_set_flags_negx(cpu, d&0x8000, r&0x8000, r); }
static void subi_w(struct cpu *cpu, WORD op) { WORD s,d,r; s = bus_read_word(cpu->pc); cpu->pc += 2; if(op&0x38) { ADD_CYCLE(12); } else { ADD_CYCLE(8); } d = ea_read_word(cpu, op&0x3f, 1); r = d-s; ea_set_prefetch_before_write(); ea_write_word(cpu, op&0x3f, r); cpu_set_flags_sub(cpu, s&0x8000, d&0x8000, r&0x8000, r); }
static void adda(struct cpu *cpu, WORD op) { LONG s; int r; ENTER; r = (op&0xe00)>>9; if(op&0x100) { ADD_CYCLE(6); s = ea_read_long(cpu, op&0x3f, 0); } else { ADD_CYCLE(8); s = ea_read_word(cpu, op&0x3f, 0); if(s&0x8000) s |= 0xffff0000; } cpu->a[r] += s; }
static void mulu(struct cpu *cpu, WORD op) { LONG s,d,r; int reg; int i; ENTER; s = ea_read_word(cpu, op&0x3f, 0); reg = (op&0xe00)>>9; d = cpu->d[reg]&0xffff; r = s*d; cpu->d[reg] = r; ADD_CYCLE(38); for(i=0;i<16;i++) { if(s&(1<<i)) { ADD_CYCLE(2); } } cpu_set_flags_move(cpu, r&0x80000000, r); }