namcos22: add alpinesa prg rom banking

This commit is contained in:
hap 2022-11-10 19:22:29 +01:00
parent 74913a40d1
commit 5028d8bf0d
2 changed files with 40 additions and 45 deletions

View File

@ -1914,38 +1914,23 @@ void timecris_state::timecris_am(address_map &map)
} }
// Alpine Surfer protection // Alpine Surfer banking
u32 alpine_state::alpinesa_prot_r() u32 alpinesa_state::rombank_r()
{ {
return m_alpinesa_protection; return m_rombank->entry();
} }
void alpine_state::alpinesa_prot_w(u32 data) void alpinesa_state::rombank_w(u32 data)
{ {
switch (data) m_rombank->set_entry(std::clamp(data & 3, 0U, 2U));
{
case 0:
m_alpinesa_protection = 0;
break;
case 1:
m_alpinesa_protection = 1;
break;
case 3:
m_alpinesa_protection = 2;
break;
default:
break;
}
} }
void alpine_state::alpinesa_am(address_map &map) void alpinesa_state::alpinesa_am(address_map &map)
{ {
namcos22s_am(map); namcos22s_am(map);
map(0x200000, 0x200003).r(FUNC(alpine_state::alpinesa_prot_r)); map(0x200000, 0x3fffff).bankr("rombank");
map(0x300000, 0x300003).w(FUNC(alpine_state::alpinesa_prot_w)); map(0x200000, 0x200003).r(FUNC(alpinesa_state::rombank_r));
map(0x300000, 0x300003).w(FUNC(alpinesa_state::rombank_w));
} }
@ -3734,7 +3719,6 @@ void alpine_state::machine_start()
{ {
namcos22s_state::machine_start(); namcos22s_state::machine_start();
save_item(NAME(m_alpinesa_protection));
save_item(NAME(m_motor_status)); save_item(NAME(m_motor_status));
} }
@ -3860,11 +3844,11 @@ void alpine_state::alpine(machine_config &config)
TIMER(config, m_motor_timer).configure_generic(FUNC(alpine_state::alpine_steplock_callback)); TIMER(config, m_motor_timer).configure_generic(FUNC(alpine_state::alpine_steplock_callback));
} }
void alpine_state::alpinesa(machine_config &config) void alpinesa_state::alpinesa(machine_config &config)
{ {
alpine(config); alpine(config);
m_maincpu->set_addrmap(AS_PROGRAM, &alpine_state::alpinesa_am); m_maincpu->set_addrmap(AS_PROGRAM, &alpinesa_state::alpinesa_am);
} }
void namcos22s_state::cybrcycc(machine_config &config) void namcos22s_state::cybrcycc(machine_config &config)
@ -6124,11 +6108,13 @@ void alpine_state::init_alpiner2()
m_motor_status = 2; m_motor_status = 2;
} }
void alpine_state::init_alpinesa() void alpinesa_state::init_alpinesa()
{ {
m_gametype = NAMCOS22_ALPINE_SURFER; m_gametype = NAMCOS22_ALPINE_SURFER;
install_141_speedup(); install_141_speedup();
m_rombank->configure_entries(0, 3, memregion("maincpu")->base() + 0x200000, 0x200000);
m_motor_status = 2; m_motor_status = 2;
} }
@ -6144,7 +6130,7 @@ void propcycl_state::init_propcycl()
// patch out strange routine (uninitialized-eeprom related?) // patch out strange routine (uninitialized-eeprom related?)
// maybe needs more accurate 28C64 eeprom device emulation // maybe needs more accurate 28C64 eeprom device emulation
ROM[0x1992C/4] = 0x4e754e75; ROM[0x1992c/4] = 0x4e754e75;
/** /**
* The dipswitch reading routine in Prop Cycle polls the * The dipswitch reading routine in Prop Cycle polls the
@ -6251,7 +6237,7 @@ GAME( 1995, timecris, 0, timecris, timecris, timecris_state, init_ti
GAME( 1995, timecrisa, timecris, timecris, timecris, timecris_state, init_timecris, ROT0, "Namco", "Time Crisis (Rev. TS2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/01/08 18:56:09 GAME( 1995, timecrisa, timecris, timecris, timecris, timecris_state, init_timecris, ROT0, "Namco", "Time Crisis (Rev. TS2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/01/08 18:56:09
GAME( 1996, propcycl, 0, propcycl, propcycl, propcycl_state, init_propcycl, ROT0, "Namco", "Prop Cycle (Rev. PR2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/06/18 21:22:13 GAME( 1996, propcycl, 0, propcycl, propcycl, propcycl_state, init_propcycl, ROT0, "Namco", "Prop Cycle (Rev. PR2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/06/18 21:22:13
GAME( 1996, propcyclj, propcycl, propcycl, propcycl, propcycl_state, init_propcyclj, ROT0, "Namco", "Prop Cycle (Rev. PR1 Ver.A, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/06/18 21:06:03 GAME( 1996, propcyclj, propcycl, propcycl, propcycl, propcycl_state, init_propcyclj, ROT0, "Namco", "Prop Cycle (Rev. PR1 Ver.A, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/06/18 21:06:03
GAME( 1996, alpinesa, 0, alpinesa, alpiner, alpine_state, init_alpinesa, ROT0, "Namco", "Alpine Surfer (Rev. AF2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // 96/07/01 15:19:23. major problems, protection? GAME( 1996, alpinesa, 0, alpinesa, alpiner, alpinesa_state, init_alpinesa, ROT0, "Namco", "Alpine Surfer (Rev. AF2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // 96/07/01 15:19:23. major problems, protection?
GAME( 1996, tokyowar, 0, tokyowar, tokyowar, namcos22s_state, init_tokyowar, ROT0, "Namco", "Tokyo Wars (Rev. TW2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/09/03 14:08:47 GAME( 1996, tokyowar, 0, tokyowar, tokyowar, namcos22s_state, init_tokyowar, ROT0, "Namco", "Tokyo Wars (Rev. TW2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/09/03 14:08:47
GAME( 1996, tokyowarj, tokyowar, tokyowar, tokyowar, namcos22s_state, init_tokyowar, ROT0, "Namco", "Tokyo Wars (Rev. TW1 Ver.A, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/09/03 14:16:29 GAME( 1996, tokyowarj, tokyowar, tokyowar, tokyowar, namcos22s_state, init_tokyowar, ROT0, "Namco", "Tokyo Wars (Rev. TW1 Ver.A, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/09/03 14:16:29
GAME( 1996, aquajet, 0, cybrcycc, aquajet, namcos22s_state, init_aquajet, ROT0, "Namco", "Aqua Jet (Rev. AJ2 Ver.B, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/09/20 14:28:30 GAME( 1996, aquajet, 0, cybrcycc, aquajet, namcos22s_state, init_aquajet, ROT0, "Namco", "Aqua Jet (Rev. AJ2 Ver.B, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/09/20 14:28:30

View File

@ -578,32 +578,41 @@ public:
{ } { }
void alpine(machine_config &config); void alpine(machine_config &config);
void alpinesa(machine_config &config);
void init_alpiner2(); void init_alpiner2();
void init_alpiner(); void init_alpiner();
void init_alpinesa();
template <int N> DECLARE_READ_LINE_MEMBER(alpine_motor_r); template <int N> DECLARE_READ_LINE_MEMBER(alpine_motor_r);
protected: protected:
virtual void machine_start() override;
u32 alpinesa_prot_r();
void alpinesa_prot_w(u32 data);
void alpine_mcu_port4_w(u8 data);
TIMER_DEVICE_CALLBACK_MEMBER(alpine_steplock_callback);
void alpinesa_am(address_map &map);
required_device<timer_device> m_motor_timer; required_device<timer_device> m_motor_timer;
u32 m_alpinesa_protection = 0; virtual void machine_start() override;
void alpine_mcu_port4_w(u8 data);
TIMER_DEVICE_CALLBACK_MEMBER(alpine_steplock_callback);
int m_motor_status = 0; int m_motor_status = 0;
}; };
class alpinesa_state : public alpine_state
{
public:
alpinesa_state(const machine_config &mconfig, device_type type, const char *tag) :
alpine_state(mconfig, type, tag),
m_rombank(*this, "rombank")
{ }
void alpinesa(machine_config &config);
void init_alpinesa();
private:
required_memory_bank m_rombank;
void rombank_w(u32 data);
u32 rombank_r();
void alpinesa_am(address_map &map);
};
class timecris_state : public namcos22s_state class timecris_state : public namcos22s_state
{ {
public: public: