summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/er1400.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/er1400.cpp')
-rw-r--r--src/devices/machine/er1400.cpp21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/devices/machine/er1400.cpp b/src/devices/machine/er1400.cpp
index dec90501855..a4eed0dacae 100644
--- a/src/devices/machine/er1400.cpp
+++ b/src/devices/machine/er1400.cpp
@@ -42,6 +42,7 @@ DEFINE_DEVICE_TYPE(ER1400, er1400_device, "er1400", "ER1400 Serial EAROM (100x14
er1400_device::er1400_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, ER1400, tag, owner, clock)
, device_nvram_interface(mconfig, *this)
+ , m_default_data(*this, DEVICE_SELF, 100)
, m_clock_input(0)
, m_code_input(0)
, m_data_input(0)
@@ -85,8 +86,16 @@ void er1400_device::device_start()
void er1400_device::nvram_default()
{
- // all locations erased
- std::fill(&m_data_array[0], &m_data_array[100], 0x3fff);
+ if (m_default_data.found())
+ {
+ // obtain default data from memory region
+ std::copy_n(&m_default_data[0], 100, &m_data_array[0]);
+ }
+ else
+ {
+ // all locations erased
+ std::fill_n(&m_data_array[0], 100, 0);
+ }
}
@@ -176,11 +185,11 @@ void er1400_device::write_data()
if (BIT(m_address_register, units))
{
offs_t offset = 10 * (tens - 10) + units;
- if ((m_data_array[offset] & ~m_data_register) != 0)
+ if ((~m_data_array[offset] & m_data_register) != 0)
{
LOG("Writing data at %d (%04X changed to %04X)\n", offset,
m_data_array[offset], m_data_array[offset] & m_data_register);
- m_data_array[offset] &= m_data_register;
+ m_data_array[offset] |= m_data_register;
}
selected++;
}
@@ -210,10 +219,10 @@ void er1400_device::erase_data()
if (BIT(m_address_register, units))
{
offs_t offset = 10 * (tens - 10) + units;
- if (m_data_array[offset] != 0x3fff)
+ if (m_data_array[offset] != 0)
{
LOG("Erasing data at %d\n", offset);
- m_data_array[offset] = 0x3fff;
+ m_data_array[offset] = 0;
}
selected++;
}