[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]

	IFND	EXEC_INITIALIZERS_I
EXEC_INITIALIZERS_I	SET	1
**
**	$Filename: exec/initializers.i $
**	$Release: 2.04 Includes, V37.4 $
**	$Revision: 36.5 $
**	$Date: 90/05/10 $
**
**	Macros for creating InitStruct() tables
**
**	(C) Copyright 1985-1999 Amiga, Inc.
**	    All Rights Reserved
**

INITBYTE	MACRO	; &offset,&value
		IFLE	(\1)-255	;If offset <=255
		DC.B	$a0,\1		;use byte offset
		DC.B	\2,0
		MEXIT			;exit early
		ENDC
		DC.B	$e0,0
		DC.W	\1
		DC.B	\2,0
		ENDM

INITWORD	MACRO	; &offset,&value
		IFLE	(\1)-255	;If offset <=255
		DC.B	$90,\1		;use byte offset
		DC.W	\2
		MEXIT			;exit early
		ENDC
		DC.B	$d0,0
		DC.W	\1
		DC.W	\2
		ENDM

INITLONG	MACRO	; &offset,&value
		IFLE	(\1)-255	;If offset <=255
		DC.B	$80,\1		;use byte offset
		DC.L	\2
		MEXIT			;exit early
		ENDC
		DC.B	$c0,0
		DC.W	\1
		DC.L	\2
		ENDM

;size=source size 0=long, 1=word, 2=byte, 3=illegal.
;offset=offset from memory base to put data
;value=unused
;count=number of source items to copy, minus one
;follow this macro with the proper sized data (dc.b,dc.w,dc.l,etc.)
INITSTRUCT	MACRO	; &size,&offset,&value,&count
		DS.W	0
		IFC	'\4',''
COUNT\@	SET	0
		ENDC
		IFNC	'\4',''
COUNT\@	SET	\4
		ENDC
CMD\@		SET	(((\1)<<4)!COUNT\@)
		IFLE	(\2)-255	;byte offset large enough?
		DC.B	(CMD\@)!$80
		DC.B	\2
		MEXIT
		ENDC
		DC.B	CMD\@!$0C0	;byte too small, use 24-bit offset.
		DC.B	(((\2)>>16)&$0FF)
		DC.W	((\2)&$0FFFF)
		ENDM

	ENDC	; EXEC_INITIALIZERS_I