Add utility binaries for disassembly and screenshot viewing
This commit is contained in:
parent
73a69f3469
commit
5355e10218
11
Cargo.toml
11
Cargo.toml
@ -4,6 +4,17 @@ version = "0.1.0"
|
|||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
[profile.release]
|
||||||
|
opt-level = 'z'
|
||||||
|
debug = false
|
||||||
|
rpath = false
|
||||||
|
lto = true
|
||||||
|
debug-assertions = false
|
||||||
|
codegen-units = 1
|
||||||
|
panic = 'unwind'
|
||||||
|
incremental = true
|
||||||
|
overflow-checks = false
|
||||||
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
gumdrop = "0.8.1"
|
gumdrop = "0.8.1"
|
||||||
|
40
src/bin/chirp-disasm.rs
Normal file
40
src/bin/chirp-disasm.rs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
use chirp::{error::Result, prelude::*};
|
||||||
|
use gumdrop::*;
|
||||||
|
use std::{fs::read, path::PathBuf};
|
||||||
|
use owo_colors::OwoColorize;
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Options, Hash)]
|
||||||
|
struct Arguments {
|
||||||
|
#[options(help = "Show help text")]
|
||||||
|
help: bool,
|
||||||
|
#[options(help = "Load a ROM to run on Chirp", free, required)]
|
||||||
|
pub file: PathBuf,
|
||||||
|
#[options(help = "Load address (usually 200)", parse(try_from_str = "parse_hex"))]
|
||||||
|
pub loadaddr: u16,
|
||||||
|
#[options(help = "Start disassembling at offset...")]
|
||||||
|
pub offset: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_hex(value: &str) -> std::result::Result<u16, std::num::ParseIntError> {
|
||||||
|
u16::from_str_radix(value, 16)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() -> Result<()> {
|
||||||
|
let options = Arguments::parse_args_default_or_exit();
|
||||||
|
let contents = &read(&options.file)?;
|
||||||
|
let disassembler = Disassemble::default();
|
||||||
|
for (addr, insn) in contents[options.offset..].chunks_exact(2).enumerate() {
|
||||||
|
let insn = u16::from_be_bytes(
|
||||||
|
insn.try_into()
|
||||||
|
.expect("Iterated over 2-byte chunks, got <2 bytes"),
|
||||||
|
);
|
||||||
|
println!(
|
||||||
|
"{:03x}: {} {:04x}",
|
||||||
|
2 * addr + 0x200 + options.offset,
|
||||||
|
disassembler.instruction(insn),
|
||||||
|
insn.bright_black(),
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
7
src/bin/chirp-shot-viewer.rs
Normal file
7
src/bin/chirp-shot-viewer.rs
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
use chirp::{error::Result, prelude::*};
|
||||||
|
use std::{env::args, fs::read};
|
||||||
|
|
||||||
|
fn main() -> Result<()> {
|
||||||
|
bus! {Screen [0..0x100] = &read(args().nth(1).unwrap_or("screen_dump.bin".to_string()))?}
|
||||||
|
.print_screen()
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user