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

📄 rules.asi

📁 wolf3d游戏源代码!非常不错! 与大家共享! 如果大家又相关资料还请多多上传!
💻 ASI
📖 第 1 页 / 共 2 页
字号:
;|                                                              |
;|      Old Segment Declarations Macros                         |
;|                                                              |
;[]------------------------------------------------------------[]


CSeg@           MACRO           ;; Open a Code Segment
IFDEF __WINDOWS__
_TEXT   SEGMENT WORD PUBLIC 'CODE'
ELSE
_TEXT   SEGMENT BYTE PUBLIC 'CODE'
ENDIF
	ASSUME  CS:_TEXT
		ENDM

CSegEnd@        MACRO           ;; Close a Code Segment
_TEXT   ENDS
		ENDM

DSeg@           MACRO           ;; Open a Data Segment  (initialized)
_DATA   SEGMENT WORD PUBLIC 'DATA'
		ENDM

DSegEnd@        MACRO           ;; Close a Data Segment (initialized)
_DATA   ENDS
		ENDM

IFDEF __BSS__
    IFNDEF __HUGE__
	BSeg@           MACRO           ;; Open a Data Segment  (un-initialized)
	_BSS    SEGMENT WORD PUBLIC 'BSS'
		ENDM

	BSegEnd@        MACRO           ;; Close a Data Segment (un-initialized)
	_BSS    ENDS
			ENDM
    ENDIF
ENDIF

Header@ MACRO
IFDEF __WINDOWS__
_TEXT   SEGMENT WORD PUBLIC 'CODE'
ELSE
_TEXT   SEGMENT BYTE PUBLIC 'CODE'
ENDIF
_TEXT   ENDS
_DATA   SEGMENT WORD PUBLIC 'DATA'
_DATA   ENDS
IFDEF __BSS__
    IFNDEF  __HUGE__
	_BSS    SEGMENT WORD PUBLIC 'BSS'
	_BSS    ENDS
    ENDIF
ENDIF

	ASSUME  CS:_TEXT, DS:DGROUP
	ENDM

	PAGE
;[]------------------------------------------------------------[]
;|                                                              |
;|      C Naming Convention Macros                              |
;|                                                              |
;[]------------------------------------------------------------[]

UNDERSCORE      EQU     1

ExtSym@ MACRO   Sym, sType, sName
	IFNB    <sName>
	IFIDN   <sName>, <__PASCAL__>
NAMING      =       0
	ELSE
NAMING      =       UNDERSCORE
	ENDIF
	ENDIF
	IF      NAMING
	EXTRN   _&Sym : sType
Sym&@   equ     _&Sym
	ELSE
	EXTRN   Sym : sType
Sym&@   equ     Sym
	ENDIF
	ENDM

PubSym@ MACRO   Sym, Definition, sName
	IFNB    <sName>
	IFIDN   <sName>, <__PASCAL__>
NAMING      =       0
	ELSE
NAMING      =       UNDERSCORE
	ENDIF
	ENDIF
	IF      NAMING
	PUBLIC  _&Sym
_&Sym   Definition
Sym&@   equ     _&Sym
	ELSE
	PUBLIC  Sym
Sym     Definition
Sym&@   equ     Sym
	ENDIF
	ENDM

Static@ MACRO   Sym, Definition, sName
	IFNB    <sName>
	IFIDN   <sName>, <__PASCAL__>
NAMING      =       0
	ELSE
NAMING      =       UNDERSCORE
	ENDIF
	ENDIF
	IF      NAMING
_&Sym   Definition
Sym&@   equ     _&Sym
	ELSE
Sym     Definition
Sym&@   equ     Sym
	ENDIF
	ENDM

	PAGE
;[]------------------------------------------------------------[]
;|                                                              |
;|      Macros which are Data Size Dependent                    |
;|                                                              |
;[]------------------------------------------------------------[]

IF      LDATA
DPTR_           equ     DWORD PTR
dPtrSize        equ     4
LES_            equ     LES
ES_             equ     ES:
SS_             equ     SS:
LDS_            equ     LDS

pushDS_         MACRO
		PUSH    DS
		ENDM

popDS_          MACRO
		POP    DS
		ENDM

PushPtr         MACRO   dPtrOff, dPtrSeg
		PUSH    dPtrSeg
		PUSH    dPtrOff
		ENDM


dPtr@           MACRO   Sym, VALUE, sName       ;; Static Data pointer
Static@         Sym, <DD        VALUE>, sName
		ENDM

dPtrPub@        MACRO   Sym, VALUE, sName       ;; Global Data Pointer
PubSym@         Sym, <DD        VALUE>, sName
		ENDM

dPtrExt@        MACRO   Sym, sName      ;; External Data Pointer
ExtSym@         Sym, DWORD, sName
		ENDM
ELSE
DPTR_           equ     WORD PTR
dPtrSize        equ     2
LES_            equ     MOV
ES_             equ     DS:
SS_             equ     DS:
LDS_            equ     MOV

pushDS_         MACRO
		ENDM

popDS_          MACRO
		ENDM

PushPtr         MACRO   dPtrOff, dPtrSeg
		PUSH    dPtrOff
		ENDM

dPtr@           MACRO   Sym, VALUE, sName       ;; Static Data pointer
Static@         Sym, <DW        VALUE>, sName
		ENDM

dPtrPub@        MACRO   Sym, VALUE, sName       ;; Global Data Pointer
PubSym@         Sym, <DW        VALUE>, sName
		ENDM

dPtrExt@        MACRO   Sym, sName      ;; External Data Pointer
ExtSym@         Sym, WORD, sName
		ENDM
ENDIF
	PAGE
;[]------------------------------------------------------------[]
;|                                                              |
;|      Macros which are Code Size Dependent                    |
;|                                                              |
;[]------------------------------------------------------------[]

IF      LPROG
CPTR_           equ     DWORD PTR
cPtrSize        equ     4

Proc@           MACRO   Sym, sName      ;; Open a Static function
Static@         Sym, <PROC      FAR>, sName
		ENDM

PubProc@        MACRO   Sym, sName      ;; Open a Public function
PubSym@         Sym, <PROC      FAR>, sName
		ENDM

ExtProc@        MACRO   Sym, sName      ;; External Function
ExtSym@         Sym, FAR, sName
		ENDM

cPtr@           MACRO   Sym, VALUE, sName       ;; Static Function pointer
Static@         Sym, <DD        VALUE>, sName
		ENDM

cPtrPub@        MACRO   Sym, VALUE, sName;; Global Function Pointer
PubSym@         Sym, <DD        VALUE>, sName
		ENDM

cPtrExt@        MACRO   Sym, sName      ;; External Function Pointer
ExtSym@         Sym, DWORD, sName
		ENDM
ELSE
CPTR_           equ     WORD PTR
cPtrSize        equ     2

Proc@           MACRO   Sym, sName      ;; Open a Static function
Static@         Sym, <PROC      NEAR>, sName
		ENDM

PubProc@        MACRO   Sym, sName      ;; Open a Public function
PubSym@         Sym, <PROC      NEAR>, sName
		ENDM

ExtProc@        MACRO   Sym, sName      ;; External Function
ExtSym@         Sym, NEAR, sName
		ENDM

cPtr@           MACRO   Sym, VALUE, sName       ;; Static Function pointer
Static@         Sym, <DW        VALUE>, sName
		ENDM

cPtrPub@        MACRO   Sym, VALUE, sName       ;; Global Function Pointer
PubSym@         Sym, <DW        VALUE>, sName
		ENDM

cPtrExt@        MACRO   Sym, sName      ;; External Function Pointer
ExtSym@         Sym, WORD, sName
		ENDM
ENDIF

EndProc@        MACRO   Sym, sName      ;; Close a function
Static@         Sym, ENDP, sName
		ENDM

	PAGE
;[]------------------------------------------------------------[]
;|                                                              |
;|      Miscellaneous Definitions                               |
;|                                                              |
;[]------------------------------------------------------------[]

;*** Set up some macros for procedure parameters and export/import

nearCall        STRUC
nearBP          dw      ?
nearIP          dw      ?
nearParam       dw      ?
nearCall        ENDS

farCall         STRUC
farBP           dw      ?
farCSIP         dd      ?
aParam          dw      ?
farCall         ENDS

;*** Next, we define some convenient structures to access the parts
;       of larger objects.

_twoBytes       STRUC
BY0     db      ?
BY1     db      ?
_twoBytes       ENDS

_fourWords      STRUC
W0      dw      ?
W1      dw      ?
W2      dw      ?
W3      dw      ?
_fourWords      ENDS

_twoDwords      STRUC
DD0     dd      ?
DD1     dd      ?
_twoDwords      ENDS

_aFloat         STRUC
double          dq      ?
_aFloat         ENDS

; How to invoke MSDOS.

MSDOS@  MACRO
	int     21h
	ENDM
	PAGE

; The next section concerns the use of registers.  SI and DI are used
;       for register variables, and must be conserved.

; Registers AX, BX, CX, DX will not be preserved across function calls.

; Firstly, the registers to be conserved through function calls, including
;       the setup of local variables.

link@   MACRO   _si,_di,_ES,locals
	push    bp
	mov     bp, sp
	IFNB    <locals>
		lea     sp, locals
	ENDIF
	IFNB    <_si>
		push    si
	ENDIF
	IFNB    <_di>
		push    di
	ENDIF
ENDM

unLink@ MACRO   _si,_di,_ES,locals
	IFNB    <_di>
		pop     di
	ENDIF
	IFNB    <_si>
		pop     si
	ENDIF
	IFNB    <locals>
		mov     sp, bp
	ENDIF
	pop     bp
ENDM

.LIST

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -