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)