I discovered a wonderful hack that likely would allow me to run Windows 2 on my vintage Apricot PC Xi before the New Year.

Quick recap: Apricot PC is a British computer from 1983, not compatible with the IBM PC. It had a Windows 1 port, but not Windows 2, and thus couldn't run Word, Excel, or Illustrator. With a bit of driver-writing, I managed to start Windows 2 on it, but my video driver is rudimentary and cannot be used for practical purposes. Windows video drivers are super-complicated, so I was fully expecting to spend over a month writing one (at least there are docs for everything!)

But I just discovered a way to run Windows 2 with Windows 1 video drivers. So if I had a Windows 1 driver for Apricot, I could use it in Windows 2. Of course, it's never that simple...

Find the difference between Windows 2 with Win1 driver and Windows 2 with the real Win2 driver - both are EGA 640x350!

🧵 thread with a few more screenshots and pointers

As you might know, graphical drivers for Windows 1/2/3 are _complicated_. They are expected to implement a huge chunk of Windows GDI, the graphical abstraction library. This means they're responsible for drawing parts of the window decorations, and so on.

You also might remember that Windows 1 had window decorations _completely_ different from Windows 2, as it was using tiled windows instead of overlapping ones. But for some reason, Windows 1 video drivers can render floating windows just fine, and even can draw minimize and maximize buttons.

However, Windows 1 drivers handle fonts in a different way. Windows 2 is supposed to offer a new Font API, but most apps are using the legacy entry point for ExtTextOut. The font format is completely different, though. So, imagine you transplant a Windows 1 driver to the Windows 2 system. The second screenshot is what you get.

(🧵2/? continue)

All my previous experiments with Windows 2 running on Windows 1 drivers ended here. But I had a stray thought: if fonts for Windows 1 and Windows 2 are different, maybe I can just bring fonts from Windows 1?

Turns out, I can! Windows 2 with Windows 1 video driver and fonts seems to work as expected - I can run Word, I can run little games, I probably should be able to run most, if not all, programs this way.

The fonts are different from the regular Windows 2, but who cares if it works, right?

So... circling back to the beginning of the thread: for my Windows 2 on Apricot PC port, I can just use the existing Windows 1 driver!

...Except I can't. Windows 1&2 use a thing called "fast boot"; the SETUP tool links all the drivers together in WIN100.BIN and WIN100.OVL files. The only Apricot PC video driver available is hard-linked to the Windows kernel.

So, my next task is to unlink the driver from the kernel. But this is far easier than writing a new driver.

🧵 3/3 fin~

@nina_kali_nina you say "fonts" … but are we talking "outline" scalable fonts? Or just preset size bitmap fonts?

Hmm wow I've never seen that interface on WordWin before … is that, yikes, installation within a Word macro? No wonder the viruses broke out here first.

@whophd preset bitmap fonts. Windows 1/2 doesn't support scalable fonts out of the box (there's Adobe extension for Windows 2 that enables Type 1 fonts in some programs).

And yes, that's Word For Windows macros installer, fascinating stuff :)

@nina_kali_nina Do you see the fonts named 'Roman', 'Modern', or 'Script'?

You wouldn't believe (actually, you would) how hard these are to google.

Anyway they're a dumpster fire but they totally work … if you are into non-intersecting polygons. This is when Adobe Type Manager was hella expensive, and TrueType was a liberating dream coming soon, from two enemies joining forces f.f.s.finally.

BTW, yes this screenshot is from Windows 3.0 Runtime (or something like that … CONTROL.EXE not found haha) but they are the fonts that Windows 3 inherited, I swear

#Windows2 #Windows3 #outlinefonts #Modern #Roman #Script

@nina_kali_nina That @ sign is not so much a circle, as a hexadecagon

I even found curly quotes! Singular quotes, though. Very hard, you needed to remember 0145 and 0146, which of course I do

#Windows2

@nina_kali_nina by the way ...

the work that went into joining lowercase characters in Script font was INSANE

The curriculum had this until nearly 1990 at which point "cursive joining" was less of a mandatory thing … actually on second thoughts there's a few differences, because we had a "p" that looked like an "h" so to allow the carryon line to join. And their "h" and "l" have loops in it.

But the 'w' and 'u' and 'v' — the real head-busters when you saw them all joined together — those look EXACTLY the same as what we did. If you know what to look for, there's a minimal viable difference: I typed fffsmnwuvvv

#typology #cursive #fonts #script #1980s #handwriting #vector #windows2

@whophd fwiw my default writing is cursive. I used to use Russian cursive (which, I believe, is still the default handwriting style in Russia), but it maps poorly into English, so I learned French Ronde, and eventually merged the two together into one. Cursive is so much faster to write.
@nina_kali_nina Russian (cyrrilic?) cursive is a nerdswipe I wanna do now

@nina_kali_nina finishing off my research for 2025, to publish in one place:

- these were the only scalable fonts before TrueType in Windows 3.1 and free unlike ATM (Adobe Type Manager) using PostScript

- these #fonts were known as:
#outline
#scalable
#plotter
#vector or Vector Font File Format
#CONTINUOUSSCALING
"(All res)" in Windows registry

- came as
MODERN.FON
ROMAN.FON
SCRIPT.FON

- shared the .FON extension with bitmapped fonts, but not the .FNT extension, and #FNT can contain multiple #FON … which apparently had executable code … and were renamed .EXE files … ?? … holy attack surface, Batman!

- FNT follows KB65123

- apparently a utility called FNT2FON could create new ones … and here are all the ones from a "Hershey" collection in 1997: https://github.com/fontforge/fontforge/files/3450898/Hershey_FONs.zip

- great information here: https://github.com/fontforge/fontforge/issues/3841

- the Windows 1.03 SDK Programmer's Reference explains:

C.2.2 Vector Font File Format
The header information for a vector font file is as described in Section C.2, "Font File Formats."This section describes some additional information for vector font files.
The CharOffset field is used to specify the location and usage of the character strokes in the bitmap area. For fixed-pitch fonts, each two-byte entry is an offset from the start of the bitmap to the beginning of the strokes for the character. For variable-pitch fonts, each four-byte entry consists of two bytes giving the offset (as for fixed-pitch) and two bytes giving the width of the character.
For both fixed- and variable- pitch fonts, the bitmap area is the same. Each character is composed of a series of vectors consisting of a pair of signed relative coordinate pairs starting from the character cell origin. Each pair may be preceded by a special value indicating that the next coordinate is to be a pen-up move. The special pen-up value depends on how the coordinates are stored. For one-byte quantities, it is -128 (080H) and for two-byte quantities, it is -32768 (08000H). The character cell origin must be at the upper left corner of the cell so that the character hangs down and to the right of where it is placed.

The storage format for the coordinates depends on the size of the font. If either dfPixHeight or dfMax Width is greater than 128, the coordinates are stored as 2-byte quantities; otherwise, they are stored as 1-byte quantities.