home *** CD-ROM | disk | FTP | other *** search
- ;*****************************************
- ;* TS HEADER - MODEL INDEPENDENCE MACROS *
- ;*****************************************
- ;* Copyright (C) TimeSlice, Inc 1986,87 *
- ;*****************************************
- ;
- ;
- MICROSOFT EQU 1
- l_data EQU 1
- l_prog EQU 1
- ;
- ifdef LATTICE
- include dos.mac
- endif
- ;
- ifdef MICROSOFT
- .xlist
-
- ?PLM= 0
- ?WIN= 0
-
- ifdef mem_M
- memM equ 1
- else
- memM equ 0
- endif
-
- ifdef mem_C
- memC equ 1
- else
- memC equ 0
- endif
-
- ifdef mem_L
- memL equ 1
- else
- memL equ 0
- endif
-
- ; ifdef mem_S
- ; memS equ 1
- ; else
- ; memS equ 0
- ; endif
-
- include cmacros.inc
- .list
- endif
- ;
- ;
- ;
- ifdef l_data
- ldata equ 1
- else
- ldata equ 0
- endif
- ;
- ifdef l_prog
- lprog equ 1
- else
- lprog equ 0
- endif
- ;
- ;
- ; Macro to define the beginning of the static DATA segment
- ;
- START_DATA MACRO
-
- ifdef MICROSOFT
- sBegin data
- assumes ds,data
- endif
-
- ifdef LATTICE
- dseg
- endif
-
- ENDM
-
-
-
- ;
- ; Macro to define the end of the static DATA segment
- ;
- END_DATA MACRO
- ifdef LATTICE
- endds
- endif
- ifdef MICROSOFT
- sEnd
- endif
- ENDM
-
-
-
-
- ;
- ; Macro to define the beginning of the code segment
- ;
- START_CODE MACRO
-
- ifdef LATTICE
- pseg
- endif
-
- ifdef MICROSOFT
- sBegin code
- assumes cs,code
- assumes ds,data
- endif
-
- ENDM
-
-
-
- ;
- ; Macro to define the end of the code segment
- ;
-
- END_CODE MACRO
-
- ifdef LATTICE
- endps
- endif
-
- ifdef MICROSOFT
- sEnd
- endif
- end
- ENDM
-
-
- ;
- ; Macro for declaring a routine external
- ;
- EXTERN_CODE MACRO R_NAME
-
- ifdef LATTICE
- if lprog
- extrn R_NAME:far
- else
- extrn R_NAME:near
- endif
- endif
-
- ifdef MICROSOFT
- if lprog
- extrn _&R_NAME:far
- else
- extrn _&R_NAME:near
- endif
- R_NAME EQU _&R_NAME
- endif
- ENDM
-
- ;
- ; Declare External Data
- ;
- EXTERN_PTR MACRO VAR_NAME, TYPE
- ifidn <type>,<d>
- if ldata
- ifdef MICROSOFT
- extrn _&VAR_NAME : dword
- endif
- ifdef LATTICE
- extrn VAR_NAME : dword
- endif
- else
- ifdef MICROSOFT
- extrn _&VAR_NAME : word
- endif
- ifdef LATTICE
- extrn VAR_NAME : word
- endif
- endif
- else
- if lprog
- ifdef MICROSOFT
- extrn _&VAR_NAME : dword
- endif
- ifdef LATTICE
- ifdef ldata
- extrn VAR_NAME : dword
- else
- extrn VAR_NAME : word
- endif
- endif
- else
- ifdef MICROSOFT
- extrn _&VAR_NAME : word
- endif
- ifdef LATTICE
- extrn VAR_NAME : word
- endif
- endif
- endif
- ifdef MICROSOFT
- VAR_NAME EQU _&VAR_NAME
- endif
- ENDM
-
-
- EXTERN_DATA MACRO VAR_NAME, TYPE
- ifdef MICROSOFT
- extrn _&VAR_NAME : type
- VAR_NAME EQU _&VAR_NAME
- endif
- ifdef LATTICE
- extrn VAR_NAME : type
- endif
- ENDM
-
-
- ;
- ; Macro for entering a routine
- ;
- ROUTINE MACRO R_NAME
-
- ifdef LATTICE
- public R_NAME
- if lprog
- R_NAME proc far
- else
- R_NAME proc near
- endif
- endif
-
- ifdef MICROSOFT
- public _&R_NAME
- if lprog
- _&R_NAME proc far
- else
- _&R_NAME proc near
- endif
- R_NAME EQU _&R_NAME
- endif
- ENDM
-
-
- ;
- ; Macro for entering a routine
- ;
- FUNCTION MACRO LOC, F_NAME
- ifdef LATTICE
- public F_NAME
- F_NAME proc LOC
- endif
-
- ifdef MICROSOFT
- public _&F_NAME
- _&F_NAME proc LOC
- endif
- ENDM
-
-
- ;
- ; Macro for exiting a routine
- ;
- RETURN MACRO R_NAME
-
- ifdef LATTICE
- ret
- R_NAME endp
- endif
-
- ifdef MICROSOFT
- ret
- _&R_NAME endp
- endif
- ENDM
- ;
- ;
- ;***
- ;* START_STRUCT
- ;***
- start_struct macro
- strcntr = 0
- endm
- ;
- ;***
- ;* END_STRUCT
- ;***
- end_struct macro member
- member = strcntr
- endm
- ;
- ;
- ;***
- ;* MRB
- ;***
- mbr macro member, type
- member = strcntr
- strcntr = strcntr + &type
- endm
- ;
- ;***
- ;* ALLOWED MEMBER TYPES
- ;***
- d_char equ 1
- d_int equ 2
- d_long equ 4
- if ldata
- d_ptr equ 4 ;data pointer
- else
- d_ptr equ 2
- endif
- if lprog
- d_ret equ 4 ;function return address
- else
- d_ret equ 2
- endif
- ;
- ifdef LATTICE
- if ldata
- f_ptr equ 4 ;function pointer
- else
- f_ptr equ 2
- endif
- endif
- ;
- ifdef MICROSOFT
- if lprog
- f_ptr equ 4 ;function pointer
- else
- f_ptr equ 2
- endif
- endif
- ;
- ;***
- ;* LOAD & STORE OPs
- ;***
- ldchar macro reg, addr
- mov reg, byte ptr addr
- endm
- ldint macro reg, addr
- mov reg, word ptr addr
- endm
- ldptr macro sg, rg, addr, type
- ifidn <type>,<c>
- if lprog
- l&sg rg, dword ptr addr
- else
- mov rg, word ptr addr
- push cs
- pop sg
- endif
- else
- if ldata
- l&sg rg, dword ptr addr
- else
- mov rg,dgroup
- mov sg,rg
- mov rg, word ptr addr
- endif
- endif
- endm
- stchar macro addr, reg
- mov byte ptr addr, reg
- endm
- stint macro addr, reg
- mov word ptr addr, reg
- endm
- stptrr macro addr, segval, offval
- mov word ptr addr.off, offval
- if ldata
- mov word ptr addr.sgt, segval
- endif
- endm
- stptra macro addr, loc
- mov word ptr addr.off, offset dgroup:loc
- if ldata
- mov word ptr addr.sgt, seg loc
- endif
- endm
- ;
- ;
- ;***
- ;* PUSH/POP SDI
- ;***
- push_sdi macro
- ifdef MICROSOFT
- push di
- push si
- endif
- endm
- pop_sdi macro
- ifdef MICROSOFT
- pop si
- pop di
- endif
- endm
- ;
- ;
- ;***
- ;* FNCALL
- ;***
- fncall macro fptr
- if lprog
- call dword ptr fptr
- else
- call fptr
- endif
- endm
- ;
- ;
- ;***
- ;* Definition of one unique stack base variable name
- ;***
- ifdef LATTICE
- if ldata
- else
- extern_data _base,word
- stk_base equ _base
- endif
- endif
- ifdef MICROSOFT
- extrn STKHQQ:word
- stk_base equ STKHQQ
- endif
- ifdef TURBOC
- if ldata
- extern_data __stklen,word
- stk_base equ __stklen
- else
- extern_data ___brklvl,word
- stk_base equ ___brklvl
- endif
- endif
- ;
- ;***
- ;* This macro defines stkset ONLY for Lattice large model
- ;* This model does not require maintenance of stk_base.
- ;***
- ifdef LATTICE
- if ldata
- stkset equ 1
- endif
- endif
- ;
- ;
-