; s.DebugHdr

                GBLL            Debug

DebugOn         *               1 :SHL: 0
UseVDU          *               1 :SHL: 1
UseTracker      *               1 :SHL: 2
UseBeeb         *               1 :SHL: 3
UseRAM          *               1 :SHL: 4

                MACRO
$label          DBF             $argstr, $cc
                [               Debug
                IMPORT          DebugF
$label

                [               "$cc" <> ""
                B$cc            %ft10
                B               %ft20
                ]

10              STMFD           sp!, {lr, pc}
                BL              DebugF
                =               "$argstr", 0
                ALIGN
                LDR             lr, [sp], #8
20
                |
$label
                ]
                MEND

                MACRO
$label          DBFIF           $cond, $argstr
                [               $cond
$label          DBF             $argstr
                |
$label
                ]
                MEND

                MACRO
$label          DBFLAGS         $and, $eor, $cc
                [               Debug
                IMPORT          DebugFlags
$label          STM$cc.FD       sp!, {r0-r2, lr}
                MOV$cc          r1, #$and
                MOV$cc          r0, #$eor
                BL$cc           DebugFlags
                LDM$cc.FD       sp!, {r0-r2, lr}
                |
$label
                ]
                MEND

                MACRO
$label          DBON            $cc
$label          DBFLAGS         :NOT: DebugOn, DebugOn, $cc
                MEND

                MACRO
$label          DBOFF           $cc
$label          DBFLAGS         :NOT: DebugOn, 0, $cc
                MEND

                MACRO
$label          DBSET           $flags, $cc
$label          DBFLAGS         0, $flags, $cc
                MEND

                MACRO
$label          DBREGS
$label          DBF             " %0w %1w %2w %3w %4w %5w\n %6w %7w %8w %9w %aw %bw\n %cw %dw %ew %fp\n"
                MEND

                MACRO
$label          DBBACK          $cc
$label
                IMPORT          DebugBacktrace
                BL$cc           DebugBacktrace
                MEND

                MACRO
$label          DBPALETTE       $log, $mode, $red, $green, $blue
$label
                [               Debug
                STMFD           sp!, {r0-r1, r8-r9, lr}
                MOV             r8, pc
                ORR             r9, r8, #S0_bit :OR: S1_bit  ; Force SVC mode
                TEQP            r9, #0
                MOV             r0, r0
                STMFD           sp!, {r8, lr}   ; Save old PC, LR

; Now build parameters on stack

                MOV             r0, #($log )
                ORR             r0, r0, #($mode ) :SHL: 8
                ORR             r0, r0, #($red ) :SHL: 16
                ORR             r0, r0, #($green) :SHL: 24
                MOV             r1, #($blue )
                STMFD           sp!, {r0-r1}
                MOV             r0, #12
                MOV             r1, sp
                SWI             &07             ; OS_Word
                ADD             sp, sp, #word * 2
                LDMFD           sp!, {r8, lr}
                TEQP            r8, #0
                MOV             r0, r0
                LDMFD           sp!, {r0-r1, r8-r9, lr}
                ]
                MEND

                END
