summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/i86/i86.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/i86/i86.c')
-rw-r--r--src/emu/cpu/i86/i86.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/emu/cpu/i86/i86.c b/src/emu/cpu/i86/i86.c
index f091ba8fc08..5790e0d7382 100644
--- a/src/emu/cpu/i86/i86.c
+++ b/src/emu/cpu/i86/i86.c
@@ -1138,10 +1138,12 @@ bool i8086_common_cpu_device::common_op(UINT8 op)
break;
// 8086 'invalid opcodes', as documented at http://www.os2museum.com/wp/?p=2147
-// 0x60 - 0x6f are an alias to 0x70 - 0x7f.
-// These instructions are used in the boot sector for some versions of
-// MS-DOS 2.01 (e.g. the DEC Rainbow version).
- case 0x60:
+// - 0x60 - 0x6f are an alias to 0x70 - 0x7f.
+// - 0xc0, 0xc1, 0xc8, 0xc9 are also aliases where the CPU ignores BIT 1 (*).
+//
+// Instructions are used in the boot sector for some versions of
+// MS-DOS (e.g. the DEC Rainbow-100 version of DOS 2.x)
+// case 0x60:
case 0x70: // i_jo
JMP( OF);
break;
@@ -1670,7 +1672,7 @@ bool i8086_common_cpu_device::common_op(UINT8 op)
CLK(MOV_RI16);
break;
-
+ case 0xc0: // 0xc0 is 0xc2 - see (*)
case 0xc2: // i_ret_d16
{
UINT32 count = fetch_word();
@@ -1680,6 +1682,7 @@ bool i8086_common_cpu_device::common_op(UINT8 op)
}
break;
+ case 0xc1: // 0xc1 is 0xc3 - see (*)
case 0xc3: // i_ret
m_ip = POP();
CLK(RET_NEAR);
@@ -1711,7 +1714,7 @@ bool i8086_common_cpu_device::common_op(UINT8 op)
CLKM(MOV_RI16,MOV_MI16);
break;
-
+ case 0xc8: // 0xc8 = 0xca - see (*)
case 0xca: // i_retf_d16
{
UINT32 count = fetch_word();
@@ -1722,6 +1725,7 @@ bool i8086_common_cpu_device::common_op(UINT8 op)
}
break;
+ case 0xc9: // 0xc9 = 0xcb - see (*)
case 0xcb: // i_retf
m_ip = POP();
m_sregs[CS] = POP();