More Font Updates: Oldschool PC Pack, Flexi IBM VGA

This blog was never meant to concern itself quite this much with fonts.  But with other projects being on ice for various boring reasons, you could do worse than moonlight as a typographer, as long as you do it a safe distance away from a real typographer.

New Oldschool PC Font Pack (x2)

Since my last post about this, I've made two quick updates to the collection.  Taken together, both additions only bring you 92 new fonts this time, so you can ease back off the edge of your seats there.  That's what minor version increments are for, yes?


All details are in the change log as usual, but other than the new (old) stuff, another thing worth mentioning is the addition of bitmap fonts for Linux.  For these, I chose to go with the .otb format.  Unlike .bdf or .pcf, it shouldn't suffer from libpango's recent seizure of "let's make breaking changes to things that have worked for decades" (one thing that minor version increments should not do, by the by).

This bitmap format is a variant of OpenType, so it supports the exact same encodings that the outline fonts do, including the expanded 'Plus' charsets.  The .otb fonts seem to work fine although I haven't tested them too thoroughly, but that's where you people come in - if they're giving you problems, feel free to let me know.

Here's a roundup of the new stuff:

Ultimate Oldschool Font Pack v2.1+2.2 - new fonts

Some of the new fonts were less than straightforward to convert.  For instance, HP's 100LX/200LX palmtops include selectable code pages in ROM, and can zoom into the text-mode screen, yielding virtual "windows" with different font sizes.  Digital's Rainbow 100 does hardware 'dot-stretching', so every "on" pixel in the ROM character bitmap also lights up the one to its right.  The HP 150 not only performs non-integer dot-stretching, but also enhances its horizontal resolution by allowing individual lines of a character's bitmap to be shifted half a pixel to the right.

In cases like these, I had to dig a little deeper into how the firmware and hardware do their things.  As always, I've tried to distill those findings into the little blurbs you see in the Font Index about each machine and its technical capabilities, at least in the video department.

And on that front, you may ask yourselves: why bother with all these technical tidbits in the first place?

To me, a collection like this needs historical context, otherwise it doesn't serve much of a purpose other than "retro aesthetics".  I initially assumed that the target audience would be those with an interest in these older technologies, the sort of folks who'd find value in such details; but contrary to my expectations, there's been more feedback and discussion coming from people who simply appreciate good crisp bitmap fonts for programming, or have a fondness for the previously mentioned aesthetic.

That's not a bad thing, mind you: as I put it in the collection's "mission statement", one of my goals was to put these IBM PC-related charsets out there and give them a little recognition, since the ones from other oldschool home computers are already considered somewhat iconic.  If they're getting acknowledged on this level, then I guess it's working.

Still, I don't know what the audience for this collection is really like.  I don't do Twitter/FB/Reddit/Discord/etc., since I enjoy my normal blood pressure thank you, so I don't have lots of direct interaction with the people who actually use this stuff, other than emails and the comments here.  So if any of you feels like enlightening me a bit - what kind of value you find in a collection like this, what appeals to you in this sort of stuff, whether you think that the "historical context" has a point, and so on - feel free to post a reply here.

Flexi IBM VGA, v2.0

Since I was already on a roll with the font stuff, I also revisited my scalable, 'de-pixelated' outline adaptation of the good ol' default VGA font.  The first version was based on the results of scaling and tracing algorithms, so it was far from perfect: there were overly rounded corners that should look sharper, straight lines that should be rounded curves, weird bumps instead of serifs, and so on.

A little sample of the improvements in v2 (pixel grid in blue)

A little sample of the improvements in v2 (original pixel grid in blue)

So this time I went ahead and did the glyphs manually, from scratch.  I'd say the result captures the perceptual forms of the original characters more faithfully, and also just looks plain better, especially at larger sizes.  (Yes, the corners still aren't exactly 100% sharp, but it's not as if they were originally that sharp on a CRT.  And if you actually look at the specimen below, it's not really that noticeable anyway.)


Like the previous version, you get 4 variants:

  • Flexi IBM VGA True:        Corrected aspect ratio, extended character set
  • Flexi IBM VGA True (437):  Corrected aspect ratio, CP437/DOS encoding
  • Flexi IBM VGA False:       Uncorrected aspect ratio, extended character set
  • Flexi IBM VGA False (437): Uncorrected aspect ratio, CP437/DOS encoding

 

Flexi IBM VGA (v2) font specimen

18 comments:

Blackcrack says:

Hi VILeR,

btw, woff2 exist also.. could you ?

and ... could you maybe make a install pack with ttf-px and fon-bm as setup-package with a silent switch for Systeminstall oem sub-installs or so to have all nice fonts inside of the systemfonts in one slip for WinNT XP/10 ?

and if you make it, don't forget to tell the peoples to exist by the
"VILeRs-uof-setup.exe" (or so g) "an unattended install silent switch is "/silent" or "/s" !"
or what ever you want ;)))))
(btw, exist a linuxinstaller for root also or a rpm/deb file ? vbg)
I could bathe in it..! thick fat big thank you
:)
best regards
Blacky

VileR says:

Hm, is .woff2 more compatible/widely-supported than .woff?  The collection probably has enough different formats already, so I'd rather have just one set of webfonts in the most "universal" format.

I did plan to add some kind of installer at some point... wanted to look into NSIS (for Windows) but never really found the time.  For Linux it probably varies between distros, but I guess that's what all those package managers are for.

rere says:

Hello, thanks for your awesome work :)
I noticed the link for Flexi font v2 is broken, would you please update it? I would love to try this one
best regards

VileR says:

Do you mean the .zip download link?  Works fine here.  The filename had a silly typo, but the URL had it too so that wasn't the problem.  I fixed that one anyway (and verified that the new link is good), so try again now.

If it still doesn't work for you, maybe something at your ISP or in your browser is blocking it for some strange reason.

rere says:

Yes, i had a "302 redirected" when i tried to download the zip but it seems to be working now. Thanks

Ian says:

Flexi IBM v2 is ABSOLUTELY beautiful!

Hue says:

I've been using a MxPlus font in cygwin (and adding characters sometimes). Playing nethack was driving me a little nuts, though, the box drawing characters didn't look quite right and it took me forever to figure out why. Long story short, mintty (3.5.0) was scaling the box-drawing glyphs (raster versions) to reach across a row spacing gap. Adding the following line in ~/.minttyrc fixed it:
RowSpacing=-2

I hadn't noticed the Flexi font until today! excellent work ☻

mattfromeurope says:

I want to say that your font pack is absolutely stunning! Also, you did a great job with the Flexi font. It's actually my favorite font to date, since I fondly remember from my DOS days and no monospace font I found so far could beat it.

That's where my question comes in: Is it possible for you to add an Italic, Bold / Slim (depending on what works better) and - if possible - Nerd Font variant? It's absolutely OK if that will take time, I mean you provide these fonts for free! It's just that these things are the only things I miss in order to use Flexi IBM VGA in Emacs, Terminal emulators etc. Love your work, and thank you for helping a guy in his late 30s bathe in nostalgia ;)

Jerry says:

Hi VileR, just want to say a huge thank you for the fonts - they are the fonts I loved in the past 30 years and I now know I can see them everyday in the future too!

tony says:

Hi thank u for the fonts Im doing an after effects project and animating them to an aphex twin song :) for school

j.eng says:

I have an automatic flexi vectorizer; cf. inai.de/projects/consoleet . On that note, I notice some bugs in fontpack v2.2, e.g. unpopulated 9th columns in 9x16 fonts' U+2593/U+25D9 (but U+2588 is ok?!). The glyphs also have an unusual vertical positioning, with a gap at the ascender height, and reaching below the descender line. Reach out if you want to discuss. Thanks! (Keep in mind Googlemail's awkward spam detection on your side.)

VileR says:

@j.eng: I see that you've already noted that on your page, but yes, the 9th pixel column is populated only for 'Line Graphics' characters located at 0xC0 through 0xDF in code page 437, as with the original hardware.

As for vertical positioning: does that apply to all included fonts, or only to specific sizes? If it's the latter, that may be the result of glyph sizes being rounded up to multiples of 4 pixels; but the vertical metrics of the fonts have been adjusted to compensate, so the gaps shouldn't actually be visible (see https://int10h.org/oldschool-pc-fonts/readme/#optimal_sizes).

j.eng says:

I should have been clearer indeed. So there are two separate issues.

0. The vector/outline forms are a-ok, and I can relate to the desire for the x4 roundup. The issues I encountered are with the bitmaps in Bm/Mx (and possibly other formats).

1. Some fonts have their bitmap bbox larger than necessary. This is likely a side-effect of autogenerating bitmaps from the vector glyphs (and their x4-roundup), e.g. with ibmega9x14 https://paste.opensuse.org/31815473 . Possible cure: edit bitmap bbox numbers after autogeneration, redeclare pixelsize as 14.

2. Some fonts have their bitmap glyphs not positioned properly within the bitmap bbox, for example ibmvga9x16: https://paste.opensuse.org/65404058 . If I let Fontforge generate bitmaps from scratch, I don't get this mispositioning, so it's conceivable the font program you used may have made a mistake.

Hi,
please take a look at several beautiful bitmap 8x16, 8x14 fonts that I used in DOS times.
My wish is these fonts to be included in your superb collection.
Can you share how e.g. 4096 bytes font file can be converted to .TTF?
Back then I wrote KAZUMA.COM (.ASM included) keyboard/font resident tool, it was awesome.
You can download it:
https://qb64forum.alephc.xyz/index.php?topic=3518.msg128467#msg128467

VileR says:

@Sanmayce: This collection covers hardware/firmware fonts (and some OS-specific ones), so resident custom fonts would be out of scope, although I'd be happy to include them in my collection of text mode fonts (https://github.com/viler-int10h/vga-text-mode-fonts).

The key to convert bitmap fonts to .TTF (outline) fonts is to vectorize them. Usually you'll need them in some intermediate bitmap format to start with, like .png or .bdf. I use Bits'n'Picas to convert these to outline versions, but there's also Consoleet-utiles. At least in the first case you'll also have to fix the character code points with something like FontForge.

Nazo says:

I truly love this font more than I can really say. I put it in pretty much anything I can. I do think maybe I still like the older one better though. The newer one is just a bit thicker and to my eyes the older one just feels sharper and cleaner or something. Either is still amazing for any sort of terminal application however.

Eerin says:

Hello, do you have dos 6x8 fonts.h somewhere to download? I need it for oled 128x64 display for full 256 chars. Maybe codepage 850 or 852 for euro (€) support?

static uint8_t font6x8 [][6] = {
...
{ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C}, // A
{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36}, // B
{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22}, // C
...

Thank you

VileR says:

@Eerin: I don't have anything exactly like that, but maybe the HP 100LX 6x8 font is a good starting point: it has CP437, and the 'Plus' charset has all the characters for CP850/852 including euro. You could take that and try a converter like monobit to get a raw binary, then a hexdump of that should get you close enough to this C format.

Or you can start with the binary fonts which already exist in this collection (the 100LX 6x8 font is at https://github.com/viler-int10h/vga-text-mode-fonts/blob/master/FONTS/PC-OTHER/HP-LX6L1.F08). But that format implicitly assumes 8 bits of data in each line of your glyph. If you need only 6, you'd likely have to transform the data (shift right by 2 bits?) depending on your actual code.

Write a response:

* Required.
Your email address will not be published.