mirror of
https://github.com/holub/mame
synced 2025-06-13 08:05:31 +03:00
capcom/cps1bl_pic: Avoid trampoline for okibank, handle mcu port b reads a bit differently
This commit is contained in:
parent
ba7428db29
commit
03005dbbf0
@ -84,7 +84,6 @@ protected:
|
|||||||
|
|
||||||
void dinopic_layer_w(offs_t offset, uint16_t data);
|
void dinopic_layer_w(offs_t offset, uint16_t data);
|
||||||
|
|
||||||
void pic_porta_w(uint8_t data);
|
|
||||||
uint8_t pic_portb_r();
|
uint8_t pic_portb_r();
|
||||||
void pic_portb_w(uint8_t data);
|
void pic_portb_w(uint8_t data);
|
||||||
uint8_t pic_portc_r();
|
uint8_t pic_portc_r();
|
||||||
@ -424,14 +423,17 @@ void wofpic_state::wofpic_spr_base_w(uint16_t data)
|
|||||||
|
|
||||||
// Note: This is clearly the exact same sound system as used by funkyjetb
|
// Note: This is clearly the exact same sound system as used by funkyjetb
|
||||||
|
|
||||||
void cps1bl_pic_state::pic_porta_w(uint8_t data)
|
|
||||||
{
|
|
||||||
m_okibank->set_entry(data & 0x0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t cps1bl_pic_state::pic_portb_r()
|
uint8_t cps1bl_pic_state::pic_portb_r()
|
||||||
{
|
{
|
||||||
return m_pic_portb;
|
uint8_t data = 0xff;
|
||||||
|
|
||||||
|
if (BIT(m_pic_portc, 4) == 0)
|
||||||
|
data &= m_soundlatch->read();
|
||||||
|
|
||||||
|
if (BIT(m_pic_portc, 2) == 0 && BIT(m_pic_portc, 0) == 0)
|
||||||
|
data &= m_oki->read();
|
||||||
|
|
||||||
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cps1bl_pic_state::pic_portb_w(uint8_t data)
|
void cps1bl_pic_state::pic_portb_w(uint8_t data)
|
||||||
@ -458,18 +460,9 @@ void cps1bl_pic_state::pic_portc_w(uint8_t data)
|
|||||||
if (BIT(m_pic_portc, 5) == 1 && BIT(data, 5) == 0)
|
if (BIT(m_pic_portc, 5) == 1 && BIT(data, 5) == 0)
|
||||||
m_soundlatch->acknowledge_w();
|
m_soundlatch->acknowledge_w();
|
||||||
|
|
||||||
if (BIT(data, 4) == 0)
|
if (BIT(m_pic_portc, 1) == 1 && BIT(data, 1) == 0 && BIT(data, 2) == 0)
|
||||||
m_pic_portb = m_soundlatch->read();
|
|
||||||
|
|
||||||
if (BIT(data, 2) == 0)
|
|
||||||
{
|
|
||||||
if (BIT(m_pic_portc, 1) == 1 && BIT(data, 1) == 0)
|
|
||||||
m_oki->write(m_pic_portb);
|
m_oki->write(m_pic_portb);
|
||||||
|
|
||||||
if (BIT(data, 0) == 0)
|
|
||||||
m_pic_portb = m_oki->read();
|
|
||||||
}
|
|
||||||
|
|
||||||
m_pic_portc = data;
|
m_pic_portc = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -483,7 +476,7 @@ void dinopic_state::dinopic(machine_config &config)
|
|||||||
m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &dinopic_state::cpu_space_map);
|
m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &dinopic_state::cpu_space_map);
|
||||||
|
|
||||||
PIC16C57(config, m_pic, 30_MHz_XTAL / 8);
|
PIC16C57(config, m_pic, 30_MHz_XTAL / 8);
|
||||||
m_pic->write_a().set(FUNC(dinopic_state::pic_porta_w));
|
m_pic->write_a().set_membank(m_okibank).mask(0x0f);
|
||||||
m_pic->read_b().set(FUNC(dinopic_state::pic_portb_r));
|
m_pic->read_b().set(FUNC(dinopic_state::pic_portb_r));
|
||||||
m_pic->write_b().set(FUNC(dinopic_state::pic_portb_w));
|
m_pic->write_b().set(FUNC(dinopic_state::pic_portb_w));
|
||||||
m_pic->read_c().set(FUNC(dinopic_state::pic_portc_r));
|
m_pic->read_c().set(FUNC(dinopic_state::pic_portc_r));
|
||||||
@ -526,7 +519,7 @@ void cps1bl_pic_state::punipic(machine_config &config)
|
|||||||
m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &cps1bl_pic_state::cpu_space_map);
|
m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &cps1bl_pic_state::cpu_space_map);
|
||||||
|
|
||||||
PIC16C57(config, m_pic, 30_MHz_XTAL / 8);
|
PIC16C57(config, m_pic, 30_MHz_XTAL / 8);
|
||||||
m_pic->write_a().set(FUNC(cps1bl_pic_state::pic_porta_w));
|
m_pic->write_a().set_membank(m_okibank).mask(0x0f);
|
||||||
m_pic->read_b().set(FUNC(cps1bl_pic_state::pic_portb_r));
|
m_pic->read_b().set(FUNC(cps1bl_pic_state::pic_portb_r));
|
||||||
m_pic->write_b().set(FUNC(cps1bl_pic_state::pic_portb_w));
|
m_pic->write_b().set(FUNC(cps1bl_pic_state::pic_portb_w));
|
||||||
m_pic->read_c().set(FUNC(cps1bl_pic_state::pic_portc_r));
|
m_pic->read_c().set(FUNC(cps1bl_pic_state::pic_portc_r));
|
||||||
|
Loading…
Reference in New Issue
Block a user