;writeDecimal<CC> Rx, buffer, buffer_size
;output 123456
MACRO writeDecimal$cc n:R, buffer:I, size:I		;CORRUPTS FLAGS
{
 STMFD   R13!, {R0-R2}
 #if n <> 0
   MOV     R0, n
 #endif
 ADR     R1, buffer
 MOV     R2, #size
 SWI     XOS_BinaryToDecimal		;PRM1-468
 MOV     R0, R1
 MOV     R1, R2
 SWI$cc  XOS_WriteN			;PRM1-540
 LDMFD   R13!, {R0-R2}
}




;writeS<CC> string
MACRO writeS$cc s:S					;CORRUPTS FLAGS
{
 #if LEN(s) == 0
   SWI$cc  XOS_NewLine
 #endif
 #if LEN(s) == 1
   SWI$cc  XOS_WriteI + ASC(s)
 #endif
 #if LEN(s) > 1
   #if LEN(s) > 1 AND cc<>&E
     ADD$cc  PC, PC, #0
     ._start
     ADD     PC, PC, #_end - _start - 8
   #endif
   SWI     XOS_WriteS
   DCB     s, 0
   ALIGN
   ._end
 #endif
}
;writeB<CC> Rx
;output FF
MACRO writeB$cc n:R					;CORRUPTS FLAGS, R1,R2
{
 #if n <> 1
   MOV$cc  R1, n
 #endif

 MOV$cc  R2, #4
 BL$cc   outputHexByte
}




;writeD<CC> Rx
;output FFFFFFFF
MACRO writeD$cc n:R					;CORRUPTS FLAGS, R1
{
 #if n <> 1
   MOV$cc  R1, n
 #endif

 BL$cc   outputHex
}




;writeDT<CC> Rx
;output Double with leading 0's removed
MACRO writeDT$cc n:R					;CORRUPTS FLAGS
{
 #if n <> 1
   STR     R1, [R13, #-4]!
   MOV$cc  R1, n
 #endif

 BL$cc   outputHexTruncated

 #if n <> 1
   LDR     R1, [R13], #4
 #endif
}




;writeD_n<CC> Rx, N
;output N chars of Rx
MACRO writeD_n$cc n:R s:I				;CORRUPTS FLAGS
{
 STMFD     R13!, {R1-R2, R14}
 #if n <> 1
   MOV       R1, n
 #endif
 MOV       R2, #(s << 2) - 4
 BL$cc     outputHexByte
 LDMFD     R13!, {R1-R2, R14}
}
