home *** CD-ROM | disk | FTP | other *** search
- .XLIST
- PAGE 58,132
- ;**
- ;
- ; This macro library defines the operating environment for the 8086 L
- ; memory model, which allows 1M bytes of data and 1M bytes of program.
- ;
- ;**
- MSDOS EQU 2
-
- ;**
- ;
- ; The following symbols define the 8086 memory mode being used. Set LPROG
- ; to 1 for a large program segment (greater than 64K-bytes), and set LDATA
- ; to 1 for a large data segment. Set COM to 1 to generate .COM files
- ; instead of .EXE files. Note that if COM is not zero, then LPROG and
- ; LDATA must be 0.
- ;
- ;**
- COM EQU 0
- LPROG EQU 1
- LDATA EQU 1
-
- ;**
- ;
- ; The following symbols are established via LPROG and LDATA as follows:
- ;
- ; S8086 set for small model (small prog, small data)
- ; D8086 set for model with large data, small prog
- ; P8086 set for model with large prog, small data
- ; L8086 set for large model
- ;
- ;**
- IF (LPROG EQ 0) AND (LDATA EQ 0)
- S8086 EQU 1
- D8086 EQU 0
- P8086 EQU 0
- L8086 EQU 0
- ENDIF
-
- IF (LPROG EQ 0) AND (LDATA NE 0)
- S8086 EQU 0
- D8086 EQU 1
- P8086 EQU 0
- L8086 EQU 0
- ENDIF
-
- IF (LPROG NE 0) AND (LDATA EQ 0)
- S8086 EQU 0
- D8086 EQU 0
- P8086 EQU 1
- L8086 EQU 0
- ENDIF
-
- IF (LPROG NE 0) AND (LDATA NE 0)
- S8086 EQU 0
- D8086 EQU 0
- P8086 EQU 0
- L8086 EQU 1
- ENDIF
-
-
- ;**
- ;
- ; The DSEG and PSEG macros are defined to generate the appropriate GROUP
- ; and SEGMENT statements for the memory model being used. The ENDDS and
- ; ENDPS macros are then used to end the segments.
- ;
- ;**
- DSEG MACRO
- DGROUP GROUP DATA
- DATA SEGMENT WORD PUBLIC 'DATA'
- ASSUME DS:DGROUP
- ENDM
- ENDDS MACRO
- DATA ENDS
- ENDM
-
- IF S8086
- PSEG MACRO
- PGROUP GROUP PROG
- PROG SEGMENT BYTE PUBLIC 'PROG'
- ASSUME CS:PGROUP
- ENDM
- ENDPS MACRO
- PROG ENDS
- ENDM
- ENDIF
-
- IF D8086
- PSEG MACRO
- CGROUP GROUP CODE
- CODE SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:CGROUP
- ENDM
- ENDPS MACRO
- CODE ENDS
- ENDM
- ENDIF
-
- IF P8086
- PSEG MACRO
- _CODE SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:_CODE
- ENDM
- ENDPS MACRO
- _CODE ENDS
- ENDM
- ENDIF
-
- IF L8086
- PSEG MACRO
- _PROG SEGMENT BYTE PUBLIC 'PROG'
- ASSUME CS:_PROG
- ENDM
- ENDPS MACRO
- _PROG ENDS
- ENDM
- ENDIF
-
- ;**
- ;
- ; The BEGIN and ENTRY macros establish appropriate function entry points
- ; depending on whether NEAR or FAR program addressing is being used. The
- ; only difference between the two is that BEGIN generates a PROC operation
- ; to start a segment.
- ;
- BEGIN MACRO NAME ; begin a function
- PUBLIC NAME
- IF LPROG
- NAME PROC FAR
- ELSE
- NAME PROC NEAR
- ENDIF
- ENDM
-
- ENTRY MACRO NAME
- PUBLIC NAME
- IF LPROG
- NAME LABEL FAR
- ELSE
- NAME LABEL NEAR
- ENDIF
- ENDM
-
- ;**
- ;
- ; The following symbols are defined to help set up a STRUC defining the
- ; stack frame:
- ;
- ; CPSIZE -> code pointer size (2 or 4)
- ; DPSIZE -> data pointer size (2 or 4)
- ;
- ; These wouldn't be necessary if it were possible to use macros or even
- ; conditionals within a STRUC.
- ;
- IF LPROG
- CPSIZE EQU 4
- ELSE
- CPSIZE EQU 2
- ENDIF
- IF LDATA
- DPSIZE EQU 4
- ELSE
- DPSIZE EQU 2
- ENDIF
-
- ;
- ; The SETX macro sets the symbol X to 4 if LPROG is 0 or to 6 otherwise.
- ; X can then be used to skip past the BP and return address save area
- ; in the stack frame when accessing the function arguments.
- ;
- SETX MACRO
- IF LPROG
- X EQU 6
- ELSE
- X EQU 4
- ENDIF
- ENDM
- .LIST
-