mirror of
https://github.com/holub/mame
synced 2025-07-04 17:38:08 +03:00
m68kmmu: deduplicate code to set buserror details
This commit is contained in:
parent
031f507a17
commit
6e5965a939
@ -102,6 +102,17 @@ uint32_t DECODE_EA_32(int ea)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pmmu_set_buserror(uint32_t addr_in)
|
||||||
|
{
|
||||||
|
if (++m_mmu_tmp_buserror_occurred == 1)
|
||||||
|
{
|
||||||
|
m_mmu_tmp_buserror_address = addr_in;
|
||||||
|
m_mmu_tmp_buserror_rw = m_mmu_tmp_rw;
|
||||||
|
m_mmu_tmp_buserror_fc = m_mmu_tmp_fc;
|
||||||
|
m_mmu_tmp_buserror_sz = m_mmu_tmp_sz;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
pmmu_atc_add: adds this address to the ATC
|
pmmu_atc_add: adds this address to the ATC
|
||||||
*/
|
*/
|
||||||
@ -482,35 +493,11 @@ uint32_t pmmu_translate_addr_with_fc(uint32_t addr_in, uint8_t fc, uint8_t ptest
|
|||||||
|
|
||||||
if (!ptest)
|
if (!ptest)
|
||||||
{
|
{
|
||||||
if (m_mmu_tmp_sr & M68K_MMU_SR_INVALID)
|
if ((m_mmu_tmp_sr & (M68K_MMU_SR_INVALID|M68K_MMU_SR_SUPERVISOR_ONLY)) ||
|
||||||
|
((m_mmu_tmp_sr & M68K_MMU_SR_WRITE_PROTECT) && !m_mmu_tmp_rw))
|
||||||
{
|
{
|
||||||
if (++m_mmu_tmp_buserror_occurred == 1)
|
pmmu_set_buserror(addr_in);
|
||||||
{
|
|
||||||
m_mmu_tmp_buserror_address = addr_in;
|
|
||||||
m_mmu_tmp_buserror_rw = m_mmu_tmp_rw;
|
|
||||||
m_mmu_tmp_buserror_fc = m_mmu_tmp_fc;
|
|
||||||
m_mmu_tmp_buserror_sz = m_mmu_tmp_sz;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (m_mmu_tmp_sr & M68K_MMU_SR_SUPERVISOR_ONLY)
|
|
||||||
{
|
|
||||||
if (++m_mmu_tmp_buserror_occurred == 1)
|
|
||||||
{
|
|
||||||
m_mmu_tmp_buserror_address = addr_in;
|
|
||||||
m_mmu_tmp_buserror_rw = m_mmu_tmp_rw;
|
|
||||||
m_mmu_tmp_buserror_fc = m_mmu_tmp_fc;
|
|
||||||
m_mmu_tmp_buserror_sz = m_mmu_tmp_sz;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ((m_mmu_tmp_sr & M68K_MMU_SR_WRITE_PROTECT) && !m_mmu_tmp_rw)
|
|
||||||
{
|
|
||||||
if (++m_mmu_tmp_buserror_occurred == 1)
|
|
||||||
{
|
|
||||||
m_mmu_tmp_buserror_address = addr_in;
|
|
||||||
m_mmu_tmp_buserror_rw = m_mmu_tmp_rw;
|
|
||||||
m_mmu_tmp_buserror_fc = m_mmu_tmp_fc;
|
|
||||||
m_mmu_tmp_buserror_sz = m_mmu_tmp_sz;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_mmu_tmp_buserror_occurred)
|
if (!m_mmu_tmp_buserror_occurred)
|
||||||
@ -566,13 +553,7 @@ uint32_t pmmu_translate_addr_with_fc_040(uint32_t addr_in, uint8_t fc, uint8_t p
|
|||||||
// fprintf(stderr, "TT0 match on address %08x (TT0 = %08x, mask = %08x)\n", addr_in, tt0, mask);
|
// fprintf(stderr, "TT0 match on address %08x (TT0 = %08x, mask = %08x)\n", addr_in, tt0, mask);
|
||||||
if ((tt0 & 4) && !m_mmu_tmp_rw && !ptest) // write protect?
|
if ((tt0 & 4) && !m_mmu_tmp_rw && !ptest) // write protect?
|
||||||
{
|
{
|
||||||
if (++m_mmu_tmp_buserror_occurred == 1)
|
pmmu_set_buserror(addr_in);
|
||||||
{
|
|
||||||
m_mmu_tmp_buserror_address = addr_in;
|
|
||||||
m_mmu_tmp_buserror_rw = m_mmu_tmp_rw;
|
|
||||||
m_mmu_tmp_buserror_fc = m_mmu_tmp_fc;
|
|
||||||
m_mmu_tmp_buserror_sz = m_mmu_tmp_sz;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return addr_in;
|
return addr_in;
|
||||||
@ -592,13 +573,7 @@ uint32_t pmmu_translate_addr_with_fc_040(uint32_t addr_in, uint8_t fc, uint8_t p
|
|||||||
// fprintf(stderr, "TT1 match on address %08x (TT0 = %08x, mask = %08x)\n", addr_in, tt1, mask);
|
// fprintf(stderr, "TT1 match on address %08x (TT0 = %08x, mask = %08x)\n", addr_in, tt1, mask);
|
||||||
if ((tt1 & 4) && !m_mmu_tmp_rw && !ptest) // write protect?
|
if ((tt1 & 4) && !m_mmu_tmp_rw && !ptest) // write protect?
|
||||||
{
|
{
|
||||||
if (++m_mmu_tmp_buserror_occurred == 1)
|
pmmu_set_buserror(addr_in);
|
||||||
{
|
|
||||||
m_mmu_tmp_buserror_address = addr_in;
|
|
||||||
m_mmu_tmp_buserror_rw = m_mmu_tmp_rw;
|
|
||||||
m_mmu_tmp_buserror_fc = m_mmu_tmp_fc;
|
|
||||||
m_mmu_tmp_buserror_sz = m_mmu_tmp_sz;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return addr_in;
|
return addr_in;
|
||||||
@ -663,14 +638,7 @@ uint32_t pmmu_translate_addr_with_fc_040(uint32_t addr_in, uint8_t fc, uint8_t p
|
|||||||
// write protected by the root or pointer entries?
|
// write protected by the root or pointer entries?
|
||||||
if ((((root_entry & 4) && !m_mmu_tmp_rw) || ((pointer_entry & 4) && !m_mmu_tmp_rw)) && !ptest)
|
if ((((root_entry & 4) && !m_mmu_tmp_rw) || ((pointer_entry & 4) && !m_mmu_tmp_rw)) && !ptest)
|
||||||
{
|
{
|
||||||
if (++m_mmu_tmp_buserror_occurred == 1)
|
pmmu_set_buserror(addr_in);
|
||||||
{
|
|
||||||
m_mmu_tmp_buserror_address = addr_in;
|
|
||||||
m_mmu_tmp_buserror_rw = m_mmu_tmp_rw;
|
|
||||||
m_mmu_tmp_buserror_fc = m_mmu_tmp_fc;
|
|
||||||
m_mmu_tmp_buserror_sz = m_mmu_tmp_sz;
|
|
||||||
}
|
|
||||||
|
|
||||||
return addr_in;
|
return addr_in;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -678,14 +646,7 @@ uint32_t pmmu_translate_addr_with_fc_040(uint32_t addr_in, uint8_t fc, uint8_t p
|
|||||||
if (!(pointer_entry & 2) && !ptest)
|
if (!(pointer_entry & 2) && !ptest)
|
||||||
{
|
{
|
||||||
// fprintf(stderr, "Invalid pointer entry! PC=%x, addr=%x\n", m_ppc, addr_in);
|
// fprintf(stderr, "Invalid pointer entry! PC=%x, addr=%x\n", m_ppc, addr_in);
|
||||||
if (++m_mmu_tmp_buserror_occurred == 1)
|
pmmu_set_buserror(addr_in);
|
||||||
{
|
|
||||||
m_mmu_tmp_buserror_address = addr_in;
|
|
||||||
m_mmu_tmp_buserror_rw = m_mmu_tmp_rw;
|
|
||||||
m_mmu_tmp_buserror_fc = m_mmu_tmp_fc;
|
|
||||||
m_mmu_tmp_buserror_sz = m_mmu_tmp_sz;
|
|
||||||
}
|
|
||||||
|
|
||||||
return addr_in;
|
return addr_in;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -697,13 +658,7 @@ uint32_t pmmu_translate_addr_with_fc_040(uint32_t addr_in, uint8_t fc, uint8_t p
|
|||||||
|
|
||||||
if (!ptest)
|
if (!ptest)
|
||||||
{
|
{
|
||||||
if (++m_mmu_tmp_buserror_occurred == 1)
|
pmmu_set_buserror(addr_in);
|
||||||
{
|
|
||||||
m_mmu_tmp_buserror_address = addr_in;
|
|
||||||
m_mmu_tmp_buserror_rw = m_mmu_tmp_rw;
|
|
||||||
m_mmu_tmp_buserror_fc = m_mmu_tmp_fc;
|
|
||||||
m_mmu_tmp_buserror_sz = m_mmu_tmp_sz;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return addr_in;
|
return addr_in;
|
||||||
@ -742,14 +697,7 @@ uint32_t pmmu_translate_addr_with_fc_040(uint32_t addr_in, uint8_t fc, uint8_t p
|
|||||||
// is the page write protected or supervisor protected?
|
// is the page write protected or supervisor protected?
|
||||||
if ((((page_entry & 4) && !m_mmu_tmp_rw) || ((page_entry & 0x80) && !(fc&4))) && !ptest)
|
if ((((page_entry & 4) && !m_mmu_tmp_rw) || ((page_entry & 0x80) && !(fc&4))) && !ptest)
|
||||||
{
|
{
|
||||||
if (++m_mmu_tmp_buserror_occurred == 1)
|
pmmu_set_buserror(addr_in);
|
||||||
{
|
|
||||||
m_mmu_tmp_buserror_address = addr_in;
|
|
||||||
m_mmu_tmp_buserror_rw = m_mmu_tmp_rw;
|
|
||||||
m_mmu_tmp_buserror_fc = m_mmu_tmp_fc;
|
|
||||||
m_mmu_tmp_buserror_sz = m_mmu_tmp_sz;
|
|
||||||
}
|
|
||||||
|
|
||||||
return addr_in;
|
return addr_in;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -759,13 +707,7 @@ uint32_t pmmu_translate_addr_with_fc_040(uint32_t addr_in, uint8_t fc, uint8_t p
|
|||||||
// fprintf(stderr, "Invalid page entry! PC=%x, addr=%x\n", m_ppc, addr_in);
|
// fprintf(stderr, "Invalid page entry! PC=%x, addr=%x\n", m_ppc, addr_in);
|
||||||
if (!ptest)
|
if (!ptest)
|
||||||
{
|
{
|
||||||
if (++m_mmu_tmp_buserror_occurred == 1)
|
pmmu_set_buserror(addr_in);
|
||||||
{
|
|
||||||
m_mmu_tmp_buserror_address = addr_in;
|
|
||||||
m_mmu_tmp_buserror_rw = m_mmu_tmp_rw;
|
|
||||||
m_mmu_tmp_buserror_fc = m_mmu_tmp_fc;
|
|
||||||
m_mmu_tmp_buserror_sz = m_mmu_tmp_sz;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return addr_in;
|
return addr_in;
|
||||||
|
Loading…
Reference in New Issue
Block a user