diff options
Diffstat (limited to 'src/devices/cpu/h8/h8h.h')
-rw-r--r-- | src/devices/cpu/h8/h8h.h | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/src/devices/cpu/h8/h8h.h b/src/devices/cpu/h8/h8h.h new file mode 100644 index 00000000000..2fb500b77f8 --- /dev/null +++ b/src/devices/cpu/h8/h8h.h @@ -0,0 +1,109 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert +/*************************************************************************** + + h8h.h + + H8-300H base cpu emulation + + Adds 32-bits support and a bunch of other stuff. + + +***************************************************************************/ + +#ifndef __H8H_H__ +#define __H8H_H__ + +#include "h8.h" + +class h8h_device : public h8_device { +public: + h8h_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source, address_map_delegate map_delegate); + +protected: + static const disasm_entry disasm_entries[]; + + virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options); + + virtual void do_exec_full(); + virtual void do_exec_partial(); + + inline void r32_w(int reg, UINT32 val) { R[reg & 7] = val; R[(reg & 7) | 8] = val >> 16; } + inline UINT32 r32_r(int reg) const { return R[reg & 7] | (R[(reg & 7) | 8] << 16); } + +#define O(o) void o ## _full(); void o ## _partial() + + O(add_l_r32h_r32l); O(add_l_imm32_r32l); + O(adds_l_four_r32l); O(adds_l_one_r32l); O(adds_l_two_r32l); + O(and_l_r32h_r32l); O(and_l_imm32_r32l); O(and_w_r16h_r16l); + O(band_imm3_abs32); O(band_imm3_r32ihh); + O(bcc_rel16); + O(bclr_imm3_abs32); O(bclr_imm3_r32ihh); O(bclr_r8h_abs32); O(bclr_r8h_r32ihh); + O(bcs_rel16); + O(beq_rel16); + O(bf_rel16); + O(bge_rel16); + O(bgt_rel16); + O(bhi_rel16); + O(biand_imm3_abs32); O(biand_imm3_r32ihh); + O(bild_imm3_abs32); O(bild_imm3_r32ihh); + O(bior_imm3_abs32); O(bior_imm3_r32ihh); + O(bist_imm3_abs32); O(bist_imm3_r32ihh); + O(bixor_imm3_abs32); O(bixor_imm3_r32ihh); + O(bld_imm3_abs32); O(bld_imm3_r32ihh); + O(ble_rel16); + O(bls_rel16); + O(blt_rel16); + O(bmi_rel16); + O(bne_rel16); + O(bnot_imm3_abs32); O(bnot_imm3_r32ihh); O(bnot_r8h_abs32); O(bnot_r8h_r32ihh); + O(bor_imm3_abs32); O(bor_imm3_r32ihh); + O(bpl_rel16); + O(bset_imm3_abs32); O(bset_imm3_r32ihh); O(bset_r8h_abs32); O(bset_r8h_r32ihh); + O(bsr_rel16); O(bsr_rel8); + O(bst_imm3_abs32); O(bst_imm3_r32ihh); + O(bt_rel16); + O(btst_imm3_abs32); O(btst_imm3_r32ihh); O(btst_r8h_abs32); O(btst_r8h_r32ihh); + O(bvc_rel16); + O(bvs_rel16); + O(bxor_imm3_abs32); O(bxor_imm3_r32ihh); + O(cmp_l_r32h_r32l); O(cmp_l_imm32_r32l); + O(dec_l_one_r32l); O(dec_l_two_r32l); + O(divxs_b_r8h_r16l); O(divxs_w_r16h_r32l); + O(divxu_w_r16h_r32l); + O(eepmov_b); O(eepmov_w); + O(exts_b_r8l); O(exts_l_r32l); O(exts_w_r16l); + O(extu_b_r8l); O(extu_l_r32l); O(extu_w_r16l); + O(inc_l_one_r32l); O(inc_l_two_r32l); O(inc_w_one_r16l); O(inc_w_two_r16l); + O(jmp_abs8i); O(jmp_abs24e); O(jmp_r32h); + O(jsr_abs8i); O(jsr_abs16e); O(jsr_abs24e); O(jsr_r32h); + O(ldc_w_abs16_ccr); O(ldc_w_abs32_ccr); O(ldc_w_r32d16h_ccr); O(ldc_w_r32d32hh_ccr); O(ldc_w_r32ih_ccr); O(ldc_w_r32ph_ccr); + O(mov_b_abs32_r8l); O(mov_b_r32d16h_r8l); O(mov_b_r32d32hh_r8l); O(mov_b_r32ih_r8l); O(mov_b_r32ph_r8l); O(mov_b_r8l_abs32); O(mov_b_r8l_pr32h); O(mov_b_r8l_r32d16h); O(mov_b_r8l_r32d32hh); O(mov_b_r8l_r32ih); + O(mov_l_abs16_r32l); O(mov_l_abs32_r32l); O(mov_l_r32d16h_r32l); O(mov_l_r32d32hh_r32l); O(mov_l_r32h_r32l); O(mov_l_r32ih_r32l); O(mov_l_r32l_abs16); O(mov_l_r32l_abs32); O(mov_l_r32l_pr32h); O(mov_l_r32l_r32d16h); O(mov_l_r32l_r32d32hh); O(mov_l_r32l_r32ih); O(mov_l_r32ph_r32l); + O(mov_w_abs32_r16l); O(mov_l_imm32_r32l); O(mov_w_r16l_abs32); O(mov_w_r16l_pr32h); O(mov_w_r16l_r32d16h); O(mov_w_r16l_r32d32hh); O(mov_w_r16l_r32ih); O(mov_w_r32d16h_r16l); O(mov_w_r32d32hh_r16l); O(mov_w_r32ih_r16l); O(mov_w_r32ph_r16l); + O(mulxs_b_r8h_r16l); O(mulxs_w_r16h_r32l); + O(mulxu_w_r16h_r32l); + O(neg_l_r32l); O(neg_w_r16l); + O(not_l_r32l); O(not_w_r16l); + O(or_l_r32h_r32l); O(or_l_imm32_r32l); O(or_w_r16h_r16l); + O(rotl_l_r32l); O(rotl_w_r16l); + O(rotr_l_r32l); O(rotr_w_r16l); + O(rotxl_l_r32l); O(rotxl_w_r16l); + O(rotxr_l_r32l); O(rotxr_w_r16l); + O(rte); + O(rts); + O(shal_l_r32l); O(shal_w_r16l); + O(shar_l_r32l); O(shar_w_r16l); + O(shll_l_r32l); O(shll_w_r16l); + O(shlr_l_r32l); O(shlr_w_r16l); + O(stc_w_ccr_abs16); O(stc_w_ccr_abs32); O(stc_w_ccr_pr32h); O(stc_w_ccr_r32d16h); O(stc_w_ccr_r32d32hh); O(stc_w_ccr_r32ih); + O(sub_l_r32h_r32l); O(sub_l_imm32_r32l); + O(subs_l_four_r32l); O(subs_l_one_r32l); O(subs_l_two_r32l); + O(trapa_imm2); + O(xor_l_r32h_r32l); O(xor_l_imm32_r32l); O(xor_w_r16h_r16l); + + O(state_irq); +#undef O +}; + +#endif |