trunk/src/emu/machine/pla.c
| r241979 | r241980 | |
| 26 | 26 | m_inputs(0), |
| 27 | 27 | m_outputs(0), |
| 28 | 28 | m_terms(0), |
| 29 | | m_input_mask(0) |
| 29 | m_input_mask(0), |
| 30 | m_xor(0) |
| 30 | 31 | { |
| 31 | 32 | } |
| 32 | 33 | |
| r241979 | r241980 | |
| 85 | 86 | } |
| 86 | 87 | |
| 87 | 88 | if (result != JEDERR_NONE) |
| 88 | | fatalerror("%s PLA parse error %d\n", tag(), result); |
| 89 | { |
| 90 | for (int p = 0; p < m_terms; p++) |
| 91 | { |
| 92 | m_term[p].and_mask = 0; |
| 93 | m_term[p].or_mask = 0; |
| 94 | } |
| 95 | |
| 96 | logerror("%s PLA parse error %d!\n", tag(), result); |
| 97 | return; |
| 98 | } |
| 89 | 99 | |
| 90 | 100 | // parse it |
| 91 | 101 | UINT32 fusenum = 0; |
| r241979 | r241980 | |
| 95 | 105 | term *term = &m_term[p]; |
| 96 | 106 | |
| 97 | 107 | // AND mask |
| 98 | | term->m_and = 0; |
| 108 | term->and_mask = 0; |
| 99 | 109 | |
| 100 | 110 | for (int i = 0; i < m_inputs; i++) |
| 101 | 111 | { |
| 102 | 112 | // complement |
| 103 | | term->m_and |= (UINT64)jed_get_fuse(&jed, fusenum++) << (i + 32); |
| 113 | term->and_mask |= (UINT64)jed_get_fuse(&jed, fusenum++) << (i + 32); |
| 104 | 114 | |
| 105 | 115 | // true |
| 106 | | term->m_and |= (UINT64)jed_get_fuse(&jed, fusenum++) << i; |
| 116 | term->and_mask |= (UINT64)jed_get_fuse(&jed, fusenum++) << i; |
| 107 | 117 | } |
| 108 | 118 | |
| 109 | 119 | // OR mask |
| 110 | | term->m_or = 0; |
| 120 | term->or_mask = 0; |
| 111 | 121 | |
| 112 | 122 | for (int f = 0; f < m_outputs; f++) |
| 113 | 123 | { |
| 114 | | term->m_or |= !jed_get_fuse(&jed, fusenum++) << f; |
| 124 | term->or_mask |= !jed_get_fuse(&jed, fusenum++) << f; |
| 115 | 125 | } |
| 116 | 126 | |
| 117 | | term->m_or <<= 32; |
| 127 | term->or_mask <<= 32; |
| 118 | 128 | } |
| 119 | 129 | |
| 120 | 130 | // XOR mask |
| r241979 | r241980 | |
| 158 | 168 | { |
| 159 | 169 | term* term = &m_term[i]; |
| 160 | 170 | |
| 161 | | if ((term->m_and | inputs) == m_input_mask) |
| 171 | if ((term->and_mask | inputs) == m_input_mask) |
| 162 | 172 | { |
| 163 | | s |= term->m_or; |
| 173 | s |= term->or_mask; |
| 164 | 174 | } |
| 165 | 175 | } |
| 166 | 176 | |