robhagemans / hoard-of-bitfonts

turns out I like bitmap fonts
Other
1.34k stars 51 forks source link

Datapoint 8600 ROM font #8

Closed Mecrisp closed 1 year ago

Mecrisp commented 1 year ago

I have a special addition to the collection, the ROM font of a Datapoint 8600 machine. I once took screenshots of it at the museum of computer history in Visselhövede, Germany, and after the machine finally broke down in 2022, I kindly asked the museum crew who disassembled the machine to look for possible repairs to read out the contents of its ROM chips. These contain an 8x12 bitmap font compatible with ASCII, but with the lowercase characters missing. If you think it is suitable for inclusion on your collection, I am happy to create a pull request.

08: --------
    --------
    --------
    ---##---
    --#-----
    -#######
    --#-----
    ---##---
    --------
    --------
    --------
    --------

18: --------
    --------
    --------
    ----##--
    ------#-
    -#######
    ------#-
    ----##--
    --------
    --------
    --------
    --------

20: --------
    --------
    --------
    --------
    --------
    --------
    --------
    --------
    --------
    --------
    --------
    --------

21: --------
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    --------
    ----#---
    ----#---
    --------
    --------

22: --------
    ---#--#-
    ---#--#-
    ---#--#-
    ---#--#-
    --------
    --------
    --------
    --------
    --------
    --------
    --------

23: --------
    --------
    ---#--#-
    ---#--#-
    --######
    ---#--#-
    ---#--#-
    --######
    ---#--#-
    ---#--#-
    --------
    --------

24: --------
    ----#---
    --#####-
    -#--#--#
    -#--#---
    --#####-
    ----#--#
    -#--#--#
    --#####-
    ----#---
    --------
    --------

25: --------
    --#----#
    -#-#---#
    --#---#-
    -----#--
    ----#---
    ---#----
    --#---#-
    -#---#-#
    -#----#-
    --------
    --------

26: --------
    ---##---
    --#--#--
    --#--#--
    --#-#---
    ---#----
    --#-#--#
    -#---##-
    -#---#--
    --###-##
    --------
    --------

27: --------
    ------#-
    -----##-
    ----##--
    ---##---
    ---#----
    --------
    --------
    --------
    --------
    --------
    --------

28: --------
    ----###-
    ---#----
    --#-----
    --#-----
    --#-----
    --#-----
    --#-----
    ---#----
    ----###-
    --------
    --------

29: --------
    --###---
    -----#--
    ------#-
    ------#-
    ------#-
    ------#-
    ------#-
    -----#--
    --###---
    --------
    --------

2A: --------
    --------
    ----#---
    --#-#-#-
    ---###--
    -#######
    ---###--
    --#-#-#-
    ----#---
    --------
    --------
    --------

2B: --------
    --------
    ----#---
    ----#---
    ----#---
    -#######
    ----#---
    ----#---
    ----#---
    --------
    --------
    --------

2C: --------
    --------
    --------
    --------
    --------
    --------
    ----##--
    ----##--
    -----#--
    ----#---
    --------
    --------

2D: --------
    --------
    --------
    --------
    --------
    --------
    -#######
    --------
    --------
    --------
    --------
    --------

2E: --------
    --------
    --------
    --------
    --------
    --------
    --------
    --------
    ----##--
    ----##--
    --------
    --------

2F: --------
    -------#
    -------#
    ------#-
    -----#--
    ----#---
    ---#----
    --#-----
    -#------
    -#------
    --------
    --------

30: --------
    ---####-
    --#----#
    --#---##
    --#--###
    --#-##-#
    --###--#
    --##---#
    --#----#
    ---####-
    --------
    --------

31: --------
    ----#---
    ---##---
    --#-#---
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    --#####-
    --------
    --------

32: --------
    ---####-
    --#----#
    --#----#
    -------#
    ------#-
    -----#--
    ----#---
    ---#----
    --######
    --------
    --------

33: --------
    ---####-
    --#----#
    -------#
    -------#
    ----###-
    -------#
    -------#
    --#----#
    ---####-
    --------
    --------

34: --------
    ------#-
    -----##-
    ----#-#-
    ---#--#-
    --#---#-
    --######
    ------#-
    ------#-
    ------#-
    --------
    --------

35: --------
    --######
    --#-----
    --#-----
    --#-----
    ---####-
    -------#
    -------#
    --#----#
    ---####-
    --------
    --------

36: --------
    ---####-
    --#----#
    --#-----
    --#-----
    --#####-
    --#----#
    --#----#
    --#----#
    ---####-
    --------
    --------

37: --------
    --######
    --#----#
    -------#
    -------#
    ------#-
    -----#--
    ----#---
    ----#---
    ----#---
    --------
    --------

38: --------
    ---####-
    --#----#
    --#----#
    --#----#
    ---####-
    --#----#
    --#----#
    --#----#
    ---####-
    --------
    --------

39: --------
    ---####-
    --#----#
    --#----#
    --#----#
    ---#####
    -------#
    -------#
    --#----#
    ---####-
    --------
    --------

3A: --------
    --------
    ----##--
    ----##--
    --------
    --------
    ----##--
    ----##--
    --------
    --------
    --------
    --------

3B: --------
    --------
    ----##--
    ----##--
    --------
    --------
    ----##--
    ----##--
    -----#--
    ----#---
    --------
    --------

3C: --------
    ------#-
    -----#--
    ----#---
    ---#----
    --#-----
    ---#----
    ----#---
    -----#--
    ------#-
    --------
    --------

3D: --------
    --------
    --------
    --------
    --######
    --------
    --------
    --######
    --------
    --------
    --------
    --------

3E: --------
    --#-----
    ---#----
    ----#---
    -----#--
    ------#-
    -----#--
    ----#---
    ---#----
    --#-----
    --------
    --------

3F: --------
    ---####-
    --#----#
    --#----#
    -------#
    -----##-
    ----#---
    ----#---
    --------
    ----#---
    --------
    --------

40: --------
    --#####-
    -#-----#
    -#---###
    -#--#--#
    -#--#--#
    -#---###
    -#------
    -#------
    --######
    --------
    --------

5B: --------
    --#####-
    --#-----
    --#-----
    --#-----
    --#-----
    --#-----
    --#-----
    --#-----
    --#####-
    --------
    --------

5C: --------
    -#------
    -#------
    --#-----
    ---#----
    ----#---
    -----#--
    ------#-
    -------#
    -------#
    --------
    --------

5D: --------
    --#####-
    ------#-
    ------#-
    ------#-
    ------#-
    ------#-
    ------#-
    ------#-
    --#####-
    --------
    --------

5E: --------
    --------
    --------
    --------
    --------
    --------
    ----#---
    ---#-#--
    --#---#-
    -#-----#
    --------
    --------

5F: --------
    --------
    --------
    --------
    --------
    --------
    --------
    --------
    --------
    -#######
    --------
    --------

60: --------
    ---#----
    ---##---
    ----##--
    -----##-
    ------#-
    --------
    --------
    --------
    --------
    --------
    --------

7B: --------
    ----###-
    ---#----
    ---#----
    ---#----
    --#-----
    ---#----
    ---#----
    ---#----
    ----###-
    --------
    --------

7C: --------
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    --------
    --------

7D: --------
    --###---
    -----#--
    -----#--
    -----#--
    ------#-
    -----#--
    -----#--
    -----#--
    --###---
    --------
    --------

7E: --------
    --------
    --------
    --------
    --------
    --##----
    -#--#--#
    -----##-
    --------
    --------
    --------
    --------

7F: --------
    ----#---
    ----#---
    ----#---
    -#--#--#
    -##-#-##
    -#--#--#
    ----#---
    ----#---
    ----#---
    --------
    --------

41: --------
    --#####-
    -#-----#
    -#-----#
    -#-----#
    -#######
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    --------
    --------

42: --------
    -######-
    -#-----#
    -#-----#
    -#-----#
    -######-
    -#-----#
    -#-----#
    -#-----#
    -######-
    --------
    --------

43: --------
    --#####-
    -#-----#
    -#------
    -#------
    -#------
    -#------
    -#------
    -#-----#
    --#####-
    --------
    --------

44: --------
    -#####--
    -#----#-
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    -#----#-
    -#####--
    --------
    --------

45: --------
    -#######
    -#------
    -#------
    -#------
    -######-
    -#------
    -#------
    -#------
    -#######
    --------
    --------

46: --------
    -#######
    -#------
    -#------
    -#------
    -######-
    -#------
    -#------
    -#------
    -#------
    --------
    --------

47: --------
    --#####-
    -#-----#
    -#------
    -#------
    -#---###
    -#-----#
    -#-----#
    -#-----#
    --#####-
    --------
    --------

48: --------
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    -#######
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    --------
    --------

49: --------
    --#####-
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    --#####-
    --------
    --------

4A: --------
    -----###
    ------#-
    ------#-
    ------#-
    ------#-
    ------#-
    -#----#-
    -#----#-
    --####--
    --------
    --------

4B: --------
    -#-----#
    -#----#-
    -#---#--
    -#--#---
    -#-#----
    -##-#---
    -#---#--
    -#----#-
    -#-----#
    --------
    --------

4C: --------
    -#------
    -#------
    -#------
    -#------
    -#------
    -#------
    -#------
    -#------
    -#######
    --------
    --------

4D: --------
    -#-----#
    -##---##
    -#-#-#-#
    -#--#--#
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    --------
    --------

4E: --------
    -#-----#
    -##----#
    -##----#
    -#-#---#
    -#--#--#
    -#---#-#
    -#----##
    -#----##
    -#-----#
    --------
    --------

4F: --------
    ---###--
    --#---#-
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    --#---#-
    ---###--
    --------
    --------

50: --------
    -######-
    -#-----#
    -#-----#
    -#-----#
    -######-
    -#------
    -#------
    -#------
    -#------
    --------
    --------

51: --------
    --#####-
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    -#---#-#
    -#---#-#
    -#----#-
    --####-#
    --------
    --------

52: --------
    -######-
    -#-----#
    -#-----#
    -#-----#
    -######-
    -#--#---
    -#---#--
    -#----#-
    -#-----#
    --------
    --------

53: --------
    --#####-
    -#-----#
    -#------
    -#------
    --#####-
    -------#
    -------#
    -#-----#
    --#####-
    --------
    --------

54: --------
    -#######
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    --------
    --------

55: --------
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    --#####-
    --------
    --------

56: --------
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    --#---#-
    ---#-#--
    ----#---
    --------
    --------

57: --------
    -#-----#
    -#-----#
    -#-----#
    -#-----#
    -#--#--#
    -#--#--#
    -#-#-#-#
    -##---##
    -#-----#
    --------
    --------

58: --------
    -#-----#
    -#-----#
    --#---#-
    ---#-#--
    ----#---
    ---#-#--
    --#---#-
    -#-----#
    -#-----#
    --------
    --------

59: --------
    -#-----#
    -#-----#
    --#---#-
    ---#-#--
    ----#---
    ----#---
    ----#---
    ----#---
    ----#---
    --------
    --------

5A: --------
    -#######
    -------#
    ------#-
    -----#--
    ----#---
    ---#----
    --#-----
    -#------
    -#######
    --------
    --------

01: --------
    --------
    --------
    ------#-
    -----##-
    ----###-
    ---####-
    --#####-
    -######-
    #######-
    --------
    --------

02: --------
    --------
    --------
    --------
    --------
    --------
    --------
    --------
    ----####
    --------
    --------
    --------

The format of the bitmap data in the ROM image is a special snowflake and can be extracted with this Pascal source code:

{ -----------------------------------------------------------------------------

  A small tool to extract 8x12 bitmap fonts from
  Datapoint 8600 CP/RIM card ROMs

  Compile with the Freepascal Compiler: fpc datapoint-8x12.pas

  Usage: datapoint-8x12 905-008-1.bin Datapoint-8600.draw

----------------------------------------------------------------------------- }

{

This tool designed to extract the font data from the ROM contents of
a Datapoint 8600 machine. Font data is not directly mapped as a character
generator but is read by the "bios" of the machine and stored into the actual
character RAM area. The font is a 8x12 font, but only uppercase characters
were available, with the lowercase characters later loaded by the operating
system (RMS 2.8.J).

The font data is organised as nine bytes for each charater, with the MSB
of these data bytes always 0 for inter-character spacing. Therefore, data exists
for 7x9 bitmaps. Three empty lines are added when loading this font, one line on
top and two lines at the bottom as seen when comparing with the cursor in
the screenshot of the date/time prompt which has all twelve lines set.

Bytes with MSB set denote the place in the character table (when masked with $7F).
Then nine bytes of graphics data follow.

When no place-in-the-character-table byte appears, continue with the next place.

Note that the shape of "," on the screenshot with lowercase letters differs
from the data in the ROM, so this might be a completely different font for which
unfortunately no further data exists.

}

uses sysutils;

function byte2hex(zahl : byte) : string;
const
    hexa : array [0..15] of char = '0123456789ABCDEF';
begin
  byte2hex := hexa[zahl shr 4] + hexa[zahl and 15];
end;

function byte2str(c : byte) : string;
var h : string = '';
var i : integer;
begin
  for i := 7 downto 0 do
  begin
    if (c shr i) and 1 = 1 then h := h + '#' else h := h + '-';
  end;
  byte2str := h;
end;

var binary : file of byte;
    fontfile : text;
    i, k : integer;
    character : array[1..9] of byte;
    asciioffset : integer = 0;

begin
  assign(binary, paramstr(1));
  reset(binary);

  assign(fontfile, paramstr(2));
  rewrite(fontfile);

  seek(binary, $10AF);

  for k := 0 to 73 do
  begin
    read(binary, character[1]);

    if (character[1] and $80) = $80 then
    begin
      asciioffset := character[1] and $7F;
      read(binary, character[1]);
    end;

    for i := 2 to 9 do read(binary, character[i]);

    write(fontfile, byte2hex(asciioffset), ':');

                       writeln(fontfile, #9, byte2str(0));
    for i := 1 to 9 do writeln(fontfile, #9, byte2str(character[i]));
                       writeln(fontfile, #9, byte2str(0));
                       writeln(fontfile, #9, byte2str(0));

    writeln(fontfile);
    inc(asciioffset);
  end;

  close(fontfile);
  close(binary);
end.
Mecrisp commented 1 year ago

DSC_0287 DSC_0291 DSC_0285

Mecrisp commented 1 year ago

ROM images available here: mecrisp.sourceforge.net/Datapoint/905-007-1.bin mecrisp.sourceforge.net/Datapoint/905-008-1.bin

Mecrisp commented 1 year ago

View of the complete machine: DSC_0299

robhagemans commented 1 year ago

This is great! I'll happily merge a pull request. Alternatively I can add the font myself based on the hexdraw you posted, but it might take a bit longer.

Mecrisp commented 1 year ago

Thank you! You have a great collection, I love it.

Mecrisp commented 1 year ago

Thanks for your efforts!