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 / SIMTEL / CPMUG / CPMUG035.ARK / DSKRD.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  2KB  |  66 lines

  1. ; 1 AUG 79; MOD TO REDUCE BY 1 SECTOR THE READING (IT IS 
  2. ; OVERREADING NOW. MOSHELL)
  3. ;
  4. * THIS ROUTINE READS A SPECIFIED DISK FILE INTO A SPECIFIED MEMORY AREA.
  5. * THE STARTING ADDRESS OF THE MEMORY AREA IS PASSED BY THE CALLER IN
  6. * HL AND THE DISK FILE IS SPECIFIED BY A PROPERLY FORMED FCB IN THE  CP/M
  7. * DEFAULT FCB AREA (CURRENTLY HEX 5C).  THE READ IS DONE BY RE-SPECIFYING
  8. * THE READ BUFFER EACH TIME WE HAVE A SUCCESSFUL READ.  THUS THE BUFFER
  9. * IS FIRST AT THE DESIRED START ADDRESS AND IS CONTINUALLY INCREMENTED
  10. * IN BLOCKS OF "BUFLEN" (# OF BYTES READ IN EACH DISK READ OPERATION) UNTIL
  11. * THE ENTIRE FILE IS READ IN.
  12. * ALL REGISTERS (EXCEPT A) ARE SAVED.
  13.     ORG    5227H
  14. OPEN    EQU    500CH
  15. CLOSE    EQU    500FH
  16. READBF    EQU    5012H
  17. DMASET    EQU    5036H
  18. PRINT    EQU    502DH
  19. CRLF    EQU    5024H
  20. DEFFCB    EQU    05CH
  21. BUFLEN    EQU    080H
  22. DEFBUF    EQU    080H
  23. STOP    EQU    '$'
  24. DSKRD:    PUSH    B ! PUSH D ! PUSH H
  25.     LXI    B,DEFBUF    ;GET @ OF DEFAULT BUFFER INTO B
  26.     LXI    D,DEFFCB    ;WE WILL WORK WITH THE DEFAULT FCB
  27.     CALL    OPEN    ;OPEN THE SPECIFIED FILE
  28.     CPI    0FFH    ;DOES IT EXIST?
  29.     JZ    OPENERR    ;NO--PRINT ERROR MESSAGE AND REBOOT
  30. * READ BUFFERS FROM DISK UNTIL THERE AREN'T ANY MORE LEFT
  31. RDLOOP:    LXI    D,DEFFCB
  32.     CALL    READBF
  33.     ORA    A
  34.     JNZ    NODATA    ;FINISHED,OR ERROR
  35.     LXI    B,DEFBUF;GET DEFAULT BUFF.ADDR
  36.     MVI    D,BUFLEN ;COUNTER FOR TRANSFER
  37. MOVELOOP: LDAX    B
  38.     MOV    M,A    ;STORE A BYTE
  39.     INX    H
  40.     INX    B
  41.     DCR    D
  42.     JNZ    MOVELOOP
  43.     JMP    RDLOOP
  44. NODATA:    CPI    3    ;IS RETURN VALUE FROM READ THREE OR MORE?
  45.     JNC    RDERROR    ;YES--WE HAVE UNKNOWN RETURN VALUE:   THEREFORE--ERROR!
  46.     CALL    CLOSE    ;NO--WE'RE FINISHED AND WE CLOSE THE FILE
  47.     CPI    0FFH    ;HAS SOMETHING HAPPENED TO THE FILE?
  48.     JZ    CLOSERR    ;YES--TELL ABOUT IT  AND REBOOT
  49.     POP    H ! POP D ! POP B
  50.     RET
  51. OPENERR: LXI    H,MESS1    ;PRINT AN ERROR MESSAGE
  52.     CALL    PRINT
  53.     CALL    CRLF
  54.     JMP    0    ;REBOOT
  55. MESS1    DB    'WE HAVE NO FILE BY THAT NAME',STOP
  56. CLOSERR: LXI    H,MESS2    ;PRINT ERROR MESSAGE
  57.     CALL    PRINT
  58.     CALL    CRLF
  59.     JMP    0    ;REBOOT
  60. MESS2    DB    'CANNOT CLOSE FILE',STOP
  61. RDERROR: LXI    H,MESS3    ;PRINT ERROR MESSAGE AND REBOOT
  62.     CALL    PRINT
  63.     CALL    CRLF
  64.     JMP    0
  65. MESS3    DB    'FILE READ ERROR',STOP
  66.