v86 icon indicating copy to clipboard operation
v86 copied to clipboard

Windows 95 - Upper limit on disk size

Open jlxip opened this issue 3 weeks ago • 13 comments

I've spent the last few weeks almost exclusively trying to create a fresh Windows 95 install that works on v86. After around 200 installs with different configurations, I'm opening this issue to report my findings so that others do not have to waste their life with this. It might be a good idea to reference this in docs/windows-9x.md.

I've focused on Windows 95 OSR2(.1).

Disk size

The upper limit on the disk size is lower than documented. Anything bigger than 535MiB causes the boot process to hang indefinitely (Firefox, Chrome) or turns the screen black (Safari). The behavior is reproducible across hosts and browsers. This is very likely related to #250, #507 and #555.

The disk images were created with dd, and formatted with the official Windows 95 boot floppy. Then, regular install with qemu following the windows-9x.md parameters.

dd if=/dev/zero of=535M.img bs=1M count=535

This is a weird cutting point since it does not exactly match the 1024 cylinders limit. Using a more up-to-date BIOS does not fix it. I have found that using FAT32 (large disk support) instead of FAT16 makes no difference. Could this be a bug in the IDE emulator?

Download 535M.img (which works) Download 536M.img (which fails)

Links will expire in 90 days.

VBE driver

Furthermore, a VBE driver is mandatory. Without it, the boot process halts and shows "You can now safely turn off your computer" in DOS, corrupting the disk in the process. I have found no difference in behavior between vmdisp9x and vbemp9x.

jlxip avatar Dec 02 '25 17:12 jlxip

Thanks for notes. Unfortunately, sometimes Windows 9x is not "emulator-friendly".

About versions:

I use MINI95 (a floppy version of Windows 95 RTM on CD) for quick tests, works for me without any problems. Before running in v86, you need to add smartdrv in AUTOEXEC.BAT (see #289).

I once noticed that OSR versions can work differently, i. e. OSR2.1 doesn't start, but OSR2.5 does.

The disk images were created with dd, and formatted with the official Windows 95 boot floppy

Are you using Windows 95 OSR or RTM boot floppy? Have you tried formatting (and installing) from Windows 98 or patcher9x boot floppies, or from OEM image (that has bootable CD)?

SuperMaxusa avatar Dec 02 '25 18:12 SuperMaxusa

Hello, thanks for the reply! I've ran some tests:

  • Adding smartdrv in 536M's AUTOEXEC.BAT did not make a difference (just in case).
  • Tried installing OSR2.5 with 536MiB (even with smartdrv) and did not work.
  • I've been using Windows 95 OSR boot floppy, sorry for not specifying it. I have just tried formatting with patcher9x and did not make a difference.
  • I have just tried MINI95 with a 536MiB disk image and did not work either. Are you sure MINI95 works on your machine with >=536MiB?

jlxip avatar Dec 02 '25 20:12 jlxip

Also thanks from me for going down that rabbit hole, I also found it to be a rough spot in the past.

According to the Large Disk HOWTO, there's a known "504 MiB limit for DOS with an old BIOS" (also stated in The BIOS IDE Harddisk Limitations), but that's not the 535 MiB limit that you report. It's the closest I could find though, maybe it's a hint?

Which DOS version are you booting from in the guest? Not sure which version is referred to above, but starting from 4.0 the limit should be 2GB (which I believe is that of V86, and other guest OSes support that).

chschnell avatar Dec 03 '25 09:12 chschnell

Indeed the 535MiB is close to but not exactly 504MiB, which is intriguing. This is the 1024 cylinder limit I mentioned. I'm not booting from an installed DOS, but a boot floppy. I've tried the official Windows 95 OSR2.x boot floppy and the patcher9x one. Both of them can format in FAT32 so I would assume the limit would be way back in the versions.

jlxip avatar Dec 03 '25 13:12 jlxip

Indeed the 535MiB is close to but not exactly 504MiB, which is intriguing. This is the 1024 cylinder limit I mentioned. I'm not booting from an installed DOS, but a boot floppy. I've tried the official Windows 95 OSR2.x boot floppy and the patcher9x one. Both of them can format in FAT32 so I would assume the limit would be way back in the versions.

At the "Official Windows 95 OSR2.x boot floppy" it states:

You may also install Windows 95 OSR 2.x using a Windows 98 or 98SE boot disk - in fact, we recommend doing so.

98SE should be safe. I think there's a very slim chance, have you tried installing with a 98SE boot floppy?

chschnell avatar Dec 03 '25 13:12 chschnell

Unfortunately the Windows 98SE boot floppy does not include format.

jlxip avatar Dec 03 '25 14:12 jlxip

It's probably not going to fix it (your comment above about FAT32 is a valid argument), but note that it should be fine to copy FORMAT from the Win95 boot disk onto the Win98SE disk.

I mounted both boot disk images under linux and copied it for you, here's the Win98SE boot disk with format from Win95 (downloaded from the same site as the Win95 boot disk): Windows 98 Second Edition Boot_format.zip.

Feel free to give it a try, I'm not very optimistic but I think it'd be worth to know :)

Here the original list of files of both boot floppies:

Win95 OSR2.x
-rwxr-xr-x  1 root root  36240 22. Dez 1995  ASPI8DOS.SYS
-rwxr-xr-x  1 root root  29564 22. Dez 1995  ASPICD.SYS
-rwxr-xr-x  1 root root  13552 22. Dez 1995  ASPIDISK.SYS
-rwxr-xr-x  1 root root  15252 24. Aug 1996  ATTRIB.EXE
-rwxr-xr-x  1 root root    195 19. Mär 1998  AUTOEXEC.BAT
-rwxr-xr-x  1 root root  28096 24. Aug 1996  CHKDSK.EXE
-r-xr-xr-x  1 root root   1754 30. Sep 1993  CHOICE.COM
-rwxr-xr-x  1 root root  93812 24. Aug 1996  COMMAND.COM
-rwxr-xr-x  1 root root    793 19. Mär 1998  CONFIG.SYS
-rwxr-xr-x  1 root root  20554 24. Aug 1996  DEBUG.EXE
-rwxr-xr-x  1 root root  65271 24. Aug 1996  DRVSPACE.BIN
-r-xr-xr-x  1 root root      0 18. Feb 1998  EBD.SYS
-rwxr-xr-x  1 root root  69886 24. Aug 1996  EDIT.COM
-rwxr-xr-x  1 root root  63116 24. Aug 1996  FDISK.EXE
-rwxr-xr-x  1 root root  49543 24. Aug 1996  FORMAT.COM
-rwxr-xr-x  1 root root  33191 24. Aug 1996  HIMEM.SYS
-rwxr-xr-x  1 root root  24235  4. Sep 1997  HIT-DVD.SYS
-r-xr-xr-x  1 root root 214836 24. Aug 1996  IO.SYS
-rwxr-xr-x  1 root root  25473 24. Aug 1996  MSCDEX.EXE
-r-xr-xr-x  1 root root      9 18. Feb 1998  MSDOS.SYS
-rwxr-xr-x  1 root root  23437  1. Mär 1996  NEC_IDE.SYS
-rwxr-xr-x  1 root root 105984 24. Aug 1996  REGEDIT.EXE
-rwxr-xr-x  1 root root 142353 24. Aug 1996  SCANDISK.EXE
-rwxr-xr-x  1 root root   7332 24. Aug 1996  SCANDISK.INI
-rwxr-xr-x  1 root root  18967 24. Aug 1996  SYS.COM
-rwxr-xr-x  1 root root  18025 14. Jan 1997  Taisatap.sys
-rwxr-xr-x  1 root root 126976 21. Okt 1997  ZZ.EXE
-rwxr-xr-x  1 root root   1388 11. Nov 1997  ZZTOP.BAT
Win98 SE
-rwxr-xr-x  1 root root  35330 26. Apr 1999  ASPI2DOS.SYS
-rwxr-xr-x  1 root root  14386 26. Apr 1999  ASPI4DOS.SYS
-rwxr-xr-x  1 root root  37564 26. Apr 1999  ASPI8DOS.SYS
-rwxr-xr-x  1 root root  40792 26. Apr 1999  ASPI8U2.SYS
-rwxr-xr-x  1 root root  29620 26. Apr 1999  ASPICD.SYS
-rwxr-xr-x  1 root root    449 26. Apr 1999  AUTOEXEC.BAT
-rwxr-xr-x  1 root root  21971 26. Apr 1999  BTCDROM.SYS
-rwxr-xr-x  1 root root  30955 26. Apr 1999  BTDOSM.SYS
-rwxr-xr-x  1 root root  93890 26. Apr 1999  COMMAND.COM
-rwxr-xr-x  1 root root    851 26. Apr 1999  CONFIG.SYS
-rwxr-xr-x  1 root root 272206 26. Apr 1999  EBD.CAB
-rwxr-xr-x  1 root root  93242 26. Apr 1999  EXTRACT.EXE
-rwxr-xr-x  1 root root  63916 26. Apr 1999  FDISK.EXE
-rwxr-xr-x  1 root root   8009 26. Apr 1999  FINDCD.EXE
-rwxr-xr-x  1 root root  64425 26. Apr 1999  FLASHPT.SYS
-rwxr-xr-x  1 root root  33191 26. Apr 1999  HIMEM.SYS
-r-xr-xr-x  1 root root 222390 26. Apr 1999  IO.SYS
-rwxr-xr-x  1 root root  25473 26. Apr 1999  MSCDEX.EXE
-r-xr-xr-x  1 root root      4 26. Apr 1999  MSDOS.SYS
-rwxr-xr-x  1 root root  41302 26. Apr 1999  OAKCDROM.SYS

chschnell avatar Dec 03 '25 16:12 chschnell

Hmm, perhaps Win95's FORMAT is the problem.

So I took FORMAT from a Win98 image I have (it's located in folder Windows\command) and copied it into the Win98 boot floppy: Windows 98 Second Edition Boot_format_Win98SE.zip

chschnell avatar Dec 03 '25 17:12 chschnell

Thanks for the modified floppy. I just tried it, but unfortunately got the same result.

jlxip avatar Dec 03 '25 17:12 jlxip

Well, turns out Win95 comes with MS-DOS 7. The ver command prints Windows 95. [Version 4.00.1111], but it's really 7. Thanks for testing anyway, and my apologies for the time wasted with this. :)

chschnell avatar Dec 03 '25 18:12 chschnell

I ran Windows 95C (aka OSR2.5) with a 700 MB hard disk image, but that's not the ideal way.

win95-700
  1. Install with ISA machine type:
 $ qemu-system-i386 -hda hdd.img -cdrom InstallCD.iso -M isapc,acpi=off
  1. Copy the win95 folder from installation CD (or all win95_*.cab) to your hard drive.
  2. Right click on "My Computer" -> Properties -> Device Manager -> System devices -> Plug and Play Bus -> Properties
  3. Select the "Driver" tab, press "Update driver" -> "No, select driver from list" -> select "PCI Bus" -> select the folder you copied before
  4. Run on PCI machine type:
 $ qemu-system-i386 -hda hdd.img -cdrom InstallCD.iso -M pc,acpi=off
  1. Restart Windows a few times to install all drivers
  2. Go to copy.sh/v86, select your hard disk image, select bochs-bios.bin as "BIOS" and bochs-vgabios.bin as "VGA BIOS", start emulation.
  3. Press F12 and 2.

P. S. VBE9x doesn't work with Bochs VGABIOS. With the default VGABIOS from SeaBIOS, VGA driver works, but text mode doesn't work.

SuperMaxusa avatar Dec 04 '25 10:12 SuperMaxusa

Thanks for the guide! I will try to reproduce it as soon as I can, on Monday.

jlxip avatar Dec 04 '25 12:12 jlxip

I've successfully reproduced it! 🚀 Both 95C and 95B work with this method. I've found no difference in using isapc for install or directly using pc. I have no idea why, but the combination of fixing the PCI Bus and the Bochs BIOS makes it work. Maybe this information could be included in the guide. Thanks again for the effort!

jlxip avatar Dec 08 '25 14:12 jlxip