diff options
Diffstat (limited to 'src/emu/machine/pla.c')
-rw-r--r-- | src/emu/machine/pla.c | 30 |
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; } } |