/ RXCOPY READ-WRITE SUBROUTINE / *6420 / / READ-WRITE SUBROUTINE TO HANDLE FLOPPY DISK IN 8-BIT MODE / ROUTINE LIVES IN FIELD 0 TO BE CALLED FROM FIELD 10 / / CALLING SEQUENCE / / CIF 0 /ASSUMED CDF 10, CALLED FROM FIELD 10 / TAD TRACK /TRACK # INTO AC / JMS I (RW / BITS /4000 IF FIELD 10 BUFFER, 2 IF READ, 20 IF UNIT 1 / OK RETURN /CDF AND CIF TO 10 / ERROR /SECTOR # IN AC / / READS OR WRITES A TRACK AT A TIME. TWO BUFFERS LIVE IN 20-6417 / EACH OF FIELD 0 AND 10 / / USES AUTO-INCREMENT REGISTER 10 OF FIELD 0 X10=10 / / AN ALTERNATE ENTRY OF CONTIN (JMP NOT JMS) CAUSES THE / SUBROUTINE TO CONTINUE WORKING ON THE SAME TRACK ON WHICH THE / ERROR OCCURRED. / / THREE RETRIES ARE DONE ON A SECTOR BEFORE AN ERROR IS DECLARED. / SDN=6755 LCD=6751 STR=6753 XDR=6752 SER=6754 FLINIT=6757 / / / USE PART OF PAGE AT 6400 TO SPREAD OUT WRITE LOOP / FOR A LITTLE EXTRA SAFETY ON MAKING INTERLEAVE TIMING / WRIT1, TAD (-10 /8 TIMES THRU 16 BYTE > 128 DCA WRTCNT ST4, TAD I X10 /FETCH A BYTE STR /SKIP IF READY TO TRANSFER JMP .-1 /NO (SHOULDN'T HIT THIS ON VT78) XDR /MOVE BYTE TO SILO CLA /CLEAR THE MUMBLE AC TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA TAD I X10 STR JMP .-1 XDR CLA ISZ WRTCNT /THRU WITH SILO? JMP ST4 /NO JMP WRIT2 /REST OF LOOP ON OTHER PAGE / WRTCNT, 0 /CONTROL COUNT FOR FILL SILO LOOP / PAGE / / / READ-WRITE ENTRY POINT / / RW, 0 DCA TRCKNO /ARRIVES WITH TRACK # IN AC TAD I RW /DATA FIELD 10, FETCH CONTROL BITS TAD L7100 /FLOPPY CONTROLLER IGNORES TOP 4 BITS; 100 / /BIT IS 8 BIT MODE; CONTROL FOR UNIT, R/W, IN PLACE DCA FN /BUFFER BIT (COMPLEMENTED) ALSO STORED IN FN TAD (17 /SET UP AUTO-INCR REG. DCA X10 TAD (-32 /26 DECIMAL SECTORS PER TRACK DCA SECTOR ISZ RW /POINT TO OK EXIT TAD FN /IF FIELD ZERO BUFFER, NEED TO CDF SPA /SKIP ON FIELD 10 BUFFER, ALREADY SET! CDF 0 RTR /READ/WRITE BIT TO LINK SZL CLA /SKIP IF WRITE JMP READLP /GO TO READ / / WRITE LOOP / WRITLP, CLL CLA CMA RTL /LITERAL -3 FOR RETRY COUNT DCA RETRY WRTRY, TAD FN /RETRY ERROR HERE THREE TIMES JMS LDCMD JMP WRIT1 /OTHER PAGE TO MOVE DATA TO SILO WRIT2, JMS DOIO /RETURN FROM OTHER PAGE TO ACCESS I/O ISZ SECTOR JMP WRITLP XT1, CDF CIF 10 JMP I RW / / READ LOOP / READLP, CLL CLA CMA RTL /LITERAL -3 FOR RETRY COUNT DCA RETRY RDTRY, JMS DOIO /COME HERE TO RETRY I/O TAD FN JMS LDCMD TAD (-40 /32 PASSES THRU 4 BYTES MOVED DCA FLEA ST5, STR JMP .-1 XDR DCA I X10 STR JMP .-1 XDR DCA I X10 STR JMP .-1 XDR DCA I X10 STR JMP .-1 XDR DCA I X10 ISZ FLEA JMP ST5 ISZ SECTOR JMP READLP JMP XT1 / / DO READ OR WRITE I/O FUNCTION / DOIO, 0 TAD FN /SILO FUNCTION, CONVERTED TO READ-WRITE TAD L7004 /BY LITERAL 4 (TOP FOUR BITS IRREL) JMS LDCMD JMS GETSEC /FETCH SECTOR TO AC STR JMP .-1 XDR CLA TAD TRCKNO STR JMP .-1 XDR CLA TAD L7530 /UNIT 1, 8-BIT NO-OP (TOP 4 BITS IGNORED) JMS LDCMD JMP I DOIO / / LOAD COMMAND REGISTER / FLEA=. LDCMD, 0 SDN /SKIP ON DONE JMP .-1 LCD /LOAD COMMAND SER /SKIP ON ERROR JMP I LDCMD ISZ RETRY /TRIED THREE TIMES YET JMP KEEPON /NO, KEEP ON TRYING JMS GETSEC /RETURN SECTOR IN AC ISZ RW /ON ERROR, RETURN ONE FURTHER DOWN JMP XT1 /EXIT TO CALLER WITH SECTOR # IN AC / / ENTRY TO CONTINUE AFTER ERROR / CONTIN, STA /BACK UP EXIT TO GOOD EXIT TAD RW DCA RW TAD FN /SET DATA FIELD TO 0 IF NECESSARY SPA CLA /ALREADY CDF TO 10, SKIP IF OK CDF 0 /NO, SO SET TO 0 JMP I LDCMD /PRETEND OPERATION OK, SO RETURN THRU LDCMD! / KEEPON, FLINIT /DO A RECAL TO SHAKE IT UP TAD FN /RETRYING READ OR WRITE RTR /R/W BIT TO LINK SZL CLA /SKIP ON WRITE JMP RDTRY /RETRY A READ TAD (-200 /BACK UP AUTO INCR TO REFILL SILO FOR WRITE TAD X10 /SINCE THE FLINIT CLEARED SILO DCA X10 JMP WRTRY /SO GO RETRY WRITE / / CONVERT COUNT TO SECTOR / GETSEC, 0 TAD SECTOR /CONVERT -32 TO -1 TO INTERLEAVED SECTOR TAD (15 L7100, CLL /100 BIT SETS 8-BIT MODE, AS LITERAL L7530, SPA SZL /SZL JUST TO MAKE CORRECT LITERAL, NO-OP WAIT TAD (15 L7004, RAL /CONVERTS SILO OPERATION TO READ-WRITE, AS LITERAL JMP I GETSEC / / / TRCKNO, 0 /TRACK NUMBER, INVARIANT THRU CALL SECTOR, 0 /COUNTS -32 UP TO 0; 26 DECIMAL SECTORS PER TRACK FN, 0 /FUNCTION BITS: ALWAYS 100 FOR 8BIT MODE / /20 IF UNIT 1 / /2 IF READ OPERATION (2 IS SILO FETCH; 0 SILO FILL) / /MINUS WORD IF BUFFER IN FIELD 0, PLUS IF FIELD 10 / /CONTROLLER IGNORES TOP 4 BITS OF WORD RETRY, 0 /RETRY COUNTER -3 TO 0 $