CnC_Red_Alert/IPX/OK/PCMACRO.16

1091 lines
11 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;
; Command & Conquer Red Alert(tm)
; Copyright 2025 Electronic Arts Inc.
;
; This program is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 3 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program. If not, see <http://www.gnu.org/licenses/>.
;
;$e:\ifil\pcmacro.inc
;- 16-5-1991 at 10:55:13 by mike
;- 16-5-1991 at 08:30:30 by mike
;- 3-5-1991 at 15:39:52 by mike
SUBTTL PCMACRO.INC
.xlist
fmulscan_size MACRO e0,e1
IFDEF TANDY
.err
ENDIF
IFDEF CGA
.err
ENDIF
IFDEF EGA
m8 e0 ;; scan size = 40 for vga & ega
mov e1,e0
m4 e0
add e0,e1
ENDIF
ENDM
;.commo MACRO
; ENDM
;.commf MACRO
; ENDM
setpal MACRO e0
push si
mov si,OFFSET e0
call set_pallette
pop si
ENDM
waitvbl MACRO
call wait_vbl
ENDM
swapscr MACRO
call swap_scr
ENDM
setscad MACRO
IFDEF TANDY
mov ax,0b800h ;;setup screen address
ENDIF
IFDEF CGA
mov ax,0b800h
ENDIF
IFDEF EGA
push ds
mov ax,_DATA
mov ds,ax
mov ax,screen_seg
pop ds
ENDIF
mov es,ax
ENDM
reswordscr macro
stosw ;;movsw
endm
;; x y
getscreen MACRO e0,e1
IFIDN <e1>,<ax>
%out "CANT USED AX AS SECOND ARGUMENT"
.err
endif
IFIDN <e1>,<di>
%out "CANT USED DI AS SECOND ARGUMENT"
.err
endif
IFDIF <e1>,<di>
mov di,e1
endif
m2 di
mov di,screenvtb[di]
IFDIF <e0>,<ax>
mov ax,e0
endif
IFDEF EGA
di8 ax
ENDIF
IFDEF TANDY
shr ax,1
ENDIF
IFDEF CGA
shr ax,1
shr ax,1
shr ax,1
shr ax,1
ENDIF
add di,ax
IFDEF TANDY
and di,1fffh
ENDIF
ENDM
getscreen_no MACRO
mov ax,d1
sal ax,1
mov di,ax
mov ax,screenvtb[di]
mov di,ax
mov ax,scadd
add di,ax
mov ax,d0
IFDEF EGA
di8 ax
ENDIF
IFDEF TANDY
shr ax,1
ENDIF
IFDEF CGA
shr ax,1
shr ax,1
shr ax,1
shr ax,1
ENDIF
add di,ax
ENDM
mult macro e0,e1
if ( e1 EQ 2 )
m2 e0
exitm
endif
if ( e1 EQ 4 )
m4 e0
exitm
endif
if ( e1 EQ 8 )
m8 e0
exitm
endif
if ( e1 EQ 16 )
m16 e0
exitm
endif
%out "CANT USE THIS MACRO WITH THIS VALUE"
.err
endm
m2 macro e0
shl e0,1
endm
m4 macro e0
m2 e0
m2 e0
endm
m8 macro e0
m4 e0
m2 e0
endm
m16 macro e0
m8 e0
m2 e0
endm
m32 macro e0
m16 e0
m2 e0
endm
m64 macro e0
m32 e0
m2 e0
endm
m128 macro e0
m64 e0
m2 e0
endm
di2 macro e0
shr e0,1
endm
di4 macro e0
di2 e0
di2 e0
endm
di8 macro e0
di4 e0
di2 e0
endm
di16 macro e0
di8 e0
di2 e0
endm
di32 macro e0
di16 e0
di2 e0
endm
deca macro e0
mov ax,e0
dec ax
mov e0,ax
endm
decb macro e0
mov al,e0
dec al
mov e0,al
endm
inca macro e0
mov ax,e0
inc ax
mov e0,ax
endm
incb macro e0
mov al,e0
inc al
mov e0,al
endm
clrw macro e0
mov WORD PTR e0,0
endm
clrb macro e0
mov BYTE PTR e0,0
endm
clr macro e0
mov e0,0
endm
mova macro e1,e2
.ERRIDN <e1>,<WORD>
.ERRIDN <e1>,<BYTE>
.ERRIDN <e1>,<OFFSET>
.ERRIDN <e2>,<WORD>
.ERRIDN <e2>,<BYTE>
.ERRIDN <e2>,<OFFSET>
mov ax,e2
mov e1,ax
endm
movb macro e1,e2
.ERRIDN <e1>,<WORD>
.ERRIDN <e1>,<BYTE>
.ERRIDN <e1>,<OFFSET>
.ERRIDN <e2>,<WORD>
.ERRIDN <e2>,<BYTE>
.ERRIDN <e2>,<OFFSET>
mov al,e2
mov e1,al
endm
btstb macro e1,e2
IFIDN <e1>,<al>
test e1,1 SHL e2
EXITM
ENDIF
IFIDN <e1>,<ah>
test e1,1 SHL e2
EXITM
ENDIF
IFIDN <e1>,<bl>
test e1,1 SHL e2
EXITM
ENDIF
IFIDN <e1>,<bh>
test e1,1 SHL e2
EXITM
ENDIF
IFIDN <e1>,<cl>
test e1,1 SHL e2
EXITM
ENDIF
IFIDN <e1>,<ch>
test e1,1 SHL e2
EXITM
ENDIF
IFIDN <e1>,<dl>
test e1,1 SHL e2
EXITM
ENDIF
IFIDN <e1>,<dh>
test e1,1 SHL e2
EXITM
ENDIF
test BYTE PTR e1,1 SHL e2
endm
saveall macro
save ax,bx,cx,dx,bp,si,di,es,ds
endm
restall macro
restore ax,bx,cx,dx,bp,si,di,es,ds
endm
save macro r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14
IFNB <r0>
push r0
save r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14
ENDIF
endm
restore macro r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14
IFNB <r14>
pop r14
ENDIF
IFNB <r13>
pop r13
ENDIF
IFNB <r12>
pop r12
ENDIF
IFNB <r11>
pop r11
ENDIF
IFNB <r10>
pop r10
ENDIF
IFNB <r9>
pop r9
ENDIF
IFNB <r8>
pop r8
ENDIF
IFNB <r7>
pop r7
ENDIF
IFNB <r6>
pop r6
ENDIF
IFNB <r5>
pop r5
ENDIF
IFNB <r4>
pop r4
ENDIF
IFNB <r3>
pop r3
ENDIF
IFNB <r2>
pop r2
ENDIF
IFNB <r1>
pop r1
ENDIF
IFNB <r0>
pop r0
ENDIF
endm
bhi macro lab
ja lab
endm
bls macro lab
jbe lab
endm
bcc macro lab
jnc lab
endm
bcs macro lab
jc lab
endm
bhs macro lab
jnc lab
endm
blo macro lab
jc lab
endm
bne macro lab
jne lab
endm
beq macro lab
je lab
endm
bpl macro lab
jns lab
endm
bmi macro lab
js lab
endm
bge macro lab
jge lab
endm
blt macro lab
jl lab
endm
bgt macro lab
jg lab
endm
ble macro lab
jle lab
endm
bra macro lab
jmp lab
endm
bhis macro lab
ja lab
endm
blss macro lab
jbe lab
endm
bccs macro lab
jnc lab
endm
bcss macro lab
jc lab
endm
bnes macro lab
jne lab
endm
beqs macro lab
je lab
endm
bpls macro lab
jns lab
endm
bmis macro lab
js lab
endm
bges macro lab
jge lab
endm
blts macro lab
jl lab
endm
bgts macro lab
jg lab
endm
bles macro lab
jle lab
endm
bras macro lab
jmp lab
endm
tstb macro e1
IFIDN <e1>,<al>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<bp>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<ah>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<bl>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<bh>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<cl>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<ch>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<dl>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<dh>
or e1,e1
EXITM
ENDIF
cmp BYTE PTR e1,0
endm
tstw macro e1
IFIDN <e1>,<ax>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<bx>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<cx>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<dx>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<bp>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<si>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<di>
or e1,e1
EXITM
ENDIF
cmp WORD PTR e1,0
endm
tst macro e1
IFIDN <e1>,<ax>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<bx>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<cx>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<dx>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<bp>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<si>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<di>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<al>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<bl>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<cl>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<dl>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<ah>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<bh>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<ch>
or e1,e1
EXITM
ENDIF
IFIDN <e1>,<dh>
or e1,e1
EXITM
ENDIF
cmp e1,0
endm
clear macro first
xor first,first
endm
rts macro
ret
endm
bclrb macro e1,e2
btstb e1,e2
pushf
bclrb_sub e1,e2
popf
endm
bclrb_sub macro e1,e2
IFIDN <e1>,<al>
and e1,NOT ( 1 SHL e2 )
EXITM
ENDIF
IFIDN <e1>,<bp>
and e1,NOT ( 1 SHL e2 )
EXITM
ENDIF
IFIDN <e1>,<ah>
and e1,NOT ( 1 SHL e2 )
EXITM
ENDIF
IFIDN <e1>,<bl>
and e1,NOT ( 1 SHL e2 )
EXITM
ENDIF
IFIDN <e1>,<bh>
and e1,NOT ( 1 SHL e2 )
EXITM
ENDIF
IFIDN <e1>,<cl>
and e1,NOT ( 1 SHL e2 )
EXITM
ENDIF
IFIDN <e1>,<ch>
and e1,NOT ( 1 SHL e2 )
EXITM
ENDIF
IFIDN <e1>,<dl>
and e1,NOT ( 1 SHL e2 )
EXITM
ENDIF
IFIDN <e1>,<dh>
and e1,NOT ( 1 SHL e2 )
EXITM
ENDIF
and BYTE PTR e1,NOT ( 1 SHL e2 )
endm
bsetb macro e1,e2
btstb e1,e2
pushf
or BYTE PTR e1,1 SHL e2
popf
endm
bchgb macro e1,e2
btstb e1,e2
pushf
xor BYTE PTR e1,1 SHL e2
popf
endm
mov_b macro label,label2
mov byte ptr label,byte ptr label2
endm
mov_w macro label,label2
mov word ptr label,word ptr label2
endm
mov_d macro label,label2
mov dword ptr label,dword ptr label2
endm
cmp_b macro label,label2
cmp byte ptr label,byte ptr label2
endm
cmp_w macro label,label2
cmp word ptr label,word ptr label2
endm
cmp_d macro label,label2
cmp dword ptr label,dword ptr label2
endm
add_b macro label,label2
add byte ptr label,byte ptr label2
endm
add_w macro label,label2
add word ptr label,word ptr label2
endm
add_d macro label,label2
add dword ptr label,dword ptr label2
endm
sub_b macro label,label2
sub byte ptr label,byte ptr label2
endm
sub_w macro label,label2
sub word ptr label,word ptr label2
endm
sub_d macro label,label2
sub dword ptr label,dword ptr label2
endm
or_b macro label,label2
or byte ptr label,byte ptr label2
endm
or_w macro label,label2
or word ptr label,word ptr label2
endm
or_d macro label,label2
or dword ptr label,dword ptr label2
endm
xor_b macro label,label2
xor byte ptr label,byte ptr label2
endm
xor_w macro label,label2
xor word ptr label,word ptr label2
endm
xor_d macro label,label2
xor dword ptr label,dword ptr label2
endm
eor_b macro label,label2
xor byte ptr label,byte ptr label2
endm
eor_w macro label,label2
xor word ptr label,word ptr label2
endm
eor_d macro label,label2
xor dword ptr label,dword ptr label2
endm
and_b macro label,label2
and byte ptr label,byte ptr label2
endm
and_w macro label,label2
and word ptr label,word ptr label2
endm
and_d macro label,label2
and dword ptr label,dword ptr label2
endm
test_b macro label,label2
test byte ptr label,byte ptr label2
endm
test_w macro label,label2
test word ptr label,word ptr label2
endm
test_d macro label,label2
test dword ptr label,dword ptr label2
endm
shr_b macro label,label2
shr byte ptr label,label2
endm
shr_w macro label,label2
shr word ptr label,label2
endm
shr_d macro label,label2
shr dword ptr label,label2
endm
shl_b macro label,label2
shl byte ptr label,label2
endm
shl_w macro label,label2
shl word ptr label,label2
endm
shl_d macro label,label2
shl dword ptr label,label2
endm
sar_b macro label,label2
sar byte ptr label,label2
endm
sar_w macro label,label2
sar word ptr label,label2
endm
sar_d macro label,label2
sar dword ptr label,label2
endm
sal_b macro label,label2
sal byte ptr label,label2
endm
sal_w macro label,label2
sal word ptr label,label2
endm
sal_d macro label,label2
sal dword ptr label,label2
endm
inc_b macro label
inc byte ptr label
endm
inc_w macro label
inc word ptr label
endm
inc_d macro label
inc dword ptr label
endm
dec_b macro label
dec byte ptr label
endm
dec_w macro label
dec word ptr label
endm
dec_d macro label
dec dword ptr label
endm
movzx_b macro label,label2
movzx label,byte ptr label2
endm
movzx_w macro label,label2
movzx label,word ptr label2
endm
movsx_b macro label,label2
movsx label,byte ptr label2
endm
movsx_w macro label,label2
movsx label,word ptr label2
endm
mul_b macro label
mul byte ptr label
endm
mul_w macro label
mul word ptr label
endm
div_b macro label
div byte ptr label
endm
div_w macro label
div word ptr label
endm
idiv_b macro label
idiv byte ptr label
endm
idiv_w macro label
idiv word ptr label
endm
tst_b macro label
cmp byte ptr label,0
endm
tst_w macro label
cmp word ptr label,0
endm
tst_d macro label
cmp dword ptr label,0
endm
not_b macro label
not byte ptr label
endm
not_w macro label
not word ptr label
endm
not_d macro label
not dword ptr label
endm
neg_b macro label
neg byte ptr label
endm
neg_w macro label
neg word ptr label
endm
neg_d macro label
neg dword ptr label
endm
.list