summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/i86/i286.c
diff options
context:
space:
mode:
author Wilbert Pol <wilbert@jdg.info>2010-10-31 15:29:10 +0000
committer Wilbert Pol <wilbert@jdg.info>2010-10-31 15:29:10 +0000
commit597665541172a6dc16f0a2f7ee22bc8e84c78053 (patch)
treef19f88078467e4fbb751e31ee9980ed4d26cb7ed /src/emu/cpu/i86/i286.c
parentdd12c245a86bc39f983868b3187e747a10a0e79c (diff)
i286.c: Partially implemented protected mode. Fixed verw, verr, lar, lsl, and arpl instructions. [Wilbert Pol]
Diffstat (limited to 'src/emu/cpu/i86/i286.c')
-rw-r--r--src/emu/cpu/i86/i286.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/emu/cpu/i86/i286.c b/src/emu/cpu/i86/i286.c
index 56071e4ea70..04dc06235c4 100644
--- a/src/emu/cpu/i86/i286.c
+++ b/src/emu/cpu/i86/i286.c
@@ -75,10 +75,11 @@ struct _i80286_state
int halted; /* Is the CPU halted ? */
int icount;
- unsigned prefix_base;
char seg_prefix;
+ UINT8 prefix_seg;
unsigned ea;
UINT16 eo; /* HJB 12/13/98 effective offset of the address (before segment is added) */
+ UINT8 ea_seg; /* effective segment of the address */
};
INLINE i80286_state *get_safe_token(running_device *device)
@@ -105,7 +106,7 @@ static struct i80x86_timing timing;
#define i8086_state i80286_state
#include "ea.h"
-#include "modrm.h"
+#include "modrm286.h"
#include "instr86.h"
#include "instr186.h"
#include "instr286.h"
@@ -226,7 +227,14 @@ static CPU_EXECUTE( i80286 )
cpustate->seg_prefix=FALSE;
cpustate->prevpc = cpustate->pc;
- TABLE286 // call instruction
+ try
+ {
+ TABLE286 // call instruction
+ }
+ catch (int e)
+ {
+ i80286_trap2(cpustate,e);
+ }
}
/* adjust for any interrupts that came in */