[SeaBIOS] Upgrading a W98SE box to QEMU/SeaBIOS

nap caracol at neuf.fr
Thu May 24 20:58:44 CEST 2012


The goal was to use QEMU/SeaBIOS as an upgrade from a crashed old box,
using the surviving HDD, the installation medias, and an old box
configuration description.
The result is a working installation, but with a long login procedure.

A backup of the HDD has been made to be able to recover if necessary (it
has been necessary to recover).

The first step was to choose the QEMU command parameters to mimic as
precisely as possible the old box configuration and get some insight.
Thanks Kevin for your suggestions.

The basic command is:

> qemu-system-x86_64 -localtime -cpu pentium -m 160 hdd2GoWIP -chardev
stdio,id=seabios -device isa-debugcon,iobase=0x402,chardev=seabios

we will need the W98SE installation Startup floppy for getting the
famous MS-DOS cdrom driver:

> qemu-system-x86_64 -localtime -cpu pentium -m 160 -fda W98SESUfd
hdd2GoWIP -chardev stdio,id=seabios -device
isa-debugcon,iobase=0x402,chardev=seabios

and we will need the W98SE installation cdrom for the upgrade (I have
not really checked that):

> qemu-system-x86_64 -localtime -cpu pentium -m 160 -cdrom W98SEcdrom
hdd2GoWIP -chardev stdio,id=seabios -device
isa-debugcon,iobase=0x402,chardev=seabios

The basic command worked, but to go to the Blue Screen of Death (BSD).
Going to the MS-DOS mode at startup, I found that the cdrom was not
here. Most probably because of a driver problem. So I asked this
mailinglist for help - Searching for an MS-DOS CD driver - because a
SeaBIOS bios is in real contact with the OS and its drivers.
Thanks Fred for the pointers, which were useful per se and have pointed
me to the following Microsoft Support page, which was very helpful.

http://support.microsoft.com/kb/190303
Article ID: 190303 - Last Review: January 23, 2007 - Revision: 1.2
How to Use Real-Mode CD-ROM Drivers from Windows 98 Startup Disk

After reading it and its annexes, the problem was most probably the fact
the old box CDROM was not standard and only its real mode driver had
been installed as a cdrom driver.

Following the procedure with the W98SE Startup (floppy) disk, I got a
HDD with the necessary CDROM driver and annexes to access the cdrom
device on the command line. I was able to boot from HDD to the BSD and
the Windows startup menu, alternatively.
After some testing, I found that the good route was to choose the Step
by Step mode. It has helped me adjusting the CONFIG.SYS file relatively
to what the Microsoft Support Page states (syntax of the DEVICEHIGH
lines). The pnp call arg1=40 appears just after the ASPI2DOS.SYS
loading. To get further, when you get to the WIN command, say Y and also
say Y for loading all the Windows drivers (in fact it gives you the
opportunity to choose loading or not loading each driver), say Y to each
all. The pnp call arg1=0 appears just after the last one,
nsmouse.vxd. He will now upgrade the configuration correctly, that is,
following its already known peculiar way.
Other paths have curious outcomes, e.g. let the CPU spin to 100% and you
need to kill -9 the qemu process.

The end result is:

I am able to boot from HDD with the basic QEMU command, but yet to the
BSD and the Windows startup menu, alternatively. And from the Windows
startup menu I have to go each time through the Step by Step procedure.
That said it really works, way more quickly. Kudos to QEMU/SeaBIOS !!!
I have to check USB, printing, networking, USB floppy, CD/DVD, etc...

The BOOTLOG.TXT file did not ever change.

For the curious boot cycle, W98SE or QEMU/SeaBIOS ?

-Nap

Here are the logs of three cases:

##########################
# boot from HDD, the Windows splash appears quickly, 0.5 sec later pnp
call arg1=5, 3 second later pnp call arg1=40, 5 sec later the screen
blink one time, 6 sec later pnp call arg1=0 and the BSD. Close the window.

qemu-system-x86_64 -localtime -cpu pentium -m 160
-cdrom W98SEcdrom hdd2GoWIP -chardev
stdio,id=seabios -device isa-debugcon,iobase=0x402,chardev=seabios
Start bios (version 1.6.3)
Ram Size=0x0a000000 (0x0000000000000000 high)
Relocating init from 0x000e3b20 to 0x09fe12e0 (size 60412)
CPU Mhz=2795
=== PCI bus & bridge init ===
PCI: pci_bios_init_bus_rec bus = 0x0
=== PCI device probing ===
Found 6 PCI devices (max PCI bus is 00)
=== PCI new allocation pass #1 ===
PCI: check devices bus 0
=== PCI new allocation pass #2 ===
PCI: init bases bus 0 (primary)
  type io max 100 sum 110 base c000
    size      100: 1 bar(s),     c000 ->     c0ff
    size       10: 1 bar(s),     c100 ->     c10f
  type mem max 10000 sum 22000 base febd0000
    size    10000: 2 bar(s), febd0000 -> febeffff
    size     1000: 2 bar(s), febf0000 -> febf1fff
  type prefmem max 2000000 sum 2000000 base fc000000
    size  2000000: 1 bar(s), fc000000 -> fdffffff
PCI: map device bus 0, bfd 0x0
PCI: map device bus 0, bfd 0x8
PCI: map device bus 0, bfd 0x9
  bar 4, addr c100, size 10 [io]
PCI: map device bus 0, bfd 0xb
PCI: map device bus 0, bfd 0x10
  bar 0, addr fc000000, size 2000000 [mem]
  bar 1, addr febf0000, size 1000 [mem]
  bar 6, addr febd0000, size 10000 [mem]
PCI: map device bus 0, bfd 0x18
  bar 0, addr c000, size 100 [io]
  bar 1, addr febf1000, size 100 [mem]
  bar 6, addr febe0000, size 10000 [mem]
PCI: bus=0 devfn=0x00: vendor_id=0x8086 device_id=0x1237
PCI: bus=0 devfn=0x08: vendor_id=0x8086 device_id=0x7000
PCI: bus=0 devfn=0x09: vendor_id=0x8086 device_id=0x7010
PCI: bus=0 devfn=0x0b: vendor_id=0x8086 device_id=0x7113
PCI: bus=0 devfn=0x10: vendor_id=0x1013 device_id=0x00b8
PCI: bus=0 devfn=0x18: vendor_id=0x10ec device_id=0x8139
PIIX3/PIIX4 init: elcr=00 0c
Found 1 cpu(s) max supported 1 cpu(s)
MP table addr=0x000fd630 MPC table addr=0x000fd640 size=224
SMBIOS ptr=0x000fd610 table=0x000fd500 size=263
ACPI tables: RSDP=0x000fd4d0 RSDT=0x09ffd7b0
Scan for VGA option rom
Running option rom at c000:0003
Turning on vga text mode console
SeaBIOS (version 1.6.3)

Found 1 lpt ports
Found 1 serial ports
ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
ATA controller 2 at 170/374/0 (irq 15 dev 9)
ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (2014 MiBytes)
Searching bootorder for: /pci at i0cf8/*@1,1/drive at 0/disk at 0
DVD/CD [ata1-0: QEMU DVD-ROM ATAPI-4 DVD/CD]
Searching bootorder for: /pci at i0cf8/*@1,1/drive at 1/disk at 0
PS2 keyboard initialized
All threads complete.
Scan for option roms
Running option rom at c900:0003
pmm call arg1=1
pmm call arg1=0
pmm call arg1=1
pmm call arg1=0
Searching bootorder for: /pci at i0cf8/*@3
Searching bootorder for: /rom at genroms/vapic.bin
drive 0x000fd480: PCHS=4092/16/63 translation=large LCHS=1023/64/63
s=4124736
Running option rom at ca00:0003
ebda moved from 9fc00 to 9f400
Returned 53248 bytes of ZoneHigh
e820 map has 7 items:
  0: 0000000000000000 - 000000000009f400 = 1 RAM
  1: 000000000009f400 - 00000000000a0000 = 2 RESERVED
  2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
  3: 0000000000100000 - 0000000009ffd000 = 1 RAM
  4: 0000000009ffd000 - 000000000a000000 = 2 RESERVED
  5: 00000000feffc000 - 00000000ff000000 = 2 RESERVED
  6: 00000000fffc0000 - 0000000100000000 = 2 RESERVED
enter handle_19:
  NULL
Booting from Hard Disk...
Booting from 0000:7c00
pnp call arg1=5
pnp call arg1=40
pnp call arg1=0


##########################
# after a BSD
# boot from HDD, the menu appear with the No Error entry (3)
selected and the pnp call arg1=5; close the window before time-out..

qemu-system-x86_64 -localtime -machine pc-0.12 -cpu pentium -m 160
-cdrom W98SEcdrom hdd2GoWIP -chardev
stdio,id=seabios -device isa-debugcon,iobase=0x402,chardev=seabios
Start bios (version 1.6.3)
Ram Size=0x0a000000 (0x0000000000000000 high)
Relocating init from 0x000e3b20 to 0x09fe12e0 (size 60412)
CPU Mhz=2795
=== PCI bus & bridge init ===
PCI: pci_bios_init_bus_rec bus = 0x0
=== PCI device probing ===
Found 6 PCI devices (max PCI bus is 00)
=== PCI new allocation pass #1 ===
PCI: check devices bus 0
=== PCI new allocation pass #2 ===
PCI: init bases bus 0 (primary)
  type io max 100 sum 110 base c000
    size      100: 1 bar(s),     c000 ->     c0ff
    size       10: 1 bar(s),     c100 ->     c10f
  type mem max 10000 sum 22000 base febd0000
    size    10000: 2 bar(s), febd0000 -> febeffff
    size     1000: 2 bar(s), febf0000 -> febf1fff
  type prefmem max 2000000 sum 2000000 base fc000000
    size  2000000: 1 bar(s), fc000000 -> fdffffff
PCI: map device bus 0, bfd 0x0
PCI: map device bus 0, bfd 0x8
PCI: map device bus 0, bfd 0x9
  bar 4, addr c100, size 10 [io]
PCI: map device bus 0, bfd 0xb
PCI: map device bus 0, bfd 0x10
  bar 0, addr fc000000, size 2000000 [mem]
  bar 1, addr febf0000, size 1000 [mem]
  bar 6, addr febd0000, size 10000 [mem]
PCI: map device bus 0, bfd 0x18
  bar 0, addr c000, size 100 [io]
  bar 1, addr febf1000, size 100 [mem]
  bar 6, addr febe0000, size 10000 [mem]
PCI: bus=0 devfn=0x00: vendor_id=0x8086 device_id=0x1237
PCI: bus=0 devfn=0x08: vendor_id=0x8086 device_id=0x7000
PCI: bus=0 devfn=0x09: vendor_id=0x8086 device_id=0x7010
PCI: bus=0 devfn=0x0b: vendor_id=0x8086 device_id=0x7113
PCI: bus=0 devfn=0x10: vendor_id=0x1013 device_id=0x00b8
PCI: bus=0 devfn=0x18: vendor_id=0x10ec device_id=0x8139
PIIX3/PIIX4 init: elcr=00 0c
Found 1 cpu(s) max supported 1 cpu(s)
MP table addr=0x000fd630 MPC table addr=0x000fd640 size=224
SMBIOS ptr=0x000fd610 table=0x000fd500 size=263
ACPI tables: RSDP=0x000fd4d0 RSDT=0x09ffd7b0
Scan for VGA option rom
Running option rom at c000:0003
Turning on vga text mode console
SeaBIOS (version 1.6.3)

Found 1 lpt ports
Found 1 serial ports
ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
ATA controller 2 at 170/374/0 (irq 15 dev 9)
ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (2014 MiBytes)
Searching bootorder for: /pci at i0cf8/*@1,1/drive at 0/disk at 0
DVD/CD [ata1-0: QEMU DVD-ROM ATAPI-4 DVD/CD]
Searching bootorder for: /pci at i0cf8/*@1,1/drive at 1/disk at 0
PS2 keyboard initialized
All threads complete.
Scan for option roms
Running option rom at c900:0003
pmm call arg1=1
pmm call arg1=0
pmm call arg1=1
pmm call arg1=0
Searching bootorder for: /pci at i0cf8/*@3
Searching bootorder for: /rom at genroms/vapic.bin
drive 0x000fd480: PCHS=4092/16/63 translation=large LCHS=1023/64/63
s=4124736
Running option rom at ca00:0003
ebda moved from 9fc00 to 9f400
Returned 53248 bytes of ZoneHigh
e820 map has 7 items:
  0: 0000000000000000 - 000000000009f400 = 1 RAM
  1: 000000000009f400 - 00000000000a0000 = 2 RESERVED
  2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
  3: 0000000000100000 - 0000000009ffd000 = 1 RAM
  4: 0000000009ffd000 - 000000000a000000 = 2 RESERVED
  5: 00000000feffc000 - 00000000ff000000 = 2 RESERVED
  6: 00000000fffc0000 - 0000000100000000 = 2 RESERVED
enter handle_19:
  NULL
Booting from Hard Disk...
Booting from 0000:7c00
pnp call arg1=5


##########################
# after a BSD
# boot from HDD, the menu appear with the No Error entry (3)
selected and pnp call arg1=5, choose the Step by Step entry (5); the pnp
call arg1=40 appears after saying Y to the DEVICE=C:\RMCD\ASPI2DOS.sys
LINE OF CONFIG.SYS; WIN: No; > D:\install.exe; CPU spin, kill.

qemu-system-x86_64 -localtime -machine pc-0.12 -cpu pentium -m 160
-cdrom W98SEcdrom hdd2GoWIP -chardev
stdio,id=seabios -device isa-debugcon,iobase=0x402,chardev=seabios
Start bios (version 1.6.3)
Ram Size=0x0a000000 (0x0000000000000000 high)
Relocating init from 0x000e3b20 to 0x09fe12e0 (size 60412)
CPU Mhz=2795
=== PCI bus & bridge init ===
PCI: pci_bios_init_bus_rec bus = 0x0
=== PCI device probing ===
Found 6 PCI devices (max PCI bus is 00)
=== PCI new allocation pass #1 ===
PCI: check devices bus 0
=== PCI new allocation pass #2 ===
PCI: init bases bus 0 (primary)
  type io max 100 sum 110 base c000
    size      100: 1 bar(s),     c000 ->     c0ff
    size       10: 1 bar(s),     c100 ->     c10f
  type mem max 10000 sum 22000 base febd0000
    size    10000: 2 bar(s), febd0000 -> febeffff
    size     1000: 2 bar(s), febf0000 -> febf1fff
  type prefmem max 2000000 sum 2000000 base fc000000
    size  2000000: 1 bar(s), fc000000 -> fdffffff
PCI: map device bus 0, bfd 0x0
PCI: map device bus 0, bfd 0x8
PCI: map device bus 0, bfd 0x9
  bar 4, addr c100, size 10 [io]
PCI: map device bus 0, bfd 0xb
PCI: map device bus 0, bfd 0x10
  bar 0, addr fc000000, size 2000000 [mem]
  bar 1, addr febf0000, size 1000 [mem]
  bar 6, addr febd0000, size 10000 [mem]
PCI: map device bus 0, bfd 0x18
  bar 0, addr c000, size 100 [io]
  bar 1, addr febf1000, size 100 [mem]
  bar 6, addr febe0000, size 10000 [mem]
PCI: bus=0 devfn=0x00: vendor_id=0x8086 device_id=0x1237
PCI: bus=0 devfn=0x08: vendor_id=0x8086 device_id=0x7000
PCI: bus=0 devfn=0x09: vendor_id=0x8086 device_id=0x7010
PCI: bus=0 devfn=0x0b: vendor_id=0x8086 device_id=0x7113
PCI: bus=0 devfn=0x10: vendor_id=0x1013 device_id=0x00b8
PCI: bus=0 devfn=0x18: vendor_id=0x10ec device_id=0x8139
PIIX3/PIIX4 init: elcr=00 0c
Found 1 cpu(s) max supported 1 cpu(s)
MP table addr=0x000fd630 MPC table addr=0x000fd640 size=224
SMBIOS ptr=0x000fd610 table=0x000fd500 size=263
ACPI tables: RSDP=0x000fd4d0 RSDT=0x09ffd7b0
Scan for VGA option rom
Running option rom at c000:0003
Turning on vga text mode console
SeaBIOS (version 1.6.3)

Found 1 lpt ports
Found 1 serial ports
ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
ATA controller 2 at 170/374/0 (irq 15 dev 9)
ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (2014 MiBytes)
Searching bootorder for: /pci at i0cf8/*@1,1/drive at 0/disk at 0
DVD/CD [ata1-0: QEMU DVD-ROM ATAPI-4 DVD/CD]
Searching bootorder for: /pci at i0cf8/*@1,1/drive at 1/disk at 0
PS2 keyboard initialized
All threads complete.
Scan for option roms
Running option rom at c900:0003
pmm call arg1=1
pmm call arg1=0
pmm call arg1=1
pmm call arg1=0
Searching bootorder for: /pci at i0cf8/*@3
Searching bootorder for: /rom at genroms/vapic.bin
drive 0x000fd480: PCHS=4092/16/63 translation=large LCHS=1023/64/63
s=4124736
Running option rom at ca00:0003
ebda moved from 9fc00 to 9f400
Returned 53248 bytes of ZoneHigh
e820 map has 7 items:
  0: 0000000000000000 - 000000000009f400 = 1 RAM
  1: 000000000009f400 - 00000000000a0000 = 2 RESERVED
  2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
  3: 0000000000100000 - 0000000009ffd000 = 1 RAM
  4: 0000000009ffd000 - 000000000a000000 = 2 RESERVED
  5: 00000000feffc000 - 00000000ff000000 = 2 RESERVED
  6: 00000000fffc0000 - 0000000100000000 = 2 RESERVED
enter handle_19:
  NULL
Booting from Hard Disk...
Booting from 0000:7c00
pnp call arg1=5
pnp call arg1=40
Process stopped



More information about the SeaBIOS mailing list