summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/i86
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2011-06-18 05:50:04 +0000
committer Miodrag Milanovic <mmicko@gmail.com>2011-06-18 05:50:04 +0000
commit291862b7189f707c572aa6c0425423bc8462fdb5 (patch)
treec33117e1916a86e4e0ff477ce8f6d37c8050ae95 /src/emu/cpu/i86
parent4e4ff5da9850ff3fb1876ceea72ded30d2bbf20d (diff)
i286 - Fixes that makes OS/2 1.2 boot again by Carl (no whatsnew)
Diffstat (limited to 'src/emu/cpu/i86')
-rw-r--r--src/emu/cpu/i86/instr286.c4
-rw-r--r--src/emu/cpu/i86/instr286.h4
2 files changed, 4 insertions, 4 deletions
diff --git a/src/emu/cpu/i86/instr286.c b/src/emu/cpu/i86/instr286.c
index 6f6a9f1ffcc..3589a363b03 100644
--- a/src/emu/cpu/i86/instr286.c
+++ b/src/emu/cpu/i86/instr286.c
@@ -852,7 +852,7 @@ static void PREFIX286(_escape_7)(i8086_state *cpustate) /* Opcode 0xdf */
if (ModRM == 0xe0) cpustate->regs.w[AX] = 0xffff; // FPU not present
}
-static void i80286_check_permission(i8086_state *cpustate, UINT8 check_seg, UINT32 offset, int size, i80286_operation operation)
+static void i80286_check_permission(i8086_state *cpustate, UINT8 check_seg, UINT32 offset, UINT16 size, i80286_operation operation)
{
int trap = 0;
UINT8 rights;
@@ -860,7 +860,7 @@ static void i80286_check_permission(i8086_state *cpustate, UINT8 check_seg, UINT
rights = cpustate->rights[check_seg];
trap = i80286_verify(cpustate, cpustate->sregs[check_seg], operation, rights);
if ((CODE(rights) || !EXPDOWN(rights)) && ((offset+size-1) > cpustate->limit[check_seg])) trap = GENERAL_PROTECTION_FAULT;
- if (!CODE(rights) && EXPDOWN(rights) && ((offset <= cpustate->limit[check_seg]) || ((offset+size) > 0xffff))) trap = GENERAL_PROTECTION_FAULT;
+ if (!CODE(rights) && EXPDOWN(rights) && ((offset <= cpustate->limit[check_seg]) || ((offset+size-1) > 0xffff))) trap = GENERAL_PROTECTION_FAULT;
if ((trap == GENERAL_PROTECTION_FAULT) && (check_seg == SS)) trap = STACK_FAULT;
if (trap) throw TRAP(trap, 0);
diff --git a/src/emu/cpu/i86/instr286.h b/src/emu/cpu/i86/instr286.h
index f4dc0f7ffda..eeb582b67e9 100644
--- a/src/emu/cpu/i86/instr286.h
+++ b/src/emu/cpu/i86/instr286.h
@@ -39,9 +39,9 @@ enum i80286_operation
I80286_EXECUTE
};
-static void i80286_check_permission(i8086_state *cpustate, UINT8 check_seg, UINT32 offset, int size, i80286_operation operation);
+static void i80286_check_permission(i8086_state *cpustate, UINT8 check_seg, UINT32 offset, UINT16 size, i80286_operation operation);
-static inline UINT32 GetMemAddr(i80286_state *cpustate, UINT16 seg, UINT16 off, UINT8 size, i80286_operation op) {
+static inline UINT32 GetMemAddr(i80286_state *cpustate, UINT8 seg, UINT32 off, UINT16 size, i80286_operation op) {
seg = DefaultSeg(seg);
if(PM) i80286_check_permission(cpustate, seg, off, size, op);
return (cpustate->base[seg] + off) & AMASK;