robhagemans / hoard-of-bitfonts Goto Github PK
View Code? Open in Web Editor NEWturns out I like bitmap fonts
License: Other
turns out I like bitmap fonts
License: Other
Adding the following property to images would avoid unwanted resampling from the previews
image-rendering: crisp-edges;
https://caniuse.com/css-crisp-edges
please add space char in dec/custom-vt320 ...
There seems to be an off-by-two (rows) error in msx_kr.draw. This is most obvious looking at entry 0d which appears to be a capital X, but the last two rows ended up in entry 0e. I am pretty sure this error applies to every single character in the font.
Hi,
if you're interested, attached are two bitmap fonts used on a very large familiy of HP logic analyzers of the 90's. They run X11 and use these fonts directly, which one would need to copy at the 'server' end when using a remote X session to control these machines.
I think I spotted a missing pixel in box character ┤. If this was a thing, I would've seen discontinuous boxes in dos when I had my EGA computer. Do you have any verifiable source for this font?
This font seems to have lost its K
. Missing in both the yaff
and png
, so maybe a glitch in the source that it came from.
(no biggie for me, just browsing and probably won't use this font... just letting you know)
Fonts like https://github.com/robhagemans/hoard-of-bitfonts/blob/174f3384cbdf72d77b621944bd69f6623d09ee79/windows/windows-3.1/Terminal_EGA80_cp850.yaff are not Windows fonts, yet they are categorized under 'Windows'.
They're at best DOS fonts, but actually they're stored in BIOS ROM, and optionally overridden by code page files in DOS. Windows, up to 3.11, was an 'application' that runs on DOS, and iirc, doesn't even show the DOS fonts graphically.
Fonts stored in the BIOS were most often (in the west at least) IBM fonts.
Could you please write a few words about the yaff format in the README?
This font is extracted from a ROM dump, Rev 2.00 (datecode 03/1989), of an HP 4195A network/spectrum analyzer.
Characters 0x20-0x7F are essentially ASCII. 00-0x1F are special characters; many are simply empty space.
The ROM uses a lookup table which maps all these unused characters to the same "space" bitmap.
In addition, they are drawn LSB-to-MSB which made it necessary to mirror the whole font.
https://www.lyonlabs.org/commodore/onrequest/geos/geos-fonts.html
There is a link in there under 'explore it' to here:
https://www.lyonlabs.org/geofont/
I have no idea about the legality of the undertaking, but OpenType has dedicated tables for bitmaps, allowing for lossless conversion from bitmap font to modern OpenType font. It would be super cool to convert all of these fonts so that they can be used by any modern type system again.
Since few people know the name "Kyocera Kyotronic-85", but the "TRS-80 Model 100" is well known, it would be good if trs-80/README.md had a pointer to the kyotronic.yaff file. It could say something like,
Note that font used in the TRS-80 Model 100 is the same as the kyotronic-85 font. Likewise, see the kyotronic directory for the font used in the Tandy 200 and Tandy 102 and the TRS-80 Disk/Video Interface 40-column and 80-column font.
Additionally, it would be a nice touch if the files would appear to also be in the trs-80 directory. GitHub handles symlinks, so it should be as simple as:
cd trs-80
ln -s ../kyotronic/kyotronic-85.yaff trs80-model100.yaff
ln -s ../kyotronic/tandy-200.yaff
ln -s ../kyotronic/trs80-dvi-7x8.yaff
ln -s ../kyotronic/trs80-dvi-8x8.yaff
ln -s tandy-200.yaff tandy-102.yaff
git add *
git commit -m "TRS-80 portables are variants of the Kyocera Kyotronic-85"
So, I was reading through Steve Ciarcia's "Build Your Own Z80 Computer" from 1981 and came across a datasheet in Appendix C9 which has a font that I do not believe is in the hoard, yet.
The 7x11 font used in the ZAP 80 computer was generated by a chip called the Standard Microsystems Corporation's CRT 8002 Video Display Attributes Controller / Video Generator.
When I looked up the CRT8002 online, I found that the chip was available in a few variants: 5x7, ASCII, thin, and Katakana as can be seen here: https://rocelec.widen.net/view/pdf/r6gtaq06b2/SMSCS01026-1.pdf.
Hi
(Unsure how to contact you directly coz Im too dumb to work the github gui. So apologies on this)
Just wanting to know how I can donate the font to Laser200 / Laser310 / VZ200 / VZ300 8-bit computer font?
Read your article on hack-a-day website on 5th Feb.
Cheers,
Dave
Am I correct that the TRS-80 Model 100 font is missing? Or is it filed under the name of one of the similar, but less popular, systems? ("Kyocera Kyotronic 85", "NEC 8201", "Olivetti M10", and possibly others.)
If it is missing, are you accepting submissions? And would you want the different variants that existed?
There were at least three variants for the US Model 100:
Possibly other related machines would be filed together:
Here is an image of the font from a Model 100 emulated in a web browser at http://bitchin100.com/CloudT/
I do not know if that image is pixel accurate, but it should be. The machines did not have a character generator, so the pixels had to be drawn by the ROM.
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.