📄 rxdosmac.asm
字号:
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Macro Definitions ;
;...............................................................;
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Real Time Dos Macro Include File ;
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; ;
; Macro include file. ;
; ;
; ;
; (c) Copyright 1990, 1997. Api Software and Mike Podanoffsky ;
; All Rights Reserved Worldwide. ;
; ;
; This product is protected under copyright laws and may not ;
; be reproduced in whole or in part, in any form or media, ;
; included but not limited to source listing, facsimile, data ;
; transmission, cd-rom, or floppy disk without the expressed ;
; written consent of the author. ;
; ;
; License for distribution for commercial use or resale ;
; required from: ;
; ;
; Api Software ;
; 12 South Walker Street ;
; Lowell, MA 01851 ;
; ;
; internet: mikep@world.std.com ;
; ;
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; Compile with MASM 5.1 ;
;...............................................................;
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Macros ;
;...............................................................;
zero equ 0
one equ 1
two equ 2
minusOne equ -1
null equ 0
NO equ 0
YES equ 1
_OFF equ 0
_ON equ 1
FALSE equ 0
TRUE equ 1
__pointer equ 0
__segment equ 2
_pointer equ __pointer
_segment equ __segment
_LOW equ _pointer
_HIGH equ _segment
PARAGRAPH equ 16
quote equ "'"
singleQuote equ "'"
doubleQuote equ '"'
openBracket equ '['
closeBracket equ ']'
comma equ ','
period equ '.'
colon equ ':'
semicolon equ ';'
asterisk equ '*'
questionMark equ '?'
ControlC equ 'C' - 40h
ControlI equ 'I' - 40h
ControlJ equ 'J' - 40h
ControlM equ 'M' - 40h
ControlQ equ 'Q' - 40h
ControlS equ 'S' - 40h
ControlZ equ 'Z' - 40h
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Caller's Stack Frame ;
;...............................................................;
_Flags equ 6
_CS equ 4
_IP equ 2
_ExtraSegment equ 0
_DataSegment equ -2
_BP equ -4
_DI equ -6
_SI equ -8
_DX equ -10
_CX equ -12
_BX equ -14
_AX equ -16
sizeStackFrame equ 16
RxDOSUserStackPointer equ 0
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Other Register Definitions. ;
;...............................................................;
_AL equ 00
_AH equ 01
_BL equ 00
_BH equ 01
_CL equ 00
_CH equ 01
_DL equ 00
_DH equ 01
_SIL equ 00
_SIH equ 01
_DIL equ 00
_DIH equ 01
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Color. ;
;...............................................................;
Black equ 00
Blue equ 01
Green equ 02
Cyan equ 03
Magenta equ 05
Red equ 06
Gray equ 07
lightBlack equ 09
lightBlue equ 09
lightGreen equ 10
lightCyan equ 11
lightRed equ 12
lightMagenta equ 13
Yellow equ 14
White equ 15
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Color Define ;
;...............................................................;
color macro foreg, backg
ifb <backg>
db foreg
else
db (backg shl 4) + foreg
endif
endm
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Check for Bad Label ;
;...............................................................;
chklabel macro label
ifidn <label>,<offset>
error 'bad label'
endif
ifidn <label>,<org>
error 'bad label'
endif
ifidn <label>,<ptr>
error 'bad label'
endif
ifidn <label>,<end>
error 'bad label'
endif
ifidn <label>,<endp>
error 'bad label'
endif
ifidn <label>,<even>
error 'bad label'
endif
ifidn <label>,<segment>
error 'bad label'
endif
endm
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Get Double Argument. ;
;...............................................................;
getdarg macro seg,reg,label
loadedflag = no
ifidn <seg>,<es>
les reg,dword ptr label [bp]
loadedflag = yes
endif
ifidn <seg>,<ds>
lds reg, dword ptr label [bp]
loadedflag = yes
endif
ife loadedflag-no
mov reg, word ptr label [ bp._pointer ]
mov seg, word ptr label [ bp._segment ]
endif
endm
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Get Argument. ;
;...............................................................;
getarg macro reg,label
mov reg,word ptr label [ bp ]
endm
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Store Double Argument. ;
;...............................................................;
stordarg macro label, seg, reg
mov word ptr label [ bp._pointer ], reg
mov word ptr label [ bp._segment ], seg
endm
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Store Argument. ;
;...............................................................;
storarg macro label, reg
mov word ptr label [bp], reg
endm
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Internal Push. ;
;...............................................................;
tpush macro reg
ifidn <reg>, <t>
pushf
else
push reg
endif
endm
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Internal Pop. ;
;...............................................................;
tpop macro reg
ifidn <reg>, <t>
popf
else
pop reg
endif
endm
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Save All Registers. ;
;...............................................................;
saveAllRegisters macro
push es
push ds
push bp
push di
push si
push dx
push cx
push bx
push ax
endm
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Restore All Registers. ;
;...............................................................;
restoreAllRegisters macro
pop ax
pop bx
pop cx
pop dx
pop si
pop di
pop bp
pop ds
pop es
endm
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Save Registers. ;
;...............................................................;
saveRegisters macro reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9, reg0
ifnb <reg1>
tpush reg1
endif
ifnb <reg2>
tpush reg2
endif
ifnb <reg3>
tpush reg3
endif
ifnb <reg4>
tpush reg4
endif
ifnb <reg5>
tpush reg5
endif
ifnb <reg6>
tpush reg6
endif
ifnb <reg7>
tpush reg7
endif
ifnb <reg8>
tpush reg8
endif
ifnb <reg9>
tpush reg9
endif
ifnb <reg0>
tpush reg0
endif
endm
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Restore Registers. ;
;...............................................................;
restoreRegisters macro reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9, reg0
ifnb <reg1>
tpop reg1
endif
ifnb <reg2>
tpop reg2
endif
ifnb <reg3>
tpop reg3
endif
ifnb <reg4>
tpop reg4
endif
ifnb <reg5>
tpop reg5
endif
ifnb <reg6>
tpop reg6
endif
ifnb <reg7>
tpop reg7
endif
ifnb <reg8>
tpop reg8
endif
ifnb <reg9>
tpop reg9
endif
ifnb <reg0>
tpop reg0
endif
endm
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Save Segments. ;
;...............................................................;
saveSegments macro reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9, reg0
push ds
push es
ifnb <reg1>
tpush reg1
endif
ifnb <reg2>
tpush reg2
endif
ifnb <reg3>
tpush reg3
endif
ifnb <reg4>
tpush reg4
endif
ifnb <reg5>
tpush reg5
endif
ifnb <reg6>
tpush reg6
endif
ifnb <reg7>
tpush reg7
endif
ifnb <reg8>
tpush reg8
endif
ifnb <reg9>
tpush reg9
endif
ifnb <reg0>
tpush reg0
endif
endm
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Restore Segments. ;
;...............................................................;
restoreSegments macro reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9, reg0
ifnb <reg1>
tpop reg1
endif
ifnb <reg2>
tpop reg2
endif
ifnb <reg3>
tpop reg3
endif
ifnb <reg4>
tpop reg4
endif
ifnb <reg5>
tpop reg5
endif
ifnb <reg6>
tpop reg6
endif
ifnb <reg7>
tpop reg7
endif
ifnb <reg8>
tpop reg8
endif
ifnb <reg9>
tpop reg9
endif
ifnb <reg0>
tpop reg0
endif
pop es
pop ds
endm
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
; Current Data Segment ;
;...............................................................;
CurrSegment macro reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9, reg0
ifnb <reg1>
push ss
pop reg1
endif
ifnb <reg2>
push ss
pop reg2
endif
ifnb <reg3>
push ss
pop reg3
endif
ifnb <reg4>
push ss
pop reg4
endif
ifnb <reg5>
push ss
pop reg5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -