mirror of
https://github.com/holub/mame
synced 2025-06-07 05:13:46 +03:00
mac: fix major 0.183 regression in Mac II series [R. Belmont]
This commit is contained in:
parent
61eba47cfb
commit
055ba71426
@ -1237,13 +1237,20 @@ WRITE_LINE_MEMBER(mac_state::mac_adb_via_out_cb2)
|
|||||||
m_cuda->set_via_data(state & 1);
|
m_cuda->set_via_data(state & 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
if (m_adb_timer_ticks > 1)
|
||||||
{
|
{
|
||||||
if (state)
|
if (state)
|
||||||
|
{
|
||||||
m_adb_command |= 1;
|
m_adb_command |= 1;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
m_adb_command &= ~1;
|
m_adb_command &= ~1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* *************************************************************************
|
/* *************************************************************************
|
||||||
* VIA
|
* VIA
|
||||||
|
@ -283,7 +283,7 @@ void mac_state::adb_talk()
|
|||||||
addr = (m_adb_command>>4);
|
addr = (m_adb_command>>4);
|
||||||
reg = (m_adb_command & 3);
|
reg = (m_adb_command & 3);
|
||||||
|
|
||||||
// printf("Mac sent %x (cmd %d addr %d reg %d mr %d kr %d)\n", mac->m_adb_command, (mac->m_adb_command>>2)&3, addr, reg, m_adb_mouseaddr, m_adb_keybaddr);
|
//printf("Mac sent %x (cmd %d addr %d reg %d mr %d kr %d)\n", m_adb_command, (m_adb_command>>2)&3, addr, reg, m_adb_mouseaddr, m_adb_keybaddr);
|
||||||
|
|
||||||
if (m_adb_waiting_cmd)
|
if (m_adb_waiting_cmd)
|
||||||
{
|
{
|
||||||
@ -637,19 +637,24 @@ TIMER_CALLBACK_MEMBER(mac_state::mac_adb_tick)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// for input to Mac, the VIA reads on the *other* clock edge, so update this here
|
||||||
|
if (!m_adb_direction)
|
||||||
|
{
|
||||||
|
m_via1->write_cb2((m_adb_send & 0x80)>>7);
|
||||||
|
if (m_adb_timer_ticks != 9)
|
||||||
|
{
|
||||||
|
m_adb_send <<= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// do one clock transition on CB1 to advance the VIA shifter
|
// do one clock transition on CB1 to advance the VIA shifter
|
||||||
m_adb_extclock ^= 1;
|
m_adb_extclock ^= 1;
|
||||||
m_via1->write_cb1(m_adb_extclock);
|
m_via1->write_cb1(m_adb_extclock);
|
||||||
|
|
||||||
if (m_adb_direction)
|
if ((m_adb_direction) && (m_adb_timer_ticks > 1))
|
||||||
{
|
{
|
||||||
m_adb_command <<= 1;
|
m_adb_command <<= 1;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
m_via1->write_cb2((m_adb_send & 0x80)>>7);
|
|
||||||
m_adb_send <<= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_adb_extclock ^= 1;
|
m_adb_extclock ^= 1;
|
||||||
m_via1->write_cb1(m_adb_extclock);
|
m_via1->write_cb1(m_adb_extclock);
|
||||||
@ -663,7 +668,7 @@ TIMER_CALLBACK_MEMBER(mac_state::mac_adb_tick)
|
|||||||
{
|
{
|
||||||
adb_talk();
|
adb_talk();
|
||||||
if((m_adb_last_talk == 2) && m_adb_datasize) {
|
if((m_adb_last_talk == 2) && m_adb_datasize) {
|
||||||
m_adb_timer_ticks = 8;
|
m_adb_timer_ticks = 9;
|
||||||
m_adb_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(100)));
|
m_adb_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(100)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -684,7 +689,7 @@ void mac_state::mac_adb_newaction(int state)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
m_adb_state = state;
|
m_adb_state = state;
|
||||||
m_adb_timer_ticks = 8;
|
m_adb_timer_ticks = 9;
|
||||||
|
|
||||||
switch (state)
|
switch (state)
|
||||||
{
|
{
|
||||||
@ -1121,7 +1126,7 @@ void mac_state::adb_vblank()
|
|||||||
m_adb_waiting_cmd = 1;
|
m_adb_waiting_cmd = 1;
|
||||||
this->adb_talk();
|
this->adb_talk();
|
||||||
|
|
||||||
m_adb_timer_ticks = 8;
|
m_adb_timer_ticks = 9;
|
||||||
this->m_adb_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(100)));
|
this->m_adb_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(100)));
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
@ -1158,7 +1163,7 @@ void mac_state::adb_vblank()
|
|||||||
m_adb_waiting_cmd = 1;
|
m_adb_waiting_cmd = 1;
|
||||||
this->adb_talk();
|
this->adb_talk();
|
||||||
|
|
||||||
m_adb_timer_ticks = 8;
|
m_adb_timer_ticks = 9;
|
||||||
this->m_adb_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(100)));
|
this->m_adb_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(100)));
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
|
Loading…
Reference in New Issue
Block a user