[ros-diffs] [greatlrd] 25514: Implement disambler for stwu, left todo add it to the Converter

greatlrd at svn.reactos.org greatlrd at svn.reactos.org
Thu Jan 18 20:33:49 CET 2007


Author: greatlrd
Date: Thu Jan 18 22:33:48 2007
New Revision: 25514

URL: http://svn.reactos.org/svn/reactos?rev=25514&view=rev
Log:
Implement disambler for stwu, left todo add it to the Converter

Modified:
    trunk/rosapps/devutils/cputointel/ConvertToIA32Process.c
    trunk/rosapps/devutils/cputointel/CpuToIntel.c
    trunk/rosapps/devutils/cputointel/From/PPC/PPC.h
    trunk/rosapps/devutils/cputointel/From/PPC/PPCBrain.c
    trunk/rosapps/devutils/cputointel/From/PPC/PPCBrain.h
    trunk/rosapps/devutils/cputointel/From/PPC/PPCopcode.c
    trunk/rosapps/devutils/cputointel/ImageLoader.c
    trunk/rosapps/devutils/cputointel/OpCodePPC.txt
    trunk/rosapps/devutils/cputointel/any_op.h
    trunk/rosapps/devutils/cputointel/misc.h

Modified: trunk/rosapps/devutils/cputointel/ConvertToIA32Process.c
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/ConvertToIA32Process.c?rev=25514&r1=25513&r2=25514&view=diff
==============================================================================
--- trunk/rosapps/devutils/cputointel/ConvertToIA32Process.c (original)
+++ trunk/rosapps/devutils/cputointel/ConvertToIA32Process.c Thu Jan 18 22:33:48 2007
@@ -186,6 +186,19 @@
                             fprintf(outfp,"unsuported optimze should not happen it happen :(\n");
                         }
                     }
+                }
+
+                if ((pMystart->type & 32)== 32)
+                {
+                    /* source are [reg - xx] */
+                    if (setup_ebp == 1)
+                         fprintf(outfp,"not supporet\n");
+                    else
+                    {
+                        fprintf(outfp,"not supporet\n");
+                        fprintf(outfp,"mov eax, word[eax%d]\n",pMystart->src_extra);
+                    }
+        
                 }
             } /* end pMyBrainAnalys->type & 8 */
         }

Modified: trunk/rosapps/devutils/cputointel/CpuToIntel.c
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/CpuToIntel.c?rev=25514&r1=25513&r2=25514&view=diff
==============================================================================
--- trunk/rosapps/devutils/cputointel/CpuToIntel.c (original)
+++ trunk/rosapps/devutils/cputointel/CpuToIntel.c Thu Jan 18 22:33:48 2007
@@ -95,8 +95,8 @@
     //}
 
     //return LoadPFileImage(infile,outfile,BaseAddress,cpuid,type, mode);
-   // return LoadPFileImage("e:\\testppc.exe","e:\\cputointel.asm",0,0,0,0); // disambler
-    return LoadPFileImage("e:\\testms.exe","e:\\cputointel.asm",0,0,0,1); // convert
+   return LoadPFileImage("e:\\testppc.exe","e:\\cputointel.asm",0,0,0,2); // disambler
+   // return LoadPFileImage("e:\\testms.exe","e:\\cputointel.asm",0,0,0,1); // convert
 
 }
 

Modified: trunk/rosapps/devutils/cputointel/From/PPC/PPC.h
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/From/PPC/PPC.h?rev=25514&r1=25513&r2=25514&view=diff
==============================================================================
--- trunk/rosapps/devutils/cputointel/From/PPC/PPC.h (original)
+++ trunk/rosapps/devutils/cputointel/From/PPC/PPC.h Thu Jan 18 22:33:48 2007
@@ -12,6 +12,7 @@
 /* here we put the prototype for the opcode api that brain need we show a example for it */
 CPU_INT PPC_Blr( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
 CPU_INT PPC_Li( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
+CPU_INT PPC_Stwu( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos, CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch);
 
 /* Export comment thing see m68k for example 
  * in dummy we do not show it, for it is diffent for each cpu

Modified: trunk/rosapps/devutils/cputointel/From/PPC/PPCBrain.c
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/From/PPC/PPCBrain.c?rev=25514&r1=25513&r2=25514&view=diff
==============================================================================
--- trunk/rosapps/devutils/cputointel/From/PPC/PPCBrain.c (original)
+++ trunk/rosapps/devutils/cputointel/From/PPC/PPCBrain.c Thu Jan 18 22:33:48 2007
@@ -58,8 +58,18 @@
 
         cpuint = GetData32Le(&cpu_buffer[cpu_pos]);
 
+        /* blr */
+        if ((cpuint - (cpuint & GetMaskByte32(cpuPPCInit_Blr))) == ConvertBitToByte32(cpuPPCInit_Blr))
+        {
+            retsize = PPC_Blr( outfp, cpu_buffer, cpu_pos, cpu_size,
+                                 BaseAddress, cpuarch);
+            if (retsize<0)
+                 retcode = 1;
+            else
+                 cpu_pos += retsize;
+        }
 
-         /* 0xE = Li*/
+         /* Li*/
         if ((cpuint - (cpuint & GetMaskByte32(cpuPPCInit_Li))) == ConvertBitToByte32(cpuPPCInit_Li))
         {
             retsize = PPC_Li( outfp, cpu_buffer, cpu_pos, cpu_size,
@@ -70,17 +80,17 @@
                  cpu_pos += retsize;
         }
 
-         /* hard code the op blr */
-        if ((cpuint - (cpuint & GetMaskByte32(cpuPPCInit_Blr))) == ConvertBitToByte32(cpuPPCInit_Blr))
+        /* stwu */
+        if ((cpuint - (cpuint & GetMaskByte32(cpuPPCInit_stwu))) == ConvertBitToByte32(cpuPPCInit_stwu))
         {
-            retsize = PPC_Blr( outfp, cpu_buffer, cpu_pos, cpu_size,
+            retsize = PPC_Stwu( outfp, cpu_buffer, cpu_pos, cpu_size,
                                  BaseAddress, cpuarch);
             if (retsize<0)
                  retcode = 1;
             else
                  cpu_pos += retsize;
         }
-    
+
         /* Found all Opcode and breakout and return no error found */
         if (cpu_pos >=cpu_size)
         {
@@ -105,5 +115,6 @@
             break;
         }
     }
+
     return retcode;
 }

Modified: trunk/rosapps/devutils/cputointel/From/PPC/PPCBrain.h
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/From/PPC/PPCBrain.h?rev=25514&r1=25513&r2=25514&view=diff
==============================================================================
--- trunk/rosapps/devutils/cputointel/From/PPC/PPCBrain.h (original)
+++ trunk/rosapps/devutils/cputointel/From/PPC/PPCBrain.h Thu Jan 18 22:33:48 2007
@@ -9,16 +9,10 @@
  * same. thuse bit are always 0 or 1
  */
 
-CPU_BYTE cpuPPCInit_Blr[32]  = {0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0};
-
-
-/* xxxx xxxx xxxx xxxx DDD0 0000 xxxx xxDD 
- * 2222 2222 2222 2222 2222 2222 0011 1022 Li 
- */
-CPU_BYTE cpuPPCInit_Li[32]  = {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,1,1, 1,0,2,2};
-
-
-
+/* FIXME RA should be 0 in stwu */
+CPU_BYTE cpuPPCInit_Blr[32]   = {0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0};
+CPU_BYTE cpuPPCInit_Li[32]    = {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,1,1,1,0,2,2};
+CPU_BYTE cpuPPCInit_stwu[32]  = {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,0,0,1,0,1,2,2};
 /* mask */
 /*
  * no mask  we implement function getting the reg right 

Modified: trunk/rosapps/devutils/cputointel/From/PPC/PPCopcode.c
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/From/PPC/PPCopcode.c?rev=25514&r1=25513&r2=25514&view=diff
==============================================================================
--- trunk/rosapps/devutils/cputointel/From/PPC/PPCopcode.c (original)
+++ trunk/rosapps/devutils/cputointel/From/PPC/PPCopcode.c Thu Jan 18 22:33:48 2007
@@ -27,10 +27,19 @@
  *               value +1 and higher : who many byte we should add to cpu_pos
  */
 
-/* only for ppc */
-#define PPC_GetBitArray6toA(opcode) (((opcode & 0x3) << 3) | ((opcode & 0xE000) >> 13))
+/* Get Dest register */
+#define PPC_GetBitArrayDstReg(opcode) (((opcode & 0x3) << 3) | ((opcode & 0xE000) >> 13))
 
+/* Get Source register */
+CPU_UNINT PPC_GetBitArrayBto31xx(CPU_UNINT opcode)
+{
+    CPU_INT x1;
 
+   /* FIXME make it to a macro
+    * not tested to 100% yet */
+    x1 = ((opcode & 0x1F00)>>8);
+    return  x1;
+}
 
 
 CPU_UNINT PPC_GetBitArrayBto31(CPU_UNINT opcode)
@@ -79,9 +88,39 @@
     pMyBrainAnalys->type= 8 + 16; /* 8 dst reg, 16 imm */
     pMyBrainAnalys->src_size = 16;
     pMyBrainAnalys->src = PPC_GetBitArrayBto31(opcode);
-    pMyBrainAnalys->dst = PPC_GetBitArray6toA(opcode);
+    pMyBrainAnalys->dst = PPC_GetBitArrayDstReg(opcode);
     pMyBrainAnalys->memAdr=BaseAddress;
 
     return 4;
 }
 
+
+CPU_INT PPC_Stwu( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
+                  CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+{
+    CPU_UNINT opcode;
+    CPU_SHORT tmp = 0;
+
+    opcode = GetData32Le(cpu_buffer);
+
+    BaseAddress +=cpu_pos;
+
+    /* own translatons langues */
+    if (AllocAny()!=0)  /* alloc memory for pMyBrainAnalys */
+    {
+        return -1;
+    }
+
+    tmp =  _byteswap_ushort( ((CPU_SHORT)((opcode >> 16) & 0xffff)));
+
+    pMyBrainAnalys->op = OP_ANY_mov;
+    pMyBrainAnalys->type= 2 + 8 + 32; /* 2 src reg  8 dst reg, 32 neg */
+    pMyBrainAnalys->src_size = 16;
+    pMyBrainAnalys->dst_size = 16;
+    pMyBrainAnalys->src = PPC_GetBitArrayBto31xx(opcode);
+    pMyBrainAnalys->dst = PPC_GetBitArrayDstReg(opcode);
+    pMyBrainAnalys-> src_extra = tmp;
+    pMyBrainAnalys->memAdr=BaseAddress;
+
+    return 4;
+}

Modified: trunk/rosapps/devutils/cputointel/ImageLoader.c
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/ImageLoader.c?rev=25514&r1=25513&r2=25514&view=diff
==============================================================================
--- trunk/rosapps/devutils/cputointel/ImageLoader.c (original)
+++ trunk/rosapps/devutils/cputointel/ImageLoader.c Thu Jan 18 22:33:48 2007
@@ -160,6 +160,9 @@
             fclose(outfp);
             return 0;
        }
+
+       /* fixme */
+       return -1;
     }
 
     if (type== 1)

Modified: trunk/rosapps/devutils/cputointel/OpCodePPC.txt
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/OpCodePPC.txt?rev=25514&r1=25513&r2=25514&view=diff
==============================================================================
--- trunk/rosapps/devutils/cputointel/OpCodePPC.txt (original)
+++ trunk/rosapps/devutils/cputointel/OpCodePPC.txt Thu Jan 18 22:33:48 2007
@@ -17,7 +17,6 @@
 
 
 
-
 Here how the primary opcode work 
 xxxx xxxx xxxx xxxx DDDS SSSS 3333 33DD	  
    
@@ -26,8 +25,8 @@
 D = Destions register
 S = Source reigters   
                                                                         opcode
-                                                           ------------------------
-                                                           |bit order:  0123 45   67|
+                                                           -------------------------
+                                                           |bit order: 5432 10   67 |
      -------   -------                                      -----------         ----                                                                        
 34: | 0c 00 | | e1 93 | stw r31,12(r1) 0000 1100 0000 0000 1110 0001 | 1001 00 | 00
 38: | 14 00 | | 01 90 | stw r0,20(r1)  0001 0100 0000 0000 0000 0001 | 1001 00 | 11
@@ -42,11 +41,33 @@
        \ /        
                    
  The address offset 12 or 20
-                                     
+    
+opcode                                 
  ---------------------------------------------------------
 |bit order: pos   1111 1111 1111 1111 0000 0000 0000 0000 |
-|	          89AB CDEF 0123 4567 89AB CDEF 0123 4567 |            	
+|	                                        5432 10   |
 |---------------------------------------------------------|
 |           bits  0000 1100 0000 0000 1110 0001 1001 0000 |
  ---------------------------------------------------------
+| math    (opcode>>2) & 0x3F                              |
+ ---------------------------------------------------------
 
+Dest Register
+ ---------------------------------------------------------
+|bit order: pos   1111 1111 1111 1111 0000 0000 0000 0000 |
+|                                     210              43 |
+|---------------------------------------------------------|
+|           bits  0000 1100 0000 0000 1110 0001 1001 0000 |
+ ---------------------------------------------------------
+| math (((opcode & 0x3) << 3) | ((opcode & 0xE000) >> 13))|
+ ---------------------------------------------------------
+
+source Register
+ ---------------------------------------------------------
+|bit order: pos   1111 1111 1111 1111 0000 0000 0000 0000 |
+|                                        x xxxx           |
+|---------------------------------------------------------|
+|           bits  0000 1100 0000 0000 1110 0001 1001 0000 |
+ ---------------------------------------------------------
+| math                                                    |
+ ---------------------------------------------------------

Modified: trunk/rosapps/devutils/cputointel/any_op.h
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/any_op.h?rev=25514&r1=25513&r2=25514&view=diff
==============================================================================
--- trunk/rosapps/devutils/cputointel/any_op.h (original)
+++ trunk/rosapps/devutils/cputointel/any_op.h Thu Jan 18 22:33:48 2007
@@ -31,12 +31,15 @@
     CPU_INT  type; /*  1 = source are memmory, 2 source are register */
                    /*  4 = dest are memmory,   8 dest are register */
                    /*  16 = source are imm                          */
+                   /*  32 =  soucre -xx(r1) or [eax-xx] */
 
     CPU_INT src_size; /* who many bits are src not vaild for reg*/
     CPU_INT dst_size; /* who many bits are dst not vaild for reg*/
 
     CPU_UNINT64 src;
     CPU_UNINT64 dst;
+
+    CPU_INT src_extra; /* if type == 32 are set */
 
     CPU_UNINT memAdr; /* where are we in the current memory pos + baseaddress */
 

Modified: trunk/rosapps/devutils/cputointel/misc.h
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/misc.h?rev=25514&r1=25513&r2=25514&view=diff
==============================================================================
--- trunk/rosapps/devutils/cputointel/misc.h (original)
+++ trunk/rosapps/devutils/cputointel/misc.h Thu Jan 18 22:33:48 2007
@@ -6,6 +6,9 @@
 /* 32bits */
 #define CPU_UNINT   unsigned int
 #define CPU_INT     int
+
+/* 16 bits signed */
+#define CPU_SHORT short
 
 /* 8bits unsigned */
 #define CPU_BYTE    unsigned char




More information about the Ros-diffs mailing list