summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author grullosgo <42551661+grullosgo@users.noreply.github.com>2019-05-17 23:35:37 -0300
committer R. Belmont <rb6502@users.noreply.github.com>2019-05-17 22:35:37 -0400
commit9f1a9b2385d86e5c6b731a158c1c9cce6c109ed3 (patch)
tree58b5f29caccd00e1eb02c63370593dd8724c61df
parent3c7e1ca7d0b7acd6383061d31e2f7f0c44cdd440 (diff)
cleaned up and standarized the code (#5069)
-rw-r--r--src/devices/machine/ds1994.cpp1252
1 files changed, 631 insertions, 621 deletions
diff --git a/src/devices/machine/ds1994.cpp b/src/devices/machine/ds1994.cpp
index 5d325753b14..8b379f6ba82 100644
--- a/src/devices/machine/ds1994.cpp
+++ b/src/devices/machine/ds1994.cpp
@@ -18,139 +18,139 @@
inline void ds1994_device::verboselog(int n_level, const char *s_fmt, ...)
{
- if ( VERBOSE_LEVEL >= n_level )
- {
- va_list v;
- char buf[32768];
- va_start(v, s_fmt);
- vsprintf(buf, s_fmt, v);
- va_end(v);
- logerror("ds1994 %s %s: %s", tag(), machine().describe_context(), buf);
- }
+ if (VERBOSE_LEVEL >= n_level)
+ {
+ va_list v;
+ char buf[32768];
+ va_start(v, s_fmt);
+ vsprintf(buf, s_fmt, v);
+ va_end(v);
+ logerror("ds1994 %s %s: %s", tag(), machine().describe_context(), buf);
+ }
}
// device type definition
DEFINE_DEVICE_TYPE(DS1994, ds1994_device, "ds1994", "DS1994 RTC + BACKUP RAM")
ds1994_device::ds1994_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, DS1994, tag, owner, clock), device_nvram_interface(mconfig, *this)
- , m_timer_main(nullptr)
- , m_timer_reset(nullptr)
- , m_timer_clock(nullptr)
- , m_ref_year(0)
- , m_ref_month(0)
- , m_ref_day(0)
- , m_address(0)
- , m_offset(0)
- , m_a1(0)
- , m_a2(0)
- , m_bit(0)
- , m_shift(0)
- , m_byte(0)
- , m_rx(false)
- , m_tx(false)
- , m_state_ptr(0)
+ : device_t(mconfig, DS1994, tag, owner, clock), device_nvram_interface(mconfig, *this)
+ , m_timer_main(nullptr)
+ , m_timer_reset(nullptr)
+ , m_timer_clock(nullptr)
+ , m_ref_year(0)
+ , m_ref_month(0)
+ , m_ref_day(0)
+ , m_address(0)
+ , m_offset(0)
+ , m_a1(0)
+ , m_a2(0)
+ , m_bit(0)
+ , m_shift(0)
+ , m_byte(0)
+ , m_rx(false)
+ , m_tx(false)
+ , m_state_ptr(0)
{
- memset(m_ram, 0, sizeof(m_ram));
+ memset(m_ram, 0, sizeof(m_ram));
}
void ds1994_device::device_start()
{
- // Reference time setup
- struct tm ref_tm;
-
- memset(&ref_tm, 0, sizeof(ref_tm));
- ref_tm.tm_year = m_ref_year - 1900;
- ref_tm.tm_mon = m_ref_month - 1;
- ref_tm.tm_mday = m_ref_day;
-
- time_t ref_time = mktime(&ref_tm);
-
- time_t current_time;
- time(&current_time);
- current_time -= ref_time;
-
- m_rtc[0] = 0x0;
- m_rtc[1] = (current_time >> 0) & 0xff;
- m_rtc[2] = (current_time >> 8) & 0xff;
- m_rtc[3] = (current_time >> 16) & 0xff;
- m_rtc[4] = (current_time >> 24) & 0xff;
-
- // 1-wire timmings
- t_samp = attotime::from_usec(30);
- t_rdv = attotime::from_usec(30);
- t_rstl = attotime::from_usec(480);
- t_pdh = attotime::from_usec(30);
- t_pdl = attotime::from_usec(120);
-
- // 1-wire states
- m_rx = true;
- m_tx = true;
-
- // 1-Wire related
- save_item(NAME(m_bit));
- save_item(NAME(m_byte));
- save_item(NAME(m_shift));
- save_item(NAME(m_rx));
- save_item(NAME(m_tx));
-
- // ds1994 specific
- save_item(NAME(m_rom));
- save_item(NAME(m_sram));
- save_item(NAME(m_ram));
- save_item(NAME(m_rtc));
- save_item(NAME(m_address));
- save_item(NAME(m_a1));
- save_item(NAME(m_a2));
- save_item(NAME(m_offset));
-
- // state machine
- save_item(NAME(m_state));
- save_item(NAME(m_state_ptr));
- for (auto & elem : m_state)
- elem = STATE_IDLE;
-
- // timers
- m_timer_main = timer_alloc(TIMER_MAIN);
- m_timer_reset = timer_alloc(TIMER_RESET);
- m_timer_clock = timer_alloc(TIMER_CLOCK);
-
- m_timer_clock->adjust(attotime::from_hz(256), 0, attotime::from_hz(256));
+ // Reference time setup
+ struct tm ref_tm;
+
+ memset(&ref_tm, 0, sizeof(ref_tm));
+ ref_tm.tm_year = m_ref_year - 1900;
+ ref_tm.tm_mon = m_ref_month - 1;
+ ref_tm.tm_mday = m_ref_day;
+
+ time_t ref_time = mktime(&ref_tm);
+
+ time_t current_time;
+ time(&current_time);
+ current_time -= ref_time;
+
+ m_rtc[0] = 0x0;
+ m_rtc[1] = (current_time >> 0) & 0xff;
+ m_rtc[2] = (current_time >> 8) & 0xff;
+ m_rtc[3] = (current_time >> 16) & 0xff;
+ m_rtc[4] = (current_time >> 24) & 0xff;
+
+ // 1-wire timmings
+ t_samp = attotime::from_usec(30);
+ t_rdv = attotime::from_usec(30);
+ t_rstl = attotime::from_usec(480);
+ t_pdh = attotime::from_usec(30);
+ t_pdl = attotime::from_usec(120);
+
+ // 1-wire states
+ m_rx = true;
+ m_tx = true;
+
+ // 1-Wire related
+ save_item(NAME(m_bit));
+ save_item(NAME(m_byte));
+ save_item(NAME(m_shift));
+ save_item(NAME(m_rx));
+ save_item(NAME(m_tx));
+
+ // ds1994 specific
+ save_item(NAME(m_rom));
+ save_item(NAME(m_sram));
+ save_item(NAME(m_ram));
+ save_item(NAME(m_rtc));
+ save_item(NAME(m_address));
+ save_item(NAME(m_a1));
+ save_item(NAME(m_a2));
+ save_item(NAME(m_offset));
+
+ // state machine
+ save_item(NAME(m_state));
+ save_item(NAME(m_state_ptr));
+ for (auto & elem : m_state)
+ elem = STATE_IDLE;
+
+ // timers
+ m_timer_main = timer_alloc(TIMER_MAIN);
+ m_timer_reset = timer_alloc(TIMER_RESET);
+ m_timer_clock = timer_alloc(TIMER_CLOCK);
+
+ m_timer_clock->adjust(attotime::from_hz(256), 0, attotime::from_hz(256));
}
void ds1994_device::device_reset()
{
- m_bit = 0;
- m_byte = 0;
- m_shift = 0;
- m_rx = true;
- m_tx = true;
- m_state_ptr = 0;
- m_state[m_state_ptr] = STATE_IDLE;
-
- memory_region *region = memregion(DEVICE_SELF);
- if (region != nullptr)
- {
- if (region->bytes() == ROM_SIZE+SPD_SIZE+DATA_SIZE+RTC_SIZE+REGS_SIZE)
- {
- memcpy(m_rom, region->base(), ROM_SIZE);
- memcpy(m_ram , region->base() + ROM_SIZE, SPD_SIZE);
- memcpy(m_sram, region->base() + ROM_SIZE+SPD_SIZE, DATA_SIZE);
- memcpy(m_rtc , region->base() + ROM_SIZE+SPD_SIZE+DATA_SIZE, RTC_SIZE);
- memcpy(m_regs, region->base() + ROM_SIZE+SPD_SIZE+DATA_SIZE+RTC_SIZE, REGS_SIZE);
- return;
- }
- verboselog(0, "ds1994 %s: Wrong region length for data, expected 0x%x, got 0x%x\n", tag(), ROM_SIZE+SPD_SIZE+DATA_SIZE+RTC_SIZE+REGS_SIZE, region->bytes());
- }
- else
- {
- verboselog(0, "ds1994 %s: Warning, no id provided, answer will be all zeroes.\n", tag());
- memset(m_rom, 0, ROM_SIZE);
- memset(m_ram, 0, SPD_SIZE);
- memset(m_sram, 0, DATA_SIZE);
- memset(m_rtc, 0, RTC_SIZE);
- memset(m_regs, 0, REGS_SIZE);
- }
+ m_bit = 0;
+ m_byte = 0;
+ m_shift = 0;
+ m_rx = true;
+ m_tx = true;
+ m_state_ptr = 0;
+ m_state[m_state_ptr] = STATE_IDLE;
+
+ memory_region *region = memregion(DEVICE_SELF);
+ if (region != nullptr)
+ {
+ if (region->bytes() == ROM_SIZE + SPD_SIZE + DATA_SIZE + RTC_SIZE + REGS_SIZE)
+ {
+ memcpy(m_rom, region->base(), ROM_SIZE);
+ memcpy(m_ram, region->base() + ROM_SIZE, SPD_SIZE);
+ memcpy(m_sram, region->base() + ROM_SIZE + SPD_SIZE, DATA_SIZE);
+ memcpy(m_rtc, region->base() + ROM_SIZE + SPD_SIZE + DATA_SIZE, RTC_SIZE);
+ memcpy(m_regs, region->base() + ROM_SIZE + SPD_SIZE + DATA_SIZE + RTC_SIZE, REGS_SIZE);
+ return;
+ }
+ verboselog(0, "ds1994 %s: Wrong region length for data, expected 0x%x, got 0x%x\n", tag(), ROM_SIZE + SPD_SIZE + DATA_SIZE + RTC_SIZE + REGS_SIZE, region->bytes());
+ }
+ else
+ {
+ verboselog(0, "ds1994 %s: Warning, no id provided, answer will be all zeroes.\n", tag());
+ memset(m_rom, 0, ROM_SIZE);
+ memset(m_ram, 0, SPD_SIZE);
+ memset(m_sram, 0, DATA_SIZE);
+ memset(m_rtc, 0, RTC_SIZE);
+ memset(m_regs, 0, REGS_SIZE);
+ }
}
/********************************************/
@@ -161,36 +161,36 @@ void ds1994_device::device_reset()
bool ds1994_device::one_wire_tx_bit(uint8_t value)
{
- if (!m_bit)
- {
- m_shift = value;
- verboselog(1, "one_wire_tx_bit: Byte to send %02x\n", m_shift);
- }
- m_tx = m_shift & 1;
- m_shift >>= 1;
- verboselog(1, "one_wire_tx_bit: State %d\n", m_tx);
- m_bit++;
- if (m_bit == 8) return true;
- else
- return false;
+ if (!m_bit)
+ {
+ m_shift = value;
+ verboselog(1, "one_wire_tx_bit: Byte to send %02x\n", m_shift);
+ }
+ m_tx = m_shift & 1;
+ m_shift >>= 1;
+ verboselog(1, "one_wire_tx_bit: State %d\n", m_tx);
+ m_bit++;
+ if (m_bit == 8) return true;
+ else
+ return false;
}
bool ds1994_device::one_wire_rx_bit(void)
{
- m_shift >>= 1;
- if (m_rx)
- {
- m_shift |= 0x80;
- }
- verboselog(1, "one_wire_rx_bit: State %d\n", m_rx);
- m_bit++;
- if (m_bit == 8)
- {
- verboselog(1, "one_wire_rx_bit: Byte Received %02x\n", m_shift);
- return true;
- }
- else
- return false;
+ m_shift >>= 1;
+ if (m_rx)
+ {
+ m_shift |= 0x80;
+ }
+ verboselog(1, "one_wire_rx_bit: State %d\n", m_rx);
+ m_bit++;
+ if (m_bit == 8)
+ {
+ verboselog(1, "one_wire_rx_bit: Byte Received %02x\n", m_shift);
+ return true;
+ }
+ else
+ return false;
}
/********************************************/
@@ -201,42 +201,42 @@ bool ds1994_device::one_wire_rx_bit(void)
void ds1994_device::ds1994_rom_cmd(void)
{
- verboselog(2, "timer_main state_rom_command\n");
- if (one_wire_rx_bit())
- {
- switch (m_shift)
- {
- case ROMCMD_READROM:
- verboselog(1, "timer_main rom_cmd readrom\n");
- m_bit = 0;
- m_byte = 0;
- m_state[0] = STATE_READROM;
- m_state_ptr = 0;
- break;
- case ROMCMD_SKIPROM:
- verboselog(1, "timer_main rom_cmd skiprom\n");
- m_bit = 0;
- m_byte = 0;
- m_state[0] = STATE_COMMAND;
- m_state_ptr = 0;
- break;
- case ROMCMD_MATCHROM:
- verboselog(1, "timer_main rom_cmd matchrom\n");
- m_bit = 0;
- m_byte = 0;
- m_state[0] = STATE_MATCHROM;
- m_state_ptr = 0;
- break;
- case ROMCMD_SEARCHROM:
- case ROMCMD_SEARCHINT:
- verboselog(0, "timer_main rom_command not implemented %02x\n", m_shift);
- m_state[m_state_ptr] = STATE_COMMAND;
- default:
- verboselog(0, "timer_main rom_command not found %02x\n", m_shift);
- m_state[m_state_ptr] = STATE_IDLE;
- break;
- }
- }
+ verboselog(2, "timer_main state_rom_command\n");
+ if (one_wire_rx_bit())
+ {
+ switch (m_shift)
+ {
+ case ROMCMD_READROM:
+ verboselog(1, "timer_main rom_cmd readrom\n");
+ m_bit = 0;
+ m_byte = 0;
+ m_state[0] = STATE_READROM;
+ m_state_ptr = 0;
+ break;
+ case ROMCMD_SKIPROM:
+ verboselog(1, "timer_main rom_cmd skiprom\n");
+ m_bit = 0;
+ m_byte = 0;
+ m_state[0] = STATE_COMMAND;
+ m_state_ptr = 0;
+ break;
+ case ROMCMD_MATCHROM:
+ verboselog(1, "timer_main rom_cmd matchrom\n");
+ m_bit = 0;
+ m_byte = 0;
+ m_state[0] = STATE_MATCHROM;
+ m_state_ptr = 0;
+ break;
+ case ROMCMD_SEARCHROM:
+ case ROMCMD_SEARCHINT:
+ verboselog(0, "timer_main rom_command not implemented %02x\n", m_shift);
+ m_state[m_state_ptr] = STATE_COMMAND;
+ default:
+ verboselog(0, "timer_main rom_command not found %02x\n", m_shift);
+ m_state[m_state_ptr] = STATE_IDLE;
+ break;
+ }
+ }
}
/********************************************/
@@ -247,62 +247,62 @@ void ds1994_device::ds1994_rom_cmd(void)
void ds1994_device::ds1994_cmd(void)
{
- verboselog(2, "timer_main state_command\n");
- if (one_wire_rx_bit())
- {
- switch (m_shift)
- {
- case COMMAND_READ_MEMORY:
- verboselog(1, "timer_main cmd read_memory\n");
- m_bit = 0;
- m_byte = 0;
- m_state[0] = STATE_ADDRESS1;
- m_state[1] = STATE_ADDRESS2;
- m_state[2] = STATE_INIT_COMMAND;
- m_state[3] = STATE_READ_MEMORY;
- m_state_ptr = 0;
- break;
- case COMMAND_WRITE_SCRATCHPAD:
- verboselog(1, "timer_main cmd write_scratchpad\n");
- m_bit = 0;
- m_byte = 0;
- m_offs_ro = false;
- m_state[0] = STATE_ADDRESS1;
- m_state[1] = STATE_ADDRESS2;
- m_state[2] = STATE_INIT_COMMAND;
- m_state[3] = STATE_WRITE_SCRATCHPAD;
- m_state_ptr = 0;
- break;
- case COMMAND_READ_SCRATCHPAD:
- verboselog(1, "timer_main cmd read_scratchpad\n");
- m_bit = 0;
- m_byte = 0;
- m_state[0] = STATE_TXADDRESS1;
- m_state[1] = STATE_TXADDRESS2;
- m_state[2] = STATE_TXOFFSET;
- m_state[3] = STATE_INIT_COMMAND;
- m_state[4] = STATE_READ_SCRATCHPAD;
- m_state_ptr = 0;
- break;
- case COMMAND_COPY_SCRATCHPAD:
- verboselog(1, "timer_main cmd copy_scratchpad\n");
- m_bit = 0;
- m_byte = 0;
- m_offs_ro = true;
- m_auth = true;
- m_state[0] = STATE_ADDRESS1;
- m_state[1] = STATE_ADDRESS2;
- m_state[2] = STATE_OFFSET;
- m_state[3] = STATE_INIT_COMMAND;
- m_state[4] = STATE_COPY_SCRATCHPAD;
- m_state_ptr = 0;
- break;
- default:
- verboselog(0, "timer_main command not handled %02x\n", m_shift);
- m_state[m_state_ptr] = STATE_IDLE;
- break;
- }
- }
+ verboselog(2, "timer_main state_command\n");
+ if (one_wire_rx_bit())
+ {
+ switch (m_shift)
+ {
+ case COMMAND_READ_MEMORY:
+ verboselog(1, "timer_main cmd read_memory\n");
+ m_bit = 0;
+ m_byte = 0;
+ m_state[0] = STATE_ADDRESS1;
+ m_state[1] = STATE_ADDRESS2;
+ m_state[2] = STATE_INIT_COMMAND;
+ m_state[3] = STATE_READ_MEMORY;
+ m_state_ptr = 0;
+ break;
+ case COMMAND_WRITE_SCRATCHPAD:
+ verboselog(1, "timer_main cmd write_scratchpad\n");
+ m_bit = 0;
+ m_byte = 0;
+ m_offs_ro = false;
+ m_state[0] = STATE_ADDRESS1;
+ m_state[1] = STATE_ADDRESS2;
+ m_state[2] = STATE_INIT_COMMAND;
+ m_state[3] = STATE_WRITE_SCRATCHPAD;
+ m_state_ptr = 0;
+ break;
+ case COMMAND_READ_SCRATCHPAD:
+ verboselog(1, "timer_main cmd read_scratchpad\n");
+ m_bit = 0;
+ m_byte = 0;
+ m_state[0] = STATE_TXADDRESS1;
+ m_state[1] = STATE_TXADDRESS2;
+ m_state[2] = STATE_TXOFFSET;
+ m_state[3] = STATE_INIT_COMMAND;
+ m_state[4] = STATE_READ_SCRATCHPAD;
+ m_state_ptr = 0;
+ break;
+ case COMMAND_COPY_SCRATCHPAD:
+ verboselog(1, "timer_main cmd copy_scratchpad\n");
+ m_bit = 0;
+ m_byte = 0;
+ m_offs_ro = true;
+ m_auth = true;
+ m_state[0] = STATE_ADDRESS1;
+ m_state[1] = STATE_ADDRESS2;
+ m_state[2] = STATE_OFFSET;
+ m_state[3] = STATE_INIT_COMMAND;
+ m_state[4] = STATE_COPY_SCRATCHPAD;
+ m_state_ptr = 0;
+ break;
+ default:
+ verboselog(0, "timer_main command not handled %02x\n", m_shift);
+ m_state[m_state_ptr] = STATE_IDLE;
+ break;
+ }
+ }
}
/********************************************/
@@ -313,28 +313,33 @@ void ds1994_device::ds1994_cmd(void)
uint8_t ds1994_device::ds1994_readmem()
{
- if (m_address < 0x200)
- {
- return m_sram[m_address];
- }
- else
- if (m_address >= 0x202 && m_address <= 0x206)
- {
- return m_rtc[m_address - 0x202];
- }
- return 0;
+ if (m_address < 0x200)
+ {
+ return m_sram[m_address];
+ }
+ else
+ {
+ if (m_address >= 0x202 && m_address <= 0x206)
+ {
+ return m_rtc[m_address - 0x202];
+ }
+ }
+ return 0;
}
-void ds1994_device::ds1994_writemem(uint8_t value) {
- if (m_address < 0x200)
- {
- m_sram[m_address] = value;
- }
- else
- if (m_address >= 0x202 && m_address <= 0x206)
- {
- m_rtc[m_address - 0x202] = value;
- }
+void ds1994_device::ds1994_writemem(uint8_t value)
+{
+ if (m_address < 0x200)
+ {
+ m_sram[m_address] = value;
+ }
+ else
+ {
+ if (m_address >= 0x202 && m_address <= 0x206)
+ {
+ m_rtc[m_address - 0x202] = value;
+ }
+ }
}
/*************************************************/
@@ -345,228 +350,230 @@ void ds1994_device::ds1994_writemem(uint8_t value) {
void ds1994_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
- switch (id)
- {
- case TIMER_CLOCK:
- for (auto & elem : m_rtc)
- {
- elem++;
- if (elem != 0)
- {
- break;
- }
- }
- break;
- case TIMER_RESET:
- verboselog(1, "timer_reset\n");
- m_state[m_state_ptr] = STATE_RESET;
- m_timer_reset->adjust(attotime::never);
- break;
- case TIMER_MAIN:
- switch (m_state[m_state_ptr])
- {
- case STATE_RESET1:
- verboselog(2, "timer_main state_reset1 %d\n", m_rx);
- m_tx = false;
- m_state[m_state_ptr] = STATE_RESET2;
- m_timer_main->adjust(t_pdl);
- break;
- case STATE_RESET2:
- verboselog(2, "timer_main state_reset2 %d\n", m_rx);
- m_tx = true;
- m_bit = 0;
- m_shift = 0;
- m_state[m_state_ptr] = STATE_ROMCMD;
- break;
- case STATE_ROMCMD:
- ds1994_rom_cmd();
- break;
- case STATE_COMMAND:
- ds1994_cmd();
- break;
- case STATE_MATCHROM:
- verboselog(2, "timer_main state_matchrom - Data to match: <- %d\n", m_rx);
- if (one_wire_rx_bit())
- {
- if (m_rom[7- m_byte] == m_shift)
- {
- m_byte++;
- m_bit = 0;
- verboselog(2, "timer_main state_matchrom: datamatch %x - byte=%d\n", m_shift, m_byte);
- }
- else
- {
- m_state[m_state_ptr] = STATE_IDLE;
- verboselog(1, "timer_main state_matchrom: no match rx=%x <> mem=%x - byte:%d\n", m_shift, m_rom[7 - m_byte], m_byte);
- }
- }
- if (m_byte == ROM_SIZE)
- {
- verboselog(2, "timer_main matchrom finished\n");
- m_state[m_state_ptr] = STATE_COMMAND;
- }
- break;
- case STATE_ADDRESS1:
- verboselog(2, "timer_main state_address1\n");
- if (one_wire_rx_bit())
- {
- m_bit = 0;
- if (m_offs_ro)
- {
- if (m_a1 != m_shift) m_auth = false;
- verboselog(1, "timer_main state_address1 - TA1=%02x - Auth_Code 1=%02x\n", m_a1, m_shift);
- }
- else
- {
- m_a1 = m_shift & 0xff;
- verboselog(2, "timer_main state_address1 - Address1=%02x\n", m_a1);
- }
- m_state_ptr++;
- }
- break;
- case STATE_ADDRESS2:
- verboselog(2, "timer_main state_address2\n");
- if (one_wire_rx_bit())
- {
- m_bit = 0;
- if (m_offs_ro)
- {
- if ( m_a2 != m_shift ) m_auth = false;
- verboselog(1, "timer_main state_address1 - TA2=%02x - Auth_Code 2=%02x\n", m_a1, m_shift);
- }
- else
- {
- m_a2 = m_shift & 0xff;
- verboselog(2, "timer_main state_address2 - Address2=%02x\n", m_a2);
- }
- m_state_ptr++;
- }
- break;
- case STATE_OFFSET:
- verboselog(2, "timer_main state_offset\n");
- if (one_wire_rx_bit())
- {
- m_bit = 0;
- if (m_offs_ro)
- {
- if (m_a2 != m_shift) m_auth = false;
- verboselog(1, "timer_main state_address1 - OFS_ES=%02x - Auth_Code 3=%02x\n", m_offset, m_shift);
- }
- else
- {
- m_offset = m_shift & 0x1f;
- verboselog(2, "timer_main state_address2 - Offset=%02x\n", m_offset);
- }
- m_state_ptr++;
- }
- break;
- case STATE_WRITE_SCRATCHPAD:
- verboselog(2, "timer_main state_write_scratchpad\n");
- if (one_wire_rx_bit())
- {
- m_bit = 0;
- m_ram[m_offset & 0x1f] = m_shift & 0xff;
- m_offset++;
- }
- verboselog(2, "timer_main state_write_scratchpad %d Offs=%02x\n", m_rx, m_offset);
- break;
- case STATE_READROM:
- m_tx = true;
- if (m_byte == ROM_SIZE)
- {
- verboselog(1, "timer_main readrom finished\n");
- m_state[m_state_ptr] = STATE_COMMAND;
- }
- else
- verboselog(2, "timer_main readrom window closed\n");
- break;
- case STATE_TXADDRESS1:
- m_tx = true;
- if (m_byte == 1)
- {
- verboselog(1, "timer_main txaddress1 finished m_byte=%d\n", m_byte);
- m_byte = 0;
- m_state_ptr++;
- }
- else
- verboselog(2, "timer_main txaddress1 window closed\n");
- break;
- case STATE_TXADDRESS2:
- m_tx = true;
- if (m_byte == 1)
- {
- verboselog(1, "timer_main txaddress2 finished m_byte=%d\n", m_byte);
- m_byte = 0;
- m_state_ptr++;
- }
- else
- verboselog(2, "timer_main txaddress2 window closed\n");
- break;
- case STATE_TXOFFSET:
- m_tx = true;
- if (m_byte == 1)
- {
- verboselog(1, "timer_main txoffset finished - m_byte=%d\n", m_byte);
- m_byte = 0;
- m_state_ptr++;
- }
- else
- verboselog(2, "timer_main txoffset window closed\n");
- break;
- case STATE_READ_MEMORY:
- verboselog(2, "timer_main state_readmemory\n");
- break;
- case STATE_COPY_SCRATCHPAD:
- verboselog(2, "timer_main state_copy_scratchpad\n");
- break;
- case STATE_READ_SCRATCHPAD:
- verboselog(2, "timer_main state_read_scratchpad\n");
- break;
- default:
- verboselog(0, "timer_main state not handled: %d\n", m_state[m_state_ptr]);
- break;
- }
- if (m_state[m_state_ptr] == STATE_INIT_COMMAND)
- {
- switch (m_state[m_state_ptr + 1])
- {
- case STATE_IDLE:
- case STATE_COMMAND:
- case STATE_ADDRESS1:
- case STATE_ADDRESS2:
- case STATE_OFFSET:
- break;
- case STATE_READ_MEMORY:
- verboselog(2, "timer_main (init_cmd) -> state_read_memory - set address\n");
- m_address = (m_a2 << 8) | m_a1;
- break;
- case STATE_WRITE_SCRATCHPAD:
- verboselog(2, "timer_main (init_cmd) -> state_write_scratchpad - set address\n");
- m_offs_ro = false;
- m_offset = 0;
- break;
- case STATE_READ_SCRATCHPAD:
- verboselog(2, "timer_main (init_cmd) -> state_read_scratchpad - set address\n");
- m_address = 0;
- break;
- case STATE_COPY_SCRATCHPAD:
- verboselog(2, "timer_main (init_cmd) -> state_copy_scratchpad - do copy\n");
- if (m_auth)
- {
- m_address = (m_a2 << 8) | m_a1;
- for (int i = 0; i <= m_offset; i++)
- {
- ds1994_writemem(m_ram[i]);
- m_address++;
- }
- }
- else
- verboselog(1, "timer_main (init_cmd) -> state_copy_scratchpad - Auth-Rejected\n");
- break;
- }
- m_state_ptr++;
- }
- }
+ switch (id)
+ {
+ case TIMER_CLOCK:
+ for (auto & elem : m_rtc)
+ {
+ elem++;
+ if (elem != 0)
+ {
+ break;
+ }
+ }
+ break;
+ case TIMER_RESET:
+ verboselog(1, "timer_reset\n");
+ m_state[m_state_ptr] = STATE_RESET;
+ m_timer_reset->adjust(attotime::never);
+ break;
+ case TIMER_MAIN:
+ switch (m_state[m_state_ptr])
+ {
+ case STATE_RESET1:
+ verboselog(2, "timer_main state_reset1 %d\n", m_rx);
+ m_tx = false;
+ m_state[m_state_ptr] = STATE_RESET2;
+ m_timer_main->adjust(t_pdl);
+ break;
+ case STATE_RESET2:
+ verboselog(2, "timer_main state_reset2 %d\n", m_rx);
+ m_tx = true;
+ m_bit = 0;
+ m_shift = 0;
+ m_state[m_state_ptr] = STATE_ROMCMD;
+ break;
+ case STATE_ROMCMD:
+ ds1994_rom_cmd();
+ break;
+ case STATE_COMMAND:
+ ds1994_cmd();
+ break;
+ case STATE_MATCHROM:
+ verboselog(2, "timer_main state_matchrom - Data to match: <- %d\n", m_rx);
+ if (one_wire_rx_bit())
+ {
+ if (m_rom[7- m_byte] == m_shift)
+ {
+ m_byte++;
+ m_bit = 0;
+ verboselog(2, "timer_main state_matchrom: datamatch %x - byte=%d\n", m_shift, m_byte);
+ }
+ else
+ {
+ m_state[m_state_ptr] = STATE_IDLE;
+ verboselog(1, "timer_main state_matchrom: no match rx=%x <> mem=%x - byte:%d\n", m_shift, m_rom[7 - m_byte], m_byte);
+ }
+ }
+ if (m_byte == ROM_SIZE)
+ {
+ verboselog(2, "timer_main matchrom finished\n");
+ m_state[m_state_ptr] = STATE_COMMAND;
+ }
+ break;
+ case STATE_ADDRESS1:
+ verboselog(2, "timer_main state_address1\n");
+ if (one_wire_rx_bit())
+ {
+ m_bit = 0;
+ if (m_offs_ro)
+ {
+ if (m_a1 != m_shift) m_auth = false;
+ verboselog(1, "timer_main state_address1 - TA1=%02x - Auth_Code 1=%02x\n", m_a1, m_shift);
+ }
+ else
+ {
+ m_a1 = m_shift & 0xff;
+ verboselog(2, "timer_main state_address1 - Address1=%02x\n", m_a1);
+ }
+ m_state_ptr++;
+ }
+ break;
+ case STATE_ADDRESS2:
+ verboselog(2, "timer_main state_address2\n");
+ if (one_wire_rx_bit())
+ {
+ m_bit = 0;
+ if (m_offs_ro)
+ {
+ if ( m_a2 != m_shift )
+ m_auth = false;
+ verboselog(1, "timer_main state_address1 - TA2=%02x - Auth_Code 2=%02x\n", m_a1, m_shift);
+ }
+ else
+ {
+ m_a2 = m_shift & 0xff;
+ verboselog(2, "timer_main state_address2 - Address2=%02x\n", m_a2);
+ }
+ m_state_ptr++;
+ }
+ break;
+ case STATE_OFFSET:
+ verboselog(2, "timer_main state_offset\n");
+ if (one_wire_rx_bit())
+ {
+ m_bit = 0;
+ if (m_offs_ro)
+ {
+ if (m_a2 != m_shift)
+ m_auth = false;
+ verboselog(1, "timer_main state_address1 - OFS_ES=%02x - Auth_Code 3=%02x\n", m_offset, m_shift);
+ }
+ else
+ {
+ m_offset = m_shift & 0x1f;
+ verboselog(2, "timer_main state_address2 - Offset=%02x\n", m_offset);
+ }
+ m_state_ptr++;
+ }
+ break;
+ case STATE_WRITE_SCRATCHPAD:
+ verboselog(2, "timer_main state_write_scratchpad\n");
+ if (one_wire_rx_bit())
+ {
+ m_bit = 0;
+ m_ram[m_offset & 0x1f] = m_shift & 0xff;
+ m_offset++;
+ }
+ verboselog(2, "timer_main state_write_scratchpad %d Offs=%02x\n", m_rx, m_offset);
+ break;
+ case STATE_READROM:
+ m_tx = true;
+ if (m_byte == ROM_SIZE)
+ {
+ verboselog(1, "timer_main readrom finished\n");
+ m_state[m_state_ptr] = STATE_COMMAND;
+ }
+ else
+ verboselog(2, "timer_main readrom window closed\n");
+ break;
+ case STATE_TXADDRESS1:
+ m_tx = true;
+ if (m_byte == 1)
+ {
+ verboselog(1, "timer_main txaddress1 finished m_byte=%d\n", m_byte);
+ m_byte = 0;
+ m_state_ptr++;
+ }
+ else
+ verboselog(2, "timer_main txaddress1 window closed\n");
+ break;
+ case STATE_TXADDRESS2:
+ m_tx = true;
+ if (m_byte == 1)
+ {
+ verboselog(1, "timer_main txaddress2 finished m_byte=%d\n", m_byte);
+ m_byte = 0;
+ m_state_ptr++;
+ }
+ else
+ verboselog(2, "timer_main txaddress2 window closed\n");
+ break;
+ case STATE_TXOFFSET:
+ m_tx = true;
+ if (m_byte == 1)
+ {
+ verboselog(1, "timer_main txoffset finished - m_byte=%d\n", m_byte);
+ m_byte = 0;
+ m_state_ptr++;
+ }
+ else
+ verboselog(2, "timer_main txoffset window closed\n");
+ break;
+ case STATE_READ_MEMORY:
+ verboselog(2, "timer_main state_readmemory\n");
+ break;
+ case STATE_COPY_SCRATCHPAD:
+ verboselog(2, "timer_main state_copy_scratchpad\n");
+ break;
+ case STATE_READ_SCRATCHPAD:
+ verboselog(2, "timer_main state_read_scratchpad\n");
+ break;
+ default:
+ verboselog(0, "timer_main state not handled: %d\n", m_state[m_state_ptr]);
+ break;
+ }
+ if (m_state[m_state_ptr] == STATE_INIT_COMMAND)
+ {
+ switch (m_state[m_state_ptr + 1])
+ {
+ case STATE_IDLE:
+ case STATE_COMMAND:
+ case STATE_ADDRESS1:
+ case STATE_ADDRESS2:
+ case STATE_OFFSET:
+ break;
+ case STATE_READ_MEMORY:
+ verboselog(2, "timer_main (init_cmd) -> state_read_memory - set address\n");
+ m_address = (m_a2 << 8) | m_a1;
+ break;
+ case STATE_WRITE_SCRATCHPAD:
+ verboselog(2, "timer_main (init_cmd) -> state_write_scratchpad - set address\n");
+ m_offs_ro = false;
+ m_offset = 0;
+ break;
+ case STATE_READ_SCRATCHPAD:
+ verboselog(2, "timer_main (init_cmd) -> state_read_scratchpad - set address\n");
+ m_address = 0;
+ break;
+ case STATE_COPY_SCRATCHPAD:
+ verboselog(2, "timer_main (init_cmd) -> state_copy_scratchpad - do copy\n");
+ if (m_auth)
+ {
+ m_address = (m_a2 << 8) | m_a1;
+ for (int i = 0; i <= m_offset; i++)
+ {
+ ds1994_writemem(m_ram[i]);
+ m_address++;
+ }
+ }
+ else
+ verboselog(1, "timer_main (init_cmd) -> state_copy_scratchpad - Auth-Rejected\n");
+ break;
+ }
+ m_state_ptr++;
+ }
+ }
}
/*********************/
@@ -577,132 +584,135 @@ void ds1994_device::device_timer(emu_timer &timer, device_timer_id id, int param
WRITE_LINE_MEMBER(ds1994_device::write)
{
- verboselog(1, "write(%d)\n", state);
- if (!state && m_rx)
- {
- switch (m_state[m_state_ptr])
- {
- case STATE_IDLE:
- case STATE_INIT_COMMAND:
- break;
- case STATE_ROMCMD:
- verboselog(2, "state_romcommand\n");
- m_timer_main->adjust(t_samp);
- break;
- case STATE_COMMAND:
- verboselog(2, "state_command\n");
- m_timer_main->adjust(t_samp);
- break;
- case STATE_ADDRESS1:
- verboselog(2, "state_address1\n");
- m_timer_main->adjust(t_samp);
- break;
- case STATE_ADDRESS2:
- verboselog(2, "state_address2\n");
- m_timer_main->adjust(t_samp);
- break;
- case STATE_OFFSET:
- verboselog(2, "state_offset\n");
- m_timer_main->adjust(t_samp);
- break;
- case STATE_TXADDRESS1:
- verboselog(2, "state_txaddress1\n");
- if (one_wire_tx_bit(m_a1))
- {
- m_bit = 0;
- m_byte++;
- }
- m_timer_main->adjust(t_rdv);
- break;
- case STATE_TXADDRESS2:
- verboselog(2, "state_txaddress2\n");
- if (one_wire_tx_bit(m_a2))
- {
- m_bit = 0;
- m_byte++;
- }
- m_timer_main->adjust(t_rdv);
- break;
- case STATE_TXOFFSET:
- verboselog(2, "state_txoffset\n");
- if (one_wire_tx_bit(m_offset))
- {
- m_bit = 0;
- m_byte++;
- }
- m_timer_main->adjust(t_rdv);
- break;
- case STATE_READROM:
- verboselog(2, "state_readrom\n");
- if (one_wire_tx_bit(m_rom[7 - m_byte]))
- {
- m_bit = 0;
- m_byte++;
- }
- m_timer_main->adjust(t_rdv);
- break;
- case STATE_READ_MEMORY:
- verboselog(2, "state_read_memory\n");
- if (one_wire_tx_bit(ds1994_readmem()))
- {
- m_bit = 0;
- if ( m_address < DATA_SIZE+RTC_SIZE+REGS_SIZE ) m_address++;
- else
- m_tx = true;
- }
- m_timer_main->adjust(t_rdv);
- break;
- case STATE_MATCHROM:
- verboselog(2, "state_matchrom\n");
- m_timer_main->adjust(t_rdv);
- break;
- case STATE_COPY_SCRATCHPAD:
- if ( m_auth )
- {
- verboselog(2, "state_copy_scratchpad Auth_Code Match: %d\n", m_tx);
- m_tx = true;
- m_auth = false;
- }
- else
- {
- m_tx = false;
- verboselog(1, "state_copy_scratchpad Auth_Code No Match: %d\n", m_tx);
- }
- m_timer_main->adjust(t_rdv);
- break;
- case STATE_WRITE_SCRATCHPAD:
- verboselog(2, "state_write_scratchpad\n");
- m_timer_main->adjust(t_samp);
- break;
- case STATE_READ_SCRATCHPAD:
- verboselog(2, "state_read_scratchpad\n");
- if (one_wire_tx_bit(m_ram[m_address]))
- {
- m_bit = 0;
- if ( m_address <= m_offset ) m_address++;
- else
- m_tx = true;
- }
- m_timer_main->adjust(t_rdv);
- break;
- default:
- verboselog(0, "state not handled: %d\n", m_state[m_state_ptr]);
- break;
- }
- m_timer_reset->adjust(t_rstl);
- }
- else if (state && !m_rx)
- {
- switch (m_state[m_state_ptr])
- {
- case STATE_RESET:
- m_state[m_state_ptr] = STATE_RESET1;
- m_timer_main->adjust(t_pdh);
- break;
- }
- m_timer_reset->adjust(attotime::never);
- }
- m_rx = state;
+ verboselog(1, "write(%d)\n", state);
+ if (!state && m_rx)
+ {
+ switch (m_state[m_state_ptr])
+ {
+ case STATE_IDLE:
+ case STATE_INIT_COMMAND:
+ break;
+ case STATE_ROMCMD:
+ verboselog(2, "state_romcommand\n");
+ m_timer_main->adjust(t_samp);
+ break;
+ case STATE_COMMAND:
+ verboselog(2, "state_command\n");
+ m_timer_main->adjust(t_samp);
+ break;
+ case STATE_ADDRESS1:
+ verboselog(2, "state_address1\n");
+ m_timer_main->adjust(t_samp);
+ break;
+ case STATE_ADDRESS2:
+ verboselog(2, "state_address2\n");
+ m_timer_main->adjust(t_samp);
+ break;
+ case STATE_OFFSET:
+ verboselog(2, "state_offset\n");
+ m_timer_main->adjust(t_samp);
+ break;
+ case STATE_TXADDRESS1:
+ verboselog(2, "state_txaddress1\n");
+ if (one_wire_tx_bit(m_a1))
+ {
+ m_bit = 0;
+ m_byte++;
+ }
+ m_timer_main->adjust(t_rdv);
+ break;
+ case STATE_TXADDRESS2:
+ verboselog(2, "state_txaddress2\n");
+ if (one_wire_tx_bit(m_a2))
+ {
+ m_bit = 0;
+ m_byte++;
+ }
+ m_timer_main->adjust(t_rdv);
+ break;
+ case STATE_TXOFFSET:
+ verboselog(2, "state_txoffset\n");
+ if (one_wire_tx_bit(m_offset))
+ {
+ m_bit = 0;
+ m_byte++;
+ }
+ m_timer_main->adjust(t_rdv);
+ break;
+ case STATE_READROM:
+ verboselog(2, "state_readrom\n");
+ if (one_wire_tx_bit(m_rom[7 - m_byte]))
+ {
+ m_bit = 0;
+ m_byte++;
+ }
+ m_timer_main->adjust(t_rdv);
+ break;
+ case STATE_READ_MEMORY:
+ verboselog(2, "state_read_memory\n");
+ if (one_wire_tx_bit(ds1994_readmem()))
+ {
+ m_bit = 0;
+ if (m_address < DATA_SIZE + RTC_SIZE + REGS_SIZE)
+ m_address++;
+ else
+ m_tx = true;
+ }
+ m_timer_main->adjust(t_rdv);
+ break;
+ case STATE_MATCHROM:
+ verboselog(2, "state_matchrom\n");
+ m_timer_main->adjust(t_rdv);
+ break;
+ case STATE_COPY_SCRATCHPAD:
+ if (m_auth)
+ {
+ verboselog(2, "state_copy_scratchpad Auth_Code Match: %d\n", m_tx);
+ m_tx = true;
+ m_auth = false;
+ }
+ else
+ {
+ m_tx = false;
+ verboselog(1, "state_copy_scratchpad Auth_Code No Match: %d\n", m_tx);
+ }
+ m_timer_main->adjust(t_rdv);
+ break;
+ case STATE_WRITE_SCRATCHPAD:
+ verboselog(2, "state_write_scratchpad\n");
+ m_timer_main->adjust(t_samp);
+ break;
+ case STATE_READ_SCRATCHPAD:
+ verboselog(2, "state_read_scratchpad\n");
+ if (one_wire_tx_bit(m_ram[m_address]))
+ {
+ m_bit = 0;
+ if (m_address <= m_offset)
+ m_address++;
+ else
+ m_tx = true;
+ }
+ m_timer_main->adjust(t_rdv);
+ break;
+ default:
+ verboselog(0, "state not handled: %d\n", m_state[m_state_ptr]);
+ break;
+ }
+ m_timer_reset->adjust(t_rstl);
+ }
+ else
+ if (state && !m_rx)
+ {
+ switch (m_state[m_state_ptr])
+ {
+ case STATE_RESET:
+ m_state[m_state_ptr] = STATE_RESET1;
+ m_timer_main->adjust(t_pdh);
+ break;
+ }
+ m_timer_reset->adjust(attotime::never);
+ }
+ m_rx = state;
}
/*********************/
@@ -713,8 +723,8 @@ WRITE_LINE_MEMBER(ds1994_device::write)
READ_LINE_MEMBER(ds1994_device::read)
{
- verboselog(2, "read %d\n", m_tx && m_rx);
- return m_tx && m_rx;
+ verboselog(2, "read %d\n", m_tx && m_rx);
+ return m_tx && m_rx;
}
//-------------------------------------------------
@@ -724,11 +734,11 @@ READ_LINE_MEMBER(ds1994_device::read)
void ds1994_device::nvram_default()
{
- memset(m_rom, 0, ROM_SIZE);
- memset(m_ram, 0, SPD_SIZE);
- memset(m_sram, 0, DATA_SIZE);
- memset(m_rtc, 0, RTC_SIZE);
- memset(m_regs, 0, REGS_SIZE);
+ memset(m_rom, 0, ROM_SIZE);
+ memset(m_ram, 0, SPD_SIZE);
+ memset(m_sram, 0, DATA_SIZE);
+ memset(m_rtc, 0, RTC_SIZE);
+ memset(m_regs, 0, REGS_SIZE);
}
//-------------------------------------------------
@@ -738,11 +748,11 @@ void ds1994_device::nvram_default()
void ds1994_device::nvram_read(emu_file &file)
{
- file.read(m_rom, ROM_SIZE);
- file.read(m_ram, SPD_SIZE);
- file.read(m_sram, DATA_SIZE);
- file.read(m_rtc, RTC_SIZE);
- file.read(m_regs, REGS_SIZE);
+ file.read(m_rom, ROM_SIZE);
+ file.read(m_ram, SPD_SIZE);
+ file.read(m_sram, DATA_SIZE);
+ file.read(m_rtc, RTC_SIZE);
+ file.read(m_regs, REGS_SIZE);
}
//-------------------------------------------------
@@ -752,11 +762,11 @@ void ds1994_device::nvram_read(emu_file &file)
void ds1994_device::nvram_write(emu_file &file)
{
- file.write(m_rom, ROM_SIZE);
- file.write(m_ram, SPD_SIZE);
- file.write(m_sram, DATA_SIZE);
- file.write(m_rtc, RTC_SIZE);
- file.write(m_regs, REGS_SIZE);
+ file.write(m_rom, ROM_SIZE);
+ file.write(m_ram, SPD_SIZE);
+ file.write(m_sram, DATA_SIZE);
+ file.write(m_rtc, RTC_SIZE);
+ file.write(m_regs, REGS_SIZE);
}
/*