Last modified: Sat Feb 15 15:10:50 EST 2014
Partitioning and formatting
Windows 98 Setup
After the reboot
Patch for hang-on-shutdown
Problems installing nVidia drivers
Vanilla DOOM with a PCI sound card
Installing as plain DOS
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.
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.)
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
If you have a crap OEM BIOS that doesn't let you configure this, sorry, you are out of luck.
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:
mkdosfs -F 32 /dev/xxxn.
DIR C:to verify that the C: drive is indeed the FAT32 partition.
D:to switch to the CD-ROM.
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.]
Continuing from FORMAT:
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:
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.
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.
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
C:\W98.BIN="Windows 98 SE".
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.
- If you click Shut down and then click OK, the computer may stop responding (hang) while displaying the following message:Windows is shutting down.
- If you click Restart in MS-DOS mode and then click OK, the computer may hang while displaying a blank screen.
- If you click Shut down or Restart in MS-DOS mode and then click OK with fast shutdown enabled, the computer may restart instead of shutting down.
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.
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.
|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|
|MaxPhysPage||40000 (1 GiB)|
|MaxFileCache||131072 (128 MiB)|
|OS||Windows 98 SE|
|OS patches||Shutdown Supplement|
INF 126.96.36.1997 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.
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.
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.
Using W98SE as a version of plain DOS is actually much easier than getting it to work in Windows mode.
FORMAT /S C:
CONFIG.SYSto 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.SYS||Example AUTOEXEC.BAT||Example 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
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.