Choosing an Apple-II Assembler
Jan 14, 2020I have fond memories of hacking away on my old Apple IIe so I went looking for an assembler. Setting aside nostalgia, I prefer a cross-assembler so I can work in my [outrageously more] powerful Linux desktop. There are several that target the Apple2 but it’s tough to find a toolchain I want to work with. A survey…
CA65 (CC65)
- Written in C, runs anywhere with the GNU compiler
- Supports many targets: Apple2, Atari 2600/400/800/1200, Commodore Pet/Vic20/C64, NES, et.al.
- Powerful. Includes separate linker, disassembler, and other object tools
- Excellent macro system, but not source compatible with any others.
- Documentation is extensive but written by experts for experts.
Naturally, I chose this because it’s the path of most resistance. I spent days reading, puttering, and skimming sparse examples and USENET threads for clues.
I’ll demonstrate it in a future post.
MERLIN32
https://www.brutaldeluxe.fr/products/crossdevtools/merlin/index.html
- Windows, OSX, Linux ports
- Enhancement/rewrite of Apple2-native Merlin8/16/Pro
- “Standard” directives and macro syntax (no surprises), key in code from vintage examples and they generally work
- Adequate documentation, given the original Merlin manuals
- no commandline options
- generates a working binary out of the box!
I should have tried this first. Trivial to get started.
ACME
https://sourceforge.net/projects/acme-crossass/
- Written in C
- Compiles with the GNU compiler
- Supports 6502, 65C02, 6510, 4502, 65816, r65c02, w65c02
- Good macro system, pseudo opcodes, and directives with its own syntax
- Fast
- Can output Apple bin format
- Source includes good documentation
- Actively maintained
SBASM
https://www.sbprojects.net/sbasm/
- written in Python3, runs anywhere you have python
- Targets dozens of processors 8051, 6502, 65C02, 6800, Z80 among them.
- Non-standard directives and macro syntax
- few/no commandline options
- Produces rom-ready output, no linker
- Good documentation but no local documentation or bundle
RetroAssembler
https://enginedesigns.net/retroassembler/
- written in DotNet, reasonably portable (runs under Wine and on Mono RT)
- supports multiple CPUs: Z80, 6502/65C02, 65816
- supports many targets: Gameboy, NES, Sega, C64, ZX-Spectrum
- Assembler/Linker with disassembler built in