home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / cpmug / cpmug006.ark / IDUMP.ASM < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  2.7 KB  |  150 lines

  1. ;IDUMP - INTERPRETED FILE DUMP
  2. ;MOD. PUT L/F AFTER C/R 10/29/77
  3.     ORG    100H    ;TO TPA
  4. ;INIT PRIVATE STACK
  5.     LXI    H,0
  6.     DAD    SP
  7.     SHLD    STACK
  8.     LXI    SP,STACK    
  9. ;IS THERE AN FCB?
  10.     LDA    FCB+1
  11.     CPI    ' '
  12.     JZ    NOFCB
  13. ;OPEN FILE
  14.     LXI    D,FCB
  15.     MVI    C,OPEN
  16.     CALL    BDOS
  17.     INR    A    ;OPEN OK?
  18.     JZ    OPNER
  19. ;READ SECTOR, DUMP IN HEX
  20. RDLP    LXI    D,FCB
  21.     MVI    C,READ
  22.     CALL    BDOS
  23.     ORA    A    ;READ OK?
  24.     JNZ    RDER    ;NO, CHECK EOF
  25. ;DUMP IN HEX
  26.     LXI    D,80H    ;POINT TO BUFFER
  27.     LHLD    ADDR    ;GET ADDR TO PRINT
  28.     DAD    D    ;BUMP BY 128
  29.     SHLD    ADDR    ;SAVE FOR NEXT SECTOR
  30. LINE    MOV    A,H    ;GET ADDR
  31.     CALL    XO    ;TYPE IN HEX
  32.     MOV    A,L    ;GET LO ADDR
  33.     CALL    XOB    ;TYPE, SPACE
  34.     PUSH    D    ;SAVE DATA ADDR FOR ASCII
  35. CHAR    LDAX    D    ;GET CHAR
  36.     INX    D    ;POINT TO NEXT
  37.     INX    H    ;INCR ADDRESS
  38.     CALL    XO    ;PRINT IN HEX
  39.     MOV    A,E    ;GET ADDR
  40.     ANI    3    ;TIME TO SPACE?
  41.     CZ    SPACE    ;..YES
  42.     MOV    A,E    ;GET ADDR AGAIN
  43.     ANI    0FH    ;END OF LINE?
  44.     JNZ    CHAR
  45. ;END OF HEX, PRINT ASCII
  46.     POP    D    ;GET DATA ADDR
  47.     CALL    AST    ;PRINT '*'
  48. ASCIC    LDAX    D    ;GET CHAR
  49.     CPI    ' '    ;PRINTABLE?
  50.     JC    PER    ;..NO
  51.     CPI    'Z'+1
  52.     JC    OK
  53. PER    MVI    A,'.'    ;PRINT '.' FOR UNPRINTABLE
  54. OK    CALL    TYPE    ;TYPE CHAR
  55.     INX    D
  56.     MOV    A,E    ;END OF LINE?
  57.     ANI    0FH
  58.     JNZ    ASCIC    ;MORE ASCII CHARS
  59.     CALL    AST    ;PRINT '*'
  60.     MVI    A,13    ;GET ASCII C/R
  61.     CALL    TYPE
  62.     MVI    A,10    ;GET ASCII L/F
  63.     CALL    TYPE
  64. ;END OF SECTOR?
  65.     MOV    A,E    ;GET ADDR
  66.     ANI    7FH    ;ISOLATE
  67.     JZ    RDLP    ;READ SECTOR
  68.     JMP    LINE
  69. ;SUBROUTINES
  70. ;
  71. ;TYPE ASTERISK
  72. AST    MVI    A,'*'
  73. ;TYPE CHAR IN A
  74. TYPE    PUSH    B
  75.     PUSH    D
  76.     PUSH    H
  77.     MOV    E,A    ;SET UP
  78.     MVI    C,WRCON    ;WRITE
  79.     CALL    BDOS    ;CONSOLE
  80. ;CHECK FOR ABORT
  81.     MVI    C,CONST    ;READ CONSOLE STATUS
  82.     CALL    BDOS
  83.     DCR    A    ;CHAR TYPED?
  84.     JZ    EXIT
  85.     POP    H
  86.     POP    D
  87.     POP    B
  88.     RET
  89. ;HEX OUTPUT
  90. XO    PUSH    PSW    ;SAVE CHAR
  91.     RAR
  92.     RAR
  93.     RAR
  94.     RAR
  95.     CALL    NIBBL
  96.     POP    PSW
  97. NIBBL    ANI    0FH
  98.     CPI    10
  99.     JC    HEXNU
  100.     ADI    7
  101. HEXNU    ADI    '0'
  102.     JMP    TYPE
  103. ;HEX OUTPUT W/BLANK
  104. XOB    CALL    XO
  105. ;SPACE
  106. SPACE    MVI    A,' '
  107.     JMP TYPE
  108. ;READ ERROR - CHECK FOR EOF
  109. RDER    DCR    A    ;WAS IT 1?
  110.     JNZ    RDERR    ;NO, GENUINE READ ERROR
  111. ;EOF REACHED
  112.     JMP    EXIT
  113. NOFCB    LXI    D,MSG1
  114.     JMP    ERXIT
  115. OPNER    LXI    D,MSG2
  116.     JMP    ERXIT
  117. RDERR    LXI    D,MSG3    ;READ ERROR 
  118.     JMP    ERXIT
  119. ERXIT    MVI    C,PRINT
  120.     CALL    BDOS    ;PRINT MESSAGE
  121. EXIT    LHLD    STACK    ;GET ORIGINAL STACK
  122.     SPHL        ;RESTORE IT
  123.     RET        ;--EXIT--
  124.     DS    30    ;STACK AREA
  125. STACK    DS    2    ;STACK POINTER
  126. MSG1    DB    'NO FILE$'
  127. MSG2    DB    'NO SUCH FILE$'
  128. MSG3    DB    'READ ERR$'
  129. ADDR    DW    -128    ;ADDR PRINTED -128
  130. ;
  131. ; BDOS EQUATES (VERSION 2)
  132. ;
  133. RDCON    EQU    1
  134. WRCON    EQU    2
  135. PRINT    EQU    9
  136. CONST    EQU    11    ;CONSOLE STATUS
  137. OPEN    EQU    15    ;0FFH=NOT FOUND
  138. CLOSE    EQU    16    ;   "    "
  139. SRCHF    EQU    17    ;   "    "
  140. SRCHN    EQU    18    ;   "    "
  141. ERASE    EQU    19    ;NO RET CODE
  142. READ    EQU    20    ;0=OK, 1=EOF
  143. WRITE    EQU    21    ;0=OK, 1=ERR, 2=?, 0FFH=NO DIR SPC
  144. MAKE    EQU    22    ;0FFH=BAD
  145. REN    EQU    23    ;0FFH=BAD
  146. STDMA    EQU    26
  147. BDOS    EQU    5
  148. REIPL    EQU    0
  149. FCB    EQU    5CH    ;SYSTEM FCB
  150.