home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / debug / q.asm < prev    next >
Encoding:
Assembly Source File  |  1994-07-13  |  4.6 KB  |  204 lines

  1. ;q.asm - dumps TPA size and 00-ff.
  2. ;
  3. ;    If given an operand: @xxxx
  4. ;    the dump will start at hex xxxx.
  5. ;    press control-c to stop.
  6. ;
  7. ;    While dumping, pressing the space
  8. ;    bar bumps the address by 100.
  9. ;
  10. BDOS    EQU    5
  11. CONST    EQU    11
  12. CONIN    EQU    1
  13. FCB    EQU    5CH
  14.     ORG    100H
  15. ;    
  16. ;INIT LOCAL STACK
  17. ;
  18.     LXI    H,0        ;HL=0
  19.     DAD    SP        ;HL=STACK
  20.     SHLD    STACK        ;SAVE IT
  21.     LXI    SP,STACK    ;LOAD LOCAL STACK
  22. ;
  23.     LDA    FCB+1        ;SEE IF 
  24.     CPI    '@'        ;    @XXXX
  25.     JZ    DUMPAT        ;    YES, GET ADDR
  26. ;
  27. ;PRINT BDOS ENTRY ADDRESS
  28. ;
  29. TPASIZE    LHLD    BDOS+1        ;GET JMP TO BDOS
  30. ;
  31. ; remove following instruction to have Q print BDOS entry
  32. ; address instead of TPA size (which is BDOS-100).
  33. ;
  34.      DCR    H        ;compute TPA size
  35.     CALL    PRADDR        ;PRINT THE ADDR
  36.     CALL    CRLF        ;    THEN CR-LF
  37.     CALL    CRLF        ;    AND AGAIN
  38. DUMP0    LXI    H,0        ;GET DEFAULT ADDR
  39. LP    CALL    PRADDR        ;PRINT THE ADDR
  40.     CALL    PRLINE        ;THEN THE LINE
  41.     INR    H        ;THIS SETS PSW TO
  42.     DCR    H        ;    ZERO IF H=0
  43.     JZ    LP        ;LOOP IF NOT YET 
  44.                 ;AT 0100 (H = 01)
  45. ;
  46. ;RETURN TO CP/M
  47. ;
  48. EXIT    LHLD    STACK        ;GET CP/M'S STACK
  49.     SPHL            ;RESTORE IT
  50.     RET            ;    AND RETURN
  51. ;
  52. ;PRINT ADDR IN HEX
  53. ;
  54. PRADDR    MOV    A,H        ;GET H
  55.     CALL    HEX        ;    AND PRINT IT
  56.     MOV    A,L        ;THEN L
  57.     CALL    HEX        ;    AND PRINT IT
  58. ;
  59. ;SPACE 2 TIMES
  60. ;
  61. SPACE2    CALL    SPACE        
  62. ;
  63. ;SPACE ONCE
  64. ;
  65. SPACE    MVI    A,' '
  66. ;
  67. ;CONSOLE OUT
  68. ;
  69. CONOUT    PUSH    B        ;SAVE 
  70.     PUSH    D        ;    THE
  71.     PUSH    H        ;    REGS
  72.     MOV    E,A        ;CHAR IN E FOR BDOS
  73.     MVI    C,2        ;FUNCTION 2 = WRITE CON.
  74.     CALL    BDOS        ;PRINT THE CHAR
  75.     POP    H        ;RESTORE
  76.     POP    D        ;    THE
  77.     POP    B        ;    REGS
  78.     RET            ;AND RETURN
  79. ;
  80. ;PRINT (A) IN HEX
  81. ;
  82. HEX    PUSH    PSW        ;SAVE INCOMING
  83.     RAR            ;ROTATE LEFT
  84.     RAR            ;    4 BITS
  85.     RAR            ;    INTO
  86.     RAR            ;    RIGHT 4
  87.     CALL    NIBBL        ;PRINT THEM
  88.     POP    PSW        ;GET BACK, 
  89. NIBBL    ANI    0FH        ;ISOLATE NIBBLE
  90.     ADI    90H        ;SEE TEXT FOR 
  91.     DAA            ;    EXPL OF 
  92.     ACI    40H        ;    THIS BINARY
  93.     DAA            ;    TO ASCII    
  94.     JMP    CONOUT        ;    CONVERSION
  95. ;
  96. ;PRINT ONE LINE
  97. ;
  98. PRLINE    PUSH    H        ;SAVE ADDR
  99. PRHEX    MOV    A,M        ;GET A BYTE
  100.     CALL    HEX        ;PRINT IN HEX
  101. SPACE4    MOV    A,L        ;SEE IF
  102.     ANI    3        ;    TIME
  103.     INR    A        ;    TO 
  104.     CPI    4        ;    SPACE
  105.     CZ    SPACE        ;YES
  106. SPACE8    MOV    A,L        ;SEE IF TIME TO
  107.     ANI    7        ;    DOUBLE
  108.     INR    A        ;    SPACE
  109.     CPI    8        ;    IN COLUMN 8
  110.     CZ    SPACE        ;YES
  111. CKDONE    INX    H        ;TO NEXT BYTE
  112.     MOV    A,L        ;GET LOW ADDR
  113.     ANI    0FH        ;END OF LINE?
  114.     JNZ    PRHEX        ;    NO, LOOP
  115. NOWASC    CALL    FENCE        ;PRINT FENCE CHAR
  116.     POP    H        ;RESTORE ADDR
  117. PRASC    MOV    A,M        ;GET BYTE FOR ASCII
  118.     CPI    ' '        ;SEE IF CONTROL CHAR
  119.     JC    PRPER        ;PRINT PERIOD IF SO
  120. PRTABLE    CPI    7FH        ;SEE IF PRINTABLE
  121.     JC    PRNPER        ;    YES
  122. PRPER    MVI    A,'.'        ;PRINT A PERIOD
  123. PRNPER    CALL    CONOUT        ;PRINT WHAT'S IN A
  124. MORE    INX    H        ;TO NEXT CHAR
  125.     MOV    A,L        ;CHECK LOW ADDR
  126.     ANI    0FH        ;    FOR END OF LINE
  127.     JNZ    PRASC        ;LOOP IF NOT
  128.     CALL    FENCE        ;PRINT CLOSING FENCE
  129. CRLF    MVI    A,0DH        ;THEN "FALL INTO"
  130.     CALL    CONOUT        ;CR/LF ROUTINE
  131.     MVI    A,0AH
  132.     JMP    CONOUT
  133. ;
  134. ;PRINT ASCII DELIMITER CHAR - VERTICAL BAR "FENCE".
  135. ;
  136. FENCE    MVI    A,'|'        ;GET FENCE CHAR
  137.     JMP    CONOUT        ;PRINT IT
  138. ;
  139. ;OPERAND ON COMMAND SAID "@XXXX" SO GET ADDR
  140. ;    
  141. DUMPAT    LXI    D,FCB+2        ;SKIP @ SIGN
  142.     LXI    H,0        ;INIT BINARY RESULT
  143. ;
  144. ;THIS LOOP CONVERTS ASCII TO BINARY
  145. ;
  146. GETAD    LDAX    D        ;GET CHAR OF ADDR
  147.     INX    D        ;POINT TO NEXT
  148.     CPI    ' '        ;SEE IF PAST ADDR
  149.                 ;(REMEMBER FCB IS
  150.                 ; PADDED WITH ' ')
  151.     JZ    DUMPIT        ;IF SO, GO DUMP IT
  152. TIMES16    DAD    H        ;HL =    2 X HL
  153.     DAD    H        ;    4
  154.     DAD    H        ;    8
  155.     DAD    H        ;      16
  156. CKALPHA    CPI    'A'        ;SEE IF CHAR IS 
  157.     JC    NUM        ;    NUMERIC?
  158.                 ;(NOT THOROUGH TEST)
  159.     SUI    7        ;OTHERWISE FUDGE
  160. NUM    SUI    '0'        ;TO MAKE PRINTABLE
  161.                 ;(SEE TEXT)
  162.     ADD    L        ;ADD THIS DIGIT
  163.     MOV    L,A        ;PUT IT BACK
  164.     JMP    GETAD        ;LOOP UNTIL DONE
  165. ;
  166. DUMPIT    CALL    PRADDR        ;FULL DUMP: PRINT ADDR,
  167.     CALL    PRLINE        ;    THEN LINE
  168. CKSTAT    CALL    STAT        ;THEN CHECK FOR INTERRUPT
  169.     JZ    EXIT        ;    AND EXIT IF SO.
  170. STOPAT0    MOV    A,H        ;CHECK IF HL = 0
  171.     ORA    L        ;BY ORING H WITH L
  172.     JNZ    DUMPIT        ;IF EITHER NOT ZERO, LOOP
  173.     JMP    EXIT        ;    ELSE DONE
  174. ;
  175. ;CHECK CONSOLE STATUS, PROCESS CONTROL-S AND CONTROL-C
  176. ;
  177. STAT    PUSH    H        ;SAVE DUMP ADDR POINTER
  178.     MVI    C,CONST        ;GET STATUS FUNCTION
  179.     CALL    BDOS        ;HAVE BDOS CHECK FOR KEY
  180.     POP    H        ;RESTORE ADDR
  181.     ORA    A        ;CHECK RETURN FROM BDOS
  182.     JZ    NSTAT        ;IF NO CHAR, JMP
  183. GETCHAR    PUSH    H        ;GOT A CHAR, SAVE ADDR
  184.     MVI    C,CONIN        ;GET CONSOLE IN FNC.
  185.     CALL    BDOS        ;GET THE CHAR
  186. CKCTLS    MVI    C,CONIN        ;SET UP FOR SECOND READ
  187.     CPI    'S'-40H        ;TEST FOR CTL-S PAUSE
  188.     CZ    BDOS        ;IF SO, READ 2ND CHAR
  189. CKBREAK    POP    H        ;RESTORE ADDR
  190.     CPI    'C'-40H        ;CHECK CHAR FOR ABORT
  191.     JZ    EXIT        ;EXIT IF SO
  192.     CPI    0DH        ;IF CARRIAGE RETURN,
  193.     JZ    EXIT        ;ALSO ABORT
  194. INCRSP    CPI    ' '        ;IF ITS A SPACE, BUMP H.
  195.     RNZ            ;H, O
  196.     INR    H        ;BUMP ADDR BY 100 (H BY 1)
  197.     RET            ;AND RETURN
  198. ;
  199. NSTAT    INR    A        ;NOT INTERRUPT SO JUST
  200.     RET            ;    RETURN A =1
  201. ;
  202.     DS    100        ;STACK SPACE
  203. STACK    DS    2
  204.