mirror of https://github.com/pfusik/xasm.git synced 2024-07-22 05:28:53 +00:00
6502 cross-assembler with original syntax extensions
Go to file
Piotr Fusik 8eb2a5ae6f Migrate to the new macOS notarization tool.
The old one no longer works.
2024-05-18 21:45:34 +02:00
.github/workflows Fix "Error processing arguments: Missing value for argument --compiler=". 2022-11-29 14:04:51 +01:00
debian xasm 3.2.1 release. 2022-12-08 11:49:40 +01:00
source Revert "Warn about a comment starting with a comma." 2023-05-07 21:03:40 +02:00
.gitignore Signed the Windows binary. 2021-06-20 19:01:53 +02:00
dub.sdl Bump the copyright year. 2021-06-21 22:42:13 +02:00
Makefile Migrate to the new macOS notarization tool. 2024-05-18 21:45:34 +02:00
README.md xasm 3.2.1 release. 2022-12-08 11:49:40 +01:00
xasm.1.asciidoc xasm 3.2.1 release. 2022-12-08 11:49:40 +01:00
xasm.properties Apply dos2unix. 2019-08-24 09:46:29 +02:00
xasm.spec Modernize the RPM spec. 2023-07-11 10:56:46 +02:00

GitHub Actions


xasm is a 6502 cross-assembler with original syntax extensions. By default it generates binaries for Atari 8-bit computers.


6502 assembly code is full of LDA, STA, LDA, STA sequences. With xasm you can use MVA as a shortcut for an LDA/STA pair or even MWA for 16-bit transfers. Short branches can be replaced with conditional skip and repeat pseudo-instructions. You can use a pair of instructions with a shared argument. These are just some of the features that help you program in a more concise way. Let's look at typical 6502 code (which is also valid in xasm):

    lda #<dest
    sta ptr
    lda #>dest
    sta ptr+1
    ldx #192
    ldy #39
    lda pattern,y
    sta (ptr),y
    bpl do_byte
    lda #40
    adc ptr
    sta ptr
    bcc skip
    inc ptr+1
    bne do_line

Using xasm's features this code can be rewritten to:

    mwa     #dest ptr
    ldx     #192
    ldy     #39
    mva:rpl pattern,y (ptr),y-
    lda     #40
    add:sta ptr
    scc:inc ptr+1
    dex:bne do_line

xasm syntax is an extension of Quick Assembler's (created in 1991 for Atari 8-bit). Accumulator shifts should be written as in asl @. Whitespace is important: it is required before the instruction and disallowed in the operands, because it separates a comment from the operand, e.g.

    lda #0   this is a comment, no need for a semicolon

This may look weird at first, but it enables nice features such as instruction pairs and two-argument pseudo-instructions.


xasm is a command-line tool. Therefore you additionally need a programmer's text editor.

I use SciTE. To install xasm syntax highlighting and single-keystroke compilation, copy xasm.properties to the SciTE directory.

For single source file programs, press Ctrl+F7 to compile. You can double-click error messages to go to the incorrect line. Press F5 to run the program in the emulator.

For larger projects, I use GNU Make. Press F7 to build (and possibly run) a project as described in the Makefile. You can find my Makefiles in my repositories on GitHub.

If you prefer VIM, see a link below.

Poetic License

This work 'as-is' we provide.
No warranty express or implied.
We've done our best,
to debug and test.
Liability for damages denied.

Permission is granted hereby,
to copy, share, and modify.
Use as is fit,
free or for profit.
These rights, on this notice, rely.


xasm 3.2.1 for Windows, macOS, Ubuntu and Fedora.

  • Atari800 - portable emulator of Atari 8-bit computers
  • Atari XL/XE Source Archive - source code of Atari demos, utilities and games
  • cc65 - C cross-compiler targeting 6502-based systems
  • MADS - another 6502/65816 cross-assembler, partially supporting xasm's syntax
  • vim-xasm - VIM syntax highlighting for xasm
  • WUDSN IDE - Eclipse plugin, front-end to several 6502 cross-assemblers, including xasm