⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rxdosmac.asm

📁 dos source
💻 ASM
📖 第 1 页 / 共 3 页
字号:




        ;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
        ;  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 + -