* Ronald G Minnich <[EMAIL PROTECTED]> [020417 00:33]:
> On Wed, 17 Apr 2002, Stefan Reinauer wrote:
>
> > is there any easy way of getting non interactive mode to work?
>
> yes, just get rid of that call to the X86EMU_trace_on(); before the Exec.
>
> No int1x support yet. I can use the help. Help Stefan!
I made a little patch to get intXX support into the right direction.
Some things work, like character output whereas Pci access does not.
The int skeleton uses libpci from pciutils for now. Writing an interface
to LinuxBIOS/the linux kernel should be easy according to pci-userspace.c
I test my images with
./testbios pcirom.img 0x8000 0xc0000 0x3 0xc000
---------------------------------------------------------------------
int 0x1a: ax=0xb109 bx=0x0 cx=0x0 dx=0x0 di=0x10 es=0x0
pciReadWord: idx=10
eax=0x9 ecx=0x14 eflags=0x84
Realtek RTL8139(X) PXE/RPL BootROM
Press F10 key to change bootstrap selection.
Current Selection is -- Disable network boot. EAX=ffff0124
EBX=00000000 ECX=00000000 EDX=00000000
ESP=0000ffdc EBP=00000000 ESI=00000000 EDI=00000010
DS=0000 ES=0000 SS=0000 CS=c000 EIP=000008b9
NV UP DI PL ZR NA PE NC
EAX=ffff0124 EBX=00000000 ECX=00000000 EDX=00000000
ESP=0000ffdc EBP=00000000 ESI=00000000 EDI=00000010
DS=0000 ES=0000 SS=0000 CS=c000 EIP=000008b9
NV UP DI NG NZ AC PO CY
int 0x1a: ax=0xffffb101 bx=0x0 cx=0x0 dx=0x0 di=0x0 es=0x0
ax=0xb100 dx=0x20494350 bx=0x210 cx=0x0 flags=0x46
---------------------------------------------------------------------
Stefan
--
Ok hex 4666 dup negate do i 4000 dup 2* negate do " *" 0 dup 2dup 1e 0 do
2swap * e >>a 2* 5 pick + -rot - j + dup dup * e >>a rot dup dup * e >>a
rot swap 2dup + 10000 > if 3drop 3drop " " 0 dup 2dup leave then loop
2drop 2drop type 268 +loop cr drop 5de +loop
diff -urN freebios.orig/util/vgabios/Makefile freebios/util/vgabios/Makefile
--- freebios.orig/util/vgabios/Makefile Sun Apr 14 06:44:07 2002
+++ freebios/util/vgabios/Makefile Thu Apr 18 00:28:30 2002
@@ -1,12 +1,15 @@
-CFLAGS=-Ix86emu/include -O2 -g
-all: testme testbios
+CFLAGS = -Ix86emu/include -O2 -g
-testbios: testbios.o helper_exec.o x86emu/src/x86emu/libx86emu.a
- cc -o testbios testbios.o helper_exec.o x86emu/src/x86emu/libx86emu.a
-testme: test.o helper_exec.o x86emu/src/x86emu/libx86emu.a
- cc -o testme test.o helper_exec.o x86emu/src/x86emu/libx86emu.a
-test.o: test.c test.h
+OBJECTS = testbios.o helper_exec.o inthandler.o pci-userspace.o
+LIBS = x86emu/src/x86emu/libx86emu.a
+LIBS += /usr/lib/libpci.a
+
+all: testbios
+
+testbios: $(OBJECTS) $(LIBS)
+ cc -o testbios $(OBJECTS) $(LIBS)
+
helper_exec.o: helper_exec.c test.h
clean:
- rm -f *.o testme *~ testbios
+ rm -f *.o *~ testbios
diff -urN freebios.orig/util/vgabios/helper_exec.c freebios/util/vgabios/helper_exec.c
--- freebios.orig/util/vgabios/helper_exec.c Sun Apr 14 06:44:08 2002
+++ freebios/util/vgabios/helper_exec.c Thu Apr 18 00:28:30 2002
@@ -29,50 +29,6 @@
u32 x_inl(u16 port);
void x_outl(u16 port, u32 val);
-int
-setup_int(ptr pInt)
-{
-/*
- if (pInt != current) {
- if (!MapCurrentInt10(pInt))
- return -1;
- current = pInt;
- }
- */
- X86_EAX = (u32) pInt->ax;
- X86_EBX = (u32) pInt->bx;
- X86_ECX = (u32) pInt->cx;
- X86_EDX = (u32) pInt->dx;
- X86_ESI = (u32) pInt->si;
- X86_EDI = (u32) pInt->di;
- X86_EBP = (u32) pInt->bp;
- X86_ESP = 0x1000; X86_SS = pInt->stackseg >> 4;
- X86_EIP = 0x0600; X86_CS = 0x0; /* address of 'hlt' */
- X86_DS = 0x40; /* standard pc ds */
- X86_ES = pInt->es;
- X86_FS = 0;
- X86_GS = 0;
- printf("FIX ME FIX ME FIXME NO IOPL\n");
- //X86_EFLAGS = X86_IF_MASK | X86_IOPL_MASK;
-
- /* blocks sigio here */
- return 0;
-}
-
-void
-finish_int(ptr pInt, int sig)
-{
- pInt->ax = (u16) X86_EAX;
- pInt->bx = (u16) X86_EBX;
- pInt->cx = (u16) X86_ECX;
- pInt->dx = (u16) X86_EDX;
- pInt->si = (u16) X86_ESI;
- pInt->di = (u16) X86_EDI;
- pInt->es = (u16) X86_ES;
- pInt->bp = (u16) X86_EBP;
- pInt->flags = (u16) X86_FLAGS;
-}
-
/* general software interrupt handler */
u32
getIntVect(ptr pInt,int num)
diff -urN freebios.orig/util/vgabios/inthandler.c freebios/util/vgabios/inthandler.c
--- freebios.orig/util/vgabios/inthandler.c Fri Apr 12 22:42:47 2002
+++ freebios/util/vgabios/inthandler.c Thu Apr 18 00:28:30 2002
@@ -1,32 +1,52 @@
-#include "xf86Pci.h"
-#define _INT10_PRIVATE
-#include "xf86int10.h"
-#include "int10Defines.h"
-
+#include "test.h"
+#define ErrorF(x...) printf(x);
+#define xf86Int10InfoPtr ptr
#define REG pInt
+#define PRINT_INT
+#define outb x_outb
+#include "pci-userspace.h"
-xf86Int10InfoPtr Int10Current = NULL;
+void x86emu_dump_xregs (void);
-static int int1A_handler(xf86Int10InfoPtr pInt);
+static int int1A_handler(ptr pInt);
#ifndef _PC
-static int int42_handler(xf86Int10InfoPtr pInt);
+static int int42_handler(ptr pInt);
#endif
-static int intE6_handler(xf86Int10InfoPtr pInt);
-static PCITAG findPci(unsigned short bx);
-static CARD32 pciSlotBX(pciVideoPtr pvp);
+static int intE6_handler(ptr pInt);
+
+extern ptr current;
+
+void setup_int(void)
+{
+ pciInit();
+}
+
+void exit_int(void)
+{
+ pciExit();
+}
+
+void do_int(int num)
+{
+ int_handler(num);
+}
int
-int_handler(xf86Int10InfoPtr pInt)
+int_handler(int num)
{
- int num = pInt->num;
+
+ ptr pInt=current;
int ret = 0;
+ pInt->num=num;
switch (num) {
#ifndef _PC
case 0x10:
case 0x42:
case 0x6D:
+#if 0
if (getIntVect(pInt, num) == I_S_DEFAULT_INT_VECT)
+#endif
ret = int42_handler(pInt);
break;
#endif
@@ -40,15 +60,11 @@
break;
}
- if (!ret)
- ret = run_bios_int(num, pInt);
+ //if (!ret)
+ // ret = run_bios_int(num, pInt);
- if (!ret) {
- xf86DrvMsg(pInt->scrnIndex, X_ERROR,
- "Halting on int 0x%2.2x!\n", num);
- dump_registers(pInt);
- stack_trace(pInt);
- }
+ if (!ret)
+ x86emu_dump_xregs();
return ret;
}
@@ -243,12 +259,9 @@
/* DL = character column */
/* Not Implemented */
{ /* Localise */
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 2,
- "int 0x%2.2x(AH=0x04) -- Get Light Pen Position\n", pInt->num);
- if (xf86GetVerbosity() > 3) {
- dump_registers(pInt);
- stack_trace(pInt);
- }
+ printf( "int%x - Get Light Pen Position. "
+ "Function not implemented.\n", pInt->num);
+ x86emu_dump_xregs();
X86_AH = X86_BX = X86_CX = X86_DX = 0;
}
break;
@@ -298,17 +311,9 @@
/* Leave: Nothing */
/* Not Implemented */
{ /* Localise */
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 2,
- "int 0x%2.2x(AH=0x06) -- Initialise or Scroll Window Up\n",
- pInt->num);
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 3,
- " AL=0x%2.2x, BH=0x%2.2x,"
- " CH=0x%2.2x, CL=0x%2.2x, DH=0x%2.2x, DL=0x%2.2x\n",
- X86_AL, X86_BH, X86_CH, X86_CL, X86_DH, X86_DL);
- if (xf86GetVerbosity() > 3) {
- dump_registers(pInt);
- stack_trace(pInt);
- }
+ printf( "int%x: Initialise or Scroll Window Up - "
+ "Function not implemented.\n", pInt->num);
+ x86emu_dump_xregs();
}
break;
@@ -323,17 +328,10 @@
/* Leave: Nothing */
/* Not Implemented */
{ /* Localise */
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 2,
- "int 0x%2.2x(AH=0x07) -- Initialise or Scroll Window Down\n",
- pInt->num);
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 3,
- " AL=0x%2.2x, BH=0x%2.2x,"
- " CH=0x%2.2x, CL=0x%2.2x, DH=0x%2.2x, DL=0x%2.2x\n",
- X86_AL, X86_BH, X86_CH, X86_CL, X86_DH, X86_DL);
- if (xf86GetVerbosity() > 3) {
- dump_registers(pInt);
- stack_trace(pInt);
- }
+ printf( "int%x: Initialise or Scroll Window Down - "
+ "Function not implemented.\n", pInt->num);
+ x86emu_dump_xregs();
+
}
break;
@@ -344,15 +342,10 @@
/* AL = character */
/* Not Implemented */
{ /* Localise */
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 2,
- "int 0x%2.2x(AH=0x08) -- Read Character and Attribute at"
- " Cursor\n", pInt->num);
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 3,
- "BH=0x%2.2x\n", X86_BH);
- if (xf86GetVerbosity() > 3) {
- dump_registers(pInt);
- stack_trace(pInt);
- }
+ printf( "int%x: Read Character and Attribute at Cursor - "
+ "Function not implemented.\n", pInt->num);
+ x86emu_dump_xregs();
+
X86_AX = 0;
}
break;
@@ -366,16 +359,10 @@
/* Leave: Nothing */
/* Not Implemented */
{ /* Localise */
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 2,
- "int 0x%2.2x(AH=0x09) -- Write Character and Attribute at"
- " Cursor\n", pInt->num);
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 3,
- "AL=0x%2.2x, BH=0x%2.2x, BL=0x%2.2x, CX=0x%4.4x\n",
- X86_AL, X86_BH, X86_BL, X86_CX);
- if (xf86GetVerbosity() > 3) {
- dump_registers(pInt);
- stack_trace(pInt);
- }
+ printf( "int%x: Write Character and Attribute at Cursor - "
+ "Function not implemented.\n", pInt->num);
+ x86emu_dump_xregs();
+
}
break;
@@ -388,16 +375,10 @@
/* Leave: Nothing */
/* Not Implemented */
{ /* Localise */
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 2,
- "int 0x%2.2x(AH=0x0A) -- Write Character at Cursor\n",
- pInt->num);
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 3,
- "AL=0x%2.2x, BH=0x%2.2x, BL=0x%2.2x, CX=0x%4.4x\n",
- X86_AL, X86_BH, X86_BL, X86_CX);
- if (xf86GetVerbosity() > 3) {
- dump_registers(pInt);
- stack_trace(pInt);
- }
+ printf( "int%x: Write Character at Cursor - "
+ "Function not implemented.\n", pInt->num);
+ x86emu_dump_xregs();
+
}
break;
@@ -433,15 +414,10 @@
/* Leave: Nothing */
/* Not Implemented */
{ /* Localise */
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 2,
- "int 0x%2.2x(AH=0x0C) -- Write Graphics Pixel\n", pInt->num);
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 3,
- "AL=0x%2.2x, BH=0x%2.2x, CX=0x%4.4x, DX=0x%4.4x\n",
- X86_AL, X86_BH, X86_CX, X86_DX);
- if (xf86GetVerbosity() > 3) {
- dump_registers(pInt);
- stack_trace(pInt);
- }
+ printf( "int%x: Write Graphics Pixel - "
+ "Function not implemented.\n", pInt->num);
+ x86emu_dump_xregs();
+
}
break;
@@ -453,16 +429,12 @@
/* Leave: AL = pixel value */
/* Not Implemented */
{ /* Localise */
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 2,
- "int 0x%2.2x(AH=0x0D) -- Read Graphics Pixel\n", pInt->num);
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 3,
- "BH=0x%2.2x, CX=0x%4.4x, DX=0x%4.4x\n",
- X86_BH, X86_CX, X86_DX);
- if (xf86GetVerbosity() > 3) {
- dump_registers(pInt);
- stack_trace(pInt);
- }
- X86_AL = 0;
+ printf( "int%x: Write Graphics Pixel - "
+ "Function not implemented.\n", pInt->num);
+ x86emu_dump_xregs();
+
+ X86_AL = 0;
+
}
break;
@@ -479,16 +451,12 @@
/* which might or might not have been */
/* installed yet. */
{ /* Localise */
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 2,
- "int 0x%2.2x(AH=0x0E) -- Write Character in Teletype Mode\n",
- pInt->num);
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 3,
- "AL=0x%2.2x, BH=0x%2.2x, BL=0x%2.2x\n",
- X86_AL, X86_BH, X86_BL);
- if (xf86GetVerbosity() > 3) {
- dump_registers(pInt);
- stack_trace(pInt);
- }
+#ifdef PARANOID
+ printf( "int%x: Write Character in Teletype Mode - "
+ "Function not implemented.\n", pInt->num);
+ x86emu_dump_xregs();
+#endif
+ printf("%c",X86_AL);
}
break;
@@ -545,17 +513,9 @@
/* which might or might not have been */
/* installed yet. */
{ /* Localise */
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 2,
- "int 0x%2.2x(AH=0x13) -- Write String in Teletype Mode\n",
- pInt->num);
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 3,
- "AL=0x%2.2x, BL=0x%2.2x, CX=0x%4.4x,"
- " DH=0x%2.2x, DL=0x%2.2x, ES:BP=0x%4.4x:0x%4.4x\n",
- X86_AL, X86_BL, X86_CX, X86_DH, X86_DL, X86_ES, X86_BP);
- if (xf86GetVerbosity() > 3) {
- dump_registers(pInt);
- stack_trace(pInt);
- }
+ printf("int%x: Write String in Teletype Mode - Function not implemented.\n",
+pInt->num);
+ x86emu_dump_xregs();
+
}
break;
@@ -581,11 +541,11 @@
PCITAG tag;
pciVideoPtr pvp;
- if (!(pvp = xf86GetPciInfoForEntity(pInt->entityIndex)))
- return 0; /* oops */
+// if (!(pvp = xf86GetPciInfoForEntity(pInt->entityIndex)))
+// return 0; /* oops */
#ifdef PRINT_INT
- ErrorF("int 0x1a: ax=0x%x bx=0x%x cx=0x%x dx=0x%x di=0x%x es=0x%x\n",
+ ErrorF("\nint 0x1a: ax=0x%x bx=0x%x cx=0x%x dx=0x%x di=0x%x es=0x%x\n",
X86_EAX, X86_EBX, X86_ECX, X86_EDX, X86_EDI, X86_ESI);
#endif
switch (X86_AX) {
@@ -602,7 +562,7 @@
#endif
return 1;
case 0xb102:
- if (X86_DX == pvp->vendor && X86_CX == pvp->chipType && X86_ESI == 0) {
+ if (X86_DX == pvp->vendor_id && X86_CX == pvp->device_id && X86_ESI == 0) {
X86_EAX = X86_AL | (SUCCESSFUL << 8);
X86_EFLAGS &= ~((unsigned long)0x01); /* clear carry flag */
X86_EBX = pciSlotBX(pvp);
@@ -624,6 +584,7 @@
#endif
return 1;
case 0xb103:
+#if 0
if (X86_CL == pvp->interface &&
X86_CH == pvp->subclass &&
((X86_ECX & 0xFFFF0000) >> 16) == pvp->class) {
@@ -632,7 +593,7 @@
X86_EFLAGS &= ~((unsigned long)0x01); /* clear carry flag */
}
#ifdef SHOW_ALL_DEVICES
- else if ((pvp = xf86FindPciClass(X86_CL, X86_CH,
+ else if ((pvp = FindPciClass(X86_CL, X86_CH,
(X86_ECX & 0xffff0000) >> 16,
X86_ESI, pvp))) {
X86_EAX = X86_AL | (SUCCESSFUL << 8);
@@ -641,6 +602,10 @@
}
#endif
else {
+#else
+ {
+ printf("int1a: pci_find_class not implemented.\n");
+#endif
X86_EAX = X86_AL | (DEVICE_NOT_FOUND << 8);
X86_EFLAGS |= ((unsigned long)0x01); /* set carry flag */
}
@@ -671,7 +636,7 @@
X86_EFLAGS |= ((unsigned long)0x01); /* set carry flag */
}
#ifdef PRINT_INT
- ErrorF("ax=0x%x cx=0x%x flags=0x%x\n", X86_EAX, X86_ECX, X86_EFLAGS);
+ ErrorF("eax=0x%x ecx=0x%x eflags=0x%x\n", X86_EAX, X86_ECX, X86_EFLAGS);
#endif
return 1;
case 0xb10a:
@@ -705,7 +670,7 @@
pciWriteWord(tag, X86_EDI, X86_CX);
X86_EAX = X86_AL | (SUCCESSFUL << 8);
X86_EFLAGS &= ~((unsigned long)0x01); /* clear carry flag */
- } else {
+ } else {
X86_EAX = X86_AL | (BAD_REGISTER_NUMBER << 8);
X86_EFLAGS |= ((unsigned long)0x01); /* set carry flag */
}
@@ -727,38 +692,19 @@
#endif
return 1;
default:
- xf86DrvMsgVerb(pInt->scrnIndex, X_NOT_IMPLEMENTED, 2,
- "int 0x1a subfunction\n");
- dump_registers(pInt);
- if (xf86GetVerbosity() > 3)
- stack_trace(pInt);
+ printf("int1a: subfunction not implemented.\n");
+ x86emu_dump_regs();
return 0;
}
}
-static PCITAG
-findPci(unsigned short bx)
-{
- int bus = (bx >> 8) & 0xFF;
- int dev = (bx >> 3) & 0x1F;
- int func = bx & 0x7;
- if (xf86IsPciDevPresent(bus, dev, func))
- return pciTag(bus, dev, func);
- return 0;
-}
-
-static CARD32
-pciSlotBX(pciVideoPtr pvp)
-{
- return (pvp->bus << 8) | (pvp->device << 3) | (pvp->func);
-}
-
/*
* handle initialization
*/
static int
intE6_handler(xf86Int10InfoPtr pInt)
{
+#if 0
pciVideoPtr pvp;
if ((pvp = xf86GetPciInfoForEntity(pInt->entityIndex)))
@@ -768,5 +714,7 @@
X86_CS = pInt->BIOSseg;
X86_EIP = 0x0003;
X86_ES = 0; /* standard pc es */
+#endif
+ printf ("intE6 not supported right now.\n");
return 1;
}
diff -urN freebios.orig/util/vgabios/pci-userspace.c
freebios/util/vgabios/pci-userspace.c
--- freebios.orig/util/vgabios/pci-userspace.c Thu Jan 1 01:00:00 1970
+++ freebios/util/vgabios/pci-userspace.c Thu Apr 18 00:29:30 2002
@@ -0,0 +1,90 @@
+#include <stdio.h>
+#include "pci-userspace.h"
+
+struct pci_access *pacc;
+struct pci_dev *dev;
+
+struct pci_filter ltag;
+
+
+int pciNumBuses=0;
+
+int pciInit(void)
+{
+ pacc = pci_alloc();
+
+ pci_init(pacc);
+ pci_scan_bus(pacc);
+
+ return 0;
+}
+
+int pciExit(void)
+{
+ pci_cleanup(pacc);
+ return 0;
+}
+#if 0
+pciReadLong()
+{
+ int c;
+ pci_get_dev(struct pci_access *acc, int bus, int dev, int func);
+ pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES);
+ c=pci_read_dword(dev, regnum);
+}
+#endif
+
+PCITAG findPci(unsigned short bx)
+{
+ PCITAG tag=<ag;
+ pciVideoPtr dev;
+
+ int bus = (bx >> 8) & 0xFF;
+ int slot = (bx >> 3) & 0x1F;
+ int func = bx & 0x7;
+
+ tag->bus=bus; tag->slot=slot; tag->func=func;
+
+ if (pci_get_dev(pacc, bus, slot, func))
+ return tag;
+
+ return NULL;
+}
+
+CARD32 pciSlotBX(pciVideoPtr pvp)
+{
+ return (pvp->bus << 8) | (pvp->dev << 3) | (pvp->func);
+}
+
+CARD8 pciReadByte(PCITAG tag, CARD32 idx)
+{
+ printf("pciReadByte: idx=%x\n",idx);
+}
+
+CARD16 pciReadWord(PCITAG tag, CARD32 idx)
+{
+ printf("pciReadWord: idx=%x\n",idx);
+}
+
+CARD32 pciReadLong(PCITAG tag, CARD32 idx)
+{
+ printf("pciReadWord: idx=%x\n",idx);
+}
+
+
+void pciWriteLong(PCITAG tag, CARD32 idx, CARD32 data)
+{
+ printf("pciWriteLong: idx=%x, data=%x\n",idx,data);
+}
+
+void pciWriteWord(PCITAG tag, CARD32 idx, CARD16 data)
+{
+ printf("pciWriteWord: idx=%x, data=%x\n",idx,data);
+}
+
+
+void pciWriteByte(PCITAG tag, CARD32 idx, CARD8 data)
+{
+ printf("pciWriteByte: idx=%x, data=%x\n",idx,data);
+}
+
diff -urN freebios.orig/util/vgabios/pci-userspace.h
freebios/util/vgabios/pci-userspace.h
--- freebios.orig/util/vgabios/pci-userspace.h Thu Jan 1 01:00:00 1970
+++ freebios/util/vgabios/pci-userspace.h Thu Apr 18 00:29:30 2002
@@ -0,0 +1,27 @@
+#include <pci/pci.h>
+
+#define CARD8 unsigned char
+#define CARD16 unsigned short
+#define CARD32 unsigned long
+
+#define PCITAG struct pci_filter *
+#define pciVideoPtr struct pci_dev *
+
+extern int pciNumBuses;
+
+int pciInit(void);
+int pciExit(void);
+
+
+PCITAG findPci(unsigned short bx);
+CARD32 pciSlotBX(pciVideoPtr pvp);
+
+void pciWriteLong(PCITAG tag, CARD32 idx, CARD32 data);
+void pciWriteWord(PCITAG tag, CARD32 idx, CARD16 data);
+void pciWriteByte(PCITAG tag, CARD32 idx, CARD8 data);
+
+CARD32 pciReadLong(PCITAG tag, CARD32 idx);
+CARD16 pciReadWord(PCITAG tag, CARD32 idx);
+CARD8 pciReadByte(PCITAG tag, CARD32 idx);
+
+
diff -urN freebios.orig/util/vgabios/testbios.c freebios/util/vgabios/testbios.c
--- freebios.orig/util/vgabios/testbios.c Mon Apr 15 05:26:40 2002
+++ freebios/util/vgabios/testbios.c Thu Apr 18 00:28:30 2002
@@ -11,24 +11,20 @@
_ptr p;
ptr current = 0;
extern int teststart, testend;
+#if 0
void
test()
{
__asm__ __volatile__(".code16\nteststart:movb $4, %al\n outb %al,
$0x80\n.code32\nhlt\ntestend:");
}
+#endif
-static void
-do_int(int num)
-{
- setup_int(current);
- // if(int_handler(current))
- ; //X86EMU_Exec();
- finish_int(current);
-}
+void do_int(int num);
+void setup_int(void);
+void exit_int(void);
unsigned char biosmem[1024*1024];
-
unsigned char *mapitin(char *file, size_t size)
{
void * z;
@@ -91,11 +87,12 @@
if (iopl(3) < 0)
die("iopl");
+ setup_int();
sync();
sync();
- // for (i=0;i<256;i++)
- // intFuncs[i] = do_int;
- // X86EMU_setupIntrFuncs(intFuncs);
+ for (i=0;i<256;i++)
+ intFuncs[i] = do_int;
+ X86EMU_setupIntrFuncs(intFuncs);
cp = mapitin(filename, size);
current->ax = 0xff;
@@ -107,15 +104,11 @@
X86_CS = initialcs;
// M.x86.saved_cs = 0;
// M.x86.saved_ip = 0;
- X86EMU_trace_on();
-// x86emu_single_step ();
+// X86EMU_trace_on();
+
X86EMU_exec();
-// x86emu_single_step ();
- //x86emu_single_step ();
- //x86emu_single_step ();
- //x86emu_single_step ();
-
+ exit_int();
return 0;
}