Installing Windows 98 SE on a P4 PC

Last modified: Sun Jul 6 14:43:11 EDT 2014

Introduction
Basics
BIOS setup
Partitioning and formatting
Windows 98 Setup
After the reboot
Multiboot considerations
Patch for hang-on-shutdown
Problems installing Nvidia drivers
Vanilla DOOM with a PCI sound card
Installing as plain DOS
Resources

Introduction

Despite great advances from Windows NT through Windows 2K and then XP, my first impression of Windows 98 upon returning to it after all these years was "Wow, great upgrade!"  It's simpler, smaller, and faster than XP; it runs my favorite game (Classic DOOM); and, it's immune to the kind of troubleshooting nightmare—you know, that bang-your-head-for-hours, occasionally yelling "WHY IS IT DOING THIS?!?" at the ceiling kind of troubleshooting nightmare—that the obscurity and complexity of NT/2K/XP engender.  W98 isn't perfect, heck no, but like an older model car, it is possible for a mere mortal to understand its workings and fix it when it breaks.  That is a Good Thing.

My current workhorse PC and the original protagonist of this article is of late 2004 vintage and uses the 865PE chipset released the previous year.  W98 drivers for the motherboard chipset (especially the AC97 audio) and the GeForce 6-series video card are available, so with some careful configuration choices it is possible to run W98 on it with relatively little loss of functionality.  Two somewhat newer chipsets that I have begun experimenting with have no W98 driver support at all but are booting to desktop.

ChipsetChipset release dateMotherboard(s) tested
865PE2003-05MSI 865PE Neo3-F / ASRock ConRoe865PE
PT880 Ultra2005-01ASRock 4CoreDual-SATA2
nForce 750i SLI2007Asus P5N-D

Basics

  1. W98 is a single-CPU operating system.  Additional cores provide no benefit.  The last single-core CPUs in Intel's desktop category were the Prescott Pentium 4 series.
  2. W98 has a host of problems with systems that have more than 512 MiB of RAM.  There are workarounds, but if the PC is being configured for W98 and compatible 128/256/512 MiB DIMMs are available then it's preferable to limit the amount of RAM.
  3. W98 has another host of problems related to hard disk size and partitioning.  It is absolutely unable to access anything beyond the 128 GiB limit of 28-bit LBA.  Fdisk and Format bugs kick in much earlier than that, however.
  4. W98's plain old IDE driver works fine for SATA hard drives and SSDs as long as the BIOS configuration issue described in the next section doesn't get in the way.
  5. W98's plain old "Standard PCI Graphics Adapter (VGA)" driver works fine for AGP and PCIe graphics cards that don't have their own W98 drivers, but it is limited to 640×480 16-color mode and is slow.
  6. Nvidia's official support for W98 ended with the GeForce 6 series GPUs.  Maximus-Decim's modded 82.69 drivers supposedly work some of the time up through the GeForce 9 series, but they didn't work for me.
  7. Nvidia's official W98 drivers often have trouble modesetting DOOM's 320×200 graphics, especially for LCD monitors, so if you expect to play DOOM you might be stuck using the standard VGA driver anyhow.
A PCIe GeForce 8500 GT connected via DVI responded acceptably to the "Standard PCI Graphics Adapter (VGA)" driver, but for some reason felt the need to put a thin black border around the entire screen.

Probably works but not yet tested:

  1. Running single core on a multi-core CPU
  2. SATA DVD drives

BIOS setup

The following problem cropped up on the 865PE chipset, but (quite unexpectedly) failed to crop up on the two newer chipsets.

With default BIOS settings, I got two reboots into the installation process and then it hung.  With BOOTLOG.TXT output enabled, the end of the log looked like this:

[0015B6D2] Initing hsflop.pdr
[0015B6F1] Init Success hsflop.pdr
[0015B6F1] Initing esdi_506.pdr
[0015B6F7] Init Success esdi_506.pdr
[0015B6F8] Initing esdi_506.pdr
[0015B703] Init Success esdi_506.pdr
[0015B703] Initing esdi_506.pdr

esdi_506 is identified as the Windows protected mode IDE disk driver.  The problem, apparently, was that the mixture of SATA and PATA interfaces didn't satisfy W98's outdated assumptions about ports and IRQs.

To avoid this problem, you have to configure the BIOS to use "Legacy Mode" or "Compatible Mode," rather than "Native Mode" or "Enhanced Mode," for its ATA channels.  This limits you to four devices, but they don't all have to be PATA.  The BIOS can map two SATA drives onto an emulated IDE channel.

(From two different AMI BIOSes:)

BIOS setup: On-Chip IDE Configuration BIOS setup: IDE Configuration

Beware that changing this configuration on a working system will probably kill an installation of Windows XP.  If Linux stops booting, you just need to boot off the installation CD and update the device names in /etc/fstab.  A preemptive change to use filesystem volume labels instead of device names should prevent it from breaking in the first place.  See man fstab.

The BIOSes on the PT880 Ultra and 750i motherboards did not present this compatibility option, but they didn't need it; W98 just worked.*

* Actually, it turned out that W98 installations on the PT880 Ultra get stuck at a BSOD about half of the time, and the guilty driver is "Standard Dual PCI IDE Controller."  The rest of the time, however, it just works with no changes.

Partitioning and formatting

The regular W98 install process in which it automatically formats a partition before running setup seldom works at all with a larger disk and often trashes the disk before failing.  If you FORMAT /S the partition from a boot floppy first, you can then run setup and it should desist from formatting it again.  (You do have a floppy drive, right?)

For best results, use the patched-up FDISK from http://support.microsoft.com/kb/263044 and the patched-up IO.SYS from http://support.microsoft.com/kb/311561 on a W98 boot floppy.  Put W98 in the first partition and don't make that partition gratuitously large.  W98 must reside entirely within the first 128 GiB (137 GB) of the hard drive to avoid overflowing its 28-bit LBA implementation.

Fdisk prints all sizes incorrectly.  Ignore them.  They are completely bogus.  Just tell it to enable large disk support, specify the partition size in MB, let it run, and set the new partition as active.

Various disk-trashing misbehaviors can occur if one does not walk on eggshells around W98 Fdisk and Format.

Windows 98 Setup

Continue past the warnings about there already being an OS in the partition and about NT file system (if applicable).

When setup finishes its first phase, you are instructed to remove the floppy (meaning take the CD out) and reboot.  If you have 1 GiB or more of memory and let the install process continue without intervention, W98 will now halt with the message "Insufficient memory to initialize windows."  As described in KB184447 *, the workaround is to add the following setting to WINDOWS\SYSTEM.INI:

[386Enh]
MaxPhysPage=30000

So instead of just taking the CD out, you can swap it for a Linux installation CD, boot that and make the edit to WINDOWS\SYSTEM.INI with vi, THEN let W98 boot itself.

A related problem with the same symptom is described in KB253912, but I did not need to change the MaxFileCache setting at this point.  (I did later, though, to get the Nvidia drivers to install.)

* KB184447 claims to apply only to Windows 98 Standard Edition, not to Second Edition, but the fix still works.

After the reboot

Setup has already clobbered the MBR, so when you reboot you enter the GUI portion of Windows 98 SE setup.  Enter the product key and configure all that stuff.  Two reboots later, W98's hardware wizard is busy installing drivers.  Humor it until it goes away.  Even when it has no driver for a particular device, it must be allowed to search for it; if you just cancel out, the dialog will come back again every time you reboot.  Eventually, the installation process should complete and you should get a Windows 98 desktop.

Multiboot considerations

If you installed Linux before W98, you will need the Linux install CD or an emergency boot something to get you back into Linux to reinstall LILO or GRUB after W98 does its damage.  Alternately, you can back up your MBR before installing W98 and then just restore it afterward.

Every version of Windows insists on owning the C: drive, so some workaround is always needed to get two Windows installations to coexist without jumbling their system files together in the same partition.  The easiest way to get XP and W98 to be good neighbors is to exploit the fact that W98 ignores NTFS partitions.  If you put XP on NTFS in the first partition and put W98 on FAT32 in the second partition, then each OS will see its own partition as the C: drive.  If for some reason this approach is unusable then you will have to fall back to more drastic options such as hiding and unhiding partitions or remapping drives at boot time.  N.B., even when the NTFS partition comes first, if XP is allowed to see W98's file system it will activate System Restore on it and create a subdirectory called System Volume Information in the root directory.  So while it is not strictly necessary to do so, you might want to hide the W98 partition just to keep the taint of XP off of it.

If you run Linux, it is generally easier and more reliable to boot W98 and/or XP using LILO or GRUB than using Microsoft's own boot loader.  LILO and GRUB support partition hiding and drive remapping if you should need those features.  On the other hand, the XP boot loader provides access to XP's safe mode.

The XP boot manager can be used to boot a W98 and/or Linux partition by following the example in the antiquated but still mostly accurate NT OS Loader + Linux mini-HOWTO (v1.11, 2 September 1997).  Copy Microsoft's boot sector (instead of a LILO boot sector as described in the HOWTO) from the W98 partition to a file on XP's C: drive and reference it in XP's BOOT.INI file:  C:\W98.BIN="Windows 98 SE".

Please note:

Patch for hang-on-shutdown

From Microsoft Article 239887 rev. 2.4:

You may experience any of the following symptoms when you select an option in the Shut Down Windows dialog box.

To fix these problems, Microsoft released the Windows 98 Second Edition Shutdown Supplement which is a 504 KiB patch named 4756US8.EXE:

4756US8.EXE:    MD5 = BA 65 D8 9B 85 43 56 96  4F EB 25 90 5A 44 FB E7
4756US8.EXE:   SHA1 = 332B BA76 54FD FC3B C72C  B3E7 D1CF B225 17BC EDC1
4756US8.EXE: RMD160 = EE9B C87D 5750 48BC 6C5E  AD6F 94CF 207B 9695 9B53
4756US8.EXE: SHA224 = A1954434 99974266 6DD00C81 E6ECCE53 854AF7CF 7F598E96
                      24CC0E79
4756US8.EXE: SHA256 = B7C906C4 EB134019 3D28651E BF446F4F E72D5B31 7B9C52AA
                      81F3DBA4 7EA245C3
4756US8.EXE: SHA384 = 68284670 F8A2608B 263A71AC ABF59970 0E96E3A5 311E5E7B
                      98651016 FAB2BB13 F42504DE EFD5F64B 5218C305 4C17CA93
4756US8.EXE: SHA512 = CE9A1998 BB4A1D62 4B8D2CEA 2F3D12AA 45ECF694 A357220F
                      DD842592 3E2C6F69 DE7EDBE2 9F6FBB7C 4BCC0B1F 54FD7F3E
                      52226C9B D880908A F8716A88 9CD5FE19

Unfortunately, most of the links to it on the Microsoft web site are currently broken, but this ugly one still works:  http://download.microsoft.com/download/d/d/8/dd8e4f2d-3b66-41d7-8a4a-cefefd8deb2c/4756US8.EXE

If that link breaks too, well, here's a cached copy.

Problems installing Nvidia drivers

Infinite problems getting the Nvidia drivers to install without everything becoming FUBAR are actually just a symptom of generalized memory-configuration-related instability that is triggered by having more than 512 MiB of RAM.  On the 865PE PC with 4 GiB RAM, dramatic improvement occurred when I installed HimemX version 3.32 in CONFIG.SYS (displacing the HIMEM.SYS that came with Windows 98 SE) as recommended by some folks on the Microsoft Software Forum Network.  To achieve complete stability, I also had to set a value for MaxFileCache in SYSTEM.INI.  However, after doing that, I was able to increase MaxPhysPage to 40000 (1 GiB) without problems.

Working configuration for 865PE:

Motherboard MSI 865PE Neo3-F
CPU Pentium 4 540 3.2 GHz (Prescott)
RAM 4 GiB DDR PC-3200
Audio Onboard Realtek ALC850 8-CH Audio
Video eVGA GeForce 6800 GT, 256 MiB GDDR3, AGP 8X
AGP aperture 256 MiB
CONFIG.SYS DEVICE=C:\HIMEMX.EXE
AUTOEXEC.BAT (empty)
MaxPhysPage 40000 (1 GiB)
MaxFileCache 131072 (128 MiB)
OS Windows 98 SE
OS patches Shutdown Supplement
Drivers etc.  INF 6.3.0.1007 20041216 from Intel
DirectX 9c from Microsoft
Realtek AC97 MB 5.10.00.6230 20070508 from MSI
HimemX v3.32 from Japheth
Forceware 81.98 from Nvidia

With this configuration I was able to run DOOM 95 with no loss of functionality.  Yay.  Unfortunately, the motherboard sound drivers weren't really DOS-compatible, though they claimed to be—in DOS DOOM there was no music and the sound effects were crackly.

Vanilla DOOM with a PCI sound card

2013-01:  With a different motherboard (MSI 865PE Neo3-F → ASRock ConRoe865PE), a 6800 Ultra EE, a widescreen LCD monitor and a Montego II A3D PCI sound card installed, I decided to see if I could get Vanilla DOOM to run with full music and sound.

The Sound Blaster Pro 2.0 emulation of the Montego II A3D worked eventually, but the drivers were troublesome.

Video regressions:

Other issues:

In summary, although I got Vanilla DOOM with music and sound effects technically functional on a P4 system without an ISA slot or DOSBox, better results are obtainable with less effort by sticking with ISA and plain DOS.

See here for briefer summaries of Sound Blaster emulation results for other PCI sound cards, albeit not validated on a Pentium 4 chipset.

Installing as plain DOS

Using W98SE as a version of plain DOS is actually much easier than getting it to work in Windows mode.  DOS has no failures triggered by memory over 512 MiB and will use BIOS calls for disk access.

  1. Prepare a partition as described previously.
  2. FORMAT /S C:
  3. Manually copy in any desired binaries and set up AUTOEXEC.BAT and CONFIG.SYS to taste.  Overly complicated examples are shown below.

FreeDOS has a better installer and bundles superior, enthusiast-maintained replacements for many of the DOS programs that come with W98SE.  As a compromise, one can take the kernel, COMMAND.COM, FORMAT.COM, FDISK.EXE, and SYS.COM from W98SE for better MS-DOS compatibility, but throw out everything else and use free replacements.

The music player MPXPLAY supports various PCI audio, including the motherboard's builtin sound, but not the Montego II sound card.  DOOM sees neither one, but is runnable; the awful PC speaker option for sound effects works and is better than nothing.

Example CONFIG.SYSExample AUTOEXEC.BATExample MSDOS.SYS
; 2013-08-12 DWF

; Stuff loaded:
; JEMMEX.EXE  Combined XMM + EMM providing VCPI when needed.
; UMBPCI.SYS  Turns shadow RAM into real-mode UMBs.  Chipset-dependent.
; XMGR.SYS    XMM that moves itself to the UMA.
; UIDE.SYS    Caching Ultra DMA driver for HDD and DVD.
; UDVD2.SYS   Non-caching DVD driver that works without XMS.

; NOTE:  DOS/4GW v1.95 and v1.97 (as used by the original DOOM and DUKE3D
; executables, respectively) have bugs that cause serious crashes and hangs
; if large amounts of XMS memory are provided by an XMM working alone.
; Either replace the extender (http://dos32a.narechk.net/) or use one of the
; other options (EMM or MIN).

[MENU]
MENUITEM=EMM, JEMMEX EMM (needed for AudioPCI or SBLive)
MENUITEM=UMB, UMBPCI + XMGR XMM
MENUITEM=XMM, Just XMGR XMM, no UMBs
MENUITEM=MIN, No memory manager
MENUDEFAULT=UMB,20
MENUCOLOR=7,0

[EMM]
DEVICE=C:\LOCAL\JEMM\JEMMEX.EXE NOEMS
DEVICEHIGH=C:\LOCAL\UIDE\UIDE.SYS /S1024 /H
DOS=HIGH,UMB,NOAUTO

[UMB]
DEVICE=C:\LOCAL\UMBPCI\UMBPCI.SYS
DEVICE=C:\LOCAL\UIDE\XMGR.SYS /W
DEVICEHIGH=C:\LOCAL\UIDE\UIDE.SYS /S1024 /H
DOS=HIGH,UMB,NOAUTO

[XMM]
DEVICE=C:\LOCAL\UIDE\XMGR.SYS
DEVICE=C:\LOCAL\UIDE\UIDE.SYS /S1024 /H
DOS=HIGH,NOAUTO

[MIN]
DEVICE=C:\LOCAL\UIDE\UDVD2.SYS
DOS=NOAUTO

[COMMON]
SHELL=C:\COMMAND.COM C:\ /E:2048 /P
BUFFERSHIGH=30
FCBSHIGH=4
FILESHIGH=40
STACKSHIGH=9,256
LASTDRIVEHIGH=E
@ECHO OFF
REM  2013-08-12 DWF

REM  Stuff loaded:
REM  FDAPM.COM     Stop busy-waiting at C:\ prompt.
REM  SHSUCDX.COM   DVD driver (D:).
REM  DOSLFNMS.COM  Make long filenames work.
REM  RDISK.COM     RAM disk (E:).
REM  CTMOUSE.EXE   Mouse driver.

PAUSE
SET DIRCMD=/OG /A /P
SET DOS32A=C:\LOCAL\DOS32A
PATH C:\LOCAL\BIN;C:\LOCAL\98

LH C:\LOCAL\BIN\FDAPM.COM APMDOS
LH C:\LOCAL\BIN\SHSUCDX.COM /C /D:UDVD1
LH C:\LOCAL\DOSLFN\DOSLFNMS.COM
IF %CONFIG%==MIN GOTO SKIP
  LH C:\LOCAL\UIDE\RDISK.COM /S1024 /:E
  SET PATH=C:\DJGPP\BIN;%PATH%
  SET DJGPP=C:\DJGPP\DJGPP.ENV
  SET TZ=:America/New_York
  SET TMPDIR=E:
:SKIP
LH C:\LOCAL\BIN\CTMOUSE.EXE
[Options]
SystemReg=0
DisableLog=1
Logo=0

Resources

For all the other official and unofficial W98 patches and as much support as you're going to get, visit the Microsoft Software Forum Network.


KB
Home