 GBLL Debug
 GBLA DebugLevel
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,$cc
 [ $cond
$label DBF "$argstr",$cc
 |
$label
 ]
 MEND
 MACRO
$label DBL $level,$argstr,$cc
$label
 [ DebugLevel>=$level
 DBF "$argstr",$cc
 ]
 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
 TEQP r9,#0
 MOV r0,r0
 STMFD sp!,{r8,lr}
 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
 ADD sp,sp,#word*2
 LDMFD sp!,{r8,lr}
 TEQP r8,#0
 MOV r0,r0
 LDMFD sp!,{r0-r1,r8-r9,lr}
 ]
 MEND
 END
