// DDTapes.d - Definitions for the Dual Density Tape I/O Routines // Copyright Xerox Corporation 1981 // Last modified by Tim Diebert, March 16, 1981 4:18 PM external [ // Procedures in the DDTapeIO package that are useful ActOnDDTape CloseDDTape EraseInches FileSkipFwd FileSkipRev OpenDDTape PerformVDDTCB RecSkipFwd RecSkipRev SetDensity TapeEOF TapeStatus TapeRewind TapeRewindWait TapeUnload WaitTapeReady // Procedures in the DDTapeInit package that are useful InitializeDDTape // Procedures in the DDTapeUtilA package that are useful DDTapeVertIntCode // used by the R/W code for use to sync the Display turn off UBlockEq BlockEq UPupChecksum AsciiXlate EbcdicXlate TapeTfsSwatProc // Procedures in the DDTape Microcode package that are useful DDTapeImage // Statics or externals for use in other parts of the tape code DDTapeDispSaveData1 DDTapeDispSaveData2 DDTapeDispSaveData3 DDTapeDispSavervDCBStart DDTapeVertIntFlag DDTapeVertIntMask DDTapeVertIntChannel TapeOpened TapeActive ] manifest [ // Low core stuff and more DCBStart = #420 // Display start DCBInterupt = #421 // Display interupt field DDTCBStart = #622 // Tape Control Block Head IntVec = #501 IntActive = #453 MaxUnitNum = 3 // four drives: 0,1,2 and 3 // StartIO defs TapeNormalOp = #200 TapeResetOp = #100 ] // Tape Controller Status Definitions //-------------------------------------------------------------------------- structure DDStatus: //-------------------------------------------------------------------------- [ RDY bit // 100000 ReaDY. Unit loaded, Tape not in motion ONL bit // 40000 ON Line. Unit loaded, Tape may be in motion RWD bit // 20000 ReWinDing. Unit is rewinding FPT bit // 10000 File ProTect. Write Ring removed. BOT bit // 4000 Beginning Of Tape. Tape is at load point EOT bit // 2000 End Of Tape. EOT marker was crossed in a forward direction FMK bit // 1000 End Of File. Last record (R/W) was an EOF mark (Tape Mark) NRZI bit // 400 NRZI Status is present in the drive. 800 bits per inch mode. HE bit // 200 Hard Error. A non recoverable error occured during R/W operation SE bit // 100 Soft Error. A correctable error occured during R/W operation. DL bit // 40 Data Late. Write or Read buffer went empty or overflowed RDP bit // 20 Read Data Parity. A read parity error occured. ICL bit // 10 InCorrect Length on write HDWERR bit // 4 HarDWare ERRor. THe controller microcode detected an error. WFP bit // 2 Write on File Protected reel. (FPT & Write-Op) CMDER bit // 1 ComManD ERror. Unkown command type. ] manifest [ // Status bit masks Bot = #4000 Eot = #2000 Eof = #1000 Rewound = #144000 // RDY % ONL % BOT TapeErr = #367 ] // Tape Control Block as Required by the hardware //-------------------------------------------------------------------------- structure DDTCB: //-------------------------------------------------------------------------- [ ChainAddr word // Next TCB to be executed if error not detected by the current op. Command word = [ Density bit 1 // 1 = NRZI mode, 0 = PE mode. Threshold bit 1 // 0 = normal, 1 = Low read threshold for data recovery. ReadAfterWrite bit 1 // 0 = no read data transfered after write, 1 = read trasnfered. blank bit 2 // should be zero Unit bit 3 // Unit this op selects. blank bit 3 // should be zero Opcode bit 5 = // Define both direction and action [ REV bit 1 // Reverse direction bit WRT bit 1 // Write operation WFM bit 1 // File mark operation EDIT bit 1 // Edit spacing operation ERASE bit 1 // Erase or disable data ] ] ReadBuffer word // Address of main memory read buffer ReadCount word // Read buffer WORD count WriteBuffer word // Address of main memory write buffer WriteCount word // The number of BYTES to write. May be odd ByteCount word // Number of data bytes moved on R/W. Flags word = [ @DDStatus // Controller Ending Status ] ] manifest [ // DDTCB size lDDTCB = ((size DDTCB)+15)/16 // Timeout timers for various things RewindTimeout = 19200 // The total time to rewind at 150ips RecordTimeout = 250 // Time to pass 25' of tape at 125ips FileTimeout = 23040 // Time to pass 2400' of tape at 125ips for a file search. NoOpTimeout = 10 // The total time to perform a NoOp ] // Virtual Tape Control Block used by the software to keep track of things //-------------------------------------------------------------------------- structure VDDTCB: // virtual tape control block //-------------------------------------------------------------------------- [ @DDTCB opDensity word // flag indicating drives current density operation word // Operation code as supplied to the software drive word // Unit this operation is for errProc word // Procedure to call in case an error is detected interventionProc word // Procedure to call in case an operator intervention. retries word // Retry count lowthresh word // Flag used to keep track of a read at low threshold. timeout word // Timeout flag. If true then timeout detected by PerformVTCB regap word // Flag used to keep track of a long gap write during write retry ] manifest [ // Operation Density Defs PE = 1600 NRZI = 800 // VDDTCB size lVDDTCB = ((size VDDTCB)+15)/16 // Tape Op Codes as passed to the routines by the user program // Assignments must be maintained so that the hardware gets what is needs. BackSpaceRecord = #21 FwdSpaceRecord = #01 BackSpaceFile = #25 FwdSpaceFile = #05 ReadFwd = #00 ReadRev = #20 ReadRevEdit = #22 Write = #10 WriteEdit = #12 Erase = #15 EraseVar = #11 WriteEOF = #14 Rewind = #35 Unload = #36 NoOp = #37 Reset = #40 ] (635)