File: SD8COM.JU 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).