[−][src]Crate imperative_rs
This crate provides the InstructionSet
-trait and corresponding error types, as well as
a procedural macro automatically derive the trait for enum
s. A type implementing
InstructionSet
provides fn InstructionSet::decode(...) -> {...}
to decode instructions from a &[u8]
and fn InstructionSet::encode(...) -> {...}
to encode and write an instruction into a &[u8]
.
use imperative_rs::InstructionSet; #[derive(InstructionSet, PartialEq, Debug)] enum Is { //constant opcode #[opcode = "0x0000"] Nop, //hex opcode with split variable x #[opcode = "0x1x0x"] Inc{x:u8}, //hex opcode with three renamed variables #[ opcode = "0x2xxyyzz" ] Add{ #[variable = "x"] reg:u8, #[variable = "y"] lhs:u8, #[variable = "z"] rhs:u8}, //bin opcode with two variables and underscores for readability #[ opcode = "0b100000000_xxxxyyyy_xyxyxyxy" ] Mov{x:u8, y:i8}, } fn main() { let mut mem = [0u8; 1024]; let (num_bytes, instr) = Is::decode(&mem).unwrap(); assert_eq!(num_bytes, 2); assert_eq!(instr, Is::Nop); let instruction = Is::Add{reg:0xab, lhs:0xcd, rhs:0xef}; assert_eq!(4, instruction.encode(&mut mem[100..]).unwrap()); assert_eq!([0x2a, 0xbc, 0xde, 0xf0], mem[100..104]) }
Enums
DecodeError | This type is returned by |
EncodeError | This Type is returned by |
Traits
InstructionSet | This |