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 >
Wrap
Assembly Source File
|
1984-04-29
|
2KB
|
66 lines
; 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