; > Debug ; Debug routines ; Debug_Hex ; Debug_Hex2 ; Debug_Oct ; Debug_Char ; Debug_Spc ; Debug_DumpRegsOct ; Debug_DumpRegsHex ; Debug_DumpLine ; Debug_DumpMem ; Print R0 as hex byte ; -------------------- .Debug_Hex mov r0,-(sp) jsr pc,prhex mov (sp)+,r0 rts pc ; Print R0 as hex word ; -------------------- .Debug_Hex2 mov r0,-(sp) jsr pc,pr2hex mov (sp)+,r0 rts pc ; Print R0 as octal word ; ---------------------- .Debug_Oct mov r0,-(sp) jsr pc,proct mov (sp)+,r0 rts pc ; Print R0 as character or dot ; ---------------------------- .Debug_Char mov r0,-(sp) cmp r0,#127 beq Debug_CharDot cmp r0,#32 bcc Debug_CharOk .Debug_CharDot mov #ASC".",r0 .Debug_CharOk jsr pc,IO_WRCH mov (sp)+,r0 rts pc ; Print a space ; ------------- .Debug_Spc mov #32,r0 jsr pc,IO_WRCH rts pc ; Dump registers ; -------------- .Debug_DumpRegsOct mov r0,-(sp) jsr pc,Debug_Oct jsr pc,Debug_Spc mov r1,r0 jsr pc,Debug_Oct jsr pc,Debug_Spc mov r2,r0 jsr pc,Debug_Oct jsr pc,Debug_Spc mov r3,r0 jsr pc,Debug_Oct jsr pc,Debug_Spc mov r4,r0 jsr pc,Debug_Oct jsr pc,Debug_Spc mov r5,r0 jsr pc,Debug_Oct jsr pc,Debug_Spc mov r6,r0 jsr pc,Debug_Oct jsr pc,Debug_Spc jsr pc,IO_NEWL mov (sp)+,r0 rts pc ; Dump registers ; -------------- .Debug_DumpRegsHex mov r0,-(sp) jsr pc,Debug_Hex2 jsr pc,Debug_Spc mov r1,r0 jsr pc,Debug_Hex2 jsr pc,Debug_Spc mov r2,r0 jsr pc,Debug_Hex2 jsr pc,Debug_Spc mov r3,r0 jsr pc,Debug_Hex2 jsr pc,Debug_Spc mov r4,r0 jsr pc,Debug_Hex2 jsr pc,Debug_Spc mov r5,r0 jsr pc,Debug_Hex2 jsr pc,Debug_Spc mov r6,r0 jsr pc,Debug_Hex2 jsr pc,IO_NEWL mov (sp)+,r0 rts pc ; Dump line at R5 ; --------------- .Debug_DumpLine mov r0,-(sp) ; push r0 mov r5,-(sp) ; push r5 .DumpLineLp1 movb (r5)+,r0 jsr pc,prhex mov #32,r0 jsr pc,IO_WRCH movb &FFFD(r5),r0 cmp r0,#13 bne DumpLineLp1 jsr pc,IO_NEWL ; mov (sp),r5 ; get r5 back .DumpLineLp2 mov #32,r0 jsr pc,IO_WRCH movb (r5)+,r0 jsr pc,Debug_Char mov #32,r0 jsr pc,IO_WRCH movb &FFFD(r5),r0 cmp r0,#13 bne DumpLineLp2 jsr pc,IO_NEWL ; mov (sp)+,r5 ; pop R5 mov (sp)+,r0 ; restore R0 rts pc ; Dump one line of memory at R5 ; ----------------------------- .Debug_DumpMemOne mov r0,-(sp) ; push r0 mov r1,-(sp) ; push r1 mov r2,-(sp) ; push r2 mov r5,-(sp) ; push r5 mov #1,r2 ; Dump one line br DumpMemLp0 ; Dump three line of memory at R5 ; ------------------------------- .Debug_DumpMem mov r0,-(sp) ; push r0 mov r1,-(sp) ; push r1 mov r2,-(sp) ; push r2 mov r5,-(sp) ; push r5 mov #3,r2 ; Dump three lines .DumpMemLp0 mov r5,r0 jsr pc,pr2hex mov #32,r0 jsr pc,IO_WRCH mov #16,r1 ; Dump 16 bytes .DumpMemLp1 movb (r5)+,r0 jsr pc,prhex mov #32,r0 jsr pc,IO_WRCH dec r1 bne DumpMemLp1 jsr pc,IO_NEWL ; mov #32,r0 jsr pc,IO_WRCH jsr pc,IO_WRCH jsr pc,IO_WRCH jsr pc,IO_WRCH jsr pc,IO_WRCH mov (sp),r5 ; get r5 back mov #16,r1 .DumpMemLp2 mov #32,r0 jsr pc,IO_WRCH movb (r5)+,r0 jsr pc,Debug_Char mov #32,r0 jsr pc,IO_WRCH dec r1 bne DumpMemLp2 jsr pc,IO_NEWL ; mov r5,(sp) dec r2 bne DumpMemLp0 mov (sp)+,r5 ; pop R5 mov (sp)+,r2 ; pop R2 mov (sp)+,r1 ; pop R1 mov (sp)+,r0 ; pop R0 rts pc .pr2hex mov r0,-(sp) ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 jsr pc,prhex mov (sp)+,r0 .prhex mov r0,-(sp) ror r0 ror r0 ror r0 ror r0 jsr pc,prnybble mov (sp)+,r0 .prnybble bic #&FFF0,r0 cmp #9,r0 bcc prdigit add #7,r0 br prdigit .proctdigit bic #&FFF8,r0 .prdigit add #48,r0 jmp IO_WRCH .proct mov r0,-(sp) ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 bic #&FFFE,r0 jsr pc,proctdigit mov (sp),r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 jsr pc,proctdigit mov (sp),r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 jsr pc,proctdigit mov (sp),r0 ror r0 ror r0 ror r0 ror r0 ror r0 ror r0 jsr pc,proctdigit mov (sp),r0 ror r0 ror r0 ror r0 jsr pc,proctdigit mov (sp)+,r0 jsr pc,proctdigit rts pc