home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / misc / insidcpm.lbr / RECTRAN.AQM / RECTRAN.ASM
Assembly Source File  |  1985-02-09  |  2KB  |  73 lines

  1. ; * * * * *    RECTRAN -- DISPLAY SKEW TRANSLATION
  2. ;
  3.     MACLIB    CPMEQU   ; standard names
  4.         MACLIB  PROG     ; prolog, service macros
  5.         MACLIB  COSUB    ; console output
  6.         MACLIB  HEXSUB   ; hex displays
  7.         MACLIB  BIOSCALL ; bios interface
  8. ;
  9.     PROLOG    30,RECTRAN
  10. ;
  11. HEADING    DB    'Record skew pattern for disk '
  12. DRIVE   DB      0,CR,LF,CR,LF+80H
  13. NOXLATE DB      'that disk needs no translation.',CR,LF+80H
  14. NRECS   DW      0
  15. PLENGTH EQU     16
  16. NPRINT  DB      0
  17. ;
  18. RECTRAN    EQU    $
  19.     MVI    A,PLENGTH
  20.     STA    NPRINT    ; initialize count of numbers
  21.         LDA    CPMFCB  ; see if drive specified
  22.         DCR    A       ; convert FCB for to service 14 form
  23.         JP    REC2    ; (yes, drive given)
  24.         SERVICE    25      ; omitted, get current drive
  25. REC2    MOV    E,A     ; save drive for service 14
  26.         MOV    C,A     ; ..and for BIOS seldsk call
  27.         ADI    'A'     ; make printable
  28.         STA    DRIVE   ; ..put in heading & print
  29.         LXI    H,HEADING ! CALL COSTR
  30.         SERVICE    14      ; establish drive to BDOS
  31.         SERVICE    31      ; HL --> DPB, set DE = SPT
  32.         MOV  E,M ! INX  H ! MOV  D,M
  33.         XCHG            ; save records/track
  34.         SHLD    NRECS   ; ..for loop control
  35.         MVI    A,B$SELDSK
  36.         CALL    BIOS    ; HL --> DPH, set DE --> xlate table
  37.         MOV  E,M ! INX  H ! MOV  D,M
  38.         MOV    A,E     ; if that address is zero,
  39.         ORA    D       ; ..no translation is done.
  40.         JNZ    REC3
  41.         LXI    H,NOXLATE ! CALL COSTR
  42.         RET             ; ..in which case, quit
  43. REC3    LXI    B,0     ; clear record number
  44. ;
  45. RECLOOP    MVI    A,B$SECTRAN
  46.         CALL    BIOS    ; HL = xlate(BC)
  47.         CALL    PRINT   ; display the result
  48.         LHLD    NRECS   ; decrement loop variable
  49.         DCX    H
  50.         MOV  A,L ! ORA  H
  51.         RZ              ; return to CCP if done
  52.         SHLD    NRECS   ; save loop count
  53.         INX    B       ; step record number
  54.         JMP    RECLOOP ; and continue
  55. ;
  56. PRINT    CALL    HEXADDR ; print HL as hex word
  57.         CALL    COSPACE ; ..and a space
  58.         LDA    NPRINT  ; see if end of line
  59.         DCR    A
  60.         STA    NPRINT
  61.         RNZ             ; (no, continue)
  62.         MVI    A,PLENGTH
  63.         STA    NPRINT  ; refresh line count
  64.         CALL    COCRLF  ; start a new line
  65.         RET
  66. ;
  67. ;  COMMON SUBROUTINES
  68. ;
  69.         COSUBM
  70.         HEXSUBM
  71.         BIOSM
  72.         END
  73.