| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| syntax.zip | 2025-11-24 | 6.0 kB | |
| bass.luac | 2025-11-24 | 97.8 kB | |
| bass-1.00-windows.zip | 2025-11-24 | 393.2 kB | |
| bass-1.00-macos.zip | 2025-11-24 | 810.0 kB | |
| bass-1.00-raspberry-pi.tar.gz | 2025-11-24 | 495.8 kB | |
| Bass Manual.pdf | 2025-11-24 | 190.1 kB | |
| bass-1.00-linux.tar.gz | 2025-11-24 | 522.5 kB | |
| Totals: 7 Items | 2.5 MB | 0 | |
Bass 6502 Assembler
Bass is a macro assembler for 6502 cross-development written by Aleksi Eeben in 2025. Development is ongoing, with new features added as needed and bugs fixed as they are discovered. The latest update introduces memory banking, large REU export support, ROM image generation for game consoles, and optional 65C02 instruction set support.
Bass aims to be minimalistic, clutter-free, precise, and enjoyable to use, with minimal mental overhead from remembering directive syntax or unnecessary formalities. Just write code and sip coffee all night. If you’ve used DASM or ASM-One, you’ll feel at home.
Target platforms include: C64, VIC-20, C128, C16/Plus4, NES, Apple II/IIe/IIc, Atari 2600, Atari Lynx, Atari 400/800/5200/7800, Oric-1, Oric Atmos, Acorn Atom, Acorn Electron, BBC Micro, Acorn Master 128, Commander X16, PC Engine / TurboGrafx-16, and T-800 Model 101.
Bass is written in Lua, with precompiled binaries available for macOS, Windows, Linux PCs, and Raspberry Pi 5 (Pi 3/4 with 64-bit OS should also work). A Lua bytecode version is provided, built with Lua 5.4.8.
Installation
macOS, Linux, Raspberry Pi
- Extract the corresponding zip or tarball
- Copy “bass” to /usr/local/bin (with administrator rights: “sudo cp bass /usr/local/bin”)
Windows
- Extract the zip
- Copy “bass.exe” somewhere and add the folder to your path
Optionally, you can also use the Lua bytecode version
- Install lua from lua.org (current bass.luac is compiled using Lua 5.4.8)
- Type “lua bass.luac” to run
Version History
Version 1.02 (18 Nov 2025)
This update adds support for memory banking, exporting large REU files, building ROM images for game consoles, and optional 65C02 mode. New directives: bank, reusave, append.
- Flexible memory banking for C64 REU, VIC-20 (Penultimate+ 3DCR 280K expansion), Atari 2600, Atari Lynx, Atari 400/800/XL/XE, NES, Apple IIc, and potentially any 6502 or 65C02 setup with switchable memory banks.
- New bank directive selects the active 64K memory bank (0–255). This mirrors the REU layout when configured for the maximum 16 MB. Banks can also serve as multiple 64K workspaces, letting you define any layout you want. Each bank tracks its lowest and highest accessed address, and the current bank can be determined using the BANK variable.
- As before, bsave and save export data from the current 64K bank and always create a new file. New append directive appends data to an existing binary file. This allows building full Atari 2600, Atari Lynx, and NES ROM images in any configuration directly from source, step by step.
- For example, for NES mapper 2 you could place switchable PRG ROMs at $8000–$BFFF in banks 0–3, the fixed PRG ROM at $C000–$FFFF in bank 0 or 3, and any number of CHR ROMs in banks 4–7. To build the ROM file, first bsave the 16-byte iNES header prepared anywhere in memory, then append your PRG ROM banks (fixed bank last), and finally append your CHR ROMs.
- New reusave directive treats up to 256 banks as one contiguous 24-bit memory space. This enables building large REU images, optionally including a C64 internal memory image in bank 0. Bank 0 can also contain a small loader stub that, on the C64 Ultimate, loads the REU file in a second.
- Banks are created automatically by bank and incbin directives when needed, or you can set the number of banks with the -r command-line switch or by defining the variable BANKS = 16 in the source.
- Display memory map option now shows all non-empty banks, and allocates tracking memory only when the -m switch is specified.
- Added the option -f to list free (unused) memory regions between the lowest and highest addresses used in each bank.
- Define 65C02 = 1 to enable 65C02 instructions. Additional Rockwell/WDC 65C02 bit instructions (Atari Lynx, Commander X16) are defined as macros in lynx.s.
- The main source filename (given on Bass command line) is now displayed next to Pass 1 and Pass 2. New string constant SOURCEFILE refers to the filename with path and extension removed.
- Assembly errors now ring a terminal bell, unless muted with --nobell switch.
Version 1.01 (25 Sep 2025)
This quick update adds one directive, a few error checks, and corrects a blocked variable name.
- Added = to replace the set directive as preferred form for defining mutable variables and performing variable calculations, e.g., val = val + 1. If a label is immutable (defined only once), the = can be omitted. Legacy/DASM-style set (mutable) and equ (immutable) are still usable, but may be removed in later versions.
- Single letter variable name A was partially blocked by leftover, incomplete support for the optional "asl a" syntax in shift/rotate instructions (asl, lsr, rol, ror). As before, only the standard syntax without A is accepted, but the variable name A is now available.
- Unexpected parameters after else and endif now throw an error, whereas they were previously ignored. Colon-separated instructions can still be placed on the same line, e.g., else : lda #$00 : endif.
- New label names are now properly validated: Names must start with a letter and contain only the characters A-Z, a-z, 0-9, and _. All names conflicting with instructions or directives are now also rejected. Macro names are more flexible, allowing synthetic instruction style names like adc.w.
Version 1.00 (20 Sep 2025)
- First public release.
See the Bass Manual for detailed information:
https://sourceforge.net/projects/bass-6502-assembler/files/Bass%20Manual.pdf
Note
You may not use Bass to compile T-800 Model 101 code that could be harmful to humans.
License
Freeware. You may use and redistribute the original, unmodified files. Modification, reverse engineering, or other forms of creative exploration are not encouraged. Source code is not currently provided.
If you enjoy using Bass, feel free to support development via Ko-fi:
https://ko-fi.com/aleksieeben
Visit Aleksi's Eight Bit Shed at:
https://fb.com/eightbitshed