* 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=&ltag;
+    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;
 }

Reply via email to