This is an assembler that takes custom instruction set definitions
and uses them to assemble source files.
This can be useful if you'd like to test out a new virtual machine's bytecode,
or even if you're eager to write programs for that new processor architecture
you just implemented in FPGA!
📱 Try it right now in your browser!
🎁 Check out the Releases section for pre-built binaries.
📖 Check out the User Guide on how to use the main features!
📋 Check out the documentation for more in-depth instructions.
🕹 Check out an example project which targets the NES!
You can compile from source by simply doing cargo build
. There's also a
battery of tests available at cargo test
.
Given the following file:
#cpudef
{
#bits 8
load r1, {value} -> 0x11 @ value[7:0]
load r2, {value} -> 0x12 @ value[7:0]
load r3, {value} -> 0x13 @ value[7:0]
add r1, r2 -> 0x21
sub r3, {value} -> 0x33 @ value[7:0]
jnz {address} -> 0x40 @ address[15:0]
ret -> 0x50
}
#addr 0x100
multiply3x4:
load r1, 0
load r2, 3
load r3, 4
.loop:
add r1, r2
sub r3, 1
jnz .loop
ret
...the assembler would use the #cpudef
rules to convert the instructions into binary code:
outp | addr | data
100:0 | 100 | ; multiply3x4:
100:0 | 100 | 11 00 ; load r1, 0
102:0 | 102 | 12 03 ; load r2, 3
104:0 | 104 | 13 04 ; load r3, 4
106:0 | 106 | ; .loop:
106:0 | 106 | 21 ; add r1, r2
107:0 | 107 | 33 01 ; sub r3, 1
109:0 | 109 | 40 01 06 ; jnz .loop
10c:0 | 10c | 50 ; ret
Usage: customasm [options] <asm-file-1> ... <asm-file-N>
Options:
-f, --format FORMAT The format of the output file. Possible formats:
binary, annotated, annotatedbin, binstr, hexstr,
bindump, hexdump, mif, intelhex, deccomma, hexcomma,
decc, hexc, logisim8, logisim16
-o, --output FILE The name of the output file.
-s, --symbol FILE The name of the output symbol file.
-p, --print Print output to stdout instead of writing to a file.
-q, --quiet Suppress progress reports.
-v, --version Display version information.
-h, --help Display this information.