1 // license:BSD-3-Clause
2 // copyright-holders:Olivier Galibert
3 /***************************************************************************
4 
5     h83002.h
6 
7     H8/3002
8 
9     H8/300H-based mcus.
10 
11 
12 ***************************************************************************/
13 
14 #ifndef MAME_CPU_H8_H83002_H
15 #define MAME_CPU_H8_H83002_H
16 
17 #pragma once
18 
19 #include "h8h.h"
20 #include "h8_adc.h"
21 #include "h8_dma.h"
22 #include "h8_port.h"
23 #include "h8_intc.h"
24 #include "h8_timer16.h"
25 #include "h8_sci.h"
26 #include "h8_watchdog.h"
27 
28 class h83002_device : public h8h_device {
29 public:
30 	h83002_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
31 
tend0()32 	auto tend0() { return tend0_cb.bind(); }
tend1()33 	auto tend1() { return tend1_cb.bind(); }
34 
set_mode_a20()35 	void set_mode_a20() { mode_a20 = true; }
set_mode_a24()36 	void set_mode_a24() { mode_a20 = false; }
37 
38 	uint8_t syscr_r();
39 	void syscr_w(uint8_t data);
40 
41 	uint8_t rtmcsr_r();
42 	void rtmcsr_w(uint8_t data);
43 
44 protected:
45 	required_device<h8h_intc_device> intc;
46 	required_device<h8_adc_device> adc;
47 	optional_device<h8_dma_device> dma;
48 	optional_device<h8_dma_channel_device> dma0;
49 	optional_device<h8_dma_channel_device> dma1;
50 	required_device<h8_port_device> port4;
51 	required_device<h8_port_device> port6;
52 	required_device<h8_port_device> port7;
53 	required_device<h8_port_device> port8;
54 	required_device<h8_port_device> port9;
55 	required_device<h8_port_device> porta;
56 	required_device<h8_port_device> portb;
57 	required_device<h8_timer16_device> timer16;
58 	required_device<h8h_timer16_channel_device> timer16_0;
59 	required_device<h8h_timer16_channel_device> timer16_1;
60 	required_device<h8h_timer16_channel_device> timer16_2;
61 	required_device<h8h_timer16_channel_device> timer16_3;
62 	required_device<h8h_timer16_channel_device> timer16_4;
63 	required_device<h8_sci_device> sci0;
64 	required_device<h8_sci_device> sci1;
65 	required_device<h8_watchdog_device> watchdog;
66 
67 	uint8_t syscr;
68 	uint8_t rtmcsr;
69 
70 	devcb_write_line tend0_cb, tend1_cb;
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 DECLARE_DEVICE_TYPE(H83002, h83002_device)
86 
87 #endif // MAME_CPU_H8_H83002_H
88