[ros-diffs] [greatlrd] 25542: forgot thuse file

greatlrd at svn.reactos.org greatlrd at svn.reactos.org
Sat Jan 20 14:32:27 CET 2007


Author: greatlrd
Date: Sat Jan 20 16:32:26 2007
New Revision: 25542

URL: http://svn.reactos.org/svn/reactos?rev=25542&view=rev
Log:
forgot thuse file

Added:
    trunk/rosapps/devutils/cputointel/From/dummycpu/IA32.h
    trunk/rosapps/devutils/cputointel/From/dummycpu/IA32Brain.c
    trunk/rosapps/devutils/cputointel/From/dummycpu/IA32Brain.h
    trunk/rosapps/devutils/cputointel/From/dummycpu/IA32opcode.c

Added: trunk/rosapps/devutils/cputointel/From/dummycpu/IA32.h
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/From/dummycpu/IA32.h?rev=25542&view=auto
==============================================================================
--- trunk/rosapps/devutils/cputointel/From/dummycpu/IA32.h (added)
+++ trunk/rosapps/devutils/cputointel/From/dummycpu/IA32.h Sat Jan 20 16:32:26 2007
@@ -1,0 +1,17 @@
+
+#include "../../misc.h"
+
+CPU_INT IA32Brain(  CPU_BYTE *cpu_buffer,
+                     CPU_UNINT cpu_pos,
+                     CPU_UNINT cpu_size,
+                     CPU_UNINT BaseAddress,
+                     CPU_UNINT cpuarch,
+                     FILE *outfp);
+
+/* here we put the prototype for the opcode api that brain need we show a example for it */
+CPU_INT IA32_Add(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
+ */

Added: trunk/rosapps/devutils/cputointel/From/dummycpu/IA32Brain.c
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/From/dummycpu/IA32Brain.c?rev=25542&view=auto
==============================================================================
--- trunk/rosapps/devutils/cputointel/From/dummycpu/IA32Brain.c (added)
+++ trunk/rosapps/devutils/cputointel/From/dummycpu/IA32Brain.c Sat Jan 20 16:32:26 2007
@@ -1,0 +1,107 @@
+
+#include <stdio.h>
+#include <stdlib.h> 
+#include "IA32Brain.h"
+#include "IA32.h"
+#include "../../any_op.h"
+#include "../../misc.h"
+
+
+
+
+/* 
+ * 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
+ *         3            : unimplement cpu
+ *         4            : unknown machine
+ */
+
+CPU_INT IA32Brain(  CPU_BYTE *cpu_buffer,
+                     CPU_UNINT cpu_pos,
+                     CPU_UNINT cpu_size,
+                     CPU_UNINT BaseAddress,
+                     CPU_UNINT cpuarch,
+                     FILE *outfp)
+{
+    CPU_UNINT cpu_oldpos;
+    CPU_INT cpuint;
+    CPU_INT retcode = 0;
+    CPU_INT retsize;
+
+    /* now we start the process */
+    while (cpu_pos<cpu_size)
+    {
+        cpu_oldpos = cpu_pos;
+
+        /* use the GetData32Be or GetData32Le
+           to read from the memory the
+           Le is for small endian and the
+           Be is for big endian
+           the 32 is how many bits we should read 
+         */
+        cpuint = GetData32Be(&cpu_buffer[cpu_pos]);
+    
+        /* Add */
+        if ((cpuint - (cpuint & GetMaskByte(cpuIA32Init_Add))) == ConvertBitToByte(cpuIA32Init_Add))
+        {
+            retsize = IA32_Add( 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)
+        {
+            break;
+        }
+
+        /* Check if we have found a cpu opcode */
+        if (cpu_oldpos == cpu_pos)
+        {            
+            if (retcode == 0)
+            {              
+                /* no unimplement error where found so we return a msg for unknown opcode */
+                printf("Unkonwn Opcode found at 0x%8x opcode 0x%2x\n",cpu_oldpos+BaseAddress,(unsigned int)cpu_buffer[cpu_oldpos]);                
+                retcode = 2;
+            }
+        }
+
+        /* Erorro Found ? */
+        if (retcode!=0)
+        {
+            /* Erorro Found break and return the error code */
+            break;
+        }
+    }
+    return retcode;
+}

Added: trunk/rosapps/devutils/cputointel/From/dummycpu/IA32Brain.h
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/From/dummycpu/IA32Brain.h?rev=25542&view=auto
==============================================================================
--- trunk/rosapps/devutils/cputointel/From/dummycpu/IA32Brain.h (added)
+++ trunk/rosapps/devutils/cputointel/From/dummycpu/IA32Brain.h Sat Jan 20 16:32:26 2007
@@ -1,0 +1,13 @@
+
+
+#include "../../misc.h"
+
+
+/* example how setup a opcode, this opcode is 16bit long (taken from M68K) 
+ * 0 and 1 mean normal bit, 2 mean mask bit the bit that are determent diffent 
+ * thing in the opcode, example which reg so on, it can be etither 0 or 1 in 
+ * the opcode. but a opcode have also normal bit that is always been set to 
+ * same. thuse bit are always 0 or 1
+ */
+CPU_BYTE cpuIA32Init_Add[16] = {1,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2};
+

Added: trunk/rosapps/devutils/cputointel/From/dummycpu/IA32opcode.c
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/From/dummycpu/IA32opcode.c?rev=25542&view=auto
==============================================================================
--- trunk/rosapps/devutils/cputointel/From/dummycpu/IA32opcode.c (added)
+++ trunk/rosapps/devutils/cputointel/From/dummycpu/IA32opcode.c Sat Jan 20 16:32:26 2007
@@ -1,0 +1,50 @@
+
+#include <stdio.h>
+#include <stdlib.h> 
+#include "IA32.h"
+#include "../../misc.h"
+
+
+/* cpuDummyInit_Add
+ * Input param : 
+ *               out         : The file pointer that we write to (the output file to intel asm) 
+ *               cpu_buffer  : The memory buffer we have our binary code that we whant convert
+ *               cpu_pos     : Current positions in the cpu_buffer 
+ *               cpu_size    : The memory size of the cpu_buffer
+ *               BaseAddress : The base address you whant the binay file should run from 
+ *               cpuarch     : if it exists diffent cpu from a manufactor like pentium,
+ *                             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 
+ *               value  0            : wrong opcode or not vaild opcode
+ *               value +1 and higher : who many byte we should add to cpu_pos
+ */
+ 
+CPU_INT IA32_Add( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
+                   CPU_UNINT cpu_size, CPU_UNINT BaseAddress, CPU_UNINT cpuarch)
+
+{
+    /* 
+     * ConvertBitToByte() is perfect to use to get the bit being in use from a bit array
+     * GetMaskByte() is perfect if u whant known which bit have been mask out 
+     * see M68kopcode.c and how it use the ConvertBitToByte()
+     */
+
+    fprintf(out,"Line_0x%8x :\n",BaseAddress + cpu_pos);
+
+    printf(";Add unimplement\n");
+    return -1;
+}




More information about the Ros-diffs mailing list