summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/i86/i86.c
diff options
context:
space:
mode:
author Scott Stone <tafoid@users.noreply.github.com>2014-06-09 00:42:53 +0000
committer Scott Stone <tafoid@users.noreply.github.com>2014-06-09 00:42:53 +0000
commitf4d741ca06a7082400927d576ded593f442b33e0 (patch)
treecde8cbd4e450829246f573ef016ec5f0b755a3e1 /src/emu/cpu/i86/i86.c
parent0f0c004ce810e83e603f1fab992dbe726f67f12f (diff)
rainbow.c: New floppy code - uses more reliable 'wd_fdc'. [Bavarese]
i86.c: Four new 8086 opcode aliases: 0xc0 is 0xc2; 0xc1 = 0xc3; 0xc8 = 0xca; 0xc9 = 0xcb as documented at OS 2 Museum. [Bavarese] rx50_dsk.h/c: Rainbow specific; The RX50 _disk drive_ was used in different architectures. Floppy format used by Rainbow-100 and -190. Track layout (post-amble, some positions) yet unverified. Currently only raw 400 K disk dumps are supported (*.img). [Bavarese]
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();