1 // license:BSD-3-Clause
2 // copyright-holders:David Haywood
3 #ifndef MAME_INCLUDES_SUNPLUS_GCM394_H
4 #define MAME_INCLUDES_SUNPLUS_GCM394_H
5 
6 #pragma once
7 
8 #include "machine/generalplus_gpl16250soc.h"
9 #include "machine/generalplus_gpl16250.h"
10 #include "bus/generic/slot.h"
11 #include "bus/generic/carts.h"
12 
13 #include "screen.h"
14 #include "speaker.h"
15 
16 
17 
18 class gcm394_game_state : public driver_device
19 {
20 public:
gcm394_game_state(const machine_config & mconfig,device_type type,const char * tag)21 	gcm394_game_state(const machine_config& mconfig, device_type type, const char* tag) :
22 		driver_device(mconfig, type, tag),
23 		m_maincpu(*this, "maincpu"),
24 		m_screen(*this, "screen"),
25 		m_io(*this, "IN%u", 0U),
26 		m_romregion(*this, "maincpu"),
27 		m_memory(*this, "memory")
28 	{
29 	}
30 
31 	void base(machine_config &config);
32 
33 	void cs_map_base(address_map &map);
34 
35 	virtual uint16_t cs0_r(offs_t offset);
36 	virtual void cs0_w(offs_t offset, uint16_t data);
37 	virtual uint16_t cs1_r(offs_t offset);
38 	virtual void cs1_w(offs_t offset, uint16_t data);
39 	virtual uint16_t cs2_r(offs_t offset);
40 	virtual void cs2_w(offs_t offset, uint16_t data);
41 	virtual uint16_t cs3_r(offs_t offset);
42 	virtual void cs3_w(offs_t offset, uint16_t data);
43 	virtual uint16_t cs4_r(offs_t offset);
44 	virtual void cs4_w(offs_t offset, uint16_t data);
45 
46 	void cs_callback(uint16_t cs0, uint16_t cs1, uint16_t cs2, uint16_t cs3, uint16_t cs4);
47 
48 protected:
49 	virtual void machine_start() override;
50 	virtual void machine_reset() override;
51 
52 
53 	required_device<sunplus_gcm394_base_device> m_maincpu;
54 	required_device<screen_device> m_screen;
55 
56 
57 	required_ioport_array<3> m_io;
58 
59 
60 	optional_region_ptr<uint16_t> m_romregion;
61 	required_device<full_memory_device> m_memory;
62 
63 	virtual uint16_t porta_r();
64 	virtual uint16_t portb_r();
65 	virtual uint16_t portc_r();
66 	virtual void porta_w(uint16_t data);
67 
68 	virtual uint16_t read_external_space(offs_t offset);
69 	virtual void write_external_space(offs_t offset, uint16_t data);
70 
71 private:
72 };
73 
74 
75 
76 
77 class tkmag220_game_state : public gcm394_game_state
78 {
79 public:
tkmag220_game_state(const machine_config & mconfig,device_type type,const char * tag)80 	tkmag220_game_state(const machine_config& mconfig, device_type type, const char* tag) :
81 		gcm394_game_state(mconfig, type, tag)
82 	{
83 	}
84 
85 	void tkmag220(machine_config &config);
86 
87 protected:
88 
89 	virtual void machine_reset() override;
90 
91 private:
92 	int m_upperbase;
93 
94 	virtual uint16_t cs0_r(offs_t offset) override;
95 
96 	void tkmag220_portd_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
97 };
98 
99 
100 class gormiti_game_state : public gcm394_game_state
101 {
102 public:
gormiti_game_state(const machine_config & mconfig,device_type type,const char * tag)103 	gormiti_game_state(const machine_config& mconfig, device_type type, const char* tag) :
104 		gcm394_game_state(mconfig, type, tag)
105 	{
106 	}
107 
108 
109 protected:
110 
111 	virtual void machine_reset() override;
112 
113 private:
114 };
115 
116 #endif
117