Skip to content
/ asm6502 Public
forked from bgourlie/asm6502

A simple 6502 assembler written in Rust

License

Notifications You must be signed in to change notification settings

rib/asm6502

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

asm6502

Build Status Crates.io

A work-in-progress 6502 assembler.

This assembler currently serves the immediate needs of my NES emulator. As such, it doesn't do anything except translate literal 6502 assembly into machine code. Not even labels are supported, and relative addresses must specify a numeric offset. Any contributions are welcome, however. I'd love for this to become a more fully-featured assembler.

Usage

use asm6502::assemble;

let asm = "LDA #1\nADC #1\nCMP #2".as_bytes();
let mut buf = Vec::<u8>::new();
if let Err(msg) = assemble(asm, &mut buf) {
     panic!("Failed to assemble: {}", msg);
}
 
assert_eq!(&[0xa9, 0x1, 0x69, 0x1, 0xc9, 0x2], &buf[..]);

The input and output parameters of the assemble function are generic over the Read and Write traits, respectively. A more typical usage of this function would accept an input file and an output file.

Known Issues

If the assembly ends with an implied instruction, it will need to be followed by a newline in order to be parsed correctly, and will fail to parse otherwise. See my StackOverflow question here documenting the issue and the work-in-progress nom pull request addressing the underlying issue.

About

A simple 6502 assembler written in Rust

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%