File: MTOLD.TK of Tape: Sources/Multi8/multi8-1
(Source file text)
/MT.TK 18-APR-79 IFDEF TC58 < /DEFINITION OF INSTRUCTIONS FOR KENNEDY TAPE CONTROLLER: MTSF=6701 /SKIP ON ERROR FLAG OR MAGTAPE FLAG MTRS=6706 /READ STATUS REGISTER MTCR=6711 /SKIP IF CONTROL READY MTAF=6712 /CLEAR STATUS & COMMAND REGISTER; CLEAR ERROR AND /MAGTAPE FLAGS; IF NOT READY, CLEAR FLAGS ONLY. MTCM=6714 /INCLUSIVE OR BITS 0-5, 9-11 INTO COMMAND REGISTER, /JAM 6-8 (FUNCTION). MTLC=6716 /LOAD COMMAND REGISTER MTTR=6721 /SKIP ON TAPE TRANSPORT READY MTGO=6722 /SET GO TO EXECUTE COMMAND MTRC=6724 /OR COMMAND REGISTER INTO AC SDF=6731 /(MAINTENANCE) MTLF=6734 /LOAD EXTENDED MEMORY BITS FROM AC 9-11 MTBR=6741 /SKIP IF MAGTAPE BUFFER READY (PROGRAMMED MODE) MTPI=6746 /READ MAGTAPE BUFFER (PROGRAMMED MODE) MTAX=6751 /SET PROGRAMMED MODE MTPO=6754 /LOAD MAGTAPE BUFFER (PROGRAMMED MODE) /SPECIAL TAPE HANDLING CODES / PAGE COUNT=0 / /0 (CLOSE) WRITE 2 EOF'S AND BACKSPACE /1 REWIND /2 SPACE FORWARD/REVERSE RECORDS / IF WRITE BIT IS SET BACKSPACE / IF WRITEBIT IS CLEARED SKIP RECORDS / BLOCKNUMBER (ARG3) HOLDS - NUMBER OF RECORDS / THIS FUNCTION NEVER SKIPS OVER FILE MARKS /3 SPACE FORWARD/REVERSE FILES / ARGS SAME AS FUNCTION 2 / NEVER SPACE OVER 2 CONSECUTIVE FILE MARKS /4 REWIND AND PUT OF LINE (NOT IMPLEMENTED) /5 WRITE EOF /6 PERFORM OPERATION WITH SPECIFIED BLOCK SIZE / THE NEGATIVE OF THE DESIRED BLOCKSIZE / IS SPECIFIED AS ARG3. NOTE ! THIS FUNCTION IS NOT / IMPLEMENTEDAND RETURNS A FATAL ERROR ! /7 CURRENTLY NOT USED / *** NOTE *** /CURRENTLY RECORD LENGTH=400 WORDS ! RLNGTH=400 *200 COUNT, "M^100+"T&3777 /NAME IS MT 401 /TWO PAGES, 1 FLAGS MTA /READY/ERROR FLAG MTIDON SPECLX, SPECIAL FUNC, 0 REQUEST=ZTEM1 MT, DCA REQUEST /POINTER TO REQUEST PARAMETERS TAD I REQUEST /GET FUNCTION WORD DCA FUNC ISZ REQUEST /BUMP POINTER ACM1 TAD I REQUEST DCA BUFFER /ADDRESS OF BUFFER-1 ISZ REQUEST TAD I REQUEST /GET BLOCKNUMBER DCA BLOCK JMS MONITOR /RETURN EVENT NUMBER TO CALLER RESERV RETURN CONTINUE DCA EVENT /REMEMBER WHERE COMPLETION SHOULD GO TAD M10 DCA ERRCNT /SETUP RETRY COUNTER /COMPUTE COMMAND REGISTER BITS TAD FUNC /SETUP FIELD AND UNIT CLL RTR RAR /FIELD IN BITS 9-11 MTLF /LOAD FIELD REGISTER RAR /UNIT IN BITS 1-2 AND C7000 TAD PARITY /ADD PARITY BITS DCA UNIT / /ZERO BUFFER FOR READ TAD FUNC /READING ? RAL AND C7600 /(CHECK FOR SPECIAL FUNCTION!) SNA SZL /AND HAVE THE BUFFER LENGTH AT ONCE JMP NOCLR CIA DCA ZTEM1 /COUNTER TAD BUFFER /GET ADDRESS OF BUFFER DCA AUTO10 TAD FUNC /GET FIELD OF BUFFER AND C70 TAD C6201 /MAKE A CDF DCA .+1 MTTEM, HLT //CDF TO BUFFER FIELD LOOP, DCA I AUTO10 //ZERO A WORD ISZ ZTEM1 //ALL DONE ? JMP LOOP //NO NOCLR, CLA CLL CDTOIF / /SEE WHAT FUNCTION IT IS TAD FUNC AND C3700 /EXTRACT LENGTH SNA /SPECIAL FUNCTIONS ? JMP I SPECLX /Y: GO THERE BSW /NUMBER OF RECORDS*2 IFZERO RLNGTH-400 < CLL IAC RAR /ROUND UP, DIVIDE BY 2 > CIA DCA COUNT /- # OF BLOCKS TAD FUNC /READ OR WRITE? SPA CLA /+=READ TAD (20 /WRITE: MAKE SUITABLE CODE TAD (20 /CODE FOR READ DCA MTTEM /STORE RWRITE, TAD MTTEM JMS MTH /CALL TAPE DRIVE SIZE, -RLNGTH /RLNGTH WORDS PER RECORD (!) 3776 /ERROR MASK JMP ERROR1 /SOMETHING IS WRONG TAD BUFFER /UPDATE BUFFER ADDRESS TAD (RLNGTH / DCA BUFFER / ISZ COUNT /DONE ALL? JMP RWRITE /NO JMP MTSTOP /Y:STOP /THE ACTUAL DRIVER ROUTINE: MTH, 0 TAD UNIT /UNIT BITS 1 AND 2 + PARITY MTLC /LOAD COMMAND CLA MTTR /UNIT READY ? SKP JMP MTH0 JMS MONITOR STALL 1 CLA CLL MTTR /UNIT READY NOW ? JMP ERROR /NO, SELECT ERROR, OR REWINDING MTH0, TAD I MTH CDF 0 ISZ MTH DCA I (7752 //SET WORD COUNT TAD BUFFER //BUFFER ADDRESS DCA I (7753 //CURRENT ADDRESS CDTOIF MTGO /GO JMS MONITOR WAIT MTA AND I MTH /APPLY ERROR MASK ISZ MTH /MAKE CORRECT RETURN SNA /FATAL ERROR ? ISZ MTH /NO: ADVANCE TO NORMAL RETURN JMP I MTH /RETURN ERROR1, CLA TAD C70 /BACKSPACE JMS MTH /BACKSPACE OVER THE ERROR -1 /ONE RECORD 0776 /ERROR MASK JMP ERROR /FATAL ERROR ISZ ERRCNT /ANOTHER TRY ? JMP RWRITE /YES ERROR, TAD (4000 /SET ERROR BIT MTSTOP, CLL RAR /PASS SHIFTED STATUS TO CALLER JMS MONITOR HALT SIGNAL CLEAR RELEASE EVENT, 0 / BUFFER, 0 /BUFFER ADD. -1 BLOCK, 0 /BLOCK NUMBER, -NUMBER OF RECORDS/FILES UNIT, 0 /UNIT IN BIT 1 AND 2 + PARITY ERRCNT, 0 /RETRY COUNTER PARITY, 607 /9 TRACK, 800 BPI, DUMP MODE PAGE BLOCKX, BLOCK SIZEX, SIZE FUNCX, FUNC MTHX, MTH CODE, CLOSE /CODE 0 IS CLOSE (2 EOF'S)+BACKSPACE REW /CODE 1 IS REWIND SPCR /CODE 2 IS SPACE RECORD F/B SPCF /CODE 3 IS SPACE FILE F/B REW /CODE 4 IS REWIND AND OFF-LINE EOF /CODE 5 IS END OF FILE ERRORX, ERROR /CODE 6 DOES NOT EXIST STOPX, MTSTOP /CODE 7 IS NOP 0 / /INTERRUPT HANDLING MTIDON, MTRS ///READ STATUS DCA MTSTAT ///RETURN STATUS TO WAITER MTAF ///CLEAR FLAGS TAD (MTA CIF 0 JMS I ZSOFINT MTSTAT, 0 / /SPECIAL TAPE MANIPULATIONS. SPECIAL,TAD I FUNCX /CODE IS IN BIT 6-8 (!!!!) CLL RTR RAR AND C7 TAD (JMP I CODE /FORM THE JUMP DCA .+1 FLAG, HLT CLOSE, TAD C50 /2 X EOF JMS I MTHX -1 3666 /ERROR MASK JMP I ERRORX TAD C50 JMS I MTHX -1 3666 JMP I ERRORX TAD C70 /BACKSPACE JMS I MTHX -1 3666 JMP I ERRORX JMP I STOPX EOF, TAD C50 /EOF JMS I MTHX -1 3666 /ERROR MASK JMP I ERRORX JMP I STOPX SPCR, TAD I FUNCX /DETERMINE DIRECTION SMA CLA /-IS BACKWARD TAD M10 /FUNC=60 TAD C70 JMS I MTHX -1 3666 /ERROR MASK JMP I ERRORX ISZ I BLOCKX JMP SPCR JMP I STOPX /DONE. REW, TAD C10 /REWIND JMS I MTHX 100 0 /NO ERRORS JMP I ERRORX /NOT POSSIBLE JMP I STOPX FILE, CLA IAC /SET NO DATA FLAG SPCF, DCA FLAG TAD I FUNCX /DETERMINE DIRECTION SMA CLA TAD M10 /FORWARD TAD C70 JMS I MTHX -1 3666 /ERROR MASK JMP I ERRORX TAD MTSTAT /EXAMINE STATUS AND C100 /FILE MARK? SNA CLA /Y JMP FILE /NO ISZ I BLOCKX /DONE ENOUGH? SKP /NO JMP I STOPX /Y:STOP TAD FLAG /ANY DATA SEEN? SZA CLA /NO: DONT TRY FURTHER! JMP SPCF /Y:NEXT RECORD/FILE TAD C70 /BACKSPACE ONE REC. JMP EOF+1 C10, 10 C50, 50 PAGE /END OF TC58 >