summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/machine/macadb.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/machine/macadb.c')
-rw-r--r--src/mess/machine/macadb.c811
1 files changed, 405 insertions, 406 deletions
diff --git a/src/mess/machine/macadb.c b/src/mess/machine/macadb.c
index 27e78c85cae..0f2d588ff2d 100644
--- a/src/mess/machine/macadb.c
+++ b/src/mess/machine/macadb.c
@@ -7,62 +7,62 @@
#include "emu.h"
#include "includes/mac.h"
-#define LOG_ADB 0
-#define LOG_ADB_MCU_CMD 0
+#define LOG_ADB 0
+#define LOG_ADB_MCU_CMD 0
#define LOG_ADB_TALK_LISTEN 0
// ADB states
-#define ADB_STATE_NEW_COMMAND (0)
-#define ADB_STATE_XFER_EVEN (1)
-#define ADB_STATE_XFER_ODD (2)
-#define ADB_STATE_IDLE (3)
-#define ADB_STATE_NOTINIT (4)
+#define ADB_STATE_NEW_COMMAND (0)
+#define ADB_STATE_XFER_EVEN (1)
+#define ADB_STATE_XFER_ODD (2)
+#define ADB_STATE_IDLE (3)
+#define ADB_STATE_NOTINIT (4)
// ADB commands
-#define ADB_CMD_RESET (0)
-#define ADB_CMD_FLUSH (1)
+#define ADB_CMD_RESET (0)
+#define ADB_CMD_FLUSH (1)
// ADB line states
enum
{
- // receive states
- LST_IDLE = 0,
- LST_ATTENTION,
- LST_BIT0,
- LST_BIT1,
- LST_BIT2,
- LST_BIT3,
- LST_BIT4,
- LST_BIT5,
- LST_BIT6,
- LST_BIT7,
- LST_TSTOP,
- LST_WAITT1T,
- LST_RCVSTARTBIT,
- LST_SRQNODATA,
-
- // send states
- LST_TSTOPSTART,
- LST_TSTOPSTARTa,
- LST_STARTBIT,
- LST_SENDBIT0,
- LST_SENDBIT0a,
- LST_SENDBIT1,
- LST_SENDBIT1a,
- LST_SENDBIT2,
- LST_SENDBIT2a,
- LST_SENDBIT3,
- LST_SENDBIT3a,
- LST_SENDBIT4,
- LST_SENDBIT4a,
- LST_SENDBIT5,
- LST_SENDBIT5a,
- LST_SENDBIT6,
- LST_SENDBIT6a,
- LST_SENDBIT7,
- LST_SENDBIT7a,
- LST_SENDSTOP,
- LST_SENDSTOPa
+ // receive states
+ LST_IDLE = 0,
+ LST_ATTENTION,
+ LST_BIT0,
+ LST_BIT1,
+ LST_BIT2,
+ LST_BIT3,
+ LST_BIT4,
+ LST_BIT5,
+ LST_BIT6,
+ LST_BIT7,
+ LST_TSTOP,
+ LST_WAITT1T,
+ LST_RCVSTARTBIT,
+ LST_SRQNODATA,
+
+ // send states
+ LST_TSTOPSTART,
+ LST_TSTOPSTARTa,
+ LST_STARTBIT,
+ LST_SENDBIT0,
+ LST_SENDBIT0a,
+ LST_SENDBIT1,
+ LST_SENDBIT1a,
+ LST_SENDBIT2,
+ LST_SENDBIT2a,
+ LST_SENDBIT3,
+ LST_SENDBIT3a,
+ LST_SENDBIT4,
+ LST_SENDBIT4a,
+ LST_SENDBIT5,
+ LST_SENDBIT5a,
+ LST_SENDBIT6,
+ LST_SENDBIT6a,
+ LST_SENDBIT7,
+ LST_SENDBIT7a,
+ LST_SENDSTOP,
+ LST_SENDSTOPa
};
/* *************************************************************************
@@ -78,7 +78,7 @@ int mac_state::adb_pollkbd(int update)
int i, j, keybuf, report, codes[2], result;
static const char *const keynames[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4", "KEY5" };
- codes[0] = codes[1] = 0xff; // key up
+ codes[0] = codes[1] = 0xff; // key up
report = result = 0;
for (i = 0; i < 6; i++)
@@ -301,35 +301,35 @@ void mac_state::adb_talk()
m_adb_send = 0;
break;
- default: // reserved/unused
+ default: // reserved/unused
break;
}
break;
- case 2: // listen
- m_adb_datasize = 0;
- if ((addr == m_adb_keybaddr) || (addr == m_adb_mouseaddr))
- {
- #if LOG_ADB || LOG_ADB_TALK_LISTEN
- printf("ADB LISTEN: reg %x address %x\n", reg, addr);
- #endif
- m_adb_direction = 1; // input from Mac
- m_adb_command = 0;
- m_adb_listenreg = reg;
- m_adb_listenaddr = addr;
- if ((ADB_IS_EGRET) || (ADB_IS_CUDA))
- {
- m_adb_stream_ptr = 0;
- memset(m_adb_buffer, 0, sizeof(m_adb_buffer));
- }
- }
- else
- {
- #if LOG_ADB || LOG_ADB_TALK_LISTEN
- printf("ADB LISTEN to unknown device, timing out\n");
- #endif
- m_adb_direction = 0;
- }
+ case 2: // listen
+ m_adb_datasize = 0;
+ if ((addr == m_adb_keybaddr) || (addr == m_adb_mouseaddr))
+ {
+ #if LOG_ADB || LOG_ADB_TALK_LISTEN
+ printf("ADB LISTEN: reg %x address %x\n", reg, addr);
+ #endif
+ m_adb_direction = 1; // input from Mac
+ m_adb_command = 0;
+ m_adb_listenreg = reg;
+ m_adb_listenaddr = addr;
+ if ((ADB_IS_EGRET) || (ADB_IS_CUDA))
+ {
+ m_adb_stream_ptr = 0;
+ memset(m_adb_buffer, 0, sizeof(m_adb_buffer));
+ }
+ }
+ else
+ {
+ #if LOG_ADB || LOG_ADB_TALK_LISTEN
+ printf("ADB LISTEN to unknown device, timing out\n");
+ #endif
+ m_adb_direction = 0;
+ }
break;
case 3: // talk
@@ -340,7 +340,7 @@ void mac_state::adb_talk()
// keep track of what device the Mac last TALKed to
m_adb_last_talk = addr;
- m_adb_direction = 0; // output to Mac
+ m_adb_direction = 0; // output to Mac
if (addr == m_adb_mouseaddr)
{
UINT8 mouseX, mouseY;
@@ -370,8 +370,8 @@ void mac_state::adb_talk()
// get ID/handler
case 3:
- m_adb_buffer[0] = 0x60 | (m_adb_mouseaddr&0xf); // SRQ enable, no exceptional event
- m_adb_buffer[1] = 0x01; // handler 1
+ m_adb_buffer[0] = 0x60 | (m_adb_mouseaddr&0xf); // SRQ enable, no exceptional event
+ m_adb_buffer[1] = 0x01; // handler 1
m_adb_datasize = 2;
m_adb_mouse_initialized = 1;
@@ -381,10 +381,10 @@ void mac_state::adb_talk()
break;
}
- if (adb_pollkbd(0))
- {
- m_adb_srqflag = true;
- }
+ if (adb_pollkbd(0))
+ {
+ m_adb_srqflag = true;
+ }
}
else if (addr == m_adb_keybaddr)
{
@@ -420,19 +420,19 @@ void mac_state::adb_talk()
break;
// read modifier keys
- case 2:
- {
- this->adb_pollkbd(1);
- m_adb_buffer[0] = m_adb_modifiers;
- m_adb_buffer[1] = 0xff;
- m_adb_datasize = 2;
- }
+ case 2:
+ {
+ this->adb_pollkbd(1);
+ m_adb_buffer[0] = m_adb_modifiers;
+ m_adb_buffer[1] = 0xff;
+ m_adb_datasize = 2;
+ }
break;
// get ID/handler
case 3:
- m_adb_buffer[0] = 0x60 | (m_adb_keybaddr&0xf); // SRQ enable, no exceptional event
- m_adb_buffer[1] = 0x01; // handler 1
+ m_adb_buffer[0] = 0x60 | (m_adb_keybaddr&0xf); // SRQ enable, no exceptional event
+ m_adb_buffer[1] = 0x01; // handler 1
m_adb_datasize = 2;
m_adb_keybinitialized = 1;
@@ -442,10 +442,10 @@ void mac_state::adb_talk()
break;
}
- if (adb_pollmouse())
- {
- m_adb_srqflag = true;
- }
+ if (adb_pollmouse())
+ {
+ m_adb_srqflag = true;
+ }
}
else
{
@@ -455,10 +455,10 @@ void mac_state::adb_talk()
m_adb_buffer[0] = m_adb_buffer[1] = 0;
m_adb_datasize = 0;
- if ((adb_pollkbd(0)) || (adb_pollmouse()))
- {
- m_adb_srqflag = true;
- }
+ if ((adb_pollkbd(0)) || (adb_pollmouse()))
+ {
+ m_adb_srqflag = true;
+ }
}
break;
}
@@ -471,7 +471,7 @@ void mac_state::adb_talk()
printf("Got LISTEN data %02x %02x for device %x reg %x\n", m_adb_command, m_adb_buffer[1], m_adb_listenaddr, m_adb_listenreg);
#endif
- m_adb_direction = 0;
+ m_adb_direction = 0;
if (m_adb_listenaddr == m_adb_mouseaddr)
{
@@ -500,135 +500,135 @@ TIMER_CALLBACK(mac_adb_tick)
{
mac_state *mac = machine.driver_data<mac_state>();
- if ((ADB_IS_EGRET_NONCLASS) || (ADB_IS_CUDA_NONCLASS))
- {
- switch (mac->m_adb_linestate)
- {
- case LST_SRQNODATA:
- mac->set_adb_line(ASSERT_LINE);
- mac->m_adb_linestate = LST_IDLE;
- break;
-
- case LST_TSTOPSTART:
- mac->set_adb_line(ASSERT_LINE);
- mac->m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
- mac->m_adb_linestate++;
- break;
-
- case LST_TSTOPSTARTa:
- mac->set_adb_line(CLEAR_LINE);
- mac->m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
- mac->m_adb_linestate++;
- break;
-
- case LST_STARTBIT:
- mac->set_adb_line(ASSERT_LINE);
- mac->m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
- mac->m_adb_linestate++;
- break;
-
- case LST_SENDBIT0:
- case LST_SENDBIT1:
- case LST_SENDBIT2:
- case LST_SENDBIT3:
- case LST_SENDBIT4:
- case LST_SENDBIT5:
- case LST_SENDBIT6:
- case LST_SENDBIT7:
- mac->set_adb_line(CLEAR_LINE);
- if (mac->m_adb_buffer[mac->m_adb_stream_ptr] & 0x80)
- {
+ if ((ADB_IS_EGRET_NONCLASS) || (ADB_IS_CUDA_NONCLASS))
+ {
+ switch (mac->m_adb_linestate)
+ {
+ case LST_SRQNODATA:
+ mac->set_adb_line(ASSERT_LINE);
+ mac->m_adb_linestate = LST_IDLE;
+ break;
+
+ case LST_TSTOPSTART:
+ mac->set_adb_line(ASSERT_LINE);
+ mac->m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
+ mac->m_adb_linestate++;
+ break;
+
+ case LST_TSTOPSTARTa:
+ mac->set_adb_line(CLEAR_LINE);
+ mac->m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
+ mac->m_adb_linestate++;
+ break;
+
+ case LST_STARTBIT:
+ mac->set_adb_line(ASSERT_LINE);
+ mac->m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
+ mac->m_adb_linestate++;
+ break;
+
+ case LST_SENDBIT0:
+ case LST_SENDBIT1:
+ case LST_SENDBIT2:
+ case LST_SENDBIT3:
+ case LST_SENDBIT4:
+ case LST_SENDBIT5:
+ case LST_SENDBIT6:
+ case LST_SENDBIT7:
+ mac->set_adb_line(CLEAR_LINE);
+ if (mac->m_adb_buffer[mac->m_adb_stream_ptr] & 0x80)
+ {
// printf("1 ");
- mac->m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
- }
- else
- {
+ mac->m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
+ }
+ else
+ {
// printf("0 ");
- mac->m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
- }
- mac->m_adb_linestate++;
- break;
-
- case LST_SENDBIT0a:
- case LST_SENDBIT1a:
- case LST_SENDBIT2a:
- case LST_SENDBIT3a:
- case LST_SENDBIT4a:
- case LST_SENDBIT5a:
- case LST_SENDBIT6a:
- mac->set_adb_line(ASSERT_LINE);
- if (mac->m_adb_buffer[mac->m_adb_stream_ptr] & 0x80)
- {
- mac->m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
- }
- else
- {
- mac->m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
- }
- mac->m_adb_buffer[mac->m_adb_stream_ptr] <<= 1;
- mac->m_adb_linestate++;
- break;
-
- case LST_SENDBIT7a:
- mac->set_adb_line(ASSERT_LINE);
- if (mac->m_adb_buffer[mac->m_adb_stream_ptr] & 0x80)
- {
+ mac->m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
+ }
+ mac->m_adb_linestate++;
+ break;
+
+ case LST_SENDBIT0a:
+ case LST_SENDBIT1a:
+ case LST_SENDBIT2a:
+ case LST_SENDBIT3a:
+ case LST_SENDBIT4a:
+ case LST_SENDBIT5a:
+ case LST_SENDBIT6a:
+ mac->set_adb_line(ASSERT_LINE);
+ if (mac->m_adb_buffer[mac->m_adb_stream_ptr] & 0x80)
+ {
+ mac->m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
+ }
+ else
+ {
+ mac->m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
+ }
+ mac->m_adb_buffer[mac->m_adb_stream_ptr] <<= 1;
+ mac->m_adb_linestate++;
+ break;
+
+ case LST_SENDBIT7a:
+ mac->set_adb_line(ASSERT_LINE);
+ if (mac->m_adb_buffer[mac->m_adb_stream_ptr] & 0x80)
+ {
// printf(" ");
- mac->m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
- }
- else
- {
+ mac->m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
+ }
+ else
+ {
// printf(" ");
- mac->m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
- }
-
- mac->m_adb_stream_ptr++;
- if (mac->m_adb_stream_ptr == mac->m_adb_datasize)
- {
- mac->m_adb_linestate++;
- }
- else
- {
- mac->m_adb_linestate = LST_SENDBIT0;
- }
- break;
-
- case LST_SENDSTOP:
- mac->set_adb_line(CLEAR_LINE);
- mac->m_adb_timer->adjust(attotime::from_ticks((57*2), 1000000));
- mac->m_adb_linestate++;
- break;
-
- case LST_SENDSTOPa:
- mac->set_adb_line(ASSERT_LINE);
- mac->m_adb_timer->adjust(attotime::never);
- mac->m_adb_linestate = LST_IDLE;
- break;
- }
- }
- else
- {
- // do one clock transition on CB1 to advance the VIA shifter
- mac->m_adb_extclock ^= 1;
- mac->m_via1->write_cb1(mac->m_adb_extclock);
- mac->m_adb_extclock ^= 1;
- mac->m_via1->write_cb1(mac->m_adb_extclock);
-
- mac->m_adb_timer_ticks--;
- if (!mac->m_adb_timer_ticks)
- {
- mac->m_adb_timer->adjust(attotime::never);
-
- if ((mac->m_adb_direction) && (ADB_IS_BITBANG))
- {
- mac->adb_talk();
- }
- }
- else
- {
- mac->m_adb_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(200)));
- }
- }
+ mac->m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
+ }
+
+ mac->m_adb_stream_ptr++;
+ if (mac->m_adb_stream_ptr == mac->m_adb_datasize)
+ {
+ mac->m_adb_linestate++;
+ }
+ else
+ {
+ mac->m_adb_linestate = LST_SENDBIT0;
+ }
+ break;
+
+ case LST_SENDSTOP:
+ mac->set_adb_line(CLEAR_LINE);
+ mac->m_adb_timer->adjust(attotime::from_ticks((57*2), 1000000));
+ mac->m_adb_linestate++;
+ break;
+
+ case LST_SENDSTOPa:
+ mac->set_adb_line(ASSERT_LINE);
+ mac->m_adb_timer->adjust(attotime::never);
+ mac->m_adb_linestate = LST_IDLE;
+ break;
+ }
+ }
+ else
+ {
+ // do one clock transition on CB1 to advance the VIA shifter
+ mac->m_adb_extclock ^= 1;
+ mac->m_via1->write_cb1(mac->m_adb_extclock);
+ mac->m_adb_extclock ^= 1;
+ mac->m_via1->write_cb1(mac->m_adb_extclock);
+
+ mac->m_adb_timer_ticks--;
+ if (!mac->m_adb_timer_ticks)
+ {
+ mac->m_adb_timer->adjust(attotime::never);
+
+ if ((mac->m_adb_direction) && (ADB_IS_BITBANG))
+ {
+ mac->adb_talk();
+ }
+ }
+ else
+ {
+ mac->m_adb_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(200)));
+ }
+ }
}
void mac_state::mac_adb_newaction(int state)
@@ -646,8 +646,8 @@ void mac_state::mac_adb_newaction(int state)
{
case ADB_STATE_NEW_COMMAND:
m_adb_command = m_adb_send = 0;
- m_adb_direction = 1; // Mac is shifting us a command
- m_adb_waiting_cmd = 1; // we're going to get a command
+ m_adb_direction = 1; // Mac is shifting us a command
+ m_adb_waiting_cmd = 1; // we're going to get a command
m_adb_irq_pending = 0;
m_adb_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(100)));
break;
@@ -712,13 +712,13 @@ TIMER_CALLBACK(mac_pmu_tick)
#if LOG_ADB
printf("PM: timer tick, lowering ACK\n");
#endif
- mac->m_pm_ack &= ~2; // lower ACK to handshake next step
+ mac->m_pm_ack &= ~2; // lower ACK to handshake next step
}
}
void mac_state::pmu_one_byte_reply(UINT8 result)
{
- m_pm_out[0] = m_pm_out[1] = 1; // length
+ m_pm_out[0] = m_pm_out[1] = 1; // length
m_pm_out[2] = result;
m_pm_slen = 3;
m_pmu_send_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(200)));
@@ -726,7 +726,7 @@ void mac_state::pmu_one_byte_reply(UINT8 result)
void mac_state::pmu_three_byte_reply(UINT8 result1, UINT8 result2, UINT8 result3)
{
- m_pm_out[0] = m_pm_out[1] = 3; // length
+ m_pm_out[0] = m_pm_out[1] = 3; // length
m_pm_out[2] = result1;
m_pm_out[3] = result2;
m_pm_out[4] = result3;
@@ -736,25 +736,25 @@ void mac_state::pmu_three_byte_reply(UINT8 result1, UINT8 result2, UINT8 result3
void mac_state::pmu_exec()
{
- m_pm_sptr = 0; // clear send pointer
- m_pm_slen = 0; // and send length
- m_pm_dptr = 0; // and receive pointer
+ m_pm_sptr = 0; // clear send pointer
+ m_pm_slen = 0; // and send length
+ m_pm_dptr = 0; // and receive pointer
// printf("PMU: Command %02x\n", mac->m_pm_cmd[0]);
switch (m_pm_cmd[0])
{
- case 0x10: // subsystem power and clock ctrl
+ case 0x10: // subsystem power and clock ctrl
break;
- case 0x20: // send ADB command (PMU must issue an IRQ on completion)
+ case 0x20: // send ADB command (PMU must issue an IRQ on completion)
#if 0
printf("PMU: Send ADB %02x %02x cmd %02x flag %02x data %02x %02x\n",
- m_pm_cmd[0], // 0x20
- m_pm_cmd[1], // ???
- m_pm_cmd[2], // adb flags (2 for autopoll active, 3 to reset bus?)
- m_pm_cmd[3], // length of ADB data
- m_pm_cmd[4], // adb data
- m_pm_cmd[5]);
+ m_pm_cmd[0], // 0x20
+ m_pm_cmd[1], // ???
+ m_pm_cmd[2], // adb flags (2 for autopoll active, 3 to reset bus?)
+ m_pm_cmd[3], // length of ADB data
+ m_pm_cmd[4], // adb data
+ m_pm_cmd[5]);
#endif
#if 0
@@ -777,7 +777,7 @@ void mac_state::pmu_exec()
m_adb_waiting_cmd = 1;
adb_talk();
- if ((m_pm_cmd[2] & 0xf) == 0xb) // LISTEN register 3 (remap)
+ if ((m_pm_cmd[2] & 0xf) == 0xb) // LISTEN register 3 (remap)
{
m_adb_waiting_cmd = 0;
m_adb_command = mac->m_pm_cmd[5];
@@ -815,10 +815,10 @@ void mac_state::pmu_exec()
#endif
break;
- case 0x21: // turn ADB auto-poll off (does this need a reply?)
+ case 0x21: // turn ADB auto-poll off (does this need a reply?)
break;
- case 0x28: // read ADB
+ case 0x28: // read ADB
if (m_adb_datasize > 0)
{
m_adb_datasize = 1; // hack
@@ -840,7 +840,7 @@ void mac_state::pmu_exec()
m_pm_out[2] = 0;
m_pm_out[3] = 0;
// m_pm_out[3] = m_pmu_last_adb_command;
- m_pm_out[4] = 1; // length of following data
+ m_pm_out[4] = 1; // length of following data
m_pm_out[5] = 0;
m_pm_slen = 6;
}
@@ -862,7 +862,7 @@ void mac_state::pmu_exec()
}
break;
- case 0x32: // write extended PRAM byte(s). cmd[2] = address, cmd[3] = length, cmd[4...] = data
+ case 0x32: // write extended PRAM byte(s). cmd[2] = address, cmd[3] = length, cmd[4...] = data
if ((m_pm_cmd[2] + m_pm_cmd[3]) < 0x100)
{
int i;
@@ -886,7 +886,7 @@ void mac_state::pmu_exec()
}
break;
- case 0x39: // read first 20 bytes of PRAM
+ case 0x39: // read first 20 bytes of PRAM
{
int i;
@@ -900,7 +900,7 @@ void mac_state::pmu_exec()
}
break;
- case 0x3a: // read extended PRAM byte(s). cmd[2] = address, cmd[3] = length
+ case 0x3a: // read extended PRAM byte(s). cmd[2] = address, cmd[3] = length
if ((m_pm_cmd[2] + m_pm_cmd[3]) < 0x100)
{
int i;
@@ -921,14 +921,14 @@ void mac_state::pmu_exec()
case 0x41:
break;
- case 0x58: // read internal modem status
+ case 0x58: // read internal modem status
pmu_one_byte_reply(0);
break;
- case 0x60: // set low power warning and cutoff battery levels
+ case 0x60: // set low power warning and cutoff battery levels
break;
- case 0x68: // read battery/charger level
+ case 0x68: // read battery/charger level
pmu_three_byte_reply(255, 255, 255);
break;
@@ -936,8 +936,8 @@ void mac_state::pmu_exec()
pmu_three_byte_reply(255, 255, 255);
break;
- case 0x6b: // read extended battery/charger level and status (wants an 8 byte reply)
- m_pm_out[0] = m_pm_out[1] = 8; // length
+ case 0x6b: // read extended battery/charger level and status (wants an 8 byte reply)
+ m_pm_out[0] = m_pm_out[1] = 8; // length
m_pm_out[2] = 255;
m_pm_out[3] = 255;
m_pm_out[4] = 255;
@@ -950,12 +950,12 @@ void mac_state::pmu_exec()
m_pmu_send_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(200)));
break;
- case 0x6c: // read battery ID
+ case 0x6c: // read battery ID
pmu_one_byte_reply(1);
break;
- case 0x78: // read interrupt flag
- if (ADB_IS_PM_VIA2_CLASS) // PB 140/170 use a "leaner" PMU protocol where you get the data for a PMU interrupt here
+ case 0x78: // read interrupt flag
+ if (ADB_IS_PM_VIA2_CLASS) // PB 140/170 use a "leaner" PMU protocol where you get the data for a PMU interrupt here
{
#if 0
if ((m_pmu_int_status&0xf0) == 0x10)
@@ -965,7 +965,7 @@ void mac_state::pmu_exec()
m_adb_datasize = 1; // hack
m_pm_out[0] = m_pm_out[1] = 2 + m_adb_datasize;
m_pm_out[2] = m_pmu_int_status; // ADB status in low nibble
- m_pm_out[3] = m_pmu_last_adb_command; // ADB command that was sent
+ m_pm_out[3] = m_pmu_last_adb_command; // ADB command that was sent
for (int i = 0; i < m_adb_datasize; i++)
{
m_pm_out[4+i] = 0; //m_adb_buffer[i];
@@ -984,8 +984,8 @@ void mac_state::pmu_exec()
{
m_pm_out[0] = m_pm_out[1] = 2;
m_pm_out[2] = m_pmu_int_status; // ADB status in low nibble
- m_pm_out[3] = m_pmu_last_adb_command; // ADB command that was sent OR 0x80 for extra error-ness
- m_pm_out[4] = 0; // return data
+ m_pm_out[3] = m_pmu_last_adb_command; // ADB command that was sent OR 0x80 for extra error-ness
+ m_pm_out[4] = 0; // return data
m_pm_slen = 4;
m_pmu_send_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(1500)));
}
@@ -999,8 +999,8 @@ void mac_state::pmu_exec()
{
m_pm_out[0] = m_pm_out[1] = 2;
m_pm_out[2] = m_pmu_int_status; // ADB status in low nibble
- m_pm_out[3] = m_pmu_last_adb_command; // ADB command that was sent OR 0x80 for extra error-ness
- m_pm_out[4] = 0; // return data
+ m_pm_out[3] = m_pmu_last_adb_command; // ADB command that was sent OR 0x80 for extra error-ness
+ m_pm_out[4] = 0; // return data
m_pm_slen = 4;
m_pmu_send_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(1500)));
}
@@ -1021,15 +1021,15 @@ void mac_state::pmu_exec()
case 0x90: // sound power control
break;
- case 0x98: // read sound power state
+ case 0x98: // read sound power state
pmu_one_byte_reply(1);
break;
- case 0xd8: // read A/D converter (not sure what this does)
+ case 0xd8: // read A/D converter (not sure what this does)
pmu_one_byte_reply(0);
break;
- case 0xe0: // write PMU internal RAM
+ case 0xe0: // write PMU internal RAM
break;
case 0xe8: // read PMU internal RAM (just return zeroes)
@@ -1051,7 +1051,7 @@ void mac_state::pmu_exec()
}
break;
- case 0xec: // PMU self-test (send 1 count byte + reply)
+ case 0xec: // PMU self-test (send 1 count byte + reply)
pmu_one_byte_reply(0);
break;
@@ -1104,7 +1104,7 @@ void mac_state::adb_vblank()
{
m_adb_irq_pending = 1;
m_adb_command = m_adb_send = 0;
- m_adb_timer_ticks = 1; // one tick should be sufficient to make it see the IRQ
+ m_adb_timer_ticks = 1; // one tick should be sufficient to make it see the IRQ
this->m_adb_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(100)));
m_adb_srq_switch = 1;
}
@@ -1134,7 +1134,7 @@ void mac_state::adb_vblank()
{
m_adb_irq_pending = 1;
m_adb_command = m_adb_send = 0;
- m_adb_timer_ticks = 1; // one tick should be sufficient to make it see the IRQ
+ m_adb_timer_ticks = 1; // one tick should be sufficient to make it see the IRQ
this->m_adb_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(100)));
m_adb_srq_switch = 1;
}
@@ -1147,7 +1147,7 @@ void mac_state::adb_reset()
int i;
m_adb_srq_switch = 0;
- m_adb_irq_pending = 0; // no interrupt
+ m_adb_irq_pending = 0; // no interrupt
m_adb_timer_ticks = 0;
m_adb_command = 0;
m_adb_extclock = 0;
@@ -1155,7 +1155,7 @@ void mac_state::adb_reset()
m_adb_waiting_cmd = 0;
m_adb_streaming = MCU_STREAMING_NONE;
m_adb_state = 0;
- m_adb_srqflag = false;
+ m_adb_srqflag = false;
m_pmu_poll = 0;
if (ADB_IS_BITBANG_CLASS)
{
@@ -1165,7 +1165,7 @@ void mac_state::adb_reset()
m_adb_datasize = 0;
m_adb_last_talk = -1;
- m_adb_linestate = 0;
+ m_adb_linestate = 0;
// mouse
m_adb_mouseaddr = 3;
@@ -1204,14 +1204,14 @@ WRITE_LINE_MEMBER(mac_state::adb_linechange_w)
"srqnodata"
};*/
- if (ADB_IS_EGRET)
- {
- dtime = m_egret->get_adb_dtime();
- }
- else if (ADB_IS_CUDA)
- {
+ if (ADB_IS_EGRET)
+ {
+ dtime = m_egret->get_adb_dtime();
+ }
+ else if (ADB_IS_CUDA)
+ {
dtime = m_cuda->get_adb_dtime();
- }
+ }
/* if (m_adb_linestate <= 12)
{
@@ -1222,162 +1222,161 @@ WRITE_LINE_MEMBER(mac_state::adb_linechange_w)
printf("linechange: %d -> %d, time %d (state %d)\n", state^1, state, dtime, m_adb_linestate);
}*/
- if ((m_adb_direction) && (m_adb_linestate == LST_TSTOP))
- {
- if (m_adb_stream_ptr & 1) // odd byte, can't end here
- {
+ if ((m_adb_direction) && (m_adb_linestate == LST_TSTOP))
+ {
+ if (m_adb_stream_ptr & 1) // odd byte, can't end here
+ {
// printf("critical linechange: odd, cont\n");
- m_adb_linestate = LST_BIT0;
- }
- else
- {
- if (dtime < 90)
- {
+ m_adb_linestate = LST_BIT0;
+ }
+ else
+ {
+ if (dtime < 90)
+ {
// printf("critical linechange: even, and it's another bit\n");
- m_adb_linestate = LST_BIT0;
- }
- }
- }
+ m_adb_linestate = LST_BIT0;
+ }
+ }
+ }
- switch (m_adb_linestate)
- {
- case LST_IDLE:
- if ((state) && (dtime >= 4500)) // reset
- {
+ switch (m_adb_linestate)
+ {
+ case LST_IDLE:
+ if ((state) && (dtime >= 4500)) // reset
+ {
// printf("ADB RESET\n");
- }
- else if ((state) && (dtime >= 1200)) // attention
- {
+ }
+ else if ((state) && (dtime >= 1200)) // attention
+ {
// printf("ADB ATTENTION\n");
- m_adb_waiting_cmd = 1;
- m_adb_direction = 0;
- m_adb_linestate++;
- }
- break;
+ m_adb_waiting_cmd = 1;
+ m_adb_direction = 0;
+ m_adb_linestate++;
+ }
+ break;
- case LST_ATTENTION:
- if ((!state) && (dtime >= 90)) // Tsync
- {
+ case LST_ATTENTION:
+ if ((!state) && (dtime >= 90)) // Tsync
+ {
// printf("ADB Tsync\n");
- m_adb_command = 0;
- m_adb_linestate++;
- }
- break;
-
- case LST_BIT0:
- case LST_BIT1:
- case LST_BIT2:
- case LST_BIT3:
- case LST_BIT4:
- case LST_BIT5:
- case LST_BIT6:
- case LST_BIT7:
- if (!state)
- {
- if (dtime >= 90) // "1" bit
- {
- m_adb_command |= 1;
- }
+ m_adb_command = 0;
+ m_adb_linestate++;
+ }
+ break;
+
+ case LST_BIT0:
+ case LST_BIT1:
+ case LST_BIT2:
+ case LST_BIT3:
+ case LST_BIT4:
+ case LST_BIT5:
+ case LST_BIT6:
+ case LST_BIT7:
+ if (!state)
+ {
+ if (dtime >= 90) // "1" bit
+ {
+ m_adb_command |= 1;
+ }
// printf("ADB bit %d\n", m_adb_command & 1);
- if (m_adb_linestate != LST_BIT7)
- {
- m_adb_command <<= 1;
- }
- else
- {
- if (m_adb_direction)
- {
+ if (m_adb_linestate != LST_BIT7)
+ {
+ m_adb_command <<= 1;
+ }
+ else
+ {
+ if (m_adb_direction)
+ {
// printf("listen byte[%d] = %02x\n", m_adb_stream_ptr, m_adb_command);
- m_adb_buffer[m_adb_stream_ptr++] = m_adb_command;
- m_adb_command = 0;
- }
- }
+ m_adb_buffer[m_adb_stream_ptr++] = m_adb_command;
+ m_adb_command = 0;
+ }
+ }
- m_adb_linestate++;
- }
- break;
+ m_adb_linestate++;
+ }
+ break;
- case LST_TSTOP:
- if (state)
- {
+ case LST_TSTOP:
+ if (state)
+ {
// printf("ADB TSTOP, command byte %02x\n", m_adb_command);
- if (m_adb_direction)
- {
- m_adb_command = m_adb_buffer[0];
- }
-
- m_adb_srqflag = false;
- adb_talk();
-
- if (!m_adb_srqflag)
- {
- set_adb_line(ASSERT_LINE);
- }
- else
- {
- set_adb_line(CLEAR_LINE);
- }
-
- if (m_adb_datasize > 0)
- {
+ if (m_adb_direction)
+ {
+ m_adb_command = m_adb_buffer[0];
+ }
+
+ m_adb_srqflag = false;
+ adb_talk();
+
+ if (!m_adb_srqflag)
+ {
+ set_adb_line(ASSERT_LINE);
+ }
+ else
+ {
+ set_adb_line(CLEAR_LINE);
+ }
+
+ if (m_adb_datasize > 0)
+ {
/* printf("Device has %d bytes of data: ", m_adb_datasize);
for (int i = 0; i < m_adb_datasize; i++)
{
printf("%02x ", m_adb_buffer[i]);
}*/
- m_adb_linestate = LST_TSTOPSTART; // T1t
- m_adb_timer->adjust(attotime::from_ticks(324/4, 1000000));
- m_adb_stream_ptr = 0;
- }
- else if (m_adb_direction) // if direction is set, we LISTENed to a valid device
- {
- m_adb_linestate = LST_WAITT1T;
- }
- else // no valid device targetted, time out
- {
- if (m_adb_srqflag)
- {
- m_adb_linestate = LST_SRQNODATA;
- m_adb_timer->adjust(attotime::from_ticks(486, 1000000)); // SRQ time
- }
- else
- {
- m_adb_linestate = LST_IDLE;
- }
- }
- }
- break;
+ m_adb_linestate = LST_TSTOPSTART; // T1t
+ m_adb_timer->adjust(attotime::from_ticks(324/4, 1000000));
+ m_adb_stream_ptr = 0;
+ }
+ else if (m_adb_direction) // if direction is set, we LISTENed to a valid device
+ {
+ m_adb_linestate = LST_WAITT1T;
+ }
+ else // no valid device targetted, time out
+ {
+ if (m_adb_srqflag)
+ {
+ m_adb_linestate = LST_SRQNODATA;
+ m_adb_timer->adjust(attotime::from_ticks(486, 1000000)); // SRQ time
+ }
+ else
+ {
+ m_adb_linestate = LST_IDLE;
+ }
+ }
+ }
+ break;
- case LST_WAITT1T:
- if ((!state) && (dtime >= 300)) // T1t
- {
+ case LST_WAITT1T:
+ if ((!state) && (dtime >= 300)) // T1t
+ {
// printf("ADB T1t\n");
- m_adb_linestate++;
- }
- break;
+ m_adb_linestate++;
+ }
+ break;
- case LST_RCVSTARTBIT:
- if ((!state) && (dtime >= 90)) // start
- {
+ case LST_RCVSTARTBIT:
+ if ((!state) && (dtime >= 90)) // start
+ {
// printf("ADB start\n");
- m_adb_linestate = LST_BIT0;
- m_adb_command = 0;
- }
- break;
- }
+ m_adb_linestate = LST_BIT0;
+ m_adb_command = 0;
+ }
+ break;
+ }
}
void mac_state::set_adb_line(int linestate)
{
- if (ADB_IS_EGRET)
- {
- m_egret->set_adb_line(linestate);
- }
- else if (ADB_IS_CUDA)
- {
- m_cuda->set_adb_line(linestate);
- }
+ if (ADB_IS_EGRET)
+ {
+ m_egret->set_adb_line(linestate);
+ }
+ else if (ADB_IS_CUDA)
+ {
+ m_cuda->set_adb_line(linestate);
+ }
}
-