diff options
author | Ben Bridle <bridle.benjamin@gmail.com> | 2024-01-20 14:34:09 +1300 |
---|---|---|
committer | Ben Bridle <bridle.benjamin@gmail.com> | 2024-01-20 19:25:17 +1300 |
commit | 82b5f5c1cfc5c164e357b7ac02ce3f8417faa260 (patch) | |
tree | b4a9761ea491ce059a67c45dcfb8c04bc9bd2670 /src | |
parent | 2b16a99ba3d1ba6536a1db28471288a0c2274a71 (diff) | |
download | bedrock-core-82b5f5c1cfc5c164e357b7ac02ce3f8417faa260.zip |
Change processor code to match updated Bedrock specificationv2.0.0
- The LKD and SKD operations have been removed
- SHF/SHC have been moved to after LDD/STD
- SWP/ROT/DUP/OVR have been rearranged to be DUP/OVR/SWP/ROT
- NOT/AND have been rearranged to be AND/NOT
- PSK has been added, placed after PSH
- SPL has been added, placed after POP
Diffstat (limited to 'src')
-rw-r--r-- | src/processor.rs | 346 |
1 files changed, 173 insertions, 173 deletions
diff --git a/src/processor.rs b/src/processor.rs index fc1cfa4..debb398 100644 --- a/src/processor.rs +++ b/src/processor.rs @@ -46,9 +46,9 @@ impl<D: DeviceBus> Processor<D> { macro_rules! jump { ($a:expr) => { self.mem.write_pc($a) }; } macro_rules! pc { () => { self.mem.read_pc() }; } macro_rules! truth { ($x:expr) => { if $x {0xff} else {0x00} }; } - macro_rules! nyb { ($v:expr=>$h:ident,$l:ident) => { let $h=($v>>4) as u32; let $l=($v&0x0f) as u32; } } - macro_rules! shf { ($x:expr,$y:expr) => { { nyb!($y=>l,r); $x.wrapping_shl(l).wrapping_shr(r) } } ; } - macro_rules! shc { ($x:expr,$y:expr) => { { nyb!($y=>l,r); $x.rotate_left(l).rotate_right(r) } }; } + macro_rules! nyb { ($v:expr=>$h:ident,$l:ident) => { let $h=($v>>4); let $l=($v&0x0f); } } + macro_rules! shf { ($x:expr,$y:expr) => { { nyb!($y=>l,r); $x.wrapping_shl(l as u32).wrapping_shr(r as u32) } } ; } + macro_rules! shc { ($x:expr,$y:expr) => { { nyb!($y=>l,r); $x.rotate_left( l as u32).rotate_right(r as u32) } }; } for _ in 0..num_cycles { self.cycles += 1; @@ -63,29 +63,29 @@ impl<D: DeviceBus> Processor<D> { /* LTH */ 0x06 => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(truth!(x <y)); } /* GTH */ 0x07 => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(truth!(x >y)); } /* LDA */ 0x08 => { w_pop_16!(a); w_psh_8!(m_read_8!(a)); } - /* LKA */ 0x09 => { w_pop_16!(a); w_psh_16!(a); w_psh_8!(m_read_8!(a)); } - /* STA */ 0x0A => { w_pop_16!(a); w_pop_8!(v); m_write_8!(v,a); } + /* STA */ 0x09 => { w_pop_16!(a); w_pop_8!(v); m_write_8!(v,a); } + /* LKA */ 0x0A => { w_pop_16!(a); w_psh_16!(a); w_psh_8!(m_read_8!(a)); } /* SKA */ 0x0B => { w_pop_8!(v); w_pop_16!(a); w_psh_16!(a); m_write_8!(v,a); } - /* LDD */ 0x0C => { w_pop_8!(p); w_psh_8!(d_read_8!(p)); }, - /* LKD */ 0x0D => { w_pop_8!(p); w_psh_8!(p); w_psh_8!(d_read_8!(p)); }, - /* STD */ 0x0E => { w_pop_8!(p); w_pop_8!(v); d_write_8!(v,p); }, - /* SKD */ 0x0F => { w_pop_8!(p); w_pop_8!(v); w_psh_8!(v); d_write_8!(v,p); }, - /* PSH */ 0x10 => { r_pop_8!(x); w_psh_8!(x); }, - /* POP */ 0x11 => { w_pop_8!(_x); }, - /* SHF */ 0x12 => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(shf!(x,y)); }, - /* SHC */ 0x13 => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(shc!(x,y)); }, - /* SWP */ 0x14 => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(y); w_psh_8!(x); }, - /* ROT */ 0x15 => { w_pop_8!(z); w_pop_8!(y); w_pop_8!(x); w_psh_8!(y); w_psh_8!(z); w_psh_8!(x); }, - /* DUP */ 0x16 => { w_pop_8!(x); w_psh_8!(x); w_psh_8!(x); }, - /* OVR */ 0x17 => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(x); w_psh_8!(y); w_psh_8!(x); }, - /* ADD */ 0x18 => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(x.wrapping_add(y)); }, - /* SUB */ 0x19 => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(x.wrapping_sub(y)); }, - /* INC */ 0x1A => { w_pop_8!(x); w_psh_8!(x.wrapping_add(1)); }, - /* DEC */ 0x1B => { w_pop_8!(x); w_psh_8!(x.wrapping_sub(1)); }, - /* NOT */ 0x1C => { w_pop_8!(x); w_psh_8!(x.not()); }, - /* AND */ 0x1D => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(x.bitand(y)); }, - /* 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)); }, + /* LDD */ 0x0C => { w_pop_8!(p); w_psh_8!(d_read_8!(p)); } + /* STD */ 0x0D => { w_pop_8!(p); w_pop_8!(v); d_write_8!(v,p); } + /* SHF */ 0x0E => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(shf!(x,y)); } + /* SHC */ 0x0F => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(shc!(x,y)); } + /* PSH */ 0x10 => { r_pop_8!(x); w_psh_8!(x); } + /* PSK */ 0x11 => { r_pop_8!(x); r_psh_8!(x); w_psh_8!(x); } + /* POP */ 0x12 => { w_pop_8!(_x); } + /* SPL */ 0x13 => { w_pop_8!(x); nyb!(x=>a,b); w_psh_8!(a); w_psh_8!(b); } + /* DUP */ 0x14 => { w_pop_8!(x); w_psh_8!(x); w_psh_8!(x); } + /* OVR */ 0x15 => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(x); w_psh_8!(y); w_psh_8!(x); } + /* SWP */ 0x16 => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(y); w_psh_8!(x); } + /* ROT */ 0x17 => { w_pop_8!(z); w_pop_8!(y); w_pop_8!(x); w_psh_8!(y); w_psh_8!(z); w_psh_8!(x); } + /* ADD */ 0x18 => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(x.wrapping_add(y)); } + /* SUB */ 0x19 => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(x.wrapping_sub(y)); } + /* INC */ 0x1A => { w_pop_8!(x); w_psh_8!(x.wrapping_add(1)); } + /* DEC */ 0x1B => { w_pop_8!(x); w_psh_8!(x.wrapping_sub(1)); } + /* AND */ 0x1C => { w_pop_8!(y); w_pop_8!(x); w_psh_8!(x.bitand(y)); } + /* NOT */ 0x1D => { w_pop_8!(x); w_psh_8!(x.not()); } + /* 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); } /* JSR */ 0x21 => { w_pop_16!(a); r_psh_16!(pc!()); jump!(a); } @@ -96,28 +96,28 @@ impl<D: DeviceBus> Processor<D> { /* LTH* */ 0x26 => { w_pop_16!(y); w_pop_16!(x); w_psh_8!(truth!(x <y)); } /* GTH* */ 0x27 => { w_pop_16!(y); w_pop_16!(x); w_psh_8!(truth!(x >y)); } /* LDA* */ 0x28 => { w_pop_16!(a); w_psh_16!(m_read_16!(a)); } - /* LKA* */ 0x29 => { w_pop_16!(a); w_psh_16!(a); w_psh_16!(m_read_16!(a)); } - /* STA* */ 0x2A => { w_pop_16!(a); w_pop_16!(v); m_write_16!(v,a); } + /* STA* */ 0x29 => { w_pop_16!(a); w_pop_16!(v); m_write_16!(v,a); } + /* LKA* */ 0x2A => { w_pop_16!(a); w_psh_16!(a); w_psh_16!(m_read_16!(a)); } /* SKA* */ 0x2B => { w_pop_16!(v); w_pop_16!(a); w_psh_16!(a); m_write_16!(v,a); } - /* LDD* */ 0x2C => { w_pop_8!(p); w_psh_16!(d_read_16!(p)); }, - /* LKD* */ 0x2D => { w_pop_8!(p); w_psh_8!(p); w_psh_16!(d_read_16!(p)); }, - /* STD* */ 0x2E => { w_pop_8!(p); w_pop_16!(v); d_write_16!(v,p); }, - /* SKD* */ 0x2F => { w_pop_8!(p); w_pop_16!(v); w_psh_16!(v); d_write_16!(v,p); }, - /* PSH* */ 0x30 => { r_pop_16!(x); w_psh_16!(x); }, - /* POP* */ 0x31 => { w_pop_16!(_x); }, - /* SHF* */ 0x32 => { w_pop_8!(y); w_pop_16!(x); w_psh_16!(shf!(x,y)); }, - /* SHC* */ 0x33 => { w_pop_8!(y); w_pop_16!(x); w_psh_16!(shc!(x,y)); }, - /* SWP* */ 0x34 => { w_pop_16!(y); w_pop_16!(x); w_psh_16!(y); w_psh_16!(x); }, - /* ROT* */ 0x35 => { w_pop_16!(z); w_pop_16!(y); w_pop_16!(x); w_psh_16!(y); w_psh_16!(z); w_psh_16!(x); }, - /* DUP* */ 0x36 => { w_pop_16!(x); w_psh_16!(x); w_psh_16!(x); }, - /* OVR* */ 0x37 => { w_pop_16!(y); w_pop_16!(x); w_psh_16!(x); w_psh_16!(y); w_psh_16!(x); }, - /* ADD* */ 0x38 => { w_pop_16!(y); w_pop_16!(x); w_psh_16!(x.wrapping_add(y)); }, - /* SUB* */ 0x39 => { w_pop_16!(y); w_pop_16!(x); w_psh_16!(x.wrapping_sub(y)); }, - /* INC* */ 0x3A => { w_pop_16!(x); w_psh_16!(x.wrapping_add(1)); }, - /* DEC* */ 0x3B => { w_pop_16!(x); w_psh_16!(x.wrapping_sub(1)); }, - /* NOT* */ 0x3C => { w_pop_16!(x); w_psh_16!(x.not()); }, - /* AND* */ 0x3D => { w_pop_16!(y); w_pop_16!(x); w_psh_16!(x.bitand(y)); }, - /* IOR* */ 0x3E => { w_pop_16!(y); w_pop_16!(x); w_psh_16!(x.bitor(y)); }, + /* LDD* */ 0x2C => { w_pop_8!(p); w_psh_16!(d_read_16!(p)); } + /* STD* */ 0x2D => { w_pop_8!(p); w_pop_16!(v); d_write_16!(v,p); } + /* SHF* */ 0x2E => { w_pop_8!(y); w_pop_16!(x); w_psh_16!(shf!(x,y)); } + /* SHC* */ 0x2F => { w_pop_8!(y); w_pop_16!(x); w_psh_16!(shc!(x,y)); } + /* PSH* */ 0x30 => { r_pop_16!(x); w_psh_16!(x); } + /* PSK* */ 0x31 => { r_pop_16!(x); r_psh_16!(x); w_psh_16!(x); } + /* POP* */ 0x32 => { w_pop_16!(_x); } + /* SPL* */ 0x33 => { w_pop_8!(y); w_pop_8!(x); nyb!(x=>a,b); nyb!(y=>c,d); w_psh_8!(a); w_psh_8!(b); w_psh_8!(c); w_psh_8!(d); } + /* DUP* */ 0x34 => { w_pop_16!(x); w_psh_16!(x); w_psh_16!(x); } + /* OVR* */ 0x35 => { w_pop_16!(y); w_pop_16!(x); w_psh_16!(x); w_psh_16!(y); w_psh_16!(x); } + /* SWP* */ 0x36 => { w_pop_16!(y); w_pop_16!(x); w_psh_16!(y); w_psh_16!(x); } + /* ROT* */ 0x37 => { w_pop_16!(z); w_pop_16!(y); w_pop_16!(x); w_psh_16!(y); w_psh_16!(z); w_psh_16!(x); } + /* ADD* */ 0x38 => { w_pop_16!(y); w_pop_16!(x); w_psh_16!(x.wrapping_add(y)); } + /* SUB* */ 0x39 => { w_pop_16!(y); w_pop_16!(x); w_psh_16!(x.wrapping_sub(y)); } + /* INC* */ 0x3A => { w_pop_16!(x); w_psh_16!(x.wrapping_add(1)); } + /* DEC* */ 0x3B => { w_pop_16!(x); w_psh_16!(x.wrapping_sub(1)); } + /* AND* */ 0x3C => { w_pop_16!(y); w_pop_16!(x); w_psh_16!(x.bitand(y)); } + /* NOT* */ 0x3D => { w_pop_16!(x); w_psh_16!(x.not()); } + /* 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 => { } @@ -129,28 +129,28 @@ impl<D: DeviceBus> Processor<D> { /* LTH: */ 0x46 => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(truth!(x <y)); } /* GTH: */ 0x47 => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(truth!(x >y)); } /* LDA: */ 0x48 => { m_lit_16!(a); w_psh_8!(m_read_8!(a)); } - /* LKA: */ 0x49 => { m_lit_16!(a); w_psh_16!(a); w_psh_8!(m_read_8!(a)); } - /* STA: */ 0x4A => { m_lit_16!(a); w_pop_8!(v); m_write_8!(v,a); } + /* STA: */ 0x49 => { m_lit_16!(a); w_pop_8!(v); m_write_8!(v,a); } + /* LKA: */ 0x4A => { m_lit_16!(a); w_psh_16!(a); w_psh_8!(m_read_8!(a)); } /* SKA: */ 0x4B => { m_lit_8!(v); w_pop_16!(a); w_psh_16!(a); m_write_8!(v,a); } - /* LDD: */ 0x4C => { m_lit_8!(p); w_psh_8!(d_read_8!(p)); }, - /* LKD: */ 0x4D => { m_lit_8!(p); w_psh_8!(p); w_psh_8!(d_read_8!(p)); }, - /* STD: */ 0x4E => { m_lit_8!(p); w_pop_8!(v); d_write_8!(v,p); }, - /* SKD: */ 0x4F => { m_lit_8!(p); w_pop_8!(v); w_psh_8!(v); d_write_8!(v,p); }, - /* PSH: */ 0x50 => { m_lit_8!(x); w_psh_8!(x); }, - /* POP: */ 0x51 => { m_lit_8!(_x); }, - /* SHF: */ 0x52 => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(shf!(x,y)); }, - /* SHC: */ 0x53 => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(shc!(x,y)); }, - /* SWP: */ 0x54 => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(y); w_psh_8!(x); }, - /* ROT: */ 0x55 => { m_lit_8!(z); w_pop_8!(y); w_pop_8!(x); w_psh_8!(y); w_psh_8!(z); w_psh_8!(x); }, - /* DUP: */ 0x56 => { m_lit_8!(x); w_psh_8!(x); w_psh_8!(x); }, - /* OVR: */ 0x57 => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(x); w_psh_8!(y); w_psh_8!(x); }, - /* ADD: */ 0x58 => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(x.wrapping_add(y)); }, - /* SUB: */ 0x59 => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(x.wrapping_sub(y)); }, - /* INC: */ 0x5A => { m_lit_8!(x); w_psh_8!(x.wrapping_add(1)); }, - /* DEC: */ 0x5B => { m_lit_8!(x); w_psh_8!(x.wrapping_sub(1)); }, - /* NOT: */ 0x5C => { m_lit_8!(x); w_psh_8!(x.not()); }, - /* AND: */ 0x5D => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(x.bitand(y)); }, - /* IOR: */ 0x5E => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(x.bitor(y)); }, + /* LDD: */ 0x4C => { m_lit_8!(p); w_psh_8!(d_read_8!(p)); } + /* STD: */ 0x4D => { m_lit_8!(p); w_pop_8!(v); d_write_8!(v,p); } + /* SHF: */ 0x4E => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(shf!(x,y)); } + /* SHC: */ 0x4F => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(shc!(x,y)); } + /* PSH: */ 0x50 => { m_lit_8!(x); w_psh_8!(x); } + /* PSK: */ 0x51 => { m_lit_8!(x); r_psh_8!(x); w_psh_8!(x); } + /* POP: */ 0x52 => { m_lit_8!(_x); } + /* SPL: */ 0x53 => { m_lit_8!(x); nyb!(x=>a,b); w_psh_8!(a); w_psh_8!(b); } + /* DUP: */ 0x54 => { m_lit_8!(x); w_psh_8!(x); w_psh_8!(x); } + /* OVR: */ 0x55 => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(x); w_psh_8!(y); w_psh_8!(x); } + /* SWP: */ 0x56 => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(y); w_psh_8!(x); } + /* ROT: */ 0x57 => { m_lit_8!(z); w_pop_8!(y); w_pop_8!(x); w_psh_8!(y); w_psh_8!(z); w_psh_8!(x); } + /* ADD: */ 0x58 => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(x.wrapping_add(y)); } + /* SUB: */ 0x59 => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(x.wrapping_sub(y)); } + /* INC: */ 0x5A => { m_lit_8!(x); w_psh_8!(x.wrapping_add(1)); } + /* DEC: */ 0x5B => { m_lit_8!(x); w_psh_8!(x.wrapping_sub(1)); } + /* AND: */ 0x5C => { m_lit_8!(y); w_pop_8!(x); w_psh_8!(x.bitand(y)); } + /* NOT: */ 0x5D => { m_lit_8!(x); w_psh_8!(x.not()); } + /* 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 => { } @@ -162,28 +162,28 @@ impl<D: DeviceBus> Processor<D> { /* LTH*: */ 0x66 => { m_lit_16!(y); w_pop_16!(x); w_psh_8!(truth!(x <y)); } /* GTH*: */ 0x67 => { m_lit_16!(y); w_pop_16!(x); w_psh_8!(truth!(x >y)); } /* LDA*: */ 0x68 => { m_lit_16!(a); w_psh_16!(m_read_16!(a)); } - /* LKA*: */ 0x69 => { m_lit_16!(a); w_psh_16!(a); w_psh_16!(m_read_16!(a)); } - /* STA*: */ 0x6A => { m_lit_16!(a); w_pop_16!(v); m_write_16!(v,a); } + /* STA*: */ 0x69 => { m_lit_16!(a); w_pop_16!(v); m_write_16!(v,a); } + /* LKA*: */ 0x6A => { m_lit_16!(a); w_psh_16!(a); w_psh_16!(m_read_16!(a)); } /* SKA*: */ 0x6B => { m_lit_16!(v); w_pop_16!(a); w_psh_16!(a); m_write_16!(v,a); } - /* LDD*: */ 0x6C => { m_lit_8!(p); w_psh_16!(d_read_16!(p)); }, - /* LKD*: */ 0x6D => { m_lit_8!(p); w_psh_8!(p); w_psh_16!(d_read_16!(p)); }, - /* STD*: */ 0x6E => { m_lit_8!(p); w_pop_16!(v); d_write_16!(v,p); }, - /* SKD*: */ 0x6F => { m_lit_8!(p); w_pop_16!(v); w_psh_16!(v); d_write_16!(v,p); }, - /* PSH*: */ 0x70 => { m_lit_16!(x); w_psh_16!(x); }, - /* POP*: */ 0x71 => { m_lit_16!(_x); }, - /* SHF*: */ 0x72 => { m_lit_8!(y); w_pop_16!(x); w_psh_16!(shf!(x,y)); }, - /* SHC*: */ 0x73 => { m_lit_8!(y); w_pop_16!(x); w_psh_16!(shc!(x,y)); }, - /* SWP*: */ 0x74 => { m_lit_16!(y); w_pop_16!(x); w_psh_16!(y); w_psh_16!(x); }, - /* ROT*: */ 0x75 => { m_lit_16!(z); w_pop_16!(y); w_pop_16!(x); w_psh_16!(y); w_psh_16!(z); w_psh_16!(x); }, - /* DUP*: */ 0x76 => { m_lit_16!(x); w_psh_16!(x); w_psh_16!(x); }, - /* OVR*: */ 0x77 => { m_lit_16!(y); w_pop_16!(x); w_psh_16!(x); w_psh_16!(y); w_psh_16!(x); }, - /* ADD*: */ 0x78 => { m_lit_16!(y); w_pop_16!(x); w_psh_16!(x.wrapping_add(y)); }, - /* SUB*: */ 0x79 => { m_lit_16!(y); w_pop_16!(x); w_psh_16!(x.wrapping_sub(y)); }, - /* INC*: */ 0x7A => { m_lit_16!(x); w_psh_16!(x.wrapping_add(1)); }, - /* DEC*: */ 0x7B => { m_lit_16!(x); w_psh_16!(x.wrapping_sub(1)); }, - /* NOT*: */ 0x7C => { m_lit_16!(x); w_psh_16!(x.not()); }, - /* AND*: */ 0x7D => { m_lit_16!(y); w_pop_16!(x); w_psh_16!(x.bitand(y)); }, - /* IOR*: */ 0x7E => { m_lit_16!(y); w_pop_16!(x); w_psh_16!(x.bitor(y)); }, + /* LDD*: */ 0x6C => { m_lit_8!(p); w_psh_16!(d_read_16!(p)); } + /* STD*: */ 0x6D => { m_lit_8!(p); w_pop_16!(v); d_write_16!(v,p); } + /* SHF*: */ 0x6E => { m_lit_8!(y); w_pop_16!(x); w_psh_16!(shf!(x,y)); } + /* SHC*: */ 0x6F => { m_lit_8!(y); w_pop_16!(x); w_psh_16!(shc!(x,y)); } + /* PSH*: */ 0x70 => { m_lit_16!(x); w_psh_16!(x); } + /* PSK*: */ 0x71 => { m_lit_16!(x); r_psh_16!(x); w_psh_16!(x); } + /* POP*: */ 0x72 => { m_lit_16!(_x); } + /* SPL*: */ 0x73 => { m_lit_8!(x); m_lit_8!(y); nyb!(x=>a,b); nyb!(y=>c,d); w_psh_8!(a); w_psh_8!(b); w_psh_8!(c); w_psh_8!(d); } + /* DUP*: */ 0x74 => { m_lit_16!(x); w_psh_16!(x); w_psh_16!(x); } + /* OVR*: */ 0x75 => { m_lit_16!(y); w_pop_16!(x); w_psh_16!(x); w_psh_16!(y); w_psh_16!(x); } + /* SWP*: */ 0x76 => { m_lit_16!(y); w_pop_16!(x); w_psh_16!(y); w_psh_16!(x); } + /* ROT*: */ 0x77 => { m_lit_16!(z); w_pop_16!(y); w_pop_16!(x); w_psh_16!(y); w_psh_16!(z); w_psh_16!(x); } + /* ADD*: */ 0x78 => { m_lit_16!(y); w_pop_16!(x); w_psh_16!(x.wrapping_add(y)); } + /* SUB*: */ 0x79 => { m_lit_16!(y); w_pop_16!(x); w_psh_16!(x.wrapping_sub(y)); } + /* INC*: */ 0x7A => { m_lit_16!(x); w_psh_16!(x.wrapping_add(1)); } + /* DEC*: */ 0x7B => { m_lit_16!(x); w_psh_16!(x.wrapping_sub(1)); } + /* AND*: */ 0x7C => { m_lit_16!(y); w_pop_16!(x); w_psh_16!(x.bitand(y)); } + /* NOT*: */ 0x7D => { m_lit_16!(x); w_psh_16!(x.not()); } + /* 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 => { } @@ -195,28 +195,28 @@ impl<D: DeviceBus> Processor<D> { /* LTHr */ 0x86 => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(truth!(x <y)); } /* GTHr */ 0x87 => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(truth!(x >y)); } /* LDAr */ 0x88 => { r_pop_16!(a); r_psh_8!(m_read_8!(a)); } - /* LKAr */ 0x89 => { r_pop_16!(a); r_psh_16!(a); r_psh_8!(m_read_8!(a)); } - /* STAr */ 0x8A => { r_pop_16!(a); r_pop_8!(v); m_write_8!(v,a); } + /* STAr */ 0x89 => { r_pop_16!(a); r_pop_8!(v); m_write_8!(v,a); } + /* LKAr */ 0x8A => { r_pop_16!(a); r_psh_16!(a); r_psh_8!(m_read_8!(a)); } /* SKAr */ 0x8B => { r_pop_8!(v); r_pop_16!(a); r_psh_16!(a); m_write_8!(v,a); } - /* LDDr */ 0x8C => { r_pop_8!(p); r_psh_8!(d_read_8!(p)); }, - /* LKDr */ 0x8D => { r_pop_8!(p); r_psh_8!(p); r_psh_8!(d_read_8!(p)); }, - /* STDr */ 0x8E => { r_pop_8!(p); r_pop_8!(v); d_write_8!(v,p); }, - /* SKDr */ 0x8F => { r_pop_8!(p); r_pop_8!(v); r_psh_8!(v); d_write_8!(v,p); }, - /* PSHr */ 0x90 => { w_pop_8!(x); r_psh_8!(x); }, - /* POPr */ 0x91 => { r_pop_8!(_x); }, - /* SHFr */ 0x92 => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(shf!(x,y)); }, - /* SHCr */ 0x93 => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(shc!(x,y)); }, - /* SWPr */ 0x94 => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(y); r_psh_8!(x); }, - /* ROTr */ 0x95 => { r_pop_8!(z); r_pop_8!(y); r_pop_8!(x); r_psh_8!(y); r_psh_8!(z); r_psh_8!(x); }, - /* DUPr */ 0x96 => { r_pop_8!(x); r_psh_8!(x); r_psh_8!(x); }, - /* OVRr */ 0x97 => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(x); r_psh_8!(y); r_psh_8!(x); }, - /* ADDr */ 0x98 => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(x.wrapping_add(y)); }, - /* SUBr */ 0x99 => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(x.wrapping_sub(y)); }, - /* INCr */ 0x9A => { r_pop_8!(x); r_psh_8!(x.wrapping_add(1)); }, - /* DECr */ 0x9B => { r_pop_8!(x); r_psh_8!(x.wrapping_sub(1)); }, - /* NOTr */ 0x9C => { r_pop_8!(x); r_psh_8!(x.not()); }, - /* ANDr */ 0x9D => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(x.bitand(y)); }, - /* IORr */ 0x9E => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(x.bitor(y)); }, + /* LDDr */ 0x8C => { r_pop_8!(p); r_psh_8!(d_read_8!(p)); } + /* STDr */ 0x8D => { r_pop_8!(p); r_pop_8!(v); d_write_8!(v,p); } + /* SHFr */ 0x8E => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(shf!(x,y)); } + /* SHCr */ 0x8F => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(shc!(x,y)); } + /* PSHr */ 0x90 => { w_pop_8!(x); r_psh_8!(x); } + /* PSKr */ 0x91 => { w_pop_8!(x); w_psh_8!(x); r_psh_8!(x); } + /* POPr */ 0x92 => { r_pop_8!(_x); } + /* SPLr */ 0x93 => { r_pop_8!(x); nyb!(x=>a,b); r_psh_8!(a); r_psh_8!(b); } + /* DUPr */ 0x94 => { r_pop_8!(x); r_psh_8!(x); r_psh_8!(x); } + /* OVRr */ 0x95 => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(x); r_psh_8!(y); r_psh_8!(x); } + /* SWPr */ 0x96 => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(y); r_psh_8!(x); } + /* ROTr */ 0x97 => { r_pop_8!(z); r_pop_8!(y); r_pop_8!(x); r_psh_8!(y); r_psh_8!(z); r_psh_8!(x); } + /* ADDr */ 0x98 => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(x.wrapping_add(y)); } + /* SUBr */ 0x99 => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(x.wrapping_sub(y)); } + /* INCr */ 0x9A => { r_pop_8!(x); r_psh_8!(x.wrapping_add(1)); } + /* DECr */ 0x9B => { r_pop_8!(x); r_psh_8!(x.wrapping_sub(1)); } + /* ANDr */ 0x9C => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(x.bitand(y)); } + /* NOTr */ 0x9D => { r_pop_8!(x); r_psh_8!(x.not()); } + /* IORr */ 0x9E => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(x.bitor(y)); } /* XORr */ 0x9F => { r_pop_8!(y); r_pop_8!(x); r_psh_8!(x.bitxor(y)); }, @@ -229,28 +229,28 @@ impl<D: DeviceBus> Processor<D> { /* LTHr* */ 0xA6 => { r_pop_16!(y); r_pop_16!(x); r_psh_8!(truth!(x <y)); } /* GTHr* */ 0xA7 => { r_pop_16!(y); r_pop_16!(x); r_psh_8!(truth!(x >y)); } /* LDAr* */ 0xA8 => { r_pop_16!(a); r_psh_16!(m_read_16!(a)); } - /* LKAr* */ 0xA9 => { r_pop_16!(a); r_psh_16!(a); r_psh_16!(m_read_16!(a)); } - /* STAr* */ 0xAA => { r_pop_16!(a); r_pop_16!(v); m_write_16!(v,a); } + /* STAr* */ 0xA9 => { r_pop_16!(a); r_pop_16!(v); m_write_16!(v,a); } + /* LKAr* */ 0xAA => { r_pop_16!(a); r_psh_16!(a); r_psh_16!(m_read_16!(a)); } /* SKAr* */ 0xAB => { r_pop_16!(v); r_pop_16!(a); r_psh_16!(a); m_write_16!(v,a); } - /* LDDr* */ 0xAC => { r_pop_8!(p); r_psh_16!(d_read_16!(p)); }, - /* LKDr* */ 0xAD => { r_pop_8!(p); r_psh_8!(p); r_psh_16!(d_read_16!(p)); }, - /* STDr* */ 0xAE => { r_pop_8!(p); r_pop_16!(v); d_write_16!(v,p); }, - /* SKDr* */ 0xAF => { r_pop_8!(p); r_pop_16!(v); r_psh_16!(v); d_write_16!(v,p); }, - /* PSHr* */ 0xB0 => { w_pop_16!(x); r_psh_16!(x); }, - /* POPr* */ 0xB1 => { r_pop_16!(_x); }, - /* SHFr* */ 0xB2 => { r_pop_8!(y); r_pop_16!(x); r_psh_16!(shf!(x,y)); }, - /* SHCr* */ 0xB3 => { r_pop_8!(y); r_pop_16!(x); r_psh_16!(shc!(x,y)); }, - /* SWPr* */ 0xB4 => { r_pop_16!(y); r_pop_16!(x); r_psh_16!(y); r_psh_16!(x); }, - /* ROTr* */ 0xB5 => { r_pop_16!(z); r_pop_16!(y); r_pop_16!(x); r_psh_16!(y); r_psh_16!(z); r_psh_16!(x); }, - /* DUPr* */ 0xB6 => { r_pop_16!(x); r_psh_16!(x); r_psh_16!(x); }, - /* OVRr* */ 0xB7 => { r_pop_16!(y); r_pop_16!(x); r_psh_16!(x); r_psh_16!(y); r_psh_16!(x); }, - /* ADDr* */ 0xB8 => { r_pop_16!(y); r_pop_16!(x); r_psh_16!(x.wrapping_add(y)); }, - /* SUBr* */ 0xB9 => { r_pop_16!(y); r_pop_16!(x); r_psh_16!(x.wrapping_sub(y)); }, - /* INCr* */ 0xBA => { r_pop_16!(x); r_psh_16!(x.wrapping_add(1)); }, - /* DECr* */ 0xBB => { r_pop_16!(x); r_psh_16!(x.wrapping_sub(1)); }, - /* NOTr* */ 0xBC => { r_pop_16!(x); r_psh_16!(x.not()); }, - /* ANDr* */ 0xBD => { r_pop_16!(y); r_pop_16!(x); r_psh_16!(x.bitand(y)); }, - /* IORr* */ 0xBE => { r_pop_16!(y); r_pop_16!(x); r_psh_16!(x.bitor(y)); }, + /* LDDr* */ 0xAC => { r_pop_8!(p); r_psh_16!(d_read_16!(p)); } + /* STDr* */ 0xAD => { r_pop_8!(p); r_pop_16!(v); d_write_16!(v,p); } + /* SHFr* */ 0xAE => { r_pop_8!(y); r_pop_16!(x); r_psh_16!(shf!(x,y)); } + /* SHCr* */ 0xAF => { r_pop_8!(y); r_pop_16!(x); r_psh_16!(shc!(x,y)); } + /* PSHr* */ 0xB0 => { w_pop_16!(x); r_psh_16!(x); } + /* PSKr* */ 0xB1 => { w_pop_16!(x); w_psh_16!(x); r_psh_16!(x); } + /* POPr* */ 0xB2 => { r_pop_16!(_x); } + /* SPLr* */ 0xB3 => { r_pop_8!(y); r_pop_8!(x); nyb!(x=>a,b); nyb!(y=>c,d); r_psh_8!(a); r_psh_8!(b); r_psh_8!(c); r_psh_8!(d); } + /* DUPr* */ 0xB4 => { r_pop_16!(x); r_psh_16!(x); r_psh_16!(x); } + /* OVRr* */ 0xB5 => { r_pop_16!(y); r_pop_16!(x); r_psh_16!(x); r_psh_16!(y); r_psh_16!(x); } + /* SWPr* */ 0xB6 => { r_pop_16!(y); r_pop_16!(x); r_psh_16!(y); r_psh_16!(x); } + /* ROTr* */ 0xB7 => { r_pop_16!(z); r_pop_16!(y); r_pop_16!(x); r_psh_16!(y); r_psh_16!(z); r_psh_16!(x); } + /* ADDr* */ 0xB8 => { r_pop_16!(y); r_pop_16!(x); r_psh_16!(x.wrapping_add(y)); } + /* SUBr* */ 0xB9 => { r_pop_16!(y); r_pop_16!(x); r_psh_16!(x.wrapping_sub(y)); } + /* INCr* */ 0xBA => { r_pop_16!(x); r_psh_16!(x.wrapping_add(1)); } + /* DECr* */ 0xBB => { r_pop_16!(x); r_psh_16!(x.wrapping_sub(1)); } + /* ANDr* */ 0xBC => { r_pop_16!(y); r_pop_16!(x); r_psh_16!(x.bitand(y)); } + /* NOTr* */ 0xBD => { r_pop_16!(x); r_psh_16!(x.not()); } + /* 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 => { } @@ -262,28 +262,28 @@ impl<D: DeviceBus> Processor<D> { /* LTHr: */ 0xC6 => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(truth!(x <y)); } /* GTHr: */ 0xC7 => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(truth!(x >y)); } /* LDAr: */ 0xC8 => { m_lit_16!(a); r_psh_8!(m_read_8!(a)); } - /* LKAr: */ 0xC9 => { m_lit_16!(a); r_psh_16!(a); r_psh_8!(m_read_8!(a)); } - /* STAr: */ 0xCA => { m_lit_16!(a); r_pop_8!(v); m_write_8!(v,a); } + /* STAr: */ 0xC9 => { m_lit_16!(a); r_pop_8!(v); m_write_8!(v,a); } + /* LKAr: */ 0xCA => { m_lit_16!(a); r_psh_16!(a); r_psh_8!(m_read_8!(a)); } /* SKAr: */ 0xCB => { m_lit_8!(v); r_pop_16!(a); r_psh_16!(a); m_write_8!(v,a); } - /* LDDr: */ 0xCC => { m_lit_8!(p); r_psh_8!(d_read_8!(p)); }, - /* LKDr: */ 0xCD => { m_lit_8!(p); r_psh_8!(p); r_psh_8!(d_read_8!(p)); }, - /* STDr: */ 0xCE => { m_lit_8!(p); r_pop_8!(v); d_write_8!(v,p); }, - /* SKDr: */ 0xCF => { m_lit_8!(p); r_pop_8!(v); r_psh_8!(v); d_write_8!(v,p); }, - /* PSHr: */ 0xD0 => { m_lit_8!(x); r_psh_8!(x); }, - /* POPr: */ 0xD1 => { m_lit_8!(_x); }, - /* SHFr: */ 0xD2 => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(shf!(x,y)); }, - /* SHCr: */ 0xD3 => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(shc!(x,y)); }, - /* SWPr: */ 0xD4 => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(y); r_psh_8!(x); }, - /* ROTr: */ 0xD5 => { m_lit_8!(z); r_pop_8!(y); r_pop_8!(x); r_psh_8!(y); r_psh_8!(z); r_psh_8!(x); }, - /* DUPr: */ 0xD6 => { m_lit_8!(x); r_psh_8!(x); r_psh_8!(x); }, - /* OVRr: */ 0xD7 => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(x); r_psh_8!(y); r_psh_8!(x); }, - /* ADDr: */ 0xD8 => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(x.wrapping_add(y)); }, - /* SUBr: */ 0xD9 => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(x.wrapping_sub(y)); }, - /* INCr: */ 0xDA => { m_lit_8!(x); r_psh_8!(x.wrapping_add(1)); }, - /* DECr: */ 0xDB => { m_lit_8!(x); r_psh_8!(x.wrapping_sub(1)); }, - /* NOTr: */ 0xDC => { m_lit_8!(x); r_psh_8!(x.not()); }, - /* ANDr: */ 0xDD => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(x.bitand(y)); }, - /* IORr: */ 0xDE => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(x.bitor(y)); }, + /* LDDr: */ 0xCC => { m_lit_8!(p); r_psh_8!(d_read_8!(p)); } + /* STDr: */ 0xCD => { m_lit_8!(p); r_pop_8!(v); d_write_8!(v,p); } + /* SHFr: */ 0xCE => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(shf!(x,y)); } + /* SHCr: */ 0xCF => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(shc!(x,y)); } + /* PSHr: */ 0xD0 => { m_lit_8!(x); r_psh_8!(x); } + /* PSKr: */ 0xD1 => { m_lit_8!(x); w_psh_8!(x); r_psh_8!(x); } + /* POPr: */ 0xD2 => { m_lit_8!(_x); } + /* SPLr: */ 0xD3 => { m_lit_8!(x); nyb!(x=>a,b); r_psh_8!(a); r_psh_8!(b); } + /* DUPr: */ 0xD4 => { m_lit_8!(x); r_psh_8!(x); r_psh_8!(x); } + /* OVRr: */ 0xD5 => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(x); r_psh_8!(y); r_psh_8!(x); } + /* SWPr: */ 0xD6 => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(y); r_psh_8!(x); } + /* ROTr: */ 0xD7 => { m_lit_8!(z); r_pop_8!(y); r_pop_8!(x); r_psh_8!(y); r_psh_8!(z); r_psh_8!(x); } + /* ADDr: */ 0xD8 => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(x.wrapping_add(y)); } + /* SUBr: */ 0xD9 => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(x.wrapping_sub(y)); } + /* INCr: */ 0xDA => { m_lit_8!(x); r_psh_8!(x.wrapping_add(1)); } + /* DECr: */ 0xDB => { m_lit_8!(x); r_psh_8!(x.wrapping_sub(1)); } + /* ANDr: */ 0xDC => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(x.bitand(y)); } + /* NOTr: */ 0xDD => { m_lit_8!(x); r_psh_8!(x.not()); } + /* IORr: */ 0xDE => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(x.bitor(y)); } /* XORr: */ 0xDF => { m_lit_8!(y); r_pop_8!(x); r_psh_8!(x.bitxor(y)); }, /* NOP */ 0xE0 => { } @@ -295,29 +295,29 @@ impl<D: DeviceBus> Processor<D> { /* LTHr*: */ 0xE6 => { m_lit_16!(y); r_pop_16!(x); r_psh_8!(truth!(x <y)); } /* GTHr*: */ 0xE7 => { m_lit_16!(y); r_pop_16!(x); r_psh_8!(truth!(x >y)); } /* LDAr*: */ 0xE8 => { m_lit_16!(a); r_psh_16!(m_read_16!(a)); } - /* LKAr*: */ 0xE9 => { m_lit_16!(a); r_psh_16!(a); r_psh_16!(m_read_16!(a)); } - /* STAr*: */ 0xEA => { m_lit_16!(a); r_pop_16!(v); m_write_16!(v,a); } + /* STAr*: */ 0xE9 => { m_lit_16!(a); r_pop_16!(v); m_write_16!(v,a); } + /* LKAr*: */ 0xEA => { m_lit_16!(a); r_psh_16!(a); r_psh_16!(m_read_16!(a)); } /* SKAr*: */ 0xEB => { m_lit_16!(v); r_pop_16!(a); r_psh_16!(a); m_write_16!(v,a); } - /* LDDr*: */ 0xEC => { m_lit_8!(p); r_psh_16!(d_read_16!(p)); }, - /* LKDr*: */ 0xED => { m_lit_8!(p); r_psh_8!(p); r_psh_16!(d_read_16!(p)); }, - /* STDr*: */ 0xEE => { m_lit_8!(p); r_pop_16!(v); d_write_16!(v,p); }, - /* SKDr*: */ 0xEF => { m_lit_8!(p); r_pop_16!(v); r_psh_16!(v); d_write_16!(v,p); }, - /* PSHr*: */ 0xF0 => { m_lit_16!(x); r_psh_16!(x); }, - /* POPr*: */ 0xF1 => { m_lit_16!(_x); }, - /* SHFr*: */ 0xF2 => { m_lit_8!(y); r_pop_16!(x); r_psh_16!(shf!(x,y)); }, - /* SHCr*: */ 0xF3 => { m_lit_8!(y); r_pop_16!(x); r_psh_16!(shc!(x,y)); }, - /* SWPr*: */ 0xF4 => { m_lit_16!(y); r_pop_16!(x); r_psh_16!(y); r_psh_16!(x); }, - /* ROTr*: */ 0xF5 => { m_lit_16!(z); r_pop_16!(y); r_pop_16!(x); r_psh_16!(y); r_psh_16!(z); r_psh_16!(x); }, - /* DUPr*: */ 0xF6 => { m_lit_16!(x); r_psh_16!(x); r_psh_16!(x); }, - /* OVRr*: */ 0xF7 => { m_lit_16!(y); r_pop_16!(x); r_psh_16!(x); r_psh_16!(y); r_psh_16!(x); }, - /* ADDr*: */ 0xF8 => { m_lit_16!(y); r_pop_16!(x); r_psh_16!(x.wrapping_add(y)); }, - /* SUBr*: */ 0xF9 => { m_lit_16!(y); r_pop_16!(x); r_psh_16!(x.wrapping_sub(y)); }, - /* INCr*: */ 0xFA => { m_lit_16!(x); r_psh_16!(x.wrapping_add(1)); }, - /* DECr*: */ 0xFB => { m_lit_16!(x); r_psh_16!(x.wrapping_sub(1)); }, - /* NOTr*: */ 0xFC => { m_lit_16!(x); r_psh_16!(x.not()); }, - /* ANDr*: */ 0xFD => { m_lit_16!(y); r_pop_16!(x); r_psh_16!(x.bitand(y)); }, - /* IORr*: */ 0xFE => { m_lit_16!(y); r_pop_16!(x); r_psh_16!(x.bitor(y)); }, - /* XORr*: */ 0xFF => { m_lit_16!(y); r_pop_16!(x); r_psh_16!(x.bitxor(y)); }, + /* LDDr*: */ 0xEC => { m_lit_8!(p); r_psh_16!(d_read_16!(p)); } + /* STDr*: */ 0xED => { m_lit_8!(p); r_pop_16!(v); d_write_16!(v,p); } + /* SHFr*: */ 0xEE => { m_lit_8!(y); r_pop_16!(x); r_psh_16!(shf!(x,y)); } + /* SHCr*: */ 0xEF => { m_lit_8!(y); r_pop_16!(x); r_psh_16!(shc!(x,y)); } + /* PSHr*: */ 0xF0 => { m_lit_16!(x); r_psh_16!(x); } + /* PSKr*: */ 0xF1 => { m_lit_16!(x); w_psh_16!(x); r_psh_16!(x); } + /* POPr*: */ 0xF2 => { m_lit_16!(_x); } + /* SPLr*: */ 0xF3 => { m_lit_8!(x); m_lit_8!(y); nyb!(x=>a,b); nyb!(y=>c,d); r_psh_8!(a); r_psh_8!(b); r_psh_8!(c); r_psh_8!(d); } + /* DUPr*: */ 0xF4 => { m_lit_16!(x); r_psh_16!(x); r_psh_16!(x); } + /* OVRr*: */ 0xF5 => { m_lit_16!(y); r_pop_16!(x); r_psh_16!(x); r_psh_16!(y); r_psh_16!(x); } + /* SWPr*: */ 0xF6 => { m_lit_16!(y); r_pop_16!(x); r_psh_16!(y); r_psh_16!(x); } + /* ROTr*: */ 0xF7 => { m_lit_16!(z); r_pop_16!(y); r_pop_16!(x); r_psh_16!(y); r_psh_16!(z); r_psh_16!(x); } + /* ADDr*: */ 0xF8 => { m_lit_16!(y); r_pop_16!(x); r_psh_16!(x.wrapping_add(y)); } + /* SUBr*: */ 0xF9 => { m_lit_16!(y); r_pop_16!(x); r_psh_16!(x.wrapping_sub(y)); } + /* INCr*: */ 0xFA => { m_lit_16!(x); r_psh_16!(x.wrapping_add(1)); } + /* DECr*: */ 0xFB => { m_lit_16!(x); r_psh_16!(x.wrapping_sub(1)); } + /* ANDr*: */ 0xFC => { m_lit_16!(y); r_pop_16!(x); r_psh_16!(x.bitand(y)); } + /* NOTr*: */ 0xFD => { m_lit_16!(x); r_psh_16!(x.not()); } + /* IORr*: */ 0xFE => { m_lit_16!(y); r_pop_16!(x); r_psh_16!(x.bitor(y)); } + /* XORr*: */ 0xFF => { m_lit_16!(y); r_pop_16!(x); r_psh_16!(x.bitxor(y)); } } } |