1 // license:BSD-3-Clause 2 // copyright-holders:Olivier Galibert 3 /*************************************************************************** 4 5 h8s2245.h 6 7 H8S-2245 family emulation 8 9 H8S/2000-based mcus. 10 11 Variant ROM RAM 12 H8S/2241 32K 4K 13 H8S/2242 32K 8K 14 H8S/2245 128K 4K 15 H8S/2246 128K 8K 16 17 18 19 ***************************************************************************/ 20 21 #ifndef MAME_CPU_H8_H8S2245_H 22 #define MAME_CPU_H8_H8S2245_H 23 24 #pragma once 25 26 #include "h8s2000.h" 27 #include "h8_intc.h" 28 #include "h8_adc.h" 29 #include "h8_dtc.h" 30 #include "h8_port.h" 31 #include "h8_timer8.h" 32 #include "h8_timer16.h" 33 #include "h8_sci.h" 34 #include "h8_watchdog.h" 35 36 class h8s2245_device : public h8s2000_device { 37 public: 38 h8s2245_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 39 40 uint8_t syscr_r(); 41 void syscr_w(uint8_t data); 42 uint16_t mstpcr_r(); 43 void mstpcr_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 44 45 protected: 46 required_device<h8s_intc_device> intc; 47 required_device<h8_adc_device> adc; 48 required_device<h8_dtc_device> dtc; 49 required_device<h8_port_device> port1; 50 required_device<h8_port_device> port2; 51 required_device<h8_port_device> port3; 52 required_device<h8_port_device> port4; 53 required_device<h8_port_device> port5; 54 required_device<h8_port_device> porta; 55 required_device<h8_port_device> portb; 56 required_device<h8_port_device> portc; 57 required_device<h8_port_device> portd; 58 required_device<h8_port_device> porte; 59 required_device<h8_port_device> portf; 60 required_device<h8_port_device> portg; 61 required_device<h8h_timer8_channel_device> timer8_0; 62 required_device<h8h_timer8_channel_device> timer8_1; 63 required_device<h8_timer16_device> timer16; 64 required_device<h8s_timer16_channel_device> timer16_0; 65 required_device<h8s_timer16_channel_device> timer16_1; 66 required_device<h8s_timer16_channel_device> timer16_2; 67 required_device<h8_sci_device> sci0; 68 required_device<h8_sci_device> sci1; 69 required_device<h8_sci_device> sci2; 70 required_device<h8_watchdog_device> watchdog; 71 72 uint32_t ram_start; 73 uint16_t mstpcr; 74 uint8_t syscr; 75 76 h8s2245_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t start); 77 78 virtual bool exr_in_stack() const override; 79 virtual void update_irq_filter() override; 80 virtual void interrupt_taken() override; 81 virtual int trapa_setup() override; 82 virtual void irq_setup() override; 83 virtual void internal_update(uint64_t current_time) override; 84 virtual void device_add_mconfig(machine_config &config) override; 85 void map(address_map &map); 86 87 virtual void device_start() override; 88 virtual void device_reset() override; 89 virtual void execute_set_input(int inputnum, int state) override; 90 }; 91 92 class h8s2241_device : public h8s2245_device { 93 public: 94 h8s2241_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 95 }; 96 97 class h8s2242_device : public h8s2245_device { 98 public: 99 h8s2242_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 100 }; 101 102 class h8s2246_device : public h8s2245_device { 103 public: 104 h8s2246_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 105 }; 106 107 DECLARE_DEVICE_TYPE(H8S2241, h8s2241_device) 108 DECLARE_DEVICE_TYPE(H8S2242, h8s2242_device) 109 DECLARE_DEVICE_TYPE(H8S2245, h8s2245_device) 110 DECLARE_DEVICE_TYPE(H8S2246, h8s2246_device) 111 112 #endif // MAME_CPU_H8_H8S2245_H 113