summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cracyc <cracyc@users.noreply.github.com>2014-10-27 14:54:41 -0500
committer cracyc <cracyc@users.noreply.github.com>2014-10-27 16:01:17 -0500
commit909dac91cf2b72f4f9770c9de10b35c4f85d7d84 (patch)
treea7556b226ab96eb4e423c4ed31caba0c391ba4ad
parentb164aa9ca8d2b39da75126fadd6a3a12d164157c (diff)
i386: mark tss busy [Carl]
-rw-r--r--src/emu/cpu/i386/i386op16.inc7
-rw-r--r--src/emu/cpu/i386/i386op32.inc7
2 files changed, 12 insertions, 2 deletions
diff --git a/src/emu/cpu/i386/i386op16.inc b/src/emu/cpu/i386/i386op16.inc
index 81aaf8f025b..07e704128bd 100644
--- a/src/emu/cpu/i386/i386op16.inc
+++ b/src/emu/cpu/i386/i386op16.inc
@@ -3133,9 +3133,14 @@ void i386_device::i386_group0F00_16() // Opcode 0x0f 00
memset(&seg, 0, sizeof(seg));
seg.selector = m_task.segment;
i386_load_protected_mode_segment(&seg,NULL);
+
+ UINT32 addr = ((seg.selector & 4) ? m_ldtr.base : m_gdtr.base) + (seg.selector & ~7) + 5;
+ i386_translate_address(TRANSLATE_READ, &addr, NULL);
+ m_program->write_byte(addr, (seg.flags & 0xff) | 2);
+
m_task.limit = seg.limit;
m_task.base = seg.base;
- m_task.flags = seg.flags;
+ m_task.flags = seg.flags | 2;
}
else
{
diff --git a/src/emu/cpu/i386/i386op32.inc b/src/emu/cpu/i386/i386op32.inc
index ea6a6ea5672..bca0ffa301a 100644
--- a/src/emu/cpu/i386/i386op32.inc
+++ b/src/emu/cpu/i386/i386op32.inc
@@ -2939,9 +2939,14 @@ void i386_device::i386_group0F00_32() // Opcode 0x0f 00
memset(&seg, 0, sizeof(seg));
seg.selector = m_task.segment;
i386_load_protected_mode_segment(&seg,NULL);
+
+ UINT32 addr = ((seg.selector & 4) ? m_ldtr.base : m_gdtr.base) + (seg.selector & ~7) + 5;
+ i386_translate_address(TRANSLATE_READ, &addr, NULL);
+ m_program->write_byte(addr, (seg.flags & 0xff) | 2);
+
m_task.limit = seg.limit;
m_task.base = seg.base;
- m_task.flags = seg.flags;
+ m_task.flags = seg.flags | 2;
}
else
{