SOURCES: x86emu-update-v86d.patch (NEW) - small update from v86d (SMSW supp...
qboosh
qboosh at pld-linux.org
Wed Jul 30 19:28:57 CEST 2008
Author: qboosh Date: Wed Jul 30 17:28:57 2008 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- small update from v86d (SMSW support, INS/OUTS bugfix)
---- Files affected:
SOURCES:
x86emu-update-v86d.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/x86emu-update-v86d.patch
diff -u /dev/null SOURCES/x86emu-update-v86d.patch:1.1
--- /dev/null Wed Jul 30 19:28:57 2008
+++ SOURCES/x86emu-update-v86d.patch Wed Jul 30 19:28:51 2008
@@ -0,0 +1,102 @@
+--- x86emu-0.8/scitech/src/x86emu/ops2.c.orig 2008-07-30 19:12:27.841341000 +0200
++++ x86emu-0.8/scitech/src/x86emu/ops2.c 2008-07-30 19:20:43.845332179 +0200
+@@ -58,11 +58,13 @@
+ static void x86emuOp2_illegal_op(
+ u8 op2)
+ {
++ int mod, rl, rh;
+ START_OF_INSTR();
++ FETCH_DECODE_MODRM(mod, rh, rl);
+ DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE\n");
+ TRACE_REGS();
+- printk("%04x:%04x: %02X ILLEGAL EXTENDED X86 OPCODE!\n",
+- M.x86.R_CS, M.x86.R_IP-2,op2);
++ printk("%04x:%04x: %02X /%d ILLEGAL EXTENDED X86 OPCODE! (mod=%d rl=%d)\n",
++ M.x86.R_CS, M.x86.R_IP-2,op2, rh, mod, rl);
+ HALT_SYS();
+ END_OF_INSTR();
+ }
+@@ -71,6 +73,52 @@
+
+ /****************************************************************************
+ REMARKS:
++Handles opcode 0x0f,0x01
++****************************************************************************/
++static void x86emuOp2_group_g(u8 X86EMU_UNUSED(op2))
++{
++ int mod, rl, rh;
++ u16 *destreg;
++ uint destoffset;
++
++ START_OF_INSTR();
++ FETCH_DECODE_MODRM(mod, rh, rl);
++ switch (rh) {
++ case 4: // SMSW (Store Machine Status Word)
++ // Decode the mod byte to find the addressing
++ // Always returns 0x10 (initial value as per intel manual volume 3, figure 8-1
++ switch (mod) {
++ case 0:
++ destoffset = decode_rm00_address(rl);
++ store_data_word(destoffset, 0x10);
++ break;
++ case 1:
++ destoffset = decode_rm01_address(rl);
++ store_data_word(destoffset, 0x10);
++ break;
++ case 2:
++ destoffset = decode_rm10_address(rl);
++ store_data_word(destoffset, 0x10);
++ break;
++ case 3:
++ destreg = DECODE_RM_WORD_REGISTER(rl);
++ *destreg = 0x10;
++ break;
++ }
++ break;
++ default:
++ DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE IN 0F 01\n");
++ TRACE_REGS();
++ printk("%04x:%04x: 0F %02X /%d ILLEGAL EXTENDED X86 OPCODE! (mod=%d rl=%d)\n",
++ M.x86.R_CS, M.x86.R_IP-2,op2, rh, mod, rl);
++ HALT_SYS();
++ break;
++ }
++ END_OF_INSTR();
++}
++
++/****************************************************************************
++REMARKS:
+ Handles opcode 0x0f,0x31
+ ****************************************************************************/
+ static void x86emuOp2_rdtsc(u8 X86EMU_UNUSED(op2))
+@@ -2622,7 +2670,7 @@
+ void (*x86emu_optab2[256])(u8) =
+ {
+ /* 0x00 */ x86emuOp2_illegal_op, /* Group F (ring 0 PM) */
+-/* 0x01 */ x86emuOp2_illegal_op, /* Group G (ring 0 PM) */
++/* 0x01 */ x86emuOp2_group_g, /* Group G (ring 0 PM) */
+ /* 0x02 */ x86emuOp2_illegal_op, /* lar (ring 0 PM) */
+ /* 0x03 */ x86emuOp2_illegal_op, /* lsl (ring 0 PM) */
+ /* 0x04 */ x86emuOp2_illegal_op,
+--- x86emu-0.8/scitech/src/x86emu/prim_ops.c.orig 2008-07-30 19:25:08.049339000 +0200
++++ x86emu-0.8/scitech/src/x86emu/prim_ops.c 2008-07-30 19:25:18.393339722 +0200
+@@ -2493,8 +2493,8 @@
+ store_data_long_abs(M.x86.R_ES, M.x86.R_DI,
+ (*sys_inl)(M.x86.R_DX));
+ M.x86.R_DI += inc;
+- break;
+ }
++ break;
+ }
+ M.x86.R_CX = 0;
+ if (M.x86.mode & SYSMODE_PREFIX_DATA) {
+@@ -2557,8 +2557,8 @@
+ (*sys_outl)(M.x86.R_DX,
+ fetch_data_long_abs(M.x86.R_ES, M.x86.R_SI));
+ M.x86.R_SI += inc;
+- break;
+ }
++ break;
+ }
+ M.x86.R_CX = 0;
+ if (M.x86.mode & SYSMODE_PREFIX_DATA) {
================================================================
More information about the pld-cvs-commit
mailing list