[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