Commodore's Assemblers: Overview

Commodore used 5 different assemblers, most of them in-house tools, to build the ROMs for their Computers like the PET, the C64 and the C128. Nevertheless, all Commodore source files, from 1975 to 1990, share a common format and use the same assembly directives. This series of articles describes each of these assemblers.

Year Company Assembler Platform Encoding
1975 MOS 6502 Cross-Assembler GE, NCSS time-sharing, … various (upper case)
1976 MOS Resident Assembler MDT650, KIM-1, PET, C64, CBM2, TED, C128 ASCII (upper case, CR)
1984 BSO CY6502 VAX ASCII (mixed case, CRLF)
1986 Commodore HCD65 C128 PETSCII (mixed case, CR)
1989 Commodore 6502ASM VAX, Amiga, PC ASCII (mixed case, LF/CRLF)

Series Overview

Cross-Assembler and Resident Assembler

In late 1975, MOS Technology, Inc. introduced the 6502 CPU and in 1976, they released the KIM-1, a demonstration/development platform for the 6502. Commodore bought MOS in November 1976, and the 6502 and the KIM-1 became Commodore products.

MOS also developed two assemblers for the 6502:

  • The “Cross-Assembler” (1975), available for various mainframes and minicomputers.
  • The “Resident Assembler” (1976), running on 6502 systems. It was ported to all Commodore 8-bit computers. The C64 version was sold as the “C64 Macro Assembler” in 1982.

Both assemblers were compatible in that they understood the same source format, with the same math features and the same directives and options.

Read more: Commodore’s Assemblers: Part 1: MOS Cross-Assembler
Read more: Commodore’s Assemblers: Part 2: MOS Resident Assembler

BSO CY6502 (VAX)

In mid-1984, Commodore switched to “CY6502” by the company Boston Systems Office (BSO), a cross-assembler running on VAX/VMS systems that was highly compatible to the MOS assemblers, but more advanced.

Read more: Commodore’s Assemblers: Part 3: BSO

HCD65 (C128)

In 1986, Commodore wrote a new assembler named “HCD65” for the C128 that aimed at full compatibility with the BSO assembler. They sold it as part of the Commodore 128 Developer’s Package in 1987. In 1989, as Commodore worked on the ill-fated C65, they added support for the extended 65CE02/4510 instruction set.

Read more: Commodore’s Assemblers: Part 4: HCD65

6502ASM (VAX, Amiga, PC)

Also in 1989, and also for the C65 project, they wrote a new cross-platform assembler from scratch to replace the BSO one on VAX/VMS. It was supposed to be fully backwards-compatible and support the 65CE02/4510 instruction set from the start.

Read more: Commodore’s Assemblers: Part 5: 6502ASM


There are two more assemblers that were used to develop the ROMs of Commodore computers that don’t really count as in-house tools:

MACRO-10 (PDP-10)

All Commodore 8-bit computers shipped with a version of Microsoft BASIC. Microsoft had used a PDP-10 mainframe for cross-developing the BASIC interpreter. Instead of writing a cross-assembler from scratch, they reused the MACRO-10 assembler that came with the PDP-10 and defined a set of macros that emitted 6502 opcodes. The article Microsoft BASIC for 6502 Original Source Code [1978] has more information.

For the first two versions of the PET ROM, Microsoft delivered the BASIC binary together with the source to Commodore. After BASIC V2, Commodore adapted it to their own assemblers and built it themselves – so Microsoft’s development tools were never used by Commodore.

Merlin 128 (C128)

The Merlin 128 Macro Assembler by Glen Bredon was a commercial assembler for the C128. It was used by Dennis Jarvis while he worked on the DOS of the Commodore 65. Jarvis had used Merlin for his personal projects before, and it had become the tool of his choice.

He started out with the source of the CBM 8250 disk drive ROM, converted it from Commodore’s format to Merlin (PETSCII) format, and developed on top of it. The 65CE02/4510 extensions were used through a set of macros.

Towards the end of the project, the C65 DOS code was ported from Merlin to the cross-platform Commodore 6502ASM.

Leave a Comment