Commander CX16 Wiki

Here's a collection of resources that the community has found useful in getting started with the x16. I'll try to keep the list up to date as the x16 evolves and as people create more resources. I am in no way affiliated with the x16 team, just someone watching from the sidelines.

DOCUMENTATION[]

Official x16 programmers reference Lots of useful information about programming the x16. Makes a point of distinguishing between the x16 and C64 compatibility.
Official VERA programmers reference Detailed description of VERA and all it's registers.
Unofficial VERA programmers reference A slightly more user friendly reference for VERA. Also outlines changes between VERA revisions.

BASIC[]

Generic resources for getting started with basic. These mostly focus on C64 BASIC which is 99% compatible with the x16. Note that due to differences in memory layout, PEEKs and POKEs for the C64 are (for the most part) incompatible with the x16.

C64 User Manual (HTML, PDF) The definitive guide for C64 basic.
C64 BASIC commands list A nice list of commands that are available in the C64

ASSEMBLY[]

Depending on what you're trying to achieve, there are a number of places you can start playing around.

Easy 6502 A great intro to 6502 assembly programming. Not specific to the x16, but a great place to start if you've never done any assembly before.
6502 instruction set A nice display of 6502 instructions.
6502 instruction set A more detailed list of instructions. Not as easy on the eyes, but certainly more information.
65C02 additions A list of the changes made to the instruction set between the original 6502 and the WDC 65C02 being used for the x16.
WDC 65C02 datasheet The official datasheet for the WDC 65C02, including a full list of instructions.
6502 interrupts primer A nice little guide on how to use interrupts in the 6502.
6502 Cheat Sheet (Image) A very nice 6502 cheat sheet with addressing modes and flags for each instruction.

USEFUL C64 STUFF[]

As the C64 has been used as the basis of the x16, there are many similarities between the two systems. Here is a collection of general C64 resources that may be useful for the x16. Note, there are many incompatible details between the two systems, so please don't take details in this section too literally.

C64 Programmers reference (HTML, PDF) Great guide to both BASIC and Assembly programming. Includes C64 memory map and other C64 specific features.
Kernal subroutines C64 kernal subroutine jump table map. C64 subroutines have been cited as being compatible with the x16.
PETSCII character selector A fantastic utility for selecting PETSCII characters.
PETSCII character listing A list of all PETSCII characters.

ASSEMBLERS[]

MON - Built into the x16 firmware. This is a modified variant of the Final Cartridge III monitor. It will be replaced in an up and coming release with something better, but it's a good start for poking around in memory to see how things work.

MONitor (FC3 manual) The hardcore option, for those that don't need labels or macros. Baked into the x16, so its convenient for debugging on the go. The current implementation is a derivative of Final Cartridge 3, however there will be a new MONitor coming to x16 soon.
ACME assembler The preferred choice of David and crew. Not as many features as other assemblers, but super easy to get started with.
64tass Bucket loads of features. Structs, variable types, lists, UTF-8 to PETSCII, but syntax is a bit on the ugly side. Also relatively easy to get started with.
ca65 Part of the cc65 bundle. More features than 64tass, and a somewhat nicer syntax. More difficult to get started with, you've gotta deal with "linking" to position your code at the correct locations in memory. Allows mixing assembly and C.
Kick Assembler (KickAss) Seems to be on par with 64tass and ca65 for features. Written in Java (so requires JVM, but probably easily hackable).
vasm General assembler, able to target dozens of different ISAs (6502, 6800, 68000, Z80, ARM, and more), lots of great macro features.
WLA DX Yet another 8-bit cross platform assembler. Super fast, loads of macros and features. Uncertain of ease of use with the x16 (could someone with experience please elaborate?).

COMPILERS AND IDEs[]

AsmFun An IDE special created for the Commander X16. If you want to get started, that's the place. There in embedded CommanderX16 emulator and lot of nice features.
cc65 A C compiler suite targeting the 65xx family of microprocessors. The latest source version of the compiler (must be pulled from github) now officially supports the x16. There is example code available in the x16-demos repository.
MOSpeed A BASIC interpreter and compiler for the C64, VIC-20 and x16 dialects of BASIC. Appears to allow interpreting BASIC directly, or compiling to Javascript or Powershell. Additionally, allows you to compile your BASIC program for the x16. Also includes a symbolic assembler for the 6502.
Prog8 A language designed specifically for use with the 6502/6510 series of microprocessors. Supposedly more efficient than other high level languages, such as C and Pascal, due to targeting 65XX specifically.
Millfork A small language, similar to C but designed specifically for 8bit microprocessors. Works for 6502 and Z80 platforms, with experimental support for the x16.
durexforth A modern implementation of Forth for the C64. x16 support is currently in the works.
TRSE A Pascal like language and IDE suite targeted at a number of 6502 and 68000 platforms. Experimental x16 support has been added to the latest development builds, and will be available from release 0.9 onward (should be available November 2019).
WUDSN IDE An 8-bit IDE plugin for Eclipse. Supports a range of different assemblers and platforms. No explicit support for x16, but should be fairly easy to get going with minimal tweaking (choosing C64 as your platform should mostly do the trick).

OTHER TOOLS[]

x16 Emulator The official emulator, for developing your software without needing physical access to the real thing.
x16wide A web IDE for the x16. Includes an in browser version of the x16 emulator and a code sharing mechanism.
Aloevera A Build tool that verifies and converts source PNG files into VERA-compatible graphics formats. Supports all Vera types such as text, tileset, sprites and bitmaps, and outputs data files ready for use with Assemblers, cc65 header files, .BIN files, and even BASIC DATA statements. Also contains a series of samples and tutorials useful for VERA newcomers.
petscii2utf8 Neat looking tool that's used for converting from PETSCII to UTF8/VT100.
Furnace Tracker Free and open source chiptune music tracker for retro systems with full YM2151 and X16 VERA support. Able to export ZSM files that can be played back on a real X16.
DefleMask Great little freeware utility for composing tracks targeting a number of old sound chips including the YM2151, C64 SID, YM2612 (Sega machines) and others. The sound chip for the x16 has not yet officially been chosen, but it appears likely that it will be the YM2151.
VOPM Virtual OPM synth, another utility for synthesizing YM2151 chips.
VOPM (linux) The Linux version of VOPM
VOPMex Updated version of VOPM

EXAMPLES and DEMOS[]

Official demos Some good little examples of certain functionality on the x16. Great for wrapping your head around VERA and sound stuff.
Assembly Mode 0 scrolling Shows a scrolling Layer 0 with static Layer 1 as a foreground border. Written in 64tass assembly, both Layer 0 and Layer 1 are in Mode 0 (text mode).
spaceshuttle.io A website dedicated to sharing x16 games and demos.
Controller Test An example program for testing if controllers are working properly.

TUTORIALS[]

Wiki Tutorials A collection of community contributed tutorials, hosted on this very wiki
Dansbo's "Hello, World!" in assembly for the x16 Geared towards complete beginners of 6502 assembly and the x16/C64 platforms.
ChibiAkumas' x16 assembly series A fantastic series of guides for getting started with the x16 and VERA in assembly. Looks to have not yet been updated for VERA 0.8, so you'll need to refer back to the VERA docs or stick with x16emu r30.
Passing Inline Arguments A blog post describing how to pass assembly arguments to a subroutine via inline arguments.