home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / maclib / debug.mac < prev    next >
Text File  |  1983-09-09  |  2KB  |  136 lines

  1. ;; **** DEBUG MACRO LIBRARY ****
  2. ;;    Routines    Length (Bytes)
  3. ;;    EXIT        275, 263+ (if argument specified)
  4. ;;    PRINT        19+
  5. ;;    PRINTC        17+
  6. ;;    REGS        241
  7.  
  8.     IF1
  9.     .PRINTX ! DEBUG MACRO Library Included !
  10.     ENDIF
  11.  
  12.  
  13. ;; PRINT -- PRINT STRING IN ARGUMENT LIST
  14. ;;    E.G., PRINT <THIS IS A TEST>
  15. ;;    STRING IS FOLLOWED BY A <CR> <LF>
  16. PRINT    MACRO    TEXT
  17.     LOCAL    PRNT,STR
  18.     JMP    PRNT
  19. STR:    DB    '&TEXT'
  20.     DB    0DH,0AH,'$'
  21. PRNT:    PUSH    PSW
  22.     PUSH    B
  23.     PUSH    D
  24.     PUSH    H
  25.     MVI    C,9
  26.     LXI    D,STR
  27.     CALL    5
  28.     POP    H
  29.     POP    D
  30.     POP    B
  31.     POP    PSW
  32.  
  33.     ENDM
  34.  
  35. ;; PRINTC -- PRINT CHARS IN ARGUMENT LIST
  36. ;;    E.G., PRINTC <'THIS IS A TEST',0DH,0AH>
  37. ;;    CHARS ARE NOT FOLLOWED BY A <CR> <LF>
  38. PRINTC    MACRO    TEXT
  39.     LOCAL    PRNT,STR
  40.     JMP    PRNT
  41. STR:    DB    TEXT
  42.     DB    '$'
  43. PRNT:    PUSH    PSW
  44.     PUSH    B
  45.     PUSH    D
  46.     PUSH    H
  47.     MVI    C,9
  48.     LXI    D,STR
  49.     CALL    5
  50.     POP    H
  51.     POP    D
  52.     POP    B
  53.     POP    PSW
  54.  
  55.     ENDM
  56.  
  57. ;; REGS -- PRINT VALUES OF ALL REGISTERS ON ONE LINE
  58. REGS    MACRO
  59.     LOCAL    PRNTA,PRNTA0,PRNTA1,REGS1
  60.     JMP    REGS1
  61. PRNTA:    PUSH    PSW
  62.     PUSH    B
  63.     PUSH    D
  64.     PUSH    H
  65.     PUSH    PSW    ; SAVE A
  66.     RLC        ; EXCHANGE NYBBLES
  67.     RLC
  68.     RLC
  69.     RLC
  70.     CALL    PRNTA0    ; PRINT HIGH NYBBLE OF A AS HEX
  71.     POP    PSW    ; GET A
  72.     CALL    PRNTA0    ; PRINT LOW NYBBLE OF A AS HEX
  73.     MVI    E,' '    ; PRINT <SP>
  74.     MVI    C,2
  75.     CALL    5
  76.     POP    H
  77.     POP    D
  78.     POP    B
  79.     POP    PSW
  80.     RET
  81. PRNTA0:    ANI    0FH    ; LOW-ORDER NYBBLE FIRST
  82.     ADI    '0'    ; CONVERT TO ASCII
  83.     CPI    '9'+1    ; A-F?
  84.     JC    PRNTA1
  85.     ADI    7    ; CONVERT TO A-F
  86. PRNTA1:    MOV    E,A    ; CHAR IN E
  87.     MVI    C,2    ; PRINT
  88.     CALL    5
  89.     RET
  90. REGS1:    PUSH    B    ; SAVE BC
  91.     PUSH    PSW    ; SAVE A
  92.     POP    B    ; GET OLD PSW IN BC
  93.     PUSH    B    ; PLACE BACK ON STACK
  94.     PRINTC    <'A= '>
  95.     MOV    A,B    ; HIGH FIRST
  96.     CALL    PRNTA
  97.     PRINTC    <'  Flags= '>
  98.     MOV    A,C    ; LOW
  99.     CALL    PRNTA
  100.     PRINTC    <'  BC= '>
  101.     POP    PSW    ; RESTORE A
  102.     POP    B    ; RESTORE BC
  103.     PUSH    PSW    ; SAVE A
  104.     MOV    A,B
  105.     CALL    PRNTA
  106.     MOV    A,C
  107.     CALL    PRNTA
  108.     PRINTC    <'  DE= '>
  109.     MOV    A,D
  110.     CALL    PRNTA
  111.     MOV    A,E
  112.     CALL    PRNTA
  113.     PRINTC    <'  HL= '>
  114.     MOV    A,H
  115.     CALL    PRNTA
  116.     MOV    A,L
  117.     CALL    PRNTA
  118.     PRINTC    <0DH,0AH>
  119.     POP    PSW    ; RESTORE A
  120.  
  121.     ENDM
  122.  
  123. ;; EXIT -- PRINT REGISTER VALUES AND RETURN TO CP/M
  124. ;;   OPTIONAL MESSAGE MAY BE PRINTED
  125. EXIT    MACRO    MESSAGE
  126.     IFB    <MESSAGE>
  127.     PRINT    <Exit to CP/M>
  128.     ELSE
  129.     PRINT    <MESSAGE>
  130.     ENDIF
  131.     REGS
  132.     JMP    0    ; RETURN TO CP/M
  133.  
  134.     ENDM
  135.  
  136.