summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/sega/system1.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/sega/system1.h')
-rw-r--r--src/mame/sega/system1.h192
1 files changed, 117 insertions, 75 deletions
diff --git a/src/mame/sega/system1.h b/src/mame/sega/system1.h
index cc21c621bae..fb8071d058f 100644
--- a/src/mame/sega/system1.h
+++ b/src/mame/sega/system1.h
@@ -14,6 +14,7 @@
#include "machine/segacrpt_device.h"
#include "machine/segacrp2_device.h"
#include "machine/timer.h"
+
#include "emupal.h"
#include "screen.h"
#include "tilemap.h"
@@ -49,83 +50,77 @@ public:
m_banked_decrypted_opcodes(nullptr)
{ }
- void sys1ppix_315_5051(machine_config &config);
- void sys1ppisx_315_5064(machine_config &config);
- void sys2_317_0007(machine_config &config);
- void sys1piox_315_5110(machine_config &config);
- void sys1piox_315_5111(machine_config &config);
- void sys1piox_315_5065(machine_config &config);
- void sys2m(machine_config &config);
- void sys1ppix_315_5178(machine_config &config);
- void sys1ppix_315_5179(machine_config &config);
- void sys1piox_315_5093(machine_config &config);
- void sys2_315_5176(machine_config &config);
- void sys2(machine_config &config);
- void sys2_315_5177(machine_config &config);
- void nob(machine_config &config);
- void blockgal(machine_config &config);
- void sys1ppisx_315_5041(machine_config &config);
- void sys1piox_315_5132(machine_config &config);
- void sys1piox_315_5162(machine_config &config);
- void sys1piox_315_5133(machine_config &config);
- void sys1pioxb(machine_config &config);
void sys1ppi(machine_config &config);
- void sys1piox_315_5135(machine_config &config);
- void sys2rowxboot(machine_config &config);
- void sys1piox_315_5102(machine_config &config);
- void sys1piosx_315_5096(machine_config &config);
- void sys2x(machine_config &config);
- void sys1piox_315_5051(machine_config &config);
- void sys1piox_315_5098(machine_config &config);
- void sys1piosx_315_5099(machine_config &config);
- void sys2xboot(machine_config &config);
- void sys2xb(machine_config &config);
- void nobm(machine_config &config);
- void mcu(machine_config &config);
- void sys2_317_0006(machine_config &config);
- void sys1piox_317_0006(machine_config &config);
- void sys1ppix_315_5033(machine_config &config);
+ void sys1ppis(machine_config &config);
void sys1pio(machine_config &config);
void sys1pios(machine_config &config);
- void sys2rowm(machine_config &config);
- void sys1ppix_315_5098(machine_config &config);
- void sys1ppix_315_5048(machine_config &config);
+ void mcu(machine_config &config);
+ void sys2(machine_config &config);
+ void sys2x(machine_config &config);
void sys2row(machine_config &config);
- void sys1ppis(machine_config &config);
- void sys1ppix_315_5065(machine_config &config);
- void sys1piox_315_5177(machine_config &config);
- void sys1piox_315_5155(machine_config &config);
- void sys2rowxb(machine_config &config);
+
+ void starjack(machine_config &config);
+ void upndown(machine_config &config);
+ void regulus(machine_config &config);
+ void mrviking(machine_config &config);
+ void swat(machine_config &config);
+ void flickyo(machine_config &config);
+ void bullfgt(machine_config &config);
+ void wmatch(machine_config &config);
+ void wboy2(machine_config &config);
+ void wboy6(machine_config &config);
+ void nob(machine_config &config);
+ void nobb(machine_config &config);
+
+ void flicky(machine_config &config);
+ void thetogyu(machine_config &config);
+ void spatter(machine_config &config);
+ void spattera(machine_config &config);
+ void pitfall2(machine_config &config);
+ void seganinj(machine_config &config);
+ void seganinja(machine_config &config);
+ void nprinceso(machine_config &config);
+ void imsorry(machine_config &config);
+ void teddybb(machine_config &config);
+ void teddybboa(machine_config &config);
+ void myheroj(machine_config &config);
+ void _4dwarrio(machine_config &config);
+ void wboy(machine_config &config);
+ void wboyo(machine_config &config);
+ void blockgal(machine_config &config);
+ void gardia(machine_config &config);
+
+ void choplift(machine_config &config);
+ void gardiab(machine_config &config);
+ void gardiaj(machine_config &config);
+ void wboysys2(machine_config &config);
+ void wboysys2a(machine_config &config);
+ void wbmlb(machine_config &config);
+ void blockgalb(machine_config &config);
+ void ufosensi(machine_config &config);
+ void ufosensib(machine_config &config);
void init_bank0c();
void init_bank44();
void init_nobb();
- void init_dakkochn();
void init_bootleg();
- void init_shtngmst();
void init_blockgal();
void init_nob();
void init_myherok();
void init_ufosensi();
void init_wbml();
- void init_tokisens();
void init_bootsys2();
void init_bootsys2d();
- DECLARE_CUSTOM_INPUT_MEMBER(dakkochn_mux_data_r);
- DECLARE_CUSTOM_INPUT_MEMBER(dakkochn_mux_status_r);
-
protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
- virtual void video_start() override;
+ virtual void machine_start() override ATTR_COLD;
+ virtual void machine_reset() override ATTR_COLD { }
+ virtual void video_start() override ATTR_COLD;
-private:
// video related
std::unique_ptr<u8[]> m_videoram;
- void (system1_state::*m_videomode_custom)(u8 data, u8 prevdata);
- u8 m_videomode_prev = 0;
+ void (system1_state::*m_videomode_custom)(u8 data);
std::unique_ptr<u8[]> m_mix_collide;
u8 m_mix_collide_summary = 0;
std::unique_ptr<u8[]> m_sprite_collide;
@@ -136,19 +131,17 @@ private:
tilemap_t *m_tilemap_page[8]{};
u8 m_tilemap_pages = 0;
- // protection, miscs
+ // protection, misc
u8 m_adjust_cycles = 0;
- u8 m_mute_xor = 0;
- u8 m_dakkochn_mux_data = 0;
u8 m_mcu_control = 0;
u8 m_nob_maincpu_latch = 0;
u8 m_nob_mcu_latch = 0;
u8 m_nob_mcu_status = 0;
- int m_nobb_inport23_step = 0;
+ u8 m_nobb_inport23_step = 0;
// video handlers
void common_videomode_w(u8 data);
- void videomode_w(u8 data);
+ virtual void videomode_w(u8 data);
void videoram_bank_w(u8 data);
u8 mixer_collision_r(offs_t offset);
void mixer_collision_w(offs_t offset, u8 data);
@@ -182,12 +175,10 @@ private:
u8 nobb_inport23_r();
void nobb_outport24_w(u8 data);
u8 nob_start_r();
- u8 shtngmst_gunx_r();
// video functions
TILE_GET_INFO_MEMBER(tile_get_info);
void system1_palette(palette_device &palette) const;
- DECLARE_MACHINE_START(system2);
DECLARE_VIDEO_START(system2);
DECLARE_MACHINE_START(myherok);
u32 screen_update_system1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@@ -200,10 +191,9 @@ private:
// misc functions
TIMER_DEVICE_CALLBACK_MEMBER(soundirq_gen);
- TIMER_DEVICE_CALLBACK_MEMBER(mcu_t0_callback);
- void bank44_custom_w(u8 data, u8 prevdata);
- void bank0c_custom_w(u8 data, u8 prevdata);
- void dakkochn_custom_w(u8 data, u8 prevdata);
+ IRQ_CALLBACK_MEMBER(mcu_t0_callback);
+ void bank44_custom_w(u8 data);
+ void bank0c_custom_w(u8 data);
// devices
required_device<z80_device> m_maincpu;
@@ -236,18 +226,70 @@ private:
std::unique_ptr<u8[]> m_banked_decrypted_opcodes;
// address maps
- void banked_decrypted_opcodes_map(address_map &map);
- void decrypted_opcodes_map(address_map &map);
+ void banked_decrypted_opcodes_map(address_map &map) ATTR_COLD;
+ void decrypted_opcodes_map(address_map &map) ATTR_COLD;
void encrypted_sys1ppi_maps(machine_config &config);
void encrypted_sys1pio_maps(machine_config &config);
void encrypted_sys2_mc8123_maps(machine_config &config);
- void mcu_io_map(address_map &map);
- void nobo_map(address_map &map);
- void sound_map(address_map &map);
- void system1_map(address_map &map);
- void blockgal_pio_io_map(address_map &map);
- void system1_pio_io_map(address_map &map);
- void system1_ppi_io_map(address_map &map);
+ void mcu_io_map(address_map &map) ATTR_COLD;
+ void nobo_map(address_map &map) ATTR_COLD;
+ void sound_map(address_map &map) ATTR_COLD;
+ void system1_map(address_map &map) ATTR_COLD;
+ void blockgal_io_map(address_map &map) ATTR_COLD;
+ void system1_pio_io_map(address_map &map) ATTR_COLD;
+ void system1_ppi_io_map(address_map &map) ATTR_COLD;
+};
+
+class shtngmst_state : public system1_state
+{
+public:
+ shtngmst_state(const machine_config &mconfig, device_type type, const char *tag) :
+ system1_state(mconfig, type, tag),
+ m_gun_solenoid(*this, "gun_solenoid")
+ { }
+
+ void shtngmst(machine_config &config);
+
+ DECLARE_INPUT_CHANGED_MEMBER(gun_trigger);
+
+protected:
+ virtual void machine_start() override ATTR_COLD;
+
+private:
+ output_finder<> m_gun_solenoid;
+
+ u8 m_gun_output = 0;
+ u8 m_gun_trigger = 0;
+
+ void shtngmst_io_map(address_map &map) ATTR_COLD;
+
+ u8 gun_output_r() { return m_gun_output; }
+ void gun_output_w(u8 data);
+ u8 gun_trigger_r();
+};
+
+class dakkochn_state : public system1_state
+{
+public:
+ dakkochn_state(const machine_config &mconfig, device_type type, const char *tag) :
+ system1_state(mconfig, type, tag),
+ m_keys(*this, "KEY%u", 0)
+ { }
+
+ ioport_value mux_data_r();
+ ioport_value mux_status_r();
+
+protected:
+ virtual void machine_start() override ATTR_COLD;
+ virtual void machine_reset() override ATTR_COLD;
+
+ virtual void videomode_w(u8 data) override;
+
+private:
+ required_ioport_array<7> m_keys;
+
+ u8 m_mux_count = 0;
+ u8 m_mux_clock = 0;
};
#endif // MAME_SEGA_SYSTEM1_H