summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib.rs14
-rw-r--r--src/processor.rs12
2 files changed, 18 insertions, 8 deletions
diff --git a/src/lib.rs b/src/lib.rs
index f04b18d..9161ba3 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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)}; }