Windows 1: Screen Driver Source
This is an attempt to create source code that builds to the Windows 1.x video drivers — the sort of thing that would have been found in the Windows 1.x DDK, if that ever existed.
The source code here was based on the Windows 2 DDK, adapted to produce something close to the corresponding drivers in the original 1.x.
The intended build environment is cross-development under Linux. You will need a Windows 1 SDK installed (at least MASM.EXE, LINK4.EXE, RC.EXE, RCPP.EXE and MAPSYM.EXE). You will also need the emu2 emulator installed to run these tools. Then setting up a build environment should be a matter of:
- Edit Makefile.linux to set the paths to emu2 and the SDK
- Add a symlink to RCPP.EXE (which RC launches internally) from the build directory
- Type make -f Makefile.linux and hopefully the appropriate driver will build.
For me, the resulting drivers don't come out quite the same as the originals. The main reason is that LINK4 seems to align modules on a word boundary, and whatever tool was used to build the original drivers didn't do that. There are occasional other differences where the versions of MASM and RC I used don't seem to behave quite like whatever was originally used to build the drivers. The RC.EXE I used, for example, marks its output as targeting Windows 2.0 — fortunately, Windows 1.x doesn't seem to care.
Currently I have building source for the following drivers:
| File | Size | Supporting | Resolution | Notes |
|---|---|---|---|---|
| APRICOT.ZIP | 204k | Apricot PC/Xi | 800×400 mono | Based on the driver extracted from WIN100.BIN by Nina Kalinina |
| ATTDC.ZIP | 191k | AT&T PC 6300 | 640×400 mono | |
| ATTDEB.ZIP | 176k | AT&T PC 6300 (with Display Enhancement Board) | 640×400 (8 colours) | Appears to have been compiled without mouse pointer exclusion (which ensures the mouse pointer is correctly redrawn if it overlaps with an area of the screen being withdrawn) |
| CGA.ZIP | 190k | CGA | 640×200 mono | |
| EGA.ZIP | 217k | EGA (256k) | 640×350 (8 colours) | |
| VGA | 640×480 (8 colours) | |||
| EGAHIBW.ZIP | 199k | EGA | 640×350 mono | Intended for use with an EGA monitor |
| VGA | 640×480 mono | |||
| EGAMONO.ZIP | 194k | EGA | 640×350 mono | Intended for use with an MDA monitor |
| VGA | 640×480 mono | |||
| EGALORES.ZIP | 209k | EGA | 640×200 (8 colours) | |
| GENIUS.ZIP | 191k | MDSI Genius VHR | 728×1004 mono | |
| HERCULES.ZIP | 191k | Hercules | 720×348 mono | |
| IM1024.ZIP | 208k | VMI Image Manager 1024 | 1024×800 (256 colours) | |
| MULTIMOD.ZIP | 192k | HP Vectra with MultiMode adapter | 640×400 mono | |
| SIEMENS.ZIP | 193k | Siemens PC-D | 640×350 mono | This closely follows the EGA 640×350 driver, but with the framebuffer at segment 0xF000 rather than 0xA000. This driver appears to have been built with an earlier version of windefs.inc than all the other drivers on this page, lacking a fix specific to the 286 processor. |
| SIGMA4.ZIP | 201k | Sigma Designs Color 400 | 640×400 (4 colours) | |
| SIGMA8.ZIP | 201k | Sigma Designs Color 400 | 640×400 (8 colours) | |
| STBHT.ZIP | 192k | STB HT Chauffeur | 1056×352 mono | |
| STBMR.ZIP | 232k | STB EGA Multi Res | 640 ×400 (8 colours) | |
| 640×480 (8 colours) | ||||
| 752×410 (8 colours) | ||||
| 832×350 (8 colours) | ||||
| T20COLOR.ZIP | 191k | Tandy 2000 | 640×400 (8 colours) | |
| T20MONO.ZIP | 191k | 640×400 mono | ||
| TSENG.ZIP | 209k | Tseng EVA | 640×480 (8 colours) | |
| VEGA.ZIP | 218k | VEGA Deluxe | 640×480 (8 colours) | |
| 752×410 (8 colours) | ||||
| VISION.ZIP | 193k | ConoVision 1440 | 1440×720 mono | |
| WY700.ZIP | 195k | Wyse 700 (aka Amdek 1280) | 1280×800 mono | |
Modified driver | ||||
| RVCGA.ZIP | 190k | CGA | 640×200 mono | The stock CGA monochrome driver, modified to output in reverse video (for dark-on-light LCDs like the IBM Convertible). The same tree builds normal and reverse video drivers. The changes could in principle be made to other monochrome drivers. |
The drivers fall into four main groups, which I've colour-coded:
Apricot, CGA, Genius, Hercules, STB HT, Tandy 2000 Mono, Wy700 and the two mono EGA drivers are all black and white drivers, the main difference being the layout of video RAM.
The AT&T DEB driver, the two Sigma drivers, and the Tandy 2000 colour driver are examples of unaccelerated colour drivers using a planar arrangement of memory.
The two colour EGA drivers, the four STB MR drivers and the Tseng driver are more complicated colour drivers that use the EGA's hardware to accelerate drawing. (All are pretty much identical to EGAHIRES, just selecting the appropriate video mode in
physical_enable.)The IM1024 driver is a 256-colour driver (as far as I know, the only one for Windows 1.x) that uses a packed-pixel memory layout. It also makes extensive use of the card's built-in graphics primitives.
I used various ad-hoc tools while constructing these drivers. One that may be marginally useful is derezz, which extracts the resources from a Windows 1.x driver in a form that can be used by RC.EXE:
DEREZZ.C (6k)