megatech: fix crash in service mode

This commit is contained in:
hap 2022-05-01 23:05:14 +02:00
parent ef52036676
commit 2b0277c650

View File

@ -123,7 +123,6 @@ protected:
virtual void machine_reset() override; virtual void machine_reset() override;
private: private:
void megatech(machine_config &config); void megatech(machine_config &config);
void cart_select_w(uint8_t data); void cart_select_w(uint8_t data);
@ -145,7 +144,6 @@ private:
uint8_t sms_ioport_dd_r(); uint8_t sms_ioport_dd_r();
void mt_sms_standard_rom_bank_w(address_space &space, offs_t offset, uint8_t data); void mt_sms_standard_rom_bank_w(address_space &space, offs_t offset, uint8_t data);
image_init_result load_cart(device_image_interface &image, generic_slot_device *slot, int gameno); image_init_result load_cart(device_image_interface &image, generic_slot_device *slot, int gameno);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( mt_cart1 ) { return load_cart(image, m_cart1, 0); } DECLARE_DEVICE_IMAGE_LOAD_MEMBER( mt_cart1 ) { return load_cart(image, m_cart1, 0); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( mt_cart2 ) { return load_cart(image, m_cart2, 1); } DECLARE_DEVICE_IMAGE_LOAD_MEMBER( mt_cart2 ) { return load_cart(image, m_cart2, 1); }
@ -163,11 +161,11 @@ private:
void megatech_bios_map(address_map &map); void megatech_bios_map(address_map &map);
void megatech_bios_portmap(address_map &map); void megatech_bios_portmap(address_map &map);
uint8_t m_mt_cart_select_reg; uint8_t m_mt_cart_select_reg = 0;
uint32_t m_bios_port_ctrl; uint32_t m_bios_port_ctrl = 0;
int m_current_machine_is_sms; // is the current game SMS based (running on genesis z80, in VDP compatibility mode) int m_current_machine_is_sms = 0; // is the current game SMS based (running on genesis z80, in VDP compatibility mode)
uint32_t m_bios_ctrl_inputs; uint32_t m_bios_ctrl_inputs = 0;
int m_mt_bank_addr; int m_mt_bank_addr = 0;
int m_cart_is_genesis[8]; int m_cart_is_genesis[8];
@ -298,7 +296,6 @@ static INPUT_PORTS_START( megatech ) /* Genesis Input Ports */
PORT_DIPSETTING( 0xe0, "1:00" ) PORT_DIPSETTING( 0xe0, "1:00" )
PORT_DIPSETTING( 0xf0, "0:30" ) PORT_DIPSETTING( 0xf0, "0:30" )
PORT_START("BIOS_J1") PORT_START("BIOS_J1")
PORT_DIPNAME( 0x0001, 0x0001, "5" ) PORT_DIPNAME( 0x0001, 0x0001, "5" )
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
@ -475,7 +472,7 @@ void mtech_state::cart_select_w(uint8_t data)
but it stores something in (banked?) ram but it stores something in (banked?) ram
because it always seems to show the because it always seems to show the
same instructions ... */ same instructions ... */
m_mt_cart_select_reg = data; m_mt_cart_select_reg = data & 0x07;
switch_cart(m_mt_cart_select_reg); switch_cart(m_mt_cart_select_reg);
} }
@ -524,12 +521,12 @@ void mtech_state::mt_z80_bank_w(uint8_t data)
uint8_t mtech_state::banked_ram_r(offs_t offset) uint8_t mtech_state::banked_ram_r(offs_t offset)
{ {
return m_banked_ram[offset + 0x1000 * (m_mt_cart_select_reg & 0x07)]; return m_banked_ram[offset + 0x1000 * m_mt_cart_select_reg];
} }
void mtech_state::banked_ram_w(offs_t offset, uint8_t data) void mtech_state::banked_ram_w(offs_t offset, uint8_t data)
{ {
m_banked_ram[offset + 0x1000 * (m_mt_cart_select_reg & 0x07)] = data; m_banked_ram[offset + 0x1000 * m_mt_cart_select_reg] = data;
} }