summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Alex W. Jackson <alex.w.jackson@gmail.com>2014-04-07 03:16:44 +0000
committer Alex W. Jackson <alex.w.jackson@gmail.com>2014-04-07 03:16:44 +0000
commitdf7969f1d7d7d7e6f5ff04b87f19c4531b0bab28 (patch)
tree8b289875e5d7239188de72db2ee448df94f0fe12 /src
parent413b39e83b56416c4adf28276680a91897be26ae (diff)
8086 MOV sreg behavior confirmed on hardware, no longer a guess (nw)
Diffstat (limited to 'src')
-rw-r--r--src/emu/cpu/i86/i86.c22
1 files changed, 2 insertions, 20 deletions
diff --git a/src/emu/cpu/i86/i86.c b/src/emu/cpu/i86/i86.c
index a093d4bbcbe..76c0f48795d 100644
--- a/src/emu/cpu/i86/i86.c
+++ b/src/emu/cpu/i86/i86.c
@@ -1354,8 +1354,7 @@ bool i8086_common_cpu_device::common_op(UINT8 op)
case 0x8c: // i_mov_wsreg
m_modrm = fetch();
- PutRMWord(m_sregs[(m_modrm & 0x18) >> 3]); // guess: ignore bit 5
- if(m_modrm & 0x20) logerror("%s: %06x: Mov Sreg - Invalid register\n", tag(), pc());
+ PutRMWord(m_sregs[(m_modrm & 0x18) >> 3]); // confirmed on hw: modrm bit 5 ignored
CLKM(MOV_RS,MOV_MS);
break;
@@ -1369,25 +1368,8 @@ bool i8086_common_cpu_device::common_op(UINT8 op)
case 0x8e: // i_mov_sregw
m_modrm = fetch();
m_src = GetRMWord();
+ m_sregs[(m_modrm & 0x18) >> 3] = m_src; // confirmed on hw: modrm bit 5 ignored
CLKM(MOV_SR,MOV_SM);
- switch (m_modrm & 0x38)
- {
- case 0x00: /* mov es,ew */
- m_sregs[ES] = m_src;
- break;
- case 0x08: /* mov cs,ew */
- m_sregs[CS] = m_src;
- break;
- case 0x10: /* mov ss,ew */
- m_sregs[SS] = m_src;
- m_no_interrupt = 1;
- break;
- case 0x18: /* mov ds,ew */
- m_sregs[DS] = m_src;
- break;
- default:
- logerror("%s: %06x: Mov Sreg - Invalid register\n", tag(), pc());
- }
break;
case 0x8f: // i_popw