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).