mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 09:25:10 +00:00
[FAST486]
Fix the type of a variable. [NTVDM] Introduce a BOP handler table for the 256 possible BOP functions and use it. svn path=/branches/ntvdm/; revision=60818
This commit is contained in:
parent
13b771ac15
commit
5c220ef022
5 changed files with 280 additions and 19 deletions
|
@ -219,7 +219,7 @@ VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
Fast486Reset(PFAST486_STATE State)
|
Fast486Reset(PFAST486_STATE State)
|
||||||
{
|
{
|
||||||
USHORT i;
|
FAST486_SEG_REGS i;
|
||||||
|
|
||||||
FAST486_MEM_READ_PROC MemReadCallback = State->MemReadCallback;
|
FAST486_MEM_READ_PROC MemReadCallback = State->MemReadCallback;
|
||||||
FAST486_MEM_WRITE_PROC MemWriteCallback = State->MemWriteCallback;
|
FAST486_MEM_WRITE_PROC MemWriteCallback = State->MemWriteCallback;
|
||||||
|
|
|
@ -13,12 +13,12 @@
|
||||||
|
|
||||||
#include "emulator.h"
|
#include "emulator.h"
|
||||||
#include "bios.h"
|
#include "bios.h"
|
||||||
|
#include "bop.h"
|
||||||
#include "dos.h"
|
#include "dos.h"
|
||||||
#include "vga.h"
|
//#include "vga.h"
|
||||||
#include "pic.h"
|
//#include "pic.h"
|
||||||
#include "ps2.h"
|
//#include "ps2.h"
|
||||||
#include "timer.h"
|
//#include "timer.h"
|
||||||
|
|
||||||
|
|
||||||
LPCWSTR ExceptionName[] =
|
LPCWSTR ExceptionName[] =
|
||||||
{
|
{
|
||||||
|
@ -32,6 +32,266 @@ LPCWSTR ExceptionName[] =
|
||||||
L"FPU Not Available"
|
L"FPU Not Available"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EMULATOR_BOP_PROC BopProc[EMULATOR_MAX_BOP_NUM] =
|
||||||
|
{
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
ControlBop
|
||||||
|
};
|
||||||
|
|
||||||
VOID WINAPI Exception(BYTE ExceptionNumber, LPWORD Stack)
|
VOID WINAPI Exception(BYTE ExceptionNumber, LPWORD Stack)
|
||||||
{
|
{
|
||||||
WORD CodeSegment, InstructionPointer;
|
WORD CodeSegment, InstructionPointer;
|
||||||
|
|
|
@ -7,4 +7,10 @@
|
||||||
* Hermes Belusca-Maito (hermes.belusca@sfr.fr)
|
* Hermes Belusca-Maito (hermes.belusca@sfr.fr)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
typedef VOID (WINAPI *EMULATOR_BOP_PROC)(LPWORD Stack);
|
||||||
|
|
||||||
|
extern EMULATOR_BOP_PROC BopProc[EMULATOR_MAX_BOP_NUM];
|
||||||
|
|
||||||
|
VOID WINAPI ControlBop(LPWORD Stack);
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include "emulator.h"
|
#include "emulator.h"
|
||||||
#include "bios.h"
|
#include "bios.h"
|
||||||
|
#include "bop.h"
|
||||||
#include "dos.h"
|
#include "dos.h"
|
||||||
#include "vga.h"
|
#include "vga.h"
|
||||||
#include "pic.h"
|
#include "pic.h"
|
||||||
|
@ -225,7 +226,6 @@ static VOID WINAPI EmulatorWriteIo(PFAST486_STATE State, ULONG Port, PVOID Buffe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID WINAPI ControlBop(LPWORD Stack);
|
|
||||||
static VOID WINAPI EmulatorBiosOperation(PFAST486_STATE State, UCHAR BopCode)
|
static VOID WINAPI EmulatorBiosOperation(PFAST486_STATE State, UCHAR BopCode)
|
||||||
{
|
{
|
||||||
WORD StackSegment, StackPointer;
|
WORD StackSegment, StackPointer;
|
||||||
|
@ -238,16 +238,10 @@ static VOID WINAPI EmulatorBiosOperation(PFAST486_STATE State, UCHAR BopCode)
|
||||||
/* Get the stack */
|
/* Get the stack */
|
||||||
Stack = (LPWORD)SEG_OFF_TO_PTR(StackSegment, StackPointer);
|
Stack = (LPWORD)SEG_OFF_TO_PTR(StackSegment, StackPointer);
|
||||||
|
|
||||||
switch (BopCode)
|
if (BopProc[BopCode] != NULL)
|
||||||
{
|
BopProc[BopCode](Stack);
|
||||||
case EMULATOR_INT_BOP:
|
else
|
||||||
ControlBop(Stack);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
DPRINT1("Invalid BOP code %u\n", BopCode);
|
DPRINT1("Invalid BOP code %u\n", BopCode);
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static UCHAR WINAPI EmulatorIntAcknowledge(PFAST486_STATE State)
|
static UCHAR WINAPI EmulatorIntAcknowledge(PFAST486_STATE State)
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
/* Common definitions */
|
/* Common definitions */
|
||||||
#define EMULATOR_BOP 0xC4C4
|
#define EMULATOR_BOP 0xC4C4
|
||||||
#define EMULATOR_INT_BOP 0xFF
|
#define EMULATOR_INT_BOP 0xFF
|
||||||
|
#define EMULATOR_MAX_BOP_NUM 0xFF + 1
|
||||||
|
|
||||||
#define STACK_COUNTER 0
|
#define STACK_COUNTER 0
|
||||||
#define STACK_INT_NUM 1
|
#define STACK_INT_NUM 1
|
||||||
|
|
Loading…
Reference in a new issue