home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / MISC / INSIDCPM.LBR / XDPB.AQM / XDPB.ASM
Assembly Source File  |  2000-06-30  |  2KB  |  89 lines

  1. ; * * * * *    XDPB -- DISPLAY THE DISK PARAMETER BLOCK
  2. ;
  3.     MACLIB    CPMEQU    ; standard names
  4.     MACLIB    PROG    ; prolog, service macros
  5.     MACLIB    HEXSUB    ; hex display routines
  6.     MACLIB    COSUB    ; console output routines
  7. ;
  8.     PROLOG    30,DPB
  9. ;
  10. DISPLAY    EQU    $
  11.     DB    'Disk Parameter Block for drive '
  12. DRIVE    DS    1    ! DB  CR,LF
  13.     DB    'SPT: '
  14. SPT    DS    4    ! DB ' records per track',CR,LF
  15.     DB    'BSH: '
  16. BSH    DS    2    ! DB '   recno >> BSH = block number',CR,LF
  17.     DB    'BLM: '
  18. BLM    DS    2    ! DB '   recno AND BLM = record in block',CR,LF
  19.     DB    'EXM: '
  20. EXM    DS    2    ! DB '   logical extent versus physical',CR,LF
  21.     DB    'DSM: '
  22. DSM    DS    4    ! DB ' highest block number (origin 0)',CR,LF
  23.     DB    'DRM: '
  24. DRM    DS    4    ! DB ' highest directory number (origin 0)',CR,LF
  25.     DB    'ALV: '
  26. ALV    DS    4    ! DB ' bits reserving directory blocks',CR,LF
  27.     DB    'CKS: '
  28. CKS    DS    4    ! DB ' size of check vector in bytes',CR,LF
  29.     DB    'OFF: '
  30. OFF    DS    4    ! DB ' number of reserved tracks',CR,LF+80H
  31. ;
  32. DPB    EQU    $
  33.     LDA    CPMFCB    ; drivecode given?
  34.     DCR    A    ; convert A=01 into A=00
  35.     JP    DPB2    ; (yes, one was given)
  36.     SERVICE    25    ; no drivecode, get current disk
  37. DPB2    MOV    E,A    ; save for select service
  38.     ADI    'A'    ; make drivecode printable,
  39.     STA    DRIVE    ; ..put into display
  40.     SERVICE    14    ; ..and select it
  41.     SERVICE    31    ; HL --> DPB for current disk
  42.     PUSH    H    ; (save it for dump)
  43. ;
  44.     LXI    D,SPT    ; DE --> field in display
  45.     CALL    CVT2    ; make printable, advance HL & DE
  46. ;
  47.     LXI    D,BSH ! CALL CVT1
  48.     LXI    D,BLM ! CALL CVT1
  49.     LXI    D,EXM ! CALL CVT1
  50.     LXI    D,DSM ! CALL CVT2
  51.     LXI    D,DRM ! CALL CVT2
  52.     LXI    D,ALV ! CALL CVT1 ! CALL CVT1
  53.     LXI    D,CKS ! CALL CVT2
  54.     LXI    D,OFF ! CALL CVT2
  55.     LXI    H,DISPLAY
  56.     CALL    COSTR    ; print the whole thing
  57.     POP    H    ; then dump it all in hex
  58.     MVI    B,15
  59.     CALL    HEXDUMP    ! CALL COCRLF
  60. ;
  61.     RET        ; return to CCP
  62. ;
  63. CVT2    EQU    $    ; display 16 bit integer
  64. ; (8080 FORM -- first byte is the least-significant)
  65.     PUSH    H    ; save --> LSB
  66.     INX    H    ; HL --> MSB
  67.     CALL    CVT1    ; ..convert, store that
  68.     XTHL        ; save HL, HL --> LSB
  69.     CALL    CVT1    ; ..convert, store that
  70.     POP    H    ; HL --> next data
  71.     RET
  72. ;
  73. CVT1    EQU    $    ; display byte at HL++
  74.     MOV    A,M    ; get byte
  75.     INX    H    ; .. advance HL
  76. CVT1A    CALL    HEXBYTE    ; A, C = ASCII display
  77.     STAX    D    ; put left in display
  78.     INX    D
  79.     MOV    A,C    ; put right in display
  80.     STAX    D
  81.     INX    D
  82.     RET
  83. ;
  84. ; * * * * * COMMON SUBROUTINES
  85. ;
  86.     HEXSUBM
  87.     COSUBM
  88.     END
  89.