Installing Windows 98 SE on a newer (2004) PC

Last modified: Sat Feb 15 15:10:50 EST 2014

Introduction
BIOS setup
Partitioning and formatting
Windows 98 Setup
After the reboot
Multiboot considerations
Patch for hang-on-shutdown
Problems installing nVidia drivers
Working configuration
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 "new" PC is of late 2004 vintage.  Windows 98 drivers for the motherboard chipset (especially the AC97 audio) and the GeForce 6800 GT video card are still available, so with some careful configuration choices it is possible to run Windows 98 on it with relatively little loss of functionality.  Regrettably, Windows 98 driver support for even newer hardware is already drying up.

BIOS setup

Windows 98 comes from a time when a typical PC had at most four ATA devices (two channels, two devices per channel).  These were of course IDE (PATA), as SATA did not exist yet, but that is not what causes trouble.  The trouble is if you have extra channels that don't satisfy W98's outdated assumptions about ports and IRQs, you get two reboots into the installation process and then it hangs.  With BOOTLOG.TXT output enabled, the end of the log looks 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.

To avoid this problem in a newer PC that supports SATA, you have to configure the BIOS to use what is variously known as "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.

I have two PATA optical drives sharing one IDE channel plus two SATA hard drives.  With the following configurations they all work.  (These are both AMI BIOS, but from two different 865PE-chipset motherboards.)

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.

If you have a crap OEM BIOS that doesn't let you configure this, sorry, you are out of luck.

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.  It never allows a multiboot setup to go untrashed.  To work around, I follow this manual process:

  1. Preformat the FAT32 partition under Linux with mkdosfs -F 32 /dev/xxxn.
  2. Boot the Windows 98 SE installation CD.
  3. At the first prompt, choose "Boot from CD-ROM."
  4. At the second prompt, choose "Start computer with CD-ROM support."  This gets you an A: prompt.
  5. DIR C: to verify that the C: drive is indeed the FAT32 partition.
  6. D: to switch to the CD-ROM.
  7. CD WIN98
  8. FORMAT /S C:

[Update 2014-01:  In fact it would be better to run FORMAT /S C: from a boot floppy that includes the patched IO.SYS from http://support.microsoft.com/kb/311561.  The other steps might still be needed to access SETUP afterwards without trashing the hard drive; I don't know.]

Windows 98 Setup

Continuing from FORMAT:

  1. CD ..
  2. SETUP
  3. Continue past the warning about NT file system (if applicable).
  4. 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

I had infinite problems getting the nVidia drivers to install without everything becoming FUBAR.  However, after a thorough investigation, I concluded that the problem was generalized memory-configuration-related instability which only happened to be triggered by the nVidia driver install because it was the biggest or most fragile thing to have come along.

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, I was able to increase MaxPhysPage to 40000 (1 GiB) at this point without problems.

Working configuration

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 am able to run DOOM 95 with no loss of functionality.  Yay.  Unfortunately, the sound drivers aren't DOS-compatible—in DOS DOOM there is no music and the sound effects are crackly.

Vanilla DOOM with a PCI sound card

2013-01:  Now with a different motherboard, 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.

  1. Prepare a partition as described previously.
  2. Boot a standard Windows 98 Boot Floppy in A:.
  3. FORMAT /S C:
  4. 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