Hacker News new | past | comments | ask | show | jobs | submit login
Fonts extracted from BIOSes and VGA ROMs (github.com)
245 points by luu 11 days ago | hide | past | web | favorite | 65 comments

Over the past few weeks, I've been setting all my command prompts and terminal emulators to old-school fonts. I've settled on PxPlus IBM VGA8[0] with color #FFB000 (monochrome amber) on black. If font antialiasing blurs things, I use Nouveau IBM[1].

[0] https://int10h.org/oldschool-pc-fonts/fontlist/#ibmvgamcga

[1] https://www.dafont.com/nouveau-ibm.font

For years now I've set the font in various IDEs and terminals to Px437 ATI 9x16 at font size 16 from int10h as well: https://int10h.org/oldschool-pc-fonts/fontlist/#ati_gfx I love the pixel perfect goodness.

Same. It’s very comforting to be using that font.

Reminds me of Space Quest.

A website dedicated to Int 10h?! That’s beautiful!

From the nice article this little hint about a (possible) problem with Qemu:

"qemu seabios 8x8 and 8x14 are exact matches to IBM's VGA and XGA fonts. These files are in fntcol16.zip from simtel. VGA-ROM.F08 and VGA-ROM.F14. qemu source comment claims this is public domain. I doubt IBM would release a font to public domain. Does this mean, qemu relied on claims by package creator and now they use a illegal copy?"

Bitmap fonts may not be copyrightable (in the US at least) due to a quirk of copyright law:


> Generally, copyright law in the U.S. does not protect typefaces.

> Fonts may be protected as long as the font qualifies as computer software or a program (and in fact, most fonts are programs or software).

> Bitmapped fonts are considered to be computerized representations of a typeface (and are not protected by copyright law).

> On the other hand, scalable fonts (because they are incorporated as part of a program or software) are protected by copyright.

This would explain why that 8-bit arcade font (it's in numerous Namco and Atari games) that's everywhere in 70's and 80's arcade games was everywhere.

I thought the same, but this book [0] absolutely staggered me by the creative ways people made 8 by 8 fonts

[0]: https://www.amazon.co.uk/Arcade-Game-Typography-Pixel-Type/d...

I used to sketch 8x8 bitmap fonts on graph paper using circles four to a square when I was in junior high. I spent a lot of time trying different combinations.

Well also there aren't that many ways to make a legible font using 8x8 (actually less, for spacing) pixels :-P

That font has some unique characteristics (such as the lopsided S and 8). It's not like the Signetics based font from Apple I/II which is very basic, for example.

Also if you look at all the ways letters and numbers have been drawn in C-64, NES, Genesis, and SNES games; there's lots of room for creativity and design even in an 8x8 space.

FWIW, the reason all of the vertical elements in the C-64 font are two pixels wide is to compensate for raster blur on televisions that were common at the time.

If you made a vertical line only one pixel wide, on many televisions like the Panasonic I used it would be nearly impossible to see.

And while color monitors of the day were an improvement, they still weren't what we would consider acceptable today. I eventually upgraded to a Commodore CM-141, and single pixel vertical lines still weren't great.

I made an 8x8 font that was inspired by Broadway [1] and it ended up in most of the company's video gaming machines back in the 80's.

[1] https://en.wikipedia.org/wiki/Broadway_(typeface)

Don't leave us hanging! Tell us more, which games, which company?

While not public domain and not relevant to the specific issue at hand, IBM Plex is a font released by IBM as open source and under a very permissive license.

It's also quite nice.

I don't think font geometries are copyrightable, only names.

In any case, the IBM PC fonts are horrendous. They should have gone with the sans-serif they used in their mainframe terminals.

Genuinely curious!

Are you talking about AFP fonts[1]? In that case Sonoran Sans Serif[2]? Then you should probably be happy with Arial[3]. Fun story[4].

Or are you talking about a 3270 font? Then you should have a look at 3270font[5]

[1] https://www-01.ibm.com/servers/resourcelink/svc00100.nsf/pag...

[2] https://www-01.ibm.com/common/ssi/cgi-bin/ssialias?subtype=c...

[3] https://en.wikipedia.org/wiki/Arial

[4] http://idsgn.org/posts/sonoran-the-hidden-truths/

[5] https://github.com/rbanffy/3270font

...and then I saw the username i was responding to. I'll post anyway if you do not want to toot your own horn. Nice work!

Thank you. I'm partial for that certain modern sans-serif look, as you may have guessed.

BTW, that IBM bundles Arial with their mainframes is outrageous. If you are paying more than a million dollars for a machine, you should be getting proper Helvetica.

Honestly, I would find it extremely limiting if someone was able to copyright 1664 bits of information. Bitmap 8x8 fonts are absolutely trivial. In one afternoon anyone could make every human readable variation.

Thinking on it: 1664 bits is 26 * 8 * 8, which is a little low. ASCII uses indices 32 to 127 for visible characters, so this would be 95 * 8 * 8, or 6080 bits. It's still a trivially small amount of information and there are very few ways to make unique English fonts out of it, so I still don't think it should be possible to copyright it.

Looking at the actual IBM_VGA_8x8.bin file: the file size is 1024 bytes (8192 bits). I calculated the entropy of the data to be only 638 bits of information.

MATLAB code:

  fid = fopen('IBM_PC_BIOS_1981-04-24_HALF_8x8.bin','r');
  ibmVga = fread(fid);
  p = histogram(double(ibmVga),255);
  E = -sum(log2(p.Values(p.Values > 0)).*log2(p.Values(p.Values > 0)));

So I went on a bit of a rabbit hole on this one. The above code is wrong. I have since fixed it. It's the same idea with some added terms to normalize for data size.

Word size matters when calculating entropy. Calculating entropy on this file using 2 to 64 bits nets a minimum information of 860 bits using a 64 bit word size. Moving past a 64 bit word size requires rethinking some things. MATLAB doesn't have great support for data sizes greater than 64 bits (and I'm certain the performance impact would be great).

  words = double(unique(X))';
  binEdges = [words-0.5; words+0.5];
  binEdges = unique(binEdges(:));
  P = histcounts(X, binEdges) / M;
  P(P == 0) = [];
  M = numel(X);
  H = -sum(P .* log(P) ./ log(max([nBits, 2]))) / nBits * log2(max([nBits, 2]));
  E = H * M * nBits;

Counterpoint, 2^638 is a large number. So a particular 638 bits is very particular.

This is meaningless. Information is information. Specifying a size has virtually no information. The number "638" stored in uint16 has two bits of information using any word size between 8 and 15 bits.

128 bits a reasonable bound for "nontrivial information" (information you'd never arrive at by guessing). 1664 bits is enough to write a short poem.

However I don't think a 1664 bits is an accurate count. You must subtract the information provided by knowing it represents the alphabet, which constrains the number of possibilities to only a few choices per letter - say 2 or 3 bits at most. So a 64-character alphabet is right on the edge of "reasonably nontrivial", due entirely down to the combinatorial complexity of choosing which glyph to use in each case. A single glyph should not be copyrightable.

The size of the work doesn't matter. What matters is what it is. This comment is protected by copyright and is 1048 bits of UTF-8.

Names of things can be protected by trademark, not by copyright.

re: copyright-ability of fonts. That's a muddy area. The visual representation of the font cannot be copyrighted. I can make a font that looks like yours with no copyright concern. If I copy the code that creates the visual representation (i.e. the binary definition of the font) that may be a concern. That could be considered program code (particularly for vector fonts, but I could see an attorney trying to argue that for bitmaps, similar to assets for a game), which is protected by copyright.

As a bitmap, there is only one possible representation for that geometry at that given size, so I'd assume it's not possible to protect it.

It is my understanding that typeface hint systems such as those in Adobe Type 1 and TrueType are "programs" for the purposes of copyright law. But I'm not a lawyer, and I would be interested to hear expert opinions. It used to be my interest to deal with typeface hints.

perhaps they thought the serifs would be better suited for word processing

Oh, wow, I haven't thought about simtel in decades. wsmr-simtel20.army.mil. That's a blast from the past.

Incidentally, the font images ([1]) should be usable as Dwarf Fortress tilesets [2] with very little work (just change the background color from black to transparent).

[1] https://github.com/spacerace/romfont/tree/master/font-images

[2] http://dwarffortresswiki.org/index.php/DF2014:Tilesets

I don’t know why but I love VGA text mode fonts. This project is awesome.

Are there pictures of the fonts? I didn’t see any.

My first computer was a Commodore64. My only real complaint at the time was how the "!" was displayed. It was a straight line with a square dot. It felt incomplete somehow and IIRC looked too much like another character (can't remember which one, maybe "i"??).

Then I got my first VGA output with a 386.

The exclamation mark was now curvy and sexy! Thick at the top, curving down to a point, finished with a round dot. I thought everything was right in the world.

I miss that font.

I've tried reusing bitmapped fonts that give me my desired output but I find it just doesn't work in enough places that it's too annoying. Maybe it messes up curses output, or UTF-8 incompatibilities?

You have to give Commodore (or whoever designed that font) some slack.

VGA (in typically used character modes) had more bits per character, and its fonts didn’t have to be designed to be legible when displayed on a television set (screen not designed for text display, and signal converted to antenna signal and back)

Also, are you sure about that “round dot”? https://github.com/spacerace/romfont/blob/master/font-images... doesn’t show it, and any non-squareness would require a width of at least 3 pixels (more likely 4) to draw.

I guess I was wrong about the dot. But I also remember the taper on the exclamation mark being finer and less blocky. Obviously I remember through rose coloured glasses. Wolfenstien3D didn't look as bad as modern screenshots show either! =)

I don't doubt the C64 designers did the best with what they could; but I was absolutely impressed with how good the "!" looked on that VGA screen.

My only real complaint at the time was how the "!" was displayed

Then you must have missed the atrocity that was the Commodore's @ symbol.

None of the early computers did a good job with it. I remember the Tandy machines were particularly bad.

The top and bottom halves of the CGA X character was not symmetric. It's so ugly I can picture it in my head.

If you've spent a decade looking at VGA screens, its font will be intensely legible to you, regardless how objectively terrible they definitely are. Our ability to read is pattern recognition, and if your brain's neural network is well trained for the VGA text font, it makes sense that you might love them.

Heck—if you spent years reading your terminal upside down, you'd get very good at that too. Eventually you might get nostalgic for it.

VGA monospaced text always looked kind of exotic to me, because I started out looking mainly at the Amiga's Topaz font. Before that, the TRS-80 font, which also seems to have been quite different. And after that, the Macintosh's Monaco and Courier. I always hated Windows Courier New and much prefer Consolas. My favorite is, or was, Computer Modern Typewriter.


For those who are interested, how the fonts are stored/accessed:


And some related info on bitmap VGA fonts (used in DOS and in grub4dos), paticularly the 8x16 sizes:


Isn't this missing the 9x16 font that was the actual VGA text mode default? That variant allowed a few characters to be slightly wider and cleaner (noticeable on W, M, and X).

Sadly I just sold an old z80 sign making device from long ago and it had about 10 add on rom font cartridges. Would have been good to give them to this guy.

Dmitry Bolkhovityanov has led an effort to extend the VGA BIOS font to cover much more unicode space: http://www.inp.nsk.su/~bolkhov/files/fonts/univga/index.html

I've made upscaled versions for high-density displays and a truetype version, with contributed postscript: http://sciops.net/downloads/vga/

Worth mentioning in UNSCII, an oldschool bitmap font inspired unicode graphics and drawing font


It's a tedious, manual process, but I have used https://fontstruct.com/ to make TTF fonts from bitmap fonts before.

There was a post just recently on this topic: https://news.ycombinator.com/item?id=23129434

If the Fontstruct thing is better or easier, the author might benefit from a pointer to it.

Also it was mentioned that the https://int10h.org site has its own article on the method they used, but I can't find the link now.

Every time old fonts come up, I have to mention Cool Retro Term:


Sorry for the music in this video, but cool-retro-term really is a thing of beauty:


Btw, the proper use for that app is firing it up on someone's laptop in full-screen if they leave the machine unlocked.

Also iirc the authors went to some lengths to accurately simulate the effects of phosphor—which is also a topic in game emulation (in the spirit of https://pics.me.me/what-indie-developers-think-what-retro-ga...).

Have you tried Bits'n'Picas?

No I haven't. Is it good?

I assume if you want good results actually using these today, you need to be careful to select a VGA font that was originally on square pixels. Is there an easy way to tell which those are?

I would love to have a console with vector fonts.

like real vector fonts, like those found in old arcade games like Omega Race


it would look like this:


Can these be used on macOS in some way? Like in iTerm or some such?

You'd have to convert them, but you could try a truetype version available here: https://int10h.org/oldschool-pc-fonts/readme/#px437

Oh boy that's fantastic, thanks for the pointer!

This is really cool! When I was in college in the early 90s I used an IBM AIX machine in terminal mode, and it had what seemed at the time to be a really crystal clear serif font. I suspect that it was antialiased, but am not sure. I would really love to find that font somewhere. If anyone knows what it was, I'd love to learn more about it.

I remember looking/using at the different non-PC terminals decades ago, produced by different companies, which had significantly nicer fonts than any PC fonts I watched later.

Of course, it's not only the font, but the whole technology (analog devices have analog responses etc). But some looked really nice.

Is there any resource with non-PC terminal fonts?

Get the TTF version of the IBM 3270 fonts (Google 3270 TTF github) and copy the TTF files into ~/.fonts (or whatever method you use in your OS).

I have a similar collection of fonts that I use in presentations. I like to use the old school VGA fonts for emphasis on chunks of code.

It draws the eye and usually I get at least one person commenting on the nostalgia factor of the font, which means they will remember that part of the presentation.

a clade diagram of these would be fascinating.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact