# type  "Module"
# org   0
# size  65536

.ModuleHeader dd    0, Init, Final, 0
              dd    Title, Help, 0
              dd    &DA800, SwiCode, SwiTable, 0

.Title        db    "DesktopDebug",0
.Help         db    "DesktopDebug",9,"1.00 (19 Sep 1993)  A. M. Pereira",0
              ALIGN

.SwiTable     db    "DeskDebug",0
              db    "Report",0
              db    "PollWordAddress",0
              db    "ResetPollWord",0
              db    0
              ALIGN

.SwiCode      LDR   r12,[r12]
              CMP   r11,#(EndOfSwiJTable - SwiJTable)/4
              ADDLO r15,r15,r11,LSL #2
              B     unknownswi
.SwiJTable    B     Report
              B     PollWordAddress
              B     ResetPollWord
.EndOfSwiJTable
.unknownswi   ADR   r0,ukswi_block
              ORRS  r15,r14,#1<<28
.ukswi_block  dd    &1E6
              db    "Unknown DesktopDebug operation.",0
              ALIGN

.Init         STMFD r13!,{r14}
              MOV   r0,#6
              MOV   r3,#256+12
              SWI   "XOS_Module"
              BVS   No_RMA
              STR   r2,[r12]
              LDMFD r13!,{r15}^
.No_RMA
              LDMFD      r13!,{r14}
              ADR        r0,No_RMA_block
              ORRS       r15,r14,#1<<28
.No_RMA_block
              dd         &101
              db         "Not enough memory in module area.",0
              ALIGN
.Final
              STMFD      r13!,{r14}
              MOV        r0,#7
              LDR        r2,[r12]
              SWI        "XOS_Module"
              LDMFD      r13!,{r15}^
              

.PollWordAddress
              ADR   r0,poll_word
              MOV   r15,r14

.ResetPollWord
              MOV   r0,#0
              STR   r0,poll_word
              MOV   r15,r14

.poll_word    dd    0

              ; r0 -> String
              ; r1 -  Variable #1
              ; r2 -  Variable #2
              ; r3 -  Variable #3
.Report       STMFD r13!,{r0-r12,r14}
              STR   r12,poll_word
              STR   r1,[r12],#4
              STR   r2,[r12],#4
              STR   r3,[r12],#4
.00           LDRB  r1,[r0],#1
              STRB  r1,[r12],#1
              CMP   r1,#32
              BGE   00
              MOV   r1,#13 ;Terminator is CR - for BASIC decoder
              STRB  r1,[r12]
              LDMFD r13!,{r0-r12,r15}^

#end
