gigatron/rom/Utils/BabelFish/tinyfont.py
2025-01-28 19:17:01 +03:00

98 lines
4.4 KiB
Python

#-----------------------------------------------------------------------
#
# tinyfont.py -- a very small font
#
#-----------------------------------------------------------------------
#
# Description:
#
# The tiny font is an 3x5 pixel monospaced font where each character
# is placed in a box of 4x6 pixels. At the native 160x120 Gigatron
# resolution we can display 40x20 characters.
#
# The encoding has 3x5 bits for the pixels and 1 shift bit to indicate
# an overall shift down for characters g, j, p, q and y. The lowercase
# j needs special handling. This scheme gives 2 bytes per character,
# for a total of 192 bytes.
#
# References:
#
# http://vt100.tarunz.org
# VT100 Terminal for Pilot (Brian J. Swetland)
#
# https://robey.lag.net/2010/01/23/tiny-monospace-font.html
# A very tiny, monospace, bitmap font (Robey Pointer)
#
# https://fonts2u.com/small-5x3-regular.font
# Small 5X3 regular (soxhead2000)
#
# https://github.com/olikraus/u8g2
# U8glib library for monochrome displays, version 2
#
# History:
#
# 2018-08-01 (marcelk) Initial version inspired by open source examples
# 2018-08-xx (marcelk) Update of @corz
#
#-----------------------------------------------------------------------
def convert(font):
for c in range(96):
i, j = c % 16, c // 16
word, shift = 0, 0
for y in range(6):
for x in range(3):
p = ((j * 6 + y) * 16 + i) * 4 + x + 1
if font[p] == '@':
if y == 5 and shift == 0:
shift, word = 1, word << 1
word |= 1 << (5*(3-x) - y - 1 + shift)
if shift == 0:
print(' 0x%04x,' % word, end='')
else:
print('-0x%04x,' % (0x8000 - word), end='')
print(' // %s' % repr(chr(32+c)))
tinyfont =\
'......@..@.@.@.@..@@.@....@...@....@.@..........................'\
'......@..@.@.@@@.@@....@.@.@..@...@...@..@.@..@................@'\
'......@......@.@..@@..@...@.......@...@...@..@@@.....@@@......@.'\
'.............@@@.@@..@...@.@......@...@..@.@..@...@..........@..'\
'......@......@.@..@....@..@@.......@.@...........@........@.....'\
'................................................................'\
'..@@..@..@@..@@..@.@.@@@..@@.@@@.@@@.@@@...........@.....@...@@@'\
'.@.@.@@....@...@.@.@.@...@.....@.@.@.@.@..@...@...@..@@@..@....@'\
'.@.@..@...@..@@..@@@.@@..@@@..@..@@@.@@@.........@.........@..@.'\
'.@.@..@..@.....@...@...@.@.@.@...@.@...@..@...@...@..@@@..@.....'\
'.@@..@@@.@@@.@@....@.@@..@@@.@...@@@.@@......@.....@.....@....@.'\
'................................................................'\
'..@@..@..@@...@@.@@..@@@.@@@..@@.@.@.@@@..@@.@.@.@...@.@.@.@.@@@'\
'.@.@.@.@.@.@.@...@.@.@...@...@...@.@..@....@.@.@.@...@@@.@@@.@.@'\
'.@.@.@@@.@@..@...@.@.@@..@@..@.@.@@@..@....@.@@..@...@@@.@@@.@.@'\
'.@...@.@.@.@.@...@.@.@...@...@.@.@.@..@..@.@.@.@.@...@.@.@@@.@.@'\
'..@@.@.@.@@...@@.@@..@@@.@...@@@.@.@.@@@..@..@.@.@@@.@.@.@.@.@@@'\
'................................................................'\
'.@@...@..@@...@@.@@@.@.@.@.@.@.@.@.@.@.@.@@@..@@.....@@...@.....'\
'.@.@.@.@.@.@.@....@..@.@.@.@.@.@.@.@.@.@...@..@..@....@..@.@....'\
'.@.@.@.@.@@@..@...@..@.@.@.@.@@@..@..@@@..@...@...@...@.........'\
'.@@..@@@.@@....@..@..@.@.@.@.@@@.@.@..@..@....@....@..@.........'\
'.@....@@.@.@.@@...@..@@@..@..@.@.@.@..@..@@@..@@.....@@......@@@'\
'................................................................'\
'.@.......@.........@.......@.....@....@....O.@...@@.............'\
'..@...@@.@@...@@..@@..@@..@...@@.@@..........@.@..@..@@@.@@...@.'\
'.....@.@.@.@.@...@.@.@.@.@@@.@.@.@.@.@@...@@.@@...@..@@@.@.@.@.@'\
'.....@.@.@.@.@...@.@.@@...@..@@@.@.@..@....@.@.@..@..@@@.@.@.@.@'\
'.....@@@.@@...@@..@@..@@..@....@.@.@.@@@.@.@.@.@.@@@.@.@.@.@..@.'\
'..............................@.......... @.....................'\
'..................@...........................@@..@..@@...@@.@@@'\
'.@@...@@.@.@..@@.@@@.@.@.@.@.@.@.@.@.@.@.@@@..@...@...@..@@..@@@'\
'.@.@.@.@.@@..@@...@..@.@.@.@.@@@..@..@.@...@.@@...@...@@.....@@@'\
'.@.@.@.@.@....@@..@..@.@.@@@.@@@..@...@@..@...@...@...@......@@@'\
'.@@...@@.@...@@...@@..@@..@..@@@.@.@...@.@@@..@@..@..@@......@@@'\
'.@.....@..............................@.........................'
print('// Generated by tinyfont.py')
convert(tinyfont)