aboutsummaryrefslogtreecommitdiff
path: root/crates/nasm
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <mikisabate@gmail.com>2024-12-11 12:50:16 +0100
committerMiquel Sabaté Solà <mikisabate@gmail.com>2024-12-12 07:57:16 +0100
commit6300f588bbe82b88fa8b0112a2432c6c63bb2c3f (patch)
treeb14592a20cd63fe03634dc0fdc5a1a8a570109b4 /crates/nasm
parentb1623996c76fe6089e6cb16d1e1a16d32d1c19c3 (diff)
downloadtools.nes-6300f588bbe82b88fa8b0112a2432c6c63bb2c3f.tar.gz
tools.nes-6300f588bbe82b88fa8b0112a2432c6c63bb2c3f.zip
nasm: Add a parameter for linker configuration
Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com>
Diffstat (limited to 'crates/nasm')
-rw-r--r--crates/nasm/src/main.rs24
1 files changed, 22 insertions, 2 deletions
diff --git a/crates/nasm/src/main.rs b/crates/nasm/src/main.rs
index fbe2bef..9d97507 100644
--- a/crates/nasm/src/main.rs
+++ b/crates/nasm/src/main.rs
@@ -3,7 +3,7 @@ use clap::Parser as ClapParser;
use std::fs::File;
use std::io::{self, Read, Write};
use xixanta::assembler::Assembler;
-use xixanta::mapping::NROM;
+use xixanta::mapping::{Segment, EMPTY, NROM, NROM65};
/// Assembler for the 6502 microprocessor that targets the NES.
#[derive(ClapParser, Debug)]
@@ -13,6 +13,10 @@ struct Args {
/// when this argument is not given.
file: Option<String>,
+ /// Linker configuration to be used. Defaults to 'nrom'.
+ #[arg(short = 'c', long)]
+ config: Option<String>,
+
/// Disassemble instead of assembling. Disabled by default.
#[arg(short, long, default_value_t = false)]
disassemble: bool,
@@ -31,7 +35,6 @@ struct Args {
fn main() -> Result<()> {
let args = Args::parse();
- let mut assembler = Assembler::new(NROM.to_vec());
// Select the input stream.
let input: Box<dyn Read> = match args.file {
@@ -53,6 +56,23 @@ fn main() -> Result<()> {
}
};
+ // Select the linker configuration.
+ let segments: Vec<Segment> = match args.config {
+ Some(c) => match c.to_lowercase().as_str() {
+ "empty" => EMPTY.to_vec(),
+ "nrom" => NROM.to_vec(),
+ "nrom65" => NROM65.to_vec(),
+ _ => {
+ println!("Unnown linker configuration '{}'", c);
+ std::process::exit(1);
+ }
+ },
+ None => NROM.to_vec(),
+ };
+
+ // Initialize the assembler with the given linker configuration.
+ let mut assembler = Assembler::new(segments);
+
// After the parse operation, just print the results.
if args.disassemble {
// let instructions = assembler.disassemble(input)?;