Screen resolution

A project log for Melba I

Melba I is an implementation of the Apple I from parts in my collection.

Christian BjelleChristian Bjelle 05/22/2020 at 10:530 Comments

I want an authentic feel as far as possible, but I will draw the line at the video interface. While b&w CRT sets were commonly available in 1976 (ahh, those were the days...) now they are pretty rare. I will compromise and give my clone an interface to a modern screen. While the ultimate goal is a DVI or HDMI connector, the PoC will use VGA.

As a side benefit from using a modern screen, the Melba I can also support a couple of different themes; while-on-black, black-on-white, green-on-black and amber-on-black. Implementing amber on a VGA port is a bit more complicated than the others, since amber is a non-integer mix of R, G and B, so I won't test that in the PoC.

Screen resolution

The Apple I had a 40 characters wide and 24 lines tall display. The 64 characters were defined in a commonly available ROM, ("character generator") the Signetics 2513. This ROM contained the bitmaps of upper-case letters, digits and some punctuation. Notably lacking were |, { and }, wich would make writing C-code an interesting exercise. Adding a row of blank pixels between each character and an empty scanline between rows would give a smallest possible resolution of 240x192 pixels. While there are some graphical display modules available with that resolution, it would not look in any VESA resolution.

After some internal debate, I decided to scale the original font to a 7x9 size, that with the same character and line spacing would fit perfectly in 320x240 (Q-VGA), that is very easily upscaled to standard VGA.

I also tested to scale the font to VGA-size, but the 7x9 in an 8x10 matrix (Why do I get a Star Trek Voyager vibe here?) looked closest to the original.

For easy addressing, the characters are aligned on 16-byte boundaries, even though only 10 bytes are used for each character bitmap.