mirror of
https://github.com/holub/mame
synced 2025-05-10 00:01:52 +03:00
update prev commit
This commit is contained in:
parent
66aab159de
commit
5b385a4c71
@ -17,7 +17,7 @@ AY-3-8910 @ 1.789766MHz [10.7386/6]
|
||||
4416 RAM x2
|
||||
4164 RAM x8
|
||||
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.
|
||||
|
||||
***************************************************************************/
|
||||
@ -35,31 +35,18 @@ class pengadvb_state : public driver_device
|
||||
public:
|
||||
pengadvb_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
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")
|
||||
m_maincpu(*this, "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_kb_matrix_row;
|
||||
|
||||
DECLARE_READ8_MEMBER(mem_r);
|
||||
DECLARE_WRITE8_MEMBER(mem_w);
|
||||
DECLARE_WRITE8_MEMBER(megarom_bank_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)
|
||||
{
|
||||
memory_bank *bank[4] = { m_bank0, m_bank1, m_bank2, m_bank3 };
|
||||
bank[offset >> 13 & 3]->set_entry(data & 0xf);
|
||||
m_bank[offset >> 13 & 3]->set_entry(data & 0xf);
|
||||
}
|
||||
|
||||
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, 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)
|
||||
AM_RANGE(0x0000, 0xffff) AM_READWRITE(mem_r, mem_w) // 4 pages of 16KB
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( bank_mem, AS_PROGRAM, 8, pengadvb_state )
|
||||
@ -175,20 +168,28 @@ READ8_MEMBER(pengadvb_state::pengadvb_ppi_port_a_r)
|
||||
|
||||
WRITE8_MEMBER(pengadvb_state::pengadvb_ppi_port_a_w)
|
||||
{
|
||||
m_page0->set_bank(data >> 0 & 3);
|
||||
m_page1->set_bank(data >> 2 & 3);
|
||||
m_page2->set_bank(data >> 4 & 3);
|
||||
m_page3->set_bank(data >> 6 & 3);
|
||||
if (data != m_primary_slot_reg)
|
||||
{
|
||||
for (int i = 0; i < 4; i++)
|
||||
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)
|
||||
{
|
||||
if (m_kb_matrix_row == 0)
|
||||
return ioport("IN1")->read();
|
||||
else
|
||||
return 0xff;
|
||||
// TODO: dipswitch
|
||||
switch (m_kb_matrix_row)
|
||||
{
|
||||
case 0x0:
|
||||
return ioport("IN1")->read();
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(pengadvb_state::pengadvb_ppi_port_c_w)
|
||||
@ -295,15 +296,11 @@ void pengadvb_state::machine_reset()
|
||||
m_primary_slot_reg = 0;
|
||||
m_kb_matrix_row = 0;
|
||||
|
||||
m_page0->set_bank(0);
|
||||
m_page1->set_bank(0);
|
||||
m_page2->set_bank(0);
|
||||
m_page3->set_bank(0);
|
||||
|
||||
m_bank0->set_entry(0);
|
||||
m_bank1->set_entry(1);
|
||||
m_bank2->set_entry(2);
|
||||
m_bank3->set_entry(3);
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
m_page[i]->set_bank(0);
|
||||
m_bank[i]->set_entry(i);
|
||||
}
|
||||
}
|
||||
|
||||
void pengadvb_state::pengadvb_decrypt(const char* region)
|
||||
@ -331,10 +328,16 @@ DRIVER_INIT_MEMBER(pengadvb_state,pengadvb)
|
||||
pengadvb_decrypt("maincpu");
|
||||
pengadvb_decrypt("game");
|
||||
|
||||
m_bank0->configure_entries(0, 0x10, memregion("game")->base(), 0x2000);
|
||||
m_bank1->configure_entries(0, 0x10, memregion("game")->base(), 0x2000);
|
||||
m_bank2->configure_entries(0, 0x10, memregion("game")->base(), 0x2000);
|
||||
m_bank3->configure_entries(0, 0x10, memregion("game")->base(), 0x2000);
|
||||
// init banks
|
||||
static const char * const pagenames[] = { "page0", "page1", "page2", "page3" };
|
||||
static const char * const banknames[] = { "bank0", "bank1", "bank2", "bank3" };
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user