diff options
Diffstat (limited to 'src/mame/sega/megadriv_acbl.cpp')
| -rw-r--r-- | src/mame/sega/megadriv_acbl.cpp | 121 |
1 files changed, 116 insertions, 5 deletions
diff --git a/src/mame/sega/megadriv_acbl.cpp b/src/mame/sega/megadriv_acbl.cpp index ccb1efc3833..9d96312846b 100644 --- a/src/mame/sega/megadriv_acbl.cpp +++ b/src/mame/sega/megadriv_acbl.cpp @@ -158,8 +158,122 @@ Sunset Riders info ****************************************************************************/ #include "emu.h" -#include "megadriv_acbl.h" +#include "megadriv.h" + +#include "cpu/pic16c5x/pic16c5x.h" +#include "sound/okim6295.h" + +namespace { + +class md_boot_state : public md_ctrl_state +{ +public: + md_boot_state(const machine_config &mconfig, device_type type, const char *tag) : + md_ctrl_state(mconfig, type, tag), + m_io_exp(*this, "EXP") + { } + + void megadrvb(machine_config &config); + void md_bootleg(machine_config &config); + + void init_srmdb(); + void init_barek2ch(); + void init_barek3(); + void init_barek3a(); + void init_sonic2mb(); + void init_twinktmb(); + +protected: + uint16_t dsw_r(offs_t offset); + + void md_bootleg_map(address_map &map) ATTR_COLD; + +private: + void aladmdb_w(uint16_t data); + uint16_t barek3mba_r(); + uint16_t twinktmb_r(); + + optional_ioport m_io_exp; +}; + +// for games with emulated PIC microcontroller +class md_boot_mcu_state : public md_boot_state +{ +public: + md_boot_mcu_state(const machine_config &mconfig, device_type type, const char *tag) : + md_boot_state(mconfig, type, tag), + m_mcu(*this, "mcu"), + m_dsw(*this, "DSW") + { } + + void md_boot_mcu(machine_config &config); + +private: + void md_boot_mcu_map(address_map &map) ATTR_COLD; + + uint16_t mcu_r(); + void mcu_w(uint16_t data); + + void mcu_porta_w(uint8_t data); + uint8_t mcu_portc_r(); + void mcu_portb_w(uint8_t data); + void mcu_portc_w(uint8_t data); + + required_device<pic16c57_device> m_mcu; + required_ioport m_dsw; + + uint8_t m_mcu_porta = 0; + uint8_t m_mcu_portc = 0; + uint8_t m_mcu_in_latch_msb = 0; + uint8_t m_mcu_in_latch_lsb = 0; + uint8_t m_mcu_out_latch_msb = 0; + uint8_t m_mcu_out_latch_lsb = 0; +}; + +class md_sonic3bl_state : public md_boot_state +{ +public: + md_sonic3bl_state(const machine_config &mconfig, device_type type, const char *tag) : + md_boot_state(mconfig, type, tag), + m_in_coin(*this, "COIN"), + m_in_mcu(*this, "MCU") + { } + + void init_sonic3mb(); + +private: + void prot_w(u8 data); + uint16_t prot_r(); + + required_ioport m_in_coin; + required_ioport m_in_mcu; + + u8 m_prot_cmd = 0; +}; + +class md_boot_6button_state : public md_boot_state +{ +public: + md_boot_6button_state(const machine_config& mconfig, device_type type, const char* tag) : + md_boot_state(mconfig, type, tag) + { + } + + void megadrvb_6b(machine_config &config); + void ssf2mdb(machine_config &config); + + void init_mk3mdb(); + void init_bk3ssrmb(); + void init_barekch(); + void init_srssf2mb(); + +protected: + virtual void machine_start() override ATTR_COLD; + +private: + void ssf2mdb_68k_map(address_map &map) ATTR_COLD; +}; /************************************ Mega Drive Bootlegs *************************************/ @@ -195,7 +309,6 @@ void md_boot_6button_state::ssf2mdb_68k_map(address_map &map) map(0xa130f0, 0xa130ff).nopw(); // custom banking is disabled (!) } - /************************************* * * Games memory handlers @@ -359,7 +472,6 @@ void md_boot_mcu_state::mcu_portc_w(uint8_t data) m_mcu_portc = data; } - /************************************* * * Game-specific port definitions @@ -1034,7 +1146,6 @@ void md_boot_6button_state::machine_start() m_vdp->stop_timers(); } - /************************************* * * Game-specific driver inits @@ -1258,7 +1369,6 @@ void md_boot_state::init_twinktmb() m_maincpu->space(AS_PROGRAM).install_read_handler(0x300000, 0x300001, read16smo_delegate(*this, FUNC(md_boot_state::twinktmb_r))); } - /************************************* * * ROM definition(s) @@ -1431,6 +1541,7 @@ ROM_START( barek2ch ) // all 27c4001 ROM_LOAD16_BYTE( "u17", 0x100000, 0x080000, CRC(cae1922e) SHA1(811c2164b6c467a49af4b0d22f151cd13c9efbc9) ) ROM_END +} // anonymous namespace /************************************* * |
