pla: allow reparsing after device started (nw)

This commit is contained in:
hap 2020-04-07 21:54:29 +02:00
parent f4ac0a7027
commit e2b698429f
2 changed files with 17 additions and 7 deletions

View File

@ -72,21 +72,29 @@ void pla_device::device_start()
m_input_mask = ((uint64_t)1 << m_inputs) - 1;
m_input_mask = ((uint64_t)m_input_mask << 32) | m_input_mask;
// parse fusemap
parse_fusemap();
m_cache_size = 1 << ((m_inputs > MAX_CACHE_BITS) ? MAX_CACHE_BITS : m_inputs);
m_cache.resize(m_cache_size);
reinit();
}
bool pla_device::reinit()
{
int result = parse_fusemap();
// initialize cache
m_cache2_ptr = 0;
for (auto & elem : m_cache2)
elem = 0x80000000;
int csize = m_cache_size;
m_cache_size = 0;
int csize = 1 << ((m_inputs > MAX_CACHE_BITS) ? MAX_CACHE_BITS : m_inputs);
m_cache.resize(csize);
for (int i = 0; i < csize; i++)
m_cache[i] = read(i);
m_cache_size = csize;
return result == JEDERR_NONE;
}
@ -94,7 +102,7 @@ void pla_device::device_start()
// parse_fusemap -
//-------------------------------------------------
void pla_device::parse_fusemap()
int pla_device::parse_fusemap()
{
jed_data jed;
int result = JEDERR_NONE;
@ -120,7 +128,7 @@ void pla_device::parse_fusemap()
}
logerror("%s PLA parse error %d!\n", tag(), result);
return;
return result;
}
// parse it
@ -174,6 +182,7 @@ void pla_device::parse_fusemap()
m_xor <<= 32;
LOGMASKED(LOG_TERMS, "F ^= %0*X\n", (m_outputs + 3) / 4, m_xor >> 32);
return result;
}

View File

@ -69,6 +69,7 @@ public:
uint32_t outputs() { return m_outputs; }
uint32_t read(uint32_t input);
bool reinit();
protected:
// device-level overrides
@ -79,7 +80,7 @@ private:
static constexpr unsigned MAX_CACHE_BITS = 20;
static constexpr unsigned CACHE2_SIZE = 8;
void parse_fusemap();
int parse_fusemap();
required_memory_region m_region;