; hdr.CVars
;
; Define macros for Assembler source.
;

;**************************************************************************
; ExternVar $var
;
; Declare external C variables.
;
        MACRO
        ImportVar $var

        IMPORT  $var
$var._Indirect  DCD     $var
        MEND

;**************************************************************************
; GlobalVar $var
;
; Declare external C variables.
;
        MACRO
        ExportVar $var

        EXPORT  $var
$var._Indirect  DCD     $var
        MEND

;**************************************************************************
; StaticBaseFromSL $reg, $cc
;
; Set $reg to point to the base of the static data area using SL set up
; from C call.
;
        MACRO
$label  StaticBaseFromSL $reg, $cc

$label  LDR$cc  $reg, [sl, #-536]
        MEND

;**************************************************************************
; StaticBaseFromSP $reg, $cc
;
; Set $reg to point to the base of the static data area using stack frame
; placed at Mb boundary below SP by C call.
;
        MACRO
$label  StaticBaseFromSP $reg, $cc

$label  MOV$cc  $reg, sp, LSR #20
        MOV$cc  $reg, $reg, LSL #20
        LDR$cc  $reg, [$reg, #4]
        MEND

;**************************************************************************
; StaticBaseFromWP $reg, $cc
;
; Set $reg to point to the base of the static data area using private word
; contents only ie. workspace pointer.
;
        MACRO
$label  StaticBaseFromWP $reg, $pw, $cc

$label  LDR$cc  $reg, [$pw, #8]
        MEND

;**************************************************************************
; LDRVar $reg, $base, $var, $cc
;
; Load the contents of an external C variable.
;
        MACRO
$label  LDRVar  $reg, $base, $var, $cc

$label  LDR$cc  $reg, $var._Indirect
        LDR$cc  $reg, [$base, $reg]
        MEND

;**************************************************************************
; STRVar $reg, $base, $var, $w1, $cc
;
; Set the contents of an external C variable.
;
        MACRO
$label  STRVar  $reg, $base, $var, $w1, $cc

$label  LDR$cc  $w1, $var._Indirect
        STR$cc  $reg, [$base, $w1]
        MEND

;**************************************************************************
; ADRVar $reg, $base, $var, $cc
;
; Set $reg to point to the static variable $var.
;
        MACRO
$label  ADRVar  $reg, $base, $var, $cc

$label  LDR$cc  $reg, $var._Indirect
        ADD$cc  $reg, $base, $reg
        MEND


        END
