|
|
DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 2742 (0xab6)
Types: TextFile
Names: »MS1020.S«
└─⟦b5acf5c79⟧ Bits:30005104 8" CR80 Floppy CR80FD_0063 ( VOL: SCC.V MSS Directory: MS2.D )
└─⟦f918199fd⟧
└─⟦this⟧ »MS2.D!MS1020.S«
MESSAGE <:MS1020.S V810311:>
;-----------------------------------------------------------------------
; SUBROUTINE MS1020
; READ FIKS RECORD.
;
; CALL TO: MON STREAM, (INREC,INBYTE)
;
; REGISTERS CALL EXIT
; R4 LINK DEST
; R6 REF(IOCB) REF(IOCB)
; R0,R1,R2,R7 - DEST
; R3,R5 - UNCHANGED
;
; INPUT: IOCB DATA, FILE
; OUTPUT: IOCB DATA, IOBUF.IOCB DATA
; EXIT TO: LINK+0 (FILE EMPTY)
; LINK+1 (DONE)
; MSE110 (ERROR)
;-----------------------------------------------------------------------
MS1020: ; READ FIKS RECORD:
MOV IOFLT. X6 R0 ; GET FILE LENGTH
MOV IOFNX. X6 R1 ; AND CURRENT INDEX TO 1ST BYTE
ADD IOBLT. X6 R1 ; COMPUTE NEW INDEX
IEQ R0 R1 ; IF FILE EMPTY
JMP 0. X4 ;R THEN RETURN(0)
ADDC 1 R4 ; PREPARE EXIT(1)
MOV R4 RL1000 ; SAVE RETURN LINK
MOV R3 WK1000 ; SAVE R3
MOV R1 IOFNX. X6 ; SAVE NEW FILE INDEX
ADDC 2 R1 ; UPDATE FILE INDEX BY <ST><BC>
IHS R1 R0 ; IF NEW INDEX PAST FILE LENGTH
JMPI S4 MIE100 ;E THEN FILE ERROR
MOV IOST. X6 R4 ; GET STREAM HANDLE
MON STREAM, INBYTE ; READ <ST>
JMPI & S4 MIE110 ;E (NOT READ)
INE R3 STCHAR ; IF NOT AS EXPECTED
JMPI S4 MIE100 ;E THEN FILE ERROR
MON STREAM, INBYTE ; READ <BC> (BYTE COUNT)
JMPI & S4 MIE110 ;E (NOT READ)
MOV R3 R2 ; POSITION BLOCK LENGTH
MOV R2 IOBLT. X6 ; SAVE BLOCK LENGTH
MOV IOBUF. X6 R1 ; GET BUFFER ADDR
MOD BLKSIZ ; IF TOO LARGE BLOCK REQUSETED
IHS R2 -2 ;
JMPI S4 MIE100 ; THEN FILE ERROR
ADDC 1 R1 ; SKIP SPACE FOR <ST><BC>
MON STREAM, INREC ; READ BLOCK
JMPI & S4 MIE110 ;E (NOT READ)
MOD IOBLT. X6 ; IF NOT GOT WHAT REQUESTED
INE R2 0 ;
JMPI S4 MIE100 ;E THEN FILE ERROR
MOVC 2 R1 ;
ADD R1 IOBLT. X6 ; UPDATE BLOCK LENGTH BY 2
MOV R1 IOBNX. X6 ; SET BUFFER INDEX TO 1ST DATA
MOV WK1000 R3 ; RESTORE R3
JMPI RL1000 ;R RETURN(1)