Windows 1.0 Development Release 5

Development Release #5
Build of Windows 1.0
Screenshot
Release nameDevelopment Release #5
OS family16-bit Windows
Version number1.00
Architecturex86 16-bit
Compiled on1984-10-31
TCB.png TCBGallery.png BA.png

Windows 1.0 Development Release #5 is the earliest available build of Windows 1.0. This build is the fifth in the Development Release series, intended to help application developers design and develop their applications to work with Windows. According to INSTALL.BAT, it was compiled on 31 October 1984 and likely released in the following weeks. It is the earliest available build of Windows so far, although earlier releases are known to exist in private collections.

By default, this build is installed to C:\WINDOWS\TEST, with development resources in C:\WINDOWS\BIN. Also included are several mockup applications, namely Chart, Graph, PPDemo, Sample and Template, along with their source code. The overall UI design philosophy was not finalized yet, which can be clearly seen in dialogs – some, like the standard Windows dialogs, use a menu bar rather than OK and Cancel buttons, while custom dialogs tend to look completely different.

This build was uploaded to the BetaArchive FTP on 19 September 2008.[1]

System requirements[edit | edit source]

According to INSTALL.BAT:

The following equipment is required:
* IBM XT or AT
* 512 K memory.
* Floppy disk configured as DRIVE A:.
* Hard disk configured as DRIVE C:.
* Color graphics card.
* External console connected to COM1: ( debugging ).
* Microsoft mouse ( bus or serial ).
* Timer.
The following software is required:
* 2.x or 3.0 MS-DOS

Installation[edit | edit source]

The installation is done with a simple batch script named INSTALL.BAT. Using an emulator such as PCem or 86Box is recommended, since this build depends on an IBM XT or AT and a bus/serial mouse.

Step-by-step[edit | edit source]

  1. Use an emulator such as PCem or 86Box and create a new virtual machine of XT or AT class with the following hardware configuration:
    • Intel 8088, 8086 or 80286 processor (depending on the selected machine)
    • 512k or more memory
    • CGA or Hercules display adapter
    • Serial port 1 enabled and used for Microsoft Serial Mouse
    • A machine-appropriate hard disk controller (either MFM, RLL, XTIDE or IDE)
    • A 10 or 20 MB hard disk with standard CHS values and of the same type as the controller
    • At least one 5.25" 360k floppy disk drive
  2. Boot the machine with an MS-DOS or PC-DOS 2.x or 3.0 bootdisk.
  3. Partition and format the hard drive by using FDISK, FORMAT and SYS utilities.
  4. Reboot the machine to boot from the hard disk.
  5. Insert the first floppy disk for Development Release #5.
  6. Run copy A:\INSTALL.BAT C:\.
  7. Run C:\INSTALL.BAT.
  8. Follow on-screen instructions.

Now every time you want to run Windows, type path C:\WINDOWS\BIN, cd C:\WINDOWS\TEST and mswin (or add these lines to your AUTOEXEC.BAT file to automatically start Windows on system boot).

Changes since the previous developer release[edit | edit source]

This is based on analysis of the released DR4 release notes. As the disk images of DR4 have not been dumped and/or publicly released yet, this is not necessarily a complete or even completely accurate list of the changes from the previous version.

Executable format[edit | edit source]

The executable format has been updated – the extension has also been changed from .MOD to .EXE. This is evidenced by the NEWEXE.H file present in the Windows 1.x SDK, 2.11 OAK, and 3.1 kernel source code present in the Windows NT 3.5 build 782 source code. Format revisions were made on 17 October and 23 October 1984 between the compilation dates of DR4 and DR5.

Inspections of DR5's MC.EXE (the Module Compiler) suggest that the original Module format did not contain END* segments (described as "Mark end of table for NEWEXE"), instead the number of entries in each table were recorded and used by EXETOMOD to determine the length of each group.

New module instance procedure[edit | edit source]

NewProc, the procedure responsible for handling multiple instances (in apps that can have multiple data segments), was removed quite recently before this build. Its functionality was probably merged into LoadProc (as the hPrev parameter). References to it can be seen in QANDA.DOC and DR4's release notes.

Memory management[edit | edit source]

Memory management has been rewritten in this build in order to reduce the very high (for the time) memory usage of previous versions (over 300 kilobytes with several applications loaded according to the release notes for DR4, completely shutting out many lower-end systems of the time).

Initialization procedure[edit | edit source]

The initialization procedure has been reworked; the OS no longer uses the Module Booter (MB.EXE) to initialize and load startup applications from USER.PRO configuration file; instead, this task is performed by invoking a batch file that loads the Windows Kernel (KERNEL.EXE).

It is worth noting that symbols for the Module Booter still exist on the DR5 disks, as MB.SYM, showing that MB.EXE was last compiled on 5 October 1984, several weeks prior to the compilation of this build. It suggests that MB was simply removed, not integrated into the kernel, as none of the functions from MB are in DR5's kernel.

Display drivers[edit | edit source]

The display driver system has been revamped. Instead of simply having one display driver – likely for CGA – named DISPLAY.MOD, DR5 introduces a new system where .DIN files are copied to DISPLAY.EXE, depending on which display adapter has been selected. The cursor routines for each driver are now stored in .CIN files and are copied to CURSOR.EXE during installation.

UI controls[edit | edit source]

UI controls in the Control Manager (CTLMGR.MOD) in DR4 have likely been merged into WINDOWS.EXE (which became USER.EXE in later builds).

Tools removed[edit | edit source]

Several tools and example applications have been removed from the distribution since DR4. These are:

  • CTLTEXT.MOD – A test application for the Control Manager, which has likely been integrated into WINDOWS.EXE in this build.
  • DM.EXE ("Module Displayer") – An application that creates listings based on .MOD files (became NEWHDR.EXE/EXEHDR.EXE in later builds).
  • DATAX.MOD – An example application for data exchange.
  • EXE2MOD.EXE – MS-DOS Executable to Windows Module converter (became NE.EXE in this build).
  • LINK.EXE – Link version 2.44 is included with DR4's third disk; it is removed in this build.
  • MAKE.EXE – Make is included on DR4's third disk, and is also removed in this build.
  • TASKDEMO.MOD – A demonstration application for DR4's new multitasking system.
  • WDB.BAT – A batch file used for debugging earlier builds. A document also shipped in earlier Development Releases – WDB.DOC – that has also been removed.

README.DOC updates[edit | edit source]

README.DOC has been updated, as evidenced by the 6 September 1984 date of DR5's version of the file, which is seven days after the compile date of the previous development release.

Cursors[edit | edit source]

Several new cursors have been added to this build, as opposed to DR4's two non-application-related cursors; BULLSEYE.CUR (a part of the Icon Editor source code) has additionally been shipped only as a compiled resource (inside ICONEDIT.RES) since DR4.

Bugs, fixes, and enhancements[edit | edit source]

Development Release #5 is still a rather early build and thus has some notable performance and stability issues. Prolonged or memory intensive use (e.g. running many applications at the same time) can cause the build to hang or crash without warning, sometimes to the point where only a hard reboot will restore functionality to the computer.

Notepad crash[edit | edit source]

Starting Notepad may cause the system to hang or crash, as the system may run out of file handles. Generally adding these two lines to the CONFIG.SYS file in the root of the C: drive will prevent it from crashing:

FILES=30
BUFFERS=30

Up-Arrow cursor[edit | edit source]

Due to a typo in the source code, the uparrow cursor, displayed when hovering over menus, will fail to load during the initialisation of the WINDOWS module, resulting in a null pointer to be returned. The SetCursor routine will detect the null pointer and use the default cursor instead. The Up-Arrow cursor can be seen in the Fall COMDEX 1983 build, so the typo most likely happened when resources were separated from the WINDOWS module. It made a return in the Alpha Release because all resource names were converted to IDs. This issue can be fixed by changing the string in WINDOWS.EXE from upArrow to uparrow.

Clipboard, Notepad and Control Panel problem[edit | edit source]

Clipboard, Notepad and Control Panel will only start once per session. Trying to start them for the second time will only result in a brief cursor change from normal to hourglass and then back to normal. The reason for this is because unlike all other included applications, these three are single data segment applications. Each instance of an application must have a unique data segment, and by allowing only one data segment to exist, only a single instance can be started each session. Renaming the executables to something else will trick the system into thinking that they are different apps, hence give you the chance to start them again. Patching the headers of the executables (to remove the single data segment limit) can allow them to be started multiple times under the same name.

PPDEMO problem[edit | edit source]

The PPDEMO.EXE application will cause the system to hang after it's closed, this is due to an extra parameter called bLastInstance defined for its FreeProc. It is unknown whether bLastInstance was in previous releases and removed prior to DR5, or something new and yet to be added, but its purpose is clear – to notify the application of whether this is the last instance of an application. Some apps may want to free its objects only after the termination of the last instance. This will cause an extra 2 bytes to be added to the stack pointer, ruining the internal states of the system.

Clipboard problem[edit | edit source]

The Clipboard application can't be closed for the rest of the session once it's started. This is because Clipboard is both an application and a dynamic-link library, closing it would cause applications dependent on it to misbehave. Its DestroyProc returns FALSE for all queries. It can be closed if the DestroyProc is patched to return TRUE, and doing so will cause applications like Notepad to throw errors and/or crash.

Accessing empty floppy drives[edit | edit source]

If the user tries to access an empty floppy drive in MS-DOS Executive, the system will display a DOS disk error message over Windows and hang or crash. This was fixed in the Alpha Release, so that Windows instead displays a proper error dialog.

API import limit[edit | edit source]

Applications must not have more than 100 imported API functions, otherwise Windows will refuse to load the module. The linker from 1984 is physically incapable of producing binaries with more than 100 imports, and even if a newer linker is used to produce a valid executable, Windows' module loader will still not load the executable.

Switching display drivers[edit | edit source]

DR5 on CGA and Hercules

This build supports both double-scanned CGA (640×400) and Hercules (720×348) display, both in monochrome only. However, only CGA drivers are installed by default. Switching between them can be done with the included DRIVERS.BAT batch file, just follow these simple steps:

path C:\WINDOWS\BIN
cd C:\WINDOWS\TEST
drivers <desired-driver>

Replace <desired-driver> with IBMCOLOR for CGA or with HERCULES for Hercules. Please note that you must of course also change the emulated display adapter in emulator settings.

Registering file extensions[edit | edit source]

In the USER.PRO file (in \windows\test), you can find an [extensions] section. This is where you can register default applications for handling file extensions. The format is as follows:

txt = notepad ^.txt
ico = iconedit ^.ico

Be aware that the application has to support receiving a filename as a parameter, which Notepad doesn't at this point. Also the application must be in the same directory as the file you wish to open.

There is an undocumented function called RegisterType in DR5's kernel, with ordinal number 68 (the last ordinal). It returns 0 and does nothing else. 6 bytes are added to the stack pointer, meaning it probably accepted 3 WORD values or 1 DWORD and 1 WORD.

Running applications on startup[edit | edit source]

Also in USER.PRO is a Run value in the [windows] section. Any Windows executable you include in this space-separated list gets executed before the MS-DOS Executive starts. Applications started this way go directly into an iconic mode at the bottom of the screen (in other words, they'll be minimized).

Interesting findings[edit | edit source]

The NE format[edit | edit source]

This build uses an earlier version of the NE executable format, which is quite different from the final one and incompatible with it. The key difference is that application resources, such as menus, icons, etc., are stored externally in .RES files, usually with the same name as the EXE. The resource files appear to be loaded during the initialization procedure of the application. Double-clicking on resource files in MS-DOS Executive will start the associated application the same way that double-clicking on an EXE would.

Another difference is that this version of the format does not require the MS-DOS MZ stub at the start of the file. This results in there being two kinds of DR5 executables – those with and those without the MZ stub. The former can be started under MS-DOS, where they will display the usual "This program requires Microsoft Windows." message and quit. The latter will cause the system to hang as the NE header will be treated as code.

Use of the Shift key[edit | edit source]

The applications in this build can be started in iconic mode by holding down the Shift key while double-clicking on them in the MS-DOS Executive. To both restore and maximize a minimized application in a single move, hold down the Shift key while double-clicking on the application's icon.

To quickly start a new instance of an already running application, hold down the Shift key, then click and drag the application window to where you want the new window created. Clicking once on its window title will create a new window above the existing one. The new window will then be vertically tiled with the previous one. This also works for minimized applications, dragging and dropping an icon into the icon area will create a new minimized instance.

Crash message[edit | edit source]

The crash message

This build contains a message saying "Windows is about to crash". However, it is only displayed when Windows fails to create child windows (the drive list, the path and the file list) during MS-DOS Executive initialization.[2] As such, it's very hard to trigger it naturally. The message was removed some time after the Beta Release, but prior to Premiere Edition.

MS-DOS Executive drag-and-drop support[edit | edit source]

MS-DOS Executive in this build actually support simple drag and drop operations for moving files between directories. This feature was later completely removed after the Alpha Release, when MS-DOS Executive received a minor redesign. This may have been used to facilitate file deletion by dragging and dropping them onto the trash can icon in the icon area (see below).

Clock instances limit[edit | edit source]

The number of concurrently running timers in DR5 is limited to 16. As the Clock application uses a timer for each instance, at max 16 instances can run simultaneously. If the 17th Clock instance tries to start, the call to SETTIMER will fail and an error message will be displayed.

Unused Linker answer file[edit | edit source]

PPDEMO.LNK gets copied despite having no use. It does suggest that Microsoft initially used an answer file for the Linker, and the usage of SLIBC.LIB suggests that it was once by default linked to the MS-DOS C Library. It is unknown exactly when Microsoft switched from version 2.03 of the C compiler to a pre-release of version 3.0, but linking to the MS-DOS Library does hint that perhaps it happened quite recently as the Windows library didn't exist or wasn't ready.

References to past releases[edit | edit source]

The file REMOVE.BAT in the WINDOWS folder contains an older date, 29 May 1984. It is possible that this file was re-used from a previous build, probably from DR1, which was scheduled for release in May 1984 according to the 7 May 1984 issue of InfoWorld.[3]

The installation procedure in INSTALL.BAT empties some folders first, but completely removes \windows\lib. It's possible that previous releases used this folder, whereas DR5 used just \lib instead. The batch file for uninstalling Windows, REMOVE.BAT, does not care about \windows\lib, but mentions \lib, so it was either modified, or the release from which it came already used \lib.

The only reference to any previous releases in the provided documentation, in QANDA.DOC (found in \windows\doc), where it says: "The RC.EXE program had a small file buffer. It simply couldn't handle your large menu. The bug has been repaired". The included digital documentation contains only one timestamp, and that is "16/10/1984 16:37" in GRAPH.DOC (also in \windows\doc). The files haven't been changed to have the same date, so you can clearly see when each file was created and modified.

References to future releases[edit | edit source]

In QANDA.DOC, an upcoming January release is mentioned several times: "By our January release, our goal is to..." and "In our January release, there will be...". Because the Alpha was released in January 1985, this seems to suggest that no additional releases were made between DR5 and Alpha.

Easter eggs and funny things[edit | edit source]

The source code for some of the samples contains some amusing comments.

MENUID.C:

/*----------------------------------------------------------------------------
   "Some people, they like to go our dancing, and other people
   [like main], they do all the work . . ."
----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
   Our mad chicken-with-it's-head-cut-off error abort routine.
----------------------------------------------------------------------------*/

Icons[edit | edit source]

Windows 1.0 introduced the icon and cursor format (.ICO and .CUR files), though it was significantly changed in Windows 3.0 and has since remained largely the same to this day. The two formats are not compatible, but files can be converted from one to the other without much work.[4]

SAMPLE.EXE's icon is the Superman logo. SAMPLE.PNG

In WINDOWS.RES, there is an unused icon named TRASH, indicating older builds may have had a trash can feature of some kind. This is supported by photos of earlier builds where this icon can be seen, and press articles where it's described as a place where files are discarded.[5] Clearly, the feature was already removed before DR5 with only the trash can icon remaining. TRASH.PNG

CONFIG.BIN, which stores font configuration and the system bitmaps (such as window controls), contains two unused bitmaps, a menu and a help icon. They are possibly leftover of the status bar buttons from earlier builds.[6]

Error messages[edit | edit source]

Warning in DR5
Minor error in DR5

The API in this build has a PostError function that can display 3 error levels: WARNING, MINOR_ERROR and FATAL_ERROR. Dialogs created with PostError always have Abort, Retry and Ignore buttons that appear like a menu bar.

In case the application wants other button combinations, the PostMessage function must be used. For PostMessage, there's no concept of error levels. The famous note icon is displayed when using PostError with error level WARNING, and whenever using PostMessage. NOTE.PNG

The bomb icon will be displayed when using PostError with error level MINOR_ERROR. MINOR_ERROR was not used by any of the included applications, so this icon never appears during normal use. BOMB.PNG

No user interface will be displayed for PostError with error level FATAL_ERROR. Windows will exit within milliseconds on a 8 MHz machine after manually triggering it. Right after Windows exits, an error message is displayed in MS-DOS for approximately 1 second before the screen gets filled with seemingly random contents of memory.

All errors in DR5's sample apps use either PostError with error level WARNING or PostMessage which shows only the note icon and caused many people to believe the bomb was a remnant from previous Development Releases. The error icon was later changed to a hand performing the "stop" gesture, but the original choice of a bomb indicates early Windows development was influenced by Apple's Macintosh, which also used a bomb as an error icon.

clsWndHelp[edit | edit source]

This is one of the class procedures defined in the WndClass struct in WINDOWS.H. Class procedures were the predecessor of the message queue, and were called by Windows when an event related to the focused application happened, such as the user scrolling down. Before registering its class, every application has to set pointers in its class instance to the procedures it implements for handling desired events.

This particular procedure is not used by any of the sample applications, and its name suggests it could be a leftover from earlier builds that used it for providing help to the user via the system Help button in the status bar at the top of the screen. No other references to a help system can be found.

High resolution and color support (EGA, VGA, SVGA)[edit | edit source]

Community member jb881122 has modified the included Hercules driver which makes it possible to run DR5 in EGA, VGA, and VESA 800x600 modes, although without color support.[7] The Microsoft employee who wrote the first color driver and color application for Windows said that EGA support in 1984 was initially rushed and done in a very short amount of time, mainly for a demo with IBM. That is probably why it wasn't included by Microsoft in this build.

Reverse engineering of the included applications confirmed that applications like Calculator, Puzzle and Reversi were already supporting color at this stage of development.[8] Their colors in this build are different from their colors in DR3 and earlier, with the background colors of Puzzle and Calculator switched.

Later build[edit | edit source]

Unconfirmed build with PIF Editor

A low resolution image depicting a build very similar to DR5 was posted on the BetaArchive Discord server on 5 August 2019, but so far there is no proof for the authenticity of the image as its source is unknown. Visually, the build is identical to DR5, but it includes the PIF editor (PIF.EXE and PIF.RES), which was introduced sometime between DR5 and the Alpha Release. The presence of the PIF editor could suggest minimal DOS application support. The files DOSAPP.BIN and DOSAPP.EXE could be an early version of WINOLDAP.MOD (Windows Old Application module, used for running DOS applications under Windows), but the presence of DOSAPP.PIF could also mean it's in fact just a DOS application. The Clock application is also running, but its files are not located on drive A: (its contents can be seen in the MS-DOS Executive window), suggesting they might be on another disk.

PIF Edit seen in this image has an "Icon" field, which is missing a colon (:) after the label. It also has options called "Warn" and "Force Exit", which don't appear in later versions of the program. Many options seen in Alpha's PIF Editor are missing, indicating this could be a very early form of the program. The ability to display a custom icon for a DOS application would be especially interesting.

Gallery[edit | edit source]

Setup[edit | edit source]

CGA graphics[edit | edit source]

Hercules graphics[edit | edit source]

References[edit | edit source]