mirror of
https://github.com/holub/mame
synced 2025-06-08 05:44:09 +03:00
igs017.cpp : Updates
Simplify handlers, Reduce duplicates, Unnecessary runtime tag lookups, Unnecessary lines, Fix spacings
This commit is contained in:
parent
9a57fb3d79
commit
faa8cd8cd9
@ -94,9 +94,9 @@ public:
|
||||
auto out_pb_callback() { return m_out_pb_cb.bind(); }
|
||||
auto out_pc_callback() { return m_out_pc_cb.bind(); }
|
||||
|
||||
DECLARE_WRITE8_MEMBER( address_w );
|
||||
DECLARE_WRITE8_MEMBER( data_w );
|
||||
DECLARE_READ8_MEMBER( data_r );
|
||||
void address_w(u8 data);
|
||||
void data_w(u8 data);
|
||||
u8 data_r();
|
||||
|
||||
void set_m3_bits(int m3, u8 b0, u8 b1, u8 b2, u8 b3);
|
||||
void set_mf_bits(u8 b0, u8 b1, u8 b2, u8 b3);
|
||||
@ -199,33 +199,33 @@ void igs_bitswap_device::device_reset()
|
||||
m_val = m_word = 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(igs_bitswap_device::address_w)
|
||||
void igs_bitswap_device::address_w(u8 data)
|
||||
{
|
||||
m_address = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(igs_bitswap_device::data_w)
|
||||
void igs_bitswap_device::data_w(u8 data)
|
||||
{
|
||||
switch (m_address)
|
||||
{
|
||||
case 0x00:
|
||||
if (!m_out_pa_cb.isnull())
|
||||
{
|
||||
m_out_pa_cb((offs_t)0, data);
|
||||
m_out_pa_cb(data);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 0x01:
|
||||
if (!m_out_pb_cb.isnull())
|
||||
{
|
||||
m_out_pb_cb((offs_t)0, data);
|
||||
m_out_pb_cb(data);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 0x02:
|
||||
if (!m_out_pc_cb.isnull())
|
||||
{
|
||||
m_out_pc_cb((offs_t)0, data);
|
||||
m_out_pc_cb(data);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
@ -312,21 +312,21 @@ WRITE8_MEMBER(igs_bitswap_device::data_w)
|
||||
logerror("%s: warning, writing to address %02x = %02x\n", machine().describe_context(), m_address, data);
|
||||
}
|
||||
|
||||
READ8_MEMBER(igs_bitswap_device::data_r)
|
||||
u8 igs_bitswap_device::data_r()
|
||||
{
|
||||
switch (m_address)
|
||||
{
|
||||
case 0x00:
|
||||
if (!m_in_pa_cb.isnull())
|
||||
return m_in_pa_cb(0);
|
||||
return m_in_pa_cb();
|
||||
break;
|
||||
case 0x01:
|
||||
if (!m_in_pb_cb.isnull())
|
||||
return m_in_pb_cb(0);
|
||||
return m_in_pb_cb();
|
||||
break;
|
||||
case 0x02:
|
||||
if (!m_in_pc_cb.isnull())
|
||||
return m_in_pc_cb(0);
|
||||
return m_in_pc_cb();
|
||||
break;
|
||||
|
||||
case 0x03: // result
|
||||
@ -387,10 +387,10 @@ class igs_incdec_device : public device_t
|
||||
public:
|
||||
igs_incdec_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
DECLARE_WRITE8_MEMBER( reset_w );
|
||||
DECLARE_WRITE8_MEMBER( inc_w );
|
||||
DECLARE_WRITE8_MEMBER( dec_w );
|
||||
DECLARE_READ8_MEMBER( val_r );
|
||||
void reset_w(u8 data = 0);
|
||||
void inc_w(u8 data = 0);
|
||||
void dec_w(u8 data = 0);
|
||||
u8 val_r();
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
@ -400,25 +400,25 @@ private:
|
||||
u8 m_val;
|
||||
};
|
||||
|
||||
WRITE8_MEMBER(igs_incdec_device::reset_w)
|
||||
void igs_incdec_device::reset_w(u8 data)
|
||||
{
|
||||
m_val = 0x00;
|
||||
logerror("%s: reset -> %02x\n", machine().describe_context(), m_val);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(igs_incdec_device::inc_w)
|
||||
void igs_incdec_device::inc_w(u8 data)
|
||||
{
|
||||
m_val++;
|
||||
logerror("%s: inc -> %02x\n", machine().describe_context(), m_val);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(igs_incdec_device::dec_w)
|
||||
void igs_incdec_device::dec_w(u8 data)
|
||||
{
|
||||
m_val--;
|
||||
logerror("%s: dec -> %02x\n", machine().describe_context(), m_val);
|
||||
}
|
||||
|
||||
READ8_MEMBER(igs_incdec_device::val_r)
|
||||
u8 igs_incdec_device::val_r()
|
||||
{
|
||||
u8 res = (BIT(m_val, 0) << 7) |
|
||||
(BIT(m_val, 3) << 5) |
|
||||
@ -465,7 +465,14 @@ public:
|
||||
m_decrypted_opcodes(*this, "decrypted_opcodes"),
|
||||
m_igs017_igs031(*this, "igs017_igs031"),
|
||||
m_igs_bitswap(*this, "igs_bitswap"),
|
||||
m_igs_incdec(*this, "igs_incdec")
|
||||
m_igs_incdec(*this, "igs_incdec"),
|
||||
m_io_coins(*this, "COINS"),
|
||||
m_io_buttons(*this, "BUTTONS"),
|
||||
m_io_player1(*this, "PLAYER1"),
|
||||
m_io_player2(*this, "PLAYER2"),
|
||||
m_io_hopper(*this, "HOPPER"),
|
||||
m_io_key(*this, "KEY%u", 0U),
|
||||
m_io_dsw(*this, "DSW%u", 1U)
|
||||
{ }
|
||||
|
||||
void mgcs(machine_config &config);
|
||||
@ -513,11 +520,19 @@ private:
|
||||
optional_device<igs_bitswap_device> m_igs_bitswap;
|
||||
optional_device<igs_incdec_device> m_igs_incdec;
|
||||
|
||||
optional_ioport m_io_coins;
|
||||
optional_ioport m_io_buttons;
|
||||
optional_ioport m_io_player1;
|
||||
optional_ioport m_io_player2;
|
||||
optional_ioport m_io_hopper;
|
||||
optional_ioport_array<5> m_io_key;
|
||||
optional_ioport_array<2> m_io_dsw;
|
||||
|
||||
void igs025_to_igs022_callback(void);
|
||||
|
||||
u8 m_input_select;
|
||||
u8 m_hopper;
|
||||
u16 m_igs_magic[2];
|
||||
u16 m_igs_magic;
|
||||
u8 m_scramble_data;
|
||||
|
||||
u8 m_dsw_select;
|
||||
@ -529,41 +544,45 @@ private:
|
||||
// IGS029 protection (mgcs)
|
||||
u32 m_igs029_mgcs_long;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(input_select_w);
|
||||
void input_select_w(u8 data);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(iqblocka_keyin_w);
|
||||
DECLARE_WRITE8_MEMBER(iqblockf_keyout_w);
|
||||
DECLARE_WRITE8_MEMBER(iqblocka_remap_addr_w);
|
||||
|
||||
DECLARE_WRITE16_MEMBER(mgcs_magic_w);
|
||||
DECLARE_READ16_MEMBER(mgcs_magic_r);
|
||||
void iqblocka_keyin_w(u8 data);
|
||||
void iqblockf_keyout_w(u8 data);
|
||||
void iqblocka_remap_addr_w(offs_t offset, u8 data);
|
||||
|
||||
u16 mgcs_palette_bitswap(u16 bgr) const;
|
||||
u16 lhzb2a_palette_bitswap(u16 bgr) const;
|
||||
u16 tjsb_palette_bitswap(u16 bgr) const;
|
||||
u16 slqz2_palette_bitswap(u16 bgr) const;
|
||||
|
||||
DECLARE_READ8_MEMBER(sdmg2_keys_r);
|
||||
DECLARE_WRITE16_MEMBER(sdmg2_magic_w);
|
||||
DECLARE_READ16_MEMBER(sdmg2_magic_r);
|
||||
DECLARE_READ8_MEMBER(mgdh_keys_r);
|
||||
DECLARE_WRITE16_MEMBER(mgdha_magic_w);
|
||||
DECLARE_READ16_MEMBER(mgdha_magic_r);
|
||||
void magic_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
u16 magic_r();
|
||||
|
||||
DECLARE_WRITE8_MEMBER(tjsb_output_w);
|
||||
DECLARE_READ8_MEMBER(tjsb_input_r);
|
||||
DECLARE_READ8_MEMBER(spkrform_input_r);
|
||||
void mgcs_magic_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
u16 mgcs_magic_r();
|
||||
|
||||
DECLARE_WRITE16_MEMBER(lhzb2a_input_select_w);
|
||||
DECLARE_READ16_MEMBER(lhzb2a_input_r);
|
||||
DECLARE_WRITE16_MEMBER(lhzb2a_remap_addr_w);
|
||||
u8 sdmg2_keys_r();
|
||||
void sdmg2_magic_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
u16 sdmg2_magic_r();
|
||||
|
||||
DECLARE_WRITE16_MEMBER(lhzb2_magic_w);
|
||||
DECLARE_READ16_MEMBER(lhzb2_magic_r);
|
||||
u8 mgdh_keys_r();
|
||||
void mgdha_magic_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
u16 mgdha_magic_r();
|
||||
|
||||
DECLARE_WRITE16_MEMBER(slqz2_magic_w);
|
||||
DECLARE_READ16_MEMBER(slqz2_magic_r);
|
||||
DECLARE_READ8_MEMBER(mgcs_keys_r);
|
||||
void tjsb_output_w(u8 data);
|
||||
u8 tjsb_input_r();
|
||||
u8 spkrform_input_r();
|
||||
|
||||
void lhzb2a_input_select_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
u16 lhzb2a_input_r(offs_t offset);
|
||||
void lhzb2a_remap_addr_w(address_space &space, u16 data);
|
||||
|
||||
void lhzb2_magic_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
u16 lhzb2_magic_r();
|
||||
|
||||
void slqz2_magic_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
u16 slqz2_magic_r();
|
||||
u8 mgcs_keys_r();
|
||||
|
||||
DECLARE_MACHINE_RESET(iqblocka);
|
||||
DECLARE_MACHINE_RESET(mgcs);
|
||||
@ -655,12 +674,11 @@ void igs017_state::decrypt_program_rom(int mask, int a7, int a6, int a5, int a4,
|
||||
int length = memregion("maincpu")->bytes();
|
||||
u8 *rom = memregion("maincpu")->base();
|
||||
std::unique_ptr<u8[]> tmp = std::make_unique<u8[]>(length);
|
||||
int i;
|
||||
|
||||
// decrypt the program ROM
|
||||
|
||||
// XOR layer
|
||||
for (i = 0;i < length;i++)
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
if (i & 0x2000)
|
||||
{
|
||||
@ -693,7 +711,7 @@ void igs017_state::decrypt_program_rom(int mask, int a7, int a6, int a5, int a4,
|
||||
memcpy(tmp.get(),rom,length);
|
||||
|
||||
// address lines swap
|
||||
for (i = 0;i < length;i++)
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
int addr = (i & ~0xff) | bitswap<8>(i,a7,a6,a5,a4,a3,a2,a1,a0);
|
||||
rom[i] = tmp[addr];
|
||||
@ -721,18 +739,17 @@ void igs017_state::tjsb_decrypt_sprites()
|
||||
int length = memregion("igs017_igs031:sprites")->bytes();
|
||||
u8 *rom = memregion("igs017_igs031:sprites")->base();
|
||||
std::unique_ptr<u8[]> tmp = std::make_unique<u8[]>(length);
|
||||
int i, addr;
|
||||
|
||||
// address lines swap
|
||||
memcpy(tmp.get(), rom, length);
|
||||
for (i = 0; i < length; i++)
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
addr = (i & ~0xff) | bitswap<8>(i,7,6,5,2,1,4,3,0);
|
||||
int addr = (i & ~0xff) | bitswap<8>(i,7,6,5,2,1,4,3,0);
|
||||
rom[i] = tmp[addr];
|
||||
}
|
||||
|
||||
// data lines swap
|
||||
for (i = 0; i < length; i += 2)
|
||||
for (int i = 0; i < length; i += 2)
|
||||
{
|
||||
u16 data = (rom[i+1] << 8) | rom[i+0]; // x-22222-11111-00000
|
||||
data = bitswap<16>(data, 15, 14,13,12,11,10, 9,1,7,6,5, 4,3,2,8,0);
|
||||
@ -753,12 +770,11 @@ void igs017_state::init_tjsb()
|
||||
|
||||
void igs017_state::mgcs_decrypt_program_rom()
|
||||
{
|
||||
int i;
|
||||
u16 *src = (u16 *)memregion("maincpu")->base();
|
||||
|
||||
int rom_size = 0x80000;
|
||||
|
||||
for (i=0; i<rom_size/2; i++)
|
||||
for (int i=0; i<rom_size/2; i++)
|
||||
{
|
||||
u16 x = src[i];
|
||||
|
||||
@ -806,10 +822,9 @@ void igs017_state::mgcs_decrypt_tiles()
|
||||
int length = memregion("igs017_igs031:tilemaps")->bytes();
|
||||
u8 *rom = memregion("igs017_igs031:tilemaps")->base();
|
||||
std::vector<u8> tmp(length);
|
||||
int i;
|
||||
|
||||
memcpy(&tmp[0],rom,length);
|
||||
for (i = 0;i < length;i++)
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
int addr = (i & ~0xffff) | bitswap<16>(i,15,14,13,12,11,10,6,7,8,9,5,4,3,2,1,0);
|
||||
rom[i^1] = bitswap<8>(tmp[addr],0,1,2,3,4,5,6,7);
|
||||
@ -820,9 +835,8 @@ void igs017_state::mgcs_flip_sprites()
|
||||
{
|
||||
int length = memregion("igs017_igs031:sprites")->bytes();
|
||||
u8 *rom = memregion("igs017_igs031:sprites")->base();
|
||||
int i;
|
||||
|
||||
for (i = 0;i < length;i+=2)
|
||||
for (int i = 0; i < length; i+=2)
|
||||
{
|
||||
u16 pixels = (rom[i+1] << 8) | rom[i+0];
|
||||
|
||||
@ -866,10 +880,9 @@ void igs017_state::tarzan_decrypt_tiles()
|
||||
int length = memregion("igs017_igs031:tilemaps")->bytes();
|
||||
u8 *rom = memregion("igs017_igs031:tilemaps")->base();
|
||||
std::vector<u8> tmp(length);
|
||||
int i;
|
||||
|
||||
memcpy(&tmp[0],rom,length);
|
||||
for (i = 0;i < length;i++)
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
int addr = (i & ~0xffff) | bitswap<16>(i,15,14,13,12,11,7,8,6,10,9,5,4,3,2,1,0);
|
||||
rom[i] = bitswap<8>(tmp[addr],0,1,2,3,4,5,6,7);
|
||||
@ -880,10 +893,9 @@ void igs017_state::tarzan_decrypt_tiles()
|
||||
void igs017_state::tarzan_decrypt_program_rom()
|
||||
{
|
||||
u16 *ROM = (u16 *)memregion("maincpu")->base();
|
||||
int i;
|
||||
int size = 0x40000;
|
||||
|
||||
for(i=0; i<size/2; i++)
|
||||
for(int i=0; i<size/2; i++)
|
||||
{
|
||||
u16 x = ROM[i];
|
||||
|
||||
@ -906,10 +918,9 @@ void igs017_state::tarzan_decrypt_program_rom()
|
||||
void igs017_state::tarzana_decrypt_program_rom()
|
||||
{
|
||||
u8 *ROM = memregion("maincpu")->base();
|
||||
int i;
|
||||
int size = 0x80000;
|
||||
|
||||
for (i = 0; i < size; i++)
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
u8 x = 0;
|
||||
if ((i & 0x00011) == 0x00011) x ^= 0x01;
|
||||
@ -1115,13 +1126,11 @@ void igs017_state::lhzb2_decrypt_tiles()
|
||||
int length = memregion("igs017_igs031:tilemaps")->bytes();
|
||||
u8 *rom = memregion("igs017_igs031:tilemaps")->base();
|
||||
std::vector<u8> tmp(length);
|
||||
int i;
|
||||
|
||||
int addr;
|
||||
memcpy(&tmp[0], rom, length);
|
||||
for (i = 0; i < length; i++)
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
addr = (i & ~0xffffff) | bitswap<24>(i,23,22,21,20,19,18,17,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,0);
|
||||
int addr = (i & ~0xffffff) | bitswap<24>(i,23,22,21,20,19,18,17,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,0);
|
||||
rom[i] = tmp[addr];
|
||||
}
|
||||
}
|
||||
@ -1131,18 +1140,17 @@ void igs017_state::lhzb2_decrypt_sprites()
|
||||
int length = memregion("igs017_igs031:sprites")->bytes();
|
||||
u8 *rom = memregion("igs017_igs031:sprites")->base();
|
||||
std::unique_ptr<u8[]> tmp = std::make_unique<u8[]>(length);
|
||||
int i, addr;
|
||||
|
||||
// address lines swap
|
||||
memcpy(tmp.get(), rom, length);
|
||||
for (i = 0; i < length; i++)
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
addr = (i & ~0xffff) | bitswap<16>(i,15,14,13,6,7,10,9,8,11,12,5,4,3,2,1,0);
|
||||
int addr = (i & ~0xffff) | bitswap<16>(i,15,14,13,6,7,10,9,8,11,12,5,4,3,2,1,0);
|
||||
rom[i] = tmp[addr];
|
||||
}
|
||||
|
||||
// data lines swap
|
||||
for (i = 0;i < length;i+=2)
|
||||
for (int i = 0; i < length; i+=2)
|
||||
{
|
||||
u16 data = (rom[i+1] << 8) | rom[i+0]; // x-22222-11111-00000
|
||||
data = bitswap<16>(data, 15, 7,6,5,4,3, 2,1,0,14,13, 12,11,10,9,8);
|
||||
@ -1330,10 +1338,9 @@ void igs017_state::slqz2_decrypt_tiles()
|
||||
int length = memregion("igs017_igs031:tilemaps")->bytes();
|
||||
u8 *rom = memregion("igs017_igs031:tilemaps")->base();
|
||||
std::vector<u8> tmp(length);
|
||||
int i;
|
||||
|
||||
memcpy(&tmp[0],rom,length);
|
||||
for (i = 0;i < length;i++)
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
int addr = (i & ~0xff) | bitswap<8>(i,7,4,5,6,3,2,1,0);
|
||||
rom[i] = tmp[addr];
|
||||
@ -1433,12 +1440,12 @@ void igs017_state::spkrform_decrypt_sprites()
|
||||
int length = memregion("igs017_igs031:sprites")->bytes();
|
||||
u8 *rom = memregion("igs017_igs031:sprites")->base();
|
||||
std::unique_ptr<u8[]> tmp = std::make_unique<u8[]>(length);
|
||||
int i, addr;
|
||||
|
||||
// address lines swap
|
||||
memcpy(tmp.get(), rom, length);
|
||||
for (i = 0; i < length; i++)
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
int addr;
|
||||
if (i & 0x80000)
|
||||
addr = (i & ~0xff) | bitswap<8>(i,7,6,3,4,5,2,1,0);
|
||||
else
|
||||
@ -1475,12 +1482,12 @@ void igs017_state::decrypted_opcodes_map(address_map &map)
|
||||
map(0x00000, 0x3ffff).rom().share("decrypted_opcodes");
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(igs017_state::input_select_w)
|
||||
void igs017_state::input_select_w(u8 data)
|
||||
{
|
||||
m_input_select = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(igs017_state::iqblocka_keyin_w)
|
||||
void igs017_state::iqblocka_keyin_w(u8 data)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x80); // key in (in gambling mode)
|
||||
// popmessage("PORT0 %02X", data);
|
||||
@ -1488,7 +1495,7 @@ WRITE8_MEMBER(igs017_state::iqblocka_keyin_w)
|
||||
logerror("%s: warning, unknown bits written in keyin_w = %02x\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(igs017_state::iqblockf_keyout_w)
|
||||
void igs017_state::iqblockf_keyout_w(u8 data)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, data & 0x80); // key out (in gambling mode, only iqblockf/genius6)
|
||||
// popmessage("PORT1 %02X", data);
|
||||
@ -1496,7 +1503,7 @@ WRITE8_MEMBER(igs017_state::iqblockf_keyout_w)
|
||||
logerror("%s: warning, unknown bits written in keyout_w = %02x\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(igs017_state::iqblocka_remap_addr_w)
|
||||
void igs017_state::iqblocka_remap_addr_w(offs_t offset, u8 data)
|
||||
{
|
||||
if (offset == 0)
|
||||
{
|
||||
@ -1520,10 +1527,10 @@ WRITE8_MEMBER(igs017_state::iqblocka_remap_addr_w)
|
||||
|
||||
// Add new memory ranges
|
||||
address_space &prg_space = m_maincpu->space(AS_PROGRAM);
|
||||
prg_space.install_write_handler ( m_remap_addr + 0x0, m_remap_addr + 0x0, write8_delegate(FUNC(igs_incdec_device::reset_w), &(*m_igs_incdec)) );
|
||||
prg_space.install_write_handler ( m_remap_addr + 0x1, m_remap_addr + 0x1, write8_delegate(FUNC(igs_incdec_device::dec_w), &(*m_igs_incdec)) );
|
||||
prg_space.install_write_handler ( m_remap_addr + 0x3, m_remap_addr + 0x3, write8_delegate(FUNC(igs_incdec_device::inc_w), &(*m_igs_incdec)) );
|
||||
prg_space.install_read_handler ( m_remap_addr + 0x5, m_remap_addr + 0x5, read8_delegate (FUNC(igs_incdec_device::val_r), &(*m_igs_incdec)) );
|
||||
prg_space.install_write_handler(m_remap_addr + 0x0, m_remap_addr + 0x0, write8smo_delegate(FUNC(igs_incdec_device::reset_w), &(*m_igs_incdec)));
|
||||
prg_space.install_write_handler(m_remap_addr + 0x1, m_remap_addr + 0x1, write8smo_delegate(FUNC(igs_incdec_device::dec_w), &(*m_igs_incdec)));
|
||||
prg_space.install_write_handler(m_remap_addr + 0x3, m_remap_addr + 0x3, write8smo_delegate(FUNC(igs_incdec_device::inc_w), &(*m_igs_incdec)));
|
||||
prg_space.install_read_handler (m_remap_addr + 0x5, m_remap_addr + 0x5, read8smo_delegate (FUNC(igs_incdec_device::val_r), &(*m_igs_incdec)));
|
||||
|
||||
logerror("%s: incdec protection remapped at %04x\n", machine().describe_context(), m_remap_addr);
|
||||
}
|
||||
@ -1608,7 +1615,7 @@ void igs017_state::mgcs_igs029_run()
|
||||
m_igs029_recv_buf[m_igs029_recv_len++] = 0x00;
|
||||
m_igs029_recv_buf[m_igs029_recv_len++] = 0x00;
|
||||
m_igs029_recv_buf[m_igs029_recv_len++] = 0x00;
|
||||
m_igs029_recv_buf[m_igs029_recv_len++] = min_bets[ (~ioport("DSW2")->read()) & 3 ];
|
||||
m_igs029_recv_buf[m_igs029_recv_len++] = min_bets[ (~m_io_dsw[1]->read()) & 3 ];
|
||||
m_igs029_recv_buf[m_igs029_recv_len++] = 0x05;
|
||||
}
|
||||
else if (m_igs029_send_buf[0] == 0x03 && m_igs029_send_buf[1] == 0x39)
|
||||
@ -1616,8 +1623,8 @@ void igs017_state::mgcs_igs029_run()
|
||||
logerror("READ DSW\n");
|
||||
|
||||
u8 ret;
|
||||
if (~m_dsw_select & 0x01) ret = ioport("DSW1")->read();
|
||||
else if (~m_dsw_select & 0x02) ret = ioport("DSW2")->read();
|
||||
if (~m_dsw_select & 0x01) ret = m_io_dsw[0]->read();
|
||||
else if (~m_dsw_select & 0x02) ret = m_io_dsw[1]->read();
|
||||
else
|
||||
{
|
||||
logerror("%s: warning, reading dsw with dsw_select = %02x\n", machine().describe_context(), m_dsw_select);
|
||||
@ -1674,14 +1681,19 @@ void igs017_state::mgcs_igs029_run()
|
||||
m_igs029_send_len = 0;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(igs017_state::mgcs_magic_w)
|
||||
void igs017_state::magic_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_igs_magic[offset]);
|
||||
COMBINE_DATA(&m_igs_magic);
|
||||
}
|
||||
|
||||
if (offset == 0)
|
||||
return;
|
||||
u16 igs017_state::magic_r()
|
||||
{
|
||||
return m_igs_magic;
|
||||
}
|
||||
|
||||
switch(m_igs_magic[0])
|
||||
void igs017_state::mgcs_magic_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
switch (m_igs_magic)
|
||||
{
|
||||
case 0x00:
|
||||
if (ACCESSING_BITS_0_7)
|
||||
@ -1738,7 +1750,7 @@ WRITE16_MEMBER(igs017_state::mgcs_magic_w)
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
m_scramble_data = data & 0xff;
|
||||
// logerror("%s: writing %02x to igs_magic = %02x\n", machine().describe_context(), data & 0xff, m_igs_magic[0]);
|
||||
// logerror("%s: writing %02x to igs_magic = %02x\n", machine().describe_context(), data & 0xff, m_igs_magic);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -1748,21 +1760,18 @@ WRITE16_MEMBER(igs017_state::mgcs_magic_w)
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
m_igs029_send_data = data & 0xff;
|
||||
// logerror("%s: writing %02x to igs_magic = %02x\n", machine().describe_context(), data & 0xff, m_igs_magic[0]);
|
||||
// logerror("%s: writing %02x to igs_magic = %02x\n", machine().describe_context(), data & 0xff, m_igs_magic);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("%s: warning, writing to igs_magic %02x = %02x\n", machine().describe_context(), m_igs_magic[0], data);
|
||||
logerror("%s: warning, writing to igs_magic %02x = %02x\n", machine().describe_context(), m_igs_magic, data);
|
||||
}
|
||||
}
|
||||
|
||||
READ16_MEMBER(igs017_state::mgcs_magic_r)
|
||||
u16 igs017_state::mgcs_magic_r()
|
||||
{
|
||||
if (offset == 0)
|
||||
return m_igs_magic[0];
|
||||
|
||||
switch(m_igs_magic[0])
|
||||
switch (m_igs_magic)
|
||||
{
|
||||
case 0x00:
|
||||
return m_input_select | 0x02;
|
||||
@ -1770,34 +1779,34 @@ READ16_MEMBER(igs017_state::mgcs_magic_r)
|
||||
case 0x01:
|
||||
{
|
||||
u16 ret = bitswap<8>( (bitswap<8>(m_scramble_data, 0,1,2,3,4,5,6,7) + 1) & 3, 4,5,6,7, 0,1,2,3);
|
||||
logerror("%s: reading %02x from igs_magic = %02x\n", machine().describe_context(), ret, m_igs_magic[0]);
|
||||
logerror("%s: reading %02x from igs_magic = %02x\n", machine().describe_context(), ret, m_igs_magic);
|
||||
return ret;
|
||||
}
|
||||
|
||||
case 0x02:
|
||||
{
|
||||
u8 ret = m_igs029_recv_data;
|
||||
logerror("%s: reading %02x from igs_magic = %02x\n", machine().describe_context(), ret, m_igs_magic[0]);
|
||||
logerror("%s: reading %02x from igs_magic = %02x\n", machine().describe_context(), ret, m_igs_magic);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// case 0x05: ???
|
||||
|
||||
default:
|
||||
logerror("%s: warning, reading with igs_magic = %02x\n", machine().describe_context(), m_igs_magic[0]);
|
||||
logerror("%s: warning, reading with igs_magic = %02x\n", machine().describe_context(), m_igs_magic);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0xffff;
|
||||
}
|
||||
|
||||
READ8_MEMBER(igs017_state::mgcs_keys_r)
|
||||
u8 igs017_state::mgcs_keys_r()
|
||||
{
|
||||
if (~m_input_select & 0x08) return ioport("KEY0")->read();
|
||||
if (~m_input_select & 0x10) return ioport("KEY1")->read();
|
||||
if (~m_input_select & 0x20) return ioport("KEY2")->read();
|
||||
if (~m_input_select & 0x40) return ioport("KEY3")->read();
|
||||
if (~m_input_select & 0x80) return ioport("KEY4")->read();
|
||||
if (~m_input_select & 0x08) return m_io_key[0]->read();
|
||||
if (~m_input_select & 0x10) return m_io_key[1]->read();
|
||||
if (~m_input_select & 0x20) return m_io_key[2]->read();
|
||||
if (~m_input_select & 0x40) return m_io_key[3]->read();
|
||||
if (~m_input_select & 0x80) return m_io_key[4]->read();
|
||||
|
||||
logerror("%s: warning, reading key with input_select = %02x\n", machine().describe_context(), m_input_select);
|
||||
return 0xff;
|
||||
@ -1807,7 +1816,8 @@ void igs017_state::mgcs_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x07ffff).rom();
|
||||
map(0x300000, 0x303fff).ram();
|
||||
map(0x49c000, 0x49c003).w(FUNC(igs017_state::mgcs_magic_w)).r(FUNC(igs017_state::mgcs_magic_r));
|
||||
map(0x49c000, 0x49c001).rw(FUNC(igs017_state::magic_r), FUNC(igs017_state::magic_w));
|
||||
map(0x49c002, 0x49c003).rw(FUNC(igs017_state::mgcs_magic_r), FUNC(igs017_state::mgcs_magic_w));
|
||||
|
||||
map(0xa00000, 0xa0ffff).rw(m_igs017_igs031, FUNC(igs017_igs031_device::read), FUNC(igs017_igs031_device::write)).umask16(0x00ff);
|
||||
|
||||
@ -1818,28 +1828,23 @@ void igs017_state::mgcs_map(address_map &map)
|
||||
|
||||
// sdmg2
|
||||
|
||||
READ8_MEMBER(igs017_state::sdmg2_keys_r)
|
||||
u8 igs017_state::sdmg2_keys_r()
|
||||
{
|
||||
if (~m_input_select & 0x01) return ioport("KEY0")->read();
|
||||
if (~m_input_select & 0x02) return ioport("KEY1")->read();
|
||||
if (~m_input_select & 0x04) return ioport("KEY2")->read();
|
||||
if (~m_input_select & 0x08) return ioport("KEY3")->read();
|
||||
if (~m_input_select & 0x10) return ioport("KEY4")->read();
|
||||
if (~m_input_select & 0x01) return m_io_key[0]->read();
|
||||
if (~m_input_select & 0x02) return m_io_key[1]->read();
|
||||
if (~m_input_select & 0x04) return m_io_key[2]->read();
|
||||
if (~m_input_select & 0x08) return m_io_key[3]->read();
|
||||
if (~m_input_select & 0x10) return m_io_key[4]->read();
|
||||
|
||||
if (m_input_select == 0x1f) return ioport("KEY0")->read(); // in joystick mode
|
||||
if (m_input_select == 0x1f) return m_io_key[0]->read(); // in joystick mode
|
||||
|
||||
logerror("%s: warning, reading key with input_select = %02x\n", machine().describe_context(), m_input_select);
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(igs017_state::sdmg2_magic_w)
|
||||
void igs017_state::sdmg2_magic_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_igs_magic[offset]);
|
||||
|
||||
if (offset == 0)
|
||||
return;
|
||||
|
||||
switch(m_igs_magic[0])
|
||||
switch (m_igs_magic)
|
||||
{
|
||||
// case 0x00: ? 0x80
|
||||
|
||||
@ -1861,25 +1866,25 @@ WRITE16_MEMBER(igs017_state::sdmg2_magic_w)
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("%s: warning, writing to igs_magic %02x = %02x\n", machine().describe_context(), m_igs_magic[0], data);
|
||||
logerror("%s: warning, writing to igs_magic %02x = %02x\n", machine().describe_context(), m_igs_magic, data);
|
||||
}
|
||||
}
|
||||
|
||||
READ16_MEMBER(igs017_state::sdmg2_magic_r)
|
||||
u16 igs017_state::sdmg2_magic_r()
|
||||
{
|
||||
switch(m_igs_magic[0])
|
||||
switch (m_igs_magic)
|
||||
{
|
||||
case 0x00:
|
||||
{
|
||||
u16 hopper_bit = (m_hopper && ((m_screen->frame_number()/10)&1)) ? 0x0000 : 0x0001;
|
||||
return ioport("COINS")->read() | hopper_bit;
|
||||
return m_io_coins->read() | hopper_bit;
|
||||
}
|
||||
|
||||
case 0x02:
|
||||
return sdmg2_keys_r(space, 0);
|
||||
return sdmg2_keys_r();
|
||||
|
||||
default:
|
||||
logerror("%s: warning, reading with igs_magic = %02x\n", machine().describe_context(), m_igs_magic[0]);
|
||||
logerror("%s: warning, reading with igs_magic = %02x\n", machine().describe_context(), m_igs_magic);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1894,35 +1899,30 @@ void igs017_state::sdmg2_map(address_map &map)
|
||||
map(0x200000, 0x20ffff).rw(m_igs017_igs031, FUNC(igs017_igs031_device::read), FUNC(igs017_igs031_device::write)).umask16(0x00ff);
|
||||
|
||||
map(0x210001, 0x210001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x300000, 0x300003).w(FUNC(igs017_state::sdmg2_magic_w));
|
||||
map(0x300002, 0x300003).r(FUNC(igs017_state::sdmg2_magic_r));
|
||||
map(0x300000, 0x300001).w(FUNC(igs017_state::magic_w));
|
||||
map(0x300002, 0x300003).rw(FUNC(igs017_state::sdmg2_magic_r), FUNC(igs017_state::sdmg2_magic_w));
|
||||
}
|
||||
|
||||
|
||||
// mgdh, mgdha
|
||||
|
||||
READ8_MEMBER(igs017_state::mgdh_keys_r)
|
||||
u8 igs017_state::mgdh_keys_r()
|
||||
{
|
||||
if (~m_input_select & 0x04) return ioport("KEY0")->read();
|
||||
if (~m_input_select & 0x08) return ioport("KEY1")->read();
|
||||
if (~m_input_select & 0x10) return ioport("KEY2")->read();
|
||||
if (~m_input_select & 0x20) return ioport("KEY3")->read();
|
||||
if (~m_input_select & 0x40) return ioport("KEY4")->read();
|
||||
if (~m_input_select & 0x04) return m_io_key[0]->read();
|
||||
if (~m_input_select & 0x08) return m_io_key[1]->read();
|
||||
if (~m_input_select & 0x10) return m_io_key[2]->read();
|
||||
if (~m_input_select & 0x20) return m_io_key[3]->read();
|
||||
if (~m_input_select & 0x40) return m_io_key[4]->read();
|
||||
|
||||
if ((m_input_select & 0xfc) == 0xfc) return ioport("DSW1")->read();
|
||||
if ((m_input_select & 0xfc) == 0xfc) return m_io_dsw[0]->read();
|
||||
|
||||
logerror("%s: warning, reading key with input_select = %02x\n", machine().describe_context(), m_input_select);
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(igs017_state::mgdha_magic_w)
|
||||
void igs017_state::mgdha_magic_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_igs_magic[offset]);
|
||||
|
||||
if (offset == 0)
|
||||
return;
|
||||
|
||||
switch(m_igs_magic[0])
|
||||
switch (m_igs_magic)
|
||||
{
|
||||
case 0x00:
|
||||
if (ACCESSING_BITS_0_7)
|
||||
@ -1968,31 +1968,31 @@ WRITE16_MEMBER(igs017_state::mgdha_magic_w)
|
||||
04ac10: warning, writing to igs_magic 06 = ff
|
||||
04ac20: warning, writing to igs_magic 07 = 3f
|
||||
*/
|
||||
logerror("%s: warning, writing to igs_magic %02x = %02x\n", machine().describe_context(), m_igs_magic[0], data);
|
||||
logerror("%s: warning, writing to igs_magic %02x = %02x\n", machine().describe_context(), m_igs_magic, data);
|
||||
}
|
||||
}
|
||||
|
||||
READ16_MEMBER(igs017_state::mgdha_magic_r)
|
||||
u16 igs017_state::mgdha_magic_r()
|
||||
{
|
||||
switch(m_igs_magic[0])
|
||||
switch (m_igs_magic)
|
||||
{
|
||||
case 0x00:
|
||||
return mgdh_keys_r(space, 0);
|
||||
return mgdh_keys_r();
|
||||
|
||||
case 0x01:
|
||||
return ioport("BUTTONS")->read();
|
||||
return m_io_buttons->read();
|
||||
|
||||
case 0x02:
|
||||
return bitswap<8>(ioport("DSW2")->read(), 0,1,2,3,4,5,6,7);
|
||||
return bitswap<8>(m_io_dsw[1]->read(), 0,1,2,3,4,5,6,7);
|
||||
|
||||
case 0x03:
|
||||
{
|
||||
u16 hopper_bit = (m_hopper && ((m_screen->frame_number()/10)&1)) ? 0x0000 : 0x0001;
|
||||
return ioport("COINS")->read() | hopper_bit;
|
||||
return m_io_coins->read() | hopper_bit;
|
||||
}
|
||||
|
||||
default:
|
||||
logerror("%s: warning, reading with igs_magic = %02x\n", machine().describe_context(), m_igs_magic[0]);
|
||||
logerror("%s: warning, reading with igs_magic = %02x\n", machine().describe_context(), m_igs_magic);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -2003,8 +2003,8 @@ void igs017_state::mgdha_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x07ffff).rom();
|
||||
map(0x600000, 0x603fff).ram();
|
||||
map(0x876000, 0x876003).w(FUNC(igs017_state::mgdha_magic_w));
|
||||
map(0x876002, 0x876003).r(FUNC(igs017_state::mgdha_magic_r));
|
||||
map(0x876000, 0x876001).w(FUNC(igs017_state::magic_w));
|
||||
map(0x876002, 0x876003).rw(FUNC(igs017_state::mgdha_magic_r), FUNC(igs017_state::mgdha_magic_w));
|
||||
|
||||
map(0xa00000, 0xa0ffff).rw(m_igs017_igs031, FUNC(igs017_igs031_device::read), FUNC(igs017_igs031_device::write)).umask16(0x00ff);
|
||||
|
||||
@ -2014,7 +2014,7 @@ void igs017_state::mgdha_map(address_map &map)
|
||||
|
||||
// tjsb
|
||||
|
||||
WRITE8_MEMBER(igs017_state::tjsb_output_w)
|
||||
void igs017_state::tjsb_output_w(u8 data)
|
||||
{
|
||||
switch (m_input_select)
|
||||
{
|
||||
@ -2045,17 +2045,17 @@ WRITE8_MEMBER(igs017_state::tjsb_output_w)
|
||||
logerror("%s: warning, writing to igs_magic %02x = %02x\n", machine().describe_context(), m_input_select, data);
|
||||
}
|
||||
|
||||
READ8_MEMBER(igs017_state::tjsb_input_r)
|
||||
u8 igs017_state::tjsb_input_r()
|
||||
{
|
||||
switch (m_input_select)
|
||||
{
|
||||
case 0x00: return ioport("PLAYER1")->read();
|
||||
case 0x01: return ioport("PLAYER2")->read();
|
||||
case 0x02: return ioport("COINS")->read();
|
||||
case 0x00: return m_io_player1->read();
|
||||
case 0x01: return m_io_player2->read();
|
||||
case 0x02: return m_io_coins->read();
|
||||
case 0x03:
|
||||
{
|
||||
u8 hopper_bit = (m_hopper && ((m_screen->frame_number()/10)&1)) ? 0x00 : 0x20;
|
||||
return ioport("HOPPER")->read() | hopper_bit;
|
||||
return m_io_hopper->read() | hopper_bit;
|
||||
}
|
||||
|
||||
default:
|
||||
@ -2097,16 +2097,16 @@ void igs017_state::spkrform_map(address_map &map)
|
||||
map(0x10000, 0x3ffff).rom();
|
||||
}
|
||||
|
||||
READ8_MEMBER(igs017_state::spkrform_input_r)
|
||||
u8 igs017_state::spkrform_input_r()
|
||||
{
|
||||
switch (m_input_select)
|
||||
{
|
||||
case 0x00: return ioport("PLAYER1")->read();
|
||||
case 0x01: return ioport("PLAYER2")->read();
|
||||
case 0x02: return ioport("COINS")->read();
|
||||
case 0x00: return m_io_player1->read();
|
||||
case 0x01: return m_io_player2->read();
|
||||
case 0x02: return m_io_coins->read();
|
||||
case 0x03:
|
||||
{
|
||||
return ioport("BUTTONS")->read();
|
||||
return m_io_buttons->read();
|
||||
}
|
||||
|
||||
default:
|
||||
@ -2135,14 +2135,9 @@ void igs017_state::spkrform_io(address_map &map)
|
||||
|
||||
// lhzb2
|
||||
|
||||
WRITE16_MEMBER(igs017_state::lhzb2_magic_w)
|
||||
void igs017_state::lhzb2_magic_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_igs_magic[offset]);
|
||||
|
||||
if (offset == 0)
|
||||
return;
|
||||
|
||||
switch(m_igs_magic[0])
|
||||
switch (m_igs_magic)
|
||||
{
|
||||
case 0x00:
|
||||
if (ACCESSING_BITS_0_7)
|
||||
@ -2165,28 +2160,28 @@ WRITE16_MEMBER(igs017_state::lhzb2_magic_w)
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("%s: warning, writing to igs_magic %02x = %02x\n", machine().describe_context(), m_igs_magic[0], data);
|
||||
logerror("%s: warning, writing to igs_magic %02x = %02x\n", machine().describe_context(), m_igs_magic, data);
|
||||
}
|
||||
}
|
||||
|
||||
READ16_MEMBER(igs017_state::lhzb2_magic_r)
|
||||
u16 igs017_state::lhzb2_magic_r()
|
||||
{
|
||||
switch(m_igs_magic[0])
|
||||
switch (m_igs_magic)
|
||||
{
|
||||
case 0x01:
|
||||
{
|
||||
if (~m_input_select & 0x01) return ioport("KEY0")->read();
|
||||
if (~m_input_select & 0x02) return ioport("KEY1")->read();
|
||||
if (~m_input_select & 0x04) return ioport("KEY2")->read();
|
||||
if (~m_input_select & 0x08) return ioport("KEY3")->read();
|
||||
if (~m_input_select & 0x10) return ioport("KEY4")->read();
|
||||
if (~m_input_select & 0x01) return m_io_key[0]->read();
|
||||
if (~m_input_select & 0x02) return m_io_key[1]->read();
|
||||
if (~m_input_select & 0x04) return m_io_key[2]->read();
|
||||
if (~m_input_select & 0x08) return m_io_key[3]->read();
|
||||
if (~m_input_select & 0x10) return m_io_key[4]->read();
|
||||
|
||||
logerror("%s: warning, reading key with input_select = %02x\n", machine().describe_context(), m_input_select);
|
||||
return 0xffff;
|
||||
}
|
||||
|
||||
default:
|
||||
logerror("%s: warning, reading with igs_magic = %02x\n", machine().describe_context(), m_igs_magic[0]);
|
||||
logerror("%s: warning, reading with igs_magic = %02x\n", machine().describe_context(), m_igs_magic);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -2197,8 +2192,8 @@ void igs017_state::lhzb2_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x07ffff).rom();
|
||||
map(0x500000, 0x503fff).ram();
|
||||
map(0x910000, 0x910003).w(FUNC(igs017_state::lhzb2_magic_w));
|
||||
map(0x910002, 0x910003).r(FUNC(igs017_state::lhzb2_magic_r));
|
||||
map(0x910000, 0x910001).w(FUNC(igs017_state::magic_w));
|
||||
map(0x910002, 0x910003).rw(FUNC(igs017_state::lhzb2_magic_r), FUNC(igs017_state::lhzb2_magic_w));
|
||||
|
||||
map(0xb00000, 0xb0ffff).rw(m_igs017_igs031, FUNC(igs017_igs031_device::read), FUNC(igs017_igs031_device::write)).umask16(0x00ff);
|
||||
|
||||
@ -2209,17 +2204,17 @@ void igs017_state::lhzb2_map(address_map &map)
|
||||
// lhzb2a
|
||||
// To do: what devices are on this PCB?
|
||||
|
||||
READ16_MEMBER(igs017_state::lhzb2a_input_r)
|
||||
u16 igs017_state::lhzb2a_input_r(offs_t offset)
|
||||
{
|
||||
switch (offset*2)
|
||||
{
|
||||
case 0x00: // Keys
|
||||
{
|
||||
if (~m_input_select & 0x01) return ioport("KEY0")->read() << 8;
|
||||
if (~m_input_select & 0x02) return ioport("KEY1")->read() << 8;
|
||||
if (~m_input_select & 0x04) return ioport("KEY2")->read() << 8;
|
||||
if (~m_input_select & 0x08) return ioport("KEY3")->read() << 8;
|
||||
if (~m_input_select & 0x10) return ioport("KEY4")->read() << 8;
|
||||
if (~m_input_select & 0x01) return m_io_key[0]->read() << 8;
|
||||
if (~m_input_select & 0x02) return m_io_key[1]->read() << 8;
|
||||
if (~m_input_select & 0x04) return m_io_key[2]->read() << 8;
|
||||
if (~m_input_select & 0x08) return m_io_key[3]->read() << 8;
|
||||
if (~m_input_select & 0x10) return m_io_key[4]->read() << 8;
|
||||
|
||||
logerror("%s: warning, reading key with input_select = %02x\n", machine().describe_context(), m_input_select);
|
||||
return 0xffff;
|
||||
@ -2228,11 +2223,11 @@ READ16_MEMBER(igs017_state::lhzb2a_input_r)
|
||||
case 0x02:
|
||||
{
|
||||
u16 hopper_bit = (m_hopper && ((m_screen->frame_number()/10)&1)) ? 0x0000 : 0x0002;
|
||||
return (ioport("DSW1")->read() << 8) | ioport("COINS")->read() | hopper_bit;
|
||||
return (m_io_dsw[0]->read() << 8) | m_io_coins->read() | hopper_bit;
|
||||
}
|
||||
|
||||
case 0x04:
|
||||
return ioport("DSW2")->read();
|
||||
return m_io_dsw[1]->read();
|
||||
}
|
||||
|
||||
return 0xffff;
|
||||
@ -2246,7 +2241,7 @@ READ16_MEMBER(igs017_state::lhzb2a_input_r)
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
WRITE16_MEMBER(igs017_state::lhzb2a_remap_addr_w)
|
||||
void igs017_state::lhzb2a_remap_addr_w(address_space &space, u16 data)
|
||||
{
|
||||
// Unmap previous address ranges
|
||||
if (m_remap_addr != -1)
|
||||
@ -2261,16 +2256,16 @@ WRITE16_MEMBER(igs017_state::lhzb2a_remap_addr_w)
|
||||
m_remap_addr = data & 0xff;
|
||||
|
||||
// Add new memory ranges
|
||||
space.install_write_handler ( m_remap_addr * 0x10000 + 0x4001, m_remap_addr * 0x10000 + 0x4001, write8_delegate(FUNC(igs_bitswap_device::address_w), &(*m_igs_bitswap)) );
|
||||
space.install_readwrite_handler ( m_remap_addr * 0x10000 + 0x4003, m_remap_addr * 0x10000 + 0x4003, read8_delegate (FUNC(igs_bitswap_device::data_r), &(*m_igs_bitswap)), write8_delegate(FUNC(igs_bitswap_device::data_w), &(*m_igs_bitswap)) );
|
||||
space.install_write_handler (m_remap_addr * 0x10000 + 0x4001, m_remap_addr * 0x10000 + 0x4001, write8smo_delegate(FUNC(igs_bitswap_device::address_w), &(*m_igs_bitswap)));
|
||||
space.install_readwrite_handler(m_remap_addr * 0x10000 + 0x4003, m_remap_addr * 0x10000 + 0x4003, read8smo_delegate (FUNC(igs_bitswap_device::data_r), &(*m_igs_bitswap)), write8smo_delegate(FUNC(igs_bitswap_device::data_w), &(*m_igs_bitswap)));
|
||||
|
||||
space.install_read_handler ( m_remap_addr * 0x10000 + 0x8000, m_remap_addr * 0x10000 + 0x8005, read16_delegate (FUNC(igs017_state::lhzb2a_input_r), this) );
|
||||
space.install_write_handler ( m_remap_addr * 0x10000 + 0xc000, m_remap_addr * 0x10000 + 0xc001, write16_delegate(FUNC(igs017_state::lhzb2a_remap_addr_w), this) );
|
||||
space.install_read_handler (m_remap_addr * 0x10000 + 0x8000, m_remap_addr * 0x10000 + 0x8005, read16sm_delegate (FUNC(igs017_state::lhzb2a_input_r), this));
|
||||
space.install_write_handler (m_remap_addr * 0x10000 + 0xc000, m_remap_addr * 0x10000 + 0xc001, write16mo_delegate(FUNC(igs017_state::lhzb2a_remap_addr_w), this));
|
||||
|
||||
logerror("%s: inputs and protection remapped at %02xxxxx\n", machine().describe_context(), m_remap_addr);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(igs017_state::lhzb2a_input_select_w)
|
||||
void igs017_state::lhzb2a_input_select_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
@ -2283,7 +2278,7 @@ WRITE16_MEMBER(igs017_state::lhzb2a_input_select_w)
|
||||
{
|
||||
m_oki->set_rom_bank((data >> 8) & 1);
|
||||
|
||||
if ( data & 0x0fe00 )
|
||||
if (data & 0xfe00)
|
||||
logerror("%s: warning, unknown bits written in input_select = %04x\n", machine().describe_context(), data);
|
||||
}
|
||||
}
|
||||
@ -2312,14 +2307,9 @@ void igs017_state::lhzb2a_map(address_map &map)
|
||||
|
||||
// slqz2
|
||||
|
||||
WRITE16_MEMBER(igs017_state::slqz2_magic_w)
|
||||
void igs017_state::slqz2_magic_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_igs_magic[offset]);
|
||||
|
||||
if (offset == 0)
|
||||
return;
|
||||
|
||||
switch(m_igs_magic[0])
|
||||
switch (m_igs_magic)
|
||||
{
|
||||
case 0x00:
|
||||
if (ACCESSING_BITS_0_7)
|
||||
@ -2336,23 +2326,23 @@ WRITE16_MEMBER(igs017_state::slqz2_magic_w)
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("%s: warning, writing to igs_magic %02x = %02x\n", machine().describe_context(), m_igs_magic[0], data);
|
||||
logerror("%s: warning, writing to igs_magic %02x = %02x\n", machine().describe_context(), m_igs_magic, data);
|
||||
}
|
||||
}
|
||||
|
||||
READ16_MEMBER(igs017_state::slqz2_magic_r)
|
||||
u16 igs017_state::slqz2_magic_r()
|
||||
{
|
||||
switch(m_igs_magic[0])
|
||||
switch (m_igs_magic)
|
||||
{
|
||||
case 0x00:
|
||||
return ioport("PLAYER2")->read();
|
||||
return m_io_player2->read();
|
||||
case 0x01:
|
||||
return ioport("PLAYER1")->read();
|
||||
return m_io_player1->read();
|
||||
case 0x02:
|
||||
return ioport("BUTTONS")->read();
|
||||
return m_io_buttons->read();
|
||||
|
||||
default:
|
||||
logerror("%s: warning, reading with igs_magic = %02x\n", machine().describe_context(), m_igs_magic[0]);
|
||||
logerror("%s: warning, reading with igs_magic = %02x\n", machine().describe_context(), m_igs_magic);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -2363,8 +2353,8 @@ void igs017_state::slqz2_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x07ffff).rom();
|
||||
map(0x100000, 0x103fff).ram();
|
||||
map(0x602000, 0x602003).w(FUNC(igs017_state::slqz2_magic_w));
|
||||
map(0x602002, 0x602003).r(FUNC(igs017_state::slqz2_magic_r));
|
||||
map(0x602000, 0x602001).w(FUNC(igs017_state::magic_w));
|
||||
map(0x602002, 0x602003).rw(FUNC(igs017_state::slqz2_magic_r), FUNC(igs017_state::slqz2_magic_w));
|
||||
|
||||
map(0x900000, 0x90ffff).rw(m_igs017_igs031, FUNC(igs017_igs031_device::read), FUNC(igs017_igs031_device::write)).umask16(0x00ff);
|
||||
|
||||
@ -3600,7 +3590,7 @@ MACHINE_RESET_MEMBER(igs017_state,mgcs)
|
||||
MACHINE_RESET_CALL_MEMBER( iqblocka );
|
||||
|
||||
m_scramble_data = 0;
|
||||
memset(m_igs_magic, 0, sizeof(m_igs_magic));
|
||||
m_igs_magic = 0;
|
||||
}
|
||||
|
||||
void igs017_state::mgcs(machine_config &config)
|
||||
@ -3683,7 +3673,7 @@ void igs017_state::lhzb2(machine_config &config)
|
||||
MACHINE_RESET_MEMBER(igs017_state,lhzb2a)
|
||||
{
|
||||
MACHINE_RESET_CALL_MEMBER( mgcs );
|
||||
lhzb2a_remap_addr_w(m_maincpu->space(AS_PROGRAM), 0, 0xf0);
|
||||
lhzb2a_remap_addr_w(m_maincpu->space(AS_PROGRAM), 0xf0);
|
||||
}
|
||||
|
||||
void igs017_state::lhzb2a(machine_config &config)
|
||||
|
Loading…
Reference in New Issue
Block a user