notaz.gp2x.de
/
cyclone68000.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
52ac6b1
)
disa improvements from PicoDrive
author
notaz
<notasas@gmail.com>
Sun, 16 Jun 2013 16:43:12 +0000
(19:43 +0300)
committer
notaz
<notasas@gmail.com>
Sun, 16 Jun 2013 16:43:12 +0000
(19:43 +0300)
Disa/Disa.c
patch
|
blob
|
blame
|
history
diff --git
a/Disa/Disa.c
b/Disa/Disa.c
index
01a54bc
..
562929b
100644
(file)
--- a/
Disa/Disa.c
+++ b/
Disa/Disa.c
@@
-283,6
+283,21
@@
static int DisaMoveSr(int op)
return 0;
\r
}
\r
\r
return 0;
\r
}
\r
\r
+static int OpChk(int op)
\r
+{
\r
+ int sea=0,dea=0;
\r
+ char seat[64]="",deat[64]="";
\r
+
\r
+ sea=op&0x003f;
\r
+ DisaGetEa(seat,sea,0);
\r
+
\r
+ dea=(op>>9)&7; dea|=8;
\r
+ DisaGetEa(deat,dea,2);
\r
+
\r
+ sprintf(DisaText,"chk %s, %s",seat,deat);
\r
+ return 0;
\r
+}
\r
+
\r
// ================ Opcodes 0x41c0+ ================
\r
static int DisaLea(int op)
\r
{
\r
// ================ Opcodes 0x41c0+ ================
\r
static int DisaLea(int op)
\r
{
\r
@@
-337,6
+352,20
@@
static int MakeRegList(char *list,int mask,int ea)
return 0;
\r
}
\r
\r
return 0;
\r
}
\r
\r
+// ================ Opcodes 0x4800+ ================
\r
+static int DisaNbcd(int op)
\r
+{
\r
+ // Nbcd 01001000 00eeeeee (eeeeee=ea)
\r
+ int ea=0;
\r
+ char eat[64]="";
\r
+
\r
+ ea=op&0x003f;
\r
+ DisaGetEa(eat,ea,0);
\r
+
\r
+ sprintf(DisaText,"nbcd %s",eat);
\r
+ return 0;
\r
+}
\r
+
\r
// ================ Opcodes 0x4840+ ================
\r
static int DisaSwap(int op)
\r
{
\r
// ================ Opcodes 0x4840+ ================
\r
static int DisaSwap(int op)
\r
{
\r
@@
-476,6
+505,19
@@
static int DisaTst(int op)
return 0;
\r
}
\r
\r
return 0;
\r
}
\r
\r
+static int DisaTas(int op)
\r
+{
\r
+ // Tas 01001010 11eeeeee (eeeeee=ea)
\r
+ int ea=0;
\r
+ char eat[64]="";
\r
+
\r
+ ea=op&0x003f;
\r
+ DisaGetEa(eat,ea,0);
\r
+
\r
+ sprintf(DisaText,"tas %s",eat);
\r
+ return 0;
\r
+}
\r
+
\r
// ================ Opcodes 0x4e80+ ================
\r
static int DisaJsr(int op)
\r
{
\r
// ================ Opcodes 0x4e80+ ================
\r
static int DisaJsr(int op)
\r
{
\r
@@
-741,14
+783,16
@@
static int DisaExg(int op)
static int DisaAddx(int op)
\r
{
\r
// 1t01ddd1 xx000sss addx
\r
static int DisaAddx(int op)
\r
{
\r
// 1t01ddd1 xx000sss addx
\r
- int type=0,size=0,dea=0,sea=0;
\r
+ int type=0,size=0,dea=0,sea=0
,mem
;
\r
char deat[64]="",seat[64]="";
\r
char *opcode[6]={"","subx","","","","addx"};
\r
\r
type=(op>>12)&5;
\r
dea =(op>> 9)&7;
\r
size=(op>> 6)&3; if (size>=3) return 1;
\r
char deat[64]="",seat[64]="";
\r
char *opcode[6]={"","subx","","","","addx"};
\r
\r
type=(op>>12)&5;
\r
dea =(op>> 9)&7;
\r
size=(op>> 6)&3; if (size>=3) return 1;
\r
- sea = op&0x3f;
\r
+ sea = op&7;
\r
+ mem = op&8;
\r
+ if(mem) { sea+=0x20; dea+=0x20; }
\r
\r
DisaGetEa(deat,dea,size);
\r
DisaGetEa(seat,sea,size);
\r
\r
DisaGetEa(deat,dea,size);
\r
DisaGetEa(seat,sea,size);
\r
@@
-805,13
+849,16
@@
static int TryOp(int op)
if ((op&0xff00)==0x0800) DisaBtstImm(op); // Btst/Bchg/Bclr/Bset
\r
if ((op&0xc000)==0x0000) DisaMove(op);
\r
if ((op&0xf900)==0x4000) DisaNeg(op); // Negx/Clr/Neg/Not
\r
if ((op&0xff00)==0x0800) DisaBtstImm(op); // Btst/Bchg/Bclr/Bset
\r
if ((op&0xc000)==0x0000) DisaMove(op);
\r
if ((op&0xf900)==0x4000) DisaNeg(op); // Negx/Clr/Neg/Not
\r
+ if ((op&0xf140)==0x4100) OpChk(op);
\r
if ((op&0xf1c0)==0x41c0) DisaLea(op);
\r
if ((op&0xf9c0)==0x40c0) DisaMoveSr(op);
\r
if ((op&0xf1c0)==0x41c0) DisaLea(op);
\r
if ((op&0xf9c0)==0x40c0) DisaMoveSr(op);
\r
+ if ((op&0xffc0)==0x4800) DisaNbcd(op);
\r
if ((op&0xfff8)==0x4840) DisaSwap(op);
\r
if ((op&0xffc0)==0x4840) DisaPea(op);
\r
if ((op&0xffb8)==0x4880) DisaExt(op);
\r
if ((op&0xfb80)==0x4880) DisaMovem(op);
\r
if ((op&0xff00)==0x4a00) DisaTst(op);
\r
if ((op&0xfff8)==0x4840) DisaSwap(op);
\r
if ((op&0xffc0)==0x4840) DisaPea(op);
\r
if ((op&0xffb8)==0x4880) DisaExt(op);
\r
if ((op&0xfb80)==0x4880) DisaMovem(op);
\r
if ((op&0xff00)==0x4a00) DisaTst(op);
\r
+ if ((op&0xffc0)==0x4ac0) DisaTas(op);
\r
if ((op&0xfff0)==0x4e40) DisaTrap(op);
\r
if ((op&0xfff8)==0x4e50) DisaLink(op);
\r
if ((op&0xfff8)==0x4e58) DisaUnlk(op);
\r
if ((op&0xfff0)==0x4e40) DisaTrap(op);
\r
if ((op&0xfff8)==0x4e50) DisaLink(op);
\r
if ((op&0xfff8)==0x4e58) DisaUnlk(op);
\r