update prev commit

This commit is contained in:
Michaël Banaan Ananas 2014-03-13 01:13:16 +00:00
parent 66aab159de
commit 5b385a4c71

View File

@ -17,7 +17,7 @@ AY-3-8910 @ 1.789766MHz [10.7386/6]
4416 RAM x2 4416 RAM x2
4164 RAM x8 4164 RAM x8
10.7386 XTAL 10.7386 XTAL
10 position DIPSW (where are they read??) 10 position DIPSW
NOTE! switches 1, 3 & 5 must be ON or the game will not boot. NOTE! switches 1, 3 & 5 must be ON or the game will not boot.
***************************************************************************/ ***************************************************************************/
@ -35,31 +35,18 @@ class pengadvb_state : public driver_device
public: public:
pengadvb_state(const machine_config &mconfig, device_type type, const char *tag) pengadvb_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu")
m_page0(*this, "page0"),
m_page1(*this, "page1"),
m_page2(*this, "page2"),
m_page3(*this, "page3"),
m_bank0(*this, "bank0"),
m_bank1(*this, "bank1"),
m_bank2(*this, "bank2"),
m_bank3(*this, "bank3")
{ } { }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<address_map_bank_device> m_page0;
required_device<address_map_bank_device> m_page1;
required_device<address_map_bank_device> m_page2;
required_device<address_map_bank_device> m_page3;
required_memory_bank m_bank0;
required_memory_bank m_bank1;
required_memory_bank m_bank2;
required_memory_bank m_bank3;
address_map_bank_device *m_page[4];
memory_bank *m_bank[4];
UINT8 m_primary_slot_reg; UINT8 m_primary_slot_reg;
UINT8 m_kb_matrix_row; UINT8 m_kb_matrix_row;
DECLARE_READ8_MEMBER(mem_r);
DECLARE_WRITE8_MEMBER(mem_w);
DECLARE_WRITE8_MEMBER(megarom_bank_w); DECLARE_WRITE8_MEMBER(megarom_bank_w);
DECLARE_WRITE8_MEMBER(pengadvb_psg_port_b_w); DECLARE_WRITE8_MEMBER(pengadvb_psg_port_b_w);
@ -82,17 +69,23 @@ public:
***************************************************************************/ ***************************************************************************/
READ8_MEMBER(pengadvb_state::mem_r)
{
return m_page[offset >> 14 & 3]->read8(space, offset);
}
WRITE8_MEMBER(pengadvb_state::mem_w)
{
m_page[offset >> 14 & 3]->write8(space, offset, data);
}
WRITE8_MEMBER(pengadvb_state::megarom_bank_w) WRITE8_MEMBER(pengadvb_state::megarom_bank_w)
{ {
memory_bank *bank[4] = { m_bank0, m_bank1, m_bank2, m_bank3 }; m_bank[offset >> 13 & 3]->set_entry(data & 0xf);
bank[offset >> 13 & 3]->set_entry(data & 0xf);
} }
static ADDRESS_MAP_START( program_mem, AS_PROGRAM, 8, pengadvb_state ) static ADDRESS_MAP_START( program_mem, AS_PROGRAM, 8, pengadvb_state )
AM_RANGE(0x0000, 0x3fff) AM_DEVICE("page0", address_map_bank_device, amap8) AM_RANGE(0x0000, 0xffff) AM_READWRITE(mem_r, mem_w) // 4 pages of 16KB
AM_RANGE(0x0000, 0x7fff) AM_DEVICE("page1", address_map_bank_device, amap8)
AM_RANGE(0x0000, 0xbfff) AM_DEVICE("page2", address_map_bank_device, amap8)
AM_RANGE(0x0000, 0xffff) AM_DEVICE("page3", address_map_bank_device, amap8)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( bank_mem, AS_PROGRAM, 8, pengadvb_state ) static ADDRESS_MAP_START( bank_mem, AS_PROGRAM, 8, pengadvb_state )
@ -175,19 +168,27 @@ READ8_MEMBER(pengadvb_state::pengadvb_ppi_port_a_r)
WRITE8_MEMBER(pengadvb_state::pengadvb_ppi_port_a_w) WRITE8_MEMBER(pengadvb_state::pengadvb_ppi_port_a_w)
{ {
m_page0->set_bank(data >> 0 & 3); if (data != m_primary_slot_reg)
m_page1->set_bank(data >> 2 & 3); {
m_page2->set_bank(data >> 4 & 3); for (int i = 0; i < 4; i++)
m_page3->set_bank(data >> 6 & 3); m_page[i]->set_bank(data >> (i * 2) & 3);
m_primary_slot_reg = data; m_primary_slot_reg = data;
} }
}
READ8_MEMBER(pengadvb_state::pengadvb_ppi_port_b_r) READ8_MEMBER(pengadvb_state::pengadvb_ppi_port_b_r)
{ {
if (m_kb_matrix_row == 0) // TODO: dipswitch
switch (m_kb_matrix_row)
{
case 0x0:
return ioport("IN1")->read(); return ioport("IN1")->read();
else
default:
break;
}
return 0xff; return 0xff;
} }
@ -295,15 +296,11 @@ void pengadvb_state::machine_reset()
m_primary_slot_reg = 0; m_primary_slot_reg = 0;
m_kb_matrix_row = 0; m_kb_matrix_row = 0;
m_page0->set_bank(0); for (int i = 0; i < 4; i++)
m_page1->set_bank(0); {
m_page2->set_bank(0); m_page[i]->set_bank(0);
m_page3->set_bank(0); m_bank[i]->set_entry(i);
}
m_bank0->set_entry(0);
m_bank1->set_entry(1);
m_bank2->set_entry(2);
m_bank3->set_entry(3);
} }
void pengadvb_state::pengadvb_decrypt(const char* region) void pengadvb_state::pengadvb_decrypt(const char* region)
@ -331,10 +328,16 @@ DRIVER_INIT_MEMBER(pengadvb_state,pengadvb)
pengadvb_decrypt("maincpu"); pengadvb_decrypt("maincpu");
pengadvb_decrypt("game"); pengadvb_decrypt("game");
m_bank0->configure_entries(0, 0x10, memregion("game")->base(), 0x2000); // init banks
m_bank1->configure_entries(0, 0x10, memregion("game")->base(), 0x2000); static const char * const pagenames[] = { "page0", "page1", "page2", "page3" };
m_bank2->configure_entries(0, 0x10, memregion("game")->base(), 0x2000); static const char * const banknames[] = { "bank0", "bank1", "bank2", "bank3" };
m_bank3->configure_entries(0, 0x10, memregion("game")->base(), 0x2000); for (int i = 0; i < 4; i++)
{
m_page[i] = machine().device<address_map_bank_device>(pagenames[i]);
m_bank[i] = membank(banknames[i]);
m_bank[i]->configure_entries(0, 0x10, memregion("game")->base(), 0x2000);
}
} }