; ******************************************************* ; * * ; * VERSION CONTROL EQUATES * ; * * ; ******************************************************* ; Boolean values FALSE EQU 0 TRUE EQU NOT FALSE ; Version equates IFDEF _Windows_ WindowsVersion EQU TRUE DPMIVersion EQU FALSE ELSE IFDEF _DPMI_ WindowsVersion EQU FALSE DPMIVersion EQU TRUE ELSE WindowsVersion EQU FALSE DPMIVersion EQU FALSE ENDIF ENDIF ; ******************************************************* ; * * ; * MACROS * ; * * ; ******************************************************* LOCALS @@ ; Public variable definition macro VAR MACRO Symbol,SType,Count PUBLIC Symbol Symbol LABEL SType IF Count DB SType * Count DUP(?) ENDIF ENDM ; Parameter definition macro ARG MACRO Symbol,SType,Count LOCAL Offset @AP = @AP + SType * Count Offset = @AP Symbol EQU (SType PTR [BP+@AF-Offset]) ENDM @AP = 0 @AF = 0 ; Local variables definition macro LOC MACRO Symbol,SType,Count LOCAL Offset @LP = @LP + SType * Count Offset = @LP Symbol EQU (SType PTR [BP+@LF-Offset]) ENDM @LP = 0 @LF = 0 ; Stack frame modifiers sfFar EQU 01H ;FAR frame sfMarkBP EQU 02H ;Make saved BP odd sfSaveDS EQU 04H ;Save DS at [BP-2] sfInitDS EQU 08H ;Init DS using SS ; Default stack frame type sfDefault = 0 ; Stack frame types IF WindowsVersion WINFAR EQU sfFar+sfMarkBP+sfSaveDS ELSE WINFAR EQU sfFar ENDIF ; Entry code generation macro ENTRY MACRO FrameType IFB @SF = sfDefault ELSE IFIDNI , @SF = 0 ELSE IFIDNI , @SF = sfFar ELSE @SF = FrameType ENDIF ENDIF ENDIF IF @SF AND sfMarkBP INC BP ENDIF PUSH BP MOV BP,SP IF @SF AND sfFar @AF = @AP + 6 ELSE @AF = @AP + 4 ENDIF IF @SF AND sfSaveDS PUSH DS @LF = -2 ELSE @LF = 0 ENDIF IF @LP SUB SP,@LP ENDIF IF @SF AND sfInitDS PUSH DS PUSH SS POP DS ENDIF ENDM ; Exit code generation macro EXIT MACRO ArgSize IF @SF AND sfInitDS POP DS ENDIF IF @LF - @LP MOV SP,BP ENDIF POP BP IF @SF AND sfMarkBP DEC BP ENDIF IFNB @AP = ArgSize ENDIF IF @SF AND sfFar RETF @AP ELSE RETN @AP ENDIF @AP = 0 @LP = 0 ENDM ; ******************************************************* ; * * ; * EQUATES * ; * * ; ******************************************************* ; 10-Byte record b0 EQU (BYTE PTR 0) b1 EQU (BYTE PTR 1) b2 EQU (BYTE PTR 2) b3 EQU (BYTE PTR 3) b4 EQU (BYTE PTR 4) b5 EQU (BYTE PTR 5) b6 EQU (BYTE PTR 6) b7 EQU (BYTE PTR 7) b8 EQU (BYTE PTR 8) b9 EQU (BYTE PTR 9) ; 5-Word record w0 EQU (WORD PTR 0) w2 EQU (WORD PTR 2) w4 EQU (WORD PTR 4) w6 EQU (WORD PTR 6) w8 EQU (WORD PTR 8) ; Pointer record ofs EQU (WORD PTR 0) seg EQU (WORD PTR 2) ; 8087 status word masks mIE EQU 0001H mDE EQU 0002H mZE EQU 0004H mOE EQU 0008H mUE EQU 0010H mPE EQU 0020H mC0 EQU 0100H mC1 EQU 0200H mC2 EQU 0400H mC3 EQU 4000H ; ASCII equates bell EQU 07H bs EQU 08H tab EQU 09H lf EQU 0AH cr EQU 0DH eof EQU 1AH esc EQU 1BH del EQU 7FH ; DOS interrupt vector number DOS EQU 21H ; DOS function codes dosSetDrive EQU 0EH dosGetDrive EQU 19H dosSetDTA EQU 1AH dosSetInt EQU 25H dosParse EQU 29H dosGetDate EQU 2AH dosSetDate EQU 2BH dosGetTime EQU 2CH dosSetTime EQU 2DH dosGetVersion EQU 30H dosGetInt EQU 35H dosCreateDir EQU 39H dosRemoveDir EQU 3AH dosSetDir EQU 3BH dosCreate EQU 3CH dosOpen EQU 3DH dosClose EQU 3EH dosRead EQU 3FH dosWrite EQU 40H dosDelete EQU 41H dosSeek EQU 42H dosAttrib EQU 43H dosIOCtl EQU 44H dosGetDir EQU 47H dosSetMem EQU 4AH dosExec EQU 4BH dosExit EQU 4CH dosGetExit EQU 4DH dosFindFirst EQU 4EH dosSetPSP EQU 50H dosGetPSP EQU 51H dosMakePSP EQU 55H dosRename EQU 56H dosFDate EQU 57H ; Program segment prefix variables pspMemTop EQU (WORD PTR 02H) pspFileTab EQU (BYTE PTR 18H) pspEnvSeg EQU (WORD PTR 2CH) pspFCB1 EQU (BYTE PTR 5CH) pspFCB2 EQU (BYTE PTR 6CH) pspCmdLine EQU (BYTE PTR 80H) ; Free-list memory record layout mNext EQU (DWORD PTR 0) mSize EQU (DWORD PTR 4) mRecSize EQU 8 ; File record layout fHandle EQU (WORD PTR 0) fMode EQU (WORD PTR 2) fBufSize EQU (WORD PTR 4) fPrivate EQU (WORD PTR 6) fBufPos EQU (WORD PTR 8) fBufEnd EQU (WORD PTR 10) fBufPtr EQU (DWORD PTR 12) fOpenProc EQU (DWORD PTR 16) fInOutProc EQU (DWORD PTR 20) fFlushProc EQU (DWORD PTR 24) fCloseProc EQU (DWORD PTR 28) fUserData EQU (BYTE PTR 32) fName EQU (BYTE PTR 48) fBuffer EQU (BYTE PTR 128) fRecSize EQU 256 ; fMode values fmClosed EQU 0D7B0H fmInput EQU 0D7B1H fmOutput EQU 0D7B2H fmInOut EQU 0D7B3H ; Overlay header record ovSignature EQU (WORD PTR 0) ovSaveReturn EQU (WORD PTR 2) ovFilePos EQU (WORD PTR 4) ovCodeSize EQU (WORD PTR 8) ovFixupSize EQU (WORD PTR 10) ovJumpCount EQU (WORD PTR 12) ovLink EQU (WORD PTR 14) ovSegment EQU (WORD PTR 16) ovRetryCount EQU (WORD PTR 18) ovNext EQU (WORD PTR 20) ovEmsPage EQU (WORD PTR 22) ovEmsOffset EQU (WORD PTR 24) ovUserData EQU (BYTE PTR 26) ovVectors EQU (BYTE PTR 32) ovRecSize EQU 32 ; Windows data segment variables pPtrCount EQU (WORD PTR DS:04H) pLocalHeap EQU (WORD PTR DS:06H) pAtomTable EQU (WORD PTR DS:08H) pStackTop EQU (WORD PTR DS:0AH) pStackBot EQU (WORD PTR DS:0CH) pStackMin EQU (WORD PTR DS:0EH) ; DPMI interrupt vector DPMI EQU 31H ; DPMI function codes dpmiGetDesc EQU 0000H ;Allocate descriptors dpmiFreeDesc EQU 0001H ;Free descriptor dpmiSegToDesc EQU 0002H ;Map segment to descriptor dpmiGetSelInc EQU 0003H ;Get selector increment value dpmiGetSegBase EQU 0006H ;Get segment base address dpmiSetSegBase EQU 0007H ;Set segment base address dpmiSetSegSize EQU 0008H ;Set segment size dpmiGetRealInt EQU 0200H ;Get real mode int handler dpmiSetRealInt EQU 0201H ;Set real mode int handler dpmiGetExcept EQU 0202H ;Get exception handler dpmiSetExcept EQU 0203H ;Set exception handler dpmiGetInt EQU 0204H ;Get interrupt handler dpmiSetInt EQU 0205H ;Set interrupt handler dpmiGetRMCB EQU 0303H ;Get real mode call-back dpmiGetVersion EQU 0400H ;Get version information ; Real mode call-back registers structure realDI EQU (DWORD PTR 00H) realSI EQU (DWORD PTR 04H) realBP EQU (DWORD PTR 08H) realBX EQU (DWORD PTR 10H) realDX EQU (DWORD PTR 14H) realCX EQU (DWORD PTR 18H) realAX EQU (DWORD PTR 1CH) realFlags EQU (WORD PTR 20H) realES EQU (WORD PTR 22H) realDS EQU (WORD PTR 24H) realFS EQU (WORD PTR 26H) realGS EQU (WORD PTR 28H) realIP EQU (WORD PTR 2AH) realCS EQU (WORD PTR 2CH) realSP EQU (WORD PTR 2EH) realSS EQU (WORD PTR 30H) realRegsSize EQU 32H