• Please review our updated Terms and Rules here

Multibooting Windows and Memory limits

NeXT

Veteran Member
Joined
Oct 22, 2008
Messages
8,123
Location
Kamloops, BC, Canada
Man, the OS/2 multibooting was easy compared to this.

I'm building a sort of debugging machine for the Forte VFX1 and it needs to run Windows 95, 98 and 2000. It's all on one 80gb drive that is split into three partitions. I installed the three operating systems in that same order so that when 2K was installed the other two operating systems would appear in the selective boot mode but even when following this I could not choose between booting 95 OR 98. Whichever of the two you installed last takes full priority. I have no experience with boot managers like Grub and I'm a little lost.

The other problem is that I can't force 95 or 98 to behave when the machine is crammed with a gig and a half of ram. I know they both have upper limits but apparently you can workaround that by adding MaxFileCache=524288 to system.ini but it doesn't seem to work and the quick solution of only having 512mb installed will affect what I'm doing under 2000 where more ram is needed.
 
Is it never giving you the option to select or it doesn't work when you do select and hit enter? The first may be a lack of a delay/choice option which it then chooses the default.

Similar to something like:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows 2000 Server" /fastdetect
multi(0)disk(0)rdisk(0)partition(2)\WINNT="Windows XP Professional" /fastdetect

I haven't done the 9x on a larger system in ages unfortunately but I know I had it working back in the day also without any custom hacks.. here's some site with a crap ton of configurations from folks MatureTech has a native system and has one additional entry system.ini:
MaxPhysPage=40000 ; (1 GiB)
MaxFileCache=131072 ; (128 MiB)

lots of folks seem to be using some custom virtual memory handler though.
 
Last edited:
With Windows 95 you will need the line: MaxPhysPage=30000 in the 386enh section. (or a hex number there about, I use 3B000 but the exact max can vary)

Also, under 95 a large file cache setting can make 95 appear to "hang" for long periods of time when copying large files. Perhaps not an issue with an 80gb drive, but if you run in to that a setting like MaxFileCache=65536 will greatly improve the responsiveness.

Also don't forget to add that to the "system.cb" used by safe mode so safe mode will work.

As for dual booting, if you are using 95 OSR/2 with 98 (both have DOS 7.1) then you might be able to set up a menu in the config.sys and autoexec.bat using %config% to determine which WIN.COM to start. I'm guessing you installed one on C: and the other on a D: partition? That might work, but they don't really get along to well like that.
 
Sorry for the long wait but I'll try and answer some of the questions.

Is it never giving you the option to select or it doesn't work when you do select and hit enter?
One option is added automagically when 2K is installed and the other option I add myself. It gives me the option but both take me to the same OS.

With Windows 95 you will need the line: MaxPhysPage=30000 in the 386enh section. (or a hex number there about, I use 3B000 but the exact max can vary)

Also, under 95 a large file cache setting can make 95 appear to "hang" for long periods of time when copying large files. Perhaps not an issue with an 80gb drive, but if you run in to that a setting like MaxFileCache=65536 will greatly improve the responsiveness.

Also don't forget to add that to the "system.cb" used by safe mode so safe mode will work.
Okay, so the optimal settings are MaxPhysPage=40000 and MaxFileCache=65536. I'll have to try those.

As for dual booting, if you are using 95 OSR/2 with 98 (both have DOS 7.1) then you might be able to set up a menu in the config.sys and autoexec.bat using %config% to determine which WIN.COM to start. I'm guessing you installed one on C: and the other on a D: partition? That might work, but they don't really get along to well like that.
Yes. Each OS is on a partition with its own drive letter and I have Windows 95 OSR2 and 98 Second Edition. I do not however know how to setup a menu in config.sys.
 
The other problem is that I can't force 95 or 98 to behave when the machine is crammed with a gig and a half of ram. I know they both have upper limits but apparently you can workaround that by adding MaxFileCache=524288 to system.ini but it doesn't seem to work and the quick solution of only having 512mb installed will affect what I'm doing under 2000 where more ram is needed.

There are other ways. I run 98SE on a 2GB machine. It took a little tweaking and use of the "unofficial" Win98SE SP2. Basically I used a different VDISK driver and memory manager and soaked up the extra gig or so at the top of memory with a RAMdisk, which also is used as the paging file drive. The result is rock-solid.

If you'd like, I can go into excruciating detail. :) The same system is multi-booted with WinXP and Debian. I found that I had to tweak GRUB a bit with the entire memory space (440GX chipset) occupied by RAM, leaving nothing for the AGP aperture. But it works just fine and I'm not much balder afterwards.
 
Yes. Each OS is on a partition with its own drive letter and I have Windows 95 OSR2 and 98 Second Edition. I do not however know how to setup a menu in config.sys.
Basically you would start your config.sys off with something like

[menu]
menuitem=WIN95, Windows 95
menuitem=WIN98, Windows 98
menudefault=WIN95,15
[WIN95]
.. do stuff for Windows 95
[WIN98]
.. do stuff for Windows 98

but then most of the real futzing would be in the autoexec.bat.

at the end you would need something like

IF NOT "%config%"=="WIN95" GOTO WIN98
.. do stuff to start Win95's win.com
:WIN98
IF NOT "%config%"=="WIN98" GOTO NONE
.. do stuff to start Win98's win.com
:NONE
... assume something else was done and start DOS.

You will need to make sure to set the path variable for each version of Windows.
And, I think you will need to set "BootGUI=0" in the [Options] section of MSDOS.SYS or it will try and start one of the versions of Windows after you exit Windows.

At least I think that will work, I haven't tried that myself. :)
 
An example of a WIN98SE system with a boot menu:

CONFIG.SYS
Code:
DOS=HIGH,UMB
DEVICE=WINDOWS\HIMEM.SYS
DEVICE=WINDOWS\EMM386.EXE NOEMS I=B000-B7FF
DEVICEHIGH=WINDOWS\COMMAND\DISPLAY.SYS CON=(EGA,,1)
[MENU]
MENUITEM=1,WINDOWS 98
MENUITEM=2,MS-DOS 7.1
MENUDEFAULT=1,5
[1]
[2]
DEVICEHIGH=ATACR\ATAPIMGR.SYS
DEVICEHIGH=ATACR\SR_ASPI.SYS/D:MSCD000
SET BLASTER=A220 I5 D1
DOS=SINGLE
[COMMON]
COUNTRY=046,850,WINDOWS\COMMAND\COUNTRY.SYS
SET DIRCMD=/P
STACKS=0,0
FCBS=1

AUTOEXEC.BAT
Code:
@ECHO OFF
MODE CON CP PREP=((850) WINDOWS\COMMAND\EGA.CPI)>NUL
MODE CON CP SEL=850>NUL
LH KEYB SV,,WINDOWS\COMMAND\KEYBOARD.SYS
GOTO %CONFIG%
:2
MODE CON RATE=32 DELAY=1
LH MSCDEX/D:MSCD000
GOTO END
:1
PATH %PATH%;C:\WINDOWS\SYSTEM\WBEM
WIN
:END

MSDOS.SYS
Code:
[Paths]
WinDir=C:\WINDOWS
WinBootDir=C:\WINDOWS
HostWinBootDrv=C

[Options]
Logo=0
BootGUI=0
AutoScan=1
WinVer=4.10.2222
;
;The following lines are required for compatibility with other programs.
;Do not remove them (MSDOS.SYS needs to be >1024 bytes).
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxd
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxe
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxh
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxj
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxk
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxl
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxm
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxn
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxo
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxp
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxq
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxs

Hope this helps!
 
I'm sorry you guys I still can't really wrap my head around this. :/ Each time I try selective modes in config.sys and autoexec.bat...

Code:
[MENU]
MENUITEM=1,Windows 95
MENUITEM=2,Windows 98
MENUDEFAULT=1,5
[1]
[2]
Code:
GOTO %CONFIG%
:1
PATH %PATH%;C:\WINDOWS\SYSTEM\WEBM
WIN
GOTO END
:2
PATH %PATH%;D:\WINDOWS\SYSTEM\WEBM
WIN
:END
...and it doesn't work. Through trial and error though I managed to select which OS I wanted to use through msdos.sys by changing..
Code:
[Paths]
WinDir=C:\WINDOWS
WinBootDir=C:\WINDOWS
HostWinBootDrv=C
...which would make me boot into Windows 95 (with the windows 98 splash screen oddly), to...
Code:
[Paths]
WinDir=D:\WINDOWS
WinBootDir=D:\WINDOWS
HostWinBootDrv=D
...which would boot me into windows 98. I don't know if this was partly what you wanted of if I'm going at this wrong still.
Also, for some dumb reason I'm getting two entries to boot windows 2000 on the main selection screen even though boot.ini only has one entry.
 
Last edited:
No, other than booting between DOS 7.1 and Win9x, I don't believe that you can do it with CONFIG.SYS menus.

Here's how I did it.

On a blank drive, I created a primary partition with Win9x, editing the MSDOS.SYS file for BootGUI=0 after installation. That gave me a bootable partition with both DOS and Win9x on it that booted into DOS. To get to Windows, I simply type in "win".

Next, I installed XP, on a second (extended partition), which resulted in a Boot Manager on my C drive and XP on my D: drive. I now, using the boot manager menu, could select between XP and Windows/DOS.

Finally, I installed Debian Linux (just about any other distro would work) on a third partition, which created a Grub booloader that gave me the choice between Debian and XP. So the boot process to get to Win9x is actually a three-step process:

1. Select XP from the GRUB menu
2. Select Windows 98 from the XP boot manager
3. Type "win" from the DOS prompt.

Yes, it's going through 2 menus to get there, but I don't mind--I run this thing on a Supermicro server board and POST takes an eternity (BTW, anyone know how to get around that?). So I don't boot often.

For what it's worth, this is how I coped with Win9x on a 2GB memory system:

CONFIG.SYS:

Code:
[menu]
menudefault=NORM,10
menuitem=SCSI,Load ASPI driver
menuitem=NORM,Normal startup, no special drivers
[common]
DEVICE=C:\XMS\HIMEM\HIMEMX.EXE /NUMHANDLES=64
DOS=HIGH,UMB
FILES=50
LASTDRIVE=Z
DEVICEHIGH=TIMCD.SYS /D:MSCD0000
[SCSI]
DEVICE=C:\ASPI8DOS.SYS
[NORM]

AUTOEXEC.BAT:

Code:
@echo off
LH C:\WINDOWS\COMMAND\MSCDEX.EXE /d:mscd0000
PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\USR;C:\USR\RAR;C:\HXRT
LH C:\WINDOWS\COMMAND\DOSKEY
LH C:\USR\DOSLFN
LH C:\HXRT\HXLDR32
SET TEMPDRIVE=S
SET TEMPSIZE=768000
C:\XMS\XMSDISK\XMSDSK %TEMPDRIVE%: %TEMPSIZE% /y /t
SET TEMP=%TEMPDRIVE%:\TEMP
SET TMP=%TEMP%
md %temp%
echo.

A few words of explanation. TIMCD.SYS is the CD-ROM driver that I use. The HXRT stuff is for running console-mode Win32 programs without loading the Windows GUI from DOS--in my case, very handy. DOSLFN allows for long filename support under DOS. XMSDISK and HIMEMX are third-party utilities that allow for large amounts of extended memory and XMSDISK allows for loading a RAM disk at the very high end of memory (i.e., it doesn't get in the way of Windows).
 
Last edited:
Sorry NeXT! I posted that as a knee-jerk reaction to you not knowing how to do a boot menu (and without a decent explanation at that) while losing sight of the bigger picture (the objective, after all, is multibooting your system). In hindsight I shouldn't have since it was just a waste of your time. Even renaming MSDOS.SYS during boot (in AUTOEXEC.BAT) probably won't work since it's already been read by IO.SYS earlier in the boot process. In short, I don't think using a Win9x boot menu will work and you will need to use a real boot manager unless you can get it working using BOOT.INI.
 
Hiya! I've actually tried (and done) this whole multi-boot thing before. I totally agree with Krille here, as that explains your problem exactly. The only way I got this to work is to create two folders, keeping both 95 and 98's boot files (IO.SYS, MSDOS.SYS, COMMAND.COM). Then, I created a batch file in AUTOEXEC.BAT that would let you select either 95 or 98, switch out those critical files, and reboot the system. Then you could boot into either one. However, running 95 from the 98 kernel creates very limited and buggy functionality, and running 98 from the 95 kernel simply throws kernel exceptions and crashes Windows. So, in sum, using a batch script or something like GRUB would be your only options.
As for 2k, simply installing on another partition after your DOS-based install will work and 2k should pick up the other system.
Finally, I heard (but don't know for sure) that putting 9x on anything other than C: can cause operating system errors.
 
Last edited:
I figured my step-by-step might be useful (beware, it's a little different than your setup!).

1. Install Windows 98. Fix the MaxPhysPage and the MinFileCache to something suitable.
2. Copy the IO.SYS, MSDOS.SYS, and COMMAND.COM to a dedicated folder (I called mine "98").
3. Install Windows 95 on the save drive in a different folder (e.g. \Windows.95). Fix the same issues, and install the Dial-up Networking 1.4 upgrade to fix a Protection Error for processors >2.1 Ghz.
4. Do step 2 for the Windows 95 boot files.
5. Create a batch file that uses the %WinBootDir% environment variable to determine what kernel is being run.
-Use CHOICE to ask if the user wants to switch OS's.
-If so, replace the existing boot files with one of the boot file sets in the dedicated folder. (I had a script for this, but I may have lost it.)
-Use a custom DEBUG sequence to reboot the computer (you can easily find this online).
6.That's it!

Note: I also expanded this to work with ME and 2k without using any non-Windows software as well.
 
Last edited:
5. Create a batch file that uses the %WinBootDir% environment variable to determine what kernel is being run.
-Use CHOICE to ask if the user wants to switch OS's.
-If so, replace the existing boot files with one of the boot file sets in the dedicated folder. (I had a script for this, but I may have lost it.)
-Use a custom DEBUG sequence to reboot the computer (you can easily find this online).
I really hate sounding like the retarded guy, I really do. However between not knowing at all what I am doing and how vague these steps were I need to ask for help again. :(
I've done everything up th this point again, with the exception of reinstalling Windows 2000 (which you didn't actually mention but I'll assume was step 7).
 
Can you post the contents of your boot.ini?

I am thinking that Windows 2000 is seeing 95 + 98 as the same OS and therefore onley creating a single entry for them. If I am right you can simply add a line to your boot.ini and be good to go, but I need to see it first before I can tell what line to add.
 
I really hate sounding like the retarded guy, I really do. However between not knowing at all what I am doing and how vague these steps were I need to ask for help again.
I've done everything up th this point again, with the exception of reinstalling Windows 2000 (which you didn't actually mention but I'll assume was step 7).

My apologies, sometimes I do that "vagueness" thing, and I was in a hurry when I wrote that list. Not your fault at all.
Here's my batch file setup:

Before you start, you need three folders that have the IO.SYS, CONFIG.SYS, MSDOS.SYS, COMMAND.COM, and AUTOEXEC.BAT of each OS in a folder on the root directory of the hard drive. They should be named 95, 98, and ME for their respective operating systems.
Now, in all of the AUTOEXEC.BAT's, add one line at the end of the file:
convert.bat

Create another file on the root of the hard drive named convert.bat, and insert the following text into it:

echo off
set win= ((re)set this environment variable just in case)
if "%winbootdir%"=="[directory with 95's WIN.COM, no slash, all caps]" set win=95
if "%winbootdir%"=="[directory with 98's WIN.COM, no slash, all caps]" set win=98
if "%win%"=="" set win=ME
:Loop
choice You are running Windows %win%. Convert
if ERRORLEVEL 255 goto Loop
if ERRORLEVEL 2 goto end
if ERRORLEVEL 1 goto convert
goto Loop
:convert
choice /C:123 /N Convert to 95(1), 98(2) or ME(3)?
if ERRORLEVEL 1 set win=95
if ERRORLEVEL 2 set win=98
if ERRORLEVEL 3 set win=ME
cd C:\ (if somehow this is not the case)
attrib C:\%win%\*.* -s -a -h -r (these attribs are designed to keep the file permission settings correct. I think I got them right.)
attrib IO.SYS -s -h -r
attrib COMMAND.COM -a
attrib CONFIG.SYS -a
attrib MSDOS.SYS -a -h -s -r
copy C:\%win%\*.* C:\*.*
attrib C:\%win%\IO.SYS +s +h +r
attrib C:\%win%\C*.* +a
attrib C:\%win%\MSDOS.SYS +a +s +h +r
attrib MSDOS.SYS +a
attrib IO.SYS +s +h +r
attrib COMMAND.COM +a
attrib CONFIG.SYS +a
reboot.bat
:end

In a file called reboot.bat, type the following text:

GOTO BEGIN

E 40:72 34 12
RCS
FFFF
RIP
0000
G

:BEGIN
DEBUG < REBOOT.BAT

A few quick notes:
-In windows ME, the prompt will be executed after ME boots, which means reboot.bat will simply close the DOS prompt. The changes will still occur on the next reboot, however.
-Telling you what OS your running may be self-obvious as the booting splash screen is displayed before AUTOEXEC.BAT is run, so you could remove lines 3-6 and change line 7 to just "choice Convert".
-You want just 95/98 though, so you could remove the second CHOICE command from having an option for ME as well. In that case, the switch would be "choice /c:12 Convert to 95(1) or 98(2)" and remove the IF ERRORLEVEL statement involving ME.
-You can also do this after installing 2k, as long as you have the boot files for the 9x OS's.

Now that I think about it, the original program I had just did 95 and 98, with one prompt (something like "You are running Windows (9x). Convert to other Windows (other 9x) [Y/N]?" This would also not be hard to do... if you want. Convert.bat is pretty customizable.

In your boot.ini file (after installing 2k), find a line something like:
C:\ = "Microsoft Windows" which is your 9x booting system. If it doesn't show up, add it.

Hope this helps!
 
Last edited:
Well I tried your two batch files and it still doesn't work. You can convert but it will still boot the last OS installed.
Here's the convert.bat as I have it set:

Code:
echo off
set win= ((re)set this environment variable just in case)
if "%winbootdir%"=="C:\WINDOWS\WIN.COM" set win=95
if "%winbootdir%"=="D:\WINDOWS\WIN.COM" set win=98
:Loop
choice You are running Windows %win%. Convert
if ERRORLEVEL 255 goto Loop
if ERRORLEVEL 2 goto end
if ERRORLEVEL 1 goto convert
goto Loop
:convert
choice /C:12 /N Convert to 95(1), 98(2)
if ERRORLEVEL 1 set win=95
if ERRORLEVEL 2 set win=98
cd C:\ (if somehow this is not the case)
attrib C:\%win%\*.* -s -a -h -r (these attribs are designed to keep the file permission settings correct. I think I got them right.)
attrib IO.SYS -s -h -r
attrib COMMAND.COM -a
attrib CONFIG.SYS -a
attrib MSDOS.SYS -a -h -s -r
copy C:\%win%\*.* C:\*.*
attrib C:\%win%\IO.SYS +s +h +r
attrib C:\%win%\C*.* +a
attrib C:\%win%\MSDOS.SYS +a +s +h +r
attrib MSDOS.SYS +a
attrib IO.SYS +s +h +r
attrib COMMAND.COM +a
attrib CONFIG.SYS +a
reboot.bat
:end

It also generates three errors when you convert.
Code:
Too many parameters - (if
Too many parameters - attribs
File not found - config.sys
...then it again complains about config.sys being missing before rebooting.

EDITED: Oh, DUH! I didn't remove your bracketed comments. Okay so now I can toggle between 95 or 98 but it still complains about a missing config.sys file. The %win% variable doesn't work properly (eg: "You are running Windows ."
 
Last edited:
Hmm.
It's likely that I just got the permissions wrong with 95 and 98. The "File not found - config.sys" doesn't mean that the file's not there, but that one of the attributes that prevent copying remain.

If you replace the line "attrib CONFIG.SYS -a" with "attrib CONFIG.SYS -a -s -h -r", it should work.

Glad I could help you!

EDIT: The line "if "%winbootdir%"=="C:\windows\win.com"" should just be: if "%winbootdir%"=="C:\WINDOWS". (In other words, no WIN.COM in the filename - same for the next line. Sorry if my instructions were weird. What I meant was 'the directory that Windows is installed in'). The way this works is that the CONFIG.SYS of the OS sets environment variables (winbootdir is one of them) to tell the computer where the Windows directory is. The batch file uses this to determine what OS is running. Does this make sense or am I just being random again?
 
Last edited:
It's still quite buggy. Here's what I'm getting regardless of which OS I choose.

IMG_6343.jpg

Ignore the "bad command or filename" at the bottom. That's me renaming reboot.bat so I could get the photo.
 
Back
Top