home *** CD-ROM | disk | FTP | other *** search
- ;-----------------------------------------------------------------
- ; asm.inc
- ; -------
- ; Standard macros for DPaint II MS-DOS ".asm" files.
- ;-----------------------------------------------------------------
-
- ;-----------------------------------------------------------------
- ; Memory model configuration.
- ;-----------------------------------------------------------------
-
- LPROG equ 1 ; 1 means large (>64k) program segment
- LDATA equ 0 ; 1 means large (>64k) data segment
-
- ;-----------------------------------------------------------------
- ; After a standard procedure entry (push bp, mov bp,sp), the first
- ; parm on the stack can be accessed at ARGB[bp].
- ;-----------------------------------------------------------------
-
- if LPROG
- ARGB equ 6
- else
- ARGB equ 4
- endif
-
- ;-----------------------------------------------------------------
- ; File header: sets up groups, segment names, etc.
- ;-----------------------------------------------------------------
-
- if LPROG
- HEADER macro module
- module&_TEXT segment word public 'CODE'
- module&_TEXT ends
- _DATA segment word public 'DATA'
- _DATA ends
- CONST segment word public 'CONST'
- CONST ends
- _BSS segment word public 'BSS'
- _BSS ends
- DGROUP group CONST, _BSS, _DATA
- assume cs:module&_TEXT, ds:DGROUP, ss:DGROUP, es:DGROUP
- endm
- else
- HEADER macro
- _TEXT segment word public 'CODE'
- _TEXT ends
- CONST segment word public 'CONST'
- CONST ends
- _BSS segment word public 'BSS'
- _BSS ends
- _DATA segment word public 'DATA'
- _DATA ends
- DGROUP group CONST, _BSS, _DATA
- assume cs:_TEXT, ds:DGROUP, ss:DGROUP, es:DGROUP
- endm
- endif
-
- ;-----------------------------------------------------------------
- ; Data segment start & end.
- ;-----------------------------------------------------------------
-
- DSEG macro
- _DATA segment
- endm
-
- ;-----------------------------------------------------------------
-
- ENDDS macro
- _DATA ends
- endm
-
- ;-----------------------------------------------------------------
- ; Program segment start & end.
- ;-----------------------------------------------------------------
-
- if LPROG
- PSEG macro module
- module&_TEXT segment
- endm
- else
- PSEG macro
- _TEXT segment
- endm
- endif
-
- ;-----------------------------------------------------------------
-
- if LPROG
- ENDPS macro module
- module&_TEXT ends
- endm
- else
- ENDPS macro module
- _TEXT ends
- endm
- endif
-
- ;-----------------------------------------------------------------
- ; Procedure start & end.
- ;-----------------------------------------------------------------
-
- STARTPROC macro proc_name
- if LPROG
- proc_name proc far
- else
- proc_name proc near
- endif
- endm
-
- ;--- start a procedure and declare it public ---
- STARTPROC_PUBLIC macro name
- public name
- if LPROG
- name proc far
- else
- name proc near
- endif
- endm
-
- ;-----------------------------------------------------------------
-
- ENDPROC macro proc_name
- proc_name endp
- endm
-
- ;-----------------------------------------------------------------
- ; When the 80286 is in real mode, the POPF instruction may recognize
- ; a pending maskable interrupt even if interrupts were off before the
- ; corresponding PUSHF. This macro should be used instead of POPF.
- ; See "IBM Personal Computer Seminar Proceedings" v2, #4 (September '84)
- ; for info about the POPF bug.
- ;-----------------------------------------------------------------
-
- popflags macro
- jmp $+3 ; jump around IRET
- iret ; pop CS, IP, and flags
- push cs
- call $-2 ; call within segment
- endm
-
- ;-----------------------------------------------------------------
- ; Offsets to low byte & high byte of a word.
- ;-----------------------------------------------------------------
- LO = 0
- HI = 1
-
- ;-----------------------------------------------------------------
- ; --- miscellaneous constants
-
- TRUE equ 1
- FALSE equ 0
-