summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/h8/gt913.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/h8/gt913.h')
-rw-r--r--src/devices/cpu/h8/gt913.h60
1 files changed, 46 insertions, 14 deletions
diff --git a/src/devices/cpu/h8/gt913.h b/src/devices/cpu/h8/gt913.h
index 3269ab7eafe..878dbc48ebe 100644
--- a/src/devices/cpu/h8/gt913.h
+++ b/src/devices/cpu/h8/gt913.h
@@ -21,24 +21,47 @@
#include "machine/gt913_kbd.h"
#include "machine/gt913_snd.h"
-class gt913_device : public h8_device {
+class gt913_device : public h8_device, public device_mixer_interface {
public:
- gt913_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ gt913_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
- void uart_rate_w(uint8_t data);
- void uart_control_w(uint8_t data);
- uint8_t uart_control_r();
+ auto read_port1() { return m_read_port [PORT_1].bind(); }
+ auto write_port1() { return m_write_port[PORT_1].bind(); }
+ auto read_port2() { return m_read_port [PORT_2].bind(); }
+ auto write_port2() { return m_write_port[PORT_2].bind(); }
+ auto read_port3() { return m_read_port [PORT_3].bind(); }
+ auto write_port3() { return m_write_port[PORT_3].bind(); }
+ auto read_port4() { return m_read_port [PORT_4].bind(); }
+ auto write_port4() { return m_write_port[PORT_4].bind(); }
+
+ void uart_rate_w(u8 data);
+ void uart_control_w(offs_t offset, u8 data);
+ u8 uart_control_r(offs_t offset);
+
+ void data_w(offs_t offset, u8 data);
+ u8 data_r(offs_t offset);
+
+ void syscr_w(u8 data);
+ u8 syscr_r();
protected:
+ /* indirect reads/writes with banking support */
+ u8 read8ib(u32 adr);
+ void write8ib(u32 adr, u8 data);
+ u16 read16ib(u32 adr);
+ void write16ib(u32 adr, u16 data);
virtual void update_irq_filter() override;
virtual void interrupt_taken() override;
- virtual void internal_update(uint64_t current_time) override;
+ virtual void internal_update(u64 current_time) override;
+ virtual void notify_standby(int state) override;
virtual void irq_setup() override;
virtual void execute_set_input(int inputnum, int state) override;
+ virtual space_config_vector memory_space_config() const override;
+
virtual void device_add_mconfig(machine_config &config) override;
void map(address_map &map);
@@ -49,20 +72,32 @@ protected:
virtual void do_exec_partial() override;
#define O(o) void o ## _full(); void o ## _partial()
- O(ldbank_imm2l_bankl); O(ldbank_imm4l_bankh); O(ldbank_r8l_bankl); O(ldbank_r8l_bankh);
+ O(ldc_imm6l_ccr);
+ O(ldbank_imm6l_bankl); O(ldbank_imm6l_bankh); O(ldbank_r8l_bankl); O(ldbank_r8l_bankh);
- O(dispatch_6600); O(dispatch_7000); O(dispatch_7200);
+ O(jmp_abs22e);
+
+ O(mov_b_r16ih_r8l); O(mov_w_r16ih_r16l); O(mov_b_r16ph_r8l); O(mov_w_r16ph_r16l);
+ O(mov_b_r8l_r16ih); O(mov_w_r16l_r16ih); O(mov_b_r8l_pr16h); O(mov_w_r16l_pr16h);
+ O(mov_b_r16d16h_r8l); O(mov_w_r16d16h_r16l); O(mov_b_r8l_r16d16h); O(mov_w_r16l_r16d16h);
+
+ O(dispatch_6000); O(dispatch_6100); O(dispatch_6200); O(dispatch_6300);
+ O(dispatch_6400); O(dispatch_6500); O(dispatch_6600); O(dispatch_6700);
+ O(dispatch_7000); O(dispatch_7100); O(dispatch_7200); O(dispatch_7300);
+ O(dispatch_7400); O(dispatch_7500); O(dispatch_7600); O(dispatch_7700);
#undef O
required_memory_region m_rom;
- required_memory_bank m_bank;
- uint16_t m_banknum;
+ address_space_config m_data_config;
+ memory_access<32, 1, 0, ENDIANNESS_BIG>::specific m_data;
+ u16 m_banknum;
+ u8 m_syscr;
required_device<gt913_intc_device> m_intc;
/* sound */
- required_device<gt913_sound_hle_device> m_sound;
+ required_device<gt913_sound_device> m_sound;
/* key controller */
required_device<gt913_kbd_hle_device> m_kbd;
@@ -70,9 +105,6 @@ protected:
/* misc. I/O (timers, ADCs) */
required_device<gt913_io_hle_device> m_io_hle;
- /* serial port */
- required_device<h8_sci_device> m_sci;
-
/* 3x 8-bit I/O ports */
required_device_array<h8_port_device, 3> m_port;
};