1 // license:BSD-3-Clause
2 // copyright-holders:Olivier Galibert
3 /***************************************************************************
4 
5     h8s2357.h
6 
7     H8S-2357 family emulation
8 
9     H8S/2000-based mcus.
10 
11     Variant           ROM        RAM
12     H8S/2357         128K         8K
13     H8S/2352         -            8K
14     H8S/2398         256K         8K
15     H8S/2394         -           32K
16     H8S/2392         -            8K
17     H8S/2390         -            4K
18 
19 
20 
21 ***************************************************************************/
22 
23 #ifndef MAME_CPU_H8_H8S2357_H
24 #define MAME_CPU_H8_H8S2357_H
25 
26 #pragma once
27 
28 #include "h8s2000.h"
29 #include "h8_intc.h"
30 #include "h8_adc.h"
31 #include "h8_port.h"
32 #include "h8_timer8.h"
33 #include "h8_timer16.h"
34 #include "h8_sci.h"
35 #include "h8_watchdog.h"
36 
37 class h8s2357_device : public h8s2000_device {
38 public:
39 	h8s2357_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
40 
41 	uint8_t syscr_r();
42 	void syscr_w(uint8_t data);
43 
44 protected:
45 	required_device<h8s_intc_device> intc;
46 	required_device<h8_adc_device> adc;
47 	required_device<h8_port_device> port1;
48 	required_device<h8_port_device> port2;
49 	required_device<h8_port_device> port3;
50 	required_device<h8_port_device> port4;
51 	required_device<h8_port_device> port5;
52 	required_device<h8_port_device> port6;
53 	required_device<h8_port_device> porta;
54 	required_device<h8_port_device> portb;
55 	required_device<h8_port_device> portc;
56 	required_device<h8_port_device> portd;
57 	required_device<h8_port_device> porte;
58 	required_device<h8_port_device> portf;
59 	required_device<h8_port_device> portg;
60 	required_device<h8h_timer8_channel_device> timer8_0;
61 	required_device<h8h_timer8_channel_device> timer8_1;
62 	required_device<h8_timer16_device> timer16;
63 	required_device<h8s_timer16_channel_device> timer16_0;
64 	required_device<h8s_timer16_channel_device> timer16_1;
65 	required_device<h8s_timer16_channel_device> timer16_2;
66 	required_device<h8s_timer16_channel_device> timer16_3;
67 	required_device<h8s_timer16_channel_device> timer16_4;
68 	required_device<h8s_timer16_channel_device> timer16_5;
69 	required_device<h8_sci_device> sci0;
70 	required_device<h8_sci_device> sci1;
71 	required_device<h8_sci_device> sci2;
72 	required_device<h8_watchdog_device> watchdog;
73 
74 	uint32_t ram_start;
75 	unsigned char syscr;
76 
77 	h8s2357_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t start);
78 
79 	virtual bool exr_in_stack() const override;
80 	virtual void update_irq_filter() override;
81 	virtual void interrupt_taken() override;
82 	virtual int trace_setup() override;
83 	virtual int trapa_setup() override;
84 	virtual void irq_setup() override;
85 	virtual void internal_update(uint64_t current_time) override;
86 	virtual void device_add_mconfig(machine_config &config) override;
87 	void map(address_map &map);
88 
89 	virtual void device_start() override;
90 	virtual void device_reset() override;
91 	virtual void execute_set_input(int inputnum, int state) override;
92 };
93 
94 class h8s2352_device : public h8s2357_device {
95 public:
96 	h8s2352_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
97 };
98 
99 class h8s2398_device : public h8s2357_device {
100 public:
101 	h8s2398_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
102 };
103 
104 class h8s2394_device : public h8s2357_device {
105 public:
106 	h8s2394_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
107 };
108 
109 class h8s2392_device : public h8s2357_device {
110 public:
111 	h8s2392_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
112 };
113 
114 class h8s2390_device : public h8s2357_device {
115 public:
116 	h8s2390_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
117 };
118 
119 DECLARE_DEVICE_TYPE(H8S2357, h8s2357_device)
120 DECLARE_DEVICE_TYPE(H8S2352, h8s2352_device)
121 DECLARE_DEVICE_TYPE(H8S2398, h8s2398_device)
122 DECLARE_DEVICE_TYPE(H8S2394, h8s2394_device)
123 DECLARE_DEVICE_TYPE(H8S2392, h8s2392_device)
124 DECLARE_DEVICE_TYPE(H8S2390, h8s2390_device)
125 
126 #endif // MAME_CPU_H8_H8S2357_H
127