Files
TeslaRel410/BORLAND/BC45/SOURCE/RTL/RTLINC/COMMON16/EMUVARS.ASI
T
CydandClaude Fable 5 63312e07f9 source410: literal 4.10 source reconstruction + BC++ 4.52 fleet toolchain archived
- BORLAND/: Borland C++ 4.52 (chosen over 4.5 by byte-match: CODE/RP/CW32.LIB
  is identical to 4.52's install lib). BCC32/TLINK32/TLIB/MAKE run natively on
  Win11; CODE/BT/OPT.MAK is the shipped BTL4OPT.EXE's exact flag recipe
  (extender = Borland PowerPack DPMI32, not Phar Lap TNT).
- restoration/source410/: the literal 1995-form reconstruction of the missing
  BT game source (never mixed into CODE/). Round 1-3 state:
  * 6 of 10 surviving original TUs COMPILE CLEAN under the period toolchain
    (BTMSSN, BTCNSL, BTSCNRL, BTTEAM, BTL4MODE, BTL4ARND) - first builds
    since 1996.
  * BT_L4/BTL4APP.CPP pilot reconstruction: 12/12 functions, Fail() lands on
    its binary-recorded line 400 exactly.
  * BT/BTCNSL.HPP: console wire IDs recovered from the binary's ctors
    (Killed=9, Damaged=10, ScoreUpdate=13, DeathWithoutHonor=15 [T1];
    TeamScore=12 flagged [T4]).
  * MUNGA/: 8 engine-header backfills back-dated from the BT412 WinTesla tree
    (VDATA numbering decomp-verified; AUDREND's OpenAL-era virtual removed -
    the period compiler is the drift detector).
  * Tooling: backdate.py (WinTesla->1995 header transform), compile410.sh
    (per-TU verification sweep under authentic OPT.MAK flags).
  * README: corrected roadmap - MECH.HPP is the capstone grown with the mech
    TU reconstructions; BTREG.CPP green = the header-family milestone.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 07:33:26 -05:00

236 lines
8.0 KiB
Plaintext

;[]-----------------------------------------------------------------[]
;| EMUVARS.ASI -- emulator variables for assembler |
;[]-----------------------------------------------------------------[]
;
; C/C++ Run Time Library - Version 6.5
;
; Copyright (c) 1986, 1994 by Borland International
; All Rights Reserved.
;
; This file is designed to be included both by the start-up
; module (C0.asm, for C) and by the emulator. The data is
; actually allocated in startup, and externally referenced
; from the emulator.
ifdef Internal
;Anders Modified for Turbo Pascal using _Pascal_ conditional. 15 Apr 88
;Roger Data initialization moved to emulator FINIT code. 13 Jul 88
; Added Safety Stamp so debugger can detect emulator.
;Tanj Added emws_stackStyle, emws_unsigned, indirect 11 Sep 88
; shortcuts-88
;Tanj Added _TestaRossa_ evaluator stack 16 Sep 88
;Tanj Changed EmuAssume for TR 03 Jan 89
;Roger variables put in __emu struct 25 Mar 89
;Roger remove data declarations 26 Apr 89
;Roger edited ASSUME for __emu 05 May 89
;Roger added protected mode flag 21 Jun 89
;Roger removed Testarossa ifdef, added Quattro3 deep stack 28 Mar 90
endif ; Internal
; The Use of Interrupt Vectors
; There are 11 interrupt vectors. The first 8 map onto the 8 floating
; point instruction patterns:
; {WAIT ESC n } --> INT (34h + n), where n is in (0..7)
; No segment prefixes may apply to these patterns.
; The ninth interrupt provides instructions with segment prefixes:
; {WAIT ES: ESC n } --> INT (3Ch), byte (C0h + n)
; {WAIT CS: ESC n } --> INT (3Ch), byte (80h + n)
; {WAIT SS: ESC n } --> INT (3Ch), byte (40h + n)
; {WAIT DS: ESC n } --> INT (3Ch), byte (00h + n)
; The tenth interrupt corresponds to the sequence NOP, FWAIT, and
; is a no-op for emulation purposes.
; The eleventh interrupt provides Borland-defined shortcuts.
; Data space is actually allocated in the stack segment by C0.asm,
; the start-up module, and accessed by the emulator via externs.
; It is initialized during the first emulated FINIT instruction.
EmuAssume@ MACRO aSeg
ASSUME aSeg : SEG __emu
ENDM
EmuNothing@ MACRO aSeg
ASSUME aSeg : NOTHING
ENDM
; See EMUVARS.H for C equivalents of these declarations.
; An iNDP_image is put into memory by the FSTENV instruction.
iNDP_environ STRUC
ndp_control dw ?
ndp_status dw ?
ndp_tags dw ?
ndp_ip dw ?
ndp_ip_opcode dw ?
ndp_dp dw ?
ndp_dptop dw ?
iNDP_environ ENDS
fpu struc
; The 80x87 present shortcuts use ws_status too.
ws_status dw ? ; result of comparisons
; Variables used by emulator and '87 trap handler.
; used for shadow mask if '87 present
ws_control dw ? ; processing options and exceptions.
; used by trap handler if '87 present
ws_adjust dw ? ; adjusts TOS at exit
ws_8087 db ? ; same as _8087
ws_protected dw ? ; same as _protected
ws_type dw ? ; type of error, if fatal
;if UseLDT ; Used even if UseLDT not on! (XOR)
ws_LDT dw ? ; same as _LDT
;endif
; The stack.
ws_TOS dw ? ; current level of e87 register stack
ws_lastSP dw ? ; low end of stack
ws_initSP dw ? ; high end of stack
; Variables used by '87 trap handler.
environ iNDP_environ <>
ecount1 dw ?
ecount2 dw ?
ws_status2 dw ?
fpx1 dt ?
fpsword dw ?
; The remaining data areas are not needed if an 87 chip is present.
;ws_fixSeg dw ? ; selector implied by segFix
ws_BPsafe dw ? ; keep BP --> userRegs here for safety.
ws_stamp dd ? ; after initialization, 'emu', 87h
ws_version dw ? ; 1 for TC2,TP5,Q2; 2 for TB2; 3 for TC3,TP6
ws_stackStyle db ? ; shortcuts-88 stack frame style
ws_unsigned db ? ; allows handling unsigned integers
IF _Strict87_
ws_instrnPtr dd ? ; used with error recovery
ws_dataPtr dd ? ; --------- " ------------
ws_instruction dw ? ; bytes swapped, used for error recovery
ENDIF
; The vector save areas are overlayed by "emws_temp32" and
; "emws_MBZ32" for shortcuts when the 80x87 is present.
; These two MUST be contiguous.
ws_saveVector dd ? ; prior contents of NMI vector
ws_nmiVector dd ? ; PC/AT error vector for 80x87 exceptions
; Indirect Shortcuts-88 entry table. Maintain exact match to
; the order in emuShtCt.asm and e87ShtCt.asm.
IF _shortcuts88_
__isc88table label DWORD
__ifp_ldxds dd ?
__ifp_ldxss dd ?
__ifp_ldxes dd ?
__ifp_ldxcs dd ?
__ifp_lddds dd ?
__ifp_lddes dd ?
__ifp_lddss dd ?
__ifp_ldint dd ?
__ifp_lduint dd ?
__ifp_ldlng1 dd ?
__ifp_ldulng1 dd ?
__ifp_lds1 dd ?
__ifp_ldz dd ?
__ifp_ld1 dd ?
__ifp_ldpi dd ?
__ifp_stps dd ?
__ifp_stplng dd ?
__ifp_stpuln dd ?
__ifp_stpuint dd ?
__ifp_stpint dd ?
__ifp_stpdes dd ?
__ifp_stpdds dd ?
__ifp_stpdss dd ?
__ifp_stpxes dd ?
__ifp_stpxds dd ?
__ifp_stpxss dd ?
__ifp_ldcw dd ?
__ifp_error dd ?
__ifp_neg dd ?
__ifp_divrv dd ?
__ifp_subrv dd ?
__ifp_sub dd ?
__ifp_mul dd ?
__ifp_div dd ?
__ifp_add dd ?
__ifp_sqr dd ?
__ifp_rndint dd ?
__ifp_sin dd ?
__ifp_cos dd ?
__ifp_tan dd ?
__ifp_atan dd ?
__ifp_log dd ?
__ifp_log2 dd ?
__ifp_log10 dd ?
__ifp_exp dd ?
__ifp_exp2 dd ?
__ifp_exp10 dd ?
__ifp_cmp dd ?
__ifp_tst dd ?
__ifp_push dd ?
__ifp_pop dd ?
__ifp_subds dd ?
__ifp_subes dd ?
__ifp_subss dd ?
__ifp_mulds dd ?
__ifp_mules dd ?
__ifp_mulss dd ?
__ifp_divds dd ?
__ifp_dives dd ?
__ifp_divss dd ?
__ifp_addds dd ?
__ifp_addes dd ?
__ifp_addss dd ?
__ifp_divrvds dd ?
__ifp_divrves dd ?
__ifp_divrvss dd ?
__ifp_subrvds dd ?
__ifp_subrves dd ?
__ifp_subrvss dd ?
IF _TBasic_
__ifp_ldlng2 dd ?
__ifp_ldulng2 dd ?
__ifp_lds2 dd ?
ENDIF
ENDIF ; _shortcuts88_
fpu ends
; size of emu_temp
size_emu_temp equ 12
; The minimum size for the emulator stack.
; Seems like overkill, but QPro 1.0 used 128.
if Quattro3
MinFpStack equ (128 * size_emu_temp)
else
MinFpStack equ (17 * size_emu_temp)
endif