mirror of
https://github.com/holub/mame
synced 2025-06-02 02:49:44 +03:00
i386: Signal a privilege change to the debugger whenever protected mode is enabled or disabled or the CS descriptor flags are changed
This commit is contained in:
parent
aac19ebfba
commit
497fc4ad41
@ -417,11 +417,15 @@ void i386_device::i386_load_segment_descriptor(int segment )
|
|||||||
{
|
{
|
||||||
if (PROTECTED_MODE)
|
if (PROTECTED_MODE)
|
||||||
{
|
{
|
||||||
|
uint16_t old_flags = m_sreg[segment].flags;
|
||||||
if (!V8086_MODE)
|
if (!V8086_MODE)
|
||||||
{
|
{
|
||||||
i386_load_protected_mode_segment(&m_sreg[segment], nullptr );
|
i386_load_protected_mode_segment(&m_sreg[segment], nullptr);
|
||||||
if(m_sreg[segment].selector)
|
if (m_sreg[segment].selector)
|
||||||
|
{
|
||||||
i386_set_descriptor_accessed(m_sreg[segment].selector);
|
i386_set_descriptor_accessed(m_sreg[segment].selector);
|
||||||
|
m_sreg[segment].flags |= 0x0001;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -431,6 +435,8 @@ void i386_device::i386_load_segment_descriptor(int segment )
|
|||||||
m_sreg[segment].d = 0;
|
m_sreg[segment].d = 0;
|
||||||
m_sreg[segment].valid = true;
|
m_sreg[segment].valid = true;
|
||||||
}
|
}
|
||||||
|
if (segment == CS && m_sreg[segment].flags != old_flags)
|
||||||
|
debugger_privilege_hook();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -438,11 +444,11 @@ void i386_device::i386_load_segment_descriptor(int segment )
|
|||||||
m_sreg[segment].d = 0;
|
m_sreg[segment].d = 0;
|
||||||
m_sreg[segment].valid = true;
|
m_sreg[segment].valid = true;
|
||||||
|
|
||||||
if( segment == CS )
|
if (segment == CS)
|
||||||
{
|
{
|
||||||
if( !m_performed_intersegment_jump )
|
if (!m_performed_intersegment_jump)
|
||||||
m_sreg[segment].base |= 0xfff00000;
|
m_sreg[segment].base |= 0xfff00000;
|
||||||
if(m_cpu_version < 0x500)
|
if (m_cpu_version < 0x500)
|
||||||
m_sreg[segment].flags = 0x93;
|
m_sreg[segment].flags = 0x93;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -697,6 +697,8 @@ void i386_device::i386_mov_cr_r32() // Opcode 0x0f 22
|
|||||||
case 0:
|
case 0:
|
||||||
data &= 0xfffeffff; // wp not supported on 386
|
data &= 0xfffeffff; // wp not supported on 386
|
||||||
CYCLES(CYCLES_MOV_REG_CR0);
|
CYCLES(CYCLES_MOV_REG_CR0);
|
||||||
|
if (PROTECTED_MODE != BIT(data, 0))
|
||||||
|
debugger_privilege_hook();
|
||||||
break;
|
break;
|
||||||
case 2: CYCLES(CYCLES_MOV_REG_CR2); break;
|
case 2: CYCLES(CYCLES_MOV_REG_CR2); break;
|
||||||
case 3:
|
case 3:
|
||||||
|
@ -514,6 +514,8 @@ void i386_device::i486_mov_cr_r32() // Opcode 0x0f 22
|
|||||||
CYCLES(CYCLES_MOV_REG_CR0);
|
CYCLES(CYCLES_MOV_REG_CR0);
|
||||||
if((oldcr ^ m_cr[cr]) & 0x80010000)
|
if((oldcr ^ m_cr[cr]) & 0x80010000)
|
||||||
vtlb_flush_dynamic();
|
vtlb_flush_dynamic();
|
||||||
|
if (PROTECTED_MODE != BIT(data, 0))
|
||||||
|
debugger_privilege_hook();
|
||||||
break;
|
break;
|
||||||
case 2: CYCLES(CYCLES_MOV_REG_CR2); break;
|
case 2: CYCLES(CYCLES_MOV_REG_CR2); break;
|
||||||
case 3:
|
case 3:
|
||||||
|
Loading…
Reference in New Issue
Block a user