|
From: Antonino D. <ad...@po...> - 2003-03-16 23:03:50
|
On Thu, 2003-03-13 at 14:50, Geert Uytterhoeven wrote: > On 13 Mar 2003, Antonino Daplas wrote: > > On Thu, 2003-03-13 at 02:16, Jon Smirl wrote: > > > --- Antonino Daplas <ad...@po...> wrote: > > > > Unless I missed some imported BIOS calls or other > > > > methods to do this or > > > > something similar in real-mode... > > > > > > You missed something. The address of the VBIOS ROM can > > > be controlled by writing to the PCI config space. You > > > can make the ROM appear anywhere you want it to. > > > > > > This happens even for the boot video device. > > > Somewhere very early in the boot the system BIOS > > > enabled the VBIOS ROM and copied it to C000. This is > > > the "shadow BIOS" option. > > > > > > > So the steps needed would be: > > > > 1. scan for pci devices looking for the vga controller type > > > > 2. if 1 is found other than the primary, disable the current controller > > > > 3. write to PCI config space of secondary controller the address you > > want it to appear (ie C000:0000). Can I use other addresses? I checked the PCI 2.2 specs, and it doesn't have this capability. It will give you the address of the expansion ROM, but you still have to manually copy the ROM and place it in any of the expansion areas. Unfortunately for VGA controllers, it's always C000:0000. There's a big problem in real mode: 1. COOO:0000 will be write protected by the BIOS upon initialization of the first VGA controller. This will prevent copying of the succeeding ROMS into that segment (unless you have a BIOS that supports read-write shadow ROM's). 2. Real mode does not support paging (ie copy on write tricks will not work) > > > > 4. enable the controller > > > > 5. far call c000:0003 > > > > 6. disable the controller > > > > 7. repeat > > > > Besides the finer points, did I miss anything obvious? > > Write a portable x86 emulator for non-ia32 platforms. Besides, you may even > want to use it on ia32 to make it less dependent on BIOS quirks (or for > machines without a PC BIOS). > I read Kendall's thread, and it seems a userspace vm86/vm86emu daemon might do the job. Tony |