#!/usr/bin/env python3
# Extract the 27 Bitstream Speedo font files from the PacificPage P.E. fonts ROM.
#
# Directory at the start of fonts_010732_010733.bin:
#   each entry = 16-byte ASCIIZ filename ("bt22XXXX.sp")
#              +  4-byte BE absolute address (biased by +0x00500000)
#              +  4-byte BE stored length  (unused; we slice to the next file)

import os, struct

BASE = 0x00500000
data = open("fonts_010732_010733.bin", "rb").read()
entries, pos = [], 8
while data[pos:pos + 4] == b"bt22":
    name = data[pos:pos + 16].rstrip(b"\x00").decode()
    addr = struct.unpack(">I", data[pos + 16:pos + 20])[0] - BASE
    entries.append((name, addr))
    pos += 24

os.makedirs("fonts", exist_ok=True)
bounds = sorted(entries, key=lambda e: e[1]) + [("", len(data))]
for (name, start), (_, end) in zip(bounds, bounds[1:]):
    open(f"fonts/{name}", "wb").write(data[start:end])
    print(f"{name}: offset=0x{start:06x} size={end - start}")
