summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/dsp563xx/dsp563xx.lst
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2025-11-01 22:35:21 +0100
committer Olivier Galibert <galibert@pobox.com>2025-11-01 22:35:21 +0100
commitd09cc57b12b216eebb0faedab250d6eb10e3acc0 (patch)
tree26f7355ceafc81fb586fe8add500cb3b05d3c5d9 /src/devices/cpu/dsp563xx/dsp563xx.lst
parent5be959e3f0e041f6b732a035929ace45944f1f8b (diff)
virusb: goes all the way to the main programdsp563xx
Diffstat (limited to 'src/devices/cpu/dsp563xx/dsp563xx.lst')
-rw-r--r--src/devices/cpu/dsp563xx/dsp563xx.lst594
1 files changed, 509 insertions, 85 deletions
diff --git a/src/devices/cpu/dsp563xx/dsp563xx.lst b/src/devices/cpu/dsp563xx/dsp563xx.lst
index a054c209d57..d08de057f4c 100644
--- a/src/devices/cpu/dsp563xx/dsp563xx.lst
+++ b/src/devices/cpu/dsp563xx/dsp563xx.lst
@@ -36,40 +36,212 @@
....03 tst d - d:acc(3)
2000.. -
+
2000.. #i,d - d:fvbr1(16) i:imm8(8)
%p
$d:w($i);
2000.. s,d - s:fvbr1(13) d:fvbr1(8)
- m_tmp1 = $s;
+ m_tmp1 = $s:h;
%p
- $d:w(m_tmp1);
+ $d:wh(m_tmp1);
2040.. ea - ea:eam4(8)
+ (void)($ea);
+
40c0.. x:ea,d - d:fvbr1s(20, 16) ea:eam1(8)
+ m_tmp1 = m_x.read_dword($ea);
+ %p
+ $d:wh(m_tmp1);
+
4040.. s,x:ea - s:fvbr1s(20, 16) ea:eam1(8)
-40c0.. abs,d - d:fvbr1s(20, 16) abs:eam1a(8)
+ m_tmp1 = $s:h;
+ %p
+ m_x.write_dword($ea, m_tmp1);
+
+40c0.. x:abs,d - d:fvbr1s(20, 16) abs:eam1a(8)
+ m_tmp1 = m_x.read_dword($abs);
+ %p
+ $d:wh(m_tmp1);
+
+4040.. s,x:abs - s:fvbr1s(20, 16) abs:eam1a(8)
+ m_tmp1 = $s:h;
+ %p
+ m_x.write_dword($abs, m_tmp1);
+
40c0.. #i,d - d:fvbr1s(20, 16) i:eam1i(8)
+ %p
+ $d:wh($i);
+
4080.. x:aa,d - d:fvbr1s(20, 16) aa:asa6(8)
+ m_tmp1 = m_x.read_dword($aa);
+ %p
+ $d:wh(m_tmp1);
+
4000.. s,x:aa - s:fvbr1s(20, 16) aa:asa6(8)
+ m_tmp1 = $s:h;
+ %p
+ m_x.write_dword($aa, m_tmp1);
+
1080.. x:ea,d1 s2,d2 - d1:tbrx(18) s2:acc(17) d2:yreg(16) ea:eam1(8)
+ m_tmp1 = m_x.read_dword($ea);
+ m_tmp2 = $s2:h;
+ %p
+ $d1:wh(m_tmp1);
+ $d2:wh(m_tmp2);
+
1000.. s1,x:ea s2,d2 - s1:tbrx(18) s2:acc(17) d2:yreg(16) ea:eam1(8)
+ m_tmp1 = $s1:h;
+ m_tmp2 = $s2:h;
+ %p
+ m_x.write_dword($ea, m_tmp1);
+ $d2:wh(m_tmp2);
+
1080.. x:abs,d1 s2,d2 - d1:tbrx(18) s2:acc(17) d2:yreg(16) abs:eam1a(8)
-1080.. x:#i,d1 s2,d2 - d1:tbrx(18) s2:acc(17) d2:yreg(16) i:eam1i(8)
+ m_tmp1 = m_x.read_dword($abs);
+ m_tmp2 = $s2:h;
+ %p
+ $d1:wh(m_tmp1);
+ $d2:wh(m_tmp2);
+
+1000.. s1,x:abs s2,d2 - s1:tbrx(18) s2:acc(17) d2:yreg(16) abs:eam1a(8)
+ m_tmp1 = $s1:h;
+ m_tmp2 = $s2:h;
+ %p
+ m_x.write_dword($abs, m_tmp1);
+ $d2:wh(m_tmp2);
+
+
+1080.. #i,d1 s2,d2 - d1:tbrx(18) s2:acc(17) d2:yreg(16) i:eam1i(8)
+ m_tmp1 = $s2:h;
+ %p
+ $d2:wh(m_tmp1);
+ $d1:wh($i);
+
0800.. a,x:ea x0,a - ea:eam1(8)
+ m_tmp1 = get_a();
+ m_tmp2 = get_x0();
+ %p
+ m_x.write_dword($ea, m_tmp1);
+ set_a(m_tmp2);
+
0900.. b,x:ea x0,b - ea:eam1(8)
+ m_tmp1 = get_bh();
+ m_tmp2 = get_x0();
+ %p
+ m_x.write_dword($ea, m_tmp1);
+ set_bh(m_tmp2);
+
+0800.. a,x:abs x0,a - abs:eam1a(8)
+ m_tmp1 = get_a();
+ m_tmp2 = get_x0();
+ %p
+ m_x.write_dword($abs, m_tmp1);
+ set_a(m_tmp2);
+
+0900.. b,x:abs x0,b - abs:eam1a(8)
+ m_tmp1 = get_bh();
+ m_tmp2 = get_x0();
+ %p
+ m_x.write_dword($abs, m_tmp1);
+ set_bh(m_tmp2);
+
48c0.. y:ea,d - d:fvbr1s(20, 16) ea:eam1(8)
+ m_tmp1 = m_y.read_dword($ea);
+ %p
+ $d:wh(m_tmp1);
+
4840.. s,y:ea - s:fvbr1s(20, 16) ea:eam1(8)
-48c0.. abs,d - d:fvbr1s(20, 16) abs:eam1a(8)
+ m_tmp1 = $s:h;
+ %p
+ m_y.write_dword($ea, m_tmp1);
+
+48c0.. y:abs,d - d:fvbr1s(20, 16) abs:eam1a(8)
+ m_tmp1 = m_y.read_dword($abs);
+ %p
+ $d:wh(m_tmp1);
+
+4840.. s,y:abs - s:fvbr1s(20, 16) abs:eam1a(8)
+ m_tmp1 = $s:h;
+ %p
+ m_y.write_dword($abs, m_tmp1);
+
48c0.. #i,d - d:fvbr1s(20, 16) i:eam1i(8)
+ %p
+ $d:wh($i);
+
4880.. y:aa,d - d:fvbr1s(20, 16) aa:asa6(8)
+ m_tmp1 = m_y.read_dword($aa);
+ %p
+ $d:wh(m_tmp1);
+
4800.. s,y:aa - s:fvbr1s(20, 16) aa:asa6(8)
+ m_tmp1 = $s:h;
+ %p
+ m_y.write_dword($aa, m_tmp1);
+
10c0.. s1,d1 y:ea,d2 - d2:tbry(18) s1:acc(17) d1:xreg(16) ea:eam1(8)
+ m_tmp1 = $s1:h;
+ m_tmp2 = m_y.read_dword($ea);
+ %p
+ $d1:wh(m_tmp1);
+ $d2:wh(m_tmp2);
+
1040.. s1,d1 s2,y:ea - s2:tbry(18) s1:acc(17) d1:xreg(16) ea:eam1(8)
-10c0.. s1,d1 x:abs,d2 - d2:tbry(18) s1:acc(17) d1:xreg(16) abs:eam1a(8)
-10c0.. s1,d1 x:#i,d2 - d2:tbry(18) s1:acc(17) d1:xreg(16) i:eam1i(8)
+ m_tmp1 = $s1:h;
+ m_tmp2 = $s2:h;
+ %p
+ $d1:wh(m_tmp1);
+ m_y.write_dword($ea, m_tmp2);
+
+10c0.. s1,d1 y:abs,d2 - d2:tbry(18) s1:acc(17) d1:xreg(16) abs:eam1a(8)
+ m_tmp1 = $s1:h;
+ m_tmp2 = m_y.read_dword($abs);
+ %p
+ $d1:wh(m_tmp1);
+ $d2:wh(m_tmp2);
+
+1040.. s1,d1 s2,y:abs - s2:tbry(18) s1:acc(17) d1:xreg(16) abs:eam1a(8)
+ m_tmp1 = $s1:h;
+ m_tmp2 = $s2:h;
+ %p
+ $d1:wh(m_tmp1);
+ m_y.write_dword($abs, m_tmp2);
+
+10c0.. s1,d1 #i,d2 - d2:tbry(18) s1:acc(17) d1:xreg(16) i:eam1i(8)
+ m_tmp1 = $s1:h;
+ %p
+ $d1:wh(m_tmp1);
+ $d2:wh($i);
+
0880.. a,y:ea y0,a - ea:eam1(8)
+ m_tmp1 = get_ah();
+ m_tmp2 = get_y0();
+ %p
+ m_y.write_dword($ea, m_tmp1);
+ set_ah(m_tmp2);
+
0980.. b,y:ea y0,b - ea:eam1(8)
+ m_tmp1 = get_bh();
+ m_tmp2 = get_y0();
+ %p
+ m_y.write_dword($ea, m_tmp1);
+ set_bh(m_tmp2);
+
+0880.. a,y:abs y0,a - abs:eam1a(8)
+ m_tmp1 = get_ah();
+ m_tmp2 = get_y0();
+ %p
+ m_y.write_dword($abs, m_tmp1);
+ set_ah(m_tmp2);
+
+0980.. b,y:abs y0,b - abs:eam1a(8)
+ m_tmp1 = get_bh();
+ m_tmp2 = get_y0();
+ %p
+ m_y.write_dword($abs, m_tmp1);
+ set_bh(m_tmp2);
+
40c0.. l:ea,d - d:lmr(19, 16) ea:eam1(8)
40c0.. l:abs,d - d:lmr(19, 16) abs:eam1a(8)
4080.. l:aa,d - d:lmr(19, 16) aa:asa6(8)
@@ -94,17 +266,47 @@ c000.. s1,x:eax y:eay,d2 - eax:xyeax(8) eay:xyeay(20, 13, 10) s1:tbrx(18) d2
014080 add #i,d - i:imm6(8) d:acc(3)
0140c0 add #i,d - d:acc(3) i:eximm()
014086 and #i,d - i:imm6(8) d:acc(3)
+ u64 r = $d:1 & $i;
+ m_ccr = m_ccr & ~(CCR_V|CCR_Z|CCR_N);
+ if(!r) {
+ m_ccr = m_ccr | CCR_Z;
+ } else if(BIT(m_ccr, 23)) {
+ m_ccr = m_ccr | CCR_N;
+ }
+ $d:w1(r);
+
0140c6 and #i,d - d:acc(3) i:eximm()
+ u64 r = $d:1 & $i;
+ m_ccr = m_ccr & ~(CCR_V|CCR_Z|CCR_N);
+ if(!r) {
+ m_ccr = m_ccr | CCR_Z;
+ } else if(BIT(m_ccr, 23)) {
+ m_ccr = m_ccr | CCR_N;
+ }
+ $d:w1(r);
+
0000b8 andi #i,ctrl - i:imm8(8) ctrl:ctrl(0)
$ctrl:w($ctrl & $i);
-0c1d00 asl #i,s2,d - i:imm6(1) s2:acc(7) d:acc(0)
+0c1d00 asl #i,s2,d - i:shift6(1) s2:acc(7) d:acc(0)
0c1e40 asl s1,s2,d - s2:acc(4) s1:actrl(1) d:acc(0)
-0c1c00 asr #i,s2,d - i:imm6(1) s2:acc(7) d:acc(0)
+0c1c00 asr #i,s2,d - i:shift6(1) s2:acc(7) d:acc(0)
0c1e60 asr s1,s2,d - s2:acc(4) s1:actrl(1) d:acc(0)
-0d1040 bcc x - cc:cc(0) x:expcrel()
-050400 bcc x - cc:cc(12) x:pcrel(6, 0)
-0d1840 bcc r - r:ar(8) cc:cc(0)
+0d1040 bcc x - cc:cc(0) x:expcrel() cond
+ if($cc) {
+ m_npc = $x;
+ }
+
+050400 bcc x - cc:cc(12) x:pcrel(6, 0) cond
+ if($cc) {
+ m_npc = $x;
+ }
+
+0d1840 bcc r - r:ar(8) cc:cc(0) cond
+ if($cc) {
+ m_npc = m_pc + $r;
+ }
+
0b4000 bchg #n,xy:ea - ea:eam1(8) xy:xyc(6) n:bit5(0)
0b4000 bchg #n,xy:abs - abs:eam1a(8) xy:xyc(6) n:bit5(0)
0b0000 bchg #n,xy:aa - aa:asa6(8) xy:xyc(6) n:bit5(0)
@@ -112,10 +314,46 @@ c000.. s1,x:eax y:eay,d2 - eax:xyeax(8) eay:xyeay(20, 13, 10) s1:tbrx(18) d2
014000 bchg #n,xy:qq - qq:asa6q(8) xy:xyc(6) n:bit5(0)
0bc040 bchg #n,d - d:sbr(8) n:bit5(0)
0a4000 bclr #n,xy:ea - ea:eam1(8) xy:xyc(6) n:bit5(0)
+ u32 t = $xy:m.read_dword($ea);
+ u32 m = 1 << $n;
+ if(t & m) {
+ m_ccr |= CCR_C;
+ $xy:m.write_dword($ea, t & ~m);
+ } else {
+ m_ccr &= ~CCR_C;
+ }
+
0a4000 bclr #n,xy:abs - abs:eam1a(8) xy:xyc(6) n:bit5(0)
+ u32 t = $xy:m.read_dword($abs);
+ u32 m = 1 << $n;
+ if(t & m) {
+ m_ccr |= CCR_C;
+ $xy:m.write_dword($abs, t & ~m);
+ } else {
+ m_ccr &= ~CCR_C;
+ }
+
0a0000 bclr #n,xy:aa - aa:asa6(8) xy:xyc(6) n:bit5(0)
0a8000 bclr #n,xy:pp - pp:asa6p(8) xy:xyc(6) n:bit5(0)
+ u32 t = $xy:m.read_dword($pp);
+ u32 m = 1 << $n;
+ if(t & m) {
+ m_ccr |= CCR_C;
+ $xy:m.write_dword($pp, t & ~m);
+ } else {
+ m_ccr &= ~CCR_C;
+ }
+
010000 bclr #n,xy:qq - qq:asa6q(8) xy:xyc(6) n:bit5(0)
+ u32 t = $xy:m.read_dword($qq);
+ u32 m = 1 << $n;
+ if(t & m) {
+ m_ccr |= CCR_C;
+ $xy:m.write_dword($qq, t & ~m);
+ } else {
+ m_ccr &= ~CCR_C;
+ }
+
0ac040 bclr #n,d - d:sbr(8) n:bit5(0)
0d10c0 bra x - x:expcrel()
m_npc = $x;
@@ -124,32 +362,50 @@ c000.. s1,x:eax y:eay,d2 - eax:xyeax(8) eay:xyeay(20, 13, 10) s1:tbrx(18) d2
m_npc = $x;
0d18c0 bra r - r:ar(8)
- m_npc = $r;
-
-0c8000 brclr #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0c8000 brclr #n,xy:abs,x - abs:eam1a(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0c8080 brclr #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0cc000 brclr #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:expcrel()
-048000 brclr #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0cc080 brclr #n,s,x - s:sbr(8) n:bit5(0)
-000210 brkcc - cc:cc(0)
-0c8020 brset #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0c8020 brset #n,xy:abs,x - abs:eam1a(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0c80a0 brset #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0cc020 brset #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:expcrel()
-048020 brset #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0cc0a0 brset #n,s,x - s:sbr(8) n:bit5(0) x:expcrel()
-0d1000 bscc x - cc:cc(0) x:expcrel()
-050000 bscc x - cc:cc(12) x:pcrel(6, 0)
-0d1800 bscc r - r:ar(8) cc:cc(0)
-0d8000 bsclr #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0d8000 bsclr #n,xy:abs,x - abs:eam1a(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0d8080 bsclr #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0dc000 bsclr #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:expcrel()
-048080 bsclr #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0dc080 bsclr #n,s,x - s:sbr(8) n:bit5(0) x:expcrel()
+ m_npc = m_pc + $r;
+
+0c8000 brclr #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:expcrel() cond
+0c8000 brclr #n,xy:abs,x - abs:eam1a(8) xy:xyc(6) n:bit5(0) x:expcrel() cond
+0c8080 brclr #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:expcrel() cond
+0cc000 brclr #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:expcrel() cond
+048000 brclr #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:expcrel() cond
+0cc080 brclr #n,s,x - s:sbr(8) n:bit5(0) cond
+000210 brkcc - cc:cc(0) cond
+0c8020 brset #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:expcrel() cond
+0c8020 brset #n,xy:abs,x - abs:eam1a(8) xy:xyc(6) n:bit5(0) x:expcrel() cond
+0c80a0 brset #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:expcrel() cond
+0cc020 brset #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:expcrel() cond
+048020 brset #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:expcrel() cond
+0cc0a0 brset #n,s,x - s:sbr(8) n:bit5(0) x:expcrel() cond
+0d1000 bscc x - cc:cc(0) x:expcrel() cond over
+050000 bscc x - cc:cc(12) x:pcrel(6, 0) cond over
+0d1800 bscc r - r:ar(8) cc:cc(0) cond over
+0d8000 bsclr #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:expcrel() cond over
+0d8000 bsclr #n,xy:abs,x - abs:eam1a(8) xy:xyc(6) n:bit5(0) x:expcrel() cond over
+0d8080 bsclr #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:expcrel() cond over
+0dc000 bsclr #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:expcrel() cond over
+048080 bsclr #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:expcrel() cond over
+0dc080 bsclr #n,s,x - s:sbr(8) n:bit5(0) x:expcrel() cond over
0a4020 bset #n,xy:ea - ea:eam1(8) xy:xyc(6) n:bit5(0)
+ u32 t = $xy:m.read_dword($ea);
+ u32 m = 1 << $n;
+ if(t & m) {
+ m_ccr |= CCR_C;
+ } else {
+ m_ccr &= ~CCR_C;
+ $xy:m.write_dword($ea, t | m);
+ }
+
0a4020 bset #n,xy:abs - abs:eam1a(8) xy:xyc(6) n:bit5(0)
+ u32 t = $xy:m.read_dword($abs);
+ u32 m = 1 << $n;
+ if(t & m) {
+ m_ccr |= CCR_C;
+ } else {
+ m_ccr &= ~CCR_C;
+ $xy:m.write_dword($abs, t | m);
+ }
+
0a0020 bset #n,xy:aa - aa:asa6(8) xy:xyc(6) n:bit5(0)
0a8020 bset #n,xy:pp - pp:asa6p(8) xy:xyc(6) n:bit5(0)
u32 t = $xy:m.read_dword($pp);
@@ -162,22 +418,86 @@ c000.. s1,x:eax y:eay,d2 - eax:xyeax(8) eay:xyeay(20, 13, 10) s1:tbrx(18) d2
}
010020 bset #n,xy:qq - qq:asa6q(8) xy:xyc(6) n:bit5(0)
+ u32 t = $xy:m.read_dword($qq);
+ u32 m = 1 << $n;
+ if(t & m) {
+ m_ccr |= CCR_C;
+ } else {
+ m_ccr &= ~CCR_C;
+ $xy:m.write_dword($qq, t | m);
+ }
+
0ac060 bset #n,d - d:sbr(8) n:bit5(0)
-0d1080 bsr x - x:expcrel()
-050800 bsr x - x:pcrel(6, 0)
-0d1880 bsr r - r:ar(8)
-0d8020 bsset #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0d8020 bsset #n,xy:abs,x - abs:eam1a(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0d80a0 bsset #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0dc020 bsset #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0480a0 bsset #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:expcrel()
-0dc0a0 bsset #n,s,x - s:sbr(8) n:bit5(0) x:expcrel()
+0d1080 bsr x - x:expcrel() over
+ inc_sp();
+ set_ssh(m_pc+2);
+ set_ssl(get_sr());
+ m_npc = $x;
+
+050800 bsr x - x:pcrel(6, 0) over
+ inc_sp();
+ set_ssh(m_pc+1);
+ set_ssl(get_sr());
+ m_npc = $x;
+
+0d1880 bsr r - r:ar(8) over
+ inc_sp();
+ set_ssh(m_pc+1);
+ set_ssl(get_sr());
+ m_npc = m_pc + $r;
+
+0d8020 bsset #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:expcrel() cond over
+0d8020 bsset #n,xy:abs,x - abs:eam1a(8) xy:xyc(6) n:bit5(0) x:expcrel() cond over
+0d80a0 bsset #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:expcrel() cond over
+0dc020 bsset #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:expcrel() cond over
+0480a0 bsset #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:expcrel() cond over
+0dc0a0 bsset #n,s,x - s:sbr(8) n:bit5(0) x:expcrel() cond over
0b4020 btst #n,xy:ea - ea:eam1(8) xy:xyc(6) n:bit5(0)
+ u32 t = $xy:m.read_dword($ea);
+ u32 m = 1 << $n;
+ if(t & m) {
+ m_ccr |= CCR_C;
+ } else {
+ m_ccr &= ~CCR_C;
+ }
+
0b4020 btst #n,xy:abs - abs:eam1a(8) xy:xyc(6) n:bit5(0)
+ u32 t = $xy:m.read_dword($abs);
+ u32 m = 1 << $n;
+ if(t & m) {
+ m_ccr |= CCR_C;
+ } else {
+ m_ccr &= ~CCR_C;
+ }
+
0b0020 btst #n,xy:aa - aa:asa6(8) xy:xyc(6) n:bit5(0)
0b8020 btst #n,xy:pp - pp:asa6p(8) xy:xyc(6) n:bit5(0)
+ u32 t = $xy:m.read_dword($pp);
+ u32 m = 1 << $n;
+ if(t & m) {
+ m_ccr |= CCR_C;
+ } else {
+ m_ccr &= ~CCR_C;
+ }
+
014020 btst #n,xy:qq - qq:asa6q(8) xy:xyc(6) n:bit5(0)
+ u32 t = $xy:m.read_dword($qq);
+ u32 m = 1 << $n;
+ if(t & m) {
+ m_ccr |= CCR_C;
+ } else {
+ m_ccr &= ~CCR_C;
+ }
+
0bc060 btst #n,d - d:sbr(8) n:bit5(0)
+ u32 t = $d;
+ u32 m = 1 << $n;
+ if(t & m) {
+ m_ccr |= CCR_C;
+ } else {
+ m_ccr &= ~CCR_C;
+ }
+
00c3c0 clb s,d - s:acc(1) d:acc(0)
014085 cmp #i,d - i:imm6(8) d:acc(3)
0140c5 cmp #i,d - d:acc(3) i:eximm()
@@ -232,7 +552,7 @@ c000.. s1,x:eax y:eay,d2 - eax:xyeax(8) eay:xyeay(20, 13, 10) s1:tbrx(18) d2
inc_sp();
set_ssh(m_pc+2);
set_ssl(get_sr());
- set_la($expr-1);
+ set_la($expr);
m_mr |= MR_LF;
06c010 dor s,expr - s:sbr_nos(8) expr:expcrel()
@@ -243,7 +563,7 @@ c000.. s1,x:eax y:eay,d2 - eax:xyeax(8) eay:xyeay(20, 13, 10) s1:tbrx(18) d2
inc_sp();
set_ssh(m_pc+2);
set_ssl(get_sr());
- set_la($expr-1);
+ set_la($expr);
m_mr |= MR_LF;
000202 dor forever,expr - expr:expcrel()
@@ -253,7 +573,7 @@ c000.. s1,x:eax y:eay,d2 - eax:xyeax(8) eay:xyeay(20, 13, 10) s1:tbrx(18) d2
inc_sp();
set_ssh(m_pc+2);
set_ssl(get_sr());
- set_la($expr-1);
+ set_la($expr);
m_mr |= MR_LF;
m_emr |= EMR_FV;
@@ -268,20 +588,23 @@ c000.. s1,x:eax y:eay,d2 - eax:xyeax(8) eay:xyeay(20, 13, 10) s1:tbrx(18) d2
000008 inc d - d:acc(0)
0c1b00 insert s1,s2,d - s1:actrl(1) s2:dao3b(4)
0c1900 insert #co,s2,d - s2:dao3b(4) d:acc(0) co:exco()
-0e0000 jcc x - cc:cc(12) x:pcrel12(0)
-0ac0a0 jcc ea - ea:eam1(8) cc:cc(0)
-0ac0a0 jcc abs - abs:eam1a(8) cc:cc(0)
-0a4080 jclr #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:exabs()
-0a0080 jclr #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:exabs()
-0a8080 jclr #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:exabs()
+0e0000 jcc x - cc:cc(12) x:abs12(0) cond
+0ac0a0 jcc ea - ea:eam1(8) cc:cc(0) cond
+0ac0a0 jcc abs - abs:eam1a(8) cc:cc(0) cond
+0a4080 jclr #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:exabs() cond
+ if(!BIT($xy:m.read_dword($ea), $n))
+ m_npc = $x;
+
+0a0080 jclr #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:exabs() cond
+0a8080 jclr #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:exabs() cond
if(!BIT($xy:m.read_dword($pp), $n))
m_npc = $x;
-018080 jclr #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:exabs()
+018080 jclr #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:exabs() cond
if(!BIT($xy:m.read_dword($qq), $n))
m_npc = $x;
-0ac000 jclr #n,s,x - s:sbr(8) n:bit5(0) x:exabs()
+0ac000 jclr #n,s,x - s:sbr(8) n:bit5(0) x:exabs() cond
if(!BIT($s, $n))
m_npc = $x;
@@ -294,40 +617,72 @@ c000.. s1,x:eax y:eay,d2 - eax:xyeax(8) eay:xyeay(20, 13, 10) s1:tbrx(18) d2
0c0000 jmp x - x:abs12(0)
m_npc = $x;
-0f0000 jscc x - cc:cc(12) x:pcrel12(0)
-0bc0a0 jscc ea - ea:eam1(8) cc:cc(0)
-0bc0a0 jscc abs - abs:eam1a(8) cc:cc(0)
-0b4080 jsclr #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:exabs()
-0b0080 jsclr #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:exabs()
-0b8080 jsclr #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:exabs()
-01c080 jsclr #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:exabs()
-0bc000 jsclr #n,s,x - s:sbr(8) n:bit5(0) x:exabs()
-0a40a0 jset #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:exabs()
-0a00a0 jset #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:exabs()
-0a80a0 jset #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:exabs()
+0f0000 jscc x - cc:cc(12) x:abs12(0) cond over
+0bc0a0 jscc ea - ea:eam1(8) cc:cc(0) cond over
+0bc0a0 jscc abs - abs:eam1a(8) cc:cc(0) cond over
+0b4080 jsclr #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:exabs() cond over
+0b0080 jsclr #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:exabs() cond over
+0b8080 jsclr #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:exabs() cond over
+01c080 jsclr #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:exabs() cond over
+0bc000 jsclr #n,s,x - s:sbr(8) n:bit5(0) x:exabs() cond over
+0a40a0 jset #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:exabs() cond
+0a00a0 jset #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:exabs() cond
+0a80a0 jset #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:exabs() cond
if(BIT($xy:m.read_dword($pp), $n))
m_npc = $x;
-0180a0 jset #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:exabs()
+0180a0 jset #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:exabs() cond
if(BIT($xy:m.read_dword($qq), $n))
m_npc = $x;
-0ac020 jset #n,s,x - s:sbr(8) n:bit5(0) x:exabs()
+0ac020 jset #n,s,x - s:sbr(8) n:bit5(0) x:exabs() cond
if(BIT($s, $n))
m_npc = $x;
-0bc080 jsr ea - ea:eam1(8)
-0bc080 jsr abs - abs:eam1a(8)
-0d0000 jsr x - x:abs12(0)
-0b40a0 jsset #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:exabs()
-0b00a0 jsset #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:exabs()
-0b80a0 jsset #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:exabs()
-01c0a0 jsset #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:exabs()
-0bc020 jsset #n,s,x - s:sbr(8) n:bit5(0) x:exabs()
+0bc080 jsr ea - ea:eam1(8) over
+0bc080 jsr abs - abs:eam1a(8) over
+0d0000 jsr x - x:abs12(0) over
+0b40a0 jsset #n,xy:ea,x - ea:eam1(8) xy:xyc(6) n:bit5(0) x:exabs() cond over
+0b00a0 jsset #n,xy:aa,x - aa:asa6(8) xy:xyc(6) n:bit5(0) x:exabs() cond over
+0b80a0 jsset #n,xy:pp,x - pp:asa6p(8) xy:xyc(6) n:bit5(0) x:exabs() cond over
+01c0a0 jsset #n,xy:qq,x - qq:asa6q(8) xy:xyc(6) n:bit5(0) x:exabs() cond over
+0bc020 jsset #n,s,x - s:sbr(8) n:bit5(0) x:exabs() cond over
04c000 lra r,d - r:ar(8) d:fvbr1(0)
+ $d:w(m_pc + $r);
+
044040 lra #i,d - d:fvbr1(0) i:expcrel()
+ $d:w($i);
+
0c1e80 lsl #i,d - i:shift5(1) d:acc(0)
+ u32 r = ($d:h) << $i;
+ m_ccr &= ~(CCR_N|CCR_Z|CCR_V|CCR_C);
+ if(BIT(r, 24)) {
+ m_ccr |= CCR_C;
+ }
+ if(BIT(r, 23)) {
+ m_ccr |= CCR_N;
+ }
+ r &= 0xffffff;
+ if(!r) {
+ m_ccr |= CCR_Z;
+ }
+ $d:wh(r);
+
0c1e10 lsl s,d - s:actrl(1) d:acc(0)
+ u32 r = ($d:h) << $s;
+ m_ccr &= ~(CCR_N|CCR_Z|CCR_V|CCR_C);
+ if(BIT(r, 24)) {
+ m_ccr |= CCR_C;
+ }
+ if(BIT(r, 23)) {
+ m_ccr |= CCR_N;
+ }
+ r &= 0xffffff;
+ if(!r) {
+ m_ccr |= CCR_Z;
+ }
+ $d:wh(r);
+
0c1ec0 lsr #i,d - i:shift5(1) d:acc(0)
0c1e30 lsr s,d - s:actrl(1) d:acc(0)
044000 lua ea,d - ea:eam4(8) d:fvbr1(0)
@@ -339,35 +694,86 @@ c000.. s1,x:eax y:eay,d2 - eax:xyeax(8) eay:xyeay(20, 13, 10) s1:tbrx(18) d2
0141c3 macri +#i,s,d - s:damo2(4) d:acc(3) +:sign(2) i:eximm()
0c1b80 merge s,d - s:dao3(1) d:acc(0)
05c020 movec xy:ea,d1 - ea:eam1(8) xy:xyc(6) d1:fvbr2(0)
+ $d1:wh($xy:m.read_dword($ea));
+
054020 movec s1,xy:ea - ea:eam1(8) xy:xyc(6) s1:fvbr2(0)
+ $xy:m.write_dword($ea, $s1:h);
+
05c020 movec xy:abs,d1 - abs:eam1a(8) xy:xyc(6) d1:fvbr2(0)
+ $d1:wh($xy:m.read_dword($abs));
+
05c020 movec #i,d1 - i:eam1i(8) d1:fvbr2(0)
+ $d1:wh($i);
+
058020 movec xy:aa,d1 - aa:asa6(8) xy:xyc(6) d1:fvbr2(0)
+ $d1:wh($xy:m.read_dword($aa));
+
050020 movec s1,xy:aa - aa:asa6(8) xy:xyc(6) s1:fvbr2(0)
+ $xy:m.write_dword($aa, $s1:h);
+
04c0a0 movec s2,d1 - s2:sbr(8) d1:fvbr2(0)
+ $d1:w($s2);
+
0440a0 movec s1,d2 - d2:sbr(8) s1:fvbr2(0)
+ $d2:w($s1);
+
0500a0 movec #i,d1 - i:imm8(8) d1:fvbr2(0)
+ $d1:w($i);
+
07c080 movem p:ea,d - ea:eam1(8) d:sbr(0)
+ $d:wh(m_p.read_dword($ea));
+
074080 movem s,p:ea - ea:eam1(8) s:sbr(0)
+ m_p.write_dword($ea, $s:h);
+
07c080 movem p:abs,d - abs:eam1a(8) d:sbr(0)
+ $d:wh(m_p.read_dword($abs));
+
+074080 movem s,p:abs - abs:eam1a(8) s:sbr(0)
+ m_p.write_dword($abs, $s:h);
+
078000 movem p:aa,d - aa:asa6(8) d:sbr(0)
+ $d:wh(m_p.read_dword($aa));
+
070000 movem s,p:aa - aa:asa6(8) s:sbr(0)
+ m_p.write_dword($aa, $s:h);
+
08c080 movep xym:ea,xyp:pp - xyp:xyc(16) ea:eam1(8) xym:xyc(6) pp:asa6p(0)
+ $xyp:m.write_dword($pp, $xym:m.read_dword($ea));
+
084080 movep xyp:pp,xym:ea - xyp:xyc(16) ea:eam1(8) xym:xyc(6) pp:asa6p(0)
+ $xym:m.write_dword($ea, $xyp:m.read_dword($pp));
+
08c080 movep xym:abs,xyp:pp - xyp:xyc(16) abs:eam1a(8) xym:xyc(6) pp:asa6p(0)
+ $xyp:m.write_dword($pp, $xym:m.read_dword($abs));
+
08c080 movep #i,xyp:pp - xyp:xyc(16) i:eam1i(8) pp:asa6p(0)
$xyp:m.write_dword($pp, $i);
07c000 movep xym:ea,x:qq - ea:eam1(8) xym:xyc(6) qq:asa6q(0)
+ m_x.write_dword($qq, $xym:m.read_dword($ea));
+
074000 movep x:qq,xym:ea - ea:eam1(8) xym:xyc(6) qq:asa6q(0)
+ $xym:m.write_dword($ea, m_x.read_dword($qq));
+
07c000 movep xym:abs,x:qq - abs:eam1a(8) xym:xyc(6) qq:asa6q(0)
+ m_x.write_dword($qq, $xym:m.read_dword($abs));
+
07c000 movep #i,x:qq - i:eam1i(8) qq:asa6q(0)
m_x.write_dword($qq, $i);
078080 movep xym:ea,y:qq - ea:eam1(8) xym:xyc(6) qq:asa6q(0)
+ m_y.write_dword($qq, $xym:m.read_dword($ea));
+
070080 movep y:qq,xym:ea - ea:eam1(8) xym:xyc(6) qq:asa6q(0)
+ $xym:m.write_dword($ea, m_y.read_dword($qq));
+
078080 movep xym:abs,y:qq - abs:eam1a(8) xym:xyc(6) qq:asa6q(0)
+ m_y.write_dword($qq, $xym:m.read_dword($abs));
+
078080 movep #i,y:qq - i:eam1i(8) qq:asa6q(0)
+ m_y.write_dword($qq, $i);
+
08c040 movep p:ea,xyp:pp - xyp:xyc(16) ea:eam1(8) pp:asa6p(0)
$xyp:m.write_dword($pp, m_p.read_dword($ea));
@@ -375,26 +781,34 @@ c000.. s1,x:eax y:eay,d2 - eax:xyeax(8) eay:xyeay(20, 13, 10) s1:tbrx(18) d2
m_p.write_dword($ea, $xyp:m.read_dword($pp));
08c040 movep p:abs,xyp:pp - xyp:xyc(16) abs:eam1a(8) pp:asa6p(0)
+ $xyp:m.write_dword($pp, m_p.read_dword($abs));
+
00c000 movep p:ea,xyp:qq - xyp:xyc(6) ea:eam1(8) qq:asa6q(0)
+ $xyp:m.write_dword($qq, m_p.read_dword($ea));
+
008000 movep xyp:qq,p:ea - xyp:xyc(6) ea:eam1(8) qq:asa6q(0)
+ m_p.write_dword($ea, $xyp:m.read_dword($qq));
+
00c000 movep p:abs,xyp:qq - xyp:xyc(6) abs:eam1a(8) qq:asa6q(0)
+ $xyp:m.write_dword($qq, m_p.read_dword($abs));
+
08c000 movep s,xyp:pp - xyp:xyc(16) s:sbr(8) pp:asa6p(0)
$xyp:m.write_dword($pp, $s);
084000 movep xyp:pp,d - xyp:xyc(16) d:sbr(8) pp:asa6p(0)
- $d:w($xyp:m.read_dword($pp));
+ $d:wh($xyp:m.read_dword($pp));
04c080 movep s,x:qq - s:sbr(8) qq:asa6qs(6, 0)
- m_x.write_dword($qq, $s);
+ m_x.write_dword($qq, $s:h);
044080 movep x:qq,d - d:sbr(8) qq:asa6qs(6, 0)
- $d:w(m_x.read_dword($qq));
+ $d:wh(m_x.read_dword($qq));
04c020 movep s,y:qq - s:sbr(8) qq:asa6qs(6, 0)
- m_y.write_dword($qq, $s);
+ m_y.write_dword($qq, $s:h);
044020 movep y:qq,d - d:sbr(8) qq:asa6qs(6, 0)
- $d:w(m_y.read_dword($qq));
+ $d:wh(m_y.read_dword($qq));
0100c0 mpy +s,#i,d - i:imm4(8) s:damo2(4) d:acc(3) +:sign(2)
012780 mpyss +s1,s2,d - ss:ss1(6) d:acc(5) +:sign(4) s1:damo4_a(0) s2:damo4_b(0)
@@ -420,8 +834,18 @@ c000.. s1,x:eax y:eay,d2 - eax:xyeax(8) eay:xyeay(20, 13, 10) s1:tbrx(18) d2
0600a0 rep #i - i:imm12(0, 8)
06c020 rep s - s:sbr(8)
000084 reset -
-000004 rti -
-00000c rts -
+ m_icount = 0;
+ m_npc --;
+
+000004 rti - out
+ m_npc = get_ssh();
+ set_sr(get_ssl());
+ dec_sp();
+
+00000c rts - out
+ m_npc = get_ssh();
+ dec_sp();
+
000087 stop -
014084 sub #i,d - i:imm6(8) d:acc(3)
0140c4 sub #i,d - d:acc(3) i:eximm()
@@ -429,7 +853,7 @@ c000.. s1,x:eax y:eay,d2 - eax:xyeax(8) eay:xyeay(20, 13, 10) s1:tbrx(18) d2
030000 tcc s1,d1 s2,d2 - cc:cc(12) s2:ar(8) s1:daos3(4, 3) d1:acc(3) d2:ar(0)
020800 tcc s2,d2 - cc:cc(12) s2:ar(8) d2:ar(0)
000006 trap -
-000010 trapcc - cc:cc(0)
+000010 trapcc - cc:cc(0) cond
0ac0c0 vsl s,i,l:ea - s:acc(16) ea:eam1(8) i:imm1(4)
0ac0c0 vsl s,i,l:abs - s:acc(16) abs:eam1a(8) i:imm1(4)
000086 wait -