Choosing an Apple-II Assembler

I 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…

https://cc65.github.io/

  • 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.

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.

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

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

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