;
;	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/>.
;

;***************************************************************************
;**     C O N F I D E N T I A L --- W E S T W O O D   S T U D I O S       **
;***************************************************************************
;*                                                                         *
;*                 Project Name : 16 bit ASM Macros                        *
;*                                                                         *
;*                    File Name : PCMACRO.16                               *
;*                                                                         *
;*                   Programmer : Steve Tall				   *
;*                                                                         *
;*                   Start Date : November 17th, 1995			   *
;*                                                                         *
;*                  Last Update : November 20th, 1995   [ST]               *
;*                                                                         *
;*-------------------------------------------------------------------------*
;* Functions:                                                              *
;*                                                                         *
;* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *


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


clear	macro	first
	xor	first,first
	endm

rts	macro
	ret
	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