mirror of
https://github.com/reactos/reactos.git
synced 2025-05-28 13:38:19 +00:00
[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. svn path=/branches/ntvdm/; revision=59248
This commit is contained in:
parent
c8317ea346
commit
dfd4fed945
3 changed files with 96 additions and 2 deletions
4
lib/3rdparty/softx86/softx86/optable.c
vendored
4
lib/3rdparty/softx86/softx86/optable.c
vendored
|
@ -217,9 +217,9 @@ Sfx86OpcodeTable optab8086 = {
|
||||||
{Sfx86OpcodeExec_default, Sfx86OpcodeDec_default}, /* 0x66 */
|
{Sfx86OpcodeExec_default, Sfx86OpcodeDec_default}, /* 0x66 */
|
||||||
{Sfx86OpcodeExec_default, Sfx86OpcodeDec_default}, /* 0x67 */
|
{Sfx86OpcodeExec_default, Sfx86OpcodeDec_default}, /* 0x67 */
|
||||||
|
|
||||||
{Sfx86OpcodeExec_default, Sfx86OpcodeDec_default}, /* 0x68 */
|
{Sfx86OpcodeExec_push, Sfx86OpcodeDec_push}, /* 0x68 */
|
||||||
{Sfx86OpcodeExec_default, Sfx86OpcodeDec_default}, /* 0x69 */
|
{Sfx86OpcodeExec_default, Sfx86OpcodeDec_default}, /* 0x69 */
|
||||||
{Sfx86OpcodeExec_default, Sfx86OpcodeDec_default}, /* 0x6A */
|
{Sfx86OpcodeExec_push, Sfx86OpcodeDec_push}, /* 0x6A */
|
||||||
{Sfx86OpcodeExec_default, Sfx86OpcodeDec_default}, /* 0x6B */
|
{Sfx86OpcodeExec_default, Sfx86OpcodeDec_default}, /* 0x6B */
|
||||||
{Sfx86OpcodeExec_default, Sfx86OpcodeDec_default}, /* 0x6C */
|
{Sfx86OpcodeExec_default, Sfx86OpcodeDec_default}, /* 0x6C */
|
||||||
{Sfx86OpcodeExec_default, Sfx86OpcodeDec_default}, /* 0x6D */
|
{Sfx86OpcodeExec_default, Sfx86OpcodeDec_default}, /* 0x6D */
|
||||||
|
|
30
lib/3rdparty/softx86/softx86/pushpop.c
vendored
30
lib/3rdparty/softx86/softx86/pushpop.c
vendored
|
@ -167,6 +167,21 @@ int Sfx86OpcodeExec_push(sx86_ubyte opcode,softx86_ctx* ctx)
|
||||||
return 1;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,6 +217,21 @@ int Sfx86OpcodeDec_push(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
|
||||||
return 1;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
64
lib/3rdparty/softx86/softx86_ros.diff
vendored
Normal file
64
lib/3rdparty/softx86/softx86_ros.diff
vendored
Normal file
|
@ -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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue