diff options
Diffstat (limited to 'trunk/src/emu/cpu/m6809/6809tbl.c')
-rw-r--r-- | trunk/src/emu/cpu/m6809/6809tbl.c | 414 |
1 files changed, 414 insertions, 0 deletions
diff --git a/trunk/src/emu/cpu/m6809/6809tbl.c b/trunk/src/emu/cpu/m6809/6809tbl.c new file mode 100644 index 00000000000..372642eb04d --- /dev/null +++ b/trunk/src/emu/cpu/m6809/6809tbl.c @@ -0,0 +1,414 @@ +INLINE void abx(m68_state_t *m68_state); +INLINE void adca_di(m68_state_t *m68_state); +INLINE void adca_ex(m68_state_t *m68_state); +INLINE void adca_im(m68_state_t *m68_state); +INLINE void adca_ix(m68_state_t *m68_state); +INLINE void adcb_di(m68_state_t *m68_state); +INLINE void adcb_ex(m68_state_t *m68_state); +INLINE void adcb_im(m68_state_t *m68_state); +INLINE void adcb_ix(m68_state_t *m68_state); +INLINE void adda_di(m68_state_t *m68_state); +INLINE void adda_ex(m68_state_t *m68_state); +INLINE void adda_im(m68_state_t *m68_state); +INLINE void adda_ix(m68_state_t *m68_state); +INLINE void addb_di(m68_state_t *m68_state); +INLINE void addb_ex(m68_state_t *m68_state); +INLINE void addb_im(m68_state_t *m68_state); +INLINE void addb_ix(m68_state_t *m68_state); +INLINE void addd_di(m68_state_t *m68_state); +INLINE void addd_ex(m68_state_t *m68_state); +INLINE void addd_im(m68_state_t *m68_state); +INLINE void addd_ix(m68_state_t *m68_state); +INLINE void anda_di(m68_state_t *m68_state); +INLINE void anda_ex(m68_state_t *m68_state); +INLINE void anda_im(m68_state_t *m68_state); +INLINE void anda_ix(m68_state_t *m68_state); +INLINE void andb_di(m68_state_t *m68_state); +INLINE void andb_ex(m68_state_t *m68_state); +INLINE void andb_im(m68_state_t *m68_state); +INLINE void andb_ix(m68_state_t *m68_state); +INLINE void andcc(m68_state_t *m68_state); +INLINE void asla(m68_state_t *m68_state); +INLINE void aslb(m68_state_t *m68_state); +INLINE void asl_di(m68_state_t *m68_state); +INLINE void asl_ex(m68_state_t *m68_state); +INLINE void asl_ix(m68_state_t *m68_state); +INLINE void asra(m68_state_t *m68_state); +INLINE void asrb(m68_state_t *m68_state); +INLINE void asr_di(m68_state_t *m68_state); +INLINE void asr_ex(m68_state_t *m68_state); +INLINE void asr_ix(m68_state_t *m68_state); +INLINE void bcc(m68_state_t *m68_state); +INLINE void bcs(m68_state_t *m68_state); +INLINE void beq(m68_state_t *m68_state); +INLINE void bge(m68_state_t *m68_state); +INLINE void bgt(m68_state_t *m68_state); +INLINE void bhi(m68_state_t *m68_state); +INLINE void bita_di(m68_state_t *m68_state); +INLINE void bita_ex(m68_state_t *m68_state); +INLINE void bita_im(m68_state_t *m68_state); +INLINE void bita_ix(m68_state_t *m68_state); +INLINE void bitb_di(m68_state_t *m68_state); +INLINE void bitb_ex(m68_state_t *m68_state); +INLINE void bitb_im(m68_state_t *m68_state); +INLINE void bitb_ix(m68_state_t *m68_state); +INLINE void ble(m68_state_t *m68_state); +INLINE void bls(m68_state_t *m68_state); +INLINE void blt(m68_state_t *m68_state); +INLINE void bmi(m68_state_t *m68_state); +INLINE void bne(m68_state_t *m68_state); +INLINE void bpl(m68_state_t *m68_state); +INLINE void bra(m68_state_t *m68_state); +INLINE void brn(m68_state_t *m68_state); +INLINE void bsr(m68_state_t *m68_state); +INLINE void bvc(m68_state_t *m68_state); +INLINE void bvs(m68_state_t *m68_state); +INLINE void clra(m68_state_t *m68_state); +INLINE void clrb(m68_state_t *m68_state); +INLINE void clr_di(m68_state_t *m68_state); +INLINE void clr_ex(m68_state_t *m68_state); +INLINE void clr_ix(m68_state_t *m68_state); +INLINE void cmpa_di(m68_state_t *m68_state); +INLINE void cmpa_ex(m68_state_t *m68_state); +INLINE void cmpa_im(m68_state_t *m68_state); +INLINE void cmpa_ix(m68_state_t *m68_state); +INLINE void cmpb_di(m68_state_t *m68_state); +INLINE void cmpb_ex(m68_state_t *m68_state); +INLINE void cmpb_im(m68_state_t *m68_state); +INLINE void cmpb_ix(m68_state_t *m68_state); +INLINE void cmpd_di(m68_state_t *m68_state); +INLINE void cmpd_ex(m68_state_t *m68_state); +INLINE void cmpd_im(m68_state_t *m68_state); +INLINE void cmpd_ix(m68_state_t *m68_state); +INLINE void cmps_di(m68_state_t *m68_state); +INLINE void cmps_ex(m68_state_t *m68_state); +INLINE void cmps_im(m68_state_t *m68_state); +INLINE void cmps_ix(m68_state_t *m68_state); +INLINE void cmpu_di(m68_state_t *m68_state); +INLINE void cmpu_ex(m68_state_t *m68_state); +INLINE void cmpu_im(m68_state_t *m68_state); +INLINE void cmpu_ix(m68_state_t *m68_state); +INLINE void cmpx_di(m68_state_t *m68_state); +INLINE void cmpx_ex(m68_state_t *m68_state); +INLINE void cmpx_im(m68_state_t *m68_state); +INLINE void cmpx_ix(m68_state_t *m68_state); +INLINE void cmpy_di(m68_state_t *m68_state); +INLINE void cmpy_ex(m68_state_t *m68_state); +INLINE void cmpy_im(m68_state_t *m68_state); +INLINE void cmpy_ix(m68_state_t *m68_state); +INLINE void coma(m68_state_t *m68_state); +INLINE void comb(m68_state_t *m68_state); +INLINE void com_di(m68_state_t *m68_state); +INLINE void com_ex(m68_state_t *m68_state); +INLINE void com_ix(m68_state_t *m68_state); +INLINE void cwai(m68_state_t *m68_state); +INLINE void daa(m68_state_t *m68_state); +INLINE void deca(m68_state_t *m68_state); +INLINE void decb(m68_state_t *m68_state); +INLINE void dec_di(m68_state_t *m68_state); +INLINE void dec_ex(m68_state_t *m68_state); +INLINE void dec_ix(m68_state_t *m68_state); +INLINE void eora_di(m68_state_t *m68_state); +INLINE void eora_ex(m68_state_t *m68_state); +INLINE void eora_im(m68_state_t *m68_state); +INLINE void eora_ix(m68_state_t *m68_state); +INLINE void eorb_di(m68_state_t *m68_state); +INLINE void eorb_ex(m68_state_t *m68_state); +INLINE void eorb_im(m68_state_t *m68_state); +INLINE void eorb_ix(m68_state_t *m68_state); +INLINE void exg(m68_state_t *m68_state); +INLINE void illegal(m68_state_t *m68_state); +INLINE void inca(m68_state_t *m68_state); +INLINE void incb(m68_state_t *m68_state); +INLINE void inc_di(m68_state_t *m68_state); +INLINE void inc_ex(m68_state_t *m68_state); +INLINE void inc_ix(m68_state_t *m68_state); +INLINE void jmp_di(m68_state_t *m68_state); +INLINE void jmp_ex(m68_state_t *m68_state); +INLINE void jmp_ix(m68_state_t *m68_state); +INLINE void jsr_di(m68_state_t *m68_state); +INLINE void jsr_ex(m68_state_t *m68_state); +INLINE void jsr_ix(m68_state_t *m68_state); +INLINE void lbcc(m68_state_t *m68_state); +INLINE void lbcs(m68_state_t *m68_state); +INLINE void lbeq(m68_state_t *m68_state); +INLINE void lbge(m68_state_t *m68_state); +INLINE void lbgt(m68_state_t *m68_state); +INLINE void lbhi(m68_state_t *m68_state); +INLINE void lble(m68_state_t *m68_state); +INLINE void lbls(m68_state_t *m68_state); +INLINE void lblt(m68_state_t *m68_state); +INLINE void lbmi(m68_state_t *m68_state); +INLINE void lbne(m68_state_t *m68_state); +INLINE void lbpl(m68_state_t *m68_state); +INLINE void lbra(m68_state_t *m68_state); +INLINE void lbrn(m68_state_t *m68_state); +INLINE void lbsr(m68_state_t *m68_state); +INLINE void lbvc(m68_state_t *m68_state); +INLINE void lbvs(m68_state_t *m68_state); +INLINE void lda_di(m68_state_t *m68_state); +INLINE void lda_ex(m68_state_t *m68_state); +INLINE void lda_im(m68_state_t *m68_state); +INLINE void lda_ix(m68_state_t *m68_state); +INLINE void ldb_di(m68_state_t *m68_state); +INLINE void ldb_ex(m68_state_t *m68_state); +INLINE void ldb_im(m68_state_t *m68_state); +INLINE void ldb_ix(m68_state_t *m68_state); +INLINE void ldd_di(m68_state_t *m68_state); +INLINE void ldd_ex(m68_state_t *m68_state); +INLINE void ldd_im(m68_state_t *m68_state); +INLINE void ldd_ix(m68_state_t *m68_state); +INLINE void lds_di(m68_state_t *m68_state); +INLINE void lds_ex(m68_state_t *m68_state); +INLINE void lds_im(m68_state_t *m68_state); +INLINE void lds_ix(m68_state_t *m68_state); +INLINE void ldu_di(m68_state_t *m68_state); +INLINE void ldu_ex(m68_state_t *m68_state); +INLINE void ldu_im(m68_state_t *m68_state); +INLINE void ldu_ix(m68_state_t *m68_state); +INLINE void ldx_di(m68_state_t *m68_state); +INLINE void ldx_ex(m68_state_t *m68_state); +INLINE void ldx_im(m68_state_t *m68_state); +INLINE void ldx_ix(m68_state_t *m68_state); +INLINE void ldy_di(m68_state_t *m68_state); +INLINE void ldy_ex(m68_state_t *m68_state); +INLINE void ldy_im(m68_state_t *m68_state); +INLINE void ldy_ix(m68_state_t *m68_state); +INLINE void leas(m68_state_t *m68_state); +INLINE void leau(m68_state_t *m68_state); +INLINE void leax(m68_state_t *m68_state); +INLINE void leay(m68_state_t *m68_state); +INLINE void lsra(m68_state_t *m68_state); +INLINE void lsrb(m68_state_t *m68_state); +INLINE void lsr_di(m68_state_t *m68_state); +INLINE void lsr_ex(m68_state_t *m68_state); +INLINE void lsr_ix(m68_state_t *m68_state); +INLINE void mul(m68_state_t *m68_state); +INLINE void nega(m68_state_t *m68_state); +INLINE void negb(m68_state_t *m68_state); +INLINE void neg_di(m68_state_t *m68_state); +INLINE void neg_ex(m68_state_t *m68_state); +INLINE void neg_ix(m68_state_t *m68_state); +INLINE void nop(m68_state_t *m68_state); +INLINE void ora_di(m68_state_t *m68_state); +INLINE void ora_ex(m68_state_t *m68_state); +INLINE void ora_im(m68_state_t *m68_state); +INLINE void ora_ix(m68_state_t *m68_state); +INLINE void orb_di(m68_state_t *m68_state); +INLINE void orb_ex(m68_state_t *m68_state); +INLINE void orb_im(m68_state_t *m68_state); +INLINE void orb_ix(m68_state_t *m68_state); +INLINE void orcc(m68_state_t *m68_state); +INLINE void pref10(m68_state_t *m68_state); +INLINE void pref11(m68_state_t *m68_state); +INLINE void pshs(m68_state_t *m68_state); +INLINE void pshu(m68_state_t *m68_state); +INLINE void puls(m68_state_t *m68_state); +INLINE void pulu(m68_state_t *m68_state); +INLINE void rola(m68_state_t *m68_state); +INLINE void rolb(m68_state_t *m68_state); +INLINE void rol_di(m68_state_t *m68_state); +INLINE void rol_ex(m68_state_t *m68_state); +INLINE void rol_ix(m68_state_t *m68_state); +INLINE void rora(m68_state_t *m68_state); +INLINE void rorb(m68_state_t *m68_state); +INLINE void ror_di(m68_state_t *m68_state); +INLINE void ror_ex(m68_state_t *m68_state); +INLINE void ror_ix(m68_state_t *m68_state); +INLINE void rti(m68_state_t *m68_state); +INLINE void rts(m68_state_t *m68_state); +INLINE void sbca_di(m68_state_t *m68_state); +INLINE void sbca_ex(m68_state_t *m68_state); +INLINE void sbca_im(m68_state_t *m68_state); +INLINE void sbca_ix(m68_state_t *m68_state); +INLINE void sbcb_di(m68_state_t *m68_state); +INLINE void sbcb_ex(m68_state_t *m68_state); +INLINE void sbcb_im(m68_state_t *m68_state); +INLINE void sbcb_ix(m68_state_t *m68_state); +INLINE void sex(m68_state_t *m68_state); +INLINE void sta_di(m68_state_t *m68_state); +INLINE void sta_ex(m68_state_t *m68_state); +INLINE void sta_im(m68_state_t *m68_state); +INLINE void sta_ix(m68_state_t *m68_state); +INLINE void stb_di(m68_state_t *m68_state); +INLINE void stb_ex(m68_state_t *m68_state); +INLINE void stb_im(m68_state_t *m68_state); +INLINE void stb_ix(m68_state_t *m68_state); +INLINE void std_di(m68_state_t *m68_state); +INLINE void std_ex(m68_state_t *m68_state); +INLINE void std_im(m68_state_t *m68_state); +INLINE void std_ix(m68_state_t *m68_state); +INLINE void sts_di(m68_state_t *m68_state); +INLINE void sts_ex(m68_state_t *m68_state); +INLINE void sts_im(m68_state_t *m68_state); +INLINE void sts_ix(m68_state_t *m68_state); +INLINE void stu_di(m68_state_t *m68_state); +INLINE void stu_ex(m68_state_t *m68_state); +INLINE void stu_im(m68_state_t *m68_state); +INLINE void stu_ix(m68_state_t *m68_state); +INLINE void stx_di(m68_state_t *m68_state); +INLINE void stx_ex(m68_state_t *m68_state); +INLINE void stx_im(m68_state_t *m68_state); +INLINE void stx_ix(m68_state_t *m68_state); +INLINE void sty_di(m68_state_t *m68_state); +INLINE void sty_ex(m68_state_t *m68_state); +INLINE void sty_im(m68_state_t *m68_state); +INLINE void sty_ix(m68_state_t *m68_state); +INLINE void suba_di(m68_state_t *m68_state); +INLINE void suba_ex(m68_state_t *m68_state); +INLINE void suba_im(m68_state_t *m68_state); +INLINE void suba_ix(m68_state_t *m68_state); +INLINE void subb_di(m68_state_t *m68_state); +INLINE void subb_ex(m68_state_t *m68_state); +INLINE void subb_im(m68_state_t *m68_state); +INLINE void subb_ix(m68_state_t *m68_state); +INLINE void subd_di(m68_state_t *m68_state); +INLINE void subd_ex(m68_state_t *m68_state); +INLINE void subd_im(m68_state_t *m68_state); +INLINE void subd_ix(m68_state_t *m68_state); +INLINE void swi2(m68_state_t *m68_state); +INLINE void swi3(m68_state_t *m68_state); +INLINE void swi(m68_state_t *m68_state); +INLINE void sync(m68_state_t *m68_state); +INLINE void tfr(m68_state_t *m68_state); +INLINE void tsta(m68_state_t *m68_state); +INLINE void tstb(m68_state_t *m68_state); +INLINE void tst_di(m68_state_t *m68_state); +INLINE void tst_ex(m68_state_t *m68_state); +INLINE void tst_ix(m68_state_t *m68_state); + +static const UINT8 flags8i[256]= /* increment */ +{ +CC_Z,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +CC_N|CC_V,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N +}; +static const UINT8 flags8d[256]= /* decrement */ +{ +CC_Z,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,CC_V, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N +}; + +/* FIXME: Cycles differ slighly from hd6309 emulation */ +static const UINT8 index_cycle_em[256] = { /* Index Loopup cycle counts */ +/* 0xX0, 0xX1, 0xX2, 0xX3, 0xX4, 0xX5, 0xX6, 0xX7, 0xX8, 0xX9, 0xXA, 0xXB, 0xXC, 0xXD, 0xXE, 0xXF */ + +/* 0x0X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x1X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x2X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x3X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x4X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x5X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x6X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x7X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x8X */ 2, 3, 2, 3, 0, 1, 1, 0, 1, 4, 0, 4, 1, 5, 0, 5, +/* 0x9X */ 5, 6, 5, 6, 3, 4, 4, 0, 4, 7, 0, 7, 4, 8, 0, 8, +/* 0xAX */ 2, 3, 2, 3, 0, 1, 1, 0, 1, 4, 0, 4, 1, 5, 0, 5, +/* 0xBX */ 5, 6, 5, 6, 3, 4, 4, 0, 4, 7, 0, 7, 4, 8, 0, 8, +/* 0xCX */ 2, 3, 2, 3, 0, 1, 1, 0, 1, 4, 0, 4, 1, 5, 0, 3, +/* 0xDX */ 5, 6, 5, 6, 3, 4, 4, 0, 4, 7, 0, 7, 4, 8, 0, 8, +/* 0xEX */ 2, 3, 2, 3, 0, 1, 1, 0, 1, 4, 0, 4, 1, 5, 0, 5, +/* 0xFX */ 4, 6, 5, 6, 3, 4, 4, 0, 4, 7, 0, 7, 4, 8, 0, 8 +}; + +/* timings for 1-byte opcodes */ +static const UINT8 cycles1[] = +{ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ + /*0*/ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, + /*1*/ 0, 0, 2, 4, 2, 2, 5, 9, 2, 2, 3, 2, 3, 2, 8, 6, + /*2*/ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + /*3*/ 4, 4, 4, 4, 5, 5, 5, 5, 2, 5, 3, 6,20,11, 2,19, + /*4*/ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + /*5*/ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + /*6*/ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, + /*7*/ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 7, + /*8*/ 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 4, 7, 3, 2, + /*9*/ 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 6, 7, 5, 5, + /*A*/ 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 6, 7, 5, 5, + /*B*/ 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, 5, 5, 7, 8, 6, 6, + /*C*/ 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 3, + /*D*/ 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, + /*E*/ 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, + /*F*/ 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6 +}; + +static void (*const m6809_main[0x100])(m68_state_t *) = { +/* 0xX0, 0xX1, 0xX2, 0xX3, 0xX4, 0xX5, 0xX6, 0xX7, + 0xX8, 0xX9, 0xXA, 0xXB, 0xXC, 0xXD, 0xXE, 0xXF */ + +/* 0x0X */ neg_di, neg_di, com_di, com_di, lsr_di, lsr_di, ror_di, asr_di, + asl_di, rol_di, dec_di, dec_di, inc_di, tst_di, jmp_di, clr_di, + +/* 0x1X */ pref10, pref11, nop, sync, illegal,illegal,lbra, lbsr, + illegal,daa, orcc, illegal,andcc, sex, exg, tfr, + +/* 0x2X */ bra, brn, bhi, bls, bcc, bcs, bne, beq, + bvc, bvs, bpl, bmi, bge, blt, bgt, ble, + +/* 0x3X */ leax, leay, leas, leau, pshs, puls, pshu, pulu, + illegal,rts, abx, rti, cwai, mul, illegal,swi, + +/* 0x4X */ nega, nega, coma, coma, lsra, lsra, rora, asra, + asla, rola, deca, deca, inca, tsta, clra, clra, + +/* 0x5X */ negb, negb, comb, comb, lsrb, lsrb, rorb, asrb, + aslb, rolb, decb, decb, incb, tstb, clrb, clrb, + +/* 0x6X */ neg_ix, neg_ix, com_ix, com_ix, lsr_ix, lsr_ix, ror_ix, asr_ix, + asl_ix, rol_ix, dec_ix, dec_ix, inc_ix, tst_ix, jmp_ix, clr_ix, + +/* 0x7X */ neg_ex, neg_ex, com_ex, com_ex, lsr_ex, lsr_ex, ror_ex, asr_ex, + asl_ex, rol_ex, dec_ex, dec_ex, inc_ex, tst_ex, jmp_ex, clr_ex, + +/* 0x8X */ suba_im,cmpa_im,sbca_im,subd_im,anda_im,bita_im,lda_im, sta_im, + eora_im,adca_im,ora_im, adda_im,cmpx_im,bsr, ldx_im, stx_im, + +/* 0x9X */ suba_di,cmpa_di,sbca_di,subd_di,anda_di,bita_di,lda_di, sta_di, + eora_di,adca_di,ora_di, adda_di,cmpx_di,jsr_di, ldx_di, stx_di, + +/* 0xAX */ suba_ix,cmpa_ix,sbca_ix,subd_ix,anda_ix,bita_ix,lda_ix, sta_ix, + eora_ix,adca_ix,ora_ix, adda_ix,cmpx_ix,jsr_ix, ldx_ix, stx_ix, + +/* 0xBX */ suba_ex,cmpa_ex,sbca_ex,subd_ex,anda_ex,bita_ex,lda_ex, sta_ex, + eora_ex,adca_ex,ora_ex, adda_ex,cmpx_ex,jsr_ex, ldx_ex, stx_ex, + +/* 0xCX */ subb_im,cmpb_im,sbcb_im,addd_im,andb_im,bitb_im,ldb_im, stb_im, + eorb_im,adcb_im,orb_im, addb_im,ldd_im, std_im, ldu_im, stu_im, + +/* 0xDX */ subb_di,cmpb_di,sbcb_di,addd_di,andb_di,bitb_di,ldb_di, stb_di, + eorb_di,adcb_di,orb_di, addb_di,ldd_di, std_di, ldu_di, stu_di, + +/* 0xEX */ subb_ix,cmpb_ix,sbcb_ix,addd_ix,andb_ix,bitb_ix,ldb_ix, stb_ix, + eorb_ix,adcb_ix,orb_ix, addb_ix,ldd_ix, std_ix, ldu_ix, stu_ix, + +/* 0xFX */ subb_ex,cmpb_ex,sbcb_ex,addd_ex,andb_ex,bitb_ex,ldb_ex, stb_ex, + eorb_ex,adcb_ex,orb_ex, addb_ex,ldd_ex, std_ex, ldu_ex, stu_ex +}; |