Author: hbelusca
Date: Sun Jun 16 23:54:30 2013
New Revision: 59248

URL: http://svn.reactos.org/svn/reactos?rev=59248&view=rev
Log:
[SOFTX86]
Fix some bugs of softx86, see CORE-7250 for more information.
All diffs from the original softx86 code should also be put in softx86_ros.diff.

Added:
    branches/ntvdm/lib/3rdparty/softx86/softx86_ros.diff
Modified:
    branches/ntvdm/lib/3rdparty/softx86/softx86/optable.c
    branches/ntvdm/lib/3rdparty/softx86/softx86/pushpop.c

Modified: branches/ntvdm/lib/3rdparty/softx86/softx86/optable.c
URL: 
http://svn.reactos.org/svn/reactos/branches/ntvdm/lib/3rdparty/softx86/softx86/optable.c?rev=59248&r1=59247&r2=59248&view=diff
==============================================================================
--- branches/ntvdm/lib/3rdparty/softx86/softx86/optable.c       [iso-8859-1] 
(original)
+++ branches/ntvdm/lib/3rdparty/softx86/softx86/optable.c       [iso-8859-1] 
Sun Jun 16 23:54:30 2013
@@ -217,9 +217,9 @@
        {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x66 */
        {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x67 */
 
-       {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x68 */
+       {Sfx86OpcodeExec_push,          Sfx86OpcodeDec_push},                   
                /* 0x68 */
        {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x69 */
-       {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x6A */
+       {Sfx86OpcodeExec_push,          Sfx86OpcodeDec_push},                   
                /* 0x6A */
        {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x6B */
        {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x6C */
        {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x6D */

Modified: branches/ntvdm/lib/3rdparty/softx86/softx86/pushpop.c
URL: 
http://svn.reactos.org/svn/reactos/branches/ntvdm/lib/3rdparty/softx86/softx86/pushpop.c?rev=59248&r1=59247&r2=59248&view=diff
==============================================================================
--- branches/ntvdm/lib/3rdparty/softx86/softx86/pushpop.c       [iso-8859-1] 
(original)
+++ branches/ntvdm/lib/3rdparty/softx86/softx86/pushpop.c       [iso-8859-1] 
Sun Jun 16 23:54:30 2013
@@ -167,6 +167,21 @@
                return 1;
        }
 
+       if (opcode == 0x6A)                                                     
// PUSH imm8
+       {
+               sx86_ubyte b = softx86_fetch_exec_byte(ctx);
+               softx86_stack_pushw(ctx, (sx86_uword)b);
+               return 1;
+       }
+
+       if (opcode == 0x68)                                                     
// PUSH imm16
+       {
+               sx86_uword w = softx86_fetch_exec_byte(ctx);
+               w |= softx86_fetch_exec_byte(ctx) << 8;
+               softx86_stack_pushw(ctx, w);
+               return 1;
+       }
+
        return 0;
 }
 
@@ -199,6 +214,21 @@
 
        if (opcode == 0x9C) {                                           // PUSHF
                strcpy(buf,"PUSHF");
+               return 1;
+       }
+
+       if (opcode == 0x6A && ctx->__private->level >= SX86_CPULEVEL_80186)     
// PUSH imm8
+       {
+               sx86_ubyte b = softx86_fetch_exec_byte(ctx);
+               sprintf(buf, "PUSH %02Xh", b);
+               return 1;
+       }
+
+       if (opcode == 0x68 && ctx->__private->level >= SX86_CPULEVEL_80186)     
// PUSH imm16
+       {
+               sx86_uword w = softx86_fetch_exec_byte(ctx);
+               w |= softx86_fetch_exec_byte(ctx) << 8;
+               sprintf(buf, "PUSH %04Xh", w);
                return 1;
        }
 

Added: branches/ntvdm/lib/3rdparty/softx86/softx86_ros.diff
URL: 
http://svn.reactos.org/svn/reactos/branches/ntvdm/lib/3rdparty/softx86/softx86_ros.diff?rev=59248&view=auto
==============================================================================
--- branches/ntvdm/lib/3rdparty/softx86/softx86_ros.diff        (added)
+++ branches/ntvdm/lib/3rdparty/softx86/softx86_ros.diff        [iso-8859-1] 
Sun Jun 16 23:54:30 2013
@@ -0,0 +1,64 @@
+Index: softx86/optable.c
+===================================================================
+--- softx86/optable.c  (révision 59247)
++++ softx86/optable.c  (copie de travail)
+@@ -217,9 +217,9 @@
+       {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x66 */
+       {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x67 */
+ 
+-      {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x68 */
++      {Sfx86OpcodeExec_push,          Sfx86OpcodeDec_push},                   
                /* 0x68 */
+       {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x69 */
+-      {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x6A */
++      {Sfx86OpcodeExec_push,          Sfx86OpcodeDec_push},                   
                /* 0x6A */
+       {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x6B */
+       {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x6C */
+       {Sfx86OpcodeExec_default,       Sfx86OpcodeDec_default},                
                /* 0x6D */
+Index: softx86/pushpop.c
+===================================================================
+--- softx86/pushpop.c  (révision 59247)
++++ softx86/pushpop.c  (copie de travail)
+@@ -167,6 +167,21 @@
+               return 1;
+       }
+ 
++      if (opcode == 0x6A)                                                     
// PUSH imm8
++      {
++              sx86_ubyte b = softx86_fetch_exec_byte(ctx);
++              softx86_stack_pushw(ctx, (sx86_uword)b);
++              return 1;
++      }
++
++      if (opcode == 0x68)                                                     
// PUSH imm16
++      {
++              sx86_uword w = softx86_fetch_exec_byte(ctx);
++              w |= softx86_fetch_exec_byte(ctx) << 8;
++              softx86_stack_pushw(ctx, w);
++              return 1;
++      }
++
+       return 0;
+ }
+ 
+@@ -202,6 +217,21 @@
+               return 1;
+       }
+ 
++      if (opcode == 0x6A && ctx->__private->level >= SX86_CPULEVEL_80186)     
// PUSH imm8
++      {
++              sx86_ubyte b = softx86_fetch_exec_byte(ctx);
++              sprintf(buf, "PUSH %02Xh", b);
++              return 1;
++      }
++
++      if (opcode == 0x68 && ctx->__private->level >= SX86_CPULEVEL_80186)     
// PUSH imm16
++      {
++              sx86_uword w = softx86_fetch_exec_byte(ctx);
++              w |= softx86_fetch_exec_byte(ctx) << 8;
++              sprintf(buf, "PUSH %04Xh", w);
++              return 1;
++      }
++
+       return 0;
+ }
+ 


Reply via email to