Assembler for 8080, Z80, 6502 and much more…

 6502, Microprocessors, My projects, Programming, Z80  Comments Off on Assembler for 8080, Z80, 6502 and much more…
Nov 272016

Readers certainly know my ASM80 – online assembler / IDE for eight-bit processors. I made several derived versions, like single page compiler, embedded version of the translator (I used it in tutorial Strojá, or a stand-alone IDE. The good old command line assembler is here now too.

The prerequisite you have to meet is a functional Node.js environment. It is not complicated, it exists for all major platforms, and you can download it here: During installation, package manager called NPM is installed too.

NPM is used for install the packages and libraries. To install ASM80 itself just run a command prompt and type:

-g causes the asm80 will not be installed as a library, but as a system tool. Then toy can invoke it as a standard command line utility:

launches translation for file test.a80 and the result will be two files: test.hex with output and test.lst with the translation protocol. Extension .a80 tells the compiler to use the processor’s instruction set for Intel 8080 CPU.

Behaviour can be influenced by parameters. You can set the output file name, you can suppress the generation .lst, or explicitly determine the processor type and format of the output file (besides HEX and S record it can output .COM files for CP/M, .PRG for C64 emulators, or SNA and TAP for ZX Spectrum).

Options are:

  • -o, --output <file> Output file name
  • -t, --type <type> Output type [default: hex]. Available types are: hex, srec, com (for CP/M), sna, tap (for ZX Spectrum), prg (for C64)
  • -n, --nolist Suppress listing (.lst file)
  • -m, --machine <type> Processor type, one of the following: Z80, I8080, C6502, C65816, CDP1802, M6800, M6809
  • -h, --help See HELP

Machine type can be omitted. Right CPU is determined by file name extension (-m option overrides this decision).

  • Intel 8080: .A80
  • Zilog Z80: .Z80
  • Motorola 6800: .A68
  • Motorola 6809: .A09
  • MOS 6502: .A65
  • WDT 65816: .816
  • CDP 1802: .A18

These parameters are described on page NPM package ASM80.

Overview of the syntax and directives can be found on GitHub Pages.

I still have a few suggestions for improvements, I would like to know your opinion …

  • Create a library system, as it has the classic assemblers, which separates translation and linking. So users will have the opportunity to make a library of subroutines, which would include only those parts of the code that are necessary for proper function. You can easily make something like the “standard C library” for your system …
  • Having the opportunity to directly link public code, for example on GitHub.
  • … More processors? Systems?

Thanks for the tips and suggestions. You can send them straight to the GitHub Issues.

Dec 282015

Hello from ASM80. Recently (a ten minutes ago, to be honest) I have added a support for WDC’s 65C816, the 6502 sequel with hybrid data width (8/16 bits). It is used in some notable computers, such as Apple ][gs, Nintendo’s SNES or SuperCPU extension for C64.

Due to its dual data width, I have to added some new directives to specify index / accumulator width. You have to specify it directly with:

Directive Meaning
.m8 Accumulator is 8bit
.m16 16bit accumulator
.x8 index register is 8bit
.x16 16bit index

65C816 added new addresing modes. The main innovation are “long” modes with 24bit addresses, e.g. JMP $123456. Such instructions are compiled in 4 bytes, e.g.  “5C 56 34 12”.

I believe (the word “believe” is important) it should work without any problems, but I warmly appreciate any feedback.

The 65C816 assembler is early beta, so I decided to release it as a single page assembler as this moment instead of full support in IDE. You can try it here: ASM65816 single page assembler. Please do not hesitate to send any feedback or bugreports to my mail Thanks.

Sep 012014

Mix an old-fashioned 65C02 with the modern octacore Propeller, and you get a Propeddle.

There is a real 65C02 processor and a real Static RAM chip in the circuit, but a Parallax Propeller determines how the 65C02 “sees” its environment, and also helps with tasks that are relatively difficult to implement in hardware, such as video. And it’s fully open source available for download.

Aug 262014

Want to try RoboSumo? Here is a simple single board computer built around a 65C02, a two channel hobby-class servo controller board made entirely out of discreet 74HCxxx ICs, and an ADC board for use with a reflectance sensor bar for line following.

Aug 242014

CHOCHI is a minimal XC3S50 FPGA board with 128K of fast SRAM and 31 IO pins – preconfigured as 45MHz 6502 computer! You can program it in 6502 assembler, BASIC, Forth or C.

Other features:

  • fit 4 Picoblaze cores
  • use as a generic FPGA board for any purpose whatsoever
  • use the JTAG port to update the system or make your own