[SOFTX86]
authorAleksandar Andrejevic <aandrejevic@reactos.org>
Sat, 26 Oct 2013 20:53:33 +0000 (20:53 +0000)
committerAleksandar Andrejevic <aandrejevic@reactos.org>
Sat, 26 Oct 2013 20:53:33 +0000 (20:53 +0000)
Remove softx86, as it is no longer used by anything.

svn path=/branches/ntvdm/; revision=60757

71 files changed:
lib/3rdparty/CMakeLists.txt
lib/3rdparty/softx86/CMakeLists.txt [deleted file]
lib/3rdparty/softx86/Makefile [deleted file]
lib/3rdparty/softx86/autodetect_nasm.sh [deleted file]
lib/3rdparty/softx86/autodetect_softx87.sh [deleted file]
lib/3rdparty/softx86/changes.txt [deleted file]
lib/3rdparty/softx86/doc/softx86.txt [deleted file]
lib/3rdparty/softx86/faq.txt [deleted file]
lib/3rdparty/softx86/install.sh [deleted file]
lib/3rdparty/softx86/instodo.txt [deleted file]
lib/3rdparty/softx86/license.txt [deleted file]
lib/3rdparty/softx86/readme.txt [deleted file]
lib/3rdparty/softx86/softx86.dsw [deleted file]
lib/3rdparty/softx86/softx86/CMakeLists.txt [deleted file]
lib/3rdparty/softx86/softx86/Makefile [deleted file]
lib/3rdparty/softx86/softx86/aaa.c [deleted file]
lib/3rdparty/softx86/softx86/aaa.h [deleted file]
lib/3rdparty/softx86/softx86/add.c [deleted file]
lib/3rdparty/softx86/softx86/add.h [deleted file]
lib/3rdparty/softx86/softx86/binops.c [deleted file]
lib/3rdparty/softx86/softx86/binops.h [deleted file]
lib/3rdparty/softx86/softx86/cbw.c [deleted file]
lib/3rdparty/softx86/softx86/cbw.h [deleted file]
lib/3rdparty/softx86/softx86/clc.c [deleted file]
lib/3rdparty/softx86/softx86/clc.h [deleted file]
lib/3rdparty/softx86/softx86/drooling_duh.c [deleted file]
lib/3rdparty/softx86/softx86/drooling_duh.h [deleted file]
lib/3rdparty/softx86/softx86/fpu.c [deleted file]
lib/3rdparty/softx86/softx86/fpu.h [deleted file]
lib/3rdparty/softx86/softx86/groupies.c [deleted file]
lib/3rdparty/softx86/softx86/groupies.h [deleted file]
lib/3rdparty/softx86/softx86/inc.c [deleted file]
lib/3rdparty/softx86/softx86/inc.h [deleted file]
lib/3rdparty/softx86/softx86/interrupts.c [deleted file]
lib/3rdparty/softx86/softx86/interrupts.h [deleted file]
lib/3rdparty/softx86/softx86/ioport.c [deleted file]
lib/3rdparty/softx86/softx86/ioport.h [deleted file]
lib/3rdparty/softx86/softx86/jumpy.c [deleted file]
lib/3rdparty/softx86/softx86/jumpy.h [deleted file]
lib/3rdparty/softx86/softx86/mov.c [deleted file]
lib/3rdparty/softx86/softx86/mov.h [deleted file]
lib/3rdparty/softx86/softx86/optable.c [deleted file]
lib/3rdparty/softx86/softx86/optable.h [deleted file]
lib/3rdparty/softx86/softx86/prefixes.c [deleted file]
lib/3rdparty/softx86/softx86/prefixes.h [deleted file]
lib/3rdparty/softx86/softx86/procframe.c [deleted file]
lib/3rdparty/softx86/softx86/procframe.h [deleted file]
lib/3rdparty/softx86/softx86/pushpop.c [deleted file]
lib/3rdparty/softx86/softx86/pushpop.h [deleted file]
lib/3rdparty/softx86/softx86/resource.h [deleted file]
lib/3rdparty/softx86/softx86/shovel.c [deleted file]
lib/3rdparty/softx86/softx86/shovel.h [deleted file]
lib/3rdparty/softx86/softx86/softx86.c [deleted file]
lib/3rdparty/softx86/softx86/softx86_dll.def [deleted file]
lib/3rdparty/softx86/softx86/softx86_dll.dsp [deleted file]
lib/3rdparty/softx86/softx86/softx86_dll.rc [deleted file]
lib/3rdparty/softx86/softx86/softx86_static.dsp [deleted file]
lib/3rdparty/softx86/softx86_ros.diff [deleted file]
lib/3rdparty/softx86/softx87/CMakeLists.txt [deleted file]
lib/3rdparty/softx86/softx87/Makefile [deleted file]
lib/3rdparty/softx86/softx87/optab87.h [deleted file]
lib/3rdparty/softx86/softx87/optable.c [deleted file]
lib/3rdparty/softx86/softx87/resource.h [deleted file]
lib/3rdparty/softx86/softx87/softx87.c [deleted file]
lib/3rdparty/softx86/softx87/softx87_dll.def [deleted file]
lib/3rdparty/softx86/softx87/softx87_dll.dsp [deleted file]
lib/3rdparty/softx86/softx87/softx87_dll.rc [deleted file]
lib/3rdparty/softx86/softx87/softx87_static.dsp [deleted file]
lib/3rdparty/softx86/softx87/windll.c [deleted file]
lib/3rdparty/softx86/todo.txt [deleted file]
subsystems/ntvdm/CMakeLists.txt

index 6428485..13bef59 100644 (file)
@@ -8,7 +8,6 @@ add_subdirectory(libmpg123)
 add_subdirectory(libsamplerate)
 add_subdirectory(libwine)
 add_subdirectory(libxml2)
-add_subdirectory(softx86)
 if(MSVC)
     add_subdirectory(stlport)
 endif()
diff --git a/lib/3rdparty/softx86/CMakeLists.txt b/lib/3rdparty/softx86/CMakeLists.txt
deleted file mode 100644 (file)
index 71fc4b0..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-add_subdirectory(softx86)
-add_subdirectory(softx87)
diff --git a/lib/3rdparty/softx86/Makefile b/lib/3rdparty/softx86/Makefile
deleted file mode 100644 (file)
index e22641c..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-# Linux makefile for compiling SOFTX86
-# (C) 2003 Jonathan Campbell all rights reserved.
-#
-# Requirements:
-# GCC 3.xx
-# NASM 0.95 and better
-#
-# This Makefile really just calls Make to compile sub-projects.
-
-# make it all
-all:: __autodetect_softx87 __autodetect_nasm
-       make -C samples
-       make -C softx86
-       if [ -d softx87 ]; then make -C softx87; fi
-       make -C softx86dbg
-
-# clean it all
-clean:: __fake_makes
-       make -C samples clean
-       make -C softx86 clean
-       if [ -d softx87 ]; then make -C softx87 clean; fi
-       make -C softx86dbg clean
-
-# clean it all for distribution
-distclean:: __fake_makes
-       make -C samples distclean
-       make -C softx86 distclean
-       if [ -d softx87 ]; then make -C softx87 distclean; fi
-       make -C softx86dbg distclean
-       rm -f softx86dbg/Makefile.softx86
-       rm -f samples/Makefile.nasm
-       rm -f lib/*.exp         # clean up excess files from MSVC++
-       rm -f softx86.ncb
-       rm -f softx86.opt
-
-# copy libsoftx86 and friends to the /usr/include and /usr/lib directories.
-install::
-       if [ -f install.sh ]; then sh install.sh; fi
-
-# run shell script that looks for soft87 project source
-# tree (to be extracted within this source tree)
-__autodetect_softx87:
-       ./autodetect_softx87.sh
-
-# run shell script to look for NASM
-__autodetect_nasm:
-       ./autodetect_nasm.sh
-
-# create temporary empty versions of the
-# include Makefiles that some rely on
-# so they work. They will be deleted when
-# "make clean" or "make distclean" is finished
-__fake_makes:
-       if [[ !( -f samples/Makefile.nasm ) ]]; then echo "# nothing" >samples/Makefile.nasm; fi
-       if [[ !( -f softx86dbg/Makefile.softx86 ) ]]; then echo "# nothing" >softx86dbg/Makefile.softx86; fi
-
diff --git a/lib/3rdparty/softx86/autodetect_nasm.sh b/lib/3rdparty/softx86/autodetect_nasm.sh
deleted file mode 100644 (file)
index 1a82fc9..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-# /bin/sh
-
-nasm >/dev/null
-
-if [[ "$?" == "0" || "$?" == "1" ]]; then
-       echo "all: samples_all"         >samples/Makefile.nasm
-       echo "NASM=nasm"               >>samples/Makefile.nasm
-else
-       echo "#nothing to do here"      >samples/Makefile.nasm
-       echo "all:"                    >>samples/Makefile.nasm
-       echo -n -e "\t"                >>samples/Makefile.nasm
-       echo "echo You do not have NASM... skipping sample build" >>samples/Makefile.nasm
-fi
-
diff --git a/lib/3rdparty/softx86/autodetect_softx87.sh b/lib/3rdparty/softx86/autodetect_softx87.sh
deleted file mode 100644 (file)
index 7045056..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# /bin/sh
-
-if [ -d ./softx87 ]; then
-       echo "INCLUDZ += -DSOFT87FPU"   >softx86dbg/Makefile.softx87
-       echo "LIBINCLUDZ += -lsoftx87" >>softx86dbg/Makefile.softx87
-else
-       echo "#nothing to do here"      >softx86dbg/Makefile.softx87
-fi
-
diff --git a/lib/3rdparty/softx86/changes.txt b/lib/3rdparty/softx86/changes.txt
deleted file mode 100644 (file)
index 95c2135..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-v0.00.0033: Jonathan Campbell
- - Added helper function softx87_connect_to_CPU()
-   to ease CPU <=> FPU connection for programmers.
- - Added softx86_set_intvect().
- - Added general API functions softx86_make_simple_near_call(),
-   softx86_make_simple_far_call(), softx86_make_simple_interrupt_call(),
-   to make it easier for the program to manually invoke
-   calls to program code within the virtual environment.
- - Added FBLD and FBSTP emulation
- - Added FLD1, FLDL2T and other constant-related FPU instruction emulation
- - Added FCLEX & FSCALE emulation
- - Added F2XM1 & FCOM emulation
- - Added FDIV, FDIVR, and FICOM emulation
-
-v0.00.0032: Jonathan Campbell
- - Using the 'u' command multiple times without
-   arguments now continues the decompiler from
-   where it left off, rather than restarting at
-   CS:IP
- - Fixed a bug that caused Softx86dbg to crash if
-   run without an executable image to debug.
- - Fixed a an error in the code that causes Softx86dbg
-   to crash when debugging a .COM file. See
-   http://sourceforge.net/tracker/index.php?func=detail&aid=919504&group_id=76259&atid=546548
-   for details.
- - Added code to stop emulation and alert the user
-   if the instruction pointer wanders into areas
-   that normally do not contain code (e.g. the
-   interrupt vector table, the BIOS data area,
-   adapter ROM areas, etc).
- - Fixed up INT 21h AH=4Ch/AH=00h code that would
-   have otherwise failed if AL was anything but 00h.
- - Cleaned up interrupt handler system in Softx86dbg.
-
-v0.00.0031: Jonathan Campbell
- - Added command "!ramdump" to dump the entire 1MB
-   simulated RAM buffer to a file so you can then
-   examine it further with your favorite hex editor.
- - Fixed coding mistake in .EXE relocation code that
-   caused corruption of the .EXE image, as well as
-   incorrect relocations
- - Added check for .EXE files with funny entry point
-   values (e.g. 0xFFF0:0x0100) that ultimately translate
-   to valid offsets (such as the very beginning of the
-   resident area). Attempts to debug these previously
-   caused softx86dbg to crash. These EXEs were probably
-   converted from .COM images anyway.
- - Fixed 'D' and 'U' command parsing bugs in softx86dbg
-   that failed to recognize first segment value
-   if it started with A-F (e.g. BF45:1233)
- - Fixed incorrect assignment of DS and ES when
-   setting up .EXE emulated environment in
-   softx86dbg. DS and ES now point to PSP segment
-   instead of the first paragraph of the EXE
-   binary.
- - Fixed bugs dealing with group 80h instructions
-   that are using an 8-bit sign-extended immediate
-   value with a 16-bit parameter.
- - It turns out DOS DEBUG.EXE (at least the one
-   bundled with Windows XP) also supports multiple
-   steps with t followed by the number of steps.
-   The funny thing is that it assumes the number
-   is hexadecimal... whatever.
-
-v0.00.0030: Jonathan Campbell
- - More FADD fixes
- - Softx86dbg shows FPU contents in scientific notation
- - Added FSUB, FSUBP emulation
- - Added FABS, FCHS, FRNDINT
- - Soft86 context structure modified so that the structure
-   itself stays the same size and format even if additions
-   are made to sub-structures
- - Softx87 will no longer be distributed separately from
-   the main source tarball
- - New documentation!
-
-v0.00.0029: Jonathan Campbell
- - Fixes for FADD
- - Integer -> float conversion now normalizes the values.
-
-v0.00.0028: Jonathan Campbell
- - Added FADD, FADDP, FIADD 8087 instructions
-
-v0.00.0027: Jonathan Campbell
- - Fixed LOCK decompiler not printing anything to the buffer.
- - Enhanced FPU backend and started development on
-   Softx87, an 8087 FPU emulation engine designed to tie
-   into Softx86.
- - Added FINIT, FNOP, FLD, FINCSTP, FDECSTP, FFREE
- - install.sh is no longer regenerated
- - More intelligent makefile now checks for presence of
-   NASM and softx87 source tree. If you didn't download
-   the softx87 code with softx86, softx86dbg is compiled
-   and built without 8087 emulation support. If you don't
-   have NASM the samples are not built and are skipped.
-
-v0.00.0026: Jonathan Campbell
- - Added callback-based backend so that Softx86 can
-   hand FPU opcodes off to other libraries or subroutines
-   assigned to emulating the 80x87 FPU. If no callbacks
-   for this have been assigned Softx86 treats the opcode
-   as unknown.
- - Added version information to the context structure.
- - Fixed bug in softx86dbg's handling of the 'R' register
-   change command for the segment registers.
- - Added callback for CPU resets.
-
-v0.00.0025: Jonathan Campbell
- - Added group 3-1A (0xF6/0xF7 opcodes) TEST r/m,
-   NOT r/m, NEG r/m, MUL r/m, IMUL r/m, DIV r/m, IDIV r/m.
- - Added LOOP/LOOPZ/LOOPNZ.
- - Added ENTER/LEAVE.
- - Added LES and LDS.
- - Added BOUND.
- - The entire 8086 instruction set is now implemented in
-   this library (at least the ones that Intel documents).
-   Let me know if I'm wrong. If this proves to be a sturdy
-   implementation I might re-release this as the official
-   v1.0 beta! Let me know if any undocumented instructions
-   should be implemented.
-
-v0.00.0024: Jonathan Campbell
- - Added RCL and RCR
-
-v0.00.0023: Jonathan Campbell
- - Added SHL, SHR, and SAR
- - Added some helpful constants in softx86.h that can be used
-   in shifting operations to obtain specific bits in the FLAGS
-   register, like this:
-
-   t = (ctx->stage.flags>>SX86_CPUFLAGBO_PARITY)&1;
-
-   instead of:
-
-   t = (ctx->stage.flags&SX86_CPUFLAG_PARITY)?1:0;
-
- - Added ROL, ROR
-
-v0.00.0022: Jonathan Campbell
- - Added PUSHA, POPA, LOCK
-
-v0.00.0021: Jonathan Campbell
- - Fixed major mistake in FAR CALL/INTERRUPT stack framing
-   code. Segment and offset values were pushed onto the
-   stack in the wrong order!
- - Added CALL/JMP/CALL FAR/JMP FAR (0xFF /2 /3 /4 and /5)
- - Added preliminary code to start supporting 80286 instructions.
-   softx86_init() now reports 8088/8086 emulation as stable,
-   since 80% of the instructions have been implemented anyway.
-   calling softx86_init() with SX86_CPULEVEL_80286 or
-   SX86_CPULEVEL_80186 is now legal.
- - Fixed main Makefile. Somehow it got mixed up with another
-   Makefile.
-
-v0.00.0020: Jonathan Campbell
- - Added FAQ.
- - Fixed minor error in hypothetical I/O device at port 0x9A.
-   16-bit data is now treated the same way that it would be if
-   written as 8-bit data.
- - DOS 16-bit real-mode EXE loader. Now softx86dbg can debug
-   MS-DOS EXEs.
-
-v0.00.0019: Jonathan Campbell
- - Added PUSHF/POPF.
- - Added SAHF/LAHF---HA HA HA! LAHF! GET IT? :)
- - Added CMPS and SCAS
- - Updated instodo.txt to show some instructions that I forgot to
-   mention were implemented already.
- - Fixed bug in REP loop code that continued looping even if
-   ZF flag failed condition. This caused many REPNE SCASB loops to
-   fail until it was fixed.
-
-v0.00.0018: Jonathan Campbell
- - Fixed coding mistakes in segment prefix decoder (using >= not ==)
- - Added REP/REPZ prefix handling
- - Added MOVS, LODS, STOS
- - README file rewritten
- - Fixed SOFTX86DBG printing unshifted value ANDed from FLAGS for flag
-   states (e.g. should be ZF=1 not ZF=64).
- - The 't' command under SOFTX86DBG now allows optional parameter to
-   specify how many instructions to step through before returning. For
-   example:
-   
-   t 27 
-
-   means step through 27 instructions.
- - Added the ability to compile Softx86 and Softx86dbg using MINGW and
-   Bloodshed Dev-C++ IDE.
-
-v0.00.0017: Jonathan Campbell
- - Found a way to convince MSVC++ that Softx86 is a dependency of
-   Softx86dbg. Reorganized project files so that the static library
-   is a dependency of the DLL version, and the DLL version is a
-   dependency of Softx86dbg. The DLL version now exports symbols
-   from the compiled static library version instead of recompiling
-   the entire library to produce the DLL.
- - Softx86dbg now has a pretty icon resource so you can easily
-   identify it under Windows :)
- - Added JMP abs. direct far and CALL abs. direct far.
- - Fixed FAR and INTERRUPT stack frame code that put segment and
-   offset values in the wrong order!
- - Added JMP/CALL rel8/rel16.
-
-v0.00.0016: Jonathan Campbell
- - Added TEST and XCHG.
- - Added LEA (Load Effective Address)
- - Added TEST08.ASM to test the TEST/XCHG instructions.
- - Softx86dbg now shows CPU flags as CF=1, AF=0, etc. for clarity.
-
-v0.00.0015: Jonathan Campbell
- - Added DAA, XLAT and DAS instructions.
- - Fixed a few subtle bugs in AAA and AAS emulation where final result
-   was not masked with 0xF like it should have been.
- - Fixed AAA/AAS/AAM/AAD instructions to properly set CPU flags like they
-   should.
-
-v0.00.0014: Jonathan Campbell
- - Registers are now represented by a structure (a union really)
-   rather than 16-bit word values that are referred to directly with
-   Endian-sensitive code. I had never thought of using C/C++ unions
-   like this before... thanks goes to Paul Muller for bringing this
-   up. On the other hand... in the act of modifying all of the emulation
-   code to handle the new arrangement it's possible that I broke
-   something.... please let me know or fix it and e-mail the patch to
-   me.
- - Added Jcc (JMP conditional) instructions (JCXZ,JA,JB,JL,JG,JP,JZ,JC...)
-
-v0.00.0013: Jonathan Campbell
- - Added CMP and AND.
-
-v0.00.0012: Jonathan Campbell
- - Added API call to "reset" the CPU.
- - Added XOR.
- - Added API call to get library version. This can be used when
-   linked to the shared library to determine the version and
-   whether or not it matches the #defines in softx86.h.
-
-v0.00.0011: Jonathan Campbell
- - Fixed missing header file problems in MSVC++ project workspace
-   files caused by renaming config.h to softx86cfg.h.
- - Fixed erroneous use of opcode functions where parameters were
-   switched from their intended meaning. In other words, the
-   executioneer functions were passing the destination as the
-   source and the source as the destination. This causes the
-   SUB and SBB instructions to add rather than subtract like
-   they should.
- - Added SBB.
- - Added INT 3, INT n, INTO.
- - Added CPU interrupt handling (external and internal).
- - Added bug emulation.
- - Added host idle callback for finer emulation during the
-   execution of an instruction.
- - Added CPU NMI code.
- - Softx86dbg now allows you to change register values by
-   typing "r [regname]".
- - Softx86dbg now has very primitive INT 20h and INT 21h
-   emulation.
- - Added fix for COM loading code in softx86dbg that would
-   otherwise overrun the simulated RAM if the user were to
-   try to debug a very large file.
- - More fixes; apparently whenever I transfer the tarball
-   back and forth between my Linux box and my Windows box
-   the install.sh script got munged with DOS \n\r sequences.
-   This apparently causes Bash to come up with really weird
-   error messages pointing to the functions and referring to
-   'nstall.sh (wtf?!?). So from now on the Makefile automatically
-   generates install.sh when you type "make" for the first time
-   and removes install.sh file when you type "make distclean".
-
-v0.00.0010: Jonathan Campbell
- - Added SUB and ADC.
- - Added ADD r/m,imm.
- - Make install improved, more intelligent, moved to install.sh
-   as a shell script that is called when you type "make install".
- - Makefile script more intelligent, automatically creates "obj"
-   subdirectories now (and removes them on "make distclean").
- - Changed BYTE_ORDER #define in softx86.h so that it doesn't
-   conflict with headers in /usr/include. It is now called
-   SX86_BYTE_ORDER.
-
-v0.00.0009: Jonathan Campbell
- - Added IN/OUT instruction emulation.
- - Sample code to make use of IN/OUT and hypothetical
-   hardware adding logic with I/O ports that softx86dbg
-   provides for testing.
- - Fixed erroneous AF (Aux flag) emulation for ADD. Found
-   out (and later found a reference to this in Intel's
-   80286 documentation) that AF is set if the CPU, peforming
-   addition one 4-bit nibble at a time (a 16/32-bit
-   processor!?!) has to carry while adding the least
-   significant nibbles. For example:
-   0x04 + 0x06 = 0x0A           AF=0
-   0x08 + 0x08 = 0x10           AF=1
-   0x10 + 0xFF = 0x10F          AF=0
-   0x1E + 0xFF = 0x11D          AF=1
-
-v0.00.0008: Jonathan Campbell
- - Softx86 now compiles into a shared library for Linux and a
-   DLL for Win32.
-
-v0.00.0007: Jonathan Campbell
- - More work on the mod/reg/rm decoder
- - MOV [r/m],[segreg] and MOV AL/AX,[mem] implemented
- - MOV [r/m],[imm] implemented
- - More test assembly code
-
-v0.00.0006: Jonathan Campbell
- - Apparently DOS DEBUG single-step command is 't', not 's'.
-   Sorry :)
- - ADD mod/reg/rm and MOV mod/reg/rm implemented.
- - ADD al,imm8 and ADD ax,imm16 implemented.
- - Segment prefixes CS: DS: ES: and SS: now supported.
-
-v0.00.0005: Jonathan Campbell
- - Installation of library and header files for Softx86 possible
-   via "make install" command (if you are root).
- - Fixed some errors in README file, compiling instructions
-   clearer now.
-
-v0.00.0004: Jonathan Campbell
- - Linux/GCC makefiles.
- - Command line input written for Linux version.
- - SoftX86 documentation reference and summary included in source
-   now.
- - Library archive output of SoftX86 for Linux.
- - More comments in softx86dbg to make it easier to understand.
-
-v0.00.0003: Jonathan Campbell
- - More opcodes: RET n, RETF, RETF n, IRETD, HLT
- - Removed alignment code, statements about 80x86 CPU always
-   accessing memory on aligned boundaries was wrong, based
-   on mis-interpretation of CPU diagrams.
- - Instruction execution functions can now return value 3
-   to indicate that the opcode was executed in full
-   completeness but that a looping operation is in effect and
-   that the instruction pointer should remain the same afterwards.
-
-v0.00.0002: Jonathan Campbell
- - More one-byte opcodes added: CBW, CWDE, CWD, CDQ, CLC,
-   CLD, CLI, CMC, STC, STD, STI
- - Made necessary additions to ? command in softx86dbg (now
-   it honestly tells you all commands supported).
- - softx86dbg now heeds "warning" return value from libsoftx86
-   and displays warning message.
-
-v0.00.0001: Jonathan Campbell
- - Initial release
- - One-byte opcodes added: AAA, AAS, PUSH [reg], POP [reg],
-   PUSH CS/DS/ES/SS, POP CS/DS/ES/SS, NOP
- - Preliminary library interface design
- - MSVC 6.0 project workspace files only---Linux Makefile
-   soon to come
- - Program to test library with: softx86dbg
- - Sample assembly code to test library with:
-   samples/test01.asm (NASM required to assemble)
diff --git a/lib/3rdparty/softx86/doc/softx86.txt b/lib/3rdparty/softx86/doc/softx86.txt
deleted file mode 100644 (file)
index e9542ee..0000000
+++ /dev/null
@@ -1,546 +0,0 @@
-
-Softx86 - Stock Software Intel 80x86 emulation library
-
-Introduction
-============
-
-Softx86 is designed to be a simple library that one can
-link into their program for 80x86 emulation purposes.
-The primary goals of this project are:
-
-* accurate emulation
-* reasonably sized memory footprint
-* modular design that closely models the actual
-  hardware signals (Clocking, I/O, addressable
-  memory, #INT and #NMI) using callbacks
-  set up by the program
-
-The Softx86 library itself is designed to emulate ONLY
-the CPU, none of the surrounding hardware. Just like
-the real thing the program using Softx86 is responsible
-for providing RAM, I/O, and #INT/#NMI signals as
-appropriate, and making the necessary calls to cycle the CPU.
-
-
-+-----------------------------------------------+
-| SOFTX86 LIBRARY IN A TYPICAL EMULATOR PROJECT |
-+-----------------------------------------------+
-
-
- +-----------------------------------+
- | APPLICATION AS THE "MOTHERBOARD", |
- | "POWER SUPPLY", "RAM", AND "I/O   |         
- | DEVICES".                         |         +------------------------------+
- |                                   |         | SOFTX86 LIBRARY AS THE "CPU" |
- | MAIN LOOP                         |         |                              |
- |   |                               |         | CPU INSTRUCTION EXECUTIONEER |
- |   +-----------------------------------------------------------^        |   |
- |                                   |         |                          |   |
- | ADDRESSABLE RAM EMULATION<=====================(callback)==============|   |
- |                                   |         |                          |   |
- | I/O PORT EMULATION<============================(callback)==============/   |
- |                                   |         |                              |
- | INTERRUPT SIGNAL SOURCE           |         |                              |
- |   \/                 \/           |         |                              |
- | #INT LINE MODERATOR   --------------------->| #NMI handler                 |
- |   \/                              |         |                              |
- |    ---------------------------------------->| #INT handler                 |
- |                                   |         |                              |
- +-----------------------------------+         +------------------------------+
-
- Softx86 is like a lone CPU, it needs a "motherboard" to interact with.
-
-
-The Softx86 API uses context structures to represent
-a CPU, rather than internal variables, so that
-it is possible to emulate more than one CPU
-simultaneously using the same library. This also
-puts the CPU's entire state in one location for both
-Softx86 and the application using it, so that use
-of numerous API calls are generally not needed to get
-or set the CPU state (although some members should
-not be modified directly).
-
-STEP 1: CREATING A CPU
-======================
-
-To create a CPU, you first need to allocate a region
-of memory of size sizeof(softx86_ctx).
-
------ C example -----
-softx86_ctx* cpu;
-cpu = (softx86_ctx*)(malloc(sizeof(softx86_ctx)));
-
------ C++ example -----
-softx86_ctx* cpu;
-cpu = new softx86_ctx;
-
-Using memset() to fill the contents of that area with NULL
-is advised but not absolutely necessary.
-
-Then call API function softx86_init(), passing it the address
-of the context structure and a constant from softx86.h
-that represents which version of the 80x86 the context
-structure represents.
-
------- C/C++ example -----
-/* I want this CPU to act like a 80286. */
-/* Act appropriately if there is an error. */
-ser=softx86_init(cpu,SX86_CPULEVEL_80286);
-if (ser == 0) {
-       printf("ERROR: Unable to initialize CPU\n");
-       return 0;
-}
-
-STEP 2: SET UP CALLBACKS
-========================
-
-You've made the CPU but now it needs to know who to call
-for fetching RAM and I/O. Set that up now.
-
-WARNING: This is grossly oversimplified, not including code
-         to properly handle requests that fall outside the
-         1MB range! YES IT CAN HAPPEN, ESPECIALLY IF EMULATING
-         THE 286 WHICH CAN ADDRESS 16MB! See Softx86dbg source
-         code for a better example!
-
------ C/C++ example -----
-/* can hold the entire 1MB range supported by the 8086 */
-unsigned char BIG_HUNK[1024*1024];
-
-/* called when reading memory */
-void on_read_memory(void* _ctx,sx86_udword address,sx86_ubyte *buf,int size)
-{
-       memcpy(buf,BIG_HUNK+address,size);
-}
-
-/* called when writing memory */
-void on_write_memory(void* _ctx,sx86_udword address,sx86_ubyte *buf,int size)
-{
-       memcpy(BIG_HUNK+address,buf,size);
-}
-
-/* called when reading an I/O port */
-void on_read_io(void* _ctx,sx86_udword address,sx86_ubyte *buf,int size)
-{
-       /* in this example there are no I/O ports */
-       memset(buf,0xFF,size);
-}
-
-/* called when writing an I/O port */
-void on_write_io(void* _ctx,sx86_udword address,sx86_ubyte *buf,int size)
-{
-       /* in this example there are no I/O ports */
-}
-
-/* function to set up the callbacks for given cpu */
-void setup_callbacks(softx86_ctx *cpu)
-{
-       cpu.callbacks->on_read_memory   = on_read_memory;
-       cpu.callbacks->on_write_memory  = on_write_memory;
-       cpu.callbacks->on_read_io       = on_read_io;
-       cpu.callbacks->on_write_io      = on_write_io;
-}
-
-Once everything is set up, you must call softx86_reset()
-to reset the CPU.
-
------ C/C++ example -----
-softx86_reset(cpu);
-
-STEP 3: GIVE THE CPU SOMETHING TO EXECUTE
-=========================================
-
-For the CPU to execute something it must have valid instructions.
-There are many sources that these can be obtained, starting with
-simple MS-DOS .COM executables (which can be found on any web site
-dedicated to ancient DOS programs and games), or perhaps whatever
-happens to be on the hard drive of that old dusty 286 in the corner,
-although you can also find some on many Windows 95/98-based systems.
-By .COM executables I DO NOT MEAN COM/OLE ActiveX controls!
-Anyway, best results can be obtained by using a COM program that is
-simple (doesn't rely too much on direct hardware access or performs
-a simple function).
-
-Loading a COM executable into your program's simulated RAM should be
-easy:
-
------ C/C++ example -----
-void load_code()
-{
-       FILE *comfile;
-
-       comfile = fopen("whatever.com","rb");
-       if (!comfile) {
-               printf("Unable to load program!\n");
-               return 0;
-       }
-
-       /* remember BIG_HUNK[] ? */
-       /* 0x100 offset because of PSP segment and such */
-       /* CS:IP = 0x1000:0x0100 */
-       /* (0x1000 << 4) + 0x100 = 0x10100 */
-       fread(BIG_HUNK+0x10100,65280,1,comfile);
-       fclose(comfile);
-
-       /* set up a PSP and such... */
-       /* I'll leave it up to you as an exercise :) */
-
-       /* done */
-       return 1;
-}
-
-Now that there is code to execute, we need to tell the CPU where
-to start executing. To do this, we must redirect the INSTRUCTION
-POINTER.
-
-NOTE: The instruction pointer variables can be accessed directly
-      through the context structure to obtain the values and
-      the cached information (such as precalculated segment->linear
-      conversion). HOWEVER you must not modify these values
-      directly!
-
------ C/C++ example -----
-softx86_set_instruction_ptr(cpu,0x1000,0x100);
-
-Depending on the program, it is most likely that you will want
-to set up the stack pointer as well so that the program has a
-usable stack.
-
-NOTE: The stack pointer must NOT be modified directly, although
-      the values can be readily obtained through the context
-      structure!
-
------ C/C++ example -----
-softx86_set_stack_ptr(cpu,0x1000,0xFFF8);
-
-Many DOS programs assume that DOS will set the segment registers
-so that CS = DS = ES. Set the segment registers appropriately:
-
-NOTE: The segment registers carry with them a cached copy of
-      various state information (limits, precalculated
-      segment->linear conversion, protected mode bits, etc).
-      They may be directly accessed through the context
-      structure but must not be modified directly!
-
------ C/C++ example -----
-softx86_setsegval(cpu,SX86_SREG_DS,0x1000);    /* set DS */
-softx86_setsegval(cpu,SX86_SREG_ES,0x1000);    /* set ES */
-
-STEP 4: CYCLING THE CPU
-=======================
-
-Execution doesn't happen unless your program explicitly wants
-it to happen, which it does by calling softx86_step(). For
-each call to softx86_step(), one instruction is executed
-and then control is returned to your program. The return
-value indicates success or failure.
-
------ C/C++ example -----
-x=softx86_step(cpu);
-if (x == 0) {
-       printf("The CPU failed to execute or recognize an instruction\n");
-}
-
-During the call, softx86_step() is likely to call your
-memory and I/O callback routines (in fact it's guaranteed).
-When softx86_step() returns the instruction pointer values
-and all registers affected will be updated according to
-whatever instruction was executed. On return, the instruction
-pointer points to the next instruction that will be executed,
-or points to the offending instruction if an error occured.
-
-
-* FOR MORE DETAILS REFER TO THE SOFTX86DBG SOURCE CODE, OR
-  E-MAIL ME AT jcampbell@mdjk.com.
-
-
-FREEING/DISPOSING OF A CPU
-==========================
-
-Disposing of a CPU is simple. Call softx86_free()
-and then free the memory you allocated for that
-structure. That's it.
-
-NOTE: It is very important to call softx86_free()
-      because Softx86 itself allocates memory
-      for CPU emulation purposes associated with
-      that CPU. Freeing the structure and not
-      calling softx86_free() may (very likely!)
-      result in memory leaks!
-
------ C example -----
-softx86_free(cpu);
-free(cpu);
-
------ C/C++ example ----
-softx86_free(cpu);
-delete cpu;
-
-
-HOW TO SIGNAL AN EXTERNAL HARDWARE INTERRUPT
-============================================
-
-Use API call softx86_ext_hw_signal() to emulate an #INT
-signal from hardware.
-
-NOTE: Do not assume that this function will succeed.
-      If softx86_ext_hw_signal() has already been called
-      but the CPU has not yet acknowledged the interrupt,
-      softx86_ext_hw_signal() will return 0 (error).
-      Otherwise, it will return 1 (success). If you plan
-      on emulating a platform with multiple interrupt
-      signals possible, consider writing a wrapper for
-      this call in your program that moderates the
-      signals somehow. For example, write a portion of
-      your program that emulates the Programmable
-      Interrupt Controller in IBM PC/XT/AT+ hardware, then
-      write a general function your code can call that
-      emulates IRQ signals being sent to the PIC. The PIC
-      emulator can then act as a moderator that uses this
-      function to pass the IRQ signals to the CPU.
-
------ C/C++ example, signalling INT 9 (PC/XT/AT+ IRQ 1) from hardware -----
-int i,j;
-
-/* loop until we can signal the interrupt we want */
-/* ---or, until CPU failure */
-i=1;
-j=0;
-while (i && !j) {
-       i=softx86_step(cpu);
-       if (i) j=softx86_ext_hw_signal(cpu,9);
-}
-
-HOW TO SIGNAL AN EXTERNAL NMI (NON-MASKABLE) HARDWARE INTERRUPT
-===============================================================
-
-Use API call softx86_ext_hw_nmi_signal() to emulate an
-#NMI signal from hardware.
-
-NOTE: Do not assume that this function will succeed.
-      If #NMI has already been activated but the CPU
-      has not yet acknowledged the interrupt, this
-      function will return 0 (error). Otherwise, it
-      will return 1 (success).
-
-NOTE: This signal is processed immediately, even if
-      #INT is active. #NMI has higher priority than
-      #INT.
-
------ C/C++ example, signalling NMI from hardware -----
-int i,j;
-
-/* loop until we can signal the interrupt we want */
-/* ---or, until CPU failure */
-i=1;
-j=0;
-while (i && !j) {
-       i=softx86_step(cpu);
-       if (i) j=softx86_ext_hw_nmi_signal(cpu);
-}
-
-HOW TO FORCE SOFTWARE INTERRUPT
-===============================
-
-calling softx86_int_sw_signal() causes the CPU to branch to
-an interrupt as if the INT instruction had just been executed
-in the program.
-
-NOTE: If the CPU is in protected mode, this function may fail
-      if the interrupt is invalid according to the IDT or
-      GDT/LDT!
-
------ C/C++ example, software interrupt INT 21h -----
-softx86_int_sw_signal(cpu,0x21);
-
-HOW TO USE THE DECOMPILER
-=========================
-
-In addition to providing the ability to execute instructions,
-Softx86 provides an alternate API call to decompile instructions
-at an alternate instruction pointer referred to as the
-"decompiler instruction pointer".
-
-First, you set the decompiler IP using
-softx86_set_instruction_dec_ptr() or
-softx86_decompile_exec_cs_ip().
-
-NOTE: The decompiler instruction pointer, like the
-      CPU instruction pointer, MUST NOT BE MODIFIED
-      DIRECTLY!
-
------ C/C++ example, setting decompile CS:IP to specific values -----
-sx86_udword seg,ofs;
-softx86_set_instruction_dec_ptr(cpu,seg,ofs);
-
------ C/C++ example, setting decompiler CS:IP == current instruction pointer -----
-softx86_decompile_exec_cs_ip(cpu);
-
-Then, you call softx86_decompile() for each instruction, providing
-for it a char array that is 256 bytes wide or larger.
-
------ C/C++ example, decompiling 10 instructions following CS:IP -----
-char asmbuf[256];
-int j;
-
-softx86_decompile_exec_cs_ip(cpu);
-for (j=0;j < 10;j++) {
-       if (!softx86_decompile(cpu,asmbuf)) {
-               printf("*decompiler error!\n");
-               j=10;   /* terminate the loop */
-       }
-       else {
-               printf("%s\n",asmbuf);
-       }
-}
-
-HOW TO DETERMINE THE SOFTX86 VERSION
-====================================
-
-Obtaining the version of the Softx86 library your
-program is using is simple. Have 3 integers ready
-and call softx86_getversion() like this:
-
-int x,major,minor,subminor;
-
-x=softx86_getversion(&major,&minor,&subminor);
-if (!x) {
-       printf("Unable to obtain version!\n");
-       return 1;
-}
-
-You can then determine if you're using the version
-you were compiled for by matching them against the
-constants (defined in softx86.h) SOFTX86_VERSION_HI,
-SOFTX86_VERSION_LO, and SOFTX86_VERSION_SUBLO.
-
-if (major != SOFTX86_VERSION_HI ||
-    minor != SOFTX86_VERSION_LO ||
-    subminor != SOFTX86_VERSION_SUBLO) {
-    printf("ERROR: Version mismatch!\n");
-    return 1;
-}
-
-HOW TO CHANGE THE GENERAL REGISTERS
-===================================
-
-All of the general registers (AX,BX,CX,DX,SI,DI,BP,SP)
-are of type softx86_regval, which is a union that allows
-either partial or complete access of the contents
-(no matter what the native byte order is).
-
-The general registers reside in
-cpu->state.general_reg[], an array of softx86_regval
-values which may be indexed using the constants defined in
-softx86.h:
-
-SX86_REG_AX,SX86_REG_BX,SX86_REG_CX,SX86_REG_DX,
-SX86_REG_SI,SX86_REG_DI,SX86_REG_BP,SX86_REG_SP.
-
-NOTE: You must not modify the SP register directly!
-      Use softx86_set_stack_ptr()
-
-Thus, you can read/modify AX like this:
-
-cpu->state.general_reg[SX86_REG_AX].w.lo
-
-or EAX like this:
-
-cpu->state.general_reg[SX86_REG_AX].val
-
-or AH like this:
-
-cpu->state.general_reg[SX86_REG_AX].b.hi
-
-*------------------------------------*
-| softx86_regval union naming scheme |
-*------------------------------------*
-general_reg[idx].val =        the entire 32 bit register (e.g. EAX)
-general_reg[idx].w.lo =       the lower 16 bit portion (e.g. AX bits 0-15)
-general_reg[idx].w.hi =       the upper 16 bit portion (bits 16-31)
-general_reg[idx].b.lo =       the lower 8 bit portion (e.g. AL bits 0-7)
-general_reg[idx].b.hi =       the upper 8 bit portion (e.g. AH bits 8-15)
-general_reg[idx].b.extra[0] = bits 16-23 as a byte
-general_reg[idx].b.extra[1] = bits 24-31 as a byte
-
-HOW TO CHANGE THE INSTRUCTION POINTER
-=====================================
-
-The instruction pointer lies in cpu->state.reg_ip (IP)
-and cpu->state.segment_reg[SX86_SREG_CS].val (CS).
-
-NOTE: You should NOT change this value directly! Use
-      softx86_set_instruction_ptr() or
-      softx86_set_near_instruction_ptr() instead!
-      Changing reg_ip directly may cause problems
-      with instruction prefetch emulation or
-      any portion of the code that caches the
-      instruction pointer.
-
-cpu->state.reg_ip is a DWORD value that represents the
-current offset in the code segment.
-cpu->state.segment_reg[SX86_SREG_CS].val represents the
-actual value of the CS segment register, along with the
-precalculated linear and limit values for the segment/selector.
-
-To change both CS and IP to known values, call
-softx86_set_instruction_ptr() with the new CS:IP values.
-
-NOTE: softx86_set_instruction_ptr() and
-      softx86_set_near_instruction_ptr() will return
-      0 (error) if the CS:IP values are invalid.
-
------ C/C++ example -----
-x=softx86_set_instruction_ptr(cpu,0xF000,0xFFF0);
-if (!x) {
-       printf("Failed to set instruction pointer!\n");
-       return 1;
-}
-
-If you only wish to change IP without changing CS,
-you may call softx86_set_near_instruction_ptr().
-
------ C/C++ example -----
-x=softx86_set_near_instruction_ptr(cpu,0x100);
-if (!x) {
-       printf("Failed to set instruction pointer!\n");
-       return 1;
-}
-
-HOW TO CHANGE THE SEGMENT REGISTERS
-===================================
-
-The segment registers are stored in the context structure
-under cpu->state.segment_reg[] and are of type
-softx86_segregval. softx86_segregval is a special structure
-that holds the value of the register as well as hidden
-cached values related to the segment register.
-
-typedef struct {
-       sx86_uword      val;            /* visible to program---the value */
-       sx86_udword     cached_linear;  /* hidden---linear address of segment */
-       sx86_udword     cached_limit;   /* hidden---limit of segment */
-} softx86_segregval;
-
-A particular segment value may be obtained by using
-constants SX86_SREG_ES, SX86_SREG_CS, SX86_SREG_DS,
-SX86_SREG_SS as indices to the array.
-
-NOTE: Do NOT modify these values directly. Use
-      softx86_setsegval() instead!
-
-To retrieve the current value in CS for example:
-
-segment = cpu->state.segment_reg[SX86_SREG_CS].val;
-
-To set the value of CS:
-
-x=softx86_setsegval(cpu,SX86_SREG_CS,0xF000);
-if (!x) {
-       printf("Unable to set CS!\n");
-       return 1;
-}
-
-NOTE: softx86_setsegval() will return 0 (error)
-      if the CS value is invalid.
diff --git a/lib/3rdparty/softx86/faq.txt b/lib/3rdparty/softx86/faq.txt
deleted file mode 100644 (file)
index 51792d7..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-Frequently Asked Questions v0.00.0033
-
-Q. When will Softx86 become a full-fledged PC emulator?
-
-A. It won't. It will however become a full-fledged Intel 80x86 CPU
-   clone that you can tie into your PC emulation software.
-  
-Q. Where are the sample DOS binaries used to test the emulator?
-
-A. Prebuilt binaries are now distributed separately from the
-   source tarball. The source code is still provided, so you
-   can assemble them yourself if you have NASM (Netwide Assembler)
-   installed on your system.
-
-Q. How do I use softx86dbg?
-
-A. Bring up the command prompt (Windows or Linux), change to the
-   root directory of the source tree and type "bin/softx86dbg"
-   followed by a path to a DOS .COM executable.
-
-   For example, to run samples/test11.com in the emulator, type:
-
-   bin/softx86dbg samples/test11.com
-
-   Linux users may benefit from running the statically linked
-   version (especially if they cannot "su root" and "make install")
-   because a previous version of the library installed in
-   /usr/local/lib might be incompatible with the latest version
-   of softx86dbg. You can run the statically linked version by
-   typing:
-
-   bin/softx86dbg-static samples/test11.com
-
-   softx86dbg will let you know if it couldn't load the file.
-
-Q. Softx86dbg is running and it found the COM file I want
-   to run. Now what?
-
-   Softx86dbg more or less follows the DOS DEBUG.COM style
-   interface. For each step, the values of the registers
-   are shown. Commands are parsed one line at a time and
-   each command is entered as one or more letters. The
-   commands are:
-
-   r [REGISTER]            Change a register value
-
-   r                       Show the register contents
-
-   t                       Single-step (execute one instruction)
-
-   q                       Quit
-
-   d [[seg:]offset]        Dump memory at given address. If no
-                           address is given, ds:0x0000 is assumed.
-                           If no segment value is given, the offset
-                           is assumed to be within the current
-                           data (DS) segment.
-
-   u [[seg:]offset]        Unassemble (disassemble) instructions
-                           at given address. If no address is given,
-                           disassembly starts at the current location
-                           of the instruction pointer (CS:IP). If
-                           no segment value is given, the offset is
-                           assumed to be within the current code
-                           (CS) segment.
-
-   ?                       print help.
-
-   Softx86dbg also recognizes commands that the original DOS DEBUG.COM
-   never had:
-
-   t [x]                   Single-step <x> times. In other words,
-                           execute <x> instructions then return.
-                           UPDATE: It turns out DEBUG.COM for Windows
-                                   XP has this feature after all
-
-   !reset                  Resets the virtual CPU.
-
-   !ramdump                Dumps the virtual RAM to a file named
-                           1MB_MEM.BIN
-
-Q. What kind of environment does Softx86dbg emulate?
-
-A. Softx86dbg emulates a very simple DOS-style environment. An INT 21h
-   interface is provided for the program to terminate by, and A simple
-   PSP structure is built for the program. Softx86dbg also demonstrates
-   the I/O port callback functions by emulating hypothetical hardware
-   that takes input and performs a simple calculation with it.
-
-   When the program terminates through INT 21h, softx86dbg prints a
-   notice on the screen indicating that the program terminated.
-
-Q. How do I talk to the hypothetical hardware?
-
-A. Currently (as of v0.00.0020) there are two I/O ports that the
-   hardware exists on.
-
-   Port 0x1234 is a simple register. Every time it is read, the value
-   is incremented by 0x22 or 0x2222 (depending on how much is read)
-   and then returned to the CPU. When written, the value is copied
-   verbatim to the register.
-
-   Port 0x9A is a byte-sized register. When written, the value is
-   incremented by 1 and then stored in the register. Then read,
-   the value of the register is returned as-is.
-
-   Since this can change in the future (not to mention conflicts with
-   actual PC hardware) do not rely on these I/O ports being emulated.
-   They are used only by samples/test04.com to test the I/O port
-   emulation of Softx86.
-
-Q. I wrote a program that uses Softx86. How do I make it execute
-   instructions? Is there a call that starts a background thread?
-
-A. Softx86 does not execute or decompile anything by itself. It expects
-   your program to execute instructions one at a time using
-   softx86_step().
-
-Q. What is this "context structure" that every API function requires?
-
-A. The context structure represents one CPU and it's current state.
-   All registers, modes, caches, and such are stored in that state.
-   The design favors this over the use of static variables so that
-   one copy of libsoftx86 can potentially emulate several CPUs at
-   once.
-
-   To "create" a CPU, allocate memory in your program for one
-   context structure and call softx86_init().
-
-/* example of C code creating and initializing softx86 context structure */
-   softx86_ctx* cpu;
-
-   cpu = (softx86_ctx*)malloc(sizeof(softx86_ctx));
-   memset(cpu,0,sizeof(softx86_ctx)); /* recommended, not strictly necessary */
-   softx86_init(cpu);
-
-/* example of C++ code creating and initializing softx86 context structure */
-   softx86_ctx* cpu;
-
-   cpu = new softx86_ctx;
-   memset(cpu,0,sizeof(softx86_ctx)); /* recommended, not strictly necessary */
-   softx86_init(cpu);
-
-/* example of C++ code pushing softx86 to the extreme by creating 32 separate CPUs */
-   softx86_ctx* cpu;
-   int x;
-
-   cpu = new softx86_ctx[32];
-   memset(cpu,0,sizeof(softx86_ctx)*32); /* recommended, not strictly necessary */
-   for (x=0;x < 32;x++) /* 32 brains are better than one! */
-       softx86_init(&cpu[x]);
-
-   The Softx86 API functions require this context structure so
-   that they know what CPU to perform the operation on and so that
-   they have access to the CPU state. To execute an instruction
-   on cpu0 and decompile something on cpu1, for example, you would
-   write:
-
-   char cpu1_output[256];
-   softx86_step(&cpu0);
-   softx86_decompile(&cpu1,cpu1_output);
-
-   To delete a CPU and free the resources associated with it
-   (including caches stored in the context structure), pass
-   the context structure one last time to soft86_free().
-   Once it has been freed by softx86_free() you may free
-   the memory used by the context structure itself (or
-   do whatever you want to it).
-
-/* example of C code freeing a CPU */
-   softx86_free(cpu);
-   free(cpu);
-   cpu=NULL;
-
-/* example of C++ code freeing a CPU */
-   softx86_free(cpu);
-   delete cpu;
-   cpu=NULL;
-
-/* example of hot-shot C++ code (above) freeing all 32 CPUs he created */
-   int x;
-
-   for (x=0;x < 32;x++)
-     softx86_free(&cpu[x]);
-
-   delete cpu;
-   cpu=NULL;
-
-/* example of C code creating, freeing a CPU, then dancing on it's grave */
-   char *ptr;
-   softx86_ctx* cpu;
-
-   ptr = malloc(sizeof(softx86_ctx));
-   cpu = (softx86_ctx*)ptr;
-   softx86_init(cpu); /* create CPU */
-   softx86_step(cpu); /* execute something */
-   softx86_free(cpu); /* you've served your purpose now get outta here! */
-   strcpy(ptr,        /* alright yeah! Now I can safely use the same area of memory */
-       "Blah Blah Yadda Yadda"); /* to store funny weird ASCIIZ strings! Whoo! */
-   free(ptr);         /* but I have better things to do... */
-
-Q. I get strange errors from make or Bash even though the scripts and Makefiles
-   look perfectly fine.
-
-A. The install.sh script may have gotten munged with DOS-style CR LF line breaks.
-   This seems to happen when I pack the source code into a .tar.gz tarball then
-   copy the tarball to my Windows machine and unpack it using WinZIP or 7-Zip.
-   It doesn't immediately seem broken because Notepad and Wordpad show it perfectly,
-   but when the extracted files are tar and gzip'd and moved back to the Linux box
-   to be tested, the problems show up almost immediately. Bash expects to see
-   only LF line breaks, which is why it panics the way it does. GNU Make as far
-   as I know is generally tolerant of DOS CR/LF sequences so perhaps the
-   Makefile is corrupt in some way.
-
-   A quick fix can be done by changing to the directory containing Makefile and
-   install.sh and typing:
-
-   dos2unix install.sh; dos2unix Makefile
-
-   Bash shouldn't have any more problems.
-   NOTE: I've also found that WinZIP can't extract tar files properly if they
-         contain symlinks. 7-Zip does just fine.
-
-Q. There are all these makefiles to make a static library and a DLL. There are
-   also two makefiles to produce the same program: Softx86dbg. What's the point?
-   why are you doing this?
-
-A. Producing Softx86 as a static library AND a DLL allows software developers to
-   incorporate it into their programs in whatever flavor they like. Some people
-   especially those producting standalone programs, like statically linked
-   versions so that they don't have to deal with messy DLL dependencies or carry
-   extra luggage around with the main executable. Other developers, especially
-   those working on large projects, like modular designs so that DLLs and
-   resources can be loaded and unloaded dynamically (imagine a large project
-   that uses Softx86 as one of many emulation engines to simulate everything
-   ranging from a PC to a Z-80 to a Super-NES, for example). For these large
-   projects, Softx86 in DLL form is the best choice.
diff --git a/lib/3rdparty/softx86/install.sh b/lib/3rdparty/softx86/install.sh
deleted file mode 100644 (file)
index 217f475..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-# bin/bash
-#---------------------------
-# install script for Softx86
-# (C) 2003 Jonathan Campbell
-#   <jcampbell@mdjk.com>
-#---------------------------
-# this script automatically generated
-exit_if_failed() {
-       if [[ !( $? -eq 0 ) ]]; then exit 1; fi
-       return 0;
-}
-installcopy2() {
-       echo "Installing Softx86 libraries+headers"
-       exit_if_failed
-       cp lib/libsoftx86.a /usr/lib/libsoftx86.a
-       exit_if_failed
-       cp lib/libsoftx86.so /usr/lib/libsoftx86.so
-       exit_if_failed
-       cp include/softx86.h /usr/include/softx86.h
-       exit_if_failed
-       cp include/softx86cfg.h /usr/include/softx86cfg.h
-       exit_if_failed
-       chmod 644 /usr/lib/libsoftx86.a
-       exit_if_failed
-       chmod 644 /usr/lib/libsoftx86.so
-       exit 0;
-}
-
-install87copy2() {
-       echo "Installing Softx87 libraries+headers"
-       exit_if_failed
-       cp lib/libsoftx87.a /usr/lib/libsoftx87.a
-       exit_if_failed
-       cp lib/libsoftx87.so /usr/lib/libsoftx87.so
-       exit_if_failed
-       cp include/softx87.h /usr/include/softx87.h
-       exit_if_failed
-       chmod 644 /usr/lib/libsoftx87.a
-       exit_if_failed
-       chmod 644 /usr/lib/libsoftx87.so
-       exit 0;
-}
-installcopy() {
-       if (installcopy2);
-       then echo "Installation done";
-       else echo "Installation failed";
-       fi
-       return 0;
-}
-
-install87copy() {
-       if (install87copy2);
-       then echo "Installation done";
-       else echo "Installation failed";
-       fi
-}
-if [[ -f lib/libsoftx86.a && -f lib/libsoftx86.so ]];
-then installcopy;
-else echo "You must build this project first";
-exit 0;
-fi
-
-if [ -d softx87 ]; then
-       if [[ -f lib/libsoftx87.a && -f lib/libsoftx87.so ]];
-       then install87copy;
-       else echo "You must build softx87 first";
-       exit 0;
-       fi
-fi
-
-#end
diff --git a/lib/3rdparty/softx86/instodo.txt b/lib/3rdparty/softx86/instodo.txt
deleted file mode 100644 (file)
index 78cc773..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-
-A complete log of which instructions have been implemented so far:
-
-KEY: X = execution implemented
-     D = decompiler implemented
-     B = has known bugs
-     I = incomplete preliminary
-     ? = bug-free status not confirmed
-     - = not implemented
-     N = not handled if emulating that particular CPU
-
-  INS          OPCODE        CONTRIBUTED TO BY      8086 8088 186 286 386 486
-==============|=============|======================|====|====|===|===|===|===|
-ADD           |0x00-0x03    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-ADD           |0x04-0x05    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-PUSH ES       |0x06         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-POP ES        |0x07         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-OR            |0x08-0x0B    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-OR            |0x0C-0x0D    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-PUSH CS       |0x0E         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-POP CS        |0x0F         |jcampbell@mdjk.com    |XD? |XD? |N  |N  |N  |N  |
-SMSW /4       |0x0F 0x01 /4 |jcampbell@mdjk.com    |N   |N   |XD?|XD?|XD?|XD?|
-LMSW /6       |0x0F 0x01 /6 |jcampbell@mdjk.com    |N   |N   |XD?|XD?|XD?|XD?|
-ADC           |0x10-0x13    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-ADC           |0x14-0x15    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-PUSH SS       |0x16         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-POP SS        |0x17         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SBB           |0x18-0x1B    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SBB           |0x1C-0x1D    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-PUSH DS       |0x1E         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-POP DS        |0x1F         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-AND           |0x20-0x23    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-AND           |0x24-0x25    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-ES:           |0x26         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-DAA           |0x27         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SUB           |0x28-0x2B    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SUB           |0x2C-0x2D    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-CS:           |0x2E         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-DAS           |0x2F         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-XOR           |0x30-0x33    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-XOR           |0x34-0x35    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SS:           |0x36         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-AAA           |0x37         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-CMP           |0x38-0x3B    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-CMP           |0x3C-0x3D    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-DS:           |0x3E         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-AAS           |0x3F         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-INC [reg]     |0x40-0x47    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-DEC [reg]     |0x48-0x4F    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-PUSH [reg]    |0x50-0x57    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-POP [reg]     |0x58-0x5F    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-PUSHA         |0x60         |jcampbell@mdjk.com    |N   |XD? |XD?|XD?|XD?|XD?|
-POPA          |0x61         |jcampbell@mdjk.com    |N   |XD? |XD?|XD?|XD?|XD?|
-BOUND reg,rm  |0x62         |jcampbell@mdjk.com    |N   |XD? |XD?|XD?|XD?|XD?|
-J<cc> [near]  |0x70-0x7F    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-ADD rm,imm /0 |0x80-0x83    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-OR  rm,imm /1 |0x80-0x83    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-ADC rm,imm /2 |0x80-0x83    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SBB rm,imm /3 |0x80-0x83    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-AND rm,imm /4 |0x80-0x83    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SUB rm,imm /5 |0x80-0x83    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-XOR rm,imm /6 |0x80-0x83    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-CMP rm,imm /7 |0x80-0x83    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-TEST reg,r/m  |0x84-0x85    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-XCHG reg,r/m  |0x86-0x87    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-MOV           |0x88-0x8B    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-MOV [sreg]    |0x8C         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-LEA reg,r/m   |0x8D         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-MOV [sreg]    |0x8E         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-POP mem rm /6 |0x8F /6      |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-NOP/XCHG AX,AX|0x90         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-XCHG reg16,AX |0x91-0x97    |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-CBW           |0x98         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-CWD           |0x99         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-CALL seg:ofs  |0x9A         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-WAIT          |0x9B         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-PUSHF         |0x9C         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-POPF          |0x9D         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-SAHF          |0x9E         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-LAHF          |0x9F         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-MOV           |0xA0-0xA3    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-MOVS          |0xA4-0xA5    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-CMPS          |0xA6-0xA7    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-TEST          |0xA8-0xA9    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-STOS          |0xAA-0xAB    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-LODS          |0xAC-0xAD    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SCAS          |0xAE-0xAF    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-MOV           |0xB0-0xB7    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-MOV           |0xB8-0xBF    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-ROL rm,imm /0 |0xC0-0xC1    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-ROR rm,imm /1 |0xC0-0xC1    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-RCL rm,imm /2 |0xC0-0xC1    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-RCR rm,imm /3 |0xC0-0xC1    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SHL rm,imm /4 |0xC0-0xC1    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SHR rm,imm /5 |0xC0-0xC1    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SAR rm,imm /7 |0xC0-0xC1    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-RET + POP n   |0xC2         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-RET (near)    |0xC3         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-LES reg,rm    |0xC4         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-LDS reg,rm    |0xC5         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-MOV           |0xC6-0xC7    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-ENTER imm,imm |0xC8         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-LEAVE         |0xC9         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-RETF + POP n  |0xCA         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-RETF (far)    |0xCB         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-INT 3h        |0xCC         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-INT n         |0xCD         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-INTO          |0xCE         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-IRET          |0xCF         |jcampbell@mdjk.com    |XD? |XD  |XD |XD |XD |XD |
-ROL rm,1 /0   |0xD0-0xD1    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-ROR rm,1 /1   |0xD0-0xD1    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-RCL rm,1 /2   |0xD0-0xD1    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-RCR rm,1 /3   |0xD0-0xD1    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SHL rm,1 /4   |0xD0-0xD1    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SHR rm,1 /5   |0xD0-0xD1    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SAR rm,1 /7   |0xD0-0xD1    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-ROL rm,CL /0  |0xD2-0xD3    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-ROR rm,CL /1  |0xD2-0xD3    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-RCL rm,CL /2  |0xD2-0xD3    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-RCR rm,CL /3  |0xD2-0xD3    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SHL rm,CL /4  |0xD2-0xD3    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SHR rm,CL /5  |0xD2-0xD3    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-SAR rm,CL /7  |0xD2-0xD3    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-AAM           |0xD4         |jcampbell@mdjk.com    |XD? |XD  |XD |XD |XD |XD |
-AAD           |0xD5         |jcampbell@mdjk.com    |XD? |XD  |XD |XD |XD |XD |
-XLAT          |0xD7         |jcampbell@mdjk.com    |XD? |XD  |XD |XD |XD |XD |
-[FPU backend] |0xD8-0xDF    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-LOOPNZ        |0xE0         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-LOOPZ         |0xE1         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-LOOP          |0xE2         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-JCXZ          |0xE3         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-IN AL,imm     |0xE4         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-IN AX,imm     |0xE5         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-OUT AL,imm    |0xE6         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-OUT AX,imm    |0xE7         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-CALL rel16    |0xE8         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-JMP rel16     |0xE9         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-JMP seg:ofs   |0xEA         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-JMP rel8      |0xEB         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-IN AL,DX      |0xEC         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-IN AX,DX      |0xED         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-OUT AL,DX     |0xEE         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-OUT AX,DX     |0xEF         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-LOCK          |0xF0         |jcampbell@mdjk.com    |XDI |XDI |XDI|XDI|XDI|XDI|
-REPNZ         |0xF2         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-REPZ          |0xF3         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-HLT           |0xF4         |jcampbell@mdjk.com    |XDI |XDI |XDI|XDI|XDI|XDI|
-CMC           |0xF5         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-TEST rm,imm /0|0xF6-0xF7    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-NOT rm /2     |0xF6-0xF7    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-NEG rm /3     |0xF6-0xF7    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-MUL rm /4     |0xF6-0xF7    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-IMUL rm /5    |0xF6-0xF7    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-DIV rm /6     |0xF6-0xF7    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-IDIV rm /7    |0xF6-0xF7    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-CLC           |0xF8         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-STC           |0xF9         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-CLI           |0xFA         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-STI           |0xFB         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-CLD           |0xFC         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-STD           |0xFD         |jcampbell@mdjk.com    |XD  |XD  |XD |XD |XD |XD |
-INC rm /0     |0xFE-0xFF    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-DEC rm /1     |0xFE-0xFF    |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-CALL rm /2    |0xFF         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-JMP rm /3     |0xFF         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-CALL FAR rm /4|0xFF         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-JMP FAR rm /5 |0xFF         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-PUSH mem rm /6|0xFF         |jcampbell@mdjk.com    |XD? |XD? |XD?|XD?|XD?|XD?|
-
-FPU INSTRUCTIONS
-
-  INS          OPCODE          CONTRIBUTED TO BY      8087 287 387 487 
-==============|===============|======================|====|===|===|===|
-FADD mem32    |0xD8 /0        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FCOM mem32    |0xD8 /2        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FCOMP mem32   |0xD8 /3        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FSUB mem32    |0xD8 /4        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FDIV mem32    |0xD8 /6        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FDIVR mem32   |0xD8 /7        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FADD (0),(i)  |0xD8 0xC0-0xC7 |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FSUB (0),(i)  |0xD8 0xE0-0xE7 |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FDIV (0),(i)  |0xD8 0xF0-0xF7 |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FDIVR (0),(i) |0xD8 0xF8-0xFF |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FLD mem32     |0xD9 /0        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FLD ST(i)     |0xD9 0xC0-0xC7 |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FNOP          |0xD9 0xD0      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FCHS          |0xD9 0xE0      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FABS          |0xD9 0xE1      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FLD1          |0xD9 0xE8      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FLDL2T        |0xD9 0xE9      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FLDL2E        |0xD9 0xEA      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FLDPI         |0xD9 0xEB      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FLDLG2        |0xD9 0xEC      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FLDLN2        |0xD9 0xED      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FLDZ          |0xD9 0xEE      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-F2XM1         |0xD9 0xF0      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FDECSTP       |0xD9 0xF6      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FINCSTP       |0xD9 0xF7      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FRNDINT       |0xD9 0xFC      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FSCALE        |0xD9 0xFD      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FIADD mem32   |0xDA /0        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FICOM mem32   |0xDA /2        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FICOMP mem32  |0xDA /3        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FISUB mem32   |0xDA /4        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FIDIV mem32   |0xDA /6        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FIDIVR mem32  |0xDA /7        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FCLEX         |0xDB 0xE2      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FINIT         |0xDB 0xE3      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FADD mem64    |0xDC /0        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FCOM mem64    |0xDC /2        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FCOMP mem64   |0xDC /3        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FSUB mem64    |0xDC /4        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FDIV mem64    |0xDC /6        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FDIVR mem64   |0xDC /7        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FADD (i),(0)  |0xDC 0xC0-0xC7 |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FDIVR (i),(0) |0xDC 0xF0-0xF7 |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FDIV (i),(0)  |0xDC 0xF8-0xFF |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FLD ST(i)     |0xDD /0        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FFREE ST(i)   |0xDD 0xC0-0xC7 |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FIADD mem16   |0xDE /0        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FICOM mem16   |0xDE /2        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FICOMP mem16  |0xDE /3        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FIDIV mem16   |0xDE /6        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FIDIVR mem16  |0xDE /7        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FADDP (i),(0) |0xDE 0xC0-0xC7 |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FCOMPP        |0xDE 0xD9      |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FSUBP (i),(0) |0xDE 0xE8-0xEF |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FDIVRP (i),(0)|0xDE 0xF0-0xF7 |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FDIVP (i),(0) |0xDE 0xF8-0xFF |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
-FBLD mem80    |0xDF /4        |jcampbell@mdjk.com    |XD? |XD?|XD?|XD?|
diff --git a/lib/3rdparty/softx86/license.txt b/lib/3rdparty/softx86/license.txt
deleted file mode 100644 (file)
index 5b6e7c6..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-                   GNU GENERAL PUBLIC LICENSE
-                      Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-\f
-                   GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-\f
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-\f
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-\f
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                           NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-\f
-           How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/lib/3rdparty/softx86/readme.txt b/lib/3rdparty/softx86/readme.txt
deleted file mode 100644 (file)
index 6bf17c0..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-Softx86: Software x86 CPU emulator library v0.00.0032
-
-UNPACKING THE SOURCE TARBALLS
-=============================
-
-Softx86 is distributed as several tarballs. The base tarball,
-softx86-vx.xx.xxxx, contains the source code for softx86
-itself. No prebuild binaries are provided. The other source
-tarballs are meant to be obtained and then extracted in the
-same directory that you extracted softx86 itself.
-
-The additional tarballs contain:
-- The sample binaries, already assembled
-- Prebuilt Win32 versions of the libraries
-  and softx86dbg in DLL and static form.
-
-The Softx86 make system automatically detects the
-presence of the softx87 directory (which exists
-only if you extracted the softx87 tarball correctly).
-If it is found, makefiles are modified so that
-softx86dbg is built and compiled to use it.
-
-as of v0.00.0030 the softx87 source tree is now
-distributed with softx86.
-
-EXAMPLE OF UNPACKING THE ENTIRE SOFTX86 PROJECT:
-
-cd /usr/src
-tar -xzf softx86-v0.00.0032
-cd softx86
-make
-make install
-
-PLATFORMS SUPPORTED
-===================
-
-Softx86 is carefully written and maintained so that the same source
-tree can be used to produce Win32 and Linux binaries as well as
-Win32 DLLs and Linux shared libraries. Compiler-specific optimizations
-are welcome though they will be separated with #ifdef...#else...#endif
-statements and macros for full portability. Optimizations and code
-organization sensitive to various characteristics of the platform can
-be controlled via #defines in include/config.h.
-
-COMPILING FOR WIN32
-===================
-
-To compile the Win32 versions you will need Microsoft Visual C++ 32-bit
-for Visual Studio 6.0 or higher. Service pack 5 and the latest processor pack
-are recommended but not required.
-
-From Visual Studio, select "open workspace" and open softx86.dsw. Select
-"softx86 - release", then hilight both projects in the workspace window.
-Right click and select "build selection only" from the popup menu.
-
-This should make the following files:
-
-bin/softx86dbg.exe     Win32 console application (NOT DOS!) not unlike
-                    DOS DEBUG to test softx86.
-
-lib/softx86.lib                Static library of softx86.
-
-WARNING: The interfaces and structures can and will change! If you distribute
-         a binary version of your program that uses Softx86, later versions
-         may break your program! This is alpha software, the context structure
-        has not been finalized!
-
-To recompile the test COM programs, you will need the Win32 or DOS version of
-NASM installed somewhere referred to in your PATH= variable or in the same
-directory.
-
-COMPILING FOR LINUX
-===================
-
-To compile for Linux you will need GCC 3.2.xx or higher, NASM 0.98 or higher,
-make 3.79 or higher, and GNU ld 2.13 or higher.
-
-If you extracted the source tarball over the source of older versions please
-type "make distclean" to clean up the source tree.
-
-Type "make" to compile the entire project.
-This will make the following files:
-
-bin/softx86dbg          console application not unlike DOS DEBUG to test
-                        softx86.
-
-bin/softx86dbg-static  statically linked version of softx86dbg.
-
-lib/libsoftx86.a        Static library of softx86.
-
-lib/libsoftx86.so       Shared library of softx86.
-
-Then, super-user to or logon as "root" and type "make install". This
-will run a bash shell script that copies libsoftx86.a and libsoftx86.so
-to your /usr/lib directory. This script will also copy softx86.h and
-softx86cfg.h to your /usr/include directory. If any errors occur during
-the installation process the script will immediately exit with a message.
-
-WARNING: The interfaces and structures can and will change! If you distribute
-         a binary version of your program that uses Softx86, later versions
-         may break your program! This is alpha software, the context structure
-         has not been finalized!
-
-USING SOFTX86DBG
-================
-
-Softx86dbg is a DOS DEBUG-style debugger that uses Softx86. It allows
-very simple debugging of COM executable binary images written for DOS.
-It does *NOT* emulate directly from an assembly language listing!
-
-Softx86dbg does not load a COM image by default. You must specify one
-on the command line.
-
-DESIGN GOALS
-============
-
-The goal of Softx86 is to eventually become a full functioning software
-clone of the Intel 80x86 CPU. I want to stress, however, that this library is
-intended to become exactly that and no more. The interface between this
-library and the host application is designed so that this library is only
-responsible for fetching data and executing/decompiling instructions; the host
-application is responsible for emulating other aspects of the PC platform
-hardware (i.e. system timer or keyboard controller) and providing the
-simulated memory for the CPU to fetch data from or write data to, thus
-this library can be used to emulate ANY platform or environment involving
-some use of the x86.
-
-WHY NOT C++
-===========
-
-I am writing the majority of this library in C (even though the softx86dbg
-program is in fact written in C++) so that it can be linked to either C or
-C++ programs (whatever your preference). Writing this library in C++ in
-contrast would render it unusable for C programs or require the use of
-"wrappers".
-
-HOW DOES THE LIBRARY INTERACT WITH THE HOST APPLICATION?
-========================================================
-
-The host application allocates memory for a "context structure" that
-represents one CPU (of type struct softx86_ctx). The host app then calls
-softx86_init() to initialize the memebrs of that structure, given a value
-specifying which revision of the 80x86 to emulate. Once done, the host app
-can use other library API functions like softx86_set_instruction_ptr() to
-set the instruction pointer, register values, etc.
-
-The library CPU does not automatically start executing instructions on
-it's own. It only executes instructions when the host app tells it to by
-repeatedly calling softx86_step() per instruction. Thus, how fast the
-software CPU runs is highly dependant on how efficient the host application
-is.
-
-The library can (and will) request memory and I/O data from the host app
-via callback function pointers contained within the context structure. There
-is currently no API function to set them, it is assumed that the host
-application will assign to them the address of functions within itself that
-will fullfill the I/O request.
-
-There are currently four callback functions to the host app:
-
-void (*on_read_memory)(/* softx86_ctx */ void* _ctx,
-       sx86_udword address,sx86_ubyte *buf,int size);
-
-void (*on_read_io)(/* softx86_ctx */ void* _ctx,sx86_udword address,
-       sx86_ubyte *buf,int size);
-
-void (*on_write_memory)(/* softx86_ctx */ void* _ctx,sx86_udword address,
-       sx86_ubyte *buf,int size);
-
-void (*on_write_io)(/* softx86_ctx */ void* _ctx,sx86_udword address,
-       sx86_ubyte *buf,int size);
-
-on_read_memory:  called when the CPU wants to fetch from simulated memory
-on_write_memory: called when the CPU wants to store to simulated memory
-on_read_io:      called when the CPU wants to fetch from an I/O port
-                 (typically the IN/INSB instruction)
-on_write_io:     called when the CPU wants to store to an I/O port
-                 (typically the OUT/OUTSB instruction)
-
-SOFTX86 DOESN'T SUPPORT FPU INSTRUCTIONS BY ITSELF
-==================================================
-
-Softx86 does not support FPU instructions by itself,
-following the design of the original chip. Instead,
-FPU opcodes are handed off to a callback function
-which can then call an external library that functions
-as the 8087. If the callback function is not assigned,
-the FPU opcodes D8h thru DFh are treated as unknown and
-invalid opcodes.
-
-/* this is called when the CPU is asked to execute an FPU opcode */
-int (*on_fpu_opcode_exec)
-       (/* softx86_ctx */void* _ctx,sx86_ubyte opcode);
-
-/* this is called when the CPU is asked to decompile an FPU opcode */
-int (*on_fpu_opcode_dec)
-       (/* softx86_ctx */void* _ctx,sx86_ubyte opcode,char buf[128]);
-
diff --git a/lib/3rdparty/softx86/softx86.dsw b/lib/3rdparty/softx86/softx86.dsw
deleted file mode 100644 (file)
index 13941ea..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "softx86_dll"=.\softx86\softx86_dll.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name softx86_static
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "softx86_static"=.\softx86\softx86_static.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "softx86dbg_dll"=.\softx86dbg\softx86dbg_dll.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name softx86_dll
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name softx87_dll
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "softx86dbg_static"=.\softx86dbg\softx86dbg_static.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name softx86_static
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name softx87_static
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "softx87_dll"=.\softx87\softx87_dll.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name softx87_static
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "softx87_static"=.\softx87\softx87_static.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/lib/3rdparty/softx86/softx86/CMakeLists.txt b/lib/3rdparty/softx86/softx86/CMakeLists.txt
deleted file mode 100644 (file)
index a6b6136..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-
-include_directories(${REACTOS_SOURCE_DIR}/include/reactos/libs/softx86)
-
-list(APPEND SOURCE
-    aaa.c
-    add.c
-    binops.c
-    cbw.c
-    clc.c
-    drooling_duh.c
-    fpu.c
-    groupies.c
-    inc.c
-    interrupts.c
-    ioport.c
-    jumpy.c
-    mov.c
-    optable.c
-    prefixes.c
-    procframe.c
-    pushpop.c
-    shovel.c
-    softx86.c
-### Uncomment the following files for dll compilation:
-#   softx86_dll.def
-#   softx86_dll.rc
-)
-
-add_library(softx86 ${SOURCE})
diff --git a/lib/3rdparty/softx86/softx86/Makefile b/lib/3rdparty/softx86/softx86/Makefile
deleted file mode 100644 (file)
index 86336e7..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-# SOFTX86 Makefile for Linux/GCC 3.xx
-# (C) 2003 Jonathan Campbell
-#
-# NOTE: Assumes subdirectory ./obj/ and places all object files there
-#       rather than mix them up with the source code. It's less messy
-#       that way. The only exception is the final output, softx86.o.
-
-all:: __obj ../lib/libsoftx86.a ../lib/libsoftx86.so
-
-ALL_OBJS = obj/aaa.o obj/add.o obj/cbw.o obj/clc.o obj/drooling_duh.o obj/optable.o obj/prefixes.o obj/procframe.o obj/pushpop.o obj/softx86.o obj/mov.o obj/ioport.o obj/inc.o obj/groupies.o obj/interrupts.o obj/binops.o obj/jumpy.o obj/shovel.o obj/fpu.o
-
-INCLUDZ = -I../include
-
-clean::
-       rm -f $(ALL_OBJS)
-
-distclean:: clean
-       rm -f ../lib/libsoftx86.a
-       rm -f ../lib/libsoftx86.so
-       if [[ -d obj ]]; then rmdir obj; fi
-       if [[ -d Release ]]; then rm -R Release; fi     # clean up mess
-       if [[ -d Debug ]]; then rm -R Debug; fi         # made by MSVC++
-       rm -f *.plg
-       rm -f *.opt
-       rm -f *.aps
-
-# make sure there is an "obj" subdirectory
-__obj:
-       if [[ !(-d obj) ]]; then mkdir obj; fi
-
-../lib/libsoftx86.a: $(ALL_OBJS)
-       ld -aarchive -r -o ../lib/libsoftx86.a $(ALL_OBJS)
-
-../lib/libsoftx86.so: $(ALL_OBJS)
-       ld -shared -o ../lib/libsoftx86.so $(ALL_OBJS)
-
-obj/shovel.o: shovel.c
-       gcc $(INCLUDZ) -c -o obj/shovel.o shovel.c
-
-obj/jumpy.o: jumpy.c
-       gcc $(INCLUDZ) -c -o obj/jumpy.o jumpy.c
-
-obj/binops.o: binops.c
-       gcc $(INCLUDZ) -c -o obj/binops.o binops.c
-
-obj/interrupts.o: interrupts.c
-       gcc $(INCLUDZ) -c -o obj/interrupts.o interrupts.c
-
-obj/groupies.o: groupies.c
-       gcc $(INCLUDZ) -c -o obj/groupies.o groupies.c
-
-obj/aaa.o: aaa.c
-       gcc $(INCLUDZ) -c -o obj/aaa.o aaa.c
-
-obj/add.o: add.c
-       gcc $(INCLUDZ) -c -o obj/add.o add.c
-
-obj/cbw.o: cbw.c
-       gcc $(INCLUDZ) -c -o obj/cbw.o cbw.c
-
-obj/clc.o: clc.c
-       gcc $(INCLUDZ) -c -o obj/clc.o clc.c
-
-obj/drooling_duh.o: drooling_duh.c
-       gcc $(INCLUDZ) -c -o obj/drooling_duh.o drooling_duh.c
-
-obj/optable.o: optable.c
-       gcc $(INCLUDZ) -c -o obj/optable.o optable.c
-
-obj/prefixes.o: prefixes.c
-       gcc $(INCLUDZ) -c -o obj/prefixes.o prefixes.c
-
-obj/procframe.o: procframe.c
-       gcc $(INCLUDZ) -c -o obj/procframe.o procframe.c
-
-obj/pushpop.o: pushpop.c
-       gcc $(INCLUDZ) -c -o obj/pushpop.o pushpop.c
-
-obj/softx86.o: softx86.c
-       gcc $(INCLUDZ) -c -o obj/softx86.o softx86.c
-
-obj/mov.o: mov.c
-       gcc $(INCLUDZ) -c -o obj/mov.o mov.c
-
-obj/ioport.o: ioport.c
-       gcc $(INCLUDZ) -c -o obj/ioport.o ioport.c
-
-obj/inc.o: inc.c
-       gcc $(INCLUDZ) -c -o obj/inc.o inc.c
-
-obj/fpu.o: fpu.c
-       gcc $(INCLUDZ) -c -o obj/fpu.o fpu.c
-
diff --git a/lib/3rdparty/softx86/softx86/aaa.c b/lib/3rdparty/softx86/softx86/aaa.c
deleted file mode 100644 (file)
index 10db37b..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
- * aaa.c
- *
- * Copyright (C) 2003, 2004 Jonathan Campbell <jcampbell@mdjk.com>
- *
- * Decompiler and executioneer for AAA/AAD/AAM/AAS/DAA instructions.
- *
- ***********************************************************************************
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- ************************************************************************************/
-
-#include <softx86.h>
-#include <memory.h>
-#include <stdio.h>
-#include <string.h>
-#include "optable.h"
-#include "aaa.h"
-
-int Sfx86OpcodeExec_aaaseries(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if (opcode == 0x27) {                                           // DAA
-               sx86_ubyte al,nal;
-
-               al = ctx->state->general_reg[SX86_REG_AX].b.lo;
-               if (((al&0x0F) > 9) || (ctx->state->reg_flags.val & SX86_CPUFLAG_AUX)) {
-                       nal = (al&0xF)+6;
-                       al += 6;
-/* if addition to lower nibble overflowed... */
-                       if (nal >= 0x10) ctx->state->reg_flags.val |= SX86_CPUFLAG_CARRY;
-                       ctx->state->reg_flags.val |= SX86_CPUFLAG_AUX;
-               }
-               else {
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-               }
-
-               if (((al & 0xF0) > 0x90) || (ctx->state->reg_flags.val & SX86_CPUFLAG_CARRY)) {
-                       al += 0x60;
-                       ctx->state->reg_flags.val |= SX86_CPUFLAG_CARRY;
-               }
-               else {
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-               }
-
-/* "The OF flag is undefined"... */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-
-/* SF emulation */
-               if (al & 0x80)  ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-               else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* ZF emulation */
-               if (!al)        ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-               else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* PF emulation */
-               if (softx86_parity8(al))        ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-               else                            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-               ctx->state->general_reg[SX86_REG_AX].b.lo = al;
-               return 1;
-       }
-
-       if (opcode == 0x2F) {                                           // DAS
-               sx86_ubyte al;
-               int nal;
-
-               al = ctx->state->general_reg[SX86_REG_AX].b.lo;
-               if (((al&0x0F) > 9) || (ctx->state->reg_flags.val & SX86_CPUFLAG_AUX)) {
-                       nal = (al&0xF)-6;
-                       al -= 6;
-/* if subtraction from lower nibble overflowed... */
-                       if (nal < 0) ctx->state->reg_flags.val |= SX86_CPUFLAG_CARRY;
-                       ctx->state->reg_flags.val |= SX86_CPUFLAG_AUX;
-               }
-               else {
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-               }
-
-               if ((al > 0x9F) || (ctx->state->reg_flags.val & SX86_CPUFLAG_CARRY)) {
-                       al -= 0x60;
-                       ctx->state->reg_flags.val |= SX86_CPUFLAG_CARRY;
-               }
-               else {
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-               }
-
-/* "The OF flag is undefined"... */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-
-/* SF emulation */
-               if (al & 0x80)  ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-               else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* ZF emulation */
-               if (!al)        ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-               else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* PF emulation */
-               if (softx86_parity8(al))        ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-               else                            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-               ctx->state->general_reg[SX86_REG_AX].b.lo = al;
-               return 1;
-       }
-
-       if (opcode == 0x37) {                                           // AAA
-               sx86_ubyte ah,al;
-
-               al = ctx->state->general_reg[SX86_REG_AX].b.lo;
-               ah = ctx->state->general_reg[SX86_REG_AX].b.hi;
-
-               if (((al&0xF) > 9) || (ctx->state->reg_flags.val & SX86_CPUFLAG_AUX)) {
-                       al += 6; ah++;
-                       ctx->state->reg_flags.val |=  (SX86_CPUFLAG_AUX | SX86_CPUFLAG_CARRY);
-               }
-               else {
-                       ctx->state->reg_flags.val &= ~(SX86_CPUFLAG_AUX | SX86_CPUFLAG_CARRY);
-               }
-
-               ctx->state->general_reg[SX86_REG_AX].b.hi = ah;
-               ctx->state->general_reg[SX86_REG_AX].b.lo = al & 0xF;
-
-/* "OF, SF, ZF, and PF flags are undefined" */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-
-               return 1;
-       }
-
-       if (opcode == 0x3F) {                                           // AAS
-               sx86_ubyte ah,al;
-
-               al = ctx->state->general_reg[SX86_REG_AX].b.lo;
-               ah = ctx->state->general_reg[SX86_REG_AX].b.hi;
-
-               if (((al&0xF) > 9) || (ctx->state->reg_flags.val & SX86_CPUFLAG_AUX)) {
-                       al -= 6; ah--;
-                       ctx->state->reg_flags.val |=  (SX86_CPUFLAG_AUX | SX86_CPUFLAG_CARRY);
-               }
-               else {
-                       ctx->state->reg_flags.val &= ~(SX86_CPUFLAG_AUX | SX86_CPUFLAG_CARRY);
-               }
-
-               ctx->state->general_reg[SX86_REG_AX].b.hi = ah;
-               ctx->state->general_reg[SX86_REG_AX].b.lo = al & 0xF;
-
-/* "OF, SF, ZF, and PF flags are undefined" */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-
-               return 1;
-       }
-
-       if (opcode == 0xD4) {                                           // AAM
-               sx86_ubyte ah,al,x;
-
-               x  = softx86_fetch_exec_byte(ctx);
-               al = ctx->state->general_reg[SX86_REG_AX].b.lo;
-
-               if (x == 0) {
-                       /* TODO: signal division by zero exception */
-               }
-               else {
-                       al = al % x;
-                       ah = al / x;
-               }
-
-               ctx->state->general_reg[SX86_REG_AX].b.hi = ah;
-               ctx->state->general_reg[SX86_REG_AX].b.lo = al;
-
-/* SF emulation */
-               if (al & 0x80)  ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-               else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* ZF emulation */
-               if (!al)        ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-               else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* PF emulation */
-               if (softx86_parity8(al))        ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-               else                            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-/* "The OF, AF and CF flags are undefined"... */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-               return 1;
-       }
-
-       if (opcode == 0xD5) {                                           // AAD
-               sx86_ubyte ah,al,x;
-
-               x  = softx86_fetch_exec_byte(ctx);
-               al = ctx->state->general_reg[SX86_REG_AX].b.lo;
-               ah = ctx->state->general_reg[SX86_REG_AX].b.hi;
-
-               al = (al + (ah * x)) & 0xFF;
-               ah = 0;
-
-               ctx->state->general_reg[SX86_REG_AX].b.hi = ah;
-               ctx->state->general_reg[SX86_REG_AX].b.lo = al;
-
-/* SF emulation */
-               if (al & 0x80)  ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-               else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* ZF emulation */
-               if (!al)        ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-               else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* PF emulation */
-               if (softx86_parity8(al))        ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-               else                            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-/* "The OF, AF and CF flags are undefined"... */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_aaaseries(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       sx86_ubyte x;
-
-       if (opcode == 0x27) {                                           // DAA
-               strcpy(buf,"DAA");
-               return 1;
-       }
-
-       if (opcode == 0x2F) {                                           // DAS
-               strcpy(buf,"DAS");
-               return 1;
-       }
-
-       if (opcode == 0x37) {                                           // AAA
-               strcpy(buf,"AAA");
-               return 1;
-       }
-
-       if (opcode == 0x3F) {                                           // AAS
-               strcpy(buf,"AAS");
-               return 1;
-       }
-
-       if (opcode == 0xD4) {                                           // AAM
-               x = softx86_fetch_dec_byte(ctx);
-               if (x == 10)    strcpy(buf,"AAM");
-               else            sprintf(buf,"AAM %d",x);
-
-               return 1;
-       }
-
-       if (opcode == 0xD5) {                                           // AAD
-               x = softx86_fetch_dec_byte(ctx);
-               if (x == 10)    strcpy(buf,"AAD");
-               else            sprintf(buf,"AAD %d",x);
-
-               return 1;
-       }
-
-       return 0;
-}
diff --git a/lib/3rdparty/softx86/softx86/aaa.h b/lib/3rdparty/softx86/softx86/aaa.h
deleted file mode 100644 (file)
index cec9771..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-int Sfx86OpcodeExec_aaaseries(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_aaaseries(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
diff --git a/lib/3rdparty/softx86/softx86/add.c b/lib/3rdparty/softx86/softx86/add.c
deleted file mode 100644 (file)
index 9b356cc..0000000
+++ /dev/null
@@ -1,1027 +0,0 @@
-/*
- * add.c
- *
- * Copyright (C) 2003, 2004 Jonathan Campbell <jcampbell@mdjk.com>
- *
- * Decompiler and executioneer for ADD/SUB/ADC/SBB/CMP instructions.
- *
- ***********************************************************************************
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- ************************************************************************************/
-
-#include <softx86.h>
-#include <memory.h>
-#include <stdio.h>
-#include <string.h>
-#include "optable.h"
-#include "add.h"
-
-sx86_ubyte op_add8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val)
-{
-       sx86_ubyte ret;
-
-/* peform the addition */
-       ret = src + val;
-
-/* if carry */
-        if ((ret < src) || (ret < val)) ctx->state->reg_flags.val |= SX86_CPUFLAG_CARRY;
-        else ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-/* if overflow */
-       if (((src & 0x80) == (val & 0x80)) && ((src & 0x80) != (ret & 0x80)))
-        {
-            ctx->state->reg_flags.val |= SX86_CPUFLAG_OVERFLOW;
-        }
-       else ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a + b = c, ((b AND 0Fh) + (a AND 0Fh) >= 0x10).
-   in other words, if the lowest nibbles added together overflow. */
-       if (((val&0xF)+(src&0xF)) >= 0x10)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_add16(softx86_ctx* ctx,sx86_uword src,sx86_uword val)
-{
-       sx86_uword ret;
-
-/* peform the addition */
-       ret = src + val;
-
-/* if carry */
-        if ((ret < src) || (ret < val)) ctx->state->reg_flags.val |= SX86_CPUFLAG_CARRY;
-        else ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-/* if overflow */
-       if (((src & 0x8000) == (val & 0x8000)) && ((src & 0x8000) != (ret & 0x8000)))
-        {
-            ctx->state->reg_flags.val |= SX86_CPUFLAG_OVERFLOW;
-        }
-       else ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a + b = c, ((b AND 0Fh) + (a AND 0Fh) >= 0x10).
-   in other words, if the lowest nibbles added together overflow. */
-       if (((val&0xF)+(src&0xF)) >= 0x10)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else                    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_add32(softx86_ctx* ctx,sx86_udword src,sx86_udword val)
-{
-       sx86_udword ret;
-
-/* peform the addition */
-       ret = src + val;
-
-/* if carry */
-        if ((ret < src) || (ret < val)) ctx->state->reg_flags.val |= SX86_CPUFLAG_CARRY;
-        else ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-/* if overflow */
-       if (((src & 0x80000000) == (val & 0x80000000))
-            && ((src & 0x80000000) != (ret & 0x80000000)))
-        {
-            ctx->state->reg_flags.val |= SX86_CPUFLAG_OVERFLOW;
-        }
-       else ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a + b = c, ((b AND 0Fh) + (a AND 0Fh) >= 0x10).
-   in other words, if the lowest nibbles added together overflow. */
-       if (((val&0xF)+(src&0xF)) >= 0x10)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else                    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_ubyte op_adc8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val)
-{
-       sx86_ubyte ret,carry;
-
-       carry = ((sx86_ubyte)(ctx->state->reg_flags.val & SX86_CPUFLAG_CARRY))?1:0;
-
-/* special case: x + 0xFF + (carry=1) == x */
-       if (carry && val == 0xFF) {
-/* peform the addition */
-               ret = val;
-
-/* it's a carry over */
-               ctx->state->reg_flags.val |=
-                        (SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-       }
-       else {
-/* peform the addition */
-               ret = src + val + carry;
-
-/* if carry/overflow */
-               if (ret < src)
-                       ctx->state->reg_flags.val |=
-                                (SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-               else
-                       ctx->state->reg_flags.val &=
-                               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a + b = c, ((b AND 0Fh) + (a AND 0Fh) >= 0x10).
-   in other words, if the lowest nibbles added together overflow. */
-       if (((val&0xF)+(src&0xF)) >= 0x10)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_adc16(softx86_ctx* ctx,sx86_uword src,sx86_uword val)
-{
-       sx86_uword ret,carry;
-
-       carry = ((sx86_ubyte)(ctx->state->reg_flags.val & SX86_CPUFLAG_CARRY))?1:0;
-
-/* special case: x + 0xFFFF + (carry=1) == x */
-       if (carry && val == 0xFFFF) {
-/* peform the addition */
-               ret = val;
-
-/* it's a carry over */
-               ctx->state->reg_flags.val |=
-                        (SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-       }
-       else {
-/* peform the addition */
-               ret = src + val + carry;
-
-/* if carry/overflow */
-               if (ret < src)
-                       ctx->state->reg_flags.val |=
-                                (SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-               else
-                       ctx->state->reg_flags.val &=
-                               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a + b = c, ((b AND 0Fh) + (a AND 0Fh) >= 0x10).
-   in other words, if the lowest nibbles added together overflow. */
-       if (((val&0xF)+(src&0xF)) >= 0x10)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_adc32(softx86_ctx* ctx,sx86_udword src,sx86_udword val)
-{
-       sx86_udword ret,carry;
-
-       carry = ((sx86_ubyte)(ctx->state->reg_flags.val & SX86_CPUFLAG_CARRY))?1:0;
-
-/* special case: x + 0xFFFFFFFF + (carry=1) == x */
-       if (carry && val == 0xFFFFFFFF) {
-/* peform the addition */
-               ret = val;
-
-/* it's a carry over */
-               ctx->state->reg_flags.val |=
-                        (SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-       }
-       else {
-/* peform the addition */
-               ret = src + val + carry;
-
-/* if carry/overflow */
-               if (ret < src)
-                       ctx->state->reg_flags.val |=
-                                (SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-               else
-                       ctx->state->reg_flags.val &=
-                               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)   ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a + b = c, ((b AND 0Fh) + (a AND 0Fh) >= 0x10).
-   in other words, if the lowest nibbles added together overflow. */
-       if (((val&0xF)+(src&0xF)) >= 0x10)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_ubyte op_sub8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val)
-{
-       sx86_ubyte ret;
-
-/* peform the addition */
-       ret = src - val;
-
-/* if carry */
-        if (val > src) ctx->state->reg_flags.val |= SX86_CPUFLAG_CARRY;
-        else ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-/* if overflow */
-       if (((src & 0x80) != (val & 0x80)) && ((src & 0x80) != (ret & 0x80)))
-        {
-            ctx->state->reg_flags.val |= SX86_CPUFLAG_OVERFLOW;
-        }
-       else ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a - b = c, ((a AND 0Fh) - (b AND 0Fh) < 0).
-   in other words, if the lowest nibbles subtracted cause a carry. */
-       if ((val&0xF) > (src&0xF))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_sub16(softx86_ctx* ctx,sx86_uword src,sx86_uword val)
-{
-       sx86_uword ret;
-
-/* peform the addition */
-       ret = src - val;
-
-/* if carry */
-        if (val > src) ctx->state->reg_flags.val |= SX86_CPUFLAG_CARRY;
-        else ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-/* if overflow */
-       if (((src & 0x8000) != (val & 0x8000)) && ((src & 0x8000) != (ret & 0x8000)))
-        {
-            ctx->state->reg_flags.val |= SX86_CPUFLAG_OVERFLOW;
-        }
-       else ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a - b = c, ((a AND 0Fh) - (b AND 0Fh) < 0).
-   in other words, if the lowest nibbles subtracted cause a carry. */
-       if ((val&0xF) > (src&0xF))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_sub32(softx86_ctx* ctx,sx86_udword src,sx86_udword val)
-{
-       sx86_udword ret;
-
-/* peform the addition */
-       ret = src - val;
-
-/* if carry */
-        if (val > src) ctx->state->reg_flags.val |= SX86_CPUFLAG_CARRY;
-        else ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-/* if overflow */
-       if (((src & 0x80000000) != (val & 0x80000000))
-            && ((src & 0x80000000) != (ret & 0x80000000)))
-        {
-            ctx->state->reg_flags.val |= SX86_CPUFLAG_OVERFLOW;
-        }
-       else ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)   ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a - b = c, ((a AND 0Fh) - (b AND 0Fh) < 0).
-   in other words, if the lowest nibbles subtracted cause a carry. */
-       if ((val&0xF) > (src&0xF))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_ubyte op_sbb8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val)
-{
-       sx86_ubyte ret,carry;
-
-       carry = ((sx86_ubyte)(ctx->state->reg_flags.val & SX86_CPUFLAG_CARRY))?1:0;
-
-/* special case: x - 0xFF - (carry=1) == x */
-       if (carry && val == 0xFF) {
-/* peform the addition */
-               ret = val;
-
-/* it's a carry over */
-               ctx->state->reg_flags.val |=
-                        (SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-       }
-       else {
-/* peform the addition */
-               ret = src - (val + carry);
-
-/* if carry/overflow */
-               if (ret > src)
-                       ctx->state->reg_flags.val |=
-                                (SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-               else
-                       ctx->state->reg_flags.val &=
-                               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a - b = c, ((a AND 0Fh) - (b AND 0Fh) < 0).
-   in other words, if the lowest nibbles subtracted cause a carry. */
-       if ((val&0xF) > (src&0xF))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_sbb16(softx86_ctx* ctx,sx86_uword src,sx86_uword val)
-{
-       sx86_uword ret,carry;
-
-       carry = ((sx86_ubyte)(ctx->state->reg_flags.val & SX86_CPUFLAG_CARRY))?1:0;
-
-/* special case: x + 0xFFFF + (carry=1) == x */
-       if (carry && val == 0xFFFF) {
-/* peform the addition */
-               ret = val;
-
-/* it's a carry over */
-               ctx->state->reg_flags.val |=
-                        (SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-       }
-       else {
-/* peform the addition */
-               ret = src - (val + carry);
-
-/* if carry/overflow */
-               if (ret > src)
-                       ctx->state->reg_flags.val |=
-                                (SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-               else
-                       ctx->state->reg_flags.val &=
-                               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a - b = c, ((a AND 0Fh) - (b AND 0Fh) < 0).
-   in other words, if the lowest nibbles subtracted cause a carry. */
-       if ((val&0xF) > (src&0xF))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_sbb32(softx86_ctx* ctx,sx86_udword src,sx86_udword val)
-{
-       sx86_udword ret,carry;
-
-       carry = ((sx86_ubyte)(ctx->state->reg_flags.val & SX86_CPUFLAG_CARRY))?1:0;
-
-/* special case: x + 0xFFFFFFFF + (carry=1) == x */
-       if (carry && val == 0xFFFFFFFF) {
-/* peform the addition */
-               ret = val;
-
-/* it's a carry over */
-               ctx->state->reg_flags.val |=
-                        (SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-       }
-       else {
-/* peform the addition */
-               ret = src - (val + carry);
-
-/* if carry/overflow */
-               if (ret > src)
-                       ctx->state->reg_flags.val |=
-                                (SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-               else
-                       ctx->state->reg_flags.val &=
-                               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)   ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a - b = c, ((a AND 0Fh) - (b AND 0Fh) < 0).
-   in other words, if the lowest nibbles subtracted cause a carry. */
-       if ((val&0xF) > (src&0xF))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-int Sfx86OpcodeExec_add(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFC) == 0x00) {                                    // ADD reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // add from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_exec_full_modregrm_rw(ctx,w16,0,mod,reg,
-                       rm,opswap,op_add8,op_add16,op_add32);
-
-               return 1;
-       }
-       if (opcode == 0x04) {                                           // ADD AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_exec_byte(ctx);
-               x = op_add8(ctx,ctx->state->general_reg[SX86_REG_AX].b.lo,x);
-               ctx->state->general_reg[SX86_REG_AX].b.lo = x;
-               return 1;
-       }
-       if (opcode == 0x05) {                                           // ADD AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_exec_byte(ctx);
-               x |= softx86_fetch_exec_byte(ctx) << 8;
-               x  = op_add16(ctx,ctx->state->general_reg[SX86_REG_AX].w.lo,x);
-               ctx->state->general_reg[SX86_REG_AX].w.lo = x;
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_add(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFC) == 0x00) {                                    // ADD reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // add from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modregrm(ctx,w16,0,mod,reg,rm,op1_tmp,op2_tmp);
-
-               if (opswap)     sprintf(buf,"ADD %s,%s",op2_tmp,op1_tmp);
-               else            sprintf(buf,"ADD %s,%s",op1_tmp,op2_tmp);
-               return 1;
-       }
-       if (opcode == 0x04) {                                           // ADD AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_dec_byte(ctx);
-               sprintf(buf,"ADD AL,%02Xh",x);
-               return 1;
-       }
-       if (opcode == 0x05) {                                           // ADD AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_dec_byte(ctx);
-               x |= softx86_fetch_dec_byte(ctx) << 8;
-               sprintf(buf,"ADD AX,%04Xh",x);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeExec_adc(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFC) == 0x10) {                                    // ADC reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // add from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_exec_full_modregrm_rw(ctx,w16,0,mod,reg,
-                       rm,opswap,op_adc8,op_adc16,op_adc32);
-
-               return 1;
-       }
-       if (opcode == 0x14) {                                           // ADC AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_exec_byte(ctx);
-               x = op_adc8(ctx,ctx->state->general_reg[SX86_REG_AX].b.lo,x);
-               ctx->state->general_reg[SX86_REG_AX].b.lo = x;
-               return 1;
-       }
-       if (opcode == 0x15) {                                           // ADC AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_exec_byte(ctx);
-               x |= softx86_fetch_exec_byte(ctx) << 8;
-               x  = op_adc16(ctx,ctx->state->general_reg[SX86_REG_AX].w.lo,x);
-               ctx->state->general_reg[SX86_REG_AX].w.lo = x;
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_adc(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFC) == 0x10) {                                    // ADC reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // add from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modregrm(ctx,w16,0,mod,reg,rm,op1_tmp,op2_tmp);
-
-               if (opswap)     sprintf(buf,"ADC %s,%s",op2_tmp,op1_tmp);
-               else            sprintf(buf,"ADC %s,%s",op1_tmp,op2_tmp);
-               return 1;
-       }
-       if (opcode == 0x14) {                                           // ADC AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_dec_byte(ctx);
-               sprintf(buf,"ADC AL,%02Xh",x);
-               return 1;
-       }
-       if (opcode == 0x15) {                                           // ADC AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_dec_byte(ctx);
-               x |= softx86_fetch_dec_byte(ctx) << 8;
-               sprintf(buf,"ADC AX,%04Xh",x);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeExec_sub(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFC) == 0x28) {                                    // SUB reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // add from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_exec_full_modregrm_rw(ctx,w16,0,mod,reg,
-                       rm,opswap,op_sub8,op_sub16,op_sub32);
-
-               return 1;
-       }
-       if (opcode == 0x2C) {                                           // SUB AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_exec_byte(ctx);
-               x = op_sub8(ctx,ctx->state->general_reg[SX86_REG_AX].b.lo,x);
-               ctx->state->general_reg[SX86_REG_AX].b.lo = x;
-               return 1;
-       }
-       if (opcode == 0x2D) {                                           // SUB AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_exec_byte(ctx);
-               x |= softx86_fetch_exec_byte(ctx) << 8;
-               x  = op_sub16(ctx,ctx->state->general_reg[SX86_REG_AX].w.lo,x);
-               ctx->state->general_reg[SX86_REG_AX].w.lo = x;
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_sub(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFC) == 0x28) {                                    // SUB reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // add from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modregrm(ctx,w16,0,mod,reg,rm,op1_tmp,op2_tmp);
-
-               if (opswap)     sprintf(buf,"SUB %s,%s",op2_tmp,op1_tmp);
-               else            sprintf(buf,"SUB %s,%s",op1_tmp,op2_tmp);
-               return 1;
-       }
-       if (opcode == 0x2C) {                                           // SUB AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_dec_byte(ctx);
-               sprintf(buf,"SUB AL,%02Xh",x);
-               return 1;
-       }
-       if (opcode == 0x2D) {                                           // SUB AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_dec_byte(ctx);
-               x |= softx86_fetch_dec_byte(ctx) << 8;
-               sprintf(buf,"SUB AX,%04Xh",x);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeExec_sbb(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFC) == 0x18) {                                    // SBB reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // add from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_exec_full_modregrm_rw(ctx,w16,0,mod,reg,
-                       rm,opswap,op_sbb8,op_sbb16,op_sbb32);
-
-               return 1;
-       }
-       if (opcode == 0x1C) {                                           // SBB AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_exec_byte(ctx);
-               x = op_sbb8(ctx,ctx->state->general_reg[SX86_REG_AX].b.lo,x);
-               ctx->state->general_reg[SX86_REG_AX].b.lo = x;
-               return 1;
-       }
-       if (opcode == 0x1D) {                                           // SBB AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_exec_byte(ctx);
-               x |= softx86_fetch_exec_byte(ctx) << 8;
-               x  = op_sbb16(ctx,ctx->state->general_reg[SX86_REG_AX].w.lo,x);
-               ctx->state->general_reg[SX86_REG_AX].w.lo = x;
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_sbb(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFC) == 0x18) {                                    // SBB reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // add from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modregrm(ctx,w16,0,mod,reg,rm,op1_tmp,op2_tmp);
-
-               if (opswap)     sprintf(buf,"SBB %s,%s",op2_tmp,op1_tmp);
-               else            sprintf(buf,"SBB %s,%s",op1_tmp,op2_tmp);
-               return 1;
-       }
-       if (opcode == 0x1C) {                                           // SBB AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_dec_byte(ctx);
-               sprintf(buf,"SBB AL,%02Xh",x);
-               return 1;
-       }
-       if (opcode == 0x1D) {                                           // SBB AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_dec_byte(ctx);
-               x |= softx86_fetch_dec_byte(ctx) << 8;
-               sprintf(buf,"SBB AX,%04Xh",x);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeExec_cmp(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFC) == 0x38) {                                    // CMP reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // add from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_exec_full_modregrm_ro(ctx,w16,0,mod,reg,           // we use the variant
-                       rm,opswap,op_sub8,op_sub16,op_sub32);           // that DOES NOT modify
-                                                                       // the destination
-                                                                       // register, since CMP
-                                                                       // is documented to
-                                                                       // perform subtraction
-                                                                       // in a temporary register
-
-               return 1;
-       }
-       if (opcode == 0x3C) {                                           // CMP AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_exec_byte(ctx);
-               op_sub8(ctx,ctx->state->general_reg[SX86_REG_AX].b.lo,x);
-               return 1;
-       }
-       if (opcode == 0x3D) {                                           // CMP AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_exec_byte(ctx);
-               x |= softx86_fetch_exec_byte(ctx) << 8;
-               op_sub16(ctx,ctx->state->general_reg[SX86_REG_AX].w.lo,x);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_cmp(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFC) == 0x38) {                                    // CMP reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // add from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modregrm(ctx,w16,0,mod,reg,rm,op1_tmp,op2_tmp);
-
-               if (opswap)     sprintf(buf,"CMP %s,%s",op2_tmp,op1_tmp);
-               else            sprintf(buf,"CMP %s,%s",op1_tmp,op2_tmp);
-               return 1;
-       }
-       if (opcode == 0x3C) {                                           // CMP AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_dec_byte(ctx);
-               sprintf(buf,"CMP AL,%02Xh",x);
-               return 1;
-       }
-       if (opcode == 0x3D) {                                           // CMP AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_dec_byte(ctx);
-               x |= softx86_fetch_dec_byte(ctx) << 8;
-               sprintf(buf,"CMP AX,%04Xh",x);
-               return 1;
-       }
-
-       return 0;
-}
diff --git a/lib/3rdparty/softx86/softx86/add.h b/lib/3rdparty/softx86/softx86/add.h
deleted file mode 100644 (file)
index 8a6ddb3..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-
-int Sfx86OpcodeExec_adc(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_adc(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_add(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_add(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_sbb(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_sbb(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_sub(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_sub(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_cmp(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_cmp(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-
-sx86_ubyte op_adc8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-sx86_uword op_adc16(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-sx86_udword op_adc32(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-sx86_ubyte op_add8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-sx86_uword op_add16(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-sx86_udword op_add32(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-sx86_ubyte op_sbb8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-sx86_uword op_sbb16(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-sx86_udword op_sbb32(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-sx86_ubyte op_sub8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-sx86_uword op_sub16(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-sx86_udword op_sub32(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
diff --git a/lib/3rdparty/softx86/softx86/binops.c b/lib/3rdparty/softx86/softx86/binops.c
deleted file mode 100644 (file)
index bd44063..0000000
+++ /dev/null
@@ -1,2868 +0,0 @@
-/*
- * binops.c
- *
- * Copyright (C) 2003, 2004 Jonathan Campbell <jcampbell@mdjk.com>
- *
- * Decompiler and executioneer for XOR/OR/TEST instruction.
- *
- ***********************************************************************************
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- ************************************************************************************/
-
-#include <softx86.h>
-#include <memory.h>
-#include <stdio.h>
-#include <string.h>
-#include "optable.h"
-#include "binops.h"
-
-/**************************************************
- ************** SAR 8/16/32 emulation *************
- **************************************************/
-sx86_ubyte op_sar8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val)
-{
-       sx86_ubyte ret,osrc,sa;
-       int shic,oshic;
-
-       if (ctx->bugs->mask_5bit_shiftcount)
-               oshic = val&0x1F;
-       else
-               oshic = val;
-
-/* Intel explicity documents that CF carries the bit that was
-   shifted out, and that all flags are untouched if CF=0. */
-       if (!oshic)     /* works for me... */
-               return src;
-
-/* peform the operation. */
-       shic = oshic;
-       osrc = src;
-       ret  = src;
-       sa   = (src&0x80)?(0xFF<<(8-shic)):0;
-
-/* WARNING: This code assumes shic != 0 */
-       if (shic > 1)
-               ret >>= (shic-1);
-
-/* "The CF flag contains the value of the last bit shifted out..." */
-       if (ret & 1)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-       ret >>= 1;
-       ret  |= sa;
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST)" */
-               if (osrc>>7)
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_ubyte op_sar1_8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       return op_sar8(ctx,src,1);
-}
-
-sx86_ubyte op_sar_cl_8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       return op_sar8(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-sx86_uword op_sar16(softx86_ctx* ctx,sx86_uword src,sx86_uword val)
-{
-       sx86_uword ret,osrc;
-       int shic,oshic;
-
-       if (ctx->bugs->mask_5bit_shiftcount)
-               oshic = val&0x1F;
-       else
-               oshic = val;
-
-/* Intel explicity documents that CF carries the bit that was
-   shifted out, and that all flags are untouched if CF=0. */
-       if (!oshic)     /* works for me... */
-               return src;
-
-/* peform the operation. */
-       shic = oshic;
-       osrc = src;
-       ret  = src;
-
-/* WARNING: This code assumes shic != 0 */
-       if (shic > 1)
-               ret >>= (shic-1);
-
-/* "The CF flag contains the value of the last bit shifted out..." */
-       if (ret & 1)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-       ret >>= 1;
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST)" */
-               if (osrc>>15)
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_sar1_16(softx86_ctx* ctx,sx86_uword src)
-{
-       return op_sar16(ctx,src,1);
-}
-
-sx86_uword op_sar_cl_16(softx86_ctx* ctx,sx86_uword src)
-{
-       return op_sar16(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-sx86_udword op_sar32(softx86_ctx* ctx,sx86_udword src,sx86_udword val)
-{
-       sx86_udword ret,osrc;
-       int shic,oshic;
-
-       if (ctx->bugs->mask_5bit_shiftcount)
-               oshic = val&0x1F;
-       else
-               oshic = val;
-
-/* Intel explicity documents that CF carries the bit that was
-   shifted out, and that all flags are untouched if CF=0. */
-       if (!oshic)     /* works for me... */
-               return src;
-
-/* peform the operation. */
-       shic = oshic;
-       osrc = src;
-       ret  = src;
-
-/* WARNING: This code assumes shic != 0 */
-       if (shic > 1)
-               ret >>= (shic-1);
-
-/* "The CF flag contains the value of the last bit shifted out..." */
-       if (ret & 1)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-       ret >>= 1;
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST)" */
-               if (osrc>>31)
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)   ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity32(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_sar1_32(softx86_ctx* ctx,sx86_udword src)
-{
-       return op_sar32(ctx,src,1);
-}
-
-sx86_udword op_sar_cl_32(softx86_ctx* ctx,sx86_udword src)
-{
-       return op_sar32(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-/**************************************************
- ************** SHR 8/16/32 emulation *************
- **************************************************/
-sx86_ubyte op_shr8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val)
-{
-       sx86_ubyte ret,osrc;
-       int shic,oshic;
-
-       if (ctx->bugs->mask_5bit_shiftcount)
-               oshic = val&0x1F;
-       else
-               oshic = val;
-
-/* Intel explicity documents that CF carries the bit that was
-   shifted out, and that all flags are untouched if CF=0. */
-       if (!oshic)     /* works for me... */
-               return src;
-
-/* peform the operation. */
-       shic = oshic;
-       osrc = src;
-       ret  = src;
-
-/* WARNING: This code assumes shic != 0 */
-       if (shic > 1)
-               ret >>= (shic-1);
-
-/* "The CF flag contains the value of the last bit shifted out..." */
-       if (ret & 1)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-       ret >>= 1;
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST)" */
-               if (osrc>>7)
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_ubyte op_shr1_8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       return op_shr8(ctx,src,1);
-}
-
-sx86_ubyte op_shr_cl_8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       return op_shr8(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-sx86_uword op_shr16(softx86_ctx* ctx,sx86_uword src,sx86_uword val)
-{
-       sx86_uword ret,osrc;
-       int shic,oshic;
-
-       if (ctx->bugs->mask_5bit_shiftcount)
-               oshic = val&0x1F;
-       else
-               oshic = val;
-
-/* Intel explicity documents that CF carries the bit that was
-   shifted out, and that all flags are untouched if CF=0. */
-       if (!oshic)     /* works for me... */
-               return src;
-
-/* peform the operation. */
-       shic = oshic;
-       osrc = src;
-       ret  = src;
-
-/* WARNING: This code assumes shic != 0 */
-       if (shic > 1)
-               ret >>= (shic-1);
-
-/* "The CF flag contains the value of the last bit shifted out..." */
-       if (ret & 1)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-       ret >>= 1;
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST)" */
-               if (osrc>>15)
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_shr1_16(softx86_ctx* ctx,sx86_uword src)
-{
-       return op_shr16(ctx,src,1);
-}
-
-sx86_uword op_shr_cl_16(softx86_ctx* ctx,sx86_uword src)
-{
-       return op_shr16(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-sx86_udword op_shr32(softx86_ctx* ctx,sx86_udword src,sx86_udword val)
-{
-       sx86_udword ret,osrc;
-       int shic,oshic;
-
-       if (ctx->bugs->mask_5bit_shiftcount)
-               oshic = val&0x1F;
-       else
-               oshic = val;
-
-/* Intel explicity documents that CF carries the bit that was
-   shifted out, and that all flags are untouched if CF=0. */
-       if (!oshic)     /* works for me... */
-               return src;
-
-/* peform the operation. */
-       shic = oshic;
-       osrc = src;
-       ret  = src;
-
-/* WARNING: This code assumes shic != 0 */
-       if (shic > 1)
-               ret >>= (shic-1);
-
-/* "The CF flag contains the value of the last bit shifted out..." */
-       if (ret & 1)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-       ret >>= 1;
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST)" */
-               if (osrc>>31)
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)   ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity32(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_shr1_32(softx86_ctx* ctx,sx86_udword src)
-{
-       return op_shr32(ctx,src,1);
-}
-
-sx86_udword op_shr_cl_32(softx86_ctx* ctx,sx86_udword src)
-{
-       return op_shr32(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-/**************************************************
- ************** SHL 8/16/32 emulation *************
- **************************************************/
-sx86_ubyte op_shl8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val)
-{
-       sx86_ubyte ret;
-       int shic,oshic;
-
-       if (ctx->bugs->mask_5bit_shiftcount)
-               oshic = val&0x1F;
-       else
-               oshic = val;
-
-/* Intel explicity documents that CF carries the bit that was
-   shifted out, and that all flags are untouched if CF=0. */
-       if (!oshic)     /* works for me... */
-               return src;
-
-/* peform the operation. */
-       shic = oshic;
-       ret = src;
-
-/* WARNING: This code assumes shic != 0 */
-       if (shic > 1)
-               ret <<= (shic-1);
-
-/* "The CF flag contains the value of the last bit shifted out..." */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-       ret <<= 1;
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST) XOR CF" */
-               if ((ret>>7)^((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1))
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_ubyte op_shl1_8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       return op_shl8(ctx,src,1);
-}
-
-sx86_ubyte op_shl_cl_8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       return op_shl8(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-sx86_uword op_shl16(softx86_ctx* ctx,sx86_uword src,sx86_uword val)
-{
-       sx86_uword ret;
-       int shic,oshic;
-
-       if (ctx->bugs->mask_5bit_shiftcount)
-               oshic = val&0x1F;
-       else
-               oshic = val;
-
-/* Intel explicity documents that CF carries the bit that was
-   shifted out, and that all flags are untouched if CF=0. */
-       if (!oshic)     /* works for me... */
-               return src;
-
-/* peform the operation. */
-       shic = oshic;
-       ret = src;
-
-/* WARNING: This code assumes shic != 0 */
-       if (shic > 1)
-               ret <<= (shic-1);
-
-/* "The CF flag contains the value of the last bit shifted out..." */
-       if (ret & 0x8000)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-       ret <<= 1;
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST) XOR CF" */
-               if ((ret>>15)^((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1))
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_shl1_16(softx86_ctx* ctx,sx86_uword src)
-{
-       return op_shl16(ctx,src,1);
-}
-
-sx86_uword op_shl_cl_16(softx86_ctx* ctx,sx86_uword src)
-{
-       return op_shl16(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-sx86_udword op_shl32(softx86_ctx* ctx,sx86_udword src,sx86_udword val)
-{
-       sx86_udword ret;
-       int shic,oshic;
-
-       if (ctx->bugs->mask_5bit_shiftcount)
-               oshic = val&0x1F;
-       else
-               oshic = val;
-
-/* Intel explicity documents that CF carries the bit that was
-   shifted out, and that all flags are untouched if CF=0. */
-       if (!oshic)     /* works for me... */
-               return src;
-
-/* peform the operation. */
-       shic = oshic;
-       ret = src;
-
-/* WARNING: This code assumes shic != 0 */
-       if (shic > 1)
-               ret <<= (shic-1);
-
-/* "The CF flag contains the value of the last bit shifted out..." */
-       if (ret & 0x80000000)   ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-       ret <<= 1;
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST) XOR CF" */
-               if ((ret>>31)^((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1))
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)   ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity32(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_shl1_32(softx86_ctx* ctx,sx86_udword src)
-{
-       return op_shl32(ctx,src,1);
-}
-
-sx86_udword op_shl_cl_32(softx86_ctx* ctx,sx86_udword src)
-{
-       return op_shl32(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-/**************************************************
- ************** ROR 8/16/32 emulation *************
- **************************************************/
-sx86_ubyte op_ror8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val)
-{
-       sx86_ubyte ret;
-       int shic,oshic;
-
-       oshic = val&7;
-       if (!oshic)     /* don't bother */
-               return src;
-
-/* peform the operation. */
-       shic = oshic;
-       ret  = (src>>shic)|(src<<(8-shic));
-
-/* "CF <- MSB(DEST)" */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST) XOR MSB - 1(DEST)" */
-               if ((ret>>7)^((ret>>6)&1))
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_ubyte op_ror1_8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       return op_ror8(ctx,src,1);
-}
-
-sx86_ubyte op_ror_cl_8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       return op_ror8(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-sx86_uword op_ror16(softx86_ctx* ctx,sx86_uword src,sx86_uword val)
-{
-       sx86_uword ret;
-       int shic,oshic;
-
-       oshic = val&15;
-       if (!oshic)     /* don't bother */
-               return src;
-
-/* peform the operation. */
-       shic = oshic;
-       ret  = (src>>shic)|(src<<(16-shic));
-
-/* "CF <- MSB(DEST)" */
-       if (ret & 0x8000)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST) XOR MSB - 1(DEST)" */
-               if ((ret>>15)^((ret>>14)&1))
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_ror1_16(softx86_ctx* ctx,sx86_uword src)
-{
-       return op_ror16(ctx,src,1);
-}
-
-sx86_uword op_ror_cl_16(softx86_ctx* ctx,sx86_uword src)
-{
-       return op_ror16(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-sx86_udword op_ror32(softx86_ctx* ctx,sx86_udword src,sx86_udword val)
-{
-       sx86_udword ret;
-       int shic,oshic;
-
-       oshic = val&31;
-       if (!oshic)     /* don't bother */
-               return src;
-
-/* peform the operation. */
-       shic = oshic;
-       ret  = (src>>shic)|(src<<(32-shic));
-
-/* "CF <- MSB(DEST)" */
-       if (ret & 0x80000000)   ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST) XOR MSB - 1(DEST)" */
-               if ((ret>>31)^((ret>>30)&1))
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)   ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity32(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_ror1_32(softx86_ctx* ctx,sx86_udword src)
-{
-       return op_ror32(ctx,src,1);
-}
-
-sx86_udword op_ror_cl_32(softx86_ctx* ctx,sx86_udword src)
-{
-       return op_ror32(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-/**************************************************
- ************** ROL 8/16/32 emulation *************
- **************************************************/
-sx86_ubyte op_rol8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val)
-{
-       sx86_ubyte ret;
-       int shic,oshic;
-
-       oshic = val&7;
-       if (!oshic)     /* don't bother */
-               return src;
-
-/* peform the operation. */
-       shic = oshic;
-       ret  = (src<<shic)|(src>>(8-shic));
-
-/* "CF <- LSB(DEST)" */
-       if (ret & 1)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST) XOR CF" */
-               if ((ret>>7)^((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1))
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_ubyte op_rol1_8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       return op_rol8(ctx,src,1);
-}
-
-sx86_ubyte op_rol_cl_8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       return op_rol8(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-sx86_uword op_rol16(softx86_ctx* ctx,sx86_uword src,sx86_uword val)
-{
-       sx86_uword ret;
-       int shic,oshic;
-
-       oshic = val&15;
-       if (!oshic)     /* don't bother */
-               return src;
-
-/* peform the operation. */
-       shic = oshic;
-       ret  = (src<<shic)|(src>>(16-shic));
-
-/* "CF <- LSB(DEST)" */
-       if (ret & 1)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST) XOR CF" */
-               if ((ret>>15)^((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1))
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_rol1_16(softx86_ctx* ctx,sx86_uword src)
-{
-       return op_rol16(ctx,src,1);
-}
-
-sx86_uword op_rol_cl_16(softx86_ctx* ctx,sx86_uword src)
-{
-       return op_rol16(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-sx86_udword op_rol32(softx86_ctx* ctx,sx86_udword src,sx86_udword val)
-{
-       sx86_udword ret;
-       int shic,oshic;
-
-       oshic = val&31;
-       if (!oshic)     /* don't bother */
-               return src;
-
-/* peform the operation. */
-       shic = oshic;
-       ret  = (src<<shic)|(src>>(32-shic));
-
-/* "CF <- LSB(DEST)" */
-       if (ret & 1)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST) XOR CF" */
-               if ((ret>>31)^((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1))
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)   ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_rol1_32(softx86_ctx* ctx,sx86_udword src)
-{
-       return op_rol32(ctx,src,1);
-}
-
-sx86_udword op_rol_cl_32(softx86_ctx* ctx,sx86_udword src)
-{
-       return op_rol32(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-/**************************************************
- ************** RCL 8/16/32 emulation *************
- **************************************************/
-sx86_ubyte op_rcl8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val)
-{
-       sx86_ubyte ret,cf;
-       int shic,oshic;
-
-       oshic = val%9;  /* 8 bits + CF */
-       if (!oshic)     /* don't bother */
-               return src;
-
-/* peform the operation. */
-       ret  = src;
-       shic = oshic;
-       while (shic-- > 0) {
-               cf  = ret>>7;
-               ret = (ret<<1)|((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1);
-               if (cf) ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-               else    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-       }
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST) XOR CF" */
-               if ((ret>>7)^((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1))
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_ubyte op_rcl1_8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       return op_rcl8(ctx,src,1);
-}
-
-sx86_ubyte op_rcl_cl_8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       return op_rcl8(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-sx86_uword op_rcl16(softx86_ctx* ctx,sx86_uword src,sx86_uword val)
-{
-       sx86_uword ret,cf;
-       int shic,oshic;
-
-       oshic = val%17; /* 16 bits + CF */
-       if (!oshic)     /* don't bother */
-               return src;
-
-/* peform the operation. */
-       ret  = src;
-       shic = oshic;
-       while (shic-- > 0) {
-               cf  = ret>>15;
-               ret = (ret<<1)|((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1);
-               if (cf) ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-               else    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-       }
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST) XOR CF" */
-               if ((ret>>15)^((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1))
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_rcl1_16(softx86_ctx* ctx,sx86_uword src)
-{
-       return op_rcl16(ctx,src,1);
-}
-
-sx86_uword op_rcl_cl_16(softx86_ctx* ctx,sx86_uword src)
-{
-       return op_rcl16(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-sx86_udword op_rcl32(softx86_ctx* ctx,sx86_udword src,sx86_udword val)
-{
-       sx86_udword ret,cf;
-       int shic,oshic;
-
-       oshic = val%33; /* 32 bits + CF */
-       if (!oshic)     /* don't bother */
-               return src;
-
-/* peform the operation. */
-       ret  = src;
-       shic = oshic;
-       while (shic-- > 0) {
-               cf  = ret>>31;
-               ret = (ret<<1)|((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1);
-               if (cf) ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-               else    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-       }
-
-/* the OF flag follows some sort of bizarre logic */
-       if (oshic == 1) {
-/* "OF <- MSB(DEST) XOR CF" */
-               if ((ret>>31)^((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1))
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)   ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity32(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_rcl1_32(softx86_ctx* ctx,sx86_udword src)
-{
-       return op_rcl32(ctx,src,1);
-}
-
-sx86_udword op_rcl_cl_32(softx86_ctx* ctx,sx86_udword src)
-{
-       return op_rcl32(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-/**************************************************
- ************** RCR 8/16/32 emulation *************
- **************************************************/
-sx86_ubyte op_rcr8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val)
-{
-       sx86_ubyte ret,cf;
-       int shic,oshic;
-
-       oshic = val%9;  /* 8 bits + CF */
-       if (!oshic)     /* don't bother */
-               return src;
-
-/* the OF flag follows some sort of bizarre logic... and...
-   why is this done BEFORE the operation (according to
-   the pseudocode)? */
-       ret = src;
-       if (oshic == 1) {
-/* "OF <- MSB(DEST) XOR CF" */
-               if ((ret>>7)^((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1))
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* peform the operation. */
-       shic = oshic;
-       while (shic-- > 0) {
-               cf  = ret&1;
-               ret = (ret>>1)|(((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1)<<7);
-               if (cf) ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-               else    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_ubyte op_rcr1_8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       return op_rcr8(ctx,src,1);
-}
-
-sx86_ubyte op_rcr_cl_8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       return op_rcr8(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-sx86_uword op_rcr16(softx86_ctx* ctx,sx86_uword src,sx86_uword val)
-{
-       sx86_uword ret,cf;
-       int shic,oshic;
-
-       oshic = val%17; /* 16 bits + CF */
-       if (!oshic)     /* don't bother */
-               return src;
-
-/* the OF flag follows some sort of bizarre logic... and...
-   why is this done BEFORE the operation (according to
-   the pseudocode)? */
-       ret = src;
-       if (oshic == 1) {
-/* "OF <- MSB(DEST) XOR CF" */
-               if ((ret>>15)^((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1))
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* peform the operation. */
-       shic = oshic;
-       while (shic-- > 0) {
-               cf  = ret&1;
-               ret = (ret>>1)|(((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1)<<15);
-               if (cf) ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-               else    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_rcr1_16(softx86_ctx* ctx,sx86_uword src)
-{
-       return op_rcr16(ctx,src,1);
-}
-
-sx86_uword op_rcr_cl_16(softx86_ctx* ctx,sx86_uword src)
-{
-       return op_rcr16(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-sx86_udword op_rcr32(softx86_ctx* ctx,sx86_udword src,sx86_udword val)
-{
-       sx86_udword ret,cf;
-       int shic,oshic;
-
-       oshic = val%33; /* 32 bits + CF */
-       if (!oshic)     /* don't bother */
-               return src;
-
-/* the OF flag follows some sort of bizarre logic... and...
-   why is this done BEFORE the operation (according to
-   the pseudocode)? */
-       ret = src;
-       if (oshic == 1) {
-/* "OF <- MSB(DEST) XOR CF" */
-               if ((ret>>31)^((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1))
-                       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-               else
-                       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-       else {
-/* apparently undefined */
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-       }
-
-/* peform the operation. */
-       shic = oshic;
-       while (shic-- > 0) {
-               cf  = ret&1;
-               ret = (ret>>1)|(((ctx->state->reg_flags.val>>SX86_CPUFLAGBO_CARRY)&1)<<31);
-               if (cf) ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-               else    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-       }
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)   ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity32(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_rcr1_32(softx86_ctx* ctx,sx86_udword src)
-{
-       return op_rcr32(ctx,src,1);
-}
-
-sx86_udword op_rcr_cl_32(softx86_ctx* ctx,sx86_udword src)
-{
-       return op_rcr32(ctx,src,ctx->state->general_reg[SX86_REG_CX].b.lo);
-}
-
-/**************************************************
- ************** XOR 8/16/32 emulation *************
- **************************************************/
-sx86_ubyte op_xor8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val)
-{
-       sx86_ubyte ret;
-
-/* peform the operation */
-       ret = src ^ val;
-
-/* carry/overflow always cleared */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_xor16(softx86_ctx* ctx,sx86_uword src,sx86_uword val)
-{
-       sx86_uword ret;
-
-/* peform the operation */
-       ret = src ^ val;
-
-/* carry/overflow always cleared */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_xor32(softx86_ctx* ctx,sx86_udword src,sx86_udword val)
-{
-       sx86_udword ret;
-
-/* peform the operation */
-       ret = src ^ val;
-
-/* carry/overflow always cleared */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity32(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-/**************************************************
- ************** OR 8/16/32 emulation **************
- **************************************************/
-sx86_ubyte op_or8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val)
-{
-       sx86_ubyte ret;
-
-/* peform the operation */
-       ret = src | val;
-
-/* carry/overflow always cleared */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_or16(softx86_ctx* ctx,sx86_uword src,sx86_uword val)
-{
-       sx86_uword ret;
-
-/* peform the operation */
-       ret = src | val;
-
-/* carry/overflow always cleared */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_or32(softx86_ctx* ctx,sx86_udword src,sx86_udword val)
-{
-       sx86_udword ret;
-
-/* peform the operation */
-       ret = src | val;
-
-/* carry/overflow always cleared */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity32(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-/**************************************************
- ************** AND 8/16/32 emulation *************
- **************************************************/
-sx86_ubyte op_and8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val)
-{
-       sx86_ubyte ret;
-
-/* peform the operation */
-       ret = src & val;
-
-/* carry/overflow always cleared */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_and16(softx86_ctx* ctx,sx86_uword src,sx86_uword val)
-{
-       sx86_uword ret;
-
-/* peform the operation */
-       ret = src & val;
-
-/* carry/overflow always cleared */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_and32(softx86_ctx* ctx,sx86_udword src,sx86_udword val)
-{
-       sx86_udword ret;
-
-/* peform the operation */
-       ret = src & val;
-
-/* carry/overflow always cleared */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity32(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-/**************************************************
- ************* TEST 8/16/32 emulation *************
- **************************************************/
-/* apparently TEST is a lot like AND except for subtle differences... */
-sx86_ubyte op_test8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val)
-{
-       sx86_ubyte ret;
-
-/* peform the operation */
-       ret = src & val;
-
-/* carry/overflow always cleared */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit.
-   NOTE: Intel's documentation states that only the lower 8 bits
-         are used in setting PF. Odd... */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_test16(softx86_ctx* ctx,sx86_uword src,sx86_uword val)
-{
-       sx86_uword ret;
-
-/* peform the operation */
-       ret = src & val;
-
-/* carry/overflow always cleared */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit.
-   NOTE: Intel's documentation states that only the lower 8 bits
-         are used in setting PF. Odd... */
-       if (softx86_parity8((sx86_ubyte)ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_test32(softx86_ctx* ctx,sx86_udword src,sx86_udword val)
-{
-       sx86_udword ret;
-
-/* peform the operation */
-       ret = src & val;
-
-/* carry/overflow always cleared */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_CARRY | SX86_CPUFLAG_OVERFLOW);
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* quoting Intel: "The state of the AF flag is undefined"... */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit.
-   NOTE: Intel's documentation states that only the lower 8 bits
-         are used in setting PF. Odd... */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-/**************************************************
- ************* NOT 8/16/32 emulation *************
- **************************************************/
-sx86_ubyte op_not8(softx86_ctx* ctx,sx86_ubyte src)
-{
-/* peform the operation, no flags are affected */
-       return (~src);
-}
-
-sx86_uword op_not16(softx86_ctx* ctx,sx86_uword src)
-{
-/* peform the operation, no flags are affected */
-       return (~src);
-}
-
-sx86_udword op_not32(softx86_ctx* ctx,sx86_udword src)
-{
-/* peform the operation, no flags are affected */
-       return (~src);
-}
-
-/*************************************************
- ************* NEG 8/16/32 emulation *************
- *************************************************/
-sx86_ubyte op_neg8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       sx86_ubyte ret;
-
-/* peform the operation */
-       ret = (~src)+1; /* binary equivalent of x = 0 - x */
-
-/* carry set if operand was and still is 0 (since NEG 0 = 0) */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-/* Intel isn't clear how the OF flag is set "according to the result" */
-/* perhaps this is a minor detail that most programmers and clone
-   chip makers overlook anyway... but here is my interpretation of it.
-   based on the assumption that the chip just inverts the bits then adds
-   +1. ((NOT 0) + 1) = 0x100, and 0x100 squeezed into 8 bits is 0x00
-   with one bit that "overflowed". */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* Intel isn't clear on how this flag is set either. */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit. */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_neg16(softx86_ctx* ctx,sx86_uword src)
-{
-       sx86_uword ret;
-
-/* peform the operation */
-       ret = (~src)+1; /* binary equivalent of x = 0 - x */
-
-/* carry set if operand was and still is 0 (since NEG 0 = 0) */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-/* Intel isn't clear how the OF flag is set "according to the result" */
-/* perhaps this is a minor detail that most programmers and clone
-   chip makers overlook anyway... but here is my interpretation of it.
-   based on the assumption that the chip just inverts the bits then adds
-   +1. ((NOT 0) + 1) = 0x10000, and 0x10000 squeezed into 16 bits is 0x00
-   with one bit that "overflowed". */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* Intel isn't clear on how this flag is set either. */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit. */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_neg32(softx86_ctx* ctx,sx86_udword src)
-{
-       sx86_udword ret;
-
-/* peform the operation */
-       ret = (~src)+1; /* binary equivalent of x = 0 - x */
-
-/* carry set if operand was and still is 0 (since NEG 0 = 0) */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-
-/* Intel isn't clear how the OF flag is set "according to the result" */
-/* perhaps this is a minor detail that most programmers and clone
-   chip makers overlook anyway... but here is my interpretation of it.
-   based on the assumption that the chip just inverts the bits then adds
-   +1. ((NOT 0) + 1) = 0x100000000, and 0x100000000 squeezed into 32 bits
-   is 0x00 with one bit that "overflowed". */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_OVERFLOW;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_OVERFLOW;
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)   ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* Intel isn't clear on how this flag is set either. */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit. */
-       if (softx86_parity32(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-/*************************************************
- ************* MUL 8/16/32 emulation *************
- *************************************************/
-sx86_ubyte op_mul8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       sx86_uword result;
-
-/* peform the operation AX = AL * r/m8 */
-       result  = ((sx86_uword)ctx->state->general_reg[SX86_REG_AX].b.lo);
-       result *= ((sx86_uword)src);
-
-/* the result is stored into AX */
-       ctx->state->general_reg[SX86_REG_AX].w.lo = result;
-
-/* OF and CF are set if the upper half is nonzero */
-       if (result>>8)  ctx->state->reg_flags.val |=   SX86_CPUFLAG_OVERFLOW | SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~(SX86_CPUFLAG_OVERFLOW | SX86_CPUFLAG_CARRY);
-
-/* Intel documents SF ZF AF and PF as "undefined" after this instruction. */
-/* We'll just set them anyway by the normal rules... */
-/* if result treated as signed value is negative */
-       if (result & 0x8000)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!result)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* Whatever */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit. */
-       if (softx86_parity16(result))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return src;     /* this is called by sx86_exec_full_modrmonly_ro() so it doesn't matter */
-}
-
-sx86_uword op_mul16(softx86_ctx* ctx,sx86_uword src)
-{
-       sx86_udword result;
-
-/* peform the operation DX:AX = AX * r/m16 */
-       result  = ((sx86_udword)ctx->state->general_reg[SX86_REG_AX].w.lo);
-       result *= ((sx86_udword)src);
-
-/* the result is stored into DX:AX */
-       ctx->state->general_reg[SX86_REG_AX].w.lo = (sx86_uword)(result&0xFFFF);
-       ctx->state->general_reg[SX86_REG_DX].w.lo = (sx86_uword)(result>>16);
-
-/* OF and CF are set if the upper half is nonzero */
-       if (result>>16) ctx->state->reg_flags.val |=   SX86_CPUFLAG_OVERFLOW | SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~(SX86_CPUFLAG_OVERFLOW | SX86_CPUFLAG_CARRY);
-
-/* Intel documents SF ZF AF and PF as "undefined" after this instruction. */
-/* We'll just set them anyway by the normal rules... */
-/* if result treated as signed value is negative */
-       if (result & 0x80000000)        ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!result)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* Whatever */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit. */
-       if (softx86_parity32(result))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return src;     /* this is called by sx86_exec_full_modrmonly_ro() so it doesn't matter */
-}
-
-sx86_udword op_mul32(softx86_ctx* ctx,sx86_udword src)
-{
-       sx86_uldword result;
-
-/* peform the operation EDX:EAX = EAX * r/m32 */
-       result  = ((sx86_uldword)ctx->state->general_reg[SX86_REG_AX].val);
-       result *= ((sx86_uldword)src);
-
-/* the result is stored into EDX:EAX */
-       ctx->state->general_reg[SX86_REG_AX].val = (sx86_udword)(result&0xFFFFFFFF);
-       ctx->state->general_reg[SX86_REG_DX].val = (sx86_udword)(result>>32);
-
-/* OF and CF are set if the upper half is nonzero */
-       if (result>>32) ctx->state->reg_flags.val |=   SX86_CPUFLAG_OVERFLOW | SX86_CPUFLAG_CARRY;
-       else            ctx->state->reg_flags.val &= ~(SX86_CPUFLAG_OVERFLOW | SX86_CPUFLAG_CARRY);
-
-/* Intel documents SF ZF AF and PF as "undefined" after this instruction. */
-/* We'll just set them anyway by the normal rules... */
-/* if result treated as signed value is negative */
-       if (result & 0x8000000000000000)        ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!result)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* Whatever */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit. */
-       if (softx86_parity64(result))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return src;     /* this is called by sx86_exec_full_modrmonly_ro() so it doesn't matter */
-}
-
-/**************************************************
- ************* IMUL 8/16/32 emulation *************
- **************************************************/
-sx86_ubyte op_imul8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       sx86_sword result;
-
-/* peform the operation AX = AL * r/m8 */
-       result  = (sx86_sword)((sx86_sbyte)ctx->state->general_reg[SX86_REG_AX].b.lo);
-       result *= (sx86_sword)((sx86_sbyte)src);
-
-/* the result is stored into AX */
-       ctx->state->general_reg[SX86_REG_AX].w.lo = result;
-
-/* OF and CF are set if the upper half is nonzero */
-       if ((result>>8) == 0 || ((result>>8)&0xFF) == 0xFF)
-               ctx->state->reg_flags.val &= ~(SX86_CPUFLAG_OVERFLOW | SX86_CPUFLAG_CARRY);
-       else
-               ctx->state->reg_flags.val |=   SX86_CPUFLAG_OVERFLOW | SX86_CPUFLAG_CARRY;
-
-/* Intel documents SF ZF AF and PF as "undefined" after this instruction. */
-/* We'll just set them anyway by the normal rules... */
-/* if result treated as signed value is negative */
-       if (result & 0x8000)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!result)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* Whatever */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit. */
-       if (softx86_parity16(result))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return src;     /* this is called by sx86_exec_full_modrmonly_ro() so it doesn't matter */
-}
-
-sx86_uword op_imul16(softx86_ctx* ctx,sx86_uword src)
-{
-       sx86_sdword result;
-
-/* peform the operation AX = AL * r/m8 */
-       result  = (sx86_sdword)((sx86_sword)ctx->state->general_reg[SX86_REG_AX].w.lo);
-       result *= (sx86_sdword)((sx86_sword)src);
-
-/* the result is stored into AX */
-       ctx->state->general_reg[SX86_REG_AX].w.lo = (sx86_uword)(result&0xFFFF);
-       ctx->state->general_reg[SX86_REG_DX].w.lo = (sx86_uword)(result>>16);
-
-/* OF and CF are set if the upper half is nonzero */
-       if ((result>>16) == 0 || ((result>>16)&0xFFFF) == 0xFFFF)
-               ctx->state->reg_flags.val &= ~(SX86_CPUFLAG_OVERFLOW | SX86_CPUFLAG_CARRY);
-       else
-               ctx->state->reg_flags.val |=   SX86_CPUFLAG_OVERFLOW | SX86_CPUFLAG_CARRY;
-
-/* Intel documents SF ZF AF and PF as "undefined" after this instruction. */
-/* We'll just set them anyway by the normal rules... */
-/* if result treated as signed value is negative */
-       if (result & 0x80000000)        ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!result)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* Whatever */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit. */
-       if (softx86_parity32(result))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return src;     /* this is called by sx86_exec_full_modrmonly_ro() so it doesn't matter */
-}
-
-sx86_udword op_imul32(softx86_ctx* ctx,sx86_udword src)
-{
-       sx86_sldword result;
-
-/* peform the operation AX = AL * r/m8 */
-       result  = (sx86_sldword)((sx86_sdword)ctx->state->general_reg[SX86_REG_AX].val);
-       result *= (sx86_sldword)((sx86_sdword)src);
-
-/* the result is stored into AX */
-       ctx->state->general_reg[SX86_REG_AX].val = (sx86_uword)(result&0xFFFFFFFF);
-       ctx->state->general_reg[SX86_REG_DX].val = (sx86_uword)(result>>32);
-
-/* OF and CF are set if the upper half is nonzero */
-       if ((result>>32) == 0 || ((result>>32)&0xFFFFFFFF) == 0xFFFFFFFF)
-               ctx->state->reg_flags.val &= ~(SX86_CPUFLAG_OVERFLOW | SX86_CPUFLAG_CARRY);
-       else
-               ctx->state->reg_flags.val |=   SX86_CPUFLAG_OVERFLOW | SX86_CPUFLAG_CARRY;
-
-/* Intel documents SF ZF AF and PF as "undefined" after this instruction. */
-/* We'll just set them anyway by the normal rules... */
-/* if result treated as signed value is negative */
-       if (result & 0x8000000000000000)        ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else                                    ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!result)    ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* Whatever */
-       ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit. */
-       if (softx86_parity64(result))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return src;     /* this is called by sx86_exec_full_modrmonly_ro() so it doesn't matter */
-}
-
-/*************************************************
- ************* DIV 8/16/32 emulation *************
- *************************************************/
-sx86_ubyte op_div8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       sx86_uword result;
-
-/* signal division overflow */
-       if (src == 0) {
-               softx86_int_sw_signal(ctx,0);
-               return src;
-       }
-
-/* peform the operation AL = AX / r/m8 */
-       result = ((sx86_uword)ctx->state->general_reg[SX86_REG_AX].w.lo) / ((sx86_uword)src);
-
-/* signal division overflow */
-       if (result > 0xFF) {
-               softx86_int_sw_signal(ctx,0);
-               return src;
-       }
-
-/* the result is stored into AL, remainder in AH */
-       ctx->state->general_reg[SX86_REG_AX].b.hi =
-               ((sx86_uword)ctx->state->general_reg[SX86_REG_AX].w.lo) % ((sx86_uword)src);
-       ctx->state->general_reg[SX86_REG_AX].b.lo = (sx86_ubyte)result;
-
-/* Apparently all the flags are undefined after this instruction. */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_SIGN | SX86_CPUFLAG_ZERO | SX86_CPUFLAG_AUX | SX86_CPUFLAG_PARITY);
-
-       return src;     /* this is called by sx86_exec_full_modrmonly_ro() so it doesn't matter */
-}
-
-sx86_uword op_div16(softx86_ctx* ctx,sx86_uword src)
-{
-       sx86_udword result;
-
-/* signal division overflow */
-       if (src == 0) {
-               softx86_int_sw_signal(ctx,0);
-               return src;
-       }
-
-/* peform the operation AX = DX:AX / r/m16 */
-       result  = ((sx86_udword)ctx->state->general_reg[SX86_REG_AX].w.lo);
-       result |= ((sx86_udword)ctx->state->general_reg[SX86_REG_DX].w.lo)<<16;
-       result /= ((sx86_udword)src);
-
-/* signal division overflow */
-       if (result > 0xFFFF) {
-               softx86_int_sw_signal(ctx,0);
-               return src;
-       }
-
-/* the result is stored into AX, remainder in DX */
-       ctx->state->general_reg[SX86_REG_DX].w.lo =
-               ((sx86_uword)ctx->state->general_reg[SX86_REG_AX].w.lo) % ((sx86_uword)src);
-       ctx->state->general_reg[SX86_REG_AX].w.lo = (sx86_uword)result;
-
-/* Apparently all the flags are undefined after this instruction. */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_SIGN | SX86_CPUFLAG_ZERO | SX86_CPUFLAG_AUX | SX86_CPUFLAG_PARITY);
-
-       return src;     /* this is called by sx86_exec_full_modrmonly_ro() so it doesn't matter */
-}
-
-sx86_udword op_div32(softx86_ctx* ctx,sx86_udword src)
-{
-       sx86_uldword result;
-
-/* signal division overflow */
-       if (src == 0) {
-               softx86_int_sw_signal(ctx,0);
-               return src;
-       }
-
-/* peform the operation AX = EDX:EAX / r/m32 */
-       result  = ((sx86_uldword)ctx->state->general_reg[SX86_REG_AX].val);
-       result |= ((sx86_uldword)ctx->state->general_reg[SX86_REG_DX].val)<<32;
-       result /= ((sx86_uldword)src);
-
-/* signal division overflow */
-       if (result > 0xFFFFFFFFL) {
-               softx86_int_sw_signal(ctx,0);
-               return src;
-       }
-
-/* the result is stored into EAX, remainder in EDX */
-       ctx->state->general_reg[SX86_REG_DX].val =
-               ((sx86_udword)ctx->state->general_reg[SX86_REG_AX].val) % ((sx86_udword)src);
-       ctx->state->general_reg[SX86_REG_AX].val = (sx86_udword)result;
-
-/* Apparently all the flags are undefined after this instruction. */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_SIGN | SX86_CPUFLAG_ZERO | SX86_CPUFLAG_AUX | SX86_CPUFLAG_PARITY);
-
-       return src;     /* this is called by sx86_exec_full_modrmonly_ro() so it doesn't matter */
-}
-
-/**************************************************
- ************* IDIV 8/16/32 emulation *************
- **************************************************/
-sx86_ubyte op_idiv8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       sx86_sword result;
-
-/* signal division overflow */
-       if (src == 0) {
-               softx86_int_sw_signal(ctx,0);
-               return src;
-       }
-
-/* peform the operation AL = AX / r/m8 */
-       result = ((sx86_sword)ctx->state->general_reg[SX86_REG_AX].w.lo) / ((sx86_sbyte)src);
-
-/* signal division overflow */
-       if (result < -0x80 || result >= 0x80) {
-               softx86_int_sw_signal(ctx,0);
-               return src;
-       }
-
-/* the result is stored into AL, remainder in AH */
-       ctx->state->general_reg[SX86_REG_AX].b.hi =
-               ((sx86_sword)ctx->state->general_reg[SX86_REG_AX].w.lo) % ((sx86_sbyte)src);
-       ctx->state->general_reg[SX86_REG_AX].b.lo = (sx86_ubyte)result;
-
-/* Apparently all the flags are undefined after this instruction. */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_SIGN | SX86_CPUFLAG_ZERO | SX86_CPUFLAG_AUX | SX86_CPUFLAG_PARITY);
-
-       return src;     /* this is called by sx86_exec_full_modrmonly_ro() so it doesn't matter */
-}
-
-sx86_uword op_idiv16(softx86_ctx* ctx,sx86_uword src)
-{
-       sx86_sdword result;
-
-/* signal division overflow */
-       if (src == 0) {
-               softx86_int_sw_signal(ctx,0);
-               return src;
-       }
-
-/* peform the operation AX = DX:AX / r/m16 */
-       result  = ((sx86_sdword)ctx->state->general_reg[SX86_REG_AX].w.lo);
-       result |= ((sx86_sdword)ctx->state->general_reg[SX86_REG_DX].w.lo)<<16;
-       result /= ((sx86_sword)src);
-
-/* signal division overflow */
-       if (result < -0x8000 || result >= 0x8000) {
-               softx86_int_sw_signal(ctx,0);
-               return src;
-       }
-
-/* the result is stored into AX, remainder in DX */
-       ctx->state->general_reg[SX86_REG_DX].w.lo =
-               ((sx86_sword)ctx->state->general_reg[SX86_REG_AX].w.lo) % ((sx86_sword)src);
-       ctx->state->general_reg[SX86_REG_AX].w.lo = (sx86_uword)result;
-
-/* Apparently all the flags are undefined after this instruction. */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_SIGN | SX86_CPUFLAG_ZERO | SX86_CPUFLAG_AUX | SX86_CPUFLAG_PARITY);
-
-       return src;     /* this is called by sx86_exec_full_modrmonly_ro() so it doesn't matter */
-}
-
-sx86_udword op_idiv32(softx86_ctx* ctx,sx86_udword src)
-{
-       sx86_sldword result;
-
-/* signal division overflow */
-       if (src == 0) {
-               softx86_int_sw_signal(ctx,0);
-               return src;
-       }
-
-/* peform the operation AX = EDX:EAX / r/m32 */
-       result  = ((sx86_sldword)ctx->state->general_reg[SX86_REG_AX].val);
-       result |= ((sx86_sldword)ctx->state->general_reg[SX86_REG_DX].val)<<32;
-       result /= ((sx86_sldword)src);
-
-/* signal division overflow */
-       if (result < -0x80000000 || result >= 0x80000000) {
-               softx86_int_sw_signal(ctx,0);
-               return src;
-       }
-
-/* the result is stored into EAX, remainder in EDX */
-       ctx->state->general_reg[SX86_REG_DX].val =
-               ((sx86_sdword)ctx->state->general_reg[SX86_REG_AX].val) % ((sx86_sdword)src);
-       ctx->state->general_reg[SX86_REG_AX].val = (sx86_sdword)result;
-
-/* Apparently all the flags are undefined after this instruction. */
-       ctx->state->reg_flags.val &=
-               ~(SX86_CPUFLAG_SIGN | SX86_CPUFLAG_ZERO | SX86_CPUFLAG_AUX | SX86_CPUFLAG_PARITY);
-
-       return src;     /* this is called by sx86_exec_full_modrmonly_ro() so it doesn't matter */
-}
-
-int Sfx86OpcodeExec_xor(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFC) == 0x30) {                                    // XOR reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // XOR from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_exec_full_modregrm_rw(ctx,w16,0,mod,reg,
-                       rm,opswap,op_xor8,op_xor16,op_xor32);
-
-               return 1;
-       }
-       if (opcode == 0x34) {                                           // XOR AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_exec_byte(ctx);
-               x = op_xor8(ctx,ctx->state->general_reg[SX86_REG_AX].b.lo,x);
-               ctx->state->general_reg[SX86_REG_AX].b.lo = x;
-               return 1;
-       }
-       if (opcode == 0x35) {                                           // XOR AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_exec_byte(ctx);
-               x |= softx86_fetch_exec_byte(ctx) << 8;
-               x  = op_xor16(ctx,ctx->state->general_reg[SX86_REG_AX].w.lo,x);
-               ctx->state->general_reg[SX86_REG_AX].w.lo = x;
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_xor(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFC) == 0x30) {                                    // XOR reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // XOR from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modregrm(ctx,w16,0,mod,reg,rm,op1_tmp,op2_tmp);
-
-               if (opswap)     sprintf(buf,"XOR %s,%s",op2_tmp,op1_tmp);
-               else            sprintf(buf,"XOR %s,%s",op1_tmp,op2_tmp);
-               return 1;
-       }
-       if (opcode == 0x34) {                                           // XOR AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_dec_byte(ctx);
-               sprintf(buf,"XOR AL,%02Xh",x);
-               return 1;
-       }
-       if (opcode == 0x35) {                                           // XOR AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_dec_byte(ctx);
-               x |= softx86_fetch_dec_byte(ctx) << 8;
-               sprintf(buf,"XOR AX,%04Xh",x);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeExec_or(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFC) == 0x08) {                                    // OR reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // OR from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_exec_full_modregrm_rw(ctx,w16,0,mod,reg,
-                       rm,opswap,op_or8,op_or16,op_or32);
-
-               return 1;
-       }
-       if (opcode == 0x0C) {                                           // OR AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_exec_byte(ctx);
-               x = op_or8(ctx,ctx->state->general_reg[SX86_REG_AX].b.lo,x);
-               ctx->state->general_reg[SX86_REG_AX].b.lo = x;
-               return 1;
-       }
-       if (opcode == 0x0D) {                                           // OR AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_exec_byte(ctx);
-               x |= softx86_fetch_exec_byte(ctx) << 8;
-               x  = op_or16(ctx,ctx->state->general_reg[SX86_REG_AX].w.lo,x);
-               ctx->state->general_reg[SX86_REG_AX].w.lo = x;
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_or(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFC) == 0x08) {                                    // OR reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // OR from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modregrm(ctx,w16,0,mod,reg,rm,op1_tmp,op2_tmp);
-
-               if (opswap)     sprintf(buf,"OR %s,%s",op2_tmp,op1_tmp);
-               else            sprintf(buf,"OR %s,%s",op1_tmp,op2_tmp);
-               return 1;
-       }
-       if (opcode == 0x0C) {                                           // OR AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_dec_byte(ctx);
-               sprintf(buf,"OR AL,%02Xh",x);
-               return 1;
-       }
-       if (opcode == 0x0D) {                                           // OR AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_dec_byte(ctx);
-               x |= softx86_fetch_dec_byte(ctx) << 8;
-               sprintf(buf,"OR AX,%04Xh",x);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeExec_and(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFC) == 0x20) {                                    // AND reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // AND from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_exec_full_modregrm_rw(ctx,w16,0,mod,reg,
-                       rm,opswap,op_and8,op_and16,op_and32);
-
-               return 1;
-       }
-       if (opcode == 0x24) {                                           // AND AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_exec_byte(ctx);
-               x = op_and8(ctx,ctx->state->general_reg[SX86_REG_AX].b.lo,x);
-               ctx->state->general_reg[SX86_REG_AX].b.lo = x;
-               return 1;
-       }
-       if (opcode == 0x25) {                                           // AND AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_exec_byte(ctx);
-               x |= softx86_fetch_exec_byte(ctx) << 8;
-               x  = op_and16(ctx,ctx->state->general_reg[SX86_REG_AX].w.lo,x);
-               ctx->state->general_reg[SX86_REG_AX].w.lo = x;
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_and(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFC) == 0x20) {                                    // AND reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // AND from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modregrm(ctx,w16,0,mod,reg,rm,op1_tmp,op2_tmp);
-
-               if (opswap)     sprintf(buf,"AND %s,%s",op2_tmp,op1_tmp);
-               else            sprintf(buf,"AND %s,%s",op1_tmp,op2_tmp);
-               return 1;
-       }
-       if (opcode == 0x24) {                                           // AND AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_dec_byte(ctx);
-               sprintf(buf,"AND AL,%02Xh",x);
-               return 1;
-       }
-       if (opcode == 0x25) {                                           // AND AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_dec_byte(ctx);
-               x |= softx86_fetch_dec_byte(ctx) << 8;
-               sprintf(buf,"AND AX,%04Xh",x);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeExec_test(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFE) == 0x84) {                                    // TEST reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // TEST from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_exec_full_modregrm_ro(ctx,w16,0,mod,reg,           // unlike AND, TEST does not
-                       rm,opswap,op_test8,op_test16,op_test32);        // modify the dest. operand
-
-               return 1;
-       }
-       if (opcode == 0xA8) {                                           // TEST AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_exec_byte(ctx);
-               op_test8(ctx,ctx->state->general_reg[SX86_REG_AX].b.lo,x);
-               return 1;
-       }
-       if (opcode == 0xA9) {                                           // TEST AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_exec_byte(ctx);
-               x |= softx86_fetch_exec_byte(ctx) << 8;
-               op_test16(ctx,ctx->state->general_reg[SX86_REG_AX].w.lo,x);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_test(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFE) == 0x84) {                                    // TEST reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16,opswap;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               opswap = (opcode&2)>>1;                                 // TEST from reg to r/m UNLESS this bit it set (then it's the other way around)
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modregrm(ctx,w16,0,mod,reg,rm,op1_tmp,op2_tmp);
-
-               if (opswap)     sprintf(buf,"TEST %s,%s",op2_tmp,op1_tmp);
-               else            sprintf(buf,"TEST %s,%s",op1_tmp,op2_tmp);
-               return 1;
-       }
-       if (opcode == 0xA8) {                                           // TEST AL,imm8
-               sx86_ubyte x;
-
-               x = softx86_fetch_dec_byte(ctx);
-               sprintf(buf,"TEST AL,%02Xh",x);
-               return 1;
-       }
-       if (opcode == 0xA9) {                                           // TEST AX,imm16
-               sx86_uword x;
-
-               x  = softx86_fetch_dec_byte(ctx);
-               x |= softx86_fetch_dec_byte(ctx) << 8;
-               sprintf(buf,"TEST AX,%04Xh",x);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeExec_xchg(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFE) == 0x86) {                                    // XCHG reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_exec_full_modregrm_xchg(ctx,w16,0,mod,reg,rm);
-
-               return 1;
-       }
-       if ((opcode&0xF8) == 0x90) {                                    // XCHG reg16,AX
-               sx86_uword tmp;
-               int ro;
-
-/* interesting fact: Apparently the opcode 0x90 that Intel documents as NOP (no-op) also
-                     decodes to XCHG AX,AX (which does nothing anyway) */
-               ro = opcode - 0x90;
-               tmp = ctx->state->general_reg[ro].w.lo;
-               ctx->state->general_reg[ro].w.lo = ctx->state->general_reg[SX86_REG_AX].w.lo;
-               ctx->state->general_reg[SX86_REG_AX].w.lo = tmp;
-
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_xchg(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFE) == 0x86) {                                    // XCHG reg,reg/mem or reg/mem,reg
-               sx86_ubyte x;
-               sx86_ubyte w16;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modregrm(ctx,w16,0,mod,reg,rm,op1_tmp,op2_tmp);
-
-               sprintf(buf,"XCHG %s,%s",op1_tmp,op2_tmp);              // for this instruction either way works
-               return 1;
-       }
-       if ((opcode&0xF8) == 0x90) {                                    // XCHG reg16,AX
-               sprintf(buf,"XCHG %s,AX",sx86_regs16[opcode-0x90]);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeExec_lea(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if (opcode == 0x8D) {                                           // LEA reg,reg/mem
-               sx86_ubyte x;
-               sx86_ubyte mod,reg,rm;
-
-               x = softx86_fetch_exec_byte(ctx);                       // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_exec_full_modregrm_lea(ctx,0,mod,reg,rm);
-
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_lea(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if (opcode == 0x8D) {                                           // LEA reg,reg/mem
-               sx86_ubyte x;
-               sx86_ubyte mod,reg,rm;
-
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modregrm(ctx,1,0,mod,reg,rm,op1_tmp,op2_tmp);
-
-               sprintf(buf,"LEA %s,%s",op2_tmp,op1_tmp);               // for this instruction either way works
-               return 1;
-       }
-
-       return 0;
-}
-
-sx86_sword op_bound16(softx86_ctx* ctx,sx86_sword idx,sx86_sword upper,sx86_sword lower)
-{
-       if (idx >= lower && idx <= (upper+2)) {
-               /* everything is fine */
-               return lower;
-       }
-       else {
-               /* reset instruction pointer */
-               softx86_set_near_instruction_ptr(ctx,ctx->state->reg_ip_exec_initial);
-               /* signal BOUNDs exception */
-               softx86_int_sw_signal(ctx,5);
-       }
-
-       return lower;
-}
-
-sx86_sdword op_bound32(softx86_ctx* ctx,sx86_sdword idx,sx86_sdword upper,sx86_sdword lower)
-{
-       if (idx >= lower && idx <= (upper+4)) {
-               /* everything is fine */
-               return lower;
-       }
-       else {
-               /* reset instruction pointer */
-               softx86_set_near_instruction_ptr(ctx,ctx->state->reg_ip_exec_initial);
-               /* signal BOUNDs exception */
-               softx86_int_sw_signal(ctx,5);
-       }
-
-       return lower;
-}
-
-/* TODO: I get the impression that the BOUNDs instruction was not
-         part of the original 8086 instruction set. When was it added? */
-int Sfx86OpcodeExec_bound(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if (opcode == 0x62 && ctx->__private->level >= SX86_CPULEVEL_8086) {    // BOUND reg,mem
-               sx86_ubyte x;
-               sx86_ubyte mod,reg,rm;
-
-               x = softx86_fetch_exec_byte(ctx);                       // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_exec_full_modregrm_far_ro3(ctx,0,mod,reg,rm,op_bound16,op_bound32);
-
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_bound(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if (opcode == 0x62 && ctx->__private->level >= SX86_CPULEVEL_8086) {    // BOUND reg,mem
-               sx86_ubyte x;
-               sx86_ubyte mod,reg,rm;
-
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modregrm(ctx,1,0,mod,reg,rm,op1_tmp,op2_tmp);
-
-               sprintf(buf,"BOUND %s,%s",op2_tmp,op1_tmp);             // for this instruction either way works
-               return 1;
-       }
-
-       return 0;
-}
diff --git a/lib/3rdparty/softx86/softx86/binops.h b/lib/3rdparty/softx86/softx86/binops.h
deleted file mode 100644 (file)
index 9dd40a3..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-
-sx86_ubyte     op_shl8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-sx86_uword     op_shl16(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-sx86_udword    op_shl32(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-sx86_ubyte     op_shl1_8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_shl1_16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_shl1_32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_shl_cl_8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_shl_cl_16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_shl_cl_32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_shr8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-sx86_uword     op_shr16(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-sx86_udword    op_shr32(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-sx86_ubyte     op_shr1_8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_shr1_16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_shr1_32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_shr_cl_8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_shr_cl_16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_shr_cl_32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_sar8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-sx86_uword     op_sar16(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-sx86_udword    op_sar32(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-sx86_ubyte     op_sar1_8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_sar1_16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_sar1_32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_sar_cl_8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_sar_cl_16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_sar_cl_32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_rol8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-sx86_uword     op_rol16(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-sx86_udword    op_rol32(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-sx86_ubyte     op_rol1_8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_rol1_16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_rol1_32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_rol_cl_8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_rol_cl_16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_rol_cl_32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_ror8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-sx86_uword     op_ror16(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-sx86_udword    op_ror32(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-sx86_ubyte     op_ror1_8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_ror1_16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_ror1_32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_ror_cl_8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_ror_cl_16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_ror_cl_32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_rcl8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-sx86_uword     op_rcl16(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-sx86_udword    op_rcl32(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-sx86_ubyte     op_rcl1_8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_rcl1_16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_rcl1_32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_rcl_cl_8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_rcl_cl_16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_rcl_cl_32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_rcr8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-sx86_uword     op_rcr16(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-sx86_udword    op_rcr32(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-sx86_ubyte     op_rcr1_8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_rcr1_16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_rcr1_32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_rcr_cl_8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_rcr_cl_16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_rcr_cl_32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_or8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-sx86_uword     op_or16(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-sx86_udword    op_or32(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-sx86_ubyte     op_xor8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-sx86_uword     op_xor16(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-sx86_udword    op_xor32(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-sx86_ubyte     op_and8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-sx86_uword     op_and16(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-sx86_udword    op_and32(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-sx86_ubyte     op_test8(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-sx86_uword     op_test16(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-sx86_udword    op_test32(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-sx86_ubyte     op_not8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_not16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_not32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_neg8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_neg16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_neg32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_mul8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_mul16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_mul32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_imul8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_imul16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_imul32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_div8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_div16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_div32(softx86_ctx* ctx,sx86_udword src);
-sx86_ubyte     op_idiv8(softx86_ctx* ctx,sx86_ubyte src);
-sx86_uword     op_idiv16(softx86_ctx* ctx,sx86_uword src);
-sx86_udword    op_idiv32(softx86_ctx* ctx,sx86_udword src);
-
-int Sfx86OpcodeExec_or(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_or(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_xor(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_xor(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_and(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_and(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_test(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_test(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_xchg(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_xchg(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_lea(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_lea(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_bound(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_bound(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
diff --git a/lib/3rdparty/softx86/softx86/cbw.c b/lib/3rdparty/softx86/softx86/cbw.c
deleted file mode 100644 (file)
index e13cc92..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * cbw.c
- *
- * Copyright (C) 2003, 2004 Jonathan Campbell <jcampbell@mdjk.com>
- *
- * Decompiler and executioneer for CBW/CWDE/CWD/CDQ instructions.
- *
- ***********************************************************************************
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- ************************************************************************************/
-
-#include <softx86.h>
-#include <memory.h>
-#include <stdio.h>
-#include <string.h>
-#include "optable.h"
-#include "cbw.h"
-
-int Sfx86OpcodeExec_cxex(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if (opcode == 0x98) {                                           // CBW/CWDE
-               if (ctx->state->general_reg[SX86_REG_AX].b.lo & 0x80)   ctx->state->general_reg[SX86_REG_AX].w.lo |= 0xFF00;
-               else                                                    ctx->state->general_reg[SX86_REG_AX].b.hi  = 0x00;
-
-               return 1;
-       }
-
-       if (opcode == 0x99) {                                           // CWD/CDQ
-               if (ctx->state->general_reg[SX86_REG_AX].w.lo & 0x8000) ctx->state->general_reg[SX86_REG_DX].w.lo = 0xFFFF;
-               else                                                    ctx->state->general_reg[SX86_REG_DX].w.lo = 0x0000;
-
-               return 1;
-       }
-
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_cxex(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if (opcode == 0x98) {                                           // CBW/CWDE
-               strcpy(buf,"CBW");
-               return 1;
-       }
-
-       if (opcode == 0x99) {                                           // CWD/CDQ
-               strcpy(buf,"CWD");
-               return 1;
-       }
-
-       return 0;
-}
diff --git a/lib/3rdparty/softx86/softx86/cbw.h b/lib/3rdparty/softx86/softx86/cbw.h
deleted file mode 100644 (file)
index 459e85c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-int Sfx86OpcodeExec_cxex(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_cxex(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
diff --git a/lib/3rdparty/softx86/softx86/clc.c b/lib/3rdparty/softx86/softx86/clc.c
deleted file mode 100644 (file)
index c5a2c66..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * clc.c
- *
- * Copyright (C) 2003, 2004 Jonathan Campbell <jcampbell@mdjk.com>
- *
- * Decompiler and executioneer for CLC/CLD/CLI/CMC/STC/STD/STI instructions.
- *
- ***********************************************************************************
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- ************************************************************************************/
-
-#include <softx86.h>
-#include <memory.h>
-#include <stdio.h>
-#include <string.h>
-#include "optable.h"
-#include "clc.h"
-#include "drooling_duh.h"
-
-int Sfx86OpcodeExec_clx(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if (opcode == 0xF5) {                                           // CMC
-               ctx->state->reg_flags.val ^=  SX86_CPUFLAG_CARRY;
-               return 1;
-       }
-
-       if (opcode == 0xF8) {                                           // CLC
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_CARRY;
-               return 1;
-       }
-
-       if (opcode == 0xF9) {                                           // STC
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_CARRY;
-               return 1;
-       }
-
-       if (opcode == 0xFA) {                                           // CLI
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_INTENABLE;
-               return 1;
-       }
-
-       if (opcode == 0xFB) {                                           // STI
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_INTENABLE;
-               return 1;
-       }
-
-       if (opcode == 0xFC) {                                           // CLD
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_DIRECTIONREV;
-               return 1;
-       }
-
-       if (opcode == 0xFD) {                                           // STD
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_DIRECTIONREV;
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_clx(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if (opcode == 0xF5) {                                           // CMC
-               strcpy(buf,"CMC");
-               return 1;
-       }
-
-       if (opcode == 0xF8) {                                           // CLC
-               strcpy(buf,"CLC");
-               return 1;
-       }
-
-       if (opcode == 0xF9) {                                           // STC
-               strcpy(buf,"STC");
-               return 1;
-       }
-
-       if (opcode == 0xFA) {                                           // CLI
-               strcpy(buf,"CLI");
-               return 1;
-       }
-
-       if (opcode == 0xFB) {                                           // STI
-               strcpy(buf,"STI");
-               return 1;
-       }
-
-       if (opcode == 0xFC) {                                           // CLD
-               strcpy(buf,"CLD");
-               return 1;
-       }
-
-       if (opcode == 0xFD) {                                           // STD
-               strcpy(buf,"STD");
-               return 1;
-       }
-
-       return 0;
-}
diff --git a/lib/3rdparty/softx86/softx86/clc.h b/lib/3rdparty/softx86/softx86/clc.h
deleted file mode 100644 (file)
index f436a65..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-int Sfx86OpcodeExec_clx(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_clx(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
diff --git a/lib/3rdparty/softx86/softx86/drooling_duh.c b/lib/3rdparty/softx86/softx86/drooling_duh.c
deleted file mode 100644 (file)
index d761aa8..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * drooling_duh.c
- *
- * Copyright (C) 2003, 2004 Jonathan Campbell <jcampbell@mdjk.com>
- *
- * Decompiler and executioneer for HLT/WAIT instructions.
- *
- ***********************************************************************************
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- ************************************************************************************/
-
-#include <softx86.h>
-#include <memory.h>
-#include <stdio.h>
-#include <string.h>
-#include "optable.h"
-#include "drooling_duh.h"
-
-int Sfx86OpcodeExec_duhhh(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if (opcode == 0x9B) {                                           // WAIT
-               return 1;
-       }
-       if (opcode == 0xF4) {                                           // HLT
-/* if an external interrupt pending, proceed */
-               if (ctx->state->int_hw_flag || ctx->state->int_nmi)
-                       return 1;
-/* else, do not proceed */
-               else
-                       return 3;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_duhhh(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if (opcode == 0x9B) {                                           // WAIT
-               strcpy(buf,"WAIT");
-               return 1;
-       }
-       if (opcode == 0xF4) {                                           // HLT
-               strcpy(buf,"HLT");
-               return 1;
-       }
-
-       return 0;
-}
diff --git a/lib/3rdparty/softx86/softx86/drooling_duh.h b/lib/3rdparty/softx86/softx86/drooling_duh.h
deleted file mode 100644 (file)
index 5a235f8..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-int Sfx86OpcodeExec_duhhh(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_duhhh(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
diff --git a/lib/3rdparty/softx86/softx86/fpu.c b/lib/3rdparty/softx86/softx86/fpu.c
deleted file mode 100644 (file)
index 7eee1e1..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * fpu.c
- *
- * Copyright (C) 2003, 2004 Jonathan Campbell <jcampbell@mdjk.com>
- *
- * Handles 80x87 FPU opcodes by passing them down through callbacks
- * set up in application.
- *
- * The idea behind this is to handle these opcodes the same way the
- * 8086, 80286, 80386, and some 80486s handled them by passing them
- * off to an optional external FPU (possibly provided by another
- * library similar to this).
- *
- ***********************************************************************************
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- ************************************************************************************/
-
-#include <softx86.h>
-#include <memory.h>
-#include <stdio.h>
-#include <string.h>
-#include "optable.h"
-#include "fpu.h"
-
-int Sfx86OpcodeExec_fpuhandoff(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       return ctx->callbacks->on_fpu_opcode_exec(ctx,ctx->ref_softx87_ctx,opcode);
-}
-
-int Sfx86OpcodeDec_fpuhandoff(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       return ctx->callbacks->on_fpu_opcode_dec(ctx,ctx->ref_softx87_ctx,opcode,buf);
-}
diff --git a/lib/3rdparty/softx86/softx86/fpu.h b/lib/3rdparty/softx86/softx86/fpu.h
deleted file mode 100644 (file)
index df47198..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-int Sfx86OpcodeExec_fpuhandoff(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_fpuhandoff(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
diff --git a/lib/3rdparty/softx86/softx86/groupies.c b/lib/3rdparty/softx86/softx86/groupies.c
deleted file mode 100644 (file)
index 11f72bd..0000000
+++ /dev/null
@@ -1,764 +0,0 @@
-/*
- * groupies.c
- *
- * Copyright (C) 2003, 2004 Jonathan Campbell <jcampbell@mdjk.com>
- *
- * Decompiler and executioneer for instruction opcodes grouped by a common
- * opcode and specified by the reg portion of the mod/reg/rm byte.
- *
- ***********************************************************************************
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- ************************************************************************************/
-
-#include <softx86.h>
-#include <memory.h>
-#include <stdio.h>
-#include <string.h>
-#include "groupies.h"
-#include "optable.h"
-#include "binops.h"
-#include "add.h"
-#include "mov.h"
-#include "inc.h"
-
-sx86_uword op_ncall16(softx86_ctx* ctx,sx86_uword src)
-{
-       softx86_stack_pushw(ctx,ctx->state->reg_ip);
-       softx86_set_near_instruction_ptr(ctx,src);
-       return src;
-}
-
-sx86_udword op_ncall32(softx86_ctx* ctx,sx86_udword src)
-{
-       softx86_stack_pushw(ctx,(ctx->state->reg_ip>>16)&0xFFFF);
-       softx86_stack_pushw(ctx,ctx->state->reg_ip&0xFFFF);
-       softx86_set_near_instruction_ptr(ctx,src);
-       return src;
-}
-
-sx86_uword op_popmem16(softx86_ctx* ctx)
-{
-       return softx86_stack_popw(ctx);
-}
-
-sx86_udword op_popmem32(softx86_ctx* ctx)
-{
-       sx86_udword d;
-
-       d  = ((sx86_udword)softx86_stack_popw(ctx));
-       d |= ((sx86_udword)softx86_stack_popw(ctx))<<16;
-       return d;
-}
-
-sx86_uword op_pushmem16(softx86_ctx* ctx,sx86_uword src)
-{
-       softx86_stack_pushw(ctx,src);
-       return src;
-}
-
-sx86_udword op_pushmem32(softx86_ctx* ctx,sx86_udword src)
-{
-       softx86_stack_pushw(ctx,(src>>16)&0xFFFF);
-       softx86_stack_pushw(ctx,src&0xFFFF);
-       return src;
-}
-
-sx86_uword op_njmp16(softx86_ctx* ctx,sx86_uword src)
-{
-       softx86_set_near_instruction_ptr(ctx,src);
-       return src;
-}
-
-sx86_udword op_njmp32(softx86_ctx* ctx,sx86_udword src)
-{
-       softx86_set_near_instruction_ptr(ctx,src);
-       return src;
-}
-
-void op_fcall16(softx86_ctx* ctx,sx86_uword seg,sx86_uword ofs)
-{
-       softx86_stack_pushw(ctx,ctx->state->segment_reg[SX86_SREG_CS].val);
-       softx86_stack_pushw(ctx,ctx->state->reg_ip);
-       softx86_set_instruction_ptr(ctx,seg,ofs);
-}
-
-void op_fcall32(softx86_ctx* ctx,sx86_udword seg,sx86_udword ofs)
-{
-       softx86_stack_pushw(ctx,ctx->state->segment_reg[SX86_SREG_CS].val);
-       softx86_stack_pushw(ctx,ctx->state->reg_ip&0xFFFF);
-       softx86_stack_pushw(ctx,(ctx->state->reg_ip>>16)&0xFFFF);
-       softx86_set_instruction_ptr(ctx,seg,ofs);
-}
-
-void op_fjmp16(softx86_ctx* ctx,sx86_uword seg,sx86_uword ofs)
-{
-       softx86_set_instruction_ptr(ctx,seg,ofs);
-}
-
-void op_fjmp32(softx86_ctx* ctx,sx86_udword seg,sx86_udword ofs)
-{
-       softx86_set_instruction_ptr(ctx,seg,ofs);
-}
-
-int Sfx86OpcodeExec_group80(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFC) == 0x80) {
-               sx86_ubyte x;
-               sx86_ubyte w16,sx;
-               sx86_ubyte mod,reg,rm;
-               sx86_ubyte (*op8)(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-               sx86_uword (*op16)(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-               sx86_udword (*op32)(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-
-               w16    = opcode&1;
-               sx     = (opcode>>1)&1;
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-
-               if (reg == 0) {
-                       op8  = op_add8;
-                       op16 = op_add16;
-                       op32 = op_add32;
-               }
-               else if (reg == 1) {
-                       op8  = op_or8;
-                       op16 = op_or16;
-                       op32 = op_or32;
-               }
-               else if (reg == 2) {
-                       op8  = op_adc8;
-                       op16 = op_adc16;
-                       op32 = op_adc32;
-               }
-               else if (reg == 3) {
-                       op8  = op_sbb8;
-                       op16 = op_sbb16;
-                       op32 = op_sbb32;
-               }
-               else if (reg == 4) {
-                       op8  = op_and8;
-                       op16 = op_and16;
-                       op32 = op_and32;
-               }
-               else if (reg == 5) {
-                       op8  = op_sub8;
-                       op16 = op_sub16;
-                       op32 = op_sub32;
-               }
-               else if (reg == 6) {
-                       op8  = op_xor8;
-                       op16 = op_xor16;
-                       op32 = op_xor32;
-               }
-               else if (reg == 7) {
-                       op8  = op_sub8;         /* CMP is like SUB except that the result */
-                       op16 = op_sub16;        /* ends up in a temporary register, leaving */
-                       op32 = op_sub32;        /* the original data untouched. */
-               }
-               else {
-                       return 0;
-               }
-
-               if (reg == 7)                   /* CMP doesn't modify the dest. register... */
-                       sx86_exec_full_modrmonly_ro_imm(ctx,w16,0,mod,rm,op8,op16,op32,sx);
-               else
-                       sx86_exec_full_modrmonly_rw_imm(ctx,w16,0,mod,rm,op8,op16,op32,sx);
-
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_group80(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFC) == 0x80) {
-               sx86_ubyte x;
-               sx86_ubyte w16,sx;
-               sx86_ubyte mod,reg,rm;
-               sx86_uword imm16;
-
-               w16    = opcode&1;
-               sx     = (opcode>>1)&1;
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modrmonly(ctx,w16,0,mod,rm,op1_tmp);
-
-               imm16 = softx86_fetch_dec_byte(ctx);
-               if (w16)
-                {
-                       if (sx)
-                               imm16 |= (imm16&0x80) ? 0xFF80 : 0;
-                       else
-                               imm16 |= softx86_fetch_dec_byte(ctx)<<8;
-                }
-
-               if (reg == 0)           sprintf(buf,"ADD %s,%04Xh",op1_tmp,imm16);
-               else if (reg == 1)      sprintf(buf,"OR %s,%04Xh",op1_tmp,imm16);
-               else if (reg == 2)      sprintf(buf,"ADC %s,%04Xh",op1_tmp,imm16);
-               else if (reg == 3)      sprintf(buf,"SBB %s,%04Xh",op1_tmp,imm16);
-               else if (reg == 4)      sprintf(buf,"AND %s,%04Xh",op1_tmp,imm16);
-               else if (reg == 5)      sprintf(buf,"SUB %s,%04Xh",op1_tmp,imm16);
-               else if (reg == 6)      sprintf(buf,"XOR %s,%04Xh",op1_tmp,imm16);
-               else if (reg == 7)      sprintf(buf,"CMP %s,%04Xh",op1_tmp,imm16);
-               else                    return 0;
-
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeExec_groupC0(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFE) == 0xC0) {
-               sx86_ubyte x;
-               sx86_ubyte w16;
-               sx86_ubyte mod,reg,rm;
-               sx86_ubyte (*op8)(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-               sx86_uword (*op16)(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-               sx86_udword (*op32)(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-
-               w16    = (opcode&1);
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-
-               if (reg == 0) {
-                       op8  = op_rol8;
-                       op16 = op_rol16;
-                       op32 = op_rol32;
-               }
-               else if (reg == 1) {
-                       op8  = op_ror8;
-                       op16 = op_ror16;
-                       op32 = op_ror32;
-               }
-               else if (reg == 2) {
-                       op8  = op_rcl8;
-                       op16 = op_rcl16;
-                       op32 = op_rcl32;
-               }
-               else if (reg == 3) {
-                       op8  = op_rcr8;
-                       op16 = op_rcr16;
-                       op32 = op_rcr32;
-               }
-               else if (reg == 4) {
-                       op8  = op_shl8;
-                       op16 = op_shl16;
-                       op32 = op_shl32;
-               }
-               else if (reg == 5) {
-                       op8  = op_shr8;
-                       op16 = op_shr16;
-                       op32 = op_shr32;
-               }
-               else if (reg == 7) {
-                       op8  = op_sar8;
-                       op16 = op_sar16;
-                       op32 = op_sar32;
-               }
-               else {
-                       return 0;
-               }
-
-               sx86_exec_full_modrmonly_rw_imm8(ctx,w16,0,mod,rm,op8,op16,op32);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_groupC0(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFE) == 0xC0) {
-               sx86_ubyte x;
-               sx86_ubyte w16;
-               sx86_ubyte mod,reg,rm;
-               sx86_uword imm16;
-
-               w16    = (opcode&1);
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modrmonly(ctx,w16,0,mod,rm,op1_tmp);
-
-               imm16 = softx86_fetch_dec_byte(ctx);
-
-               if (reg == 0)           sprintf(buf,"ROL %s,%04Xh",op1_tmp,imm16);
-               else if (reg == 1)      sprintf(buf,"ROR %s,%04Xh",op1_tmp,imm16);
-               else if (reg == 2)      sprintf(buf,"RCL %s,%04Xh",op1_tmp,imm16);
-               else if (reg == 3)      sprintf(buf,"RCR %s,%04Xh",op1_tmp,imm16);
-               else if (reg == 4)      sprintf(buf,"SHL %s,%04Xh",op1_tmp,imm16);
-               else if (reg == 5)      sprintf(buf,"SHR %s,%04Xh",op1_tmp,imm16);
-               else if (reg == 7)      sprintf(buf,"SAR %s,%04Xh",op1_tmp,imm16);
-               else                    return 0;
-
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeExec_groupD0(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFE) == 0xD0 || (opcode&0xFE) == 0xD2) {
-               sx86_ubyte x;
-               sx86_ubyte w16;
-               sx86_ubyte mod,reg,rm;
-               sx86_ubyte (*op8)(softx86_ctx* ctx,sx86_ubyte src);
-               sx86_uword (*op16)(softx86_ctx* ctx,sx86_uword src);
-               sx86_udword (*op32)(softx86_ctx* ctx,sx86_udword src);
-
-               w16    = (opcode&1);
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-
-               if (reg == 0) {
-                       if ((opcode&0xFE) == 0xD2) {
-                               op8  = op_rol_cl_8;
-                               op16 = op_rol_cl_16;
-                               op32 = op_rol_cl_32;
-                       }
-                       else {
-                               op8  = op_rol1_8;
-                               op16 = op_rol1_16;
-                               op32 = op_rol1_32;
-                       }
-               }
-               else if (reg == 1) {
-                       if ((opcode&0xFE) == 0xD2) {
-                               op8  = op_ror_cl_8;
-                               op16 = op_ror_cl_16;
-                               op32 = op_ror_cl_32;
-                       }
-                       else {
-                               op8  = op_ror1_8;
-                               op16 = op_ror1_16;
-                               op32 = op_ror1_32;
-                       }
-               }
-               else if (reg == 2) {
-                       if ((opcode&0xFE) == 0xD2) {
-                               op8  = op_rcl_cl_8;
-                               op16 = op_rcl_cl_16;
-                               op32 = op_rcl_cl_32;
-                       }
-                       else {
-                               op8  = op_rcl1_8;
-                               op16 = op_rcl1_16;
-                               op32 = op_rcl1_32;
-                       }
-               }
-               else if (reg == 3) {
-                       if ((opcode&0xFE) == 0xD2) {
-                               op8  = op_rcr_cl_8;
-                               op16 = op_rcr_cl_16;
-                               op32 = op_rcr_cl_32;
-                       }
-                       else {
-                               op8  = op_rcr1_8;
-                               op16 = op_rcr1_16;
-                               op32 = op_rcr1_32;
-                       }
-               }
-               else if (reg == 4) {
-                       if ((opcode&0xFE) == 0xD2) {
-                               op8  = op_shl_cl_8;
-                               op16 = op_shl_cl_16;
-                               op32 = op_shl_cl_32;
-                       }
-                       else {
-                               op8  = op_shl1_8;
-                               op16 = op_shl1_16;
-                               op32 = op_shl1_32;
-                       }
-               }
-               else if (reg == 5) {
-                       if ((opcode&0xFE) == 0xD2) {
-                               op8  = op_shr_cl_8;
-                               op16 = op_shr_cl_16;
-                               op32 = op_shr_cl_32;
-                       }
-                       else {
-                               op8  = op_shr1_8;
-                               op16 = op_shr1_16;
-                               op32 = op_shr1_32;
-                       }
-               }
-               else if (reg == 7) {
-                       if ((opcode&0xFE) == 0xD2) {
-                               op8  = op_sar_cl_8;
-                               op16 = op_sar_cl_16;
-                               op32 = op_sar_cl_32;
-                       }
-                       else {
-                               op8  = op_sar1_8;
-                               op16 = op_sar1_16;
-                               op32 = op_sar1_32;
-                       }
-               }
-               else {
-                       return 0;
-               }
-
-               sx86_exec_full_modrmonly_rw(ctx,w16,0,mod,rm,op8,op16,op32);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_groupD0(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFE) == 0xD0 || (opcode&0xFE) == 0xD2) {
-               sx86_ubyte x;
-               sx86_ubyte w16;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modrmonly(ctx,w16,0,mod,rm,op1_tmp);
-
-               if ((opcode&0xFE) == 0xD2) {
-                       if (reg == 0)           sprintf(buf,"ROL %s,CL",op1_tmp);
-                       else if (reg == 1)      sprintf(buf,"ROR %s,CL",op1_tmp);
-                       else if (reg == 2)      sprintf(buf,"RCL %s,CL",op1_tmp);
-                       else if (reg == 3)      sprintf(buf,"RCR %s,CL",op1_tmp);
-                       else if (reg == 4)      sprintf(buf,"SHL %s,CL",op1_tmp);
-                       else if (reg == 5)      sprintf(buf,"SHR %s,CL",op1_tmp);
-                       else if (reg == 7)      sprintf(buf,"SAR %s,CL",op1_tmp);
-                       else                    return 0;
-               }
-               else {
-                       if (reg == 0)           sprintf(buf,"ROL %s,1",op1_tmp);
-                       else if (reg == 1)      sprintf(buf,"ROR %s,1",op1_tmp);
-                       else if (reg == 2)      sprintf(buf,"RCL %s,1",op1_tmp);
-                       else if (reg == 3)      sprintf(buf,"RCR %s,1",op1_tmp);
-                       else if (reg == 4)      sprintf(buf,"SHL %s,1",op1_tmp);
-                       else if (reg == 5)      sprintf(buf,"SHR %s,1",op1_tmp);
-                       else if (reg == 7)      sprintf(buf,"SAR %s,1",op1_tmp);
-                       else                    return 0;
-               }
-
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeExec_groupC6(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFE) == 0xC6) {
-               sx86_ubyte x;
-               sx86_ubyte w16;
-               sx86_ubyte mod,reg,rm;
-               sx86_ubyte (*op8)(softx86_ctx* ctx,sx86_ubyte src,sx86_ubyte val);
-               sx86_uword (*op16)(softx86_ctx* ctx,sx86_uword src,sx86_uword val);
-               sx86_udword (*op32)(softx86_ctx* ctx,sx86_udword src,sx86_udword val);
-
-               w16    = (opcode&1);
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-
-               if (reg == 0) {
-                       op8  = op_mov8;
-                       op16 = op_mov16;
-                       op32 = op_mov32;
-               }
-               else {
-                       return 0;
-               }
-
-               sx86_exec_full_modrmonly_rw_imm(ctx,w16,0,mod,rm,op8,op16,op32,0);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_groupC6(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFE) == 0xC6) {
-               sx86_ubyte x;
-               sx86_ubyte w16;
-               sx86_ubyte mod,reg,rm;
-               sx86_uword imm16;
-
-               w16    = (opcode&1);
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modrmonly(ctx,w16,0,mod,rm,op1_tmp);
-
-               imm16 = softx86_fetch_dec_byte(ctx);
-               if (w16) imm16 |= softx86_fetch_dec_byte(ctx)<<8;
-
-               if (reg == 0)           sprintf(buf,"MOV %s,%04Xh",op1_tmp,imm16);
-               else                    return 0;
-
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeExec_groupFE(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFE) == 0xFE) {
-               sx86_ubyte x;
-               sx86_ubyte w16;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-
-               if (reg == 0) {
-                       sx86_exec_full_modrmonly_rw(ctx,w16,0,mod,rm,op_inc8,op_inc16,op_inc32);
-               }
-               else if (reg == 1) {
-                       sx86_exec_full_modrmonly_rw(ctx,w16,0,mod,rm,op_dec8,op_dec16,op_dec32);
-               }
-               else if (reg >= 2) {
-                       if (!w16) return 0;
-
-                       if (reg == 3 || reg == 5) {
-                               void (*op16)(softx86_ctx* ctx,sx86_uword seg,sx86_uword ofs);
-                               void (*op32)(softx86_ctx* ctx,sx86_udword seg,sx86_udword ofs);
-
-                               /* you cannot have a far address in registers */
-                               if (mod == 3)
-                                       return 0;
-
-                               if (reg == 3) {
-                                       op16 = op_fcall16;
-                                       op32 = op_fcall32;
-                               }
-                               else if (reg == 5) {
-                                       op16 = op_fjmp16;
-                                       op32 = op_fjmp32;
-                               }
-
-                               sx86_exec_full_modrmonly_callfar(ctx,0,mod,rm,op16,op32);
-                       }
-                       else {
-                               sx86_uword (*op16)(softx86_ctx* ctx,sx86_uword src);
-                               sx86_udword (*op32)(softx86_ctx* ctx,sx86_udword src);
-
-                               if (reg == 2) {
-                                       op16 = op_ncall16;
-                                       op32 = op_ncall32;
-                               }
-                               else if (reg == 4) {
-                                       op16 = op_njmp16;
-                                       op32 = op_njmp32;
-                               }
-                               else if (reg == 6) {
-                                       op16 = op_pushmem16;
-                                       op32 = op_pushmem32;
-                               }
-                               else {
-                                       return 0;
-                               }
-
-                               sx86_exec_full_modrmonly_ro(ctx,1,0,mod,rm,NULL,op16,op32);
-                       }
-               }
-
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_groupFE(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFE) == 0xFE) {
-               sx86_ubyte x;
-               sx86_ubyte w16;
-               sx86_ubyte mod,reg,rm;
-
-               w16    = (opcode&1);
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modrmonly(ctx,w16,0,mod,rm,op1_tmp);
-
-               if (reg == 0)           sprintf(buf,"INC %s",op1_tmp);
-               else if (reg == 1)      sprintf(buf,"DEC %s",op1_tmp);
-               else {
-                       if (!w16)
-                               return 0;
-                       if (reg == 2)
-                               sprintf(buf,"CALL %s",op1_tmp);
-                       else if (reg == 3)
-                               sprintf(buf,"CALL FAR %s",op1_tmp);
-                       else if (reg == 4)
-                               sprintf(buf,"JMP %s",op1_tmp);
-                       else if (reg == 5)
-                               sprintf(buf,"JMP FAR %s",op1_tmp);
-                       else if (reg == 6)
-                               sprintf(buf,"PUSH %s",op1_tmp);
-                       else
-                               return 0;
-               }
-
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeExec_group8F(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if (opcode == 0x8F) {
-               sx86_ubyte x,mod,reg,rm;
-               sx86_uword (*op16)(softx86_ctx* ctx);
-               sx86_udword (*op32)(softx86_ctx* ctx);
-
-               x = softx86_fetch_exec_byte(ctx);                       // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-
-               if (reg == 0) {
-                       op16 = op_popmem16;
-                       op32 = op_popmem32;
-               }
-               else {
-                       return 0;
-               }
-
-               sx86_exec_full_modrmonly_wo(ctx,1,0,mod,rm,NULL,op16,op32);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_group8F(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if (opcode == 0x8F) {
-               sx86_ubyte x;
-               sx86_ubyte mod,reg,rm;
-
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modrmonly(ctx,1,0,mod,rm,op1_tmp);
-
-               if (reg == 0)           sprintf(buf,"POP %s",op1_tmp);
-               else                    return 0;
-
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeExec_groupF6(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xFE) == 0xF6) {
-               sx86_ubyte x;
-               sx86_ubyte w16;
-               sx86_ubyte mod,reg,rm;
-               sx86_ubyte (*op8)(softx86_ctx* ctx,sx86_ubyte src);
-               sx86_uword (*op16)(softx86_ctx* ctx,sx86_uword src);
-               sx86_udword (*op32)(softx86_ctx* ctx,sx86_udword src);
-
-               w16    = (opcode&1);
-               x      = softx86_fetch_exec_byte(ctx);                  // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-
-               if (reg == 0) {
-                       /* taken care of later */
-               }
-               else if (reg == 2) {
-                       /* taken care of later */
-               }
-               else if (reg == 3) {
-                       /* taken care of later */
-               }
-               else if (reg == 4) {
-                       op8  = op_mul8;
-                       op16 = op_mul16;
-                       op32 = op_mul32;
-               }
-               else if (reg == 5) {
-                       op8  = op_imul8;
-                       op16 = op_imul16;
-                       op32 = op_imul32;
-               }
-               else if (reg == 6) {
-                       op8  = op_div8;
-                       op16 = op_div16;
-                       op32 = op_div32;
-               }
-               else if (reg == 7) {
-                       op8  = op_idiv8;        /* CMP is like SUB except that the result */
-                       op16 = op_idiv16;       /* ends up in a temporary register, leaving */
-                       op32 = op_idiv32;       /* the original data untouched. */
-               }
-               else {
-                       return 0;
-               }
-
-/* TEST does not modify the dest. register... */
-               if (reg == 0)
-                       sx86_exec_full_modrmonly_ro_imm(ctx,w16,0,mod,rm,op_test8,op_test16,op_test32,0);
-/* NOT and NEG only have one operand */
-               else if (reg == 2)
-                       sx86_exec_full_modrmonly_rw(ctx,w16,0,mod,rm,op_not8,op_not16,op_not32);
-               else if (reg == 3)
-                       sx86_exec_full_modrmonly_rw(ctx,w16,0,mod,rm,op_neg8,op_neg16,op_neg32);
-/* everybody else (MUL/IMUL/DIV/IDIV) has one operand but modifies (E)AX */
-               else
-                       sx86_exec_full_modrmonly_ro(ctx,w16,0,mod,rm,op8,op16,op32);
-
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_groupF6(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xFE) == 0xF6) {
-               sx86_ubyte x;
-               sx86_ubyte w16;
-               sx86_ubyte mod,reg,rm;
-               sx86_uword imm16;
-
-               w16    = (opcode&1);
-               x      = softx86_fetch_dec_byte(ctx);                   // fetch mod/reg/rm
-               sx86_modregrm_unpack(x,mod,reg,rm);
-               sx86_dec_full_modrmonly(ctx,w16,0,mod,rm,op1_tmp);
-
-               if (reg == 0) {
-                       imm16 = softx86_fetch_dec_byte(ctx);
-                       if (w16) imm16 |= softx86_fetch_dec_byte(ctx)<<8;
-               }
-
-               if (reg == 0)           sprintf(buf,"TEST %s,%04Xh",op1_tmp,imm16);
-               else if (reg == 2)      sprintf(buf,"NOT %s",op1_tmp);
-               else if (reg == 3)      sprintf(buf,"NEG %s",op1_tmp);
-               else if (reg == 4)      sprintf(buf,"MUL %s",op1_tmp);
-               else if (reg == 5)      sprintf(buf,"IMUL %s",op1_tmp);
-               else if (reg == 6)      sprintf(buf,"DIV %s",op1_tmp);
-               else if (reg == 7)      sprintf(buf,"IDIV %s",op1_tmp);
-               else                    return 0;
-
-               return 1;
-       }
-
-       return 0;
-}
-
diff --git a/lib/3rdparty/softx86/softx86/groupies.h b/lib/3rdparty/softx86/softx86/groupies.h
deleted file mode 100644 (file)
index 444987d..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-
-int Sfx86OpcodeExec_group80(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_group80(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_group8F(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_group8F(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_groupC0(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_groupC0(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_groupC6(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_groupC6(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_groupD0(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_groupD0(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_groupF6(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_groupF6(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
-int Sfx86OpcodeExec_groupFE(sx86_ubyte opcode,softx86_ctx* ctx);
-int Sfx86OpcodeDec_groupFE(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128]);
diff --git a/lib/3rdparty/softx86/softx86/inc.c b/lib/3rdparty/softx86/softx86/inc.c
deleted file mode 100644 (file)
index 39d0df7..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * inc.c
- *
- * Copyright (C) 2003, 2004 Jonathan Campbell <jcampbell@mdjk.com>
- *
- * Decompiler and executioneer for the INC/DEC instructions.
- *
- ***********************************************************************************
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- ************************************************************************************/
-
-#include <softx86.h>
-#include <memory.h>
-#include <stdio.h>
-#include <string.h>
-#include "optable.h"
-#include "inc.h"
-
-sx86_ubyte op_dec8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       sx86_ubyte ret;
-
-/* peform the subtraction */
-       ret = src-1;
-
-/* apparently CF is not touched by this instruction */
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a - b = c, ((a AND 0Fh) - (b AND 0Fh) < 0).
-   in other words, if the lowest nibbles subtracted cause carry. */
-       if ((src&0xF) < 1)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_dec16(softx86_ctx* ctx,sx86_uword src)
-{
-       sx86_uword ret;
-
-/* peform the subtraction */
-       ret = src-1;
-
-/* apparently CF is not touched by this instruction */
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a - b = c, ((a AND 0Fh) - (b AND 0Fh) < 0).
-   in other words, if the lowest nibbles subtracted cause carry. */
-       if ((src&0xF) < 1)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else                    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_dec32(softx86_ctx* ctx,sx86_udword src)
-{
-       sx86_udword ret;
-
-/* peform the subtraction */
-       ret = src-1;
-
-/* apparently CF is not touched by this instruction */
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a - b = c, ((a AND 0Fh) - (b AND 0Fh) < 0).
-   in other words, if the lowest nibbles subtracted cause carry. */
-       if ((src&0xF) < 1)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else                    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_ubyte op_inc8(softx86_ctx* ctx,sx86_ubyte src)
-{
-       sx86_ubyte ret;
-
-/* peform the addition */
-       ret = src+1;
-
-/* apparently CF is not touched by this instruction */
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80) ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a + b = c, ((b AND 0Fh) + (a AND 0Fh) >= 0x10).
-   in other words, if the lowest nibbles added together overflow. */
-       if ((1+(src&0xF)) >= 0x10)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity8(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_uword op_inc16(softx86_ctx* ctx,sx86_uword src)
-{
-       sx86_uword ret;
-
-/* peform the addition */
-       ret = src+1;
-
-/* apparently CF is not touched by this instruction */
-
-/* if result treated as signed value is negative */
-       if (ret & 0x8000)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a + b = c, ((b AND 0Fh) + (a AND 0Fh) >= 0x10).
-   in other words, if the lowest nibbles added together overflow. */
-       if ((1+(src&0xF)) >= 0x10)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else                    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-sx86_udword op_inc32(softx86_ctx* ctx,sx86_udword src)
-{
-       sx86_udword ret;
-
-/* peform the addition */
-       ret = src+1;
-
-/* apparently CF is not touched by this instruction */
-
-/* if result treated as signed value is negative */
-       if (ret & 0x80000000)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_SIGN;
-       else
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_SIGN;
-
-/* if result is zero */
-       if (!ret)       ctx->state->reg_flags.val |=  SX86_CPUFLAG_ZERO;
-       else            ctx->state->reg_flags.val &= ~SX86_CPUFLAG_ZERO;
-
-/* auxiliary flag emulation (not defined by Intel's documentation, but observed
-   from many trials in DEBUG on an old Pentium Pro 166MHz I have kickin' around
-   as a web server :)
-   
-   apparently aux is set if:
-   given operation a + b = c, ((b AND 0Fh) + (a AND 0Fh) >= 0x10).
-   in other words, if the lowest nibbles added together overflow. */
-       if ((1+(src&0xF)) >= 0x10)
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_AUX;
-       else                    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_AUX;
-
-/* finally, compute parity for parity bit */
-       if (softx86_parity16(ret))
-               ctx->state->reg_flags.val |=  SX86_CPUFLAG_PARITY;
-       else    
-               ctx->state->reg_flags.val &= ~SX86_CPUFLAG_PARITY;
-
-       return ret;
-}
-
-int Sfx86OpcodeExec_inc(sx86_ubyte opcode,softx86_ctx* ctx)
-{
-       if ((opcode&0xF8) == 0x40) {                                    // INC [reg]
-               sx86_uword w,i;
-
-               i = opcode-0x40;
-               w = ctx->state->general_reg[i].w.lo;
-               ctx->state->general_reg[i].w.lo = op_inc16(ctx,w);
-               return 1;
-       }
-       else if ((opcode&0xF8) == 0x48) {                               // DEC [reg]
-               sx86_uword w,i;
-
-               i = opcode-0x48;
-               w = ctx->state->general_reg[i].w.lo;
-               ctx->state->general_reg[i].w.lo = op_dec16(ctx,w);
-               return 1;
-       }
-
-       return 0;
-}
-
-int Sfx86OpcodeDec_inc(sx86_ubyte opcode,softx86_ctx* ctx,char buf[128])
-{
-       if ((opcode&0xF8) == 0x40) {                                    // INC [reg]
-      &n