mirror of
https://github.com/phooky/Apple-410.git
synced 2024-10-31 21:07:02 +00:00
49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
|
#!/usr/bin/python3
|
||
|
"""
|
||
|
Extract the fonts and create pickled dictionaries mapping characters to the raw binary
|
||
|
strings representing each entry. Parsing these strings is done in the client code.
|
||
|
"""
|
||
|
|
||
|
import struct
|
||
|
import pickle
|
||
|
|
||
|
alpha_ft_start = 0x2569
|
||
|
point_ft_start = 0x3153
|
||
|
|
||
|
f = open("ROM.bin","rb")
|
||
|
data = f.read()
|
||
|
|
||
|
def eot(ft, off):
|
||
|
"Returns true if the offset is at the end of the table."
|
||
|
# Presumes that every table terminates in 0xff
|
||
|
return data[ft + off*2] == 0xff
|
||
|
|
||
|
def get_char(ft,off):
|
||
|
"Returns the character data (sans terminating 0xff)"
|
||
|
achar = chr(off+0x20)
|
||
|
o1 = ft + (off*2)
|
||
|
o2 = (data[o1+1]*256) + data[o1]
|
||
|
o3 = o2
|
||
|
while data[o3] != 0xff:
|
||
|
o3 += 1
|
||
|
return data[o2:o3]
|
||
|
|
||
|
|
||
|
def build_char_dict(ft, first_char=0):
|
||
|
offset = 0
|
||
|
d = {}
|
||
|
while not eot(ft,offset):
|
||
|
cur_char = chr(offset+first_char)
|
||
|
d[cur_char] = get_char(ft,offset)
|
||
|
offset += 1
|
||
|
return d
|
||
|
|
||
|
def pickle_font(path, ft, first_char=0):
|
||
|
f = open(path,"wb")
|
||
|
d = build_char_dict(ft,first_char)
|
||
|
pickle.dump(d,f)
|
||
|
|
||
|
pickle_font("a410_chars.pickle",alpha_ft_start,ord(' '))
|
||
|
pickle_font("a410_points.pickle",point_ft_start)
|
||
|
|