mac: fix major 0.183 regression in Mac II series [R. Belmont]

This commit is contained in:
arbee 2017-04-19 22:43:05 -04:00
parent 61eba47cfb
commit 055ba71426
2 changed files with 27 additions and 15 deletions

View File

@ -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

View File

@ -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