summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine/pla.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/machine/pla.c')
-rw-r--r--src/emu/machine/pla.c30
1 files changed, 20 insertions, 10 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;
}
}