; > &.Hdr.NdrDebug
;

        GBLL    debug
        GBLL    true
        GBLL    false

true    SETL    1=1
false   SETL    1=0

        MACRO
        Debug1  $dbg,$string
      [ debug$dbg
        Debug   $dbg,"$string"
      ]
        MEND

        MACRO
        Debug2  $dbg,$p1,$p2,$p3,$p4,$p5,$p6,$p7
      [ debug$dbg
        Debug   $dbg,"",$p1,$p2,$p3,$p4,$p5,$p6,$p7
      ]
        MEND

        MACRO
        Debug2a $dbg,$p1,$p2,$p3,$p4,$p5,$p6,$p7
      [ debug$dbg
        Debuga  $dbg,"",$p1,$p2,$p3,$p4,$p5,$p6,$p7
      ]
        MEND

        MACRO
        DebugS  $dbg,$string,$reg
      [ debug$dbg
        Push    "R0-R12,LR,PC"
      [ hostvdu
        BL      Neil_HostVdu
      ]
        SWI     XOS_WriteS
        DCB     "$string",0
        ALIGN
        SWIVC   XOS_WriteI+"'"
      [ $reg > sp
        LDRVC   R0,[sp,#:INDEX:$reg * 4 - 4]    ; R13 is not stacked
      |
        LDRVC   R0,[sp,#:INDEX:$reg * 4]
      ]
        SWIVC   XOS_Write0
        SWIVC   XOS_WriteI+"'"
        SWIVC   XOS_NewLine
      [ hostvdu
        BL      Neil_TubeVdu
      ]
        Pull    "R0-R12"
        LDR     LR,[sp,#4]
        TEQP    LR,#0                   ; restore flags
        LDR     LR,[sp],#8              ; correct stack
      ]
        MEND

        MACRO
        Debug   $dbg,$string,$p1,$p2,$p3,$p4,$p5,$p6,$p7
      [ debug$dbg
        Push    "R0-R12,LR,PC"
      [ hostvdu
        BL      Neil_HostVdu
      ]
        SWI     XOS_WriteS
        DCB     "$string",0
        ALIGN
      [ "$p1"<>""
        Dreg    $p1
      ]
      [ "$p2"<>""
        Dreg    $p2
      ]
      [ "$p3"<>""
        Dreg    $p3
      ]
      [ "$p4"<>""
        Dreg    $p4
      ]
      [ "$p5"<>""
        Dreg    $p5
      ]
      [ "$p6"<>""
        Dreg    $p6
      ]
      [ "$p7"<>""
        Dreg    $p7
      ]
        SWI     XOS_NewLine
      [ hostvdu
        BL      Neil_TubeVdu
      ]
        Pull    "R0-R12"
        LDR     LR,[sp,#4]
        TEQP    LR,#0                   ; restore flags
        LDR     LR,[sp],#8              ; correct stack
      ]
        MEND

        MACRO
        Debuga  $dbg,$string,$p1,$p2,$p3,$p4,$p5,$p6,$p7
      [ debug$dbg
        Push    "R0-R12,LR,PC"
      [ hostvdu
        BL      Neil_HostVdu
      ]
        SWI     XOS_WriteS
        DCB     "$string",0
        ALIGN
      [ "$p1"<>""
        Dreg    $p1
      ]
      [ "$p2"<>""
        Dreg    $p2
      ]
      [ "$p3"<>""
        Dreg    $p3
      ]
      [ "$p4"<>""
        Dreg    $p4
      ]
      [ "$p5"<>""
        Dreg    $p5
      ]
      [ "$p6"<>""
        Dreg    $p6
      ]
      [ "$p7"<>""
        Dreg    $p7
      ]
      [ hostvdu
        BL      Neil_TubeVdu
      ]
        Pull    "R0-R12"
        LDR     LR,[sp,#4]
        TEQP    LR,#0                   ; restore flags
        LDR     LR,[sp],#8              ; correct stack
      ]
        MEND

        MACRO
        Dreg    $reg
     [ "$reg":LEFT:1 = "#"
        LCLS    locn
locn    SETS    "$reg":RIGHT:(:LEN:"$reg"-1)
        LDR     R0,$locn
     |
      [ $reg > sp
        LDR     R0,[sp,#:INDEX:$reg * 4 - 4]    ; R13 is not stacked
      |
        LDR     R0,[sp,#:INDEX:$reg * 4]
      ]
     ]
        BL      Neil_ConvertHex8
        MEND

        MACRO
        InsertNDRDebugRoutines

Neil_ConvertHex8                        ; prints number in R0
        Push    "LR"
;
        SWI     XOS_WriteI+" "
        SUB     sp,sp,#12
        MOVVC   R1,sp
        MOVVC   R2,#9                   ; includes room for terminator
        SWIVC   XOS_ConvertHex8
        SWIVC   XOS_Write0
        ADD     sp,sp,#12
;
        Pull    "PC"

Neil_HostVdu
        Push    "LR"
;
        ADR     R0,%FT01
        SWI     XOS_CLI
;
        Pull    "PC"
01
        DCB     "HostVdu",0
        ALIGN

Neil_TubeVdu
        Push    "LR"
;
        ADR     R0,%FT01
        SWI     XOS_CLI
;
        Pull    "PC"
01
        DCB     "TubeVdu",0
        ALIGN

        MEND

        END
