use crate::hw::cop0::status::{IM_HW, IM_SW0, IM_SW1};
use crate::hw::Register;
use core::fmt;
use core::fmt::{Debug, Formatter};
mod cause;
mod epc;
mod status;
#[derive(Debug)]
pub enum Mode {
Kernel = 0,
User = 1,
}
#[repr(u32)]
pub enum IntSrc {
Software0 = IM_SW0,
Software1 = IM_SW1,
Hardware = IM_HW,
}
#[derive(Debug, PartialEq, Eq)]
pub enum Excode {
Interrupt,
Syscall,
AddressErrorLoad,
AddressErrorStore,
Breakpoint,
ReservedInstruction,
Other,
}
define_cop! {
BPC<u32>; COP: 0; R: 3,
BDA<u32>; COP: 0; R: 5,
DCIC<u32>; COP: 0; R: 7,
BadVaddr<u32>; COP: 0; R: 8,
BDAM<u32>; COP: 0; R: 9,
BPCM<u32>; COP: 0; R: 11,
Status<u32>; COP: 0; R: 12,
Cause<u32>; COP: 0; R: 13,
EPC<u32>; COP: 0; R: 14,
PRID<u32>; COP: 0; R: 15,
}
impl Debug for BadVaddr {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.debug_struct("cop0::BadVaddr")
.field("bits", &self.to_bits())
.finish()
}
}