From 8ddecc892008d73317092332a20bca95a0402fd7 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 13 Jul 2017 14:28:26 -0500 Subject: [PATCH] Makefile: generate font image programmatically --- Makefile | 18 +++++++++++++++++ charset.cfg | 7 +++++++ mkfontimg.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 charset.cfg create mode 100644 mkfontimg.py diff --git a/Makefile b/Makefile index 91cf694..161845e 100755 --- a/Makefile +++ b/Makefile @@ -1,12 +1,30 @@ .PHONY: all all: 80columns-compressed.prg 80c2-compressed.prg 80c3-compressed.prg 80c4-compressed.prg +.INTERMEDIATE: charset.bin +charset.bin: charset.o charset.cfg + ld65 -C charset.cfg $< -o $@ + +charset%.bin: charset%.o charset.cfg + ld65 -C charset.cfg $< -o $@ + %-compressed.prg: %-uncompressed.prg exomizer sfx 51200 -q -n -o $@ $< %-uncompressed.prg: %.bin (printf '\0\310'; cat $<) > $@ +.PHONY: update-font-images +update-font-images: charset.bin charset2.bin charset3.bin charset4.bin mkfontimg.py + python mkfontimg.py -l charset.bin img/t1.png + python mkfontimg.py charset.bin img/g1.png + python mkfontimg.py -l charset2.bin img/t2.png + python mkfontimg.py charset2.bin img/g2.png + python mkfontimg.py -l charset3.bin img/t3.png + python mkfontimg.py charset3.bin img/g3.png + python mkfontimg.py -l charset4.bin img/t4.png + python mkfontimg.py charset4.bin img/g4.png + .INTERMEDIATE: 80columns.bin 80columns.bin: 80columns.o charset.o 80columns.cfg ld65 -C 80columns.cfg $(filter %.o,$^) -o $@ diff --git a/charset.cfg b/charset.cfg new file mode 100644 index 0000000..7306344 --- /dev/null +++ b/charset.cfg @@ -0,0 +1,7 @@ +MEMORY { + CHARSET: start = $D000, size = $0800, fill=no; +} + +SEGMENTS { + CHARSET: load = CHARSET, type = ro; +} diff --git a/mkfontimg.py b/mkfontimg.py new file mode 100644 index 0000000..9c15da4 --- /dev/null +++ b/mkfontimg.py @@ -0,0 +1,55 @@ +#!/usr/bin/python +import sys +import PIL.Image as Image + +text = """\ +10 poke53280,0:poke53281,1 +20 print"\xd0\xd3"; +30 fory=0to7 +40 forx=0to15 +50 poke49152+111+x+80*y,x+16*y +60 next +70 next +80 list""" + +lowercase = False +if sys.argv[1] == '-l': + lowercase = True + del sys.argv[1] + +def toscreencode(ch): + cc = ord(ch) + if '`' <= ch <= '~': return cc - 96 + return cc + +charset = map(ord, open(sys.argv[1]).read()) + + +def putcat(img, r, c, code, lowercase): + inverse = code & 128 + code = code % 128 + idx = code*8 + for y in range(8): + data = charset[idx+y+lowercase*1024] + if not inverse: data = ~data + for x in range(4): + img.putpixel((4*c+x,8*r+y), data & (1<<(3-x))) + +img = Image.frombytes('1', (188,64), '\xff' * 188*64) + +r=c=0 +for ch in text: + if ch == '\n': + r = r + 1 + c = 0 + continue + putcat(img, r, c, toscreencode(ch), lowercase) + c = c + 1 + if c == 80: + r = r + 1 + c = 0 +for r in range(8): + for c in range(16): + putcat(img, r, c+31, r*16+c, lowercase) + +img.save(sys.argv[2])