ASM64 is pure C99 with no dependencies beyond the standard library. It aims for ACME compatibility (same directive syntax, same output format), so existing projects should migrate easily.
Features: two-pass assembly, macros with local labels, conditional assembly, !for loops, pseudo-PC for relocatable code, illegal opcodes, automatic zero-page optimization, VICE-compatible symbol files.
I wrote about the development journey here: https://fredrikpaulin.hashnode.dev/building-asm64-a-modern-6...
The most interesting bug was in the !pseudopc implementation—tracking two program counters (real and virtual) across two passes has subtle gotchas.
GitHub: https://github.com/fredrikpaulin/asm64
Cheers, Fredrik