Launched this site this week, which means this is technically the first post. Feels appropriate that it’s a dev log, because that’s mostly what I’ve been doing.
The biggest time sink has been the TS2068 software catalog pipeline — a multi-stage thing that goes WP-CLI PHP export → Python image processor → Python LaTeX generator → XeLaTeX compile. Solving the genre taxonomy hierarchy was a whole thing — WordPress stores hierarchical terms in ways that fight you when you want “Game – Text Adventure” to win over its parent “Game.” Once I solved the TS2068 problem, I cloned it for the TS1000.
On the vintage hardware side: I’ve been continuing work on a drop-in replacement for the SP0256-AL2 speech synthesizer chip using a Raspberry Pi Pico. The architecture correction this week was meaningful — I’d initially written the synthesis engine as a 12-pole direct-form IIR, but the SP0256 actually uses 6 cascaded 2-pole IIR sections (biquad cascade). Next interesting problem is whether to extend the unused address space to add a TTS mode via the CTS256A-AL2 letter-to-phoneme algorithm, which would feed directly into the existing synthesis queue without bypassing the LPC engine.
Separately, I went down a rabbit hole on the NEC uPD78C05 microprocessor — it’s in a Korg PSS-50 I’ve been collecting. The thing to know about the uPD78C05 is that it has no on-chip ROM, so the firmware lives in an external chip on the board. I’ve got a T48 programmer and an HN613128 mask ROM to dump. Still sorting out whether to read it via the 27C128 device profile or find it directly in XGPro.
On the content strategy side: spent time this week on a data reconciliation problem — two versions of a large content audit spreadsheet had diverged, one with updated navigation assignments, one with SME decisions imported from a separate review process. Merging those on a shared address key with openpyxl is pretty straightforward once you sort out which version wins where. 76 rows updated, right on estimate.
Also did a competitive navigation audit that confirmed that “For Individuals / For Organizations” is essentially the consensus label pattern I needed. Four of the top five competitors use it verbatim. Good to have that documented before a client conversation.
And then there’s the cassette cover text overlay script. The Midjourney plugin I built for timexsinclair.com generates great cassette artwork from program descriptions, but Midjourney can’t spell, so the titles don’t exist in the image. Pillow with a custom TTF, a semi-transparent banner, and a fade-in at the top edge of the banner. Simple but it makes the covers feel finished.
VCF East in two weeks. Wall, NJ. Looking forward to it.