summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2014-11-20 17:45:30 +0100
committer hap <happppp@users.noreply.github.com>2014-11-20 17:45:30 +0100
commit4ca23dc263f648b901759b33ac57cc1551359d0a (patch)
treea1549d80dc39c68cec54789ea9776c6c0363e632
parent4aa10d383f347654c6c39514cf77b6ac9cc8f3db (diff)
don't fatalerror on parse error
-rw-r--r--src/emu/machine/pla.c30
-rw-r--r--src/emu/machine/pla.h4
2 files changed, 22 insertions, 12 deletions
diff --git a/src/emu/machine/pla.c b/src/emu/machine/pla.c
index 1812d24ed1b..09c799fa1ee 100644
--- a/src/emu/machine/pla.c
+++ b/src/emu/machine/pla.c
@@ -26,7 +26,8 @@ pla_device::pla_device(const machine_config &mconfig, const char *tag, device_t
m_inputs(0),
m_outputs(0),
m_terms(0),
- m_input_mask(0)
+ m_input_mask(0),
+ m_xor(0)
{
}
@@ -85,7 +86,16 @@ void pla_device::parse_fusemap()
}
if (result != JEDERR_NONE)
- fatalerror("%s PLA parse error %d\n", tag(), result);
+ {
+ for (int p = 0; p < m_terms; p++)
+ {
+ m_term[p].and_mask = 0;
+ m_term[p].or_mask = 0;
+ }
+
+ logerror("%s PLA parse error %d!\n", tag(), result);
+ return;
+ }
// parse it
UINT32 fusenum = 0;
@@ -95,26 +105,26 @@ void pla_device::parse_fusemap()
term *term = &m_term[p];
// AND mask
- term->m_and = 0;
+ term->and_mask = 0;
for (int i = 0; i < m_inputs; i++)
{
// complement
- term->m_and |= (UINT64)jed_get_fuse(&jed, fusenum++) << (i + 32);
+ term->and_mask |= (UINT64)jed_get_fuse(&jed, fusenum++) << (i + 32);
// true
- term->m_and |= (UINT64)jed_get_fuse(&jed, fusenum++) << i;
+ term->and_mask |= (UINT64)jed_get_fuse(&jed, fusenum++) << i;
}
// OR mask
- term->m_or = 0;
+ term->or_mask = 0;
for (int f = 0; f < m_outputs; f++)
{
- term->m_or |= !jed_get_fuse(&jed, fusenum++) << f;
+ term->or_mask |= !jed_get_fuse(&jed, fusenum++) << f;
}
- term->m_or <<= 32;
+ term->or_mask <<= 32;
}
// XOR mask
@@ -158,9 +168,9 @@ UINT32 pla_device::read(UINT32 input)
{
term* term = &m_term[i];
- if ((term->m_and | inputs) == m_input_mask)
+ if ((term->and_mask | inputs) == m_input_mask)
{
- s |= term->m_or;
+ s |= term->or_mask;
}
}
diff --git a/src/emu/machine/pla.h b/src/emu/machine/pla.h
index b1537ce8e2f..96a33aaae43 100644
--- a/src/emu/machine/pla.h
+++ b/src/emu/machine/pla.h
@@ -127,8 +127,8 @@ private:
struct term
{
- UINT64 m_and;
- UINT64 m_or;
+ UINT64 and_mask;
+ UINT64 or_mask;
} m_term[MAX_TERMS];
};