1 // license:BSD-3-Clause 2 // copyright-holders:Luca Elia, David Haywood 3 #ifndef MAME_INCLUDES_SETA2_H 4 #define MAME_INCLUDES_SETA2_H 5 6 #pragma once 7 8 9 #include "machine/tmp68301.h" 10 #include "machine/eepromser.h" 11 #include "machine/intelfsh.h" 12 #include "machine/ticket.h" 13 #include "machine/timer.h" 14 #include "machine/upd4992.h" 15 #include "sound/okim9810.h" 16 #include "sound/x1_010.h" 17 #include "emupal.h" 18 #include "screen.h" 19 20 class seta2_state : public driver_device 21 { 22 public: seta2_state(const machine_config & mconfig,device_type type,const char * tag)23 seta2_state(const machine_config &mconfig, device_type type, const char *tag) : 24 driver_device(mconfig, type, tag), 25 m_maincpu(*this, "maincpu"), 26 m_sub(*this, "sub"), 27 m_gfxdecode(*this, "gfxdecode"), 28 m_screen(*this, "screen"), 29 m_palette(*this, "palette"), 30 31 m_oki(*this, "oki"), 32 m_eeprom(*this, "eeprom"), 33 m_flash(*this, "flash"), 34 m_dispenser(*this, "dispenser"), 35 36 m_x1_bank(*this, "x1_bank_%u", 1U), 37 m_nvram(*this, "nvram"), 38 m_spriteram(*this, "spriteram", 0), 39 m_tileram(*this, "tileram", 0), 40 m_vregs(*this, "vregs", 0), 41 m_leds(*this, "led%u", 0U), 42 m_lamps(*this, "lamp%u", 0U) 43 { } 44 45 void seta2(machine_config &config); 46 void seta2_32m(machine_config &config); 47 void grdians(machine_config &config); 48 void grdiansa(machine_config &config); 49 void myangel(machine_config &config); 50 void penbros(machine_config &config); 51 void pzlbowl(machine_config &config); 52 void myangel2(machine_config &config); 53 void reelquak(machine_config &config); 54 void ablastb(machine_config &config); 55 void gundamex(machine_config &config); 56 void telpacfl(machine_config &config); 57 void samshoot(machine_config &config); 58 void namcostr(machine_config &config); 59 60 void init_namcostr(); 61 62 protected: 63 virtual void machine_start() override; 64 virtual void video_start() override; 65 66 void grdians_lockout_w(uint8_t data); 67 68 uint16_t mj4simai_p1_r(); 69 uint16_t mj4simai_p2_r(); 70 71 uint16_t pzlbowl_protection_r(address_space &space); 72 uint8_t pzlbowl_coins_r(); 73 void pzlbowl_coin_counter_w(uint8_t data); 74 75 void reelquak_leds_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 76 void reelquak_coin_w(uint8_t data); 77 78 void samshoot_coin_w(uint8_t data); 79 80 void telpacfl_lamp1_w(uint8_t data); 81 void telpacfl_lamp2_w(uint8_t data); 82 void telpacfl_lockout_w(uint8_t data); 83 84 uint16_t gundamex_eeprom_r(); 85 void gundamex_eeprom_w(uint16_t data); 86 87 void vregs_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 88 uint16_t spriteram_r(offs_t offset); 89 void spriteram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 90 91 int calculate_global_xoffset(int nozoom_fixedpalette_fixedposition); 92 int calculate_global_yoffset(int nozoom_fixedpalette_fixedposition); 93 void draw_sprites_line(bitmap_ind16 &bitmap, const rectangle &cliprect, int scanline, int realscanline, int xoffset, uint32_t xzoom, bool xzoominverted); 94 void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); 95 96 uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 97 DECLARE_WRITE_LINE_MEMBER(screen_vblank); 98 99 void sound_bank_w(offs_t offset, uint8_t data); 100 101 INTERRUPT_GEN_MEMBER(seta2_interrupt); 102 INTERRUPT_GEN_MEMBER(samshoot_interrupt); 103 104 void ablastb_map(address_map &map); 105 void grdians_map(address_map &map); 106 void gundamex_map(address_map &map); 107 void mj4simai_map(address_map &map); 108 void myangel2_map(address_map &map); 109 void myangel_map(address_map &map); 110 void namcostr_map(address_map &map); 111 void penbros_base_map(address_map &map); 112 void penbros_map(address_map &map); 113 void pzlbowl_map(address_map &map); 114 void reelquak_map(address_map &map); 115 void samshoot_map(address_map &map); 116 void telpacfl_map(address_map &map); 117 void x1_map(address_map &map); 118 119 required_device<cpu_device> m_maincpu; 120 optional_device<cpu_device> m_sub; 121 required_device<gfxdecode_device> m_gfxdecode; 122 required_device<screen_device> m_screen; 123 required_device<palette_device> m_palette; 124 125 optional_device<okim9810_device> m_oki; 126 optional_device<eeprom_serial_93cxx_device> m_eeprom; 127 optional_device<intelfsh16_device> m_flash; 128 optional_device<ticket_dispenser_device> m_dispenser; 129 130 optional_memory_bank_array<8> m_x1_bank; 131 optional_shared_ptr<uint16_t> m_nvram; 132 optional_shared_ptr<uint16_t> m_spriteram; 133 optional_shared_ptr<uint16_t> m_tileram; 134 optional_shared_ptr<uint16_t> m_vregs; 135 output_finder<7> m_leds; 136 output_finder<11> m_lamps; 137 138 int m_keyboard_row; 139 std::unique_ptr<uint16_t[]> m_private_spriteram; 140 141 private: 142 void drawgfx_line(bitmap_ind16 &bitmap, const rectangle &cliprect, int gfx, const uint8_t* const addr, const uint32_t realcolor, int flipx, int flipy, int base_sx, uint32_t xzoom, int shadow, int screenline, int line, int opaque); 143 inline void get_tile(uint16_t* spriteram, int is_16x16, int x, int y, int page, int& code, int& attr, int& flipx, int& flipy, int& color); 144 145 std::unique_ptr<uint32_t[]> m_realtilenumber; 146 gfx_element *m_spritegfx; 147 148 uint16_t m_rasterposition; 149 uint16_t m_rasterenabled; 150 TIMER_CALLBACK_MEMBER(raster_timer_done); 151 emu_timer *m_raster_timer; 152 }; 153 154 155 class mj4simai_state : public seta2_state 156 { 157 public: mj4simai_state(const machine_config & mconfig,device_type type,const char * tag)158 mj4simai_state(const machine_config &mconfig, device_type type, const char *tag) 159 : seta2_state(mconfig, type, tag) 160 { } 161 162 protected: 163 virtual void machine_start() override; 164 }; 165 166 167 class funcube_state : public seta2_state 168 { 169 public: funcube_state(const machine_config & mconfig,device_type type,const char * tag)170 funcube_state(const machine_config &mconfig, device_type type, const char *tag) 171 : seta2_state(mconfig, type, tag) 172 , m_outputs(*this, "outputs") 173 , m_funcube_leds(*this, "funcube_leds") 174 { } 175 176 void funcube(machine_config &config); 177 void funcube3(machine_config &config); 178 void funcube2(machine_config &config); 179 180 void init_funcube3(); 181 void init_funcube(); 182 void init_funcube2(); 183 184 private: 185 virtual void machine_start() override; 186 virtual void machine_reset() override; 187 188 uint32_t nvram_r(offs_t offset); 189 void nvram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); 190 uint32_t debug_r(); 191 uint16_t coins_r(); 192 void leds_w(uint16_t data); 193 uint16_t outputs_r(); 194 void outputs_w(uint16_t data); 195 uint16_t battery_r(); 196 197 TIMER_DEVICE_CALLBACK_MEMBER(funcube_interrupt); 198 199 void funcube2_map(address_map &map); 200 void funcube2_sub_io(address_map &map); 201 void funcube_map(address_map &map); 202 void funcube_sub_io(address_map &map); 203 void funcube_sub_map(address_map &map); 204 205 void funcube_debug_outputs(); 206 207 required_shared_ptr<uint16_t> m_outputs; 208 required_shared_ptr<uint16_t> m_funcube_leds; 209 uint64_t m_coin_start_cycles; 210 uint8_t m_hopper_motor; 211 }; 212 213 214 class staraudi_state : public seta2_state 215 { 216 public: staraudi_state(const machine_config & mconfig,device_type type,const char * tag)217 staraudi_state(const machine_config &mconfig, device_type type, const char *tag) : 218 seta2_state(mconfig, type, tag), 219 m_rtc(*this, "rtc"), 220 m_rgbram(*this, "rgbram", 0) 221 { 222 } unemulated_features()223 static constexpr feature_type unemulated_features() { return feature::CAMERA | feature::PRINTER; } 224 225 void staraudi(machine_config &config); 226 227 private: 228 void camera_w(offs_t offset, uint8_t data, uint8_t mem_mask = ~0); 229 void lamps1_w(offs_t offset, uint8_t data, uint8_t mem_mask = ~0); 230 void lamps2_w(offs_t offset, uint8_t data, uint8_t mem_mask = ~0); 231 uint16_t tileram_r(offs_t offset); 232 void tileram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 233 234 uint32_t staraudi_screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 235 236 void staraudi_map(address_map &map); 237 238 virtual void driver_start() override; 239 240 void staraudi_debug_outputs(); 241 242 void draw_rgbram(bitmap_ind16 &bitmap); 243 244 required_device<upd4992_device> m_rtc; 245 required_shared_ptr<uint16_t> m_rgbram; 246 247 uint8_t m_lamps1 = 0, m_lamps2 = 0, m_cam = 0; 248 }; 249 250 #endif // MAME_INCLUDES_SETA2_H 251