mirror of
https://github.com/holub/mame
synced 2025-04-25 09:50:04 +03:00
a2mockingboard.cpp: Updates [R. Belmont, TomCh]
- Mirror the VIAs correctly across the whole CnXX range - Actually write the inflection bits for the SC-01
This commit is contained in:
parent
289efafb39
commit
68b16c6f51
@ -2,7 +2,7 @@
|
||||
// copyright-holders:R. Belmont
|
||||
/*********************************************************************
|
||||
|
||||
a2mockingboard.c
|
||||
a2mockingboard.cpp
|
||||
|
||||
Implementation of the Sweet Micro Systems Mockingboard card
|
||||
and friends.
|
||||
@ -167,10 +167,14 @@ void a2bus_ayboard_device::device_reset()
|
||||
|
||||
uint8_t a2bus_ayboard_device::read_cnxx(uint8_t offset)
|
||||
{
|
||||
if (offset <= 0x10)
|
||||
if (offset <= 0x7f)
|
||||
{
|
||||
return m_via1->read(offset & 0xf);
|
||||
else if (offset >= 0x80 && offset <= 0x90)
|
||||
}
|
||||
else
|
||||
{
|
||||
return m_via2->read(offset & 0xf);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -181,17 +185,24 @@ uint8_t a2bus_phasor_device::read_cnxx(uint8_t offset)
|
||||
int via_sel;
|
||||
|
||||
if (m_native)
|
||||
{
|
||||
via_sel = ((offset & 0x80) >> 6) | ((offset & 0x10) >> 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
via_sel = (offset & 0x80) ? 2 : 1;
|
||||
}
|
||||
|
||||
if ((offset <= 0x20) || (offset >= 0x80 && offset <= 0xa0))
|
||||
{
|
||||
if (BIT(via_sel, 0))
|
||||
{
|
||||
ret |= m_via1->read(offset & 0xf);
|
||||
|
||||
}
|
||||
if (BIT(via_sel, 1))
|
||||
{
|
||||
ret |= m_via2->read(offset & 0xf);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
@ -203,12 +214,17 @@ uint8_t a2bus_phasor_device::read_cnxx(uint8_t offset)
|
||||
|
||||
void a2bus_ayboard_device::write_cnxx(uint8_t offset, uint8_t data)
|
||||
{
|
||||
if (offset <= 0x10)
|
||||
// When the SSI-263 is emulated, Cn40 will write to both the VIA and
|
||||
// the first SSI-263, and Cn20 will write to both the VIA and the
|
||||
// second SSI-263. Reads only select the VIA.
|
||||
if (offset <= 0x7f)
|
||||
{
|
||||
m_via1->write(offset & 0xf, data);
|
||||
else if (offset >= 0x80 && offset <= 0x90)
|
||||
m_via2->write(offset & 0xf, data);
|
||||
}
|
||||
else
|
||||
logerror("Mockingboard(%d): unk write %02x to Cn%02X (%s)\n", slotno(), data, offset, machine().describe_context());
|
||||
{
|
||||
m_via2->write(offset & 0xf, data);
|
||||
}
|
||||
}
|
||||
|
||||
void a2bus_phasor_device::write_cnxx(uint8_t offset, uint8_t data)
|
||||
@ -218,32 +234,47 @@ void a2bus_phasor_device::write_cnxx(uint8_t offset, uint8_t data)
|
||||
int via_sel;
|
||||
|
||||
if (m_native)
|
||||
{
|
||||
via_sel = ((offset & 0x80) >> 6) | ((offset & 0x10) >> 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
via_sel = (offset & 0x80) ? 2 : 1;
|
||||
}
|
||||
|
||||
if (BIT(via_sel, 0))
|
||||
{
|
||||
m_via1->write(offset & 0xf, data);
|
||||
|
||||
}
|
||||
if (BIT(via_sel, 1))
|
||||
{
|
||||
m_via2->write(offset & 0xf, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( a2bus_ayboard_device::via1_irq_w )
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
raise_slot_irq();
|
||||
}
|
||||
else
|
||||
{
|
||||
lower_slot_irq();
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( a2bus_ayboard_device::via2_irq_w )
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
raise_slot_irq();
|
||||
}
|
||||
else
|
||||
{
|
||||
lower_slot_irq();
|
||||
}
|
||||
}
|
||||
|
||||
void a2bus_ayboard_device::via1_out_a(uint8_t data)
|
||||
@ -477,6 +508,7 @@ WRITE_LINE_MEMBER( a2bus_mockingboard_device::write_via1_cb2 )
|
||||
if ((state == CLEAR_LINE) && (m_last_cb2_state == ASSERT_LINE))
|
||||
{
|
||||
m_sc01->write(m_portb1);
|
||||
m_sc01->inflection_w(m_portb1 >> 6);
|
||||
}
|
||||
m_last_cb2_state = state;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user