Skip to content

bwburnsides/customasm

This branch is 1 commit ahead of, 26 commits behind hlorenzi/customasm:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

fd4032c Β· Dec 27, 2023
Jun 4, 2023
May 1, 2023
Dec 27, 2023
Apr 29, 2023
Dec 27, 2023
Jun 4, 2023
Apr 25, 2021
Jun 4, 2023
Apr 11, 2023
Oct 7, 2023
Mar 28, 2020
Oct 7, 2023
Apr 29, 2023
Mar 20, 2021
Jun 4, 2023
Jan 18, 2019
Jan 14, 2019
Sep 9, 2020

Repository files navigation

customasm

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!

crates.io Latest Release Releases

Discord

πŸ–₯️ Try it right now on your web browser!

πŸ•ΉοΈ Check out an example project which targets the NES!

⌨️ Install the VSCode syntax highlight extension!

❀️ Support the author!

Documentation

πŸ“š 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)

Installation

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.

Example

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

About

πŸ’» An assembler for custom, user-defined instruction sets! https://hlorenzi.github.io/customasm/web/

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 82.6%
  • Assembly 17.0%
  • Other 0.4%