okay, an assembler might be a good idea after all

This no assembler idea works better in a language with macros/vau. If
I'd chosen to do this in Scheme/Emacs instead then there'd be no need
for an assembly language, but doing it in JavaScript isn't as nice as
parsing.