VOGONS


First post, by Kahenraz

User metadata
Rank l33t
Rank
l33t

I'm using Windows 3.1 on DOSBox to launch an old game. Has anyone ever gone through and pruned out everything to make Windows run with the bare minimum of files? I don't intent to run it as an OS and only use it to launch the game.

Last edited by Kahenraz on 2019-09-12, 18:35. Edited 1 time in total.

Reply 1 of 16, by DosFreak

User metadata
Rank l33t++
Rank
l33t++

Back in the day MS released demo versions of their office software with the bare minimum Windows 3.x files.
Windows 9x setup does the same thing
I want to say I saw some Windows 3.x games in the Internet Archive using DOSBox doing the same thing awhile back.

/EDIT From when I looked at it on IA back in 2016 they likely used the same install or copied what ExoDOS did for his Windows 3.x collection:
https://archive.org/details/softwarelibrary_w … &tab=collection
http://arstechnica.com/information-technology … n-your-browser/

From a network capture:
https://cors.archive.org/cors/emularity_win31/win31.zip
https://cors.archive.org/cors/win3_CasWin1/win3_CasWin1.zip

Appears to be be a slimmed down copy of Windows like what was used to demo Windows apps back in the day.

Now, Scott and his crew have done it again with the Windows 3.X Showcase—made up of a whopping 1,523 downloads (and counting), all running in a surprisingly robust, browser-based JavaScript emulation of Windows 3.1. You'll recognize offerings like WinRisk and SkiFree, but the vast majority of the collection sticks to a particularly wild world of Windows shareware history, one in which burgeoning developers seemed to throw everything imaginable against 3.1's GUI wall and see what stuck.

It's actually just the javascript port of DOSBox running Windows 3.1.

How To Ask Questions The Smart Way
Make your games work offline

Reply 2 of 16, by Kahenraz

User metadata
Rank l33t
Rank
l33t

I slimmed this down myself. It uses the S3 Trio video and SB16 audio drivers:

WINDOWS/
├── INDEO.INI
├── MOUSE.INI
├── PROGMAN.EXE
├── PROGMAN.INI
├── REG.DAT
├── RUNEXIT.EXE
├── SYSTEM
│   ├── COMM.DRV
│   ├── CSPMAN.DLL
│   ├── GDI.EXE
│   ├── IOS.386
│   ├── KEYBOARD.DRV
│   ├── KRNL386.EXE
│   ├── MIDIMAP.DRV
│   ├── MMSOUND.DRV
│   ├── MMSYSTEM.DLL
│   ├── MOUSE.DRV
│   ├── S3TRIO.DRV
│   ├── SB16FM.DRV
│   ├── SB16SND.DRV
│   ├── SHELL.DLL
│   ├── SOUND.DRV
│   ├── SYSTEM.DRV
│   ├── TIMER.DRV
│   ├── TOOLHELP.DLL
│   ├── USER.EXE
│   ├── VDDS3764.386
│   ├── VGA.DRV
│   ├── VGAFIX.FON
│   ├── VGAOEM.FON
│   ├── VGASYS.FON
│   ├── VSBPD.386
│   ├── VTDAPI.386
│   ├── VXDLDR.386
│   ├── WIN386.EXE
│   └── WIN87EM.DLL
├── SYSTEM.INI
├── TEMP/
├── WIN.EXE
├── WIN.INI

WIN.INI:

[windows]
load=
run=
Beep=no
NullPort=None
CursorBlinkRate=530
DoubleClickSpeed=452
KeyboardDelay=2
KeyboardSpeed=31

[drawdib]
s3trio.drv 800x600x32(BGR 5)=1,0,15,0

SYSTEM.INI:

[boot]
386grabber=vga_eng.3gr
oemfonts.fon=vgaoem.fon
fixedfon.fon=vgafix.fon
fonts.fon=vgasys.fon
display.drv=s3trio.drv
shell=progman.exe
network.drv=
mouse.drv=mouse.drv
language.dll=
sound.drv=mmsound.drv
comm.drv=comm.drv
keyboard.drv=keyboard.drv
system.drv=system.drv
drivers=mmsystem.dll msmixmgr.dll

[386Enh]
display=vdds3764.386
mouse=*vmd
ebios=*ebios
woafont=dosapp.fon
keyboard=*vkd
netheapsize=16
device=*vpicd
device=*vtd
device=*vdmad
device=*v86mmgr
device=*dosmgr
device=*wshell
device=*biosxlat
device=vtdapi.386
local=CON
FileSysChange=off
COM3Irq=4
COM3Base=03E8
COM4Irq=3
COM4Base=02E8
PagingFile=C:\WINDOWS\WIN386.SWP
MaxPagingFileSize=123552
device=vsbpd.386
device=MONOUMB.386
MaxBPs=768

[vcache]
minfilecache=512

[drivers]
timer=timer.drv
midimapper=midimap.drv
Midi=sb16fm.drv
Midi1=sb16snd.drv
Wave=sb16snd.drv
Aux=sb16snd.drv
Mixer=sb16snd.drv

[DISPLAY]
dpi=96
color-format=8
screen-size=640
fastmmio=on
Show last 33 lines
textrmw=0
scache=on
ellipse-support=on
polygon-support=on
dac-type=nbt

[sndblst.drv]
Port=220
Int=7
DmaChannel=1
MidiPort=330
HDmaChannel=5
FDMAPlayBack=1
FDMARecording=1
FullDuplex=1
VoiceVolume=31, 31
FMVolume=31, 31
CDVolume=31, 31
LineVolume=31, 31
MicVolume=31
MasterVolume=31, 31
SpeakerVolume=31
AuxVolume=0, 0
InputMasterVolume=31, 31
MuteVirtual=10
OutputMixerSwitch=6
BassTone=31, 31
TrebleTone=31, 31
RecordGain=1, 1
OutputGain=1, 1
AGC=0
Mux_WaveIn=1e
SaveOnExit=0

I launch my game with:

win runexit.exe c:\path\game.exe

This works fine for my use case but other games may need some of the removed components. For example, I removed all of the drivers necessary for networking.

Reply 3 of 16, by keropi

User metadata
Rank l33t++
Rank
l33t++

^ thanks for sharing this info, should come handy! I never thought of doing that tbh but it is a very interesting concept 😀

🎵 🎧 PCMIDI MPU , OrpheusII , Action Rewind , Megacard and 🎶GoldLib soundcard website

Reply 4 of 16, by Kahenraz

User metadata
Rank l33t
Rank
l33t

I'm creating a private repository of DOS games for my nephew so that I can push new games for him that he can download without my having to do it in person.

This is for a small netbook running a very old processor. Some games run fine like The Oregon Trail Deluxe (1992) but some games get taxed too heavily if the emulation gets layered too thick. I'm trying to see if I can get it to run Yobi's Basic Spelling Tricks but it's struggling with Linux > DOSBox > DOS > Win 3.1 > Game.

The miniaturized Windows is to make a separate package for the OS dependency so that I don't have to duplicate it for every game that needs it.

Reply 5 of 16, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Hi, that sounds great! I always feel happy when old classics are re-discovered by young people. :)
- By the way, you can also try WineVDM (OTVDM) and BoxedWine, too, for those games that are troublesome.
But yeah, the real thing (Windows 2.x/3.x) is nicer, since it provides the authentic atmosphere of an era.

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 6 of 16, by Kahenraz

User metadata
Rank l33t
Rank
l33t
Jo22 wrote:

Hi, that sounds great! I always feel happy when old classics are re-discovered by young people. 😀
- By the way, you can also try WineVDM (OTVDM) and BoxedWine, too, for those games that are troublesome.
But yeah, the real thing (Windows 2.x/3.x) is nicer, since it provides the authentic atmosphere of an era.

I've been unable to get this game to run under Wine due to it requiring an 8-bit X server. See here for a more detailed summary:

https://unix.stackexchange.com/questions/538502/

Reply 8 of 16, by Kahenraz

User metadata
Rank l33t
Rank
l33t

This is kind of a YMMV approach to running applications. Some things may require additional features which I removed. For example, I found that Civilization for Windows required that I add back "COMMDLG.DLL".

But I think the initial list is pretty minimal. I would be interested to know if there are any applications that successfully run with an even smaller subset for comparison.

Don't forget to apply this for an even smaller installation:

Easy way to shrink the size of Windows 3.1 WIN.COM

Reply 9 of 16, by Kisai

User metadata
Rank Member
Rank
Member
Kahenraz wrote:
This is kind of a YMMV approach to running applications. Some things may require additional features which I removed. For exampl […]
Show full quote

This is kind of a YMMV approach to running applications. Some things may require additional features which I removed. For example, I found that Civilization for Windows required that I add back "COMMDLG.DLL".

But I think the initial list is pretty minimal. I would be interested to know if there are any applications that successfully run with an even smaller subset for comparison.

Don't forget to apply this for an even smaller installation:

Easy way to shrink the size of Windows 3.1 WIN.COM

Just remove all the programs. replace the shell=progman.exe with the game executable, then that will keep the user from doing anything with the windows install. comdlg* files are "common dialog" bubbles, like the file picker for saving and loading games.

As far as legality goes, there's not really that much incentive to get Win16 software working on actual VM's so DOSBOX and gaming-oriented PC emulators are what's used, which means that at some point, there must be a game or application that Microsoft itself wants to re-release and not have to write a WoWoW layer (Win16 on Win32 on Win64), Win16 and DOS software can still work on the NTVDM in 32-bit NT4/2K/XP. It's not available on 64-bit OS's. If Microsoft really cared about licencing Windows 3.x they would still be selling it. The best that can be had is that games that for games that do not have a DOS mode, (eg Sierra's Outpost) that don't work properly or at all on Win95+ is for the companies who own the rights to the game to sell a "installed" disk image that doesn't require Windows be shipped with it to work in DOSBOX. The dosbox configuration would then be setup so that either a full version of Win 3.1x or some kind of free replacement can be dropped in.

I'm not sure if there's anyone out there trying to "make" a Windows 3.1x compatibility layer. But if Microsoft were so inclined they could "sell" their own stripped down Win3.1 and Win95 "drive" images on GOG.com . Just remove everything from the OS but the drivers that work with dosbox.

Last edited by Kisai on 2019-09-26, 05:34. Edited 1 time in total.

Reply 11 of 16, by Akuma

User metadata
Rank Member
Rank
Member
Kisai wrote:
Kahenraz wrote:

This is kind of a YMMV approach to running applications. Some things may require additional features which I removed. For example, I found that Civilization for Windows required that I add back "COMMDLG.DLL".
.....

Yeah I ran into that problem and copied the file, what I was wondering is I have a "win.com" not a "win.exe".
Did you optimize further ? Also I did not have to use the 'vxdldr.386' file and had to download the "runexit" seperately as I found out its not in the windows installation, but that was easy 😁

I have:

./INDEO.INI (27)
./MOUSE.INI (24)
./PROGMAN.EXE (115312)
./PROGMAN.INI (87)
./REG.DAT (1979)
./REGEDIT.EXE (32336)
./RUNEXIT.EXE (144696)
./SYSTEM/COMMDLG.DLL (89248)
./SYSTEM/COMM.DRV (9280)
./SYSTEM/CSPMAN.DLL (19312)
./SYSTEM/GDI.EXE (220800)
./SYSTEM.INI (1503)
./SYSTEM/KEYBOARD.DRV (7568)
./SYSTEM/KRNL386.EXE (75490)
[b]./SYSTEM/LZEXPAND.DLL (9936)[/b] *added*
./SYSTEM/MIDIMAP.DRV (52784)
./SYSTEM/MMSOUND.DRV (3440)
./SYSTEM/MMSYSTEM.DLL (61648)
./SYSTEM/MOUSE.DRV (10672)
./SYSTEM/S3TRIO.DRV (237728)
./SYSTEM/SB16FM.DRV (4048)
./SYSTEM/SB16SND.DRV (96048)
./SYSTEM/SHELL.DLL (41600)
./SYSTEM/SYSTEM.DRV (2304)
./SYSTEM/TIMER.DRV (4192)
./SYSTEM/TOOLHELP.DLL (14128)
./SYSTEM/USER.EXE (264016)
./SYSTEM/VDDS3764.386 (46239)
./SYSTEM/VGA.DRV (73200)
./SYSTEM/VGA_ENG.3GR (15360)
./SYSTEM/VGAFIX.FON (5360)
./SYSTEM/VGAOEM.FON (5168)
./SYSTEM/VGASYS.FON (7280)
./SYSTEM/VSBPD.386 (77998)
./SYSTEM/VTDAPI.386 (5245)
./SYSTEM/WIN386.EXE (544789)
./SYSTEM/WIN87EM.DLL (12800)
./SYSTEM/WINOA386.MOD (49248)
./WIN.COM (44170)
./WIN.INI (223)

Edit: Needed LZEXPAND.DLL too, required by some installers apparently.

Reply 13 of 16, by Akuma

User metadata
Rank Member
Rank
Member

How can you install without running the installer ? (and the file is only 10k)
You can also remove regedit.exe progman.exe and progman.ini
Then change in system.ini: shell=runexit.exe

This would save you another 150kb and you can run your game with: win c:\path\game.exe 😁

Reply 15 of 16, by Akuma

User metadata
Rank Member
Rank
Member

It was a rhetorical question 😁, my point was why would you let something like that hang on 10k.
But I've come to experience that there is more to it than that. Some installers work, others fail hard.
And since I want to know, I'm going to figure it out..which may take a while.

Reply 16 of 16, by crazyc

User metadata
Rank Member
Rank
Member

I'm not sure if there's anyone out there trying to "make" a Windows 3.1x compatibility layer.

This is what winevdm (https://github.com/otya128/winevdm) is. A port of wine's win16 implementation to windows combined with a cpu emulator.