fixed emulator "struct emu"-dependent calls
This commit is contained in:
@@ -12,13 +12,13 @@
|
||||
#define USE_SDRAM
|
||||
#define DIRECT_ACCESS
|
||||
|
||||
#define MEM_WB(where, what) wrb(where, what)
|
||||
#define MEM_WW(where, what) wrw(where, what)
|
||||
#define MEM_WL(where, what) wrl(where, what)
|
||||
#define MEM_WB(where, what) emu->emu_wrb(emu, where, what)
|
||||
#define MEM_WW(where, what) emu->emu_wrw(emu, where, what)
|
||||
#define MEM_WL(where, what) emu->emu_wrl(emu, where, what)
|
||||
|
||||
#define MEM_RB(where) rdb(where)
|
||||
#define MEM_RW(where) rdw(where)
|
||||
#define MEM_RL(where) rdl(where)
|
||||
#define MEM_RB(where) emu->emu_rdb(emu, where)
|
||||
#define MEM_RW(where) emu->emu_rdw(emu, where)
|
||||
#define MEM_RL(where) emu->emu_rdl(emu, where)
|
||||
|
||||
#define PCI_VGA_RAM_IMAGE_START 0xC0000
|
||||
#define PCI_RAM_IMAGE_START 0xD0000
|
||||
@@ -81,7 +81,7 @@ extern int x86_pcibios_emulator();
|
||||
//X86EMU_sysEnv _X86EMU_env;
|
||||
|
||||
/* general software interrupt handler */
|
||||
uint32_t getIntVect(int num)
|
||||
uint32_t getIntVect(struct X86EMU *emu, int num)
|
||||
{
|
||||
return MEM_RW(num << 2) + (MEM_RW((num << 2) + 2) << 4);
|
||||
}
|
||||
@@ -219,9 +219,9 @@ void do_int(struct X86EMU *emu, int num)
|
||||
case 0x10:
|
||||
case 0x42:
|
||||
case 0x6D:
|
||||
if (getIntVect(num) == 0x0000)
|
||||
if (getIntVect(emu, num) == 0x0000)
|
||||
dbg("uninitialised int vector\r\n");
|
||||
if (getIntVect(num) == 0xFF065)
|
||||
if (getIntVect(emu, num) == 0xFF065)
|
||||
{
|
||||
//ret = int42_handler();
|
||||
ret = 1;
|
||||
@@ -360,9 +360,9 @@ void run_bios(struct radeonfb_info *rinfo)
|
||||
{
|
||||
char *date = "01/01/99";
|
||||
for (i = 0; date[i]; i++)
|
||||
wrb(0xffff5 + i, date[i]);
|
||||
wrb(0xffff7, '/');
|
||||
wrb(0xffffa, '/');
|
||||
emu.emu_wrb(&emu, 0xffff5 + i, date[i]);
|
||||
emu.emu_wrb(&emu, 0xffff7, '/');
|
||||
emu.emu_wrb(&emu, 0xffffa, '/');
|
||||
}
|
||||
{
|
||||
/* FixME: move PIT init to its own file */
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#include <stdbool.h>
|
||||
#include <x86emu.h>
|
||||
#include <x86emu_regs.h>
|
||||
#include "setjmp.h"
|
||||
|
||||
static void x86emu_intr_raise (struct X86EMU *, uint8_t type);
|
||||
|
||||
@@ -174,12 +175,14 @@ static uint32_t pop_long (struct X86EMU *);
|
||||
REMARKS:
|
||||
Handles any pending asychronous interrupts.
|
||||
****************************************************************************/
|
||||
static void
|
||||
x86emu_intr_dispatch(struct X86EMU *emu, uint8_t intno)
|
||||
static void x86emu_intr_dispatch(struct X86EMU *emu, uint8_t intno)
|
||||
{
|
||||
if (emu->_X86EMU_intrTab[intno]) {
|
||||
if (emu->_X86EMU_intrTab[intno])
|
||||
{
|
||||
(*emu->_X86EMU_intrTab[intno]) (emu, intno);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
push_word(emu, (uint16_t) emu->x86.R_FLG);
|
||||
CLEAR_FLAG(F_IF);
|
||||
CLEAR_FLAG(F_TF);
|
||||
@@ -190,17 +193,18 @@ x86emu_intr_dispatch(struct X86EMU *emu, uint8_t intno)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
x86emu_intr_handle(struct X86EMU *emu)
|
||||
static void x86emu_intr_handle(struct X86EMU *emu)
|
||||
{
|
||||
uint8_t intno;
|
||||
|
||||
if (emu->x86.intr & INTR_SYNCH) {
|
||||
if (emu->x86.intr & INTR_SYNCH)
|
||||
{
|
||||
intno = emu->x86.intno;
|
||||
emu->x86.intr = 0;
|
||||
x86emu_intr_dispatch(emu, intno);
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
PARAMETERS:
|
||||
intrnum - Interrupt number to raise
|
||||
@@ -209,8 +213,7 @@ REMARKS:
|
||||
Raise the specified interrupt to be handled before the execution of the
|
||||
next instruction.
|
||||
****************************************************************************/
|
||||
void
|
||||
x86emu_intr_raise(struct X86EMU *emu, uint8_t intrnum)
|
||||
void x86emu_intr_raise(struct X86EMU *emu, uint8_t intrnum)
|
||||
{
|
||||
emu->x86.intno = intrnum;
|
||||
emu->x86.intr |= INTR_SYNCH;
|
||||
@@ -221,20 +224,12 @@ Main execution loop for the emulator. We return from here when the system
|
||||
halts, which is normally caused by a stack fault when we return from the
|
||||
original real mode call.
|
||||
****************************************************************************/
|
||||
void
|
||||
X86EMU_exec(struct X86EMU *emu)
|
||||
void X86EMU_exec(struct X86EMU *emu)
|
||||
{
|
||||
emu->x86.intr = 0;
|
||||
|
||||
#ifdef _NOT_USED_
|
||||
#ifdef _KERNEL
|
||||
if (setjmp(&emu->exec_state))
|
||||
if (setjmp(emu->exec_state))
|
||||
return;
|
||||
#else
|
||||
if (setjmp(emu->exec_state))
|
||||
return;
|
||||
#endif
|
||||
#endif /* _NOT_USED_ */
|
||||
|
||||
for (;;) {
|
||||
if (emu->x86.intr) {
|
||||
|
||||
Reference in New Issue
Block a user