diff options
Diffstat (limited to 'src/devices/cpu/rw5000/b5000.h')
-rw-r--r-- | src/devices/cpu/rw5000/b5000.h | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/src/devices/cpu/rw5000/b5000.h b/src/devices/cpu/rw5000/b5000.h new file mode 100644 index 00000000000..abc84759de5 --- /dev/null +++ b/src/devices/cpu/rw5000/b5000.h @@ -0,0 +1,113 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/* + + Rockwell B5000 MCU + +*/ + +#ifndef MAME_CPU_RW5000_B5000_H +#define MAME_CPU_RW5000_B5000_H + +#pragma once + +#include "rw5000base.h" + +// pinout reference (preliminary, other A/B5xxx pinouts are same or very similar) + +/* + _____ _____ + VSS 1 |* \_/ | 42 NC + CLK? 2 | | 41 NC + VC? 3 | | 40 NC + NC 4 | | 39 VDD + NC 5 | | 38 STR8 + NC 6 | | 37 STR7 + NC 7 | | 36 STR6 + NC 8 | | 35 STR5 + NC 9 | | 34 STR4 + NC 10 | B5000 | 33 STR3 + KB3 11 | | 32 STR2 + DIN1? 12 | | 31 STR1 + KB1 13 | | 30 STR0 + KB2 14 | | 29 SEG7 + KB4 15 | | 28 SEG6 + NC 16 | | 27 SEG5 + NC 17 | | 26 SEG4 + NC 18 | | 25 SEG3 + NC 19 | | 24 SEG2 + NC 20 | _ | 23 SEG1 + NC 21 |_____/ \_____| 22 SEG0 + +*/ + +class b5000_cpu_device : public rw5000_base_device +{ +public: + b5000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + b5000_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data); + + // device_disasm_interface overrides + virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; + + // device_execute_interface overrides + virtual void execute_one() override; + + virtual bool op_canskip(u8 op) override { return !op_is_tl(op); } + virtual bool op_is_tl(u8 op); + virtual bool op_is_lb(u8 op); + virtual bool op_is_atb(u8 op); + virtual void reset_pc() override { set_pc(7, 0); } + virtual u8 sr_page() { return 0; } + virtual u16 decode_digit(u8 data); + + void program_448x8(address_map &map) ATTR_COLD; + void data_45x4(address_map &map) ATTR_COLD; + + // opcode helpers + u8 ram_r(); + void ram_w(u8 data); + void set_pc(u8 pu, u8 pl); + void set_bu(u8 bu); + void seg_w(u16 seg); + void op_illegal(); + + // opcode handlers + virtual void op_tl(); + virtual void op_tra_step() override; + virtual void op_ret_step() override; + virtual void op_nop(); + + virtual void op_lb(u8 bl); + virtual void op_atb(); + virtual void op_lda(); + virtual void op_exc0(); + virtual void op_excp(); + virtual void op_excm(); + virtual void op_sm(); + virtual void op_rsm(); + virtual void op_tm(); + virtual void op_tam(); + + virtual void op_lax(); + virtual void op_comp(); + virtual void op_adx(); + virtual void op_add(); + virtual void op_sc(); + virtual void op_rsc(); + virtual void op_tc(); + + virtual void op_kseg(); + virtual void op_atb_step() override; + virtual void op_tkb(); + virtual void op_tkbs(); + virtual void op_read(); + virtual void op_tdin(); +}; + + +DECLARE_DEVICE_TYPE(B5000, b5000_cpu_device) + +#endif // MAME_CPU_RW5000_B5000_H |