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 / SB180 / RAMFIX.LBR / TSTDSK.1Z0 / TSTDSK.180
Text File  |  2000-06-30  |  3KB  |  142 lines

  1. cr    equ    13
  2. lf    equ    10
  3.  
  4. wboot    equ    0
  5. dfcb    equ    5Ch        ; Default File Control block
  6.  
  7.     public    $memry
  8.     extrn    cout,print,pa2hc,phl4hc
  9.     extrn    cin
  10.     extrn    f$open,f$read,f$close
  11.     extrn    setdma
  12.  
  13.     ld    a,(dfcb+1)
  14.     cp    a,'/'
  15.     jp    z,help
  16.  
  17.     ld    de,fcb        ; Get file control block
  18.     ld    a,(dfcb)    ; Get disk number
  19.     ld    (de),a        ; And set in FCB
  20.     or    a,a        ; See if we have one
  21.     jp    z,nodisk    ; No, complain
  22.  
  23.     call    f$open        ; And open
  24.     or    a,a        ; See if we have file
  25.     jp    nz,openerr    ; Show error
  26.  
  27.     ld    b,8        ; Read 8 sectors
  28. file_loop:
  29.     push    bc        ; Save counter
  30.     ld    hl,($memry)    ; Get buffer pointer
  31.     call    setdma        ; And set the DMA
  32.     ld    de,fcb        ; Get file control block
  33.     call    f$read        ; And read the file
  34.     or    a,a        ; Check status
  35.     jp    nz,read_err
  36.     pop    de        ; Get count
  37.     push    de        ; And put back on stack
  38.     ld    a,8
  39.     sub    a,d
  40.     ld    d,a        ; Get count of sectors read
  41.     ld    e,128        ; And length of sector
  42.     mlt    de        ; Set offset to beginning of sector
  43.     call    tstbuf
  44.     pop    bc        ; Get counter
  45.     djnz    file_loop
  46.  
  47.     ld    de,fcb
  48.     call    f$close
  49.     jp    wboot        ; All done
  50.  
  51. tstbuf:
  52.     ld    c,10        ; Maximum errors reported
  53.     ld    b,128        ; Number of bytes to test
  54.     ld    hl,($memry)    ; Point to buffer
  55.     ex    de,hl
  56.     or    a,a        ; Clear carry
  57.     sbc    hl,de
  58.     ex    de,hl        ; Should prime de for offset
  59.     ld    a,(fill_seed)    ; Get our pattern
  60. tstbuf_loop:
  61.     cp    a,(hl)        ; Test pattern
  62.     jp    z,$1
  63.     push    hl        ; Save our place
  64.     add    hl,de        ; Get offset
  65.     call    print
  66.     db    cr,lf,'TSTDSK: Byte error disk ',0
  67.     push    af
  68.     ld    a,(fcb)
  69.     add    a,'A'-1
  70.     call    cout
  71.     pop    af
  72.     call    print
  73.     db    ' at ',0
  74.     call    phl4hc
  75.     pop    hl
  76.     call    print
  77.     db    ' Should be ',0
  78.     call    pa2hc
  79.     call    print
  80.     db    'h Is: ',0
  81.     push    af        ; Save pattern
  82.     ld    a,(hl)
  83.     call    pa2hc
  84.     pop    af
  85.     call    print
  86.     db    'h.',0
  87.     dec    c        ; Bump error count
  88. ;    jr    nz,$1
  89.     call    print
  90.     db    ' Continue (Y or N)?',0
  91.     push    af        ; Save pattern
  92.     call    cin
  93.     and    a,5Fh
  94.     cp    a,'Y'
  95.     jp    nz,wboot
  96.     pop    af
  97. $1:
  98.     inc    hl        ; Bump pointer
  99. $2:
  100.     rlca            ; Move pattern
  101.     cp    a,10000111b    ; See if it is eigth pattern
  102.     jr    z,$2        ; Yes, skip over it
  103. ;    djnz    tstbuf_loop    ; get next one
  104.     dec    b
  105.     jp    nz,tstbuf_loop    ; Get next one
  106.     ld    (fill_seed),a    ; Save for next time
  107.     ret
  108.  
  109. help:
  110.     call    print
  111.     db    cr,lf,'USAGE: TSTDSK <disk>:'
  112.     db    cr,lf,'Will read a file "!!!TESTF.TST" on indicated drive with'
  113.     db    cr,lf,'  unique data pattern previously set by "CRTST".',0
  114.     jp    wboot
  115.  
  116. nodisk:
  117.     call    print
  118.     db    cr,lf,'TSTDSK: Disk must be specified.',0
  119.     jp    wboot
  120.  
  121. read_err:
  122. openerr:
  123.     call    print
  124.     db    cr,lf,'TSTDSK: Error in opening file "!!!TESTF.TST" on disk ',0
  125.     ld    a,(fcb)
  126.     add    a,'A'-1        ; Make into disk name
  127.     call    cout
  128.     call    print
  129.     db    '.',0
  130.     jp    wboot
  131.  
  132. fill_seed
  133.     db    00001111b    ; First of test pattern
  134. $memry    ds    2        ; Bottom of free memory
  135. fcb:
  136.     db    0
  137.     db    '!!!TESTF'
  138.     db    'TST'
  139.     ds    24
  140.  
  141.     end
  142.