char *outfile=NULL;
char *cpuid=NULL;
CPU_INT type=0;
+ CPU_INT mode = 1;
printf("Usage :\n");
printf(" -inBin filename : the bin file you whant convert\n");
printf(" -inExe filename : the PE file you whant convert\n");
printf(" -OutAsm filename : the Asm file you whant create\n");
+ printf(" -OutDis filename : Do disambler of the source file\n");
printf("------------------------------------------------------------------\n");
printf("More cpu will be added with the time or options, this is \n");
printf("version 0.0.1 of the cpu to intel converter writen by \n");
printf("yet, more that basic desgin how it should be writen. \n");
printf("Copyright 2006 by Magnus Olsen, licen under GPL 2.0 for now. \n");
- if (argc < 7)
- return .110;
- for (t=1; t<7;t+=2)
+ if (argc <4)
+ return 110;
+
+ /* fixme better error checking for the input param */
+ for (t=1; t<argc;t+=2)
{
if (stricmp(argv[t],"-in"))
{
{
outfile = argv[t+1];
}
+ if (stricmp(argv[t],"-OutDis"))
+ {
+ outfile = argv[t+1];
+ mode = 0;
+ }
if (stricmp(argv[t],"-BaseAddress"))
{
BaseAddress = atol(argv[t+1]);
}
- return LoadPFileImage(infile,outfile,BaseAddress,cpuid,type);
+
+ return LoadPFileImage(infile,outfile,BaseAddress,cpuid,type, mode);
//return LoadPFileImage("e:\\cputointel.exe","e:\\cputointel.asm",0,0,0);
}
CPU_UNINT cpu_size,
CPU_UNINT BaseAddress,
CPU_UNINT cpuarch,
- FILE *outfp);
+ FILE *outfp,
+ CPU_INT mode);
/* here we put the prototype for the opcode api that brain need we show a example for it */
-CPU_INT ARM_(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
+CPU_INT ARM_(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
/* Export comment thing see m68k for example
#include "ARM.h"
#include "../../misc.h"
-/* retun
+/*
+ * DummyBrain is example how you create you own cpu brain to translate from
+ * cpu to intel assembler, I have not add DummyBrain to the loader it is not
+ * need it in our example. When you write you own brain, it must be setup in
+ * misc.c function LoadPFileImage and PEFileStart, PEFileStart maybe does not
+ * need the brain you have writen so you do not need setup it there then.
+ *
+ * input param:
+ * cpu_buffer : the memory buffer with loaded program we whant translate
+ * cpu_pos : the positions in the cpu_buffer
+ * cpu_size : the alloced memory size of the cpu_buffer
+ * BaseAddress : the virtual memory address we setup to use.
+ * cpuarch : the sub arch for the brain, example if it exists more one
+ * cpu with same desgin but few other opcode or extend opcode
+ * outfp : the output file pointer
+ *
+ * mode : if we should run disambler of this binary or
+ * translate it, Disambler will not calc the
+ * the row name right so we simple give each
+ row a name. In translations mode we run a
+ * analys so we getting better optimzing and
+ * only row name there we need.
+ * value for mode are :
+ * 0 = disambler mode
+ * 1 = translate mode intel
+ *
+ * return value
* 0 : Ok
* 1 : unimplemt
* 2 : Unkonwn Opcode
CPU_UNINT cpu_size,
CPU_UNINT BaseAddress,
CPU_UNINT cpuarch,
- FILE *outfp)
+ FILE *outfp,
+ CPU_INT mode)
{
CPU_UNINT cpu_oldpos;
CPU_INT cpuint;
if ((cpuint - (cpuint & GetMaskByte32(cpuARMInit_))) == ConvertBitToByte32(cpuARMInit_))
{
retsize = ARM_( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
* pentinum-mmx so on, use this flag to specify which type
* of cpu you whant or do not use it if it does not exists
* other or any sub model.
+ *
+ * mode : if we should run disambler of this binary or
+ * translate it, Disambler will not calc the
+ * the row name right so we simple give each
+ row a name. In translations mode we run a
+ * analys so we getting better optimzing and
+ * only row name there we need.
+ * value for mode are :
+ * 0 = disambler mode
+ * 1 = translate mode intel
+
*
* Return value :
* value -1 : unimplement
*/
CPU_INT ARM_( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
/*
CPU_UNINT cpu_size,
CPU_UNINT BaseAddress,
CPU_UNINT cpuarch,
- FILE *outfp);
+ FILE *outfp,
+ CPU_INT mode);
/* here we put the prototype for the opcode api that brain need we show a example for it */
-CPU_INT PPC_Addx(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
+CPU_INT PPC_Addx(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
/* Export comment thing see m68k for example
* cpu with same desgin but few other opcode or extend opcode
* outfp : the output file pointer
*
+ * mode : if we should run disambler of this binary or
+ * translate it, Disambler will not calc the
+ * the row name right so we simple give each
+ row a name. In translations mode we run a
+ * analys so we getting better optimzing and
+ * only row name there we need.
+ * value for mode are :
+ * 0 = disambler mode
+ * 1 = translate mode intel
+ *
* return value
* 0 : Ok
* 1 : unimplemt
CPU_UNINT cpu_size,
CPU_UNINT BaseAddress,
CPU_UNINT cpuarch,
- FILE *outfp)
+ FILE *outfp,
+ CPU_INT mode)
{
CPU_UNINT cpu_oldpos;
CPU_INT cpuint;
if ((cpuint - (cpuint & GetMaskByte32(cpuPPCInit_Addx))) == ConvertBitToByte32(cpuPPCInit_Addx))
{
retsize = PPC_Addx( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
*/
CPU_INT PPC_Addx( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
/*
CPU_UNINT cpu_size,
CPU_UNINT BaseAddress,
CPU_UNINT cpuarch,
- FILE *outfp);
+ FILE *outfp,
+ CPU_INT mode);
/* here we put the prototype for the opcode api that brain need we show a example for it */
-CPU_INT DUMMY_Add(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
+CPU_INT DUMMY_Add(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
/* Export comment thing see m68k for example
* cpu with same desgin but few other opcode or extend opcode
* outfp : the output file pointer
*
+ * mode : if we should run disambler of this binary or
+ * translate it, Disambler will not calc the
+ * the row name right so we simple give each
+ row a name. In translations mode we run a
+ * analys so we getting better optimzing and
+ * only row name there we need.
+ * value for mode are :
+ * 0 = disambler mode
+ * 1 = translate mode intel
+ *
* return value
* 0 : Ok
* 1 : unimplemt
CPU_UNINT cpu_size,
CPU_UNINT BaseAddress,
CPU_UNINT cpuarch,
- FILE *outfp)
+ FILE *outfp,
+ CPU_INT mode)
{
CPU_UNINT cpu_oldpos;
CPU_INT cpuint;
if ((cpuint - (cpuint & GetMaskByte(cpuDummyInit_Add))) == ConvertBitToByte(cpuDummyInit_Add))
{
retsize = DUMMY_Add( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
* of cpu you whant or do not use it if it does not exists
* other or any sub model.
*
+ * mode : if we should run disambler of this binary or
+ * translate it, Disambler will not calc the
+ * the row name right so we simple give each
+ row a name. In translations mode we run a
+ * analys so we getting better optimzing and
+ * only row name there we need.
+ * value for mode are :
+ * 0 = disambler mode
+ * 1 = translate mode intel
+ *
* Return value :
* value -1 : unimplement
* value 0 : wrong opcode or not vaild opcode
*/
CPU_INT DUMMY_Add( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
/*
#include "m68k.h"
#include "../../misc.h"
-/* retun
+/*
+ * DummyBrain is example how you create you own cpu brain to translate from
+ * cpu to intel assembler, I have not add DummyBrain to the loader it is not
+ * need it in our example. When you write you own brain, it must be setup in
+ * misc.c function LoadPFileImage and PEFileStart, PEFileStart maybe does not
+ * need the brain you have writen so you do not need setup it there then.
+ *
+ * input param:
+ * cpu_buffer : the memory buffer with loaded program we whant translate
+ * cpu_pos : the positions in the cpu_buffer
+ * cpu_size : the alloced memory size of the cpu_buffer
+ * BaseAddress : the virtual memory address we setup to use.
+ * cpuarch : the sub arch for the brain, example if it exists more one
+ * cpu with same desgin but few other opcode or extend opcode
+ * outfp : the output file pointer
+ *
+ * mode : if we should run disambler of this binary or
+ * translate it, Disambler will not calc the
+ * the row name right so we simple give each
+ row a name. In translations mode we run a
+ * analys so we getting better optimzing and
+ * only row name there we need.
+ * value for mode are :
+ * 0 = disambler mode
+ * 1 = translate mode intel
+ *
+ * return value
* 0 : Ok
* 1 : unimplemt
* 2 : Unkonwn Opcode
CPU_UNINT cpu_size,
CPU_UNINT BaseAddress,
CPU_UNINT cpuarch,
- FILE *outfp)
+ FILE *outfp,
+ CPU_INT mode)
{
CPU_UNINT cpu_oldpos;
CPU_INT cpuint;
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Abcd))) == ConvertBitToByte(cpuM68kInit_Abcd))
{
retsize = M68k_Abcd( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Add))) == ConvertBitToByte(cpuM68kInit_Add))
{
retsize = M68k_Add( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Addi))) == ConvertBitToByte(cpuM68kInit_Addi))
{
retsize = M68k_Addi( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Addq))) == ConvertBitToByte(cpuM68kInit_Addq))
{
retsize = M68k_Addq( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Addx))) == ConvertBitToByte(cpuM68kInit_Addx))
{
retsize = M68k_Addx( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_And))) == ConvertBitToByte(cpuM68kInit_And))
{
retsize = M68k_Add( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Andi))) == ConvertBitToByte(cpuM68kInit_Andi))
{
retsize = M68k_Andi( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
{
cpu_pos++;
retsize = M68k_AndToCCR( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Bhi))) == ConvertBitToByte(cpuM68kInit_Bhi))
{
retsize = M68k_Bhi( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Bls))) == ConvertBitToByte(cpuM68kInit_Bls))
{
retsize = M68k_Bls( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Bcc))) == ConvertBitToByte(cpuM68kInit_Bcc))
{
retsize = M68k_Bcc( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Bcs))) == ConvertBitToByte(cpuM68kInit_Bcs))
{
retsize = M68k_Bcs( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Bne))) == ConvertBitToByte(cpuM68kInit_Bne))
{
retsize = M68k_Bne( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Beq))) == ConvertBitToByte(cpuM68kInit_Beq))
{
retsize = M68k_Beq( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Bvc))) == ConvertBitToByte(cpuM68kInit_Bvc))
{
retsize = M68k_Bvc( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Bvs))) == ConvertBitToByte(cpuM68kInit_Bvs))
{
retsize = M68k_Bvs( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Bpl))) == ConvertBitToByte(cpuM68kInit_Bpl))
{
retsize = M68k_Bpl( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Bmi))) == ConvertBitToByte(cpuM68kInit_Bmi))
{
retsize = M68k_Bmi( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Bge))) == ConvertBitToByte(cpuM68kInit_Bge))
{
retsize = M68k_Bge( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Blt))) == ConvertBitToByte(cpuM68kInit_Blt))
{
retsize = M68k_Blt( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Bgt))) == ConvertBitToByte(cpuM68kInit_Bgt))
{
retsize = M68k_Bgt( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
if ((cpuint - (cpuint & GetMaskByte(cpuM68kInit_Ble))) == ConvertBitToByte(cpuM68kInit_Ble))
{
retsize = M68k_Ble( outfp, cpu_buffer, cpu_pos, cpu_size,
- BaseAddress, cpuarch);
+ BaseAddress, cpuarch, mode);
if (retsize<0)
retcode = 1;
else
CPU_INT M68k_Abcd( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Add(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT dismode)
{
CPU_INT opmode;
CPU_INT mode;
}
CPU_INT M68k_Addi( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Addq( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Addx( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_And( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Andi( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_AndToCCR( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Asl( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Asr( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Bhi( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Bls( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Bcc( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Bcs( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Bne( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Beq( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Bvc( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Bvs( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Bpl( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Bmi( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Bge( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Blt( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Bgt( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
}
CPU_INT M68k_Ble( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
- CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+ CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch,
+ CPU_INT mode)
{
fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
CPU_UNINT cpu_size,
CPU_UNINT BaseAddress,
CPU_UNINT cpuarch,
- FILE *outfp);
+ FILE *outfp,
+ CPU_INT mode);
-CPU_INT M68k_Abcd(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Add(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Addi(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Addq(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Addx(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_And(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Andi(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_AndToCCR(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Asl(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Asr(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Bhi(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Bls(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Bcc(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Bcs(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Bne(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Beq(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Bvc(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Bvs(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Bpl(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Bmi(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Bge(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Blt(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Bgt(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
-CPU_INT M68k_Ble(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
+CPU_INT M68k_Abcd(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Add(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Addi(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Addq(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Addx(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_And(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Andi(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_AndToCCR(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Asl(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Asr(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Bhi(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Bls(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Bcc(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Bcs(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Bne(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Beq(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Bvc(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Bvs(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Bpl(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Bmi(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Bge(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Blt(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Bgt(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
+CPU_INT M68k_Ble(FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch, CPU_INT mode);
extern CPU_BYTE M68k_Rx[16];
extern CPU_BYTE M68k_RM[16];
#include "From/PPC/PPC.h"
/*
- *
+ * infileName file name to convert or disambler
+ * outputfileName file name to save to
+ * BaseAddress the address we should emulate
+ * cpuid the cpu we choice not vaild for pe loader
+ * type the loading mode Auto, PE, bin
+ * mode disambler mode : 0 the arch cpu.
+ * translate mode : 1 intel
+ *
*/
CPU_INT LoadPFileImage( char *infileName, char *outputfileName,
CPU_UNINT BaseAddress, char *cpuid,
- CPU_UNINT type)
+ CPU_UNINT type, CPU_INT mode)
{
FILE *infp;
FILE *outfp;
if (type==0)
{
- if ( PEFileStart(cpu_buffer, 0, BaseAddress, cpu_size, outfp) !=0)
+ if ( PEFileStart(cpu_buffer, 0, BaseAddress, cpu_size, outfp, mode) !=0)
{
type=1;
}
if (type== 1)
{
if (stricmp(cpuid,"m68000"))
- return M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68000,outfp);
+ return M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68000,outfp,mode);
else if (stricmp(cpuid,"m68010"))
- return M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68010,outfp);
+ return M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68010,outfp,mode);
else if (stricmp(cpuid,"m68020"))
- return M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68020,outfp);
+ return M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68020,outfp,mode);
else if (stricmp(cpuid,"m68030"))
- return M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68030,outfp);
+ return M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68030,outfp,mode);
else if (stricmp(cpuid,"m68040"))
- return M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68040,outfp);
+ return M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68040,outfp,mode);
else if (stricmp(cpuid,"ppc"))
- return PPCBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,0,outfp);
+ return PPCBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,0,outfp,mode);
else if (stricmp(cpuid,"arm4"))
- return ARMBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,4,outfp);
+ return ARMBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,4,outfp,mode);
}
if (type==2)
{
- return PEFileStart(cpu_buffer, 0, BaseAddress, cpu_size, outfp);
+ return PEFileStart(cpu_buffer, 0, BaseAddress, cpu_size, outfp, mode);
}
CPU_INT PEFileStart( CPU_BYTE *memory, CPU_UNINT pos,
CPU_UNINT base, CPU_UNINT size,
- FILE *outfp)
+ FILE *outfp, CPU_INT mode)
{
PIMAGE_DOS_HEADER DosHeader;
PIMAGE_NT_HEADERS NtHeader;
case IMAGE_FILE_MACHINE_POWERPC:
printf("CPU POWERPC Detected no CPUBrain implement for it\n");
//PPCBrain(memory, pos, cpu_size, base, 0, outfp);
- return PPCBrain(memory+SectionHeader->PointerToRawData, 0, SectionHeader->SizeOfRawData, 0, 0, outfp);
+ return PPCBrain(memory+SectionHeader->PointerToRawData, 0, SectionHeader->SizeOfRawData, 0, 0, outfp,mode);
return 3;
#define CPU_BYTE unsigned char
/* Prototypes for misc stuff */
-CPU_INT LoadPFileImage(char *infileName, char *outputfileName, CPU_UNINT BaseAddress, char *cpuid, CPU_UNINT type);
-CPU_INT PEFileStart( CPU_BYTE *memory, CPU_UNINT pos, CPU_UNINT base, CPU_UNINT size, FILE *outfp);
+CPU_INT LoadPFileImage(char *infileName, char *outputfileName, CPU_UNINT BaseAddress, char *cpuid, CPU_UNINT type, CPU_INT mode);
+CPU_INT PEFileStart( CPU_BYTE *memory, CPU_UNINT pos, CPU_UNINT base, CPU_UNINT size, FILE *outfp, CPU_INT mode);
CPU_UNINT ConvertBitToByte(CPU_BYTE *bit);
CPU_UNINT GetMaskByte(CPU_BYTE *bit);