diff options
Diffstat (limited to 'src/mame/sega/system1.h')
-rw-r--r-- | src/mame/sega/system1.h | 192 |
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 |