You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
385 lines
12 KiB
385 lines
12 KiB
subttl emulator.hst - Emulator history.
|
|
;***
|
|
;emulator.hst - Emulator history.
|
|
;
|
|
; Copyright (c) 1984-89, Microsoft Corporation
|
|
;
|
|
;Purpose:
|
|
; Contains history comments for emulator.
|
|
;
|
|
;
|
|
; Bob Wallace, Microsoft, July 1982
|
|
; John Pollock, Microsoft, August 1982
|
|
; Marlin Eller, Microsoft, December 1982
|
|
; Greg Whitten, Microsoft, February 1984
|
|
; Brad Verheiden, Microsoft, March 1984
|
|
; Jamie Bariteau, Microsoft, September 1985
|
|
; Barry McCord, Microsoft, October 1986
|
|
;
|
|
;
|
|
; Revision History
|
|
;
|
|
; 02/07/84 Greg Whitten
|
|
; new stand-alone version (major restructuring)
|
|
; split up into small include files
|
|
;
|
|
; 02/17/84 Brad Verheiden
|
|
; put transcendentals in same object file
|
|
; fixed bug which always masked unemulated instruction
|
|
;
|
|
; 02/24/84 Greg Whitten
|
|
; PASCAL naming convention is being slowly removed
|
|
; adding initialization/termination code
|
|
; code complete for initial standalone emulator
|
|
;
|
|
; 03/14/84 Greg Whitten
|
|
; added a special truncate to 32-bit integer routine
|
|
;
|
|
; 03/15/84 Greg Whitten
|
|
; fixed bug in FCOM ( cmpsw => cmpsb )
|
|
;
|
|
; 03/19/84 Greg Whitten
|
|
; added code for all segment overrides
|
|
;
|
|
; 03/29/84 Greg Whitten
|
|
; fixed segment override bug
|
|
;
|
|
; 04/05/84 Greg Whitten
|
|
; removed fast SP code
|
|
;
|
|
; 04/09/84 Brad Verheiden
|
|
; added 8087 support
|
|
;
|
|
; 05/23/84 Brad Verheiden
|
|
; Added code to save SI in ProcessOverUnderflow
|
|
;
|
|
; 08/18/84 Greg Whitten
|
|
; REEXECUTE stored the status word when DS was invalid
|
|
; if reexecuting a memory operand
|
|
; Terminate8087 bad if original INT 2 vector was 0
|
|
; Changed call to fpsignal routine - now registers
|
|
; except for AX are good. al = error code
|
|
;
|
|
; 08/23/84 Greg Whitten
|
|
; corrected COMPSIDI (COMPcsSIDI)
|
|
; affects routines using log and atan's
|
|
;
|
|
; 08/25/84 Greg Whitten
|
|
; fixed bug with handling of denormals - not reloading
|
|
; zero from the correct address
|
|
;
|
|
; 10/28/84 Greg Whitten
|
|
; added environment segment to initialization for NO87
|
|
; added code to save and restore interrupt vectors
|
|
; 8087 only version
|
|
;
|
|
; 01/30/85 Greg Whitten
|
|
; added OEM version check for automatic setup for 8087
|
|
; this is not necessarily reliable
|
|
;
|
|
; 02/07/85 Greg Whitten
|
|
; split OEM customization out into separate module
|
|
; save and restore old interrupt vector values
|
|
;
|
|
; release C 3.00 and FORTRAN/Pascal 3.30
|
|
;
|
|
; 03/29/85 Greg Whitten
|
|
; changed emulated FWAIT fixups to mov ax,ax
|
|
; changed real 287 FWAIT on numeric instructions to NOPs
|
|
;
|
|
; release IBM C 1.0
|
|
;
|
|
; 08/13/85 Greg Whitten
|
|
; changed fpmath trunc routines to check for errors
|
|
;
|
|
; 08/22/85 Greg Whitten
|
|
; added PUB/GLB macros to define public symbols
|
|
; for debugging
|
|
;
|
|
; 08/22/85 Greg Whitten
|
|
; corrected a bug in denormalizing result with
|
|
; zero mantissa and non-zero exponent
|
|
; changed to zero exponent if mantissa is zero
|
|
;
|
|
; release FORTRAN/Pascal 3.31
|
|
;
|
|
; 09/02/85 Greg Whitten
|
|
; completed adding PUB/GLB macros to define
|
|
; public symbols for debugging
|
|
;
|
|
; 09/09/85 Greg Whitten
|
|
; changed denormal exception handler for
|
|
; faster normalization algorithm using 8087
|
|
; FDIV[R] denormal memory operand
|
|
;
|
|
; 09/13/85 Jamie Bariteau
|
|
; added comments to invalid processing in emexcept.asm
|
|
; fixed bug in constant instruction decoding in emexcept
|
|
; (stand-alone version only)
|
|
;
|
|
; 09/30/85 Jamie Bariteau
|
|
; start of C and FORTRAN 4.0 changes
|
|
; emulator.asm:
|
|
; changed memory temp REG8087ST2 to REG8087ST0
|
|
; since ST(2) is no longer saved to memory but
|
|
; ST(0) is.
|
|
; emexcept.asm:
|
|
; rewrote invalid exception handling to deal with
|
|
; new stack overflow/underflow model
|
|
;
|
|
; 10/30/85 Greg Whitten
|
|
; 11/03/85 more C and FORTRAN 4.0 changes
|
|
; embedded version information for debugger
|
|
; reordered data area
|
|
; deleted unused data items
|
|
; added UserStatusWord for status reporting
|
|
; added __fpmath call for returning status
|
|
; changed denormal handler so precision is not lost
|
|
; on FMUL denormal
|
|
;
|
|
; 11/18/85 Jamie Bariteau
|
|
; more C and Fortran 4.0 changes
|
|
; emulated new set of arithmetic register instructions:
|
|
; f<op> ST,ST(x)
|
|
; f<op> ST(x),ST
|
|
; f<op>p ST,ST(x)
|
|
;
|
|
; 11/19/85 Greg Whitten
|
|
; (hack) change temp real denormals into 0 in normalize
|
|
; some temp real denormals will not be caught
|
|
;
|
|
; 02/11/86 Greg Whitten
|
|
; changed around some conditionals and removed unused
|
|
; conditionals (MSDOS and XENIX)
|
|
;
|
|
; 02/11/86 Greg Whitten
|
|
; created frontend -only version of emulator
|
|
; assumes no 8087 and limited instructions
|
|
; (no transcendentals)
|
|
;
|
|
; 02/12/86 Greg Whitten
|
|
; corrected bug in exception handler with user status
|
|
;
|
|
; 03/20/86 Greg Whitten
|
|
; fixed special arithmetic returns to use RESULT
|
|
;
|
|
; Version 4.00C 4.0
|
|
;
|
|
; 07/15/86 Greg Whitten
|
|
; added dual DOS 5.0 and DOS 3.x support
|
|
; added standalone and DOS 5 conditionals
|
|
;
|
|
; 09/25/86 Greg Whitten
|
|
; added FCOM denormal exception support
|
|
; added pseudo-zero checking to denormal exceptions
|
|
;
|
|
; 10/14/86 Greg Whitten
|
|
; 386 version of the emulator for XENIX
|
|
; added XENIX and i386 conditionals
|
|
;
|
|
; 10/09/86 Jamie Bariteau
|
|
; Changed initialization of LIMstk to allow
|
|
; more space between the end of the emulator
|
|
; stack and DGROUP. The emulator was trashing
|
|
; DS:0 before aborting with fp stack overflow.
|
|
;
|
|
; 10/15/86 Barry McCord
|
|
; fixed no87= message to use DOSWRITE for
|
|
; the DOS3/5 version of the emulator
|
|
;
|
|
; 01/02/87 Barry McCord
|
|
; added FPREM emulation into the DOS3/5 version
|
|
; of the emulator
|
|
;
|
|
; 02/12/87 Barry McCord
|
|
; changed coprocessor detection mask in
|
|
; EMINIT.ASM from 1F3Fh to 0F3Fh to allow
|
|
; for A1 stepping of 80387, in which bit
|
|
; 1000h of the control word remains high.
|
|
;
|
|
; 03/03/87 Greg Whitten
|
|
; added QB3 support (special hacked emulator)
|
|
;
|
|
; 04/01/87 Greg Whitten
|
|
; merged sources for OS/2 and XENIX emulators
|
|
; minor cleanup
|
|
; - removed PCDOS switch
|
|
;
|
|
; Version 5.00
|
|
;
|
|
; 04/09/87 Barry McCord
|
|
; added WINDOWS switch for Windows 2.00 support
|
|
;
|
|
; 05/01/87 Jamie Bariteau
|
|
; moved FPREM data from emfprem.asm to emulator.asm
|
|
; so that fptaskdata marks the end of the data area
|
|
;
|
|
; 05/04/87 Barry McCord
|
|
; changed DOSWRITE to __DOSWRITE, etc.
|
|
; for the DOS 3/5 emulator
|
|
;
|
|
; 05/05/87 Greg Whitten
|
|
; XENIX 286/386 cleanup
|
|
;
|
|
; 05/14/87 Barry McCord
|
|
; added exception handling support to "quiet"
|
|
; the Invalid exception generated by fld (short/long
|
|
; real operand) of an SNaN (only matters for 80387);
|
|
; this was so that the compiler can do FLDs without
|
|
; being concerned whether the (possibly stack-based)
|
|
; floating-point variable has been initialized.
|
|
;
|
|
; 06/19/87 Barry McCord
|
|
; Windows 2.00 support ready for Windows SDK Beta 1
|
|
;
|
|
; 06/24/87 Barry McCord
|
|
; Bug fix (BCP #1767) for FORTRAN 4.01.
|
|
; Exception handler wasn't loading ST(1) from
|
|
; memory when ST(0) was full but ST(1) was not
|
|
; (for instructions taking 2 stack operands).
|
|
;
|
|
; 08/24/87 Barry McCord
|
|
; Added emulation of fild qword ptr
|
|
; and fistp qword ptr for the purpose of supporting
|
|
; unsigned-long-to-float and float-to-unsigned-long
|
|
; conversions for C 5.00.
|
|
;
|
|
; release C 5.00 / QuickC 1.00 / QuickBASIC 4.00
|
|
; 10/19/87
|
|
;
|
|
; Version 5.10
|
|
;
|
|
; 11/07/87 Greg Whitten
|
|
; added PCDOS (ifdef-style) switch back in for IBM Japan
|
|
; added polling-style interrupt handler to eliminate
|
|
; interrupt problem in real mode
|
|
;
|
|
; 11/11/87 Barry McCord
|
|
; Corrected FORTRAN bug fix (06/24/87 above)
|
|
; by changing a JMP instruction in emexcept.asm.
|
|
; Corrected DOS5only initialization in emdos.asm;
|
|
; missing JMP caused CW not to be initialized.
|
|
;
|
|
; 11/12/87 Barry McCord
|
|
; Added OS/2 support for a reentrant/dynalinkable
|
|
; run-time (IBM/Dallas model). Used DOSALLOCSEG
|
|
; to allocate per-thread emulator data areas. The
|
|
; segment selectors are stored in an array and indexed
|
|
; by thread ID.
|
|
;
|
|
; 12/08/87 Greg Whitten
|
|
; put new exception handling code under POLLING switch
|
|
;
|
|
; 01/11/88 Barry McCord
|
|
; eliminated assembler error in i386 version
|
|
; of emfrndi.asm
|
|
;
|
|
; 01/21/88 Barry McCord
|
|
; replaced QB4 switch with _NOSTKEXCHLR, since
|
|
; QB4 updates no longer use the switch
|
|
;
|
|
; 03/16/89 WAJ
|
|
; Fixed bug in emt.lib/87t.lib. __fpsignal was being
|
|
; called with the wrong value.
|
|
;
|
|
; 03/24/89 WAJ
|
|
; Fixed bug in emmt.lib/87mt.lib. In emerror.asm, the
|
|
; address of user's FP signal handler was not being
|
|
; removed from stack.
|
|
;
|
|
; 03/26/89 WAJ
|
|
; Added ifdefs for the SMALL_EMULATOR for BASIC
|
|
;
|
|
; 04/02/89 WAJ
|
|
; Added special emmtsql version that will let SQL
|
|
; switch stacks with emmt.lib.
|
|
;
|
|
; 04/06/89 WAJ
|
|
; Updated win87em.exe
|
|
;
|
|
; 04/07/89 WAJ
|
|
; Moved history from emulator.asm into emulator.hst
|
|
; Moved some macros into emulator.inc
|
|
;
|
|
;
|
|
; 04/09/89 WAJ
|
|
; Added standard header file to most of the emulator files.
|
|
; Added ProfBegin and ProfEnd macros for profiling.
|
|
;
|
|
; 04/10/89 WAJ
|
|
; Added code to emerror.asm and emfixfly.asm to handle EMS
|
|
; segments in ds under Windows when calling the user's floating
|
|
; point excpetion handler.
|
|
;
|
|
; 04/12/89 WAJ Added NOPs to ProfBegin and ProfEnd
|
|
;
|
|
; 04/12/89 WAJ Polling emulator now uses a "retf 2" instead of "iret"
|
|
;
|
|
; 04/27/89 WAJ Made several changes to Windows emulator to support
|
|
; protected Win386. Removed all writes into code segments.
|
|
;
|
|
; 04/28/89 WAJ Added RESIDENTNAME to win87em.def.
|
|
;
|
|
; 04/30/89 WAJ Added several "even" statements to emarith.asm
|
|
;
|
|
; 05/02/89 WAJ Added instruction look ahead and several minor spead ups.
|
|
;
|
|
; 05/12/89 WAJ Added sti to "retf 2" in Windows emulator.
|
|
;
|
|
; 05/16/89 WAJ Fixed bug in look ahead code (emmain.asm). Segment override
|
|
; followed by bp address would use the wrong segment.
|
|
;
|
|
; 05/39/89 WAJ Now includes cmacros.inc. Just used for segments at the
|
|
; moment.
|
|
;
|
|
; 05/39/89 WAJ Added emqp.lib for Quick Pascal to build.
|
|
;
|
|
; 06/05/89 WAJ Fixed bug in BIGNAN (in emarith.asm). Wasn't returning
|
|
; NAN with biggest mantissa.
|
|
;
|
|
; 06/06/89 WAJ "fldz" was not giving the same results as "fld [zero]"
|
|
;
|
|
; 06/12/89 WAJ Changed AllExceptionsHandled in emexcept.asm so that user
|
|
; can mask invalid exceptions.
|
|
;
|
|
; 06/20/89 WAJ win87em.exe is now marked as a Windows 3.0 exe.
|
|
; win87em2.exe is the Windows 2.0 version. win87em.def is
|
|
; now used just to make the win87em.lib implib.
|
|
;
|
|
; 06/02/89 WAJ win87em.exe's version number is now 6.00.03
|
|
;
|
|
; 06/28/89 WAJ Added save/restore to emwin.asm for win87em.exe. Also,
|
|
; added the file win87em.h.
|
|
;
|
|
; 07/05/89 WAJ Removed fixup externals from QuickPascal emulator.
|
|
;
|
|
; 07/18/89 WAJ Added __fpemulatorbegin and __fpemulatorend labels.
|
|
;
|
|
; 08/01/89 WAJ Added check for reg, reg operation to ProcessDenormal in
|
|
; emexcept.asm
|
|
;
|
|
; 09/06/89 WAJ Fixed bug in emfmul.asm. Needed "xor ebp, ebp" after PROD2.
|
|
;
|
|
; 09/21/89 WAJ Started merging in 386 version.
|
|
;
|
|
; 01/22/90 WAJ win87em.dll now check __WINFLAGS to remove STI if pmode.
|
|
; 01/22/90 WAJ win87em.dll version numbers is incremented to 6.00.04.
|
|
;
|
|
; 02/02/90 WAJ Changed "retf 2" in win87em.dll into iret.
|
|
; 02/02/90 WAJ win87em.dll version numbers is incremented to 6.00.05.
|
|
;
|
|
; 02/02/90 WAJ In win87em.dll, skips sti if WF_PMODE and WF_WIN386.
|
|
; 02/02/90 WAJ win87em.dll version numbers is incremented to 6.00.06.
|
|
; 04/06/90 WAJ Fixed win87em.dll exception problems. Version 6.00.07.
|
|
; 04/10/90 WAJ Added fsetpm to init. Added "out f0, 0". Version 6.00.08.
|
|
; 04/11/90 WAJ Win exception handler could set ES=0. Added NUL_JMP.
|
|
; Version 6.00.09.
|
|
; 04/12/90 WAJ Win87em.dll now inits chip for each app. Now uses INT 11h.
|
|
; Version 6.00.10
|
|
; 04/17/90 WAJ Win87em.dll now uses protexception for 286/287 PS/2'ss.
|
|
; Version 6.00.11
|
|
; 05/14/92 JWM Added DonC's WINFAST code; changes to emulator.asm, emerror.asm
|
|
; emfixfly.asm, emwin.asm; also added fwait to "reset" in
|
|
; emwin.asm, to fix 80387 bug.
|
|
;
|
|
;*******************************************************************************
|