File: SD8COM.CO of Tape: Various/System-Tapes/s5
(Source file text)
TWO NEW HANDLERS FOR THE TD8E SIMPLE DECTAPE ******************************************** W.VAN DER MARK - SWISS FEDERAL INSTITUTE OF TECHNOLOGY - 8049 ZUERICH - SWITZERLAND -------------------------------------------- VERSION E THE WISH TO BE ABLE TO USE THE TD8E SIMPLE DECTAPE WITH INTERRUPT-ON PROGRAMS LIKE FORTRAN IV, FOCAL OR INDUS- TRIAL BASIC, HAS COME UP LATELY (1). THE INTERRUPT-ON FEA- TURE MIGHT ALSO ALLOW THE USE OF THE TD8E FOR MULTI-USER OR REAL-TIME ENVIRONMENTS. I HAVE NOW WRITTEN TWO NEW HANDLERS FOR THE TD8E, WITH AN INTERRUPT-ON CAPABILITY, FOR USE UNDER OS/8 V3. ONE IS A TWO PAGE RESIDENT SYSTEM HANDLER LIKE 'TD8ESY.BN', CALLED SD8SY.PA, THE OTHER A NON RESIDENT, NON SYSTEM HANDLER LIKE 'TD8EA.BN', CALLED SD8X.PA, TO BE CONDITIONALLY ASSEMBLED FOR SD8A, B, C, D.BN. ('SD' STANDS FOR SIMPLE DECTAPE) THESE HANDLERS WILL TURN THE INTERRUPT OFF DURING THE READ/WRITE TIME OF ONE 129 WORD DECTAPE RECORD. THIS TIME IS EQUAL TO 129*133MMSECS=17MSECS AND REPRESENTS THE WORST CASE REACTION TIME ON AN INTERRUPT. DURING THE ACTUAL SEARCH FOR A BLOCK NUMBER (NON READ/WRITE), THE INTERRUPT IS ALWAYS KEPT ON. NATURALLY, THE INTERRUPT IS SWITCHED ON AGAIN AFTER THESE 17MSECS, IF IT WAS ON AT THE TIME IT WAS SWITCHED OFF BY THE HANDLER. THE 17MSECS CORRESPOND TO A 600 BAUD/10 BIT DATA RATE; THIS MEANS THAT A <=600 BAUD TERMINAL WILL NOT NOTICE ANYTHING OF THE DECTAPE TRANSFERS. IF THE INTERRUPT HANDLING IS LONGER THAN APPROXIMATELY 1MSEC, AN UPCOMING BLOCK MARK MIGHT NOT BE CAUGHT IN TIME AND THE TAPE MIGHT ROCK A BIT DURING THE SEQUENTIAL READ/WRITES; IT WILL SLOW DOWN THE !TOTAL! FILE TRANSFER TIME, BUT NOT THE INTERRUPT RESPONSE TIME. (WORST CASE 17MSECS) THE INTERRUPT ROUTINE CAN TAKE OVER CONTROL JUST BEFORE THE HANDLER IS CATCHING THE REQUIRED BLOCK NUMBER; WHEN CONTROL RETURNS, THE BLOCK WILL HAVE GONE BY AND THE HANDLER WILL HAVE TO TURN AROUND TO TRY AGAIN AND SO ON. AN EXTRA FEATURE BUILT INTO BOTH HANDLERS IS A CHECK AGAINST BLOCKS GREATER THAN 2047. A FILE ADDRESS SPECI- FICATION > THAN 2047 WILL GIVE AN IMMEDIATE FATAL RETURN. THE ABSENCE OF THIS CHECK MIGHT HAVE CAUSED SOME PECU- LIAR PROBLEMS IN THE TD8 HANDLERS. (I.E. A WRITE IN BLOCK 2248 WOULD HAVE EFFECTIVELY WRITTEN IN BLOCK 200) (1) PS/8 - OS/8 NEWSLETTER, NUMBER 10, APRIL 1974 IN THE NON-SYSTEM HANDLER SD8X A CTRL/C CHECK IS MADE IMMEDIATELY BEFORE EACH READ/WRITE, IN ADDITION TO THE USUAL COMBINED CTRL/C/SELECT CHECK. THE NUMBER OF RETRIES AFTER READ PARITY ERRORS CAN BE CHANGED IN 'BUILD' BY : $ALTER SD8A(TO D),1 7775/(MINUS NUMBER OF RETRIES) $ IN THE SYSTEM HANDLER SD8SY TWO ILLEGAL USR CALL TRAPS ARE BUILD IN - ONE IN FIELD 0, ONE IN FIELD 2. THE CIFS IN FIELD 0 ARE AT THE SAME LOCATIONS AS IN THE TD8E HANDLER, SO THAT BLOAD & FRTS CAN STILL CORRECTLY CONNECT THE RELOCATED FIELD 2. PLEASE NOTE THE FOLLOWING TWO RESTRICTIONS: A) THE MQ REGISTER IS USED IN BOTH HANDLERS FOR CHECKSUM COMPUTATION. THUS, EITHER THE PROGRAM MUST NOT USE THE MQ, OR IT MUST SAVE THE MQ IN ITS INTERRUPT ROUTINE. B) IN SOME (VERY RARE) CASES THE DECTAPE MAY ROCK FOREVER (CTRL/C BREAK IMPOSSIBLE). THIS WILL HAPPEN IF EITHER A BLOCK MARK OR A BLOCK NUMBER IS BAD. IN A WAY THIS IS NOT SO BAD BECAUSE AT LEAST WE WILL KNOW WHAT IS WRONG WITH THE DECTAPE. (A PROGRAM COULD BE WRITTEN WHICH WOULD REWRITE BLOCK-NUMBERS ONLY). IN VERSION E A CTRL/C BREAK IS NOW POSSIBLE WHICH WILL TAKE THE TAPE OUT OF THE FOREVER-LASTING ROCK. (ONLY APPLICABLE TO NON-SYSTEM HANDLER) NOW I WOULD LIKE TO GIVE TWO HINTS TO PEOPLE WANTING TO WRITE TD8E SOFTWARE: (SEE (2)) A) CHECKSUMS: THE FOLLOWING EQUATIONS WILL HELP IN THE DISCUSSION A .EQU. A = U /U=UNITY;ALL ONES A .EQU. (.NOT. A) = 0 /.EQU. = LOGICAL EQUIVALENCE A .EQU. B = B .EQU. A /COMMUTIVITY THE CHECKSUM ON A DECTAPE IS THE COMPLEMENT OF THE 6 BIT EQUIVALENCE OF ALL WORDS WRITTEN INCLUDING THE REVERSE CHECKSUM. THUS, IF DURING A READ OPERATION WE BUILD UP THE EQUIVALENCE OF THE REVERSE CHECKSUM, ALL DATA AND FORWARD CHECKSUM, THE RESULT SHOULD BE ZERO. TO MAKE LIFE EASY, THE EQUIVALENCE CHECKSUM IS INCREMENTALLY COMPUTED (IN THE MQ) 12 BITS AT A TIME AND AT THE END OF THE BLOCK (DUE TO COMMUTIVITY), THE TWO 6 BIT HALVES ARE EQUIVALENCED TO OBTAIN THE FINAL 6 BIT RESULT. THE BUILDUP OF THE COMPUTED CHECKSUM IS SHOWN IN THE FOL- LOWING TWO SCHEMATICS. (SEE (3)) (2) TD8-E DECTAPE FORMATTER PROGRAM, DECEMBER, 1971 TD8-E DECTAPE CONTROL LOGIC (3) ATTACHED LISTING OF SD8X REFERENCE TO TWO TIMES 6-BIT LOGICAL REPRESENTATION LISTING COMPUTED CHECKS. OF OPERATION ------------------------------------------------------------ THE WRITE IS DONE IN THE FOLLOWING WAY: MQL 000000 ! 000000 =U TAD K77 ----------------- JMS W4LINE 000000 ! 111111 =0=.NOT. ----------------- DATA ! DATA JMS W4LINE'S ////// ! ////// DATA ! DATA JMS GETCHK ***************** AND K7700 CHKS ! 000000 =.NOT..EQU. OF ALL JMS W4LINE THE READ OPERATION GOES AS FOLLOWS: JMS R4LINE AND K77 000000 ! REV.CS =.NOT. REV.CHECKS. ----------------- DATA ! DATA JMS R4LINE'S ////// ! ////// DATA ! DATA ----------------- JMS R4LINE CHKS ! XXXXXX :.NOT..EQU.ALL.EQU.X AND K77 ----------------- JMS EFUN 000000 ! XXXXXX =.NOT.X ***************** JMS GETCHK 000000 ! 000000 :.EQU.ALL=0 (MUST) B) IOT'S ALL IOT'S (EXCEPT SDLD) DO JAM TRANSFERS TO OR FROM THE ACCUMULATOR. THAT IS, THE AC IS CLEARED BEFORE AN INPUT OPERATION AND CLEARED AFTER AN OUTPUT OPERATION. SDLD DOES !NOT! CLEAR THE AC AFTER AN OUTPUT OPERATION. THE TIMING IS QUITE CRITICAL, BUT CAN BE MANAGED. THERE ARE TWO FLAGS: THE SINGLE LINE FLAG (SET AFTER 3 DATA BITS) AND THE QUAD LINE FLAG (12 DATA BITS). THESE FLAGS CAN BE CLEARED BY EITHER SDLD, SDRD OR SDRC. TIMING ERROR CAN BE SET IN TWO DIFFERENT WAYS. (IT CAN BE CLEARED BY AN SDLC COMMAND) 1) QUAD LINE FLAG SETS AND IS NOT CLEARED FAST ENOUGH. (16MMSECS FOR WRITE, 33MMSECS FOR READ) (WHEN IT IS CLEARED IT WILL RESET AFTER 133MMSECS; THIS IS EASY) 2) THE MORE PERNICIOUS ONE: ONE OF THE 3 CLEARING IOT'S IS GIVEN OUT OF PHASE WITH EITHER THE SINGLE OR QUAD LINE FLAG. TO BE MORE SPECIFIC, A CLEARING IOT IS ISSUED LATER THAN 16MMSECS/WRITE OR 33MMSECS/READ WITH RESPECT TO THE SETTING OF A FLAG. THE TIMING ERROR WILL ONLY SET IF THE IOT IS ISSUED, NOTHING WILL HAPPEN IF IT IS NOT ISSUED AT ALL! THE UP-TO-SPEED FLIP-FLOP WILL RESTART AT EACH CHANGE IN THE COMMAND REGISTER, EXCEPT A CHANGE IN THE READ/WRITE BIT. DESCRIPTION OF SD8X NON-SYSTEM HANDLER -------------------------------------- ATTACHED TO THIS ARTICLE ONE WILL FIND THE LISTING OF ONE OF THE SD8 HANDLERS. THE HANDLER IS AN EXAMPLE OF A TWO PAGE, PAGE RELO- CATABLE HANDLER. (I.E. IT CAN BE LOADED BY THE SYSTEM IN ANY TWO CONSECUTIVE PAGES BETWEEN 00200 - 07600 ) THE PARAMETER 'DRIVE' WILL SPECIFY AT ASSEMBLY TIME WHICH UNIT NUMBERS OF THE TD8E DRIVES THE HANDLER WILL SUPPORT. IN THE USUAL CASE OF ONE DUAL TD8E DRIVE THE PARAMETER DOES NOT HAVE TO BE SPECIFIED AND THE HANDLER NAMES SDA0 AND SDA1 WILL BE CREATED BY 'BUILD'. ( ENTRY POINTS 10 AND 14 (OCTAL) RELATIVE TO THE PAGE BOUNDARY) I CONFINE MY DISCUSSION TO THIS CASE. THE CONDITIONAL PSEUDO-OPS (IFNZRO DRIVE, ETC.) SHUFFLE THE HANDLER UP OR DOWN IN ORDER TO GENERATE THE CORRECT ENTRY POINTS. I NOW GIVE A DESCRIPTION OF THE INTERNAL WORKING OF THE HANDLER: THE ENTRY POINTS ARE AT 'SDA0' AND 'SDA1', THESE LOCATIONS CONTAIN THE VERSION NUMBER OF THE HANDLER; THIS IS THE NEW OS/8 V3 CONVENTION TO ENABLE 'RESOURCE' TO PRINT AN APPROPRIATE VERSION NUMBER. THE CODE THAT FOLLOWS THE ENTRY POINTS IS THE USUAL STUFF TO ANALYZE THE CALLING SUBROUTINE ARGUMENTS. ( REMEMBER THAT A PAGE COUNT OF 0 IS LEGAL AND SIGNIFIES A TRANSFER OF 40 OCTAL PAGES FOR A DIRECTORY DEVICE). A ONE TIME INSTRUC- TION IS INSERTED AT 'REENTR' TO INITIALIZE THE CROSS PAGE LINKS (THIS IS DONE IN ROUTINE 'INIT'). THE SPECIFIED BLOCK NUMBER IS CHECKED AT 'JMP FATAL' FOR BLOCKS GREATER THAN 2047. THIS IS NECESSARY BECAUSE IT HAS TO BE MULTIPLIED BY 2 TO GET THE NUMBER OF DECTAPE RECORDS AND THUS WOULD GIVE A NUMBER GREATER THAN 4095 WHICH IS DIFFICULT TO HANDLE IN A 12-BIT COMPUTER. THEN THE NUMBER OF TRIALS ON ERROR IS INITIALIZED AT 'TRWCOM-5' WITH THE CONSTANT CONTAINED IN 'TRIES'. THIS CONSTANT CAN BE BE CHANGED WITH THE $ALTER COMMAND IN 'BUILD'. AFTER THIS THE PROGRAM GOES TO PAGE 2 TO THE ROUTINE 'SELECT' TO CHECK FOR SELECT ERRORS OR CTRL/C BREAK (THE UNIT NUMBER IS ALSO CARRIED ALONG IN THE ACCUMULATOR). THE MAIN SEARCH FOR BLOCK NUMBERS IS STARTED AT 'GO'. HERE THE DIRECTION, UNIT AND GO IS GIVEN TO THE INTERFACE. THIS STARTS A HARDWARE TIME-OUT TO GIVE THE TAPE SOME TIME TO GET UP TO SPEED. THE HANDLER WAITS IN PAGE 2 AT 'CTCLN8' FOR 8 LINES OF TAPE TO PASS, IN ORDER TO BE SURE THAT THE MARK-TRACK REGISTER IS FULL. IT ALSO CHECKS FOR CTRL/C SO THAT IT IS POSSIBLE TO GET OUT OF THE HANG CON- DITION WHEN A BLOCK-NUMBER IS NON-EXISTANT. AT 'TSRCH' THE INTERRUPT IS MOMENTARILY SWITCHED OFF BY THE 'CIF CDF' INSTRUCTION. (THE INTERRUPT WILL BE SWITCHED ON AGAIN BY EITHER A 'JMP' OR A 'JMS' INSTRUCTION) THE SKIP-CHAIN THAT FOLLOWS IS ORGANIZED IN SUCH A WAY THAT IF WE FIND THE CORRECT BLOCK NUMBER AND IF WE ARE GOING IN THE CORRECT DIRECTION, IT WILL SKIP ALL THE WAY (WITHOUT 'JMP'S!) ONTO THE INSTRUCTION 'SKON' WHICH WILL TURN THE INTERRUPT OFF AND STORE THE INTERRUPT STATUS AT 'TRWCOM'. IF DURING THE SKIP-CHAIN, SOME CONDITION IS NOT MET (ENDZONE, NO BLOCK MARK, WRONG BLOCK NUMBER, WRONG DIRECTION) THE LOOP IS RESTARTED AT EITHER 'REVRS', 'GO' OR 'TSRCH' AND INTERRUPTS ARE MOMENTARILY ALLOWED DUE TO THE 'JMP'. (THE LINK BIT KEEPS TRACK OF THE DIRECTION OF MOTION) WHEN THE INTERRUPT HAS BEEN SWITCHED OFF BY 'SKON' ANY RESIDUAL TIMING ERROR (WHICH MIGHT COME FROM INTERRUPTING THE BLOCK SEARCH ROUTINE) IS CLEARED BY 'SDLC' AND WE GO TO EITHER A WRITE OR A READ OF 129 WORDS IN PAGE 2 AT 'RDWRT'. IMMEDIATELY AFTER 'RDWRT' CTRL/C IS CHECKED AGAIN SO THAT WE CAN PREVENT A WRITE (OR A READ) AT THE LATEST POSSIBLE MOMENT. THE ROUTINE THEN SYNCHRONIZES THE TAPE WITH THE SO CALLED 'REVERSE GUARD' MARK TRACK PATTERN AND CHECKS FOR WRITE-LOCK IN THE CASE OF A WRITE OPERATION AT 'K7700+3'. THEN THE ACTUAL READ'S OR WRITE'S ARE DONE AND THE CHECK-SUM COMPUTED AS DESCRIBED EARLIER IN THIS ARTICLE. AFTER THE ROUTINE HAS READ OR WRITTEN 129 WORDS AND CHECKED OR COMPUTED THE CHECK-SUM IT GOES BACK TO 'TRWCOM' IN PAGE 1 , WHERE EITHER AN 'IOF' OR AN 'ION' INSTRUCTION IS EXE- CUTED. ANY CHECKSUM OR TIMING ERRORS ARE TREATED APPRO- PRIATELY AND IF THERE ARE NO ERRORS THE COUNTERS AND POINTERS ARE UPDATED AND THE PROGRAM GOES BACK IN THE BLOCK SEARCH LOOP AT 'GO' (FORWARD DIRECTION).