├── README.TXT ├── README.md ├── W31SUPP.INF ├── WIN31.PIF ├── dc_116.drv ├── dc_328.DRV ├── dm_116.drv ├── dm_328.DRV ├── w31_116.exe └── w31_328.exe /README.TXT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gpdm/TPC-Win31on9x/df486b1be3d91b7cf988c0e6896124a0ea7e1c69/README.TXT -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Windows 3.1 Support for Windows 95 2 | 3 | Microsoft included the capability to run Windows 3.1 on top of Chicago (Windows 95's development name 4 | during Beta days). 5 | They said about it themselves: 6 | 7 | ``` 8 | Chicago can run Windows 3.1 on a separate screen, if you wish. 9 | ``` 10 | 11 | Well, let's do that! 12 | 13 | This project is meant to document this lost capability, which never made it to the Windows 95 final release, 14 | and provide a means to install it to Windows 95, yet even Windows 98 (and, somewhat, Windows Me), to try it out yourself. 15 | 16 | 17 | # What is it? 18 | 19 | Microsoft speaks about running Windows 3.1 in a VM, technically speaking a [Virtual DOS machine](https://en.wikipedia.org/wiki/Virtual_DOS_machine#DOS-based_VDMs). 20 | 21 | This is achieved basically by four files: 22 | 23 | * `win31.exe`, a custom loader application (similar to `win.com`), specifically to make Windows 3.1 run on Windows 95 24 | * `win31.pif`, a PIF file for said loader 25 | * `dualmous.drv`, a mouse driver tailored to run conflict-free within the VDM 26 | * `dualcomm.drv`, a serial driver tailored to run conflict-free within the VDM 27 | 28 | 29 | # Which releases are available? 30 | 31 | Microsoft included this capability in Chicago builds 81 to 328. 32 | 33 | This repository includes just the version from build 116 and build 328, although they differ not too much from each other. 34 | 35 | The main difference is the "switch-back" icon, that is used to return to Chicago/Windows 95. 36 | Build 116 refers to "return to Chicago", while build 328 refers to "Return to Windows 95". 37 | Accordingly, the icons have been changed. 38 | 39 | 40 | # System Requirements 41 | 42 | * Windows 95 RTM, or Windows 98/SE RTM 43 | * Windows Me RTM is also possible, but the mouse is not working 44 | * Windows 3.1 or 3.11 must be installed to your hard drive side-by-side to Win9x 45 | * Windows for Workgroups 3.1/3.11 is also fine 46 | * Windows 3.0 is not supported 47 | 48 | # Installing Windows 3.1/3.11 49 | 50 | Unless you have Windows 3.1x already installed, you can still install it from within Windows 9x, 51 | but you must exit to MS-DOS mode. 52 | 53 | * run `lock c:` 54 | * run `setup.exe` from the Windows 3.1x install media 55 | * chose to install Windows 3.1x to a new directory (do NOT, I repeat, do NOT, install it to your current C:\WINDOWS directory!) 56 | * when asked, deny Windows 3.1x to change `CONFIG.SYS` and `AUTOEXEC.BAT`, you won't need any changes to these files at all! 57 | * run `unlock c:` once setup has completed 58 | * then `exit` from MS-DOS back to Windows 9x 59 | 60 | Note: Windows Me doesn't have MS-DOS mode any more. 61 | But you can restore that using this [community patch](https://github.com/gpdm/TPC-WinMe-DOSMODE) 62 | Follow the procedure outlined above. 63 | 64 | # Installing this Distribution 65 | 66 | An INF installer is provided for your convenience. 67 | This will install all relevant files beneath `C:\WINDOWS\SYSTEM\WIN31`. 68 | 69 | A Readme file and direct links to the release 116 and 328 directories will be added 70 | to the Startmenu. 71 | 72 | Please follow the additional instructions in the [Readme](README.TXT) on how to make it work. 73 | 74 | # Removing this Distribution 75 | 76 | This package registers with the Software catalog, so you can easily remove it again 77 | via Control Panel -> Add/remove programs. 78 | 79 | NOTE: This will only remove the support files, but not your Windows 3.1 installation residing elsewhere on your hard drive. 80 | 81 | 82 | # Excerpt from original Windows Chicago Beta Release Notes 83 | 84 | The following excerpt has been taken from the Chicago Beta 1 release notes, 85 | dated 5/31/1994. 86 | 87 | This is how Microsoft described to use the feature back then. 88 | 89 | ## Windows 3.1 running in a VM 90 | Chicago can run Windows 3.1 on a separate screen, if you wish. Note that the applications will have to be installed separately for Windows 3.1 and Chicago in this case. 91 | 92 | You should only run Windows 3.1 in VGA mode (640 x 480, 16 color). The reason for this is that many Windows 3.1 video drivers require the presence of a separate Windows 3.1 VDD. The VGA driver does not have this requirement and so it functions correctly on the Chicago VDD. The ability to run on other drivers depends on their requirements. It may or may not succeed. 93 | 94 | To run Windows 3.1 under Chicago 95 | 1. Copy the file WIN31.EXE from your \CHICAGO\SYSTEM directory to your Windows 3.1 directory (usually C:\WINDOWS). 96 | 2. Edit the following lines in the file SYSTEM.INI in your Windows 3.1 directory (usually C:\WINDOWS\SYSTEM.INI): 97 | 98 | Change To 99 | 100 | ``` 101 | COMM.DRV=COMM.DRV COMM.DRV=C:\CHICAGO\SYSTEM\DUALCOMM.DRV 102 | MOUSE.DRV=MOUSE.DRV MOUSE.DRV=C:\CHICAGO\SYSTEM\DUALMOUS.DRV 103 | ``` 104 | 105 | Do this only if the original lines accessed the COMM.DRV and MOUSE.DRV files (the right side of the "=" sign). 106 | 3. Set the Command Line and Working Directory in the WIN31.PIF file to reference your Windows 3.1 directory, if it is something other than C:\WINDOWS. To access these properties: 107 | a. Right click on the file C:\CHICAGO\SYSTEM\WIN31.PIF 108 | b. Choose Properties from the context menu 109 | c. Choose the Program Property Sheet 110 | d. Make sure that the Command Line entry starts with your Windows 3.1 directory. Make sure that the Working Directory entry is your Windows 3.1 directory. 111 | 4. In your Chicago Main group, create a link to the file \CHICAGO\SYSTEM\WIN31.PIF. 112 | 113 | To access Windows 3.1, double-click the icon you just created. Please do not perform Control Panel-related operations from Windows 3.1. However, you can run any application from the Windows 3.1 screen and it will run in a Windows 3.1 environment. To return to Chicago, click on the Chicago icon that will be visible on your Windows 3.1 screen. 114 | 115 | # Known Issues 116 | 117 | ## Mouse not working on Windows Me 118 | 119 | Mouse works fine on Windows 95 and Windows 98, but not on Windows Me. 120 | 121 | There is currently no known solution to this. 122 | 123 | ## Control Panel segfaults 124 | 125 | That is a known error since the early beta days, and was never resolved. 126 | 127 | ## MS-DOS Prompt can be started 128 | 129 | That is a known error since the early beta days, and was never resolved. 130 | 131 | ## Build 115 binaries locks up or crashes Windows Me 132 | 133 | This was observed multiple times. Try the build 328 files instead, these seem to work. 134 | 135 | ## Why are other builds not included? 136 | 137 | This feature didn't seem to receive significant improvements over the course of Windows Chicago's beta run. 138 | 139 | The only significant change was that at some point, the program icon and the label to it shown in Windows 3.1 140 | where changed from "Return to Chicago" to "Return to Windows 95". 141 | 142 | ## Do I really need to copy the files to the Windows 3.1x directory? 143 | 144 | Yes. It's not sufficient to just point the PIF's working directory to the Windows 3.1x path. 145 | You must have them residing in the Windows 3.1x directory or it won't work. 146 | 147 | Technically speaking, the two .DRV files don't need to be there, as you could point the 148 | full path to them in `SYSTEM.INI`. 149 | 150 | But to simplify things, I went the easy route, just copying everything into the same spot. 151 | Follow the [README](README.TXT) as it tells you. 152 | 153 | ## I thought these binaries wouldn't run on the final Windows 95? 154 | 155 | That's true. 156 | 157 | In order to make them run, both versions of `WIN31.EXE` have been patched at offsets `0x360h` and `0x827h`. 158 | The Op-Code `74` was changed to `EB` to bypass the version checks. 159 | 160 | Original code segments: 161 | 162 | ``` 163 | 83 F8 04 cmp ax,4 164 | 74 10 je $+12h 165 | ``` 166 | 167 | change to 168 | 169 | ``` 170 | 83 F8 04 cmp ax,4 171 | EB 10 jmp $+12h 172 | ``` 173 | 174 | and 175 | 176 | ``` 177 | 3D 04 00 cmp ax,04 178 | 74 0B je $+12h 179 | ``` 180 | 181 | changed to 182 | 183 | ``` 184 | 3D 04 00 cmp ax,04 185 | EN 0B jmp $+12h 186 | ``` 187 | 188 | # Acknowledgements, Copyright 189 | 190 | This is original application binaries provided by Microsoft, and thus subject to their Copyright, 191 | (c) 1981,1994 Microsoft Corp. 192 | 193 | Strictly speaking, it's not allowed to redistribute these files. 194 | The motivation lies in documenting an interesting technological feature, 195 | making it available to the retro community and tech enthusiasts, for the sole 196 | purpose of showcasing historical software capability and it's behaviour. 197 | 198 | -------------------------------------------------------------------------------- /W31SUPP.INF: -------------------------------------------------------------------------------- 1 | ; This is the Setup information file to install Windows 3.1 Support for Windows 95 2 | 3 | [VERSION] 4 | AdvancedINF=2.5, %AdvPackWarn% 5 | signature=$CHICAGO$ 6 | 7 | 8 | [DefaultInstall] 9 | RequiredEngine=SetupAPI,"Fatal Error - missing setupapi.dll" 10 | ;Standard INF Options 11 | CopyFiles=Install.Copy.Windows.Inf,Install.Copy.Windows.System.Win31,Install.Copy.Windows.System.Win31.116,Install.Copy.Windows.System.Win31.328 12 | AddReg=Install.AddReg 13 | UpdateInis=Install.AddShortcuts 14 | 15 | 16 | [Uninstall] 17 | BeginPrompt=Uninstall.BeginPrompt 18 | DelFiles=Uninstall.Del.Windows.Inf,Uninstall.Del.Windows.System.Win31,Uninstall.Del.Windows.System.Win31.116,Uninstall.Del.Windows.System.Win31.328 19 | DelReg=Uninstall.DelReg 20 | UpdateInis=Uninstall.DelShortcuts 21 | 22 | 23 | 24 | [DestinationDirs] 25 | ; general locations: 26 | ; 10=Windows, 11=SYSTEM, 12=IOSUBSYS, 13=COMMAND, 14=Control Panel, 15=Printers, 16=Workgroup 27 | ; 17=INF, 18=Help, 19=Administration, 20=Fonts, 21=Viewers, 22=VMM32, 23=Color, 25=Shared 28 | ; 26=Winboot, 27=Machine, 28=Host Winboot, 30=Boot drv root, 31=Root of Boot drv Host 29 | ; 00=Null (new) LDID, 01=Source drv:\path, 02=Temp Setup, 03=Uninstall, 04=Backup 30 | 31 | ; Install Locations 32 | Install.Copy.Windows.Inf = 17 33 | Install.Copy.Windows.System.Win31 = 11,WIN31 34 | Install.Copy.Windows.System.Win31.116 = 11,WIN31\116 35 | Install.Copy.Windows.System.Win31.328 = 11,WIN31\328 36 | 37 | ; Uninstall Locations 38 | Uninstall.DelWindows.Inf = 17 39 | Uninstall.Del.Windows.System.Win31 = 11,WIN31 40 | Uninstall.Del.Windows.System.Win31.116 = 11,WIN31\116 41 | Uninstall.Del.Windows.System.Win31.328 = 11,WIN31\328 42 | 43 | 44 | [Uninstall.BeginPrompt] 45 | Prompt = %BeginPromptUninstall% 46 | ButtonType = 47 | Title = %UpdName% 48 | 49 | 50 | ; 51 | ; INSTALL SECTION 52 | ; 53 | [Install.Copy.Windows.Inf] 54 | W31SUPP.INF,W31SUPP.INF,,4 55 | 56 | [Install.Copy.Windows.System.Win31] 57 | README.TXT,README.TXT,,4 58 | 59 | [Install.Copy.Windows.System.Win31.116] 60 | DUALMOUS.DRV,DM_116.DRV,,4 61 | DUALCOMM.DRV,DC_116.DRV,,4 62 | WIN31.EXE,W31_116.EXE,,4 63 | WIN31.PIF,WIN31.PIF,,4 64 | 65 | [Install.Copy.Windows.System.Win31.328] 66 | DUALMOUS.DRV,DM_328.DRV,,4 67 | DUALCOMM.DRV,DC_328.DRV,,4 68 | WIN31.EXE,W31_328.EXE,,4 69 | WIN31.PIF,WIN31.PIF,,4 70 | 71 | [Install.AddReg] 72 | ; register UNINSTALL key 73 | HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\W31Support","DisplayName",,"%UpdName%" 74 | HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\W31Support","UninstallString",,"RunDLL setupx.dll,InstallHinfSection Uninstall 4 W31SUPP.INF" 75 | 76 | [Install.AddShortcuts] 77 | setup.ini,progman.groups,,"Win3xSupport=Windows 3.1 Support" 78 | setup.ini,Win3xSupport,,"""Windows 3.1 (Build 116)"",%11%\WIN31\116\" 79 | setup.ini,Win3xSupport,,"""Windows 3.1 (Build 328)"",%11%\WIN31\328\" 80 | setup.ini,Win3xSupport,,"""Readme"",%11%\WIN31\README.TXT" 81 | 82 | 83 | ; 84 | ; UNINSTALL SECTION 85 | ; 86 | [Uninstall.DelReg] 87 | ; remove UNINSTALL key 88 | HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\W31Support" 89 | 90 | [Uninstall.Del.Windows.Inf] 91 | W31SUPP.INF 92 | 93 | [Uninstall.Del.Windows.System.Win31] 94 | README.TXT 95 | 96 | [Uninstall.Del.Windows.System.Win31.116] 97 | DUALMOUS.DRV 98 | DUALCOMM.DRV 99 | WIN31.EXE 100 | WIN31.PIF 101 | 102 | [Uninstall.Del.Windows.System.Win31.328] 103 | DUALMOUS.DRV 104 | DUALCOMM.DRV 105 | WIN31.EXE 106 | WIN31.PIF 107 | 108 | [Unistall.DelShortcuts] 109 | setup.ini,progman.groups,,"Win3xSupport=Windows 3.1 Support" 110 | setup.ini,Win3xSupport,,"""Windows 3.1 (Build 116)""" 111 | setup.ini,Win3xSupport,,"""Windows 3.1 (Build 328)""" 112 | setup.ini,Win3xSupport,,"""Readme""" 113 | 114 | 115 | 116 | ; English / Default 117 | [Strings] 118 | ;Non-localizable 119 | LANG= "EN" 120 | LocaleID= "UPD" 121 | Guid= "{9d93581f-ed31-4b51-9e6f-172b31881a5a}" 122 | UpdID= "311561" 123 | UpdateKey= "Software\Microsoft\Windows\CurrentVersion\Setup\Updates" 124 | 125 | ; Localizable strings 126 | UpdName="Windows 3.1 Support for Windows 95" 127 | AdvPackWarn="You need a newer version of advpack.dll." 128 | SrcDiskName="Windows 3.1 Support for Windows 95" 129 | BeginPromptUninstall="Remove Windows 3.1 Support for Windows 95?" 130 | 131 | [SourceDisksNames] 132 | 55=%SrcDiskName%,"",0 133 | 134 | [SourceDisksFiles] 135 | W31SUPP.INF=55 136 | README.TXT=55 137 | WIN31.PIF=55 138 | W31_328.EXE=55 139 | W31_116.EXE=55 140 | DC_116.DRV=55 141 | DM_116.DRV=55 142 | DC_328.DRV=55 143 | DM_328.DRV=55 144 | -------------------------------------------------------------------------------- /WIN31.PIF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gpdm/TPC-Win31on9x/df486b1be3d91b7cf988c0e6896124a0ea7e1c69/WIN31.PIF -------------------------------------------------------------------------------- /dc_116.drv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gpdm/TPC-Win31on9x/df486b1be3d91b7cf988c0e6896124a0ea7e1c69/dc_116.drv -------------------------------------------------------------------------------- /dc_328.DRV: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gpdm/TPC-Win31on9x/df486b1be3d91b7cf988c0e6896124a0ea7e1c69/dc_328.DRV -------------------------------------------------------------------------------- /dm_116.drv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gpdm/TPC-Win31on9x/df486b1be3d91b7cf988c0e6896124a0ea7e1c69/dm_116.drv -------------------------------------------------------------------------------- /dm_328.DRV: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gpdm/TPC-Win31on9x/df486b1be3d91b7cf988c0e6896124a0ea7e1c69/dm_328.DRV -------------------------------------------------------------------------------- /w31_116.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gpdm/TPC-Win31on9x/df486b1be3d91b7cf988c0e6896124a0ea7e1c69/w31_116.exe -------------------------------------------------------------------------------- /w31_328.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gpdm/TPC-Win31on9x/df486b1be3d91b7cf988c0e6896124a0ea7e1c69/w31_328.exe --------------------------------------------------------------------------------