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
/
CPMUG001.ARK
/
CASDSK.ASM
< prev
next >
Wrap
Assembly Source File
|
1984-04-29
|
2KB
|
76 lines
; CASDSK - TRANSFER CASSETTE TO DISK
; TARBELL ELECTRONICS
;
ORG 100H
FDOS: EQU 5 ;DISK SYSTEM ENTRY POINT.
TFCB: EQU 5CH ;DEFAULT FILE CONTROL BLOCK.
TBUFF: EQU 80H ;DEFAULT BUFFER LOCATION.
MVI C,22 ;CREATE FILE.
LXI D,TFCB
CALL FDOS
MVI C,15 ;OPEN FILE.
LXI D,TFCB
CALL FDOS
MLOOP: LXI H,TBUFF ;GET ADDRESS OF BUFFER.
CALL CTRD ;READ RECORD FROM CASSETTE.
JNZ ERROR ;ERROR IF NOT ZERO.
MOV A,B ;GET RECORD LENGTH AND
ORA A ;CHECK FOR LENGTH 0 (EOF).
JZ CLOSE ;IF EOF, CLOSE FILE.
MVI C,21 ;WRITE A RECORD ONTO DISK.
LXI D,TFCB
CALL FDOS
JMP MLOOP ;GET THE NEXT ONE.
CLOSE: MVI C,16 ;CLOSE FILE.
LXI D,TFCB
CALL FDOS
JMP 0 ;DO A WARM-START.
ERROR: LXI D,QERR ;PRINT "TAPE ERROR".
MVI C,9
CALL FDOS
JMP CLOSE ;CLOSE FILE AND LEAVE.
QERR: DB 'TAPE ERROR$'
; CTRD - READ A RECORD FROM CASSETTE.
;
CTRD: CALL CASW ;DELAY TO ALLOW LAST
CALL CASW ;BYTE TO PASS THROUGH.
MVI E,0 ;SET CHECKSUM=0.
MVI A,10H ;SET BIT 4=1.
OUT CASC ;RESET RECEIVER.
CALL CASR ;READ TYPE BYTE.
CALL CASR ;READ LENGTH BYTE.
MOV B,A ;PUT LENGTH BYTE IN B.
RZ ;RETURN IF LENGTH 0.
MOV C,A ;PUT LENGTH IN C TOO.
CRLOP: CALL CASR ;READ DATA BYTE.
MOV M,A ;PUT INTO MEMORY.
INX H ;INCREMENT POINTER.
DCR C ;DECREMENT COUNTER.
JNZ CRLOP ;READ ANOTHER BYTE.
MOV C,E ;PUT CHECKSUM IN C.
CALL CASR ;READ CHECKSUM.
SUB C ;SUBTRACT FROM A.
RET ;RETURN FROM CRLOP.
;
CASR: IN CASC ;READ CASS. STATUS.
ANI 10H ;CHECK BIT 4.
JNZ CASR ;WAIT TILL READY.
IN CASD ;READ DATA.
PUSH PSW ;SAVE REG A.
ADD E ;ADD TO CHECKSUM.
MOV E,A
POP PSW ;RESTORE A.
ORA A ;SET FLAGS.
RET ;RETURN FROM CASR.
;
CASW: PUSH PSW ;SAVE DATA ON STACK.
CLOP: IN CASC ;READ STATUS.
ANI 20H ;LOOK AT BIT 5.
JNZ CLOP ;WAIT UNTIL READY.
POP PSW ;RECOVER DATA.
OUT CASD ;WRITE A BYTE.
RET ;RETURN FROM CASW.
CASC: EQU 6EH ;STATUS PORT.
CASD: EQU 6FH ;DATA PORT.
END