diff options
author | iximeow <me@iximeow.net> | 2019-01-16 03:49:00 -0800 |
---|---|---|
committer | iximeow <me@iximeow.net> | 2020-01-12 17:28:04 -0800 |
commit | db88790238ea787e6845a7638d86218e3b5892d2 (patch) | |
tree | f717072a53c74d7459c9cd75471e2b92bd01aae6 |
initial commit
-rw-r--r-- | Cargo.toml | 17 | ||||
-rw-r--r-- | src/lib.rs | 46 |
2 files changed, 63 insertions, 0 deletions
diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..93c69b3 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,17 @@ +[package] + +name = "yaxpeax-pic24" +version = "0.0.1" +authors = [ "iximeow <me@iximeow.net>" ] +license = "0BSD" +repository = "" +description = """ +A rust pic24 decoder +""" + +[dependencies] +yaxpeax-arch = { path = "../../yaxpeax-arch" } + +[[test]] +name = "test" +path = "test/test.rs" diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..1ef6f13 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,46 @@ +extern crate yaxpeax_arch; + +use yaxpeax_arch::{Arch, Decodable, LengthedInstruction}; + +#[derive(Debug)] +pub enum Opcode { + NOP +} + +#[derive(Debug)] +pub struct Instruction { + pub opcode: Opcode +} + +impl LengthedInstruction for Instruction { + type Unit = <PIC24 as Arch>::Address; + fn len(&self) -> Self::Unit { + 3 // ish + } +} + +impl Decodable for Instruction { + fn decode<'a, T: IntoIterator<Item=&'a u8>>(bytes: T) -> Option<Self> { + let mut blank = Instruction { opcode: Opcode::NOP }; + match blank.decode_into(bytes) { + Some(_) => Some(blank), + None => None + } + } + fn decode_into<'a, T: IntoIterator<Item=&'a u8>>(&mut self, bytes: T) -> Option<()> { + match bytes.into_iter().next() { + Some(0x00) => { + self.opcode = Opcode::NOP; + Some(()) + }, + _ => None + } + } +} + +pub struct PIC24; +impl Arch for PIC24 { + type Address = u32; + type Instruction = Instruction; + type Operand = (); +} |