home *** CD-ROM | disk | FTP | other *** search
- .XLIST
- PAGE 58,132
-
- ; File that supports LATTICE macros But generates Microsoft C
- ; segments or variables memX variable is declared in version.inc
-
-
-
- IFDEF memS
- LDATA EQU 0
- LPROG EQU 0
- ENDIF
- IFDEF memM
- LDATA EQU 0
- LPROG EQU 1
- ENDIF
- IFDEF memC
- LDATA EQU 1
- LPROG EQU 0
- ENDIF
- IFDEF memL
- LDATA EQU 1
- LPROG EQU 1
- ENDIF
- IFDEF memH
- LDATA EQU 1
- LPROG EQU 1
- ENDIF
-
-
- ;**
- ;
- ; 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, SS:DGROUP
- ENDM
- ENDDS MACRO
- _DATA ENDS
- ENDM
-
-
- PSEG MACRO modname
-
- IF LPROG
- modname&_TEXT SEGMENT WORD PUBLIC 'CODE'
- ASSUME CS:modname&_TEXT
- ELSE
- _TEXT SEGMENT WORD PUBLIC 'CODE'
- ASSUME CS:_TEXT
- ENDIF
- ENDM
-
- ENDPS MACRO modname
- IF LPROG
- modname&_TEXT ENDS
- ELSE
- _TEXT ENDS
- ENDIF
- ENDM
-
-
- ;**
- ;
- ; 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
-
-
- penter MACRO dyns ; used when we enter a procedure
- push BP ; save context register
- IF dyns NE 0
- sub SP, dyns ; local variables on stack
- ENDIF
- mov BP, SP ;
- push DI ; for register variables (MICROSOFT 'C' 3.0)
- push SI ;
- ENDM ;
-
- pleave MACRO dyns ; used when we leave a procedure
- pop SI ;
- pop DI ;
- IF dyns NE 0
- add SP, dyns ;
- ENDIF
- pop BP ;
- ret ;
- ENDM ;
-
-
- .LIST