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