1 // license:BSD-3-Clause
2 // copyright-holders:Olivier Galibert
3 /***************************************************************************
4 
5     h83048.h
6 
7     H8-3048 family emulation
8 
9     H8-300H-based mcus.
10 
11     Variant         ROM        RAM
12     H8/3044         32K         2K
13     H8/3045         64K         2K
14     H8/3047         96K         4K
15     H8/3048        192K         4K
16 
17     The 3394, 3396, and 3997 variants are the mask-rom versions.
18 
19 
20 ***************************************************************************/
21 
22 #ifndef MAME_CPU_H8_H83048_H
23 #define MAME_CPU_H8_H83048_H
24 
25 #include "h8h.h"
26 #include "h8_adc.h"
27 #include "h8_port.h"
28 #include "h8_intc.h"
29 #include "h8_timer16.h"
30 #include "h8_sci.h"
31 #include "h8_watchdog.h"
32 
33 class h83048_device : public h8h_device {
34 public:
35 	h83048_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
36 
set_mode_a20()37 	void set_mode_a20() { mode_a20 = true; }
set_mode_a24()38 	void set_mode_a24() { mode_a20 = false; }
39 
40 	uint8_t syscr_r();
41 	void syscr_w(uint8_t data);
42 
43 protected:
44 	h83048_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t start);
45 
46 	required_device<h8h_intc_device> intc;
47 	required_device<h8_adc_device> adc;
48 	required_device<h8_port_device> port1;
49 	required_device<h8_port_device> port2;
50 	required_device<h8_port_device> port3;
51 	required_device<h8_port_device> port4;
52 	required_device<h8_port_device> port5;
53 	required_device<h8_port_device> port6;
54 	required_device<h8_port_device> port7;
55 	required_device<h8_port_device> port8;
56 	required_device<h8_port_device> port9;
57 	required_device<h8_port_device> porta;
58 	required_device<h8_port_device> portb;
59 	required_device<h8_timer16_device> timer16;
60 	required_device<h8h_timer16_channel_device> timer16_0;
61 	required_device<h8h_timer16_channel_device> timer16_1;
62 	required_device<h8h_timer16_channel_device> timer16_2;
63 	required_device<h8h_timer16_channel_device> timer16_3;
64 	required_device<h8h_timer16_channel_device> timer16_4;
65 	required_device<h8_sci_device> sci0;
66 	required_device<h8_sci_device> sci1;
67 	required_device<h8_watchdog_device> watchdog;
68 
69 	uint32_t ram_start;
70 	uint8_t syscr;
71 
72 	virtual void update_irq_filter() override;
73 	virtual void interrupt_taken() override;
74 	virtual int trapa_setup() override;
75 	virtual void irq_setup() override;
76 	virtual void internal_update(uint64_t current_time) override;
77 	virtual void device_add_mconfig(machine_config &config) override;
78 	void map(address_map &map);
79 
80 	virtual void device_start() override;
81 	virtual void device_reset() override;
82 	virtual void execute_set_input(int inputnum, int state) override;
83 };
84 
85 class h83044_device : public h83048_device {
86 public:
87 	h83044_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
88 };
89 
90 class h83045_device : public h83048_device {
91 public:
92 	h83045_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
93 };
94 
95 class h83047_device : public h83048_device {
96 public:
97 	h83047_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
98 };
99 
100 DECLARE_DEVICE_TYPE(H83044, h83044_device)
101 DECLARE_DEVICE_TYPE(H83045, h83045_device)
102 DECLARE_DEVICE_TYPE(H83047, h83047_device)
103 DECLARE_DEVICE_TYPE(H83048, h83048_device)
104 
105 #endif // MAME_CPU_H8_H83048_H
106