home *** CD-ROM | disk | FTP | other *** search
- ; 1 AUG 79; MOD TO REDUCE BY 1 SECTOR THE READING (IT IS
- ; OVERREADING NOW. MOSHELL)
- ;
- * THIS ROUTINE READS A SPECIFIED DISK FILE INTO A SPECIFIED MEMORY AREA.
- * THE STARTING ADDRESS OF THE MEMORY AREA IS PASSED BY THE CALLER IN
- * HL AND THE DISK FILE IS SPECIFIED BY A PROPERLY FORMED FCB IN THE CP/M
- * DEFAULT FCB AREA (CURRENTLY HEX 5C). THE READ IS DONE BY RE-SPECIFYING
- * THE READ BUFFER EACH TIME WE HAVE A SUCCESSFUL READ. THUS THE BUFFER
- * IS FIRST AT THE DESIRED START ADDRESS AND IS CONTINUALLY INCREMENTED
- * IN BLOCKS OF "BUFLEN" (# OF BYTES READ IN EACH DISK READ OPERATION) UNTIL
- * THE ENTIRE FILE IS READ IN.
- * ALL REGISTERS (EXCEPT A) ARE SAVED.
- ORG 5227H
- OPEN EQU 500CH
- CLOSE EQU 500FH
- READBF EQU 5012H
- DMASET EQU 5036H
- PRINT EQU 502DH
- CRLF EQU 5024H
- DEFFCB EQU 05CH
- BUFLEN EQU 080H
- DEFBUF EQU 080H
- STOP EQU '$'
- DSKRD: PUSH B ! PUSH D ! PUSH H
- LXI B,DEFBUF ;GET @ OF DEFAULT BUFFER INTO B
- LXI D,DEFFCB ;WE WILL WORK WITH THE DEFAULT FCB
- CALL OPEN ;OPEN THE SPECIFIED FILE
- CPI 0FFH ;DOES IT EXIST?
- JZ OPENERR ;NO--PRINT ERROR MESSAGE AND REBOOT
- * READ BUFFERS FROM DISK UNTIL THERE AREN'T ANY MORE LEFT
- RDLOOP: LXI D,DEFFCB
- CALL READBF
- ORA A
- JNZ NODATA ;FINISHED,OR ERROR
- LXI B,DEFBUF;GET DEFAULT BUFF.ADDR
- MVI D,BUFLEN ;COUNTER FOR TRANSFER
- MOVELOOP: LDAX B
- MOV M,A ;STORE A BYTE
- INX H
- INX B
- DCR D
- JNZ MOVELOOP
- JMP RDLOOP
- NODATA: CPI 3 ;IS RETURN VALUE FROM READ THREE OR MORE?
- JNC RDERROR ;YES--WE HAVE UNKNOWN RETURN VALUE: THEREFORE--ERROR!
- CALL CLOSE ;NO--WE'RE FINISHED AND WE CLOSE THE FILE
- CPI 0FFH ;HAS SOMETHING HAPPENED TO THE FILE?
- JZ CLOSERR ;YES--TELL ABOUT IT AND REBOOT
- POP H ! POP D ! POP B
- RET
- OPENERR: LXI H,MESS1 ;PRINT AN ERROR MESSAGE
- CALL PRINT
- CALL CRLF
- JMP 0 ;REBOOT
- MESS1 DB 'WE HAVE NO FILE BY THAT NAME',STOP
- CLOSERR: LXI H,MESS2 ;PRINT ERROR MESSAGE
- CALL PRINT
- CALL CRLF
- JMP 0 ;REBOOT
- MESS2 DB 'CANNOT CLOSE FILE',STOP
- RDERROR: LXI H,MESS3 ;PRINT ERROR MESSAGE AND REBOOT
- CALL PRINT
- CALL CRLF
- JMP 0
- MESS3 DB 'FILE READ ERROR',STOP
-