diff options
-rw-r--r-- | src/lib.rs | 14 | ||||
-rw-r--r-- | src/processor.rs | 12 |
2 files changed, 18 insertions, 8 deletions
@@ -10,7 +10,17 @@ pub use stack::*; #[derive(Copy, Clone, Debug)] pub enum Signal { - Debug, - Pause, + Debug(DebugVariant), + Sleep, Halt, } + +#[derive(Copy, Clone, Debug)] +pub enum DebugVariant { + DB1, + DB2, + DB3, + DB4, + DB5, + DB6, +} diff --git a/src/processor.rs b/src/processor.rs index debb398..cb1b2d5 100644 --- a/src/processor.rs +++ b/src/processor.rs @@ -87,7 +87,7 @@ impl<D: DeviceBus> Processor<D> { /* IOR */ 0x1E => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(x.bitor(y)); } /* XOR */ 0x1F => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(x.bitxor(y)); } - /* DBG */ 0x20 => { return Some(Signal::Debug); } + /* DB1 */ 0x20 => { return Some(Signal::Debug(DebugVariant::DB1)); } /* JSR */ 0x21 => { w_pop_16!(a); r_psh_16!(pc!()); jump!(a); } /* JSN */ 0x22 => { w_pop_16!(a); w_pop_8!(t); if t!=0 {r_psh_16!(pc!()); jump!(a)}; } /* JKN* */ 0x23 => { w_pop_16!(a); w_pop_16!(t); w_psh_16!(t); if t!=0 {jump!(a)}; } @@ -120,7 +120,7 @@ impl<D: DeviceBus> Processor<D> { /* IOR* */ 0x3E => { w_pop_16!(y); w_pop_16!(x); w_psh_16!(x.bitor(y)); } /* XOR* */ 0x3F => { w_pop_16!(y); w_pop_16!(x); w_psh_16!(x.bitxor(y)); }, - /* -- */ 0x40 => { } + /* DB2 */ 0x40 => { return Some(Signal::Debug(DebugVariant::DB2)); } /* JMP: */ 0x41 => { m_lit_16!(a); jump!(a); } /* JCN: */ 0x42 => { m_lit_16!(a); w_pop_8!(t); if t!=0{jump!(a)}; } /* JKN: */ 0x43 => { m_lit_16!(a); w_pop_8!(t); w_psh_8!(t); if t!=0{jump!(a)}; } @@ -153,7 +153,7 @@ impl<D: DeviceBus> Processor<D> { /* IOR: */ 0x5E => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(x.bitor(y)); } /* XOR: */ 0x5F => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(x.bitxor(y)); }, - /* -- */ 0x60 => { } + /* DB3 */ 0x60 => { return Some(Signal::Debug(DebugVariant::DB3)); } /* JSR: */ 0x61 => { m_lit_16!(a); r_psh_16!(pc!()); jump!(a); } /* JSN: */ 0x62 => { m_lit_16!(a); w_pop_8!(t); if t!=0 {r_psh_16!(pc!()); jump!(a)}; } /* JKN*: */ 0x63 => { m_lit_16!(a); w_pop_16!(t); w_psh_16!(t); if t!=0 {jump!(a)}; } @@ -186,7 +186,7 @@ impl<D: DeviceBus> Processor<D> { /* IOR*: */ 0x7E => { m_lit_16!(y); w_pop_16!(x); w_psh_16!(x.bitor(y)); } /* XOR*: */ 0x7F => { m_lit_16!(y); w_pop_16!(x); w_psh_16!(x.bitxor(y)); }, - /* -- */ 0x80 => { } + /* DB4 */ 0x80 => { return Some(Signal::Debug(DebugVariant::DB4)); } /* JMPr */ 0x81 => { r_pop_16!(a); jump!(a); } /* JCNr */ 0x82 => { r_pop_16!(a); r_pop_8!(t); if t!=0{jump!(a)}; } /* JKNr */ 0x83 => { r_pop_16!(a); r_pop_8!(t); r_psh_8!(t); if t!=0{jump!(a)}; } @@ -220,7 +220,7 @@ impl<D: DeviceBus> Processor<D> { /* XORr */ 0x9F => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(x.bitxor(y)); }, - /* -- */ 0xA0 => { } + /* DB5 */ 0xA0 => { return Some(Signal::Debug(DebugVariant::DB5)); } /* JSRr */ 0xA1 => { r_pop_16!(a); w_psh_16!(pc!()); jump!(a); } /* JSNr */ 0xA2 => { r_pop_16!(a); r_pop_8!(t); if t!=0 {w_psh_16!(pc!()); jump!(a)}; } /* JKNr* */ 0xA3 => { r_pop_16!(a); r_pop_16!(t); r_psh_16!(t); if t!=0 {jump!(a)}; } @@ -253,7 +253,7 @@ impl<D: DeviceBus> Processor<D> { /* IORr* */ 0xBE => { r_pop_16!(y); r_pop_16!(x); r_psh_16!(x.bitor(y)); } /* XORr* */ 0xBF => { r_pop_16!(y); r_pop_16!(x); r_psh_16!(x.bitxor(y)); }, - /* -- */ 0xC0 => { } + /* DB6 */ 0xC0 => { return Some(Signal::Debug(DebugVariant::DB6)); } /* JMPr: */ 0xC1 => { m_lit_16!(a); jump!(a); } /* JCNr: */ 0xC2 => { m_lit_16!(a); r_pop_8!(t); if t!=0{jump!(a)}; } /* JKNr: */ 0xC3 => { m_lit_16!(a); r_pop_8!(t); r_psh_8!(t); if t!=0{jump!(a)}; } |