Crates.io | customasm |
lib.rs | customasm |
version | 0.13.7 |
source | src |
created_at | 2020-03-28 00:58:11.993878 |
updated_at | 2024-06-30 22:27:53.547147 |
description | An assembler for custom, user-defined instruction sets! |
homepage | https://github.com/hlorenzi/customasm |
repository | https://github.com/hlorenzi/customasm |
max_upload_size | |
id | 223693 |
size | 565,896 |
customasm
is an assembler that allows you to provide your own custom
instruction sets to assemble your source files!
It can be useful, for example, if you're trying to test the bytecode of a new virtual machine,
or if you're eager to write programs for that new microprocessor architecture
you just implemented in an FPGA chip!
đĨī¸ Try it right now on your web browser!
đšī¸ Check out an example project which targets the NES!
â¨ī¸ Install the VSCode syntax highlight extension!
đ Check out the wiki for a changelog, documentation, and a how-to-start guide!
đ˛ Check out the command-line help! (Better formatted on the command-line itself)
You can install directly from crates.io by running cargo install customasm
.
Then the customasm
application should automatically become available in your
command-line environment.
You can also download pre-built executables from the Releases section.
You can compile from source yourself by first cloning the repository and
then simply running cargo build
.
There's also a battery of tests available at cargo test
.
Given the following file:
#ruledef
{
load r1, {value: i8} => 0x11 @ value
load r2, {value: i8} => 0x12 @ value
load r3, {value: i8} => 0x13 @ value
add r1, r2 => 0x21
sub r3, {value: i8} => 0x33 @ value
jnz {address: u16} => 0x40 @ address
ret => 0x50
}
multiply3x4:
load r1, 0
load r2, 3
load r3, 4
.loop:
add r1, r2
sub r3, 1
jnz .loop
ret
...the assembler will use the #ruledef
directive to convert the
instructions into binary code:
outp | addr | data (base 16)
0:0 | 0 | ; multiply3x4:
0:0 | 0 | 11 00 ; load r1, 0
2:0 | 2 | 12 03 ; load r2, 3
4:0 | 4 | 13 04 ; load r3, 4
6:0 | 6 | ; .loop:
6:0 | 6 | 21 ; add r1, r2
7:0 | 7 | 33 01 ; sub r3, 1
9:0 | 9 | 40 00 06 ; jnz .loop
c:0 | c | 50 ; ret