77 lines
1.3 KiB
Rust
77 lines
1.3 KiB
Rust
#![no_std]
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
|
|
pub enum Instruction {
|
|
NOP,
|
|
EXIT,
|
|
JUMP {
|
|
offset: i16,
|
|
count: u16,
|
|
},
|
|
MOV {
|
|
src: File,
|
|
dst: File,
|
|
},
|
|
FILL {
|
|
src: File,
|
|
dst: File,
|
|
},
|
|
ADD {
|
|
src0: File,
|
|
src1: File,
|
|
dst: File,
|
|
aam: bool,
|
|
},
|
|
MUL {
|
|
src0: File,
|
|
src1: File,
|
|
dst: File,
|
|
aam: bool,
|
|
},
|
|
MAC {
|
|
src0: File,
|
|
src1: File,
|
|
src2: File,
|
|
dst: File,
|
|
aam: bool,
|
|
},
|
|
MAD {
|
|
src0: File,
|
|
src1: File,
|
|
src2: File,
|
|
dst: File,
|
|
aam: bool,
|
|
},
|
|
}
|
|
|
|
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub enum File {
|
|
GrfA { index: u8 },
|
|
GrfB { index: u8 },
|
|
SrfM { index: u8 },
|
|
SrfA { index: u8 },
|
|
Bank,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct Kernel(pub [Instruction; 32]);
|
|
|
|
impl Kernel {
|
|
pub const NOP: Kernel = Kernel([Instruction::NOP; 32]);
|
|
}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
pub struct PimConfig {
|
|
pub bank_mode: BankMode,
|
|
pub kernel: Kernel,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
|
|
pub enum BankMode {
|
|
SingleBank,
|
|
AllBank,
|
|
PimAllBank,
|
|
}
|