B ; MAGTAP.316 9-MAY-73 ; MAGTAP.315 4-MAY-73 ; MAGTAP.314 2-MAY-73 ; MAGTAP.313 1-MAY-73 ; MAGTAP.312 27-APR-73 ; MAGTAP.311 26-APR-73 ; MAGTAP.310 24-APR-73 ; MAGTAP.309 21-APR-73 .TITLE MAGTAP ;********************************************************************** ;* M A G T A P ** ;* ** ;* PROGRAM IDENTIFICATION. MAGTAP - MAGNET̔du~#"~     ~x55f&R~ m& %L   a0 a ^  v^r@rBr@  &!0 ~h  ? ߐ6 e e @f; MT5T.01 2-MAY-73 ; MT3T.16 1-MAY-73 ; MT3T.15 27-APR-73 .TITLE $$TS35 .LIST MEB .MACRO LMAC EX,DN,DA,FU,NW,CT,?A,?B,?C,?D MOV #C-REL,R0 MOV R0,-(SP) EMT 71 ; MAGTAP .IFEQ EX-1 MOV (R0),R1 CMP R1,#1 .WORD 1374 ; BRANCH IF NOT EQUAL .ENDC .IFEQ EX-3 INC A BR A+2 A: .WORD 0 TST ; UPDATE 9/29/72 ROS3.SYS ; UPDATE 09.20.72 ;ROS3.SYS ; UPDATE 8/23/72 ROS3.SYS ; UPDATE 8/17/72 ROS3.SYS ; UPDATE 8/15/72 ROS3.SYS ; UPDATE 8/1/72 ROS3.SYS ; UPDATE 7/31/72 ROS3.SYS ; UPDATE 7/28/72 ROS3.SYS ; UPDATE 07.21.72 ROS3.SYS ;* ;* G E N E R A L S Y S T E M E Q U A T E S ;* $1145 = 1 ;1 = 11/45 0 = NOT 11/45 IC TAPE INTERFACE ** ;* SUBROUTINE USING THE KT-11C AND THE GULF CONTROLLER ** ;* ** ;* PURPOSE. ALL COMMUNICATIONS WITH THE MAGNETIC TAPES WILL ** ;* BE THROUGH THIS SUBROUTINE. THIS ROUTINE PERFORMS THE ** ;* FOLLOWING MAGNETIC TAPE FUNCTIONS: ** ;* 1 OPEN (RETURN STATUS) ** ;* 2 CLOSE (NO OPERATION) w@f 6 ߐ s~  &f%V  G  & |zf perrB2@2U~X& N 2 e   ! dB6   E@~f&fP~7 7  f&f&& &  B 0eW @w B~H    A BNE A+2 .ENDC TST ERROR(R0) BEQ D JMP MTESE .IFEQ EX-3 B: CLR A RTS PC .ENDC .BOUND C: .WORD 1 ; THREAD .BYTE 4,EX ; MAGTAP, EXIT TYPE .IFEQ EX-3 .WORD B-REL ; RETURN ADDRESS FOR EXIT 3 .IFF .WORD 0 .ENDC .WORD DN,0,0 ; DEVICE NUMBER ERROR WORD SYSTE $1125 = 0 ;1 = 11/25 0 = NOT 11/25 $1120 = 0 ;1 = 11020 OR LESS (11/05, ETC.) $KT11C = 1 ;1 = KT11C SEGMENTATION ;0 = NO SEGMENTATION $FPP = 0 ;1 = FLOATING POINT PROCESSOR IS IN SYSTEM .IFZ $1125!$1145 .IFNZ $KT11C!$FPP XXXXXXXX .ENDC .ENDC $RASM = 1 ;1 = ASSEMBLER IS IN SYSTEM .IFG $KT1 ** ;* 3 READ ** ;* 4 WRITE ** ;* 5 WRITE FILE MARK ** ;* 6 REWIND ** ;* 7 SPACE (+-N) RECORDS ** ;* 10 SKIP (+-N) FILES ** ;* 11 MULTIPLE REWI &fw 5 82  && e ~55 5@  &  ]<] e5   Z  &f ~8    d ^w    7 ,X "~Nw #c# w   _ H Iu}`M .WORD DA-REL,16,20 ; DATA BUFFER ADDRESS SYS SYS .WORD FU,NW,CT ; FUNCTION CODE BUFFER SIZE COUNT .WORD 0,0,0,0 ; STATUS RES1 RES2 RES3 D: NOP ; ************************************************************* .ENDM ERROR = 8. R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 .PAGE ; TASK HEAD1C-1 XXXXXXXX .ENDC $DELAY = 2 ;INDICATES TYPE OF MEMORY AND IS USED ;IN SOME DELAY LOOPS ;1 = 1.2 US CORE ;2 = 850 NS CORE ;3 = 11/45 SOLID STATE MEMORY ; STANDARD REGISTER DEFINITIONS R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 ND ** ;* ALL THREE STANDARD R0S I/O EXITS ARE SUPPORTED BY MAGTAP. ** ;* ** ;* USAGE. THE ASSEMBLER LINKAGE TO MAGTAP IS: ** ;* ** ;* MOV #LIST,-(SP) ;PUSH LIST ADDRESS ON STACK ** ;* EMT MAGTAP ** ;* ~( t:Z2.!r"    reh ~0 @7II I   I7 H7 F7 D7 F7 >7 <> p0! .!0" ~ 7#^& w )  )w`)He )* ** * **P *w h~` .3h-lwj+fwd>|BqBER .WORD 1 ; THREAD .WORD 5 ; TASK NUMBER .BYTE 20 ; SYSTEM TASK .BYTE 1 ; PRIORITY .WORD MGTS-REL ; ENTRY .WORD 100,0 ; MAX TIME / TIMER .WORD 200 ; STACK SIZE .WORD 0 ; CPU STATUS .WORD 0 ; STACK POINTER .WORD 0 ; ARG .BYTE 6 .BYTE TSKEND-TSTACK/100 PC = %7 .IFNZ $FPP AC0 = %0 ; AC1 = %1 ;FLOATING AC2 = %2 ; POINT AC3 = %3 ; ACCUMULATOR AC4 = %4 ; DEFINITIONS AC5 = %5 ; .ENDC ; .IFNZ $KT11C $ROSM = 100000 ;ROS MASK FOR SYSTEM TASKS TO USE .ENDC ;TO 'OR' WITH ROS ADDRESSES TO POINT .IFZ $KT11C  ** ;* THE FORTRAN EQUIVALENT CALL IS: ** ;* ** ;* CALL MAGTAP(IADDR(LIST)) ** ;* ** ;* THE FORMAT OF THE LIST IS AS FOLLOWS: ** ;* ** ;* LIST ~K8~4J40  ~ 7 7?)\DnD0) ,%)#)7E %)7zh %~      ߕw ~e~ ٟ zX &~&B&.!.! & p7 503 ؄ f&"&&&&&~p M) F LR  F,:ط4ط.؀ .WORD 0,0 ; TPDR 1-2 .WORD 0,0,0 ; TPDR3 - 5 .WORD 0,77406 ; TPDR 6 - 7 .WORD TSTACK,0,0 ; TPAR 0 - 2 .WORD 0,0,0 ; TPAR 3 - 5 .WORD 0,7600 ; TPAR 6 - 7 . = . + 12. .CSECT MTTE5 REL = . TSTACK: .BLKW 200 MGTS: MOV #1000,MTRCC ; WRITE 16 FILES 37 RECORDS PER FILE MTES1: DEC MTRCC BEQ MTESTE MOV  ; TO USER ASR 4 $ROSM = 0 ; .ENDC PS = 177776 ; $DEBUG = 1 ; ROS DEBUG SWITCH $CORAL = 0 ; CORE ALLOCATION ; =0 SOFTWARE ; =1 HARDWARE ; ; ; TASK CONTROL SYSGEN EQUATE CARDS ; NPRIOR = 10. ; NO. OF SOFTWARE PRIORITY LEVELS PRIBKG = NPRIOR ; PRIORITY OF BACKGROUND $BATCH =  THREAD ** ;* +2 EXIT TYPE (1-3) DEVICE TYPE ** ;* +4 EXIT ADDRESS (EXIT TYPE 3 ONLY) ** ;* +6 DEVICE NUMBER FOR FUNCTIONS 1-10, SET BITS FOR 11 ** ;* +10 RETURN ERROR PARAMETER (0 TO 14) ** ;* +12 SYSTEM (CALLING TASK #) ** ;* +14 DATA BUFFER ADDRESS ** ;* PP50 =CDwwFg~4 <3.! (*$50F  F Un w 7 ~`.! w  #(e&t7T׀ EU6&t70׀ EU6&f~WtEAWt E`v&f# & lWtE@`$Wtր E`v~P x&f& & WtE#4,R4 ; WRITE COMMAND MOV MTRCC,R1 BIC #177740,R1 ; WRITE E O F AFTER 31 RECORDS BNE MTES2 INC R4 ; WRITE FILE MARK MTES2: MOV R4,.+56 ; STORE FUNCTION CODE MOV R4,.+136 ; STORE FUNCTION CODE LMAC 2,0,MWOUT,4,150,0 ; WRITE UNIT 0 LMAC 2,1,MWOUT,4,150,0 ; WRITE UNIT 1 BR MTES1 MTESTE: LMAC 2,0,MWRIN,6,0,0 ; REWIND  1 ; BATCH OPTION .IFLE NPRIOR ; XXXXXXXX ;NPRIOR MUST BE GREATER THAN ZERO .ENDC MXTASK = 20 ; MAX # OF CORE TASKS IN SYSTEM NLTASK = 1 ; LARGEST TASK # OF TASKS LOADED WITH SYSTEM ;NOTE: IF OVERLAYS ARE USED, THEN THE ;FIRST OVERLAY TASK NUMBER IS MXTASK+1 OVTMIN = MXTASK+1 ;FIRST OVERLAY TASK NUMBER OVRLAY +16 KPAR6 VALUE FOR VIRTUAL DATA BUFFER ADDRESS (ASR 6) ** ;* +20 SYSTEM VIRTUAL EQUIVALENT OF DATA BUFFER ADDRESS ** ;* +22 FUNCTION (CODES LISTED ABOVE) ** ;* +24 NWORD ** ;* +26 COUNT ** ;* +30 STATUS ** ;* +32 -BACKSPACE FLAG REPEAT COUNT ** @`7$\րEt7`LֶEU&f~& & WtE@`7$րEt7`նEU ~@z>~~0  LMAC 1,1,MWRIN,6,0,0 ; REWIND LMAC 2,0,MWRIN,3,200,0 ; READ LMAC 1,0,MWRIN,3,200,0 ; READ MT100: LMAC 2,0,MWRIN,7,0,3 ; SPACE LMAC 1,0,MWRIN,3,200,0 ; READ LMAC 1,0,MWRIN,7,0,-2 ; SPACE LMAC 2,0,MWRIN,3,200,0 ; READ MT150: LMAC 2,1,MWRIN,3,200,0 ; READ LMAC 2,1,MWRIN,10,0,3 ; SKIP FILES LMAC 1,1,MWRIN,3,200,0 ; READ = 0 ; SYSTEM OVERLAY OPTION OVRLAY = 1 ;SYSTEM OVERLAY OPTION (1 = OVERLAY) ;0 = NO OVERLAY, 1 = OVERLAY .IFNZ OVRLAY ; MAXOVR = 140 ; MAX # OF OVERLAY TASKS IN SYSTEM .ENDC ;(NOT USED IF OVRLAY = 0) .IFZ OVRLAY ; MAXOVR = 0 ;SET TO ZERO ONLY IF NO OVERLAYS .ENDC TASMAX = MXTASK+MAXOVR ;MAXIMUM NUMBE!;* +34 RESERVED ** ;* +36 RESERVED ** ;* ** ;* THE RETURN ERROR CODES ARE AS FOLLOWS: ** ;* ** ;* 0 I/O SUCCESSFUL ** ;* 1 LIST ALREADY IN A QUEUE "1~ ~ !@~!# LMAC 1,1,MWRIN,7,0,51 ; SPACE MT175: LMAC 2,1,MWRIN,3,200,0 ; READ LMAC 2,1,MWRIN,10,0,-2 ; SKIP FILES LMAC 1,1,MWRIN,3,200,0 ; READ LMAC 3,1,MWRIN,3,200,0 ; READ MT200: LMAC 3,0,MWRIN,7,0,2 ; SPACE RECORD LMAC 3,0,MWRIN,3,200,0 ; READ LMAC 2,3,MWRIN,11,0,0 BR MTEND MTESE: NOP ; USE FOR ERROR BREAK POINT MTEND: EMT 4 $R OF TASKS (INCL OVERLAYS .IFLE MXTASK ; XXXXXXXX ;MXTASK MUST BE GREATER THAN ZERO .ENDC .IFL NLTASK ; QTAB XXXXXXXX ;NTASK CANNOT BE NEGATIVE .ENDC .IFG NLTASK-MXTASK ; QTAB XXXXXXXX ;NTASK MUST BE <= MXTASK .ENDC .IFNZ OVRLAY ; ; STATE SIZE OF DYNAMIC CO% ** ;* 2 INVALID DEVICE TYPE ** ;* 3 ILLEGAL EXIT TYPE ** ;* 5 ILLEGAL DEVICE NUMBER ** ;* 6 ILLEGAL COUNT FOR SPACE OR SKIP ** ;* 10 ILLEGAL I/O FUNCTION CODE ** ;* 11 FATAL HARDWARE ERROR, STATUS REG IS IN WORD 13 ** ;* 12 MAGNETIC TAPE TIME OUT &~"O~"w ,×& u6 ^~#7!p.! .!k!g  [.!ߐ"W  !Q *r B f> 6~x#1> .!4!2 7"7" ߐ<ѷ6w h ee H'; EXIT ; .WORD 0 MWOUT: .ASCII /THIS BUFFER OF DATA WILL BE USED TO TEST THE MAGNETIC TAPE 62C/ .EVEN MTRCC: .WORD 1234 ; REPEAT COUNT .ASCII /SECOND LINE OF THE WRITE, REWIND, AND READ TEST 62 CHARACTERS./ MWRIN: .ASCII /INPUT BUFFER/ .EVEN .BLKW 62 .WORD 0 .BLKW 200 . = . + 200 TSKEND: .END (RE STORAGE IN ROS ; $DYNSZ = 54000 ; RESERVE DYNAMIC CORE POOL .ENDC ; ; THE FOLLOWING IS A LIST OF PRIORITY PROPERTIES ; +1 = TIME SLICE PRIORITY (CORE OR OVERLAY) ; 0 = FIXED OVERLAY TASK (MAY BE CORE) ; -1 = FREE TASKS (CORE OR DYNAMIC OVERLAY) ; PRIP01 = -1 ; PRIORITY PROPERTY LEVEL 1 PRIP02 = -1 ; PRIORITY PROPERTY LEVEL 2 PRIP03 = 1 ; PRIORITY P) ** ;* 14 WRITE COMMAND FOR REAL WITHOUT WRITE RING ** ;* ** ;* COUNT =NUMBER OF WORDS READ BY THE READ COMMAND ** ;* =NUMBER OF RECORDS (+-N) TO SPACE ** ;* =NUMBER OF FILES (+-N) TO SKIP ** ;* =UNUSED FOR ALL OTHER FUNCTIONS ** ;* wv ~#6 &&f F-  l7 fv  & @~h$6 6U×7 7  7 ~ .!!!.!ߐ && 2~$.! J<1>1<ߐH& w4—!& R1.!7 7 7 7 0 !~X%W  ! .!f /w.!w P7 M.! y%"&"&"&"&,ROPERTY LEVEL 3 PRIP04 = 1 ; PRIORITY PROPERTY LEVEL 4 PRIP05 = -1 ; PRIORITY PROPERTY LEVEL 5 PRIP06 = -1 ; PRIORITY PROPERTY LEVEL 6 PRIP07 = -1 ; PRIORITY PROPERTY LEVEL 7 PRIP08 = -1 ; PRIORITY PROPERTY LEVEL 8 PRIP09 = -1 ; PRIORITY PROPERTY LEVEL 9 PRIP10 = -1 ; PRIORITY PROPERTY LEVEL 10 PRIP11 = 0 ; PRIORITY PROPERTY LEVEL - ** ;* PROGRAMMER: 67 ** ;* DATE 10.04.72 ** ;* ** ;* GULF ELECTRONIC SYSTEMS ** ;* ** ;********************************************************************** ; .DEF MAGTAP,MTINT .; MT4T.02 8-MAY-73 ; MT4T.01 2-MAY-73 ; MT3T.16 1-MAY-73 ; MT3T.15 27-APR-73 .TITLE $$TS30 .LIST MEB .MACRO LMAC EX,DN,DA,FU,NW,CT,?A,?B,?C,?D MOV #C-REL,R0 MOV R0,-(SP) EMT 71 ; MAGTAP .IFEQ EX-1 MOV (R0),R1 CMP R1,#1 .WORD 1374 ; BRANCH IF NOT EQUAL .ENDC .IFEQ EX-3 INC A BR A+2 A: /; MT5T.02 8-MAY-73 ; MT5T.01 2-MAY-73 ; MT3T.16 1-MAY-73 ; MT3T.15 27-APR-73 .TITLE $$TS35 .LIST MEB .MACRO LMAC EX,DN,DA,FU,NW,CT,?A,?B,?C,?D MOV #C-REL,R0 MOV R0,-(SP) EMT 71 ; MAGTAP .IFEQ EX-1 MOV (R0),R1 CMP R1,#1 .WORD 1374 ; BRANCH IF NOT EQUAL .ENDC .IFEQ EX-3 INC A BR A+2 A: 011 PRIP12 = 1 ; PRIORITY PROPERTY LEVEL 12 PRIP13 = -1 ; PRIORITY PROPERTY LEVEL 13 PRIP14 = -1 ; PRIORITY PROPERTY LEVEL 14 PRIP15 = -1 ; PRIORITY PROPERTY LEVEL 15 PRIP16 = 0 ; PRIORITY PROPERTY LEVEL 16 .IFNZ OVRLAY ; .IFL 16.-NPRIOR XXXXXXXX TABLES AND PARAMETERS CURRENTLY CODED XXXXXXXX FOR MAXIMUM OF 16 PRIORITY L1.REF PUSHR,POPR,ACTIVE,$CTASK,IOSTAT,DSPTCH,RESTOR,RELTSK .REF UNSPND,QSAVEI,PPASV5,PPASV6,SVPPA,SAVE .REF TSK.PC,QTIME,DQTIME,IOCOMX ; ; M A G T A P E Q U A T E P A R A M E T E R S ; DATUM = 1 MULRE = 1 ; 0 FOR DELETE, 1 TO INCLUDE DEVICE = 2. ;LOGICAL DEVICE TYPE TYPE = 3. ;EXIT TYPE $EXIT = 4. ;I/O COMPLETE ADDRESS DEVNUM = 6. ;DEVICE NUMBER2 .WORD 0 TST A BNE A+2 .ENDC TST ERROR(R0) BEQ D JMP MTESE .IFEQ EX-3 B: CLR A RTS PC .ENDC .BOUND C: .WORD 1 ; THREAD .BYTE 4,EX ; MAGTAP, EXIT TYPE .IFEQ EX-3 .WORD B-REL ; RETURN ADDRESS FOR EXIT 3 .IFF .WORD 0 .ENDC .WORD DN,0,0 ; DEVICE N3 .WORD 0 TST A BNE A+2 .ENDC TST ERROR(R0) BEQ D JMP MTESE .IFEQ EX-3 B: CLR A RTS PC .ENDC .BOUND C: .WORD 1 ; THREAD .BYTE 4,EX ; MAGTAP, EXIT TYPE .IFEQ EX-3 .WORD B-REL ; RETURN ADDRESS FOR EXIT 3 .IFF .WORD 0 .ENDC .WORD DN,0,0 ; DEVICE N4EVEL .ENDC ; ; THE FOLLOWING SYSGEN PARAMETERS SPECIFY THE NUMBER OF ; ENTRY'S IN A PRIORITY'S QPART TABLE. IF ZERO, THAT ; PRIORITY WILL NOT BE ALLOWED OVERLAY TASKS. A MAXIMUM ; OF 127 ENTRYS PER QPART WILL BE ALLOWED. ; ****NOTE: BE SURE PRIORITIES GREATER THAN NPRIOR HAVE ; TABLE SIZES OF 0 ; NEQP01 = 10. ; NO. OF ENTRYS QPART LEVEL 1 NEQP02 = 10. ; NO. OF ENTRYS QPART LEVEL 2 NEQP03 = 5 LEVEL = 7. ;I/O PRIORITY ERROR = 8. ;ERROR PARAMETER SYSTEM = 10. ;RESERVED (SAVE TASK NUMBER) DATA = 12. ;ADDRESS OF DATA BUFFER DTPAR = 14. ;KPAR6 VALUE FOR VIRTUAL DATA BUFFER ADDRESS DTVIRT = 16. ;SYSTEM VIRTUAL EQUIVALENT OF DATA BUFFER ADDRES FUNCT = 18. ;FUNCTION CODE NWORD = 20. ;BUFFER SIZE IN WORDS COUNT = 22. 6UMBER ERROR WORD SYSTEM .WORD DA-REL,16,20 ; DATA BUFFER ADDRESS SYS SYS .WORD FU,NW,CT ; FUNCTION CODE BUFFER SIZE COUNT .WORD 0,0,0,0 ; STATUS RES1 RES2 RES3 D: NOP ; ************************************************************* .ENDM ERROR = 8. R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 7UMBER ERROR WORD SYSTEM .WORD DA-REL,16,20 ; DATA BUFFER ADDRESS SYS SYS .WORD FU,NW,CT ; FUNCTION CODE BUFFER SIZE COUNT .WORD 0,0,0,0 ; STATUS RES1 RES2 RES3 D: NOP ; ************************************************************* .ENDM ERROR = 8. R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 F 10. ; NO. OF ENTRYS QPART LEVEL 3 NEQP04 = 10. ; NO. OF ENTRYS QPART LEVEL 4 NEQP05 = 10. ; NO. OF ENTRYS QPART LEVEL 5 NEQP06 = 10. ; NO. OF ENTRYS QPART LEVEL 6 NEQP07 = 10. ; NO. OF ENTRYS QPART LEVEL 7 NEQP08 = 10. ; NO. OF ENTRYS QPART LEVEL 8 NEQP09 = 10. ; NO. OF ENTRYS QPART LEVEL 9 NEQP10 = 10. ; NO. OF ENTRYS QPART LEVEL 10 E ;SEE DEFINITION ABOVE STATUS = 24. ;HARDWARE STATUS REGISTER RES1 = 26. ;RESERVED 1 RES2 = 28. ;RESERVED 2 RES3 = 30. ;RESERVED 3 ; MTDVLM = 1 ;HIGHEST LOGICAL DEVICE NUMBER (0 & 1) MTMREW = 177774 ;COM OF DEFINED LOGICAL UNITS MTREP = 18. ;MAG TAPE REPEAT COUNT (4N+2) ; .IFZ DATUM MTWORD = 167540 ;WORD COUNT REGISTG .PAGE ; TASK HEADER .WORD 1 ; THREAD .WORD 4 ; TASK NUMBER .BYTE 20 ; SYSTEM TASK .BYTE 1 ; PRIORITY .WORD MGTS-REL ; ENTRY .WORD 100,0 ; MAX TIME / TIMER .WORD 200 ; STACK SIZE .WORD 0 ; CPU STATUS .WORD 0 ; STACK POINTER .WORD 0 ; ARG .BYTE 6 .BYTE H .PAGE ; TASK HEADER .WORD 1 ; THREAD .WORD 5 ; TASK NUMBER .BYTE 20 ; SYSTEM TASK .BYTE 1 ; PRIORITY .WORD MGTS-REL ; ENTRY .WORD 100,0 ; MAX TIME / TIMER .WORD 200 ; STACK SIZE .WORD 0 ; CPU STATUS .WORD 0 ; STACK POINTER .WORD 0 ; ARG .BYTE 6 .BYTE """"""" """""""""""""""""""""""""@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"ADDB 7B CoQ8}<> A > s=5  'r@λz5 J6T}9 * XT}9 + 5 L\8 O@K9 `s($D33333wwfffffffffffffffffffffffDDDDa ͋,L w:B8 ` 5 &  E >w   f5eU@  [*   & * G &( 8L'4e Q$ BBB"   U@ U e  "U%Gef. U U Bb 0 * B.&0 M &0 & IER MTSTAT = 167542 ;STATUS REGISTER MTCOMM = 167544 ;COMMAND REGISTER MTMEMO = 167546 ;MEMORY ADDRESS REGISTER .IFF MTSTAT = 772520 ; STATUS REGISTER MTCOMM = 772522 ; COMMAND REGISTER MTBCNT = 772524 ; 2'S COMPLEMENT BYTE COUNT REG MTMEMO = 772526 ; MEMORY ADDRESS REGISTER .ENDC ; ; COMMAND CODES FOR MAGNETIC TAPE CONTROLLER .IFZ DATUM READ = 1 WRIT = 2 JNEQP11 = 0. ; NO. OF ENTRYS QPART LEVEL 11 NEQP12 = 0. ; NO. OF ENTRYS QPART LEVEL 12 NEQP13 = 0. ; NO. OF ENTRYS QPART LEVEL 13 NEQP14 = 0. ; NO. OF ENTRYS QPART LEVEL 14 NEQP15 = 0. ; NO. OF ENTRYS QPART LEVEL 15 NEQP16 = 0. ; NO. OF ENTRYS QPART LEVEL 16 ; ; ; THE FOLLOWING ASSIGNS THE START BLOCK IN THE CORE POOL ; FOR A SPECIFIC PRIORITY. ; $SB0KTSKEND-TSTACK/100 .WORD 0,0 ; TPDR 1-2 .WORD 0,0,0 ; TPDR3 - 5 .WORD 0,77406 ; TPDR 6 - 7 .WORD 0,0,0 ; TPAR 0 - 2 .WORD 0,0,0 ; TPAR 3 - 5 .WORD 0,7600 ; TPAR 6 - 7 . = . + 12. .CSECT MTTES REL = . TSTACK: .BLKW 200 MGTS: MOV #1000,MTRCC ; WRITE 16 FILES 37 RECORDS PER FILE MTES1: DEC MTRCC BEQ LTSKEND-TSTACK/100 .WORD 0,0 ; TPDR 1-2 .WORD 0,0,0 ; TPDR3 - 5 .WORD 0,77406 ; TPDR 6 - 7 .WORD 0,0,0 ; TPAR 0 - 2 .WORD 0,0,0 ; TPAR 3 - 5 .WORD 0,7600 ; TPAR 6 - 7 . = . + 12. .CSECT MTTE5 REL = . TSTACK: .BLKW 200 MGTS: MOV #1000,MTRCC ; WRITE 16 FILES 37 RECORDS PER FILE MTES1: DEC MTRCC BEQ M ;WRITE BUFFER WRFM = 4 ;WRITE FILE MARK WEXG = 10 ;WRITE WITH EXTENDED GAP SPCF = 20 ;SPACE FILE FORWARD BCKF = 40 ;BACK SPACE FILE SPCR = 100 ;SPACE RECORD FORWARD BCKR = 200 ;BACK SPACE RECORD REWD = 400 ;REWIND ENAB = 1000 ;ENABLE INTERRUPT OFFL = 2000 ;OFF LINE CLEA = 40000 N01 = 0. $SB002 = 4. $SB003 = 4. $SB004 = 4. $SB005 = 4. $SB006 = 4. $SB007 = 12. $SB008 = 12. $SB009 = 12. $SB010 = 12. $SB011 = 0. $SB012 = 0. $SB013 = 0. $SB014 = 0. $SB015 = 0. $SB016 = 0. ; $NBLKS = $DYNSZ/2-1/256.+1 ; NO. OF BLOCKS IN DYNAMIC CORE ; ; THE FOLLOWING ASSIGNS STORAGE BLOCK SIZES FOR EACH PRIORITY. ; A) IF DYNAMIC-CONTP MTESTE MOV #4,R4 ; WRITE COMMAND MOV MTRCC,R1 BIC #177740,R1 ; WRITE E O F AFTER 31 RECORDS BNE MTES2 INC R4 ; WRITE FILE MARK MTES2: MOV R4,.+56 ; STORE FUNCTION CODE MOV R4,.+136 ; STORE FUNCTION CODE LMAC 2,0,MWOUT,4,150,0 ; WRITE UNIT 0 LMAC 2,1,MWOUT,4,150,0 ; WRITE UNIT 1 BR MTES1 MTESTE: LMAC 2,0,MWRIN,\ MTESTE MOV #4,R4 ; WRITE COMMAND MOV MTRCC,R1 BIC #177740,R1 ; WRITE E O F AFTER 31 RECORDS BNE MTES2 INC R4 ; WRITE FILE MARK MTES2: MOV R4,.+56 ; STORE FUNCTION CODE MOV R4,.+136 ; STORE FUNCTION CODE LMAC 2,0,MWOUT,4,150,0 ; WRITE UNIT 0 LMAC 2,1,MWOUT,4,150,0 ; WRITE UNIT 1 BR MTES1 MTESTE: LMAC 2,0,MWRIN,Q ;CLEAR CONTROLLER MTDVS = 14 ; SHIFT COUNT MTINB = 1000 ; INTERRUPT ENABLE MTCLR = 30000 ; CLEAR CONTROLLER MTRWD = 100 ; TEST IF REWINDING MTUIC = 10000 ; UNIT NUMBER INCREMENT .IFF OFFL = 0 ; SET OFFLINE READ = 2 ; READ RECORD WRIT = 4 ; WRITE RECORD WRFM = 6 ; WRITE FILE MARK SPCR = 10 ; SPACE RECORD BCKR = 12 ; BACKSPACE RECORD WEXG = 10 ; EXTENRAINS THE LARGEST ALLOWABLE BSIZE ; VALUE ; ; B) IF FIXED OR TIME SLICED-CONTAINS ASSIGNED BSIZE ; VALUE FOR THAT PRIORITY ; .IFL PRIP01 $PS001 = $NBLKS-$SB001 .ENDC .IFGE PRIP01 $PS001 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB001-$PS001 XXXXXXXX ; PRI 1 TOO LARGE .ENDC .ENDC .IFL PRIP02 $PS002 = $NBLKS-$SB00S; MAGTAP.315 4-MAY-73 ; MAGTAP.314 2-MAY-73 ; MAGTAP.313 1-MAY-73 ; MAGTAP.312 27-APR-73 ; MAGTAP.311 26-APR-73 ; MAGTAP.310 24-APR-73 ; MAGTAP.309 21-APR-73 .TITLE MAGTAP ;********************************************************************** ;* M A G T A P ** ;* ** ;* PROGRAM IDENTIFICATION. MAGTAP - MAGNETIC TAPE INTERFACE ** T6,0,0 ; REWIND LMAC 1,1,MWRIN,6,0,0 ; REWIND LMAC 2,0,MWRIN,3,200,0 ; READ LMAC 1,0,MWRIN,3,200,0 ; READ MT100: LMAC 2,0,MWRIN,7,0,3 ; SPACE LMAC 1,0,MWRIN,3,200,0 ; READ LMAC 1,0,MWRIN,7,0,-2 ; SPACE LMAC 2,0,MWRIN,3,200,0 ; READ MT150: LMAC 2,1,MWRIN,3,200,0 ; READ LMAC 2,1,MWRIN,10,0,3 ; SKIP FILES LMAC 1,1,MWRIN,UDED GAP SPCF = 10 ; SPACE FILE FORWARD BCKF = 12 ; BACK SPACE FILE REWD = 16 ; REWIND MTDVS = 10 ; SHIFT COUNT MTINB = 20101 ; INTERRUPT ENABLE CLEA = 10000 ; CLEAR CONTROLLER ENAB = 100 ; INTERRUPT ENABLE MTCLR = 1400 ; CLEAR CONTROLLER MTRWD = 2 ; TEST IF REWINDING MTUIC = 400 ; UNIT NUMBER INCREMENT .ENDC ; ; FIRST AND LAST WORDS FOR V2 .ENDC .IFGE PRIP02 $PS002 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB002-$PS002 XXXXXXXX ; PRI 2 TOO LARGE .ENDC .ENDC .IFL PRIP03 $PS003 = $NBLKS-$SB003 .ENDC .IFGE PRIP03 $PS003 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB003-$PS003 XXXXXXXX ; PRI 3 TOO LARGE .ENDC .ENDC W;* SUBROUTINE USING THE KT-11C AND THE GULF CONTROLLER ** ;* ** ;* PURPOSE. ALL COMMUNICATIONS WITH THE MAGNETIC TAPES WILL ** ;* BE THROUGH THIS SUBROUTINE. THIS ROUTINE PERFORMS THE ** ;* FOLLOWING MAGNETIC TAPE FUNCTIONS: ** ;* 1 OPEN (RETURN STATUS) ** ;* 2 CLOSE (NO OPERATION) X3,200,0 ; READ LMAC 1,1,MWRIN,7,0,51 ; SPACE MT175: LMAC 2,1,MWRIN,3,200,0 ; READ LMAC 2,1,MWRIN,10,0,-2 ; SKIP FILES LMAC 1,1,MWRIN,3,200,0 ; READ LMAC 3,1,MWRIN,3,200,0 ; READ MT200: LMAC 3,0,MWRIN,7,0,2 ; SPACE RECORD LMAC 3,0,MWRIN,3,200,0 ; READ LMAC 2,3,MWRIN,11,0,0 BR MTEND MTESE: NOP ; USE FOR ERROR BREAK POINT MTEND: YLIST THREAD MTFRST: .WORD 0 .IFZ $KT11C MTLAST: .WORD MTFRST .IFF MTLAST: .PACK MTFRST CDTLST: .WORD 0 ; USED TO SAVE CURRENT LIST S.V.A. MTPAR5: .WORD 0 ; USED TO SAVE CURRENT LIST PAR5 .ENDC NMTREQ: .WORD -1 ; NUMBER OF (REQUESTS - 1) IN QUEUE ; ; MAGNETIC TAPE FUNCTION JUMP TABLE MTFCT =.-2 .WORD MOPEN ;OPEN .WORD MCLOS ;CLOSE .WORD MREAD ;RZ .IFL PRIP04 $PS004 = $NBLKS-$SB004 .ENDC .IFGE PRIP04 $PS004 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB004-$PS004 XXXXXXXX ; PRI 4 TOO LARGE .ENDC .ENDC .IFL PRIP05 $PS005 = $NBLKS-$SB005 .ENDC .IFGE PRIP05 $PS005 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB005-$PS005 XXXXXXXX [ ** ;* 3 READ ** ;* 4 WRITE ** ;* 5 WRITE FILE MARK ** ;* 6 REWIND ** ;* 7 SPACE (+-N) RECORDS ** ;* 10 SKIP (+-N) FILES ** ;* 11 MULTIPLE REWIND EMT 4 ; EXIT ; .WORD 0 MWOUT: .ASCII /THIS BUFFER OF DATA WILL BE USED TO TEST THE MAGNETIC TAPE 62C/ .EVEN MTRCC: .WORD 1234 ; REPEAT COUNT .ASCII /SECOND LINE OF THE WRITE, REWIND, AND READ TEST 62 CHARACTERS./ MWRIN: .ASCII /INPUT BUFFER/ .EVEN .BLKW 37 .WORD 0 .BLKW 200 . = . + 200 TSKEND: .END ]EAD .WORD MWRIT ;WRITE .WORD MWEOF ;WRITE FILE MARK .WORD MREWI ;REWIND .WORD MSPRC ;SPACE +-N RECORDS .WORD MSKFI ;SKIP +-N FILES .IFNZ MULRE .WORD MUREW ;REWIND MULTIPLE UNITS .ENDC ; MAGNETIC TAPE RETURN AFTER INTERRUPT JUMP TABLE MTRET =.-2 .WORD MOPEN ;OPEN .WORD MCLOS ;CLOSE .WORD MRREA ^ ; PRI 5 TOO LARGE .ENDC .ENDC .IFL PRIP06 $PS006 = $NBLKS-$SB006 .ENDC .IFGE PRIP06 $PS006 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB006-$PS006 XXXXXXXX ; PRI 6 TOO LARGE .ENDC .ENDC .IFL PRIP07 $PS007 = $NBLKS-$SB007 .ENDC .IFGE PRIP07 $PS007 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL_ ** ;* ALL THREE STANDARD R0S I/O EXITS ARE SUPPORTED BY MAGTAP. ** ;* ** ;* USAGE. THE ASSEMBLER LINKAGE TO MAGTAP IS: ** ;* ** ;* MOV #LIST,-(SP) ;PUSH LIST ADDRESS ON STACK ** ;* EMT MAGTAP ** ;* 6,0,0 ; REWIND LMAC 1,1,MWRIN,6,0,0 ; REWIND LMAC 2,0,MWRIN,3,200,0 ; READ LMAC 1,0,MWRIN,3,200,0 ; READ MT100: LMAC 2,0,MWRIN,7,0,3 ; SPACE LMAC 1,0,MWRIN,3,200,0 ; READ LMAC 1,0,MWRIN,7,0,-2 ; SPACE LMAC 2,0,MWRIN,3,200,0 ; READ MT150: LMAC 2,1,MWRIN,3,200,0 ; READ LMAC 2,1,MWRIN,10,0,3 ; SKIP FILES LMAC 1,1,MWRIN,a ;READ .WORD MRWRI ;WRITE .WORD MRWEO ;WRITE FILE MARK .WORD MRREW ;REWIND .IFZ DATUM .WORD MSPRC ;SPACE +-N RECORDS .IFF .WORD MRPRC .ENDC .WORD MSKFI ;SKIP +-N FILES .IFNZ MULRE .WORD MUREWI .ENDC MTIMV =.-3 ; TIME OUT VALUE IN SECONDS .BYTE 5 ; READ .BYTE 5 ; WRITE b $NBLKS-$SB007-$PS007 XXXXXXXX ; PRI 7 TOO LARGE .ENDC .ENDC .IFL PRIP08 $PS008 = $NBLKS-$SB008 .ENDC .IFGE PRIP08 $PS008 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB008-$PS008 XXXXXXXX ; PRI 8 TOO LARGE .ENDC .ENDC .IFL PRIP09 $PS009 = $NBLKS-$SB009 .ENDC .IFGE PRIP09 $PS009 = 4. c ** ;* THE FORTRAN EQUIVALENT CALL IS: ** ;* ** ;* CALL MAGTAP(IADDR(LIST)) ** ;* ** ;* THE FORMAT OF THE LIST IS AS FOLLOWS: ** ;* ** ;* LIST THREAd̔du~#"~     ~x55f&R~ m& %L   a0 a ^  v^r@rBr@  &!0 ~h  ? ߐ6 e e @fe .BYTE 5 ; WRITE FILE MARK .BYTE 180. ; REWIND .BYTE 5 ; SPACE .BYTE 60. ; SKIP .IFNZ MULRE .BYTE 1 ; MULTIPLE REWIND .ENDC .BOUND MTTLI: ;MAGNETIC TAPE TIMER LIST .WORD 1 .WORD 0,0,0 ; RSVRD 1 TO 3 .BYTE SECR ; TIMER RESOLUTION .BYTE 20 ; TIMER OPTIONS (J) .WORD 0 ; RESERVED f ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB009-$PS009 XXXXXXXX ; PRI 9 TOO LARGE .ENDC .ENDC .IFL PRIP10 $PS010 = $NBLKS-$SB010 .ENDC .IFGE PRIP10 $PS010 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB010-$PS010 XXXXXXXX ; PRI 10 TOO LARGE .ENDC .ENDC .IFL PRIP11 $PS011 = $NBLKS-$SB011 gD ** ;* +2 EXIT TYPE (1-3) DEVICE TYPE ** ;* +4 EXIT ADDRESS (EXIT TYPE 3 ONLY) ** ;* +6 DEVICE NUMBER FOR FUNCTIONS 1-10, SET BITS FOR 11 ** ;* +10 RETURN ERROR PARAMETER (0 TO 14) ** ;* +12 SYSTEM (CALLING TASK #) ** ;* +14 DATA BUFFER ADDRESS ** ;* +16 KPAR6 VALUE FOR VIh w@f 6 ߐ s~  &f%V  G  & |zf perrB2@2U~X& N 2 e   ! dB6   E@~f&fP~7 7  f&f&& &  B 0eW @w B~H    i .WORD MTTIM ; OPTIONAL (A=1) .WORD 0,0 ; OPTIONAL (F=1) .WORD MTTIM ; OPTIONAL (J=1) .WORD 0 ; OPTIONAL (T=1) ; ; MACRO DEFINITIONS ; .MACRO SAV.56 .IFNZ $KT11C MOV @#$KPAR5,-(SP) MOV @#$KPAR6,-(SP) .ENDC .ENDM ; .MACRO RST.56 .IFNZ $KT11C MOV (SP)+,@#$KPAR6 MOV (SP)+,@#$KPAR5 .ENDC j.ENDC .IFGE PRIP11 $PS011 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB011-$PS011 XXXXXXXX ; PRI 11 TOO LARGE .ENDC .ENDC .IFL PRIP12 $PS012 = $NBLKS-$SB012 .ENDC .IFGE PRIP12 $PS012 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB012-$PS012 XXXXXXXX ; PRI 12 TOO LARGE .ENDC .ENDC .IkRTUAL DATA BUFFER ADDRESS (ASR 6) ** ;* +20 SYSTEM VIRTUAL EQUIVALENT OF DATA BUFFER ADDRESS ** ;* +22 FUNCTION (CODES LISTED ABOVE) ** ;* +24 NWORD ** ;* +26 COUNT ** ;* +30 STATUS ** ;* +32 -BACKSPACE FLAG REPEAT COUNT ** ;* +34 l &fw 5 82  && e ~55 5@  &  ]<] e5   Z  &f ~8    d ^w    7 ,X "~Nw #c# w   _ H Iu}`m.ENDM .PAGE ; S T A R T O F M A G T A P MAGTAP: JSR R5,PUSHR ;SAVE R0-R5 ON STACK MOV 14.(SP),R0 ;R0 = F.W.A. OF LIST SAV.56 MOV #1,R4 ;SET ERROR CODE IN R4 DEC (R0) ;IS THREAD = 1 BNE MTERR ;IF NOT, RETURN ; IS DEVICE TYPE = 4 INC R4 ; SET R4 = 2 CMPB DEVICE(R0),#4 BNE MTERR ;RETURN IF NOT 4 nFL PRIP13 $PS013 = $NBLKS-$SB013 .ENDC .IFGE PRIP13 $PS013 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB013-$PS013 XXXXXXXX ; PRI 13 TOO LARGE .ENDC .ENDC .IFL PRIP14 $PS014 = $NBLKS-$SB014 .ENDC .IFGE PRIP14 $PS014 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB014-$PS014 XXXXXXXX ; PRI 14o RESERVED ** ;* +36 RESERVED ** ;* ** ;* THE RETURN ERROR CODES ARE AS FOLLOWS: ** ;* ** ;* 0 I/O SUCCESSFUL ** ;* 1 LIST ALREADY IN A QUEUE ** ;* 2 INp~( t:Z2.!r"    reh ~0 @7II I   I7 H7 F7 D7 F7 >7 <> p0! .!0" ~ 7#^& w )  )w`)He )* ** * **P *w h~` .3h-lwj+fwd>|BqBq; IS EXIT TYPE 1 OR 2 INC R4 ;SET R4 = 3 MOVB TYPE(R0),R1 ;R1 = EXIT TYPE BLE MTERR ;BRANCH IF .LE. 0 CMP R1,R4 BGT MTERR ; BR IF .GT. 3 ; IS THE FUNCTION CODE DEFINED MOV #10,R4 ;SET R4 = 8 MOV FUNCT(R0),R1 ;PLACE FUNCTION CODE IN R1 MOV R1,RES2(R0) BLE MTERR ;BRANCH IF NEGATIVE CMP R1,R4 .IFZ r TOO LARGE .ENDC .ENDC .IFL PRIP15 $PS015 = $NBLKS-$SB015 .ENDC .IFGE PRIP15 $PS015 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB015-$PS015 XXXXXXXX ; PRI 15 TOO LARGE .ENDC .ENDC .IFL PRIP16 $PS016 = $NBLKS-$SB016 .ENDC .IFGE PRIP16 $PS016 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$sVALID DEVICE TYPE ** ;* 3 ILLEGAL EXIT TYPE ** ;* 5 ILLEGAL DEVICE NUMBER ** ;* 10 ILLEGAL I/O FUNCTION CODE ** ;* 11 FATAL HARDWARE ERROR, STATUS REG IS IN WORD 13 ** ;* 12 MAGNETIC TAPE TIME OUT ** ;* 14 WRITE COMMAND FOR REAL WITHOUT WRITE RING ** ;* t~K8~4J40  ~ 7 7?)\DnD0) ,%)#)7E %)7zh %~      ߕw ~e~ ٟ zX &~&B&.!.! & p7 503 ؄ f&"&&&&&~p M) F LR  F,:ط4ط.؀u MULRE BGT MTERR ;BR IF R1 IS MORE THAN 8 .IFF BGT MT01 ;BR IF MORE THAN 8 .ENDC MOV #5,R4 ; SET LOGICAL DEVICE ERROR CODE MOVB DEVNUM(R0),R1 BLT MTERR ; BR IF NEGATIVE DEVICE NUMBER CMP R1,#MTDVLM ; IS DEVICE NUMBER DEFINED BGT MTERR ; BR IF NOT INC R4 ; SET SKIP OR SPACE COUNT ERROR CODE CMP R1,#7 vSB016-$PS016 XXXXXXXX ; PRI 16 TOO LARGE .ENDC .ENDC ; ; .ENDC ; MATCH FOR .IFNZ OVRLAY ; ; ROS SYSTEM TASK NUMBERS ; ; $INPNO = 1 ; INPUT $CPTNO = MXTASK+2. ; COMPRS $INITD = 3. ; DISC INITIALIZER $FLTNO = MXTASK+4. ; FILE LIST $RLDNO = MXTASK+5. ; ROS LOADER $RASNO = MXTASK+6. ; ROS ASSEMBLER TASK NUMBER $UTLNO = w ** ;* COUNT =NUMBER OF WORDS READ BY THE READ COMMAND ** ;* =NUMBER OF RECORDS (+-N) TO SPACE ** ;* =NUMBER OF FILES (+-N) TO SKIP ** ;* =UNUSED FOR ALL OTHER FUNCTIONS ** ;* ** ;* PROGRAMMER: 67 ** ;*xPP50 =CDwwFg~4 <3.! (*$50F  F Un w 7 ~`.! w  #(e&t7T׀ EU6&t70׀ EU6&f~WtEAWt E`v&f# & lWtE@`$Wtր E`v~P x&f& & WtEy BLT MT02 TST COUNT(R0) BEQ MTERR ;BR IF COUNT IS ZERO CLR NWORD(R0) MT01: .IFNZ MULRE CMP R1,#11 BGT MTERR ; BR IF MORE THAN 9 .ENDC MT02: CLR SYSTEM(R0) ; PLACE LIST IN THREAD MOV @#PS,-(SP) ;INHIBIT INTERRUPTS, SAVE PROGRAM STATUS REG. SPL 7 ;SET PRIORITY TO 7 .IFZ $KT11C MOV R0,@MTLAST ;Qz MXTASK+7. ; ROS UTILITY TASK $TKCNO = MXTASK+8. ; TASK C??? $TMRNO = 2. ; TIMER QUEUE PROCESSOR ; .PAGE $ABMES = 3 ; NO. OF ABORT MESSAGE BUFFERS .IFL $ABMES ; $ABMES MUST BE => 0. XXXXXX ; ABRT .ENDC ; PSTP ; THE SYSGEN PARAMETER '$PST CONTRO{ DATE 10.04.72 ** ;* ** ;* GULF ELECTRONIC SYSTEMS ** ;* ** ;********************************************************************** ; .DEF MAGTAP,MTINT .REF PUSHR,POPR,ACTIVE,$CTASK,IOSTAT,DSPTCH,RESTOR,RELTSK .REF UNSPND,QSAVEI,PPASV5,P|@`7$\րEt7`LֶEU&f~& & WtE@`7$րEt7`նEU ~@z>~~0 }UEUE IT MOV R0,MTLAST .IFF MOV R0,-(SP) ; STORE SYSTEM VIRTUAL LIST ADDRESS ON STACK JSR PC,SVPPA ; GET LIST'S PPA (PACKED PHYSICAL ADDRESS ) MOV MTLAST,-(SP) ; CONVERT THE ADDRESS OF THE LAST ENTRY IN QUEUE JSR PC,PPASV6 ; GET LAST'S SVA (SYSTEM VIRTUAL ADDRESS ) MOV 2(SP),@(SP)+ ; QUEUE THE CURRENT REQUEST MOV (SP)+,MTLAST MOV 16(R0),@#$KPAR6 .ENDC ~LS THE EXECUTION PATH*PSTP ; DURING A TASK ERROR. PSTP ; = -1 ROS + USER ROUTINES PSTP ; = 0 ROS PSTP ; = +1 USER PSTP ; PSTP $PST = 0 ; PSTP ; PASV6,SVPPA,SAVE .REF TSK.PC,QTIME,DQTIME,IOCOMX ; ; M A G T A P E Q U A T E P A R A M E T E R S ; DATUM = 0 MULRE = 1 ; 0 FOR DELETE, 1 TO INCLUDE DEVICE = 2. ;LOGICAL DEVICE TYPE TYPE = 3. ;EXIT TYPE $EXIT = 4. ;I/O COMPLETE ADDRESS DEVNUM = 6. ;DEVICE NUMBER LEVEL = 7. ;I/O PRIORITY ERROR = 8. ;ERROR PARAMETER 1~ ~ !@~! CMP 16+4*$KT11C(SP),#TSK.PC ; IS CALLER A TASK BNE MT04 ; BRANCH IF NOT MOV $CTASK,R2 INCB IOSTAT(R2) MOV R2,SYSTEM(R0) MT04: MOV (SP)+,@#PS MOV #MTREP,RES1(R0) ; SET REPEAT COUNT AND CLEAR BACK SPACE INC NMTREQ ; BUMP NUMBER OF REQUESTS BNE MTEX2 ;BR IF NOT FIRST IN QUEUE .IFNZ $KT11C MOV R0,CDTLST ; SAVE LIST S.V.A. FOR INTER PSTP .PAGE $CLOCK = 0 ; INTERRUPTS SOURCE OFR MAINTAINING ; ; TIMERS AND DECKS ; ; 0=DEC LINE FREQUENCY(KW11-2) ; ; 1=DDS CLOCKSX ;FOLLOWING ARE SYSGEN PARAMETERS FOR THE TIMER AND CALENDAR ROUTINES ; NORMALLY THE BASE PERIOD FOR THE TIMERS IS THE INTERRUPT PERIOD, AND ; IF THAT PERIOD IS DESIRED FOR USE BY ANY SYSTEM = 10. ;RESERVED (SAVE TASK NUMBER) DATA = 12. ;ADDRESS OF DATA BUFFER DTPAR = 14. ;KPAR6 VALUE FOR VIRTUAL DATA BUFFER ADDRESS DTVIRT = 16. ;SYSTEM VIRTUAL EQUIVALENT OF DATA BUFFER ADDRES FUNCT = 18. ;FUNCTION CODE NWORD = 20. ;BUFFER SIZE IN WORDS COUNT = 22. ;SEE DEFINITION ABOVE STATUS = 24. ;HARDWARE STATUS REGISTER RES1 = ~"O~"w ,×& u6 ^~#7!p.! .!k!g  [.!ߐ"W  !Q *r B f> 6~x#1> .!4!2 7"7" ߐ<ѷ6w h ee HRUPT ROUTINE MOV $KPAR5,MTPAR5 ; SAVE KPAR5 FOR INTERRUPT POUTINE .ENDC MOV FUNCT(R0),R1 ;RETURN JUMP TO ASL R1 JSR PC,@MTFCT(R1) ; ROUTINE CMP RES2(R0),#2 BLE MTXB2 TST R4 BEQ MTEX1 ;BR IF NO ERRORS MTXB2: JSR PC,MTDEQ ; DEQUEUE REQUEST BR MTEXIT MTERR: INC (R0) MOV R4,ERROR(R0) ;STORE ERROR CODE IN LISTIMER MODULE, "RESO" MUST BE ; SET TO 1, AND THAT RESOLUTION (ZERO) SPECIFIED BY THOSE MODULES. ; IF IT IS DESIRED TO MAKE THE BASE PERIOD COARSER THAN THE INTERRUPT ; PERIOD, "$TMBAS" MUST BE SET TO THE DESIRED RATIO OF BASE PERIOD TO ; INTERRUPT PERIOD. $TMBAS = 0 ;DE-SELECT ALTERNATE BASE PERIOD OPTION ; THE FOLLOWING PARAMETERS SPECIFY THE MULTIPLIERS THAT WILL BE LOADED ; INTO THE RESOLUTION COUNTER TABLES FOR DETERMINING THE PERIOD OF EACH ; RESOULTION. THE PE 26. ;RESERVED 1 RES2 = 28. ;RESERVED 2 RES3 = 30. ;RESERVED 3 ; MTDVLM = 1 ;HIGHEST LOGICAL DEVICE NUMBER (0 & 1) MTMREW = 177774 ;COM OF DEFINED LOGICAL UNITS MTREP = 18. ;MAG TAPE REPEAT COUNT (4N+2) ; .IFZ DATUM MTWORD = 167540 ;WORD COUNT REGISTER MTSTAT = 167542 ;STATUS REGISTER MTCOMM = 167544 ;COMMAND REGISwv ~#6 &&f F-  l7 fv  & @~h$6 6U×7 7  7 ~ .!!!.!ߐ && 2~$.! J<1>1<ߐH& w4—!& R1.!7 7 7 7 0 !~X%W  ! .!f /w.!w P7 M.! y%"&"&"&"&T MTEXIT: MOV @#MTSTAT,STATUS(R0) RST.56 JSR R5,POPR ;RESTORE REGISTERS MOV (SP)+,(SP) ;MOVE RETURN ADDRESS RTS PC ;RETURN TO CALLE- MTEX1: MOV #MTTLI,-(SP) ;ADDRESS OF MAG TAPE TIMER LIST MOV FUNCT(R0),R1 MOVB MTIMV(R1),-(SP) ; TIMER DELAY JSR PC,QTIME TST (SP)+ MTEX2: CMPB #2,TYPE(R0) ;TYPE 2 ? BNE MTEXIT RIOD OF A GIVEN RESOLUTION LEVEL DEPENDS ON ALL ; THE PRECEDING LEVELS (WITH LOWER NUMBERS), WHICH ACT AS SUCCESSIVE ; MULTIPLIERS IN COUNTING TO THE GIVEN RESOLUTION LEVEL. ; THUS, FOR "RES4", ITS PERIOD WOULD BE: ; RES4*RES3*RES2*RES1*RES0 --- IN UNITS OF THE BASE PERIOD RES0 = 1 ; 0.01 SEC RES1 = 1 ; 0.01 SEC RES2 = 2 ; 0.02 SEC RES3 = 5 ; 0.1 SEC RES4 = 2 ; TER MTMEMO = 167546 ;MEMORY ADDRESS REGISTER .IFF MTSTAT = 772520 ; STATUS REGISTER MTCOMM = 772522 ; COMMAND REGISTER MTBCNT = 772524 ; 2'S COMPLEMENT BYTE COUNT REG MTMEMO = 772526 ; MEMORY ADDRESS REGISTER .ENDC ; ; COMMAND CODES FOR MAGNETIC TAPE CONTROLLER .IFZ DATUM READ = 1 WRIT = 2 ;WRITE BUFFER WRFM = 4 ;WRITE FILE MARK WEXG = 10 "&%"&%%"&"&"&%& . 7^)S~% !.!.!&& 2.!^&W"1f w cc~H&c0&@&P&Uw xv Ew  !7 | &  .!  k D A~&gHd.!B <X , MW"I <r<<>`>2 >2 >& Lr>~8'2 >2 > 1 !.! ;BR IF NOT TST SYSTEM(R0) ;SEE IF THIS IS A TASK CALLING BEQ MTEXIT ;BR IF THE CALLER IS NOT A TASK .IIF NE $KT11C ADD #4,SP ; THE CALLER IS A TASK, THE PAR'S CAN GO MOV @#PS,14.(SP) ;PLACE PS ON STACK JSR R5,POPR ;RESTORE REGESTERS CLR -(SP) ;SET INVOLUNTARY SUSPEND FLAG JSR PC,QSAVEI ;AND LET QSAVI SUSPEND THE TASK JMP DSPTCH .PAGE ; MAGNETIC TAPE I0.2 SEC RES5 = 5 ; 1.0 SEC RES6 = 5 ; 5.0 SEC RES7 = 2 ; 10.0 SEC RES8 = 3 ; 30.0 SEC RES9 = 2 ; 60.0 SEC RES10 = 5 ; 5 MIN RES11 = 2 ; 10 MIN RES12 = 3 ; 30 MIN RES13 = 2 ; 60 MIN RES14 = 2 ; 2 HRS RES15 = 6 ; 12 ;WRITE WITH EXTENDED GAP SPCF = 20 ;SPACE FILE FORWARD BCKF = 40 ;BACK SPACE FILE SPCR = 100 ;SPACE RECORD FORWARD BCKR = 200 ;BACK SPACE RECORD REWD = 400 ;REWIND ENAB = 1000 ;ENABLE INTERRUPT OFFL = 2000 ;OFF LINE CLEA = 40000 ;CLEAR CONTROLLER MTDVS = 14 ; SHIFT COUNT MTINB = 1000 ; INTERRUPT && 1 0.!vfͷ`w   .!w n@×& a~'K7!H.!E.!!ߐ&& 0 -   A f> t> .!ߐ~((w  w 6   <`` !!  ~(J B.!wtCe: A@Cf U0 f~).!NTERRUPT ROUTINE MTINT: JSR R5,SAVE SPL 5 TST NMTREQ BMI MTEYIT .IFZ $KT11C MOV MTFRST,R0 ;PLACE LIST ADDRESS IN R0 .IFF MOV CDTLST,R0 ; PLACE CURRENT LIST S V A IN R0 MOV MTPAR5,$KPAR5 ; GET CURRENT LIST PAR5 .ENDC MOV #MTTLI,-(SP) JSR PC,DQTIME TST (SP)+ CLR R4 ; BRANCH ON FUNCTION CODE ON RETURNING FROM AN I HRS ; IN SYSTEMS WHERE THE BASE PERIOD IS GREATER THAN ONE MILLISECOND, ; "MSECR" WILL NECESSARILY HAVE A PERIOD GREATER THAN ONE MILLISECOND. MSECR = 0 ;MAX RESOLUTION: #0 AT 10 MILLISECONDS SECR = 5 ;"RES5" IS THE ONE-SECOND RESOLUTION TRES = SECR ; FOR TIME-SLICE WATCH-DOG IN RPOM $NRES = 16. ;USE MAX # OF RESOLUTIONS .IFLE $NRES XXXXXXXX ;$NRES MUST BE FROM 1 TO 16 ENABLE .IFF OFFL = 0 ; SET OFFLINE READ = 2 ; READ RECORD WRIT = 4 ; WRITE RECORD WRFM = 6 ; WRITE FILE MARK SPCR = 10 ; SPACE RECORD BCKR = 12 ; BACKSPACE RECORD WEXG = 10 ; EXTENDED GAP SPCF = 10 ; SPACE FILE FORWARD BCKF = 12 ; BACK SPACE FILE REWD = 16 ; REWIND MTDVS = 10 ; SHIFT COUNT MTINB = 20101 ; INTERRUPT ENABLE CLEA = 10000 ; CLEAR CONTROLLER .ENDC ; ww ABCD fEeU0 fUEfEEw$`UC ~)@ u E ptrv)))0)@20)00*~27~* w   . &*&ʷw , Z~*fʷ`w & w*5*@**Ѐ* w N     **5***ONTERRUPT MOV FUNCT(R0),R5 ;LOAD FUNCTION CODE (1 TO 8) ASL R5 JSR PC,@MTRET(R5) MOV @#MTSTAT,STATUS(R0) TST R5 BNE MTEYIT MTINRE: JSR PC,MTDQXN MTEYIT: JMP RESTOR .PAGE MTDQXN: JSR PC,MTDEQ ; DEQUEUE REQUEST CMPB TYPE(R0),#2 ;TYPE 2 EXIT BNE MTIN00 MOV SYSTEM(R0),-(SP) ;PLACE TASK NUMBER ON STACK CLR .ENDC .IFG $NRES-16. XXXXXXXX ;COME ON! MUST BE LESS THAN 17 .ENDC ; THE BASE PERIOD FOR THE TIME-OF-DAY CLOCK, ABORT, AND TIME-SLICE IS ; NORMALLY THE INTERRUPT PERIOD, AS SPECIFIED BY "TICRES". ; IF A MULTIPLIER FOR THIS INTERRUPT IS DESIRED TO PRODUCE A COARSER ; BASE PERIOD, USE THE PARAMETER "$ABMPL" TO SPECIFY THE RATIO DESIRED. TICRES = 10. ;T-O-D CLOCK TICKS-PER-SECOND $ABMPL = 0 ;NO T-O-D CLOC ; FIRST AND LAST WORDS FOR LIST THREAD MTFRST: .WORD 0 .IFZ $KT11C MTLAST: .WORD MTFRST .IFF MTLAST: .PACK MTFRST CDTLST: .WORD 0 ; USED TO SAVE CURRENT LIST S.V.A. MTPAR5: .WORD 0 ; USED TO SAVE CURRENT LIST PAR5 .ENDC NMTREQ: .WORD -1 ; NUMBER OF (REQUESTS - 1) IN QUEUE ; ; MAGNETIC TAPE FUNCTION JUMP TABLE MTFCT =.-2 .WORD MOPEN ;OPEN .WORD MCLOS ;CLOSE ~*1*w EE  *D) *D * |@+1 *wJ\+,,,,,,,---0->-P-*W*H@*w*~p+xD*w*pɴ  -m=)  ) *wf) > =)=)*  w 0 &&~~+ jw . @*w* !& ,  1* R* e* **& @*5*1*e~`,*& v*5* ^w1***f) T  *1* ) * * -(SP) ;PUSH 0 ON STACK JSR PC,UNSPND TST (SP)+ ;POP OFF ERROR CODE MTIN00: CMPB TYPE(R0),#3 BNE MTIN02 MOV R0,-(SP) ; LIST ADDRESS MOV SYSTEM(R0),-(SP) ; TASK NUMBER JSR PC,IOCOMX ; EXECUTE I/O COMPLETE SUBROUTINE MTIN02: TST NMTREQ BMI MTDQD ; BR IF -1 MOV MTFRST,R0 ;GET NEXT LIST ADDRESS .IFNZ $KT1K BASE MULTIPLIER TODINT = 320 ;INTERRUPT VECTOR FOR T-O-D INTERRUPT TIMINT = TODINT+4 ;INTERRUPT VECTOR FOR INTERVAL TIMER STLINT = TIMINT+4 ;VECTOR FOR STALL ALARM INTERRUPT STLREG = 167000 ;ADDRESS FOR STALL ALARM RESET .IFNZ $CLOCK CLKENB = 167002 ;ADDRESS FOR ENABLE OF CLOCKS TODBIT = 4 ;BIT TO ENABLE TIME-OF-DAY INTERRUPT TIMBIT = 10 ;BIT TO ENABLE INTERVAL TI .WORD MREAD ;READ .WORD MWRIT ;WRITE .WORD MWEOF ;WRITE FILE MARK .WORD MREWI ;REWIND .WORD MSPRC ;SPACE +-N RECORDS .WORD MSKFI ;SKIP +-N FILES .IFNZ MULRE .WORD MUREW ;REWIND MULTIPLE UNITS .ENDC ; MAGNETIC TAPE RETURN AFTER INTERRUPT JUMP TABLE MTRET =.-2 .WORD MOPEN ;OPEN .WORD MCLOS ;CLOSE) *1 *U~,) **^) *}*) ** ) *1 *wJ )1* * ) *1*@*w*wZ~P-*w )*ww |ҜEE D) @*w*\B*w*T f) 4 D)+ŀ| n *@~--el.*BE,I  5@ =)C) 5@@wĕ  *^) *2   ~@. ށ * *ĕ\ **Ē1*  1*ĕ\ * *1C MOV R0,-(SP) ; CONVERT LIST ADDRESS JSR PC,PPASV5 ; FROM PACKED PHYSICAL TO MOV (SP)+,R0 ; SYSTEM VIRTUAL MOV R0,CDTLST ; SAVE FOR NEXT MOV $KPAR5,MTPAR5 ; INTERRUPT MOV DTPAR(R0),@#$KPAR6 ;INITIALIZE KPAR FOR DATA BUFFER ADDR .ENDC MOV FUNCT(R0),R1 ;RETURN JUMP TO ASL R1 ; FUNCTIONAL JSR PC,@MTFCT(R1) ; RMER INTERRUPT STLBIT = 0 ;BIT TO ENABLE STALL ALARM INTERRUPT .ENDC .IFZ $CLOCK CLKENB = 777546 ;ADDRESS OF DEC LINE CLOCK TODBIT = 0 ; TIMBIT = 100 ;CLOCK ENABLE BIT STLBIT = 0 ; .ENDC $TMSLC = 1 ;SYSTEM OPTION FOR INCLUDING TIME-SLICING $SWATZ = 20. ;NUMBER OF ENTRIES IN SCHEDULER "WAIT" TABLE $TWATZ = 20. ;WORDS IN TIMER'S "WAI .WORD MRREA ;READ .WORD MRWRI ;WRITE .WORD MRWEO ;WRITE FILE MARK .WORD MRREW ;REWIND .IFZ DATUM .WORD MSPRC ;SPACE +-N RECORDS .IFF .WORD MRPRC .ENDC .WORD MSKFI ;SKIP +-N FILES .IFNZ MULRE .WORD MUREWI .ENDC MTIMV =.-3 ; TIME OUT VALUE IN SECONDS .BYTE 5 ; READ  *f) ^ )=) *f) B ĕ=1~.) *  /w F/ W<"3.5"36A"3p&" ! 0 !C `0  ~~0/5@"3A<3& & 0 N & P&* "* ( 4*A~/ *a  *f `D` %**YD) 1 **(1 *@*w*75**4~ 04   *=)f)@) OUTINE CMP RES2(R0),#2 BLE MTINRE TST R4 BNE MTINRE MTIN05: MOV #MTTLI,-(SP) MOV FUNCT(R0),R1 MOVB MTIMV(R1),-(SP) JSR PC,QTIME TST (SP)+ MTDQD: RTS PC .PAGE ; MAGNETIC TAPE TIME OUT ROUTINE MTTIM: JSR R5,PUSHR TST NMTREQ ; IS QUEUE EMPTY BMI MTTIM2 .IFZ $KT11C MOV MTFRST,R0 .IFF T" TABLE .PAGE ; $DTAPE = 1 ; DECTAPE OPTION ; NDISCS = 1 ;NO. OF DISC CONTROLLERS (0 = NO DISCS) ; $DDSDC = 1 ; USE DDS DICS ; ACTSIZ = 20. ; MAXIMUM NO. OF ENTRIES IN AUTH. CODE .IFL 20.-ACTSIZ XXXXXXXX ; ERROR-ALLOCATE MORE LOCATIONS XXXXXXXX ; FOR AUTHORIZATION CODES .ENDC ; .IFNZ NDISCS DRESDI = 1 .BYTE 5 ; WRITE .BYTE 5 ; WRITE FILE MARK .BYTE 180. ; REWIND .BYTE 5 ; SPACE .BYTE 60. ; SKIP .IFNZ MULRE .BYTE 1 ; MULTIPLE REWIND .ENDC .BOUND MTTLI: ;MAGNETIC TAPE TIMER LIST .WORD 1 .WORD 0,0,0 ; RSVRD 1 TO 3 .BYTE SECR ; TIMER RESOLUTION .BYTE 20 ; TIMER OPTIONS (J) .WORD 0 J@*w*7**3 1 *1* *D)A5@ =)f)~0* *)f)ÝB * A)72*w0*@*w*@*w*7  5@*~1"3w<3 5"3|5"3x5 "3U"3=)=)"3pw` Bte* @e*e* :J  ~1  *3****** E **************** *3*3* ~2})f) MOV CDTLST,R0 ; GET LIST S.V.A. MOV MTPAR5,$KPAR5 ; AND ASSOCIATED PAR5 .ENDC CMP FUNCT(R0),#11 BNE MTTIM1 JSR PC,MUREWI TST R2 BEQ MTTIM4 MOV #MTTLI,-(SP) ; TIMER LIST MOV #1,-(SP) ; TIMER DELAY JSR PC,QTIME TST (SP)+ BR MTTIM2 ; DEQUEUE THE REQUEST MTTIM1: MOV #12,R4 MTTIM4: JSR PC,MTDQX ; DISC RESIDENT DIRECTORY OPTION .IFL 3-NDISCS XXXXXXXX ; PRESENTLY CODED FOR MAX. OF 3 DISCS .ENDC ; NDPRT1 = 5 ; NO. OF PRIORITY LEVELS IN DISC 1 QUEUES .IFL NDPRT1-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC MAXID1 = 500. ; MAXIMUM ID ON DISC 1 ; .IFG NDISCS-1 NDPRT2 = 7 ; NO. OF PRIORITY LEVELS IN DISC 2 QUEUES ; RESERVED .WORD MTTIM ; OPTIONAL (A=1) .WORD 0,0 ; OPTIONAL (F=1) .WORD MTTIM ; OPTIONAL (J=1) .WORD 0 ; OPTIONAL (T=1) ; ; MACRO DEFINITIONS ; .MACRO SAV.56 .IFNZ $KT11C MOV @#$KPAR5,-(SP) MOV @#$KPAR6,-(SP) .ENDC .ENDM ; .MACRO RST.56 .IFNZ $KT11C MOV (SP)+,@#$KPAR6 MOV (SP)+,@#$K 3 * * * -z) E =) *7@*w*^) *~x2f&z * w z   & D ĥ+ ĥ-ĥ   D0 Wq a  h~2 vw " w & & w| @@  ~h3y & 45 U0 ffffffffF "e{N MTTIM2: JSR R5,POPR ;RESTORE REGISTERS RTS PC ;RETURN TO CALLER .PAGE ; MAGNETIC TAPE OPEN ; MOPEN: JSR PC,MTINIT BR MCL10 ;GO TO COMMON EXIT FOR OPEN/CLOSE ; ; ; MAGNETIC TAPE CLOSE ; MCLOS: CLR R4 MCL10: RTS PC .PAGE ; M A G N E T I C T A P E R E A D MREAD: JSR PC,MTINIT BPL MREA1 JSR PC,MTBAD ; .IFL NDPRT2-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC MAXID2 = 500. ; MAXIMUM ID ON DISC 2 .ENDC ; .IFG NDISCS-2 NDPRT3 = 3 ; NO. OF PRIORITY LEVELS IN DISC 3 QUEUES .IFL NDPRT3-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC MAXID3 = 500. ; MAXIMUM ID ON DISC 3 .ENDC $SYSFL = NDISCS+5 ; NO. OF SYSTEM FILE ID'S IN ROS ; PAR5 .ENDC .ENDM .PAGE ; S T A R T O F M A G T A P MAGTAP: JSR R5,PUSHR ;SAVE R0-R5 ON STACK MOV 14.(SP),R0 ;R0 = F.W.A. OF LIST SAV.56 MOV #1,R4 ;SET ERROR CODE IN R4 DEC (R0) ;IS THREAD = 1 BNE MTERR ;IF NOT, RETURN ; IS DEVICE TYPE = 4 INC R4 ; SET R4 = 2 CMPB DEVICE(R0),#4 BNE MTER~3.!.!E f f $*f77  e ~X4v# 544) ERROR XXXXX XXXXXX XXXXXX XXXXXX XXXXXX ~444444w & w ࿅f  h 7^! ~H5w  7 |( =w 47 7 4f& C V  FORM READ COMMAND IN R3 BIS #READ,R3 ;INCLUSIVE OR UNIT NUMBER AND COMMAND MOV R3,@#MTCOMM ;GIVE READ COMMAND MREA1: RTS PC ; ; THIS ROUTINE IS ENTERED AFTER A READ ATTEMPT OR A BACK SPACE RECORD ; BYTE RES1 IS THE REREAD REPEAT COUNT ; BIT 15 OF RES1 IS THE BACK SPACE RECORD FLAG MRREA: CLR R5 ;SET I/O COMPLETE TST RES1(R0) ; TEST BACKSPACE FLAG BPL MRRE1 ; COMPID,FTDIR,CDIMGE,CDIHDR,TTFILE .IFZ DRESDI NCFILE = $SYSFL+40. ; NO. OF CORE RESIDENT FILE ID'S .ENDC .IFNZ DRESDI NCFILE = NDISCS+$SYSFL+40. ; NO. OF CORE RESIDENT ID'S ; ; INCLUDING DOD'S AND SYSTEM FILES NCRWDS = NCFILE*5 ; NO. OF CORE RESIDENT WORDS NEEDED ; ; FOR CORE DIRECTORY NCRLOC = NCRWDS+NCRWDS R ;RETURN IF NOT 4 ; IS EXIT TYPE 1 OR 2 INC R4 ;SET R4 = 3 MOVB TYPE(R0),R1 ;R1 = EXIT TYPE BLE MTERR ;BRANCH IF .LE. 0 CMP R1,#3 BGT MTERR ; BR IF .GT. 3 ; IS THE LOGICAL DEVICE NUMBER 0 OR1 MOV #5,R4 MOVB DEVNUM(R0),R1 ;PLACE DEVICE NUMBER IN R1 BLT MTERR ;RETURN IF NEGATIVE CMP R1,#MTDVLM ;IS THE DEVICE NUMBER  A!2~5f 2#4 ^   0 E &f&M 'd ~86w 06 Օ+  d 0B` e0  w %Օ- ҋ 0&  ~6 UUU ȷȷ,.0ȷȷȘ&꽟 ~tνȽ*~(7@6 87:7f7 ;CONTINUE IF NOT SET JSR PC,MREAD BR MRRE3 MRRE1: .IFZ DATUM MOV @#MTSTAT,R2 BMI MRRE6 ; BR IF EOF DETECTED ASH #4,R2 ;MOVE ERROR BIT INTO SIGN BIT BMI MRRE2 ;BRANCH IF ERROR SET MRRE6: SUB @#MTWORD,COUNT(R0) ; SUB WORD COUNT .IFF MRRE6: BIT @#MTSTAT,#34600 BNE MRRE2 ; BRANCK IF ANY ERRORS MOV @#MTBCNT,R; NO. OF LOCATIONS IN CORE RESIDENT ; ; DIRECTORY .ENDC ERRPRT = 1 ; PRINT-OUT DISC ERROR MESSAGES OPTION CHKPTC = 1 ;1 = CHECKPOINTING ALLOWED .IFZ $KT11C .IFNZ CHKPTC XXXXXXXX .ENDC .ENDC FXPART = 1 ; FIXED PARTITION OPTION $SGMNT = 1 ; SEGMENT LOAD OPTION $FTMAX = 10. ; LARGEST FILE TYPE IN SYSTEMDEFINED BGT MTERR ;RETURN IF NOT ; IS THE FUNCTION CODE DEFINED MOV #10,R4 ;SET R4 = 8 MOV FUNCT(R0),R1 ;PLACE FUNCTION CODE IN R1 MOV R1,RES2(R0) BLE MTERR ;BRANCH IF NEGATIVE CMP R1,R4 .IFZ MULRE BGT MTERR ;BR IF R1 IS MORE THAN 8 .IFF BGT MT01 ;BR IF MORE THAN 8 .ENDC CMP R1,#7 BLT MTd~7@*jko~81~8~91 ASR R1 ADD R1,COUNT(R0) .ENDC BR MRRE4 MRRE2: MOV #11,R4 DEC RES1(R0) ; DEC REPEAT COUNT BEQ MRRE4 JSR PC,MTINIT BPL MRRE4 MOVB #200,RES1+1(R0) ;SET BACK SPACE FLAG .IFNZ DATUM MOV #-1,@#MTBCNT .ENDC BIS #BCKR,R3 ;R3 =BACK SPACE COMMAND MOV R3,@#MTCOMM ;GIVE BACK SPACE COMMAND MRRE3: $IDMAX = 500. ; LARGEST FILE ID IN SYSTEM-- ; ; MUST BE >= MAXID1,2,3,..,N $FTDRL = $FTMAX*3/64.+1 ; NO. OF SECTORS IN FILE TYPE DIRECTORY $ROSFW = NDISCS+$SYSFL*5 ; NO. OF WORDS IN ROS FILES $CDISZ = NCRWDS-$ROSFW/64.+1 ; NO. OF SECTORS IN CORES ; ; DIRECTORY IMAGE $TKFL1 = TASMAX*5 ; # BYTES IN REG TASK TABLES $TKFL2 = TASMAX-MXTASK*3 02 TST COUNT(R0) BEQ MTERR ;BR IF COUNT IS ZERO CLR NWORD(R0) MT01: .IFNZ MULRE CMP R1,#11 BGT MTERR ; BR IF MORE THAN 9 .ENDC MT02: CLR SYSTEM(R0) ; PLACE LIST IN THREAD MOV @#PS,-(SP) ;INHIBIT INTERRUPTS, SAVE PROGRAM STATUS REG. SPL 7 ;SET PRIORITY TO 7 .IFZ $KT11C MOV R0,@MTLAST ;QUEUE IT MO@~9~97,:@d<:&@&& ~p:vtf&fnş x1D7!vk "3Ŋe B` ] BY87V Dw N~:E /H INC R5 ;SET I/O NOT COMPLETE MRRE4: RTS PC .PAGE ; M A G N E T I C T A P E W R I T E ; R0 = ADDRESS OF LIST ; BYTE RES1 IS REWRITE REPEAT COUNT ; BIT 15 OF RES1 IS BACK SPACE RECORD FLAG ; MWRIT: JSR PC,MTINIT BPL MWRI1 JSR PC,MTBAD MOV #14,R4 ;SET ERROR CODE MOV @#MTSTAT,R2 .IFZ DATUM ASR R2 ; # BYTES IN EXT OF TASK TABLES $TKFLN = $TKFL1+$TKFL2+2+3/4*2 ; # WORDS IN ALL TASK TABLES ; + 'TASKS' + EVEN NUMBER OF ; WORDS FOR DISCIO $TKFNS = $TKFLN/64.+1 ; NO. OF SECTORS IN TASK TABLE FILE ; ; THE FOLLOWING IS FOR DISC RESIDENT DIRECTORIES ; DIRAD1 = 320. ; DISC RESIDENT DIRECTORY ADDRESS DISC 1 ; ; LEAVES ROOM FOR 20K ROS BV R0,MTLAST .IFF MOV R0,-(SP) ; STORE SYSTEM VIRTUAL LIST ADDRESS ON STACK JSR PC,SVPPA ; GET LIST'S PPA (PACKED PHYSICAL ADDRESS ) MOV MTLAST,-(SP) ; CONVERT THE ADDRESS OF THE LAST ENTRY IN QUEUE JSR PC,PPASV6 ; GET LAST'S SVA (SYSTEM VIRTUAL ADDRESS ) MOV 2(SP),@(SP)+ ; QUEUE THE CURRENT REQUEST MOV (SP)+,MTLAST MOV 16(R0),@#$KPAR6 .ENDC CMP 16+4*$BW>1 4 @ R7ğ`7`7 `f  t  -L ! T75a7~`;T: @ f ^ wtwxwwP7$f pV7Dw:0X70Z7,\7 K*2 9+e^~;  B:   e 1 ltd7 <@ -ww9Ee9 @  ~P<Հ E ``e7  b7 c7 =$:= $:& 4 vt^7EP&:= ;PLACE BIT 0 IN CARRY BIT BCS MWRI1 ;BR IF NO WRITE RING .IFF ASH #13.,R2 ; PLACE WRITE RING BIT IN SIGN BIT BMI MWRI1 ; BR IF NO WRITE RING .ENDC CLR R4 ;CLEAR ERROR FLAG ; IS THIS THE FOURTH TRY MOV RES1(R0),R2 ;LOAD REPEAT COUNT IN R2 BIC #177774,R2 BEQ MWRI2 ;BRANCH TO ISSUE WRITE WITH EXTENDED GAP ; ISSUE NORMAL WRITE OOT .IFZ DRESDI DIRLN1 = 0 ; ZERO LENGTH .ENDC .IFNZ DRESDI DIRLN1 = MAXID1-1/12.+1 ; DISC DIRECTORY 1 LENGTH .IFG NDISCS-1 DIRAD2 = 0 ; DISC RESIDENT DIRECTORY ADDRESS DISC 2 DIRLN2 = MAXID2-1/12.+1 ; DISC DIRECTORY 2 LENGTH .ENDC .IFG NDISCS-2 DIRAD3 = 0 ; DISC RESIDNET DIRECTORY ADDRESS DISC 3 DIRLN3 = MAXID3-1/12.+1 ; DISC DIRECTORY 3 LENGTHKT11C(SP),#TSK.PC ; IS CALLER A TASK BNE MT04 ; BRANCH IF NOT MOV $CTASK,R2 INCB IOSTAT(R2) MOV R2,SYSTEM(R0) MT04: MOV (SP)+,@#PS MOV #MTREP,RES1(R0) ; SET REPEAT COUNT AND CLEAR BACK SPACE INC NMTREQ ; BUMP NUMBER OF REQUESTS BNE MTEX2 ;BR IF NOT FIRST IN QUEUE .IFNZ $KT11C MOV R0,CDTLST ; SAVE LIST S.V.A. FOR INTERRUPT ROUTINE (:%~<:UAP^7CT:v ß}^7": a7 w߉    ķ 5V:~@=& wwŀ EjŸ7 [@!$~=t4e 41   +5% z2 lm l m 44 e~0>  $& P߀e&f d߄ w fWt5? BIS #WRIT,R3 ;OR IN WRITE COMMAND BR MWRI3 MWRI2: BIS #WEXG,R3 ;OR IN WRITE WITH EXTENDED GAP MWRI3: MOV R3,@#MTCOMM ;STORE IN COMMAND REGISTER MWRI1: RTS PC .PAGE ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER WRITE COMMANDS ; MRWRI: CLR R5 ;SET I/O COMPLETE TST RES1(R0) BPL MRWR1 ;BRANCH IF THE BACK SPACE IS NOT SET JSR PC,M .ENDC .ENDC ; ; THE FOLLOWING CONTAINS THE FILE TYPE STATUS DESCRIPTORS ; FOR EACH FILE TYPE. ; $FD000 = 41 ; FILE TYPE 0, LOG UNIT 1, NO COMPRESSION $FD001 = 1 ; FILE TYPE 1, LOG UNIT 1 $FD002 = 1 ; FILE TYPE 2, LOG UNIT 1 $FD003 = 1 ; FILE TYPE 3, LOG UNIT 1 $FD004 = 1 ; FILE TYPE 4, LOG UNIT 1 $FD005 = 101 ; FILE TYPE 5, LOG UNIT MOV $KPAR5,MTPAR5 ; SAVE KPAR5 FOR INTERRUPT POUTINE .ENDC MOV FUNCT(R0),R1 ;RETURN JUMP TO ASL R1 JSR PC,@MTFCT(R1) ; ROUTINE CMP RES2(R0),#2 BLE MTXB2 TST R4 BEQ MTEX1 ;BR IF NO ERRORS MTXB2: JSR PC,MTDEQ ; DEQUEUE REQUEST BR MTEXIT MTERR: INC (R0) MOV R4,ERROR(R0) ;STORE ERROR CODE IN LIST MTEXIT: @w TEV:~>wa7 CT: AV7DX7wZ7w\75":wV@qwWf & @P7DR7C ~ ?`` K $  87`7B ! Wfff  @ T7T:R:"~? a7  T7wܟ5V: wTwD@BEp Bmd7 $ b@ u`7wXw~@w дδff 0w ?@ 52":5*:WRIT BR MRRE3 MRWR1: .IFZ DATUM MOV @#MTSTAT,R2 ASH #4,R2 ;PALCE ERROR BIT IN SIGN BIT BMI MRRE2 ;BR IF ERROR ; PLACE WORD COUNT AND STATUS IN LIST SUB @#MTWORD,COUNT(R0) .IFF BIT @#MTSTAT,#34600 BNE MRRE2 ; BRANCH IF ANY ERRORS MOV @#MTBCNT,R1 ASR R1 ADD R1,COUNT(R0) .ENDC RTS PC .PAGE 1, CKSAVE REQUIRED $FD006 = 1 ; FILE TYPE 6, LOG UNIT 1 $FD007 = 1 ; FILE TYPE 7, LOG UNIT 1 $FD008 = 1 ; FILE TYPE 8, LOG UNIT 1 $FD009 = 1 ; FILE TYPE 9, LOG UNIT 1 .IFL 10.-$FTMAX XXXXXXXX ; ONLY SET UP FOR 10. FILE TYPES .ENDC $OVTYP = 5. ; FILE TYPE FOR OVERLAY TASKS ; ; FILE TYPE SIZE TABLE - IN SECTORS ; .IFNZ DRESDI MOV @#MTSTAT,STATUS(R0) RST.56 JSR R5,POPR ;RESTORE REGISTERS MOV (SP)+,(SP) ;MOVE RETURN ADDRESS RTS PC ;RETURN TO CALLE- MTEX1: MOV #MTTLI,-(SP) ;ADDRESS OF MAG TAPE TIMER LIST MOV FUNCT(R0),R1 MOVB MTIMV(R1),-(SP) ; TIMER DELAY JSR PC,QTIME TST (SP)+ MTEX2: CMPB #2,TYPE(R0) ;TYPE 2 ? BNE MTEXIT ;BR IF NOT b7 ":B^7 E :w B::2r2~@r": r*:  bt":t*:":w> Ta7 w@B@ V:a7AV7DX7wZ7w\7c7 ":~AJ  1GEMw  K D7!F ~xA"3BEW<q B5 2 - Dw8 A!1 f ܄L 7B -L6 ~A! (G FE7 ; M A G N E T I C T A P E W R I T E F I L E M A R K ; MWEOF: JSR PC,MTINIT BPL MWEOF1 MOV #14,R4 ;SET ERROR CODE MOV @#MTSTAT,R2 .IFZ DATUM ASR R2 ;PLACE BIT 0 IN CARRY BIT BCS MWEOF1 ;BR IF NO WRITE RING .IFF ASH #15,R2 BMI MWEOF1 .ENDC CLR R4 ;CLEAR ERROR FLAG BIS #WRFM,R3 $FS000 = DIRAD1+DIRLN1+$FTDRL+$CDISZ+$TKFNS .ENDC .IFZ DRESDI $FS000 = $FTDRL+$CDISZ+$TKFNS .ENDC $FS001 = 300. $FS002 = 300. $FS003 = 300. $FS004 = 300. $FS005 = 2500. $FS006 = 300. $FS007 = 2500. $FS008 = 300. $FS009 = 300. ; $ALOD1 = $FS000+$FS001+$FS002+$FS003+$FS004 $ALOD2 = $FS005+$FS006+$FS007+$FS008+$FS009 .IFL 8192.-$ALOD1-$ALOD2 XXXXXXX TST SYSTEM(R0) ;SEE IF THIS IS A TASK CALLING BEQ MTEXIT ;BR IF THE CALLER IS NOT A TASK .IIF NE $KT11C ADD #4,SP ; THE CALLER IS A TASK, THE PAR'S CAN GO MOV @#PS,14.(SP) ;PLACE PS ON STACK JSR R5,POPR ;RESTORE REGESTERS CLR -(SP) ;SET INVOLUNTARY SUSPEND FLAG JSR PC,QSAVEI ;AND LET QSAVI SUSPEND THE TASK JMP DSPTCH .PAGE ; MAGNETIC TAPE INTERRUPT ROUTINE MTpہDwȲw  CPC6A77 7~hBC7 fwW RLw ~:4w f& fww ٞTLJ ~BHI 52-:56  ewX-ƻw- ڃ v~XCtE0PEPr hQ ^Wf & AAK B !: .01"~C W ; COMMAND MOV R3,@#MTCOMM ;GIVE COMMAND MWEOF1: RTS PC ; ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER WRITE E O F OPERATION ; MRWEO: CLR R5 ;SET I/O COMPLETE MOV RES1(R0),R1 BPL MRWEO1 ;BRANCH IF BACK SPACE FLAG IS NOT SET JSR PC,MWEOF BR MRRE3 MRWEO1: .IFZ DATUM MOV @#MTSTAT,R2 ASH #4,R2 ;PLACE ERROR BITX ; ONLY 8192 SECTORS AVAIL.- 1/2 MEGAWORDS .ENDC ; .IFNZ $BATCH $BCHID = NDISCS+$SYSFL+1 ; FILE ID FOR BATCH FILE $BCHTP = 7. ; BATCH FILE TYPE $RASIZ = 200. ; NO. OF ENTRIES IN USERS SYMBOL TABLE ; ; IN RASM ; ; NOTE: 4 WORDS/ENTRY $LSDSZ = 1000. ; NO. OF WORDS RESERVED FOR LOADERS ; ; SYMBOL INT: JSR R5,SAVE SPL 5 TST NMTREQ BMI MTEYIT .IFZ $KT11C MOV MTFRST,R0 ;PLACE LIST ADDRESS IN R0 .IFF MOV CDTLST,R0 ; PLACE CURRENT LIST S V A IN R0 MOV MTPAR5,$KPAR5 ; GET CURRENT LIST PAR5 .ENDC MOV #MTTLI,-(SP) JSR PC,DQTIME TST (SP)+ CLR R4 ; BRANCH ON FUNCTION CODE ON RETURNING FROM AN INTERRUPT MOf v 8ww 꺂5ܺw 05857 w8A ~HDw61nDu~Dd88!A$GIII>~8EVEVE@ IN SIGN BIT BPL MWEOF1 .IFF BIT @#MTSTAT,#34600 BNE MRRE2 ; BRANCH IF ANY ERRORS .ENDC RTS PC .PAGE ; M A G N E T I C T A P E R E W I N D ; MREWI: JSR PC,MTINIT BPL MREW1 .IFZ DATUM BIT @#MTSTAT,#2 ;TEST LOAD POINT BIT .IFF BIT @#MTSTAT,#40 .ENDC BNE MREW2 BIS #REWD,R3 MOV DIRECTORY (LSD) ; ; NOTE: $LSDSZ MUST BE >/= TO ; $MXOBJ*7/2 (5 WO-DS PE- SY4B6L#D $MXOBJ = 20. ; MAX NO. OF OBJECT MODULES TO BE ; ; LINKED INTO ANY GIVEN LOAD ; ; MODULE. .ENDC .ENDC ; MATCHES .IFNZ NDISCS .PAGE ; ; TTYIO SYSGEN PARAMETERS ; NTTYS = 1 ;NO. V FUNCT(R0),R5 ;LOAD FUNCTION CODE (1 TO 8) ASL R5 JSR PC,@MTRET(R5) MOV @#MTSTAT,STATUS(R0) TST R5 BNE MTIN05 ;BRANCH IF I/O NOT COMPLETE MTINRE: JSR PC,MTDQXN MTEYIT: JMP RESTOR .PAGE MTDQXN: JSR PC,MTDEQ ; DEQUEUE REQUEST CMPB TYPE(R0),#2 ;TYPE 2 EXIT BNE MTIN00 MOV SYSTEM(R0),-(SP) ;PLACE TASK NUMBER ON ST~Ew , w $ w w f ׅ1 F~(F %?%;  5 EE "3* -L%س! 0^w w & X(&~F vw f ցwtp  | ՀE@ x"E$& ր &L HwL[~Gwfw^ t7@ bG7DE     R3,@#MTCOMM MREW1: RTS PC MREW2: CLR RES2(R0) BR MREW1 ; ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER A REWIND ; MRREW: CLR R5 ;SET I/O COMPLETE RTS PC .PAGE ; MAGNETIC TAPE SPACE RECORD (+-N) ; MSPRC: .IFZ DATUM CLR R5 ;SET I/O COMPLETE TST @#MTSTAT ;CHECK FOR FILE MARK BMI MSPRC5 JSR PC,MTIOF TELETYPES ;IN SYSTEM SYSTTY = 0 ;LOGICAL UNIT NO. OF SYSTEM ;TTY DEVICE MSGBUF = 0 ;MESSAGE BUFFERING OPTION: IF 1, ;DISC MESSAGE BUFFERING VERSION IS ;ASSEMBLED. IF 0, CORE VERSION IS ;ASSEMBLED. DISCUN = 1 ;LOGICAL UNIT NO. OF DISC TO BE USED ACK CLR -(SP) ;PUSH 0 ON STACK JSR PC,UNSPND TST (SP)+ ;POP OFF ERROR CODE MTIN00: CMPB TYPE(R0),#3 BNE MTIN02 MOV R0,-(SP) ; LIST ADDRESS MOV SYSTEM(R0),-(SP) ; TASK NUMBER JSR PC,IOCOMX ; EXECUTE I/O COMPLETE SUBROUTINE MTIN02: TST NMTREQ BMI MTDQD ; BR IF -1 MOV MTFRST,R0 ;GET NEXT LIST ADDRESS @ }@E` DxD~G o72`xD \DnD7 GtDE   |Z 8G\ r ~ ` ( ~HE T1ŀE@&& vw" XD7 7 !&  7 w>wH 7 7 ~H H77 DE  dExz `r ŜE `Z-\RHr@e <~H b-^: , DxD 1 wj 8TINIT ;INITIALIZE BPL MSPRC2 TST COUNT(R0) BEQ MSPRC2 BMI MSPRC3 ;BR IF NEGATIVE ; DECREMENT (N) AND SPACE FORWARD DEC COUNT(R0) INC NWORD(R0) BIS #SPCR,R3 ; BR MSPRC4 ; INCREMENT (N) AND SPACE BACK MSPRC3: INC COUNT(R0) DEC NWORD(R0) BIS #BCKR,R3 MSPRC4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;FOR MESSAGE BUFFERING DBUFSZ = 1 ;NO. OF 64 WORD DISC SECTORS ALLOCATED ;FOR BUFFERING OF ONE MESSAGE ON DISC FILESZ = 20*DBUFSZ ;NO. OF SECTORS PER FILE NTRYS = 3 ;NO. OF TRYS TO OUTPUT A CHARACTER ;TO TTY TTOTIM = 15. ;MILLISECOND COUNT FOR TTY ;OUTPUT TIMERS TTITIM = 15. ;SECOND COUNT FOR TTY INP .IFNZ $KT11C MOV R0,-(SP) ; CONVERT LIST ADDRESS JSR PC,PPASV5 ; FROM PACKED PHYSICAL TO MOV (SP)+,R0 ; SYSTEM VIRTUAL MOV R0,CDTLST ; SAVE FOR NEXT MOV $KPAR5,MTPAR5 ; INTERRUPT MOV DTPAR(R0),@#$KPAR6 ;INITIALIZE KPAR FOR DATA BUFFER ADDR .ENDC MOV FUNCT(R0),R1 ;RETURN JUMP TO ASL R1 ; FUNCTIONAL JSR PC,@MT DE   m~pIzI   w$3 7w4JRJxZJp@ Izw\DE |1~I r ~B H . @ E H$J& < H *w œE@El3 Հŀ~`J 1w   1 w 1J  * EWq Ca 3 9 e  Ŝ9E ~Jq e9 7 L r ;SET I/O NOT COMPLETE MSPRC2: RTS PC MSPRC5: TST NWORD(R0) BGT MSPRC6 INC NWORD(R0) DEC COUNT(R0) BR MSPRC2 MSPRC6: DEC NWORD(R0) INC COUNT(R0) BR MSPRC2 .IFF JSR PC,MTINIT ; INITIALIZE BPL MSPRC3 ; BRANCH IF ERROR MOV COUNT(R0),R1 BMI MSPRC3 NEG R1 BIS #SPCR,R3 UT/OPERATOR ;RESPONSE TIMERS TTWTIM = 240. ;SECOND COUNT FOR WAIT TIMER NWUCH = 5 ;NO. OF CHARS TO BE OUTPUT FOR ;WARMUP OF A TTY UNIT EOMCH = 33 ;ALTERNATE EOM CHAR (ALT KEY) EOMOPT = 0 ;EOM CHAR OPTION WHERE ; 1 = EOM IS FOLLOWED BY CR AND LF ; 0 = NOT FOLLOWED BY CR AND LF EOMPRT FCT(R1) ; ROUTINE CMP RES2(R0),#2 BLE MTINRE TST R4 BNE MTINRE MTIN05: MOV #MTTLI,-(SP) MOV FUNCT(R0),R1 MOVB MTIMV(R1),-(SP) JSR PC,QTIME TST (SP)+ MTDQD: RTS PC .PAGE ; MAGNETIC TAPE TIME OUT ROUTINE MTTIM: JSR R5,PUSHR TST NMTREQ ; IS QUEUE EMPTY BMI MTTIM2 .IFZ $KT11C MOV MTFRST,R0 @p edE6C 8 "3@ <K s Հs @E~PKlBE|wNwT 5f&F Ua  ;pE`MM7M~K 7Lz@WtEE ~,hf`\EatEEti~@L`EU֋ tE Et` EU &&77 0C~eE&~L ; OR IN SPACE COMMAND MSPRC1: MOV R1,@#MTBCNT ; PLACE COUNT IN CONTROLLER REGISTER MOV R3,@#MTCOMM ; GIVE COMMAND MSPRC2: RTS PC MSPRC3: BIS #BCKR,R3 ; OR IN BACKSPACE COMMAND BR MSPRC1 MRPRC: MOV COUNT(R0),R1 BPL MSPRC4 COM R1 MSPRC4: ADD @#MTBCNT,R1 MOV R1,NWORD(R0) CLR R5 RTS PC .ENDC .PAGE ; MAGNETIC TAPE SKIP FILES (+-N) ; MSKFI: = 0 ;EOM PRINT OPTION WHERE ; 1 = EOM IS PRINTED ; 0 = EOM IS NOT PRINTED EOLCH = 12 ;CHAR BEING USED FOR END OF LINE ON ;TTY INPUT ECHOCH = 40 ;ECHO CHAR -- CHAR OUTPUT FOR NO ECHO MRCH = 25 ;MESSAGE RESTART CHAR (CONTROL U) LINELN = 72. ;LINE LENGTH: NO. OF CHARS TO BE .IFF MOV CDTLST,R0 ; GET LIST S.V.A. MOV MTPAR5,$KPAR5 ; AND ASSOCIATED PAR5 .ENDC CMP FUNCT(R0),#11 BNE MTTIM1 JSR PC,MUREWI TST R2 BEQ MTTIM4 MOV #MTTLI,-(SP) ; TIMER LIST MOV #1,-(SP) ; TIMER DELAY JSR PC,QTIME TST (SP)+ BR MTTIM2 ; DEQUEUE THE REQUEST MTTIM1: MOV #12,R4 MTTIM4: U0  * BҦ |^"%'$%j&|%0**HA:625l:]XV`W~0MEEE6d:L6d;Fp~M!0033  #~ N CLR R5 ;SET I/O COMPLETE MOV @#MTSTAT,R1 .IFZ DATUM ASL R1 .IFF ASH #5,R1 .ENDC BMI MSKFI5 JSR PC,MTINIT ;INITIALIZE BPL MSKFI2 .IFNZ DATUM MOV #-77776,@#MTBCNT .ENDC TST COUNT(R0) BEQ MSKFI2 BMI MSKFI3 ;BR IF NEGATIVE DEC COUNT(R0) INC NWORD(R0) ;TYPED IN A LINE .PAGE ;*********************************************************************** ;* ** ;* SEGMENT REGISTER ADDRESSES REQUIRED BY THE PROGRAMS WHEN ** ;* IMPLEMENTED ON AN 11/45 OR 11/25, EITHER WITH SEGMENTATION. ** ;* ** .IFNZ $KT11C ;* ;* K E R N E L S E G M E N T R E G I S T E R S ;* $KP JSR PC,MTDQXN MTTIM2: JSR R5,POPR ;RESTORE REGISTERS RTS PC ;RETURN TO CALLER .PAGE ; MAGNETIC TAPE OPEN ; MOPEN: JSR PC,MTINIT BR MCL10 ;GO TO COMMON EXIT FOR OPEN/CLOSE ; ; ; MAGNETIC TAPE CLOSE ; MCLOS: CLR R4 MCL10: RTS PC .PAGE ; M A G N E T I C T A P E R E A D MREAD: JSR PC,MTINIT BPL MREA1 JS~N[NNNN [OOBOO ~O&~O~PBIS #SPCF,R3 ;FORM SKIP FILE COMMAND BR MSKFI4 MSKFI3: INC COUNT(R0) ;INCREMENT COUNT DEC NWORD(R0) BIS #BCKF,R3 ;FORM BACK SPACE FILE COMMAND MSKFI4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;SET I/O NOT COMPLETE MSKFI2: RTS PC MSKFI5: TST NWORD(R0) BGT MSKFI6 INC NWORD(R0) DEC COUNT(R0) BR MSKFI2AR0 = 772340 ; $KPAR1 = 772342 ; $KPAR2 = 772344 ;KERNEL $KPAR3 = 772346 ; PAGE $KPAR4 = 772350 ; ADDRESS $KPAR5 = 772352 ; REGISTERS $KPAR6 = 772354 ; $KPAR7 = 772356 ; ; $KPDR0 = 772300 ; $KPDR1 = 772302 ; $KPDR2 = 772304 ;KERNEL $KPDR3 = 772306 ; PAGER PC,MTBAD ; FORM READ COMMAND IN R3 BIS #READ,R3 ;INCLUSIVE OR UNIT NUMBER AND COMMAND MOV R3,@#MTCOMM ;GIVE READ COMMAND MREA1: RTS PC ; ; THIS ROUTINE IS ENTERED AFTER A READ ATTEMPT OR A BACK SPACE RECORD ; BYTE RES1 IS THE REREAD REPEAT COUNT ; BIT 15 OF RES1 IS THE BACK SPACE RECORD FLAG MRREA: CLR R5 ;SET I/O COMPLETE TST RES1(R0) ; TEST BACKSPACE FLAG 3~xPNRNNOFOOOP>P|P8N ~P6 ~hQ  3wRBPw we  P  pw2~Q  m  fT3 MSKFI6: DEC NWORD(R0) INC COUNT(R0) BR MSKFI2 .PAGE .IFNZ MULRE ; MAGNETIC TAPE MULTIPLE DRIVE REWIND MUREW: CLR R2 ;USE AS DEVICE NUMBER COUNTER MOVB DEVNUM(R0),R1 MOV R1,-(SP) ;SAVE ON STACK BIC #MTMREW,R1 ;CLEAR ALL BUT DEFINED UNITS MURE1: ASR R1 BCC MURE2 ;BR IF BIT 0 WAS CLEAR MOVB R2,DEVNUM(R0) ;SET D $KPDR4 = 772310 ; DESCRIPTOR $KPDR5 = 772312 ; REGISTERS $KPDR6 = 772314 ; $KPDR7 = 772316 ; ;* ;* U S E R S E G M E N T R E G I S T E R S ;* $UPAR0 = 777640 ; $UPAR1 = 777642 ; $UPAR2 = 777644 ;USER $UPAR3 = 777646 ; PAGE $UPAR4 = 777650 ; ADDRESS $UPAR5 = 777652 ; REGISTERS $UPAR6 = 77765 BPL MRRE1 ;CONTINUE IF NOT SET JSR PC,MREAD BR MRRE3 MRRE1: .IFZ DATUM MOV @#MTSTAT,R2 ASH #4,R2 ;MOVE ERROR BIT INTO SIGN BIT BMI MRRE2 ;BRANCH IF ERROR SET MRRE6: SUB @#MTWORD,COUNT(R0) ; SUB WORD COUNT .IFF MRRE6: BIT @#MTSTAT,#34600 BNE MRRE2 ; BRANCK IF ANY ERRORS MOV @#MTBCNT,R1 ASR R1 ADD EP5P& ^˄T:CP4LZ  e0~XRe  tL 043e&ʋ   .!  1.! e8f \ D w*~RBP2P+P ~U| z dB wʕ& \ʄwB wb~HSew(3  3 AP E EWe  Cq" E f ~~SEŠpPʋwEVICE NUMBER IN LIST JSR PC,MTINIT BPL MURE2 BIC #ENAB,R3 ; CLEAR INTERRUPT ENABLE BIS #REWD,R3 ;SET REWIND COMMAND MOV R3,@#MTCOMM ;GIVE COMMAND MURE2: INC R2 ;INC DEVICE NUMBER TST R1 ;HAVE ALL REWINDS BEEN ISSUED BNE MURE1 ;BR IF NOT MOV (SP)+,DEVNUM(R0) ;RESTOR RTS PC ;RETURN ; MUREWI: MOV DE4 ; $UPAR7 = 777656 ; ; $UPDR0 = 777600 ; $UPDR1 = 777602 ; $UPDR2 = 777604 ;USER $UPDR3 = 777606 ; PAGE $UPDR4 = 777610 ; DESCRIPTOR $UPDR5 = 777612 ; REGISTERS $UPDR6 = 777614 ; $UPDR7 = 777616 ; .ENDC .PAGE ;**************************************************************** R1,COUNT(R0) .ENDC BR MRRE4 MRRE2: MOV #11,R4 DEC RES1(R0) ; DEC REPEAT COUNT BEQ MRRE4 JSR PC,MTINIT BPL MRRE4 MOVB #200,RES1+1(R0) ;SET BACK SPACE FLAG .IFNZ DATUM MOV #-1,@#MTBCNT .ENDC BIS #BCKR,R3 ;R3 =BACK SPACE COMMAND MOV R3,@#MTCOMM ;GIVE BACK SPACE COMMAND MRRE3: INC R5 ;SET I/O NOTEWE! f f /.! .!3TY~8Te33e e   w. e wA `w& L1.! 1 3^7 ~T P  KPBP3   Eeʋ  wE 4~(UB@ >  0 *3΁w BP (& Ȅ w%e ~UNVNUM(R0),R1 CLR R2 ;DONE FLAG CLR R3 ;DEVICE NUMBER BIC #MTMREW,R1 ;CLEAR ALL BUT DEFINED UNITS MURE3: ASR R1 BCC MURE4 ;BR IF BIT 0 WAS CLEAR BIC #MTCLR,@#MTCOMM ; CLEAR TAPE UNIT NUMBER BIS R3,@#MTCOMM ; SET UNIT NUMBER BIT #MTRWD,@#MTSTAT ; TEST REWIND BIT BEQ MURE4 ;BR IF DONE INC R2 ;INC IF NOT DONE MURE4: ****** ;* ** ;* IN THE FOLLOWING EQUATES, A ZERO MEANS DO NOT INCLUDE ** ;* THE OPTION. ** ;* ** ;* C A R D R E A D E R E Q U A T E S ** ;* ** ;******************************************************** COMPLETE MRRE4: RTS PC .PAGE ; M A G N E T I C T A P E W R I T E ; R0 = ADDRESS OF LIST ; BYTE RES1 IS REWRITE REPEAT COUNT ; BIT 15 OF RES1 IS BACK SPACE RECORD FLAG ; MWRIT: JSR PC,MTINIT BPL MWRI1 JSR PC,MTBAD MOV #14,R4 ;SET ERROR CODE MOV @#MTSTAT,R2 .IFZ DATUM ASR R2 ;PLACE BIT 0 IN CARRY BIT  Ƿ U 22 wL 4 P3 0 P  rfע׬.! xi~V RCe w P  .!wD 5-1 .!X(& & 1~V F3 <ʕ.! <p>p< 6C3  BP  Ee  Z~WA ͕AwEAq"ECP  A d w W  ADD #MTUIC,R3 ; INC UNIT NUMBER TST R1 ;HAVE ALL UNITS BEEN CHECKED BNE MURE3 ;BR IF NOT MURE5: RTS PC .ENDC .PAGE ; THIS IS A MAGNETIC TAPE CONTROLLER INITIALIZATION ROUTINE ; CALL IS JSR PC,MTINIT ; RETURNS WITH ; R3 = DEVICE NUMBER SHIFTED FOR A COMMAND INSTRUCTION ; R4 = 0 AND (N) BIT SET IF NO ERROR ; R4 = 1 AND (N) BIT CLEAR IF TIME OUT ERROR MTINIT: MOV #CLE************** NCR = 1 ;NUMBER OF CARD READERS IN SYSTEM BIN = 0 ; DON'T INCLUDE BINARY MODE BCD = 1 ;1 = INCLUDE ALPHANUMERIC MODE, 0 = DONT TTYSW = 1 ;1 = SWITCH INPUT TO TTY ON COMMAND INEBC = 0 ; 1=PROVIDE OFR INTERNAL EBCDIC CODE EXEBC = 0 ; 1=PROVIDE FOR EXTERNAL EBCDIC CODE ; (029 CARD CODE) $RES = 1 BCS MWRI1 ;BR IF NO WRITE RING .IFF ASH #13.,R2 ; PLACE WRITE RING BIT IN SIGN BIT BMI MWRI1 ; BR IF NO WRITE RING .ENDC CLR R4 ;CLEAR ERROR FLAG ; IS THIS THE FOURTH TRY MOV RES1(R0),R2 ;LOAD REPEAT COUNT IN R2 BIC #177774,R2 BEQ MWRI2 ;BRANCH TO ISSUE WRITE WITH EXTENDED GAP ; ISSUE NORMAL WRITE BIS #WRIT,R3 ;OR IN WRITE \ʕ~Ww އ < ʕ3w Pe3  .! wʕ36 @~W"  3Pe   & D2  .! & . > $3>b~pX  C & fPw"2 @" Z PE!ʕw3ʕ D& Zw~X3 Pw 蛀 .! ֛Лw ݎ&WA,@#MTCOMM ;ISSUE CLEAR TO MAG TAPE CONTROLLER MOVB DEVNUM(R0),R3 ;OBTAIN DEVICE NUMBER ASH #MTDVS,R3 ; LEFT SHIFT MOV R3,@#MTCOMM ;STORE UNIT NUMBER IN COMMAND REGISTER BIS #MTINB,R3 ; SET INTERRUPT ENABLE ; CLEAR BACK SPACE FLAG AND SET DELAY COUNTER TO ZERO CLRB RES1+1(R0) ;CLEAR BACK SPACE FLAG CLR R4 CMP FUNCT(R0),#1 ;OPEN COMMAND BEQ MTIN3 MOVB @#MTSTAT,R ; TIMER RES. FOR CREAD (=10.0 MSEC.) $100MS = 10. ;MULTIPLE USING $RES FOR 100 MS $500MS = 50. ;MULTIPLE USING $RES FOR 1/2 SECOND $1SEC = 100. ;MULTIPLE USING $RES FOR 1 SECOND MXTIME = 180. ;MAX SECONDS TO WAIT FOR OPR RESPONSE ; ; NOTE: THE ABOVE TIMES DO NOT NEED TO BE EXACT. SELECT THE ; PROPER VALUES TO GET AS CLOSE AS POSSIBLE TO THE ; TIMES STATES. ; ; ; C COMMAND BR MWRI3 MWRI2: BIS #WEXG,R3 ;OR IN WRITE WITH EXTENDED GAP MWRI3: MOV R3,@#MTCOMM ;STORE IN COMMAND REGISTER MWRI1: RTS PC .PAGE ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER WRITE COMMANDS ; MRWRI: CLR R5 ;SET I/O COMPLETE TST RES1(R0) BPL MRWR1 ;BRANCH IF THE BACK SPACE IS NOT SET JSR PC,MWRIT BR MRRE3 MRWR1:.! T.! 66 e8f ~`YD vb  e ewE43 P f&  - ~YCt # & Ä&> 0>ʕ.! 1 @Qt& wfʕ3 Pi~PZe8f @  BlP K.!G :ff FÃt `$ G  ʋ &> ~Z> 12 .!ʕw <><1 ;LOAD WITH BYTE SIGN EXTENDED .IFNZ DATUM ASH #11,R1 .ENDC BPL MTIN2 ; BRANCH IF READY BIT WAS 0 MTIN3: RTS PC ;RETURN MTIN2: MOV #11,R4 BR MTIN3 ; .PAGE ; PLACE BUFFER ADDRESS AND WORD COUNT IN CONTROLLER REGISTERS MTBAD: .IFZ $KT11C MOV DATA(R0),@MTMEMO .IFF MOV DTPAR(R0),@#772354 MOV DTVIRT(R0),- / R V E C T O R I N F O R M A T I O N ; ; CR1 = 2 ;LOGICAL UNIT NO. FOR CR # 1 CR2 = 2 ;LOGICAL UNIT NO. FOR CR # 2 CR3 = 0 ;LOGICAL UNIT NO. FOR C/R # 3 CR4 = 0 ;LOGICAL UNIT NO. FOR C/R # 4 ; ; C / R D E V I C E I / O A D D R E S S E S ; CRS.1 = 777160 ;CARD READER STATUS - C/R # 1 CRB1.1 = 777162 ;CARD READER BINARY DATA BUFFER CRB2.1  .IFZ DATUM MOV @#MTSTAT,R2 ASH #4,R2 ;PALCE ERROR BIT IN SIGN BIT BMI MRRE2 ;BR IF ERROR ; PLACE WORD COUNT AND STATUS IN LIST SUB @#MTWORD,COUNT(R0) .IFF BIT @#MTSTAT,#34600 BNE MRRE2 ; BRANCH IF ANY ERRORS MOV @#MTBCNT,R1 ASR R1 ADD R1,COUNT(R0) .ENDC RTS PC .PAGE ; M A G N E T I C T A P E Q5f .! Dwx B 0Quf ٟ~@[!.!wD.!wB q"PCafQr rPC DEr rPɕ!~[E.! f n5  f Z  lP  P  r  e  ;~0\ !"$'(+-.03569:, 7 ww 7^dyoow  7xw w XĝZL~e7ޚ7J F ޚk֚!:e0w & ܚ֚@ D A  &DCc  w @w  w ~e ' 7  EMT 4 ; EXIT ; .WORD 0 MWOUT: .ASCII /THIS BUFFER OF DATA WILL BE USED TO TEST THE MAGNETIC TAPE 62C/ .EVEN MTRCC: .WORD 1234 ; REPEAT COUNT .ASCII /SECOND LINE OF THE WRITE, REWIND, AND READ TEST 62 CHARACTERS./ MWRIN: .ASCII /INPUT BUFFER/ .EVEN .BLKW 37 .WORD 0 .BLKW 200 . = . + 200 TSKEND: .END  ;L/P # 1 COMMAND REGISTER CMD.2 = 765016 ;L/P # 2 COMMAND REGISTER CMD.3 = 0 ;L/P # 3 COMMAND REGISTER CMD.4 = 0 ;L/P # 4 COMMAND REGISTER STAT.1 = 765016 ;L/P # 1 STATUS REGISTER STAT.2 = 765016 ;L/P # 2 STATUS REGISTER STAT.3 = 0 ;L/P # 3 STATUS REGISTER STAT.4 = 0 ;L/P # 4 STATUS REGISTER ; C2: RTS PC MSPRC5: TST NWORD(R0) BGT MSPRC6 INC NWORD(R0) DEC COUNT(R0) BR MSPRC2 MSPRC6: DEC NWORD(R0) INC COUNT(R0) BR MSPRC2 .IFF JSR PC,MTINIT ; INITIALIZE BPL MSPRC3 ; BRANCH IF ERROR MOV COUNT(R0),R1 BMI MSPRC3 NEG R1 BIS #SPCR,R3 ; OR IN SPACE COMMAND MSPRC1: MO &w \w wXw w  fw  w 7 wtwhw o %oE~f e^d whoD uo =w TD = w H6 w @/ w 8 w 0w 8 7 w *7 w "7 7 houo ~fXw7  ww (b ww w A B` % w| 7wrxw%~fhu E 7|d~wh^ E t|dP |dIw ,-% w  =w $7 "&%"&%%"&"&"&%& . 7^)S~% !.!.!&& 2.!^&W"1f w cc~H&c0&@&P&Uw xv Ew  !7 | &  .!  k D A~&gHd.!B <X , MW"I <r<<>`>2 >2 >& Lr>~8'2 >2 > 1 !.! ; LPSIZE = 132. ;NUMBER OF CHARACTERS IN L/P BUFFER LPMXTM = 180. ;MAX NO SECONDS LPRNTR WAITS FOR OPER ACTION LPINH = 4 ;INTERRUPT LEVEL OF L/P $NLINE = 56. ; MAX LINES/PAGE (=CONTROL TAPE. $LPERR = 10. .PAGE ;*********************************************************************** ;* ** ;* MACROS TO SATISFY THE DIRECTIVES PRV R1,@#MTBCNT ; PLACE COUNT IN CONTROLLER REGISTER MOV R3,@#MTCOMM ; GIVE COMMAND MSPRC2: RTS PC MSPRC3: BIS #BCKR,R3 ; OR IN BACKSPACE COMMAND BR MSPRC1 MRPRC: MOV COUNT(R0),R1 BPL MSPRC4 COM R1 MSPRC4: ADD @#MTBCNT,R1 MOV R1,NWORD(R0) CLR R5 RTS PC .ENDC .PAGE ; MAGNETIC TAPE SKIP FILES (+-N) ; MSKFI: CLR R5 ;SET I/O ~pg |d=w e0w ,w %@w ke=w @w fwww=w  w *~g rw 8Ae0w ,w |VPTw D- <@7|d: (6 4,*w  ?w ~`h"7 w 777    w %0 %7E `  1o W ֆ m7 yhiiipiek~hif|iifJjjjitkfffggg4hRhgfbeFeh7cJD @ 7<76%.* !&& 1 0.!vfͷ`w   .!w n@×& a~'K7!H.!E.!!ߐ&& 0 -   A f> t> .!ߐ~((w  w 6   <`` !!  ~(J B.!wtCe: A@Cf U0 f~).!"ESENT IN PALRES ** ;* (OUR VERSION OF PAL11R) BUT NOT PRESENT IN MACRO-11R. ** ;* ** .MACRO .REF A,B,C,D,E,F,G,H,I,J .IRP X, .GLOBL X .ENDM .ENDM .REF .MACRO .DEF A,B,C,D,E,F,G,H,I,J .REF A,B,C,D,E,F,G,H,I,J .ENDM .DEF ; ; ; ; MACRO DEF. FOR QUEUES ; .MACRO .QUE A,B,C .BO# COMPLETE MOV @#MTSTAT,R1 .IFZ DATUM ASL R1 .IFF ASH #5,R1 .ENDC BMI MSKFI5 JSR PC,MTINIT ;INITIALIZE BPL MSKFI2 .IFNZ DATUM MOV #-77776,@#MTBCNT .ENDC TST COUNT(R0) BEQ MSKFI2 BMI MSKFI3 ;BR IF NEGATIVE DEC COUNT(R0) INC NWORD(R0) BIS #SPCF,R3 ;FORM SKIP F$"w %~Pi=w (w  w w ww   7mw w %M~i/w \  j~~o  L ed  !dB !d=L !64d4 d o!4d~@jd4 d % w *  @w @ % % w  ww  D  <~j&C@AEPA&fw w /w w Hw   ` % ww ABCD fEeU0 fUEfEEw$`UC ~)@ u E ptrv)))0)@20)00*~27~* w   . &*&ʷw , Z~*fʷ`w & w*5*@**Ѐ* w N     **5***O&UND .LIST ME A = .-4 B = .-2 .REPT C .WORD 0 .IFZ $KT11C .WORD .-2 ; NOTE: PPA WHEN RESOLVED BY IPL .ENDC .IFNZ $KT11C .PACK .-2 .ENDC .ENDR .NLIST ME .ENDM ; ; MACRO TO SET PRIORITY LEVEL 7 ; .MACRO .LOCK PSR = 177776 .IFZ $1145 MOVB #340,@#PSR .ENDC .IFNZ $'ILE COMMAND BR MSKFI4 MSKFI3: INC COUNT(R0) ;INCREMENT COUNT DEC NWORD(R0) BIS #BCKF,R3 ;FORM BACK SPACE FILE COMMAND MSKFI4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;SET I/O NOT COMPLETE MSKFI2: RTS PC MSKFI5: TST NWORD(R0) BGT MSKFI6 INC NWORD(R0) DEC COUNT(R0) BR MSKFI2 MSKFI6: DEC NWORD(R0( E ` V F A~0kw8Ĕw 7-U&"Ew b7DE  pdjw V׭~kRU7w @ŝŝw vt wjt!d w w Joi~ low @e>%ĕtd72 ddw Bw .e` w ;w ĝdw wjdf&f~l 4dd)~*1*w EE  *D) *D * |@+1 *wJ\+,,,,,,,---0->-P-*W*H@*w*~p+xD*w*pɴ  -m=)  ) *wf) > =)=)*  w 0 &&~~+ jw . @*w* !& ,  1* R* e* **& @*5*1*e~`,*& v*5* ^w1***f) T  *1* ) * * *1145 SPL 7 .ENDC ; ; SET INTERRUPT LOCKOUT .ENDM ; +) INC COUNT(R0) BR MSKFI2 .PAGE .IFNZ MULRE ; MAGNETIC TAPE MULTIPLE DRIVE REWIND MUREW: CLR R2 ;USE AS DEVICE NUMBER COUNTER MOVB DEVNUM(R0),R1 MOV R1,-(SP) ;SAVE ON STACK BIC #MTMREW,R1 ;CLEAR ALL BUT DEFINED UNITS MURE1: ASR R1 BCC MURE2 ;BR IF BIT 0 WAS CLEAR MOVB R2,DEVNUM(R0) ;SET DEVICE NUMBER IN LIST JSR ,d 77w r~5rlgdbs~mbV  <dd !%& &e N @ e0w &  |d I~m7葅ܑؑE w   w ׭ ^w Uw ^dwr nj{~n  7,|dXR|d-P Dw@ 78 %(!  %??ooow N_~xn%w -) *1 *U~,) **^) *}*) ** ) *1 *wJ )1* * ) *1*@*w*wZ~P-*w )*ww |ҜEE D) @*w*\B*w*T f) 4 D)+ŀ| n *@~--el.*BE,I  5@ =)C) 5@@wĕ  *^) *2   ~@. ށ * *ĕ\ **Ē1*  1*ĕ\ * *./ PC,MTINIT BPL MURE2 BIC #100,R3 ;CLEAR INTERRUPT ENABLE BIS #REWD,R3 ;SET REWIND COMMAND MOV R3,@#MTCOMM ;GIVE COMMAND MURE2: INC R2 ;INC DEVICE NUMBER TST R1 ;HAVE ALL REWINDS BEEN ISSUED BNE MURE1 ;BR IF NOT MOV (SP)+,DEVNUM(R0) ;RESTOR RTS PC ;RETURN ; MUREWI: MOV DEVNUM(R0),R1 CLR R2 077w Z e0w ,w w p Cå å$ נ~nA   e` \o  Ëנe ee e ѐ  @(PP~ho@ ODT-11R V003ABENPP *;/\ $G _<^,OWEBP@>SRC-FI!XASPMCFRB8r>rBrrr"sDs3~oss8r>rVrrs@sDsst<qqw ŀ ` [ WW TOW L1 *f) ^ )=) *f) B ĕ=1~.) *  /w F/ W<"3.5"36A"3p&" ! 0 !C `0  ~~0/5@"3A<3& & 0 N & P&* "* ( 4*A~/ *a  *f `D` %**YD) 1 **(1 *@*w*75**4~ 04   *=)f)@) 23 ;DONE FLAG CLR R3 ;DEVICE NUMBER BIC #MTMREW,R1 ;CLEAR ALL BUT DEFINED UNITS MURE3: ASR R1 BCC MURE4 ;BR IF BIT 0 WAS CLEAR BIC #1400,@#MTCOMM ;CLEAR TAPE UNIT NUMBER BIS R3,@#MTCOMM ; SET UNIT NUMBER BIT #2,@#MTSTAT ;TEST TAPE UNIT REWINDING BIT BEQ MURE4 ;BR IF DONE INC R2 ;INC IF NOT DONE MURE4: ADD #400,R3 4~XppED W  =0 W 80 & F8 ,-Lp!  *7~p o,   0bw Ŏpfo £  ew & ww S~Hq zxp   ob 5 w 2& & && ""& Ϋ7 ~q& o, pfo w  ,   p5 J@*w*7**3 1 *1* *D)A5@ =)f)~0* *)f)ÝB * A)72*w0*@*w*@*w*7  5@*~1"3w<3 5"3|5"3x5 "3U"3=)=)"3pw` Bte* @e*e* :J  ~1  *3****** E **************** *3*3* ~2})f)67;INC UNIT NUMBER TST R1 ;HAVE ALL UNITS BEEN CHECKED BNE MURE3 ;BR IF NOT MURE5: RTS PC .PAGE .ENDC ; THIS IS A MAGNETIC TAPE CONTROLLER INITIALIZATION ROUTINE ; CALL IS JSR PC,MTINIT ; RETURNS WITH ; R3 = DEVICE NUMBER SHIFTED FOR A COMMAND INSTRUCTION ; R4 = 0 AND (N) BIT SET IF NO ERROR ; R4 = 1 AND (N) BIT CLEAR IF TIME OUT ERROR MTINIT: MOV #CLEA,@#MTCOMM ;ISSUE CLEAR T8  Nw Ç~8r   0Ud  bt`   Ud   b  %~rEUUd  btʁ` \  b  Ud  bt $I~(s7bUd0   b    U@  Ud      b +~s    U  U d     9 3 * * * -z) E =) *7@*w*^) *~x2f&z * w z   & D ĥ+ ĥ-ĥ   D0 Wq a  h~2 vw " w & & w| @@  ~h3y & 45 U0 ffffffffF "e{;O MAG TAPE CONTROLLER MOVB DEVNUM(R0),R3 ;OBTAIN DEVICE NUMBER ASH #MTDVS,R3 ; LEFT SHIFT MOV R3,@#MTCOMM ;STORE UNIT NUMBER IN COMMAND REGISTER BIS #MTINB,R3 ; SET INTERRUPT ENABLE ; CLEAR BACK SPACE FLAG AND SET DELAY COUNTER TO ZERO CLRB RES1+1(R0) ;CLEAR BACK SPACE FLAG CLR R4 CMP FUNCT(R0),#1 ;OPEN COMMAND BEQ MTIN3 MOVB @#MTSTAT,R1 ;LOAD WITH BYTE SIGN< fE  HE@Ud A~t  E EdPd5b e @dt dU0 ,b & J w[~tub EQ_fp_`0 b7 o7 7  ! p~u@ 4~u=~3.!.!E f f $*f77  e ~X4v# 544) ERROR XXXXX XXXXXX XXXXXX XXXXXX XXXXXX ~444444w & w ࿅f  h 7^! ~H5w  7 |( =w 47 7 4f& C V  >h]b|]`],] L/P 1 PARITY ERROR L/P 1 NO ]T READY] L/P 1 ABORTEDh]\f]]n^^\,]&f&f  7P,]~,"^     h6,H^ :& \ T\ %L,n^!0 \$  ,^? EXTENDED .IFNZ DATUM ASH #11,R1 .ENDC BPL MTIN2 ; BRANCH IF READY BIT WAS 0 MTIN3: RTS PC ;RETURN MTIN2: MOV #11,R4 BR MTIN3 ; .PAGE ; PLACE BUFFER ADDRESS AND WORD COUNT IN CONTROLLER REGISTERS MTBAD: .IFZ $KT11C MOV DATA(R0),@MTMEMO .IFF MOV DTPAR(R0),@#772354 MOV DTVIRT(R0),-(SP) JSR PC,S@~u" BE 7*7Z8&9 ~pvwhl&9 wxh&9 wB~vh&9W  wh&9 w~`whA A!2~5f 2#4 ^   0 E &f&M 'd ~86w 06 Օ+  d 0B` e0  w %Օ- ҋ 0&  ~6 UUU ȷȷ,.0ȷȷȘ&꽟 ~tνȽ*~(7@6 87:7f7B e& tw0,^  \s\3 \3 ,^\\s\3 \ D\   ,_w0w ڼ  \M\\ ^Z,,_\  D\  M,R_\2\ e\  2\,x_\!& l \& ,_ f&\ Ӄ\ ,_ \e(\ ,_  wVs\\3 \3 \CVPPA ; TO PPA MOV (SP)+,R5 ; LOAD PPA CLR R4 ; PLACE BITS ASHC #2,R4 ; 16 & 17 IN R4 .IFZ DATUM ASH #2,R4 ; SET ADDRESS MOV R4,@#MTSTAT ; BITS 16 & 17 .IFF ASH #4,R4 ; SET ADDRESS BIS R4,R3 ; BITS 16 & 17 .ENDC ; DATUM MOV DATA(R0),R4 ; GET BITS 0 & 1 BIC #177DP&9W  wh&9 w`h~w&9W  w$h&9W  wh~Px0&9 whd&9 whR~x&9 wLh&9W  wh&9Ed~7@*jko~81~8~9FD\,`s\3 \  M 3 \|] ,6` M \%\ X z M] ,\``w] N V3 \|]&`H,`d | MC f\\\ ⼀,`  \  \,\),`d 2  wf&ff& ,`]\Aaes!\B3 \ D! ! F,a3 ] \ % !3 ]  ^ĕ ,@a R  s!\5Еs\] ,fa 3 ] \ G774,R4 BIS R4,R5 MOV R5,@#MTMEMO ; SET BITS 0 THRU 15 .ENDC ; KT11C MOV NWORD(R0),R5 ;GET WORD COUNT MOV R5,COUNT(R0) .IFZ DATUM MOV R5,@#MTWORD .IFF MOV NWORD(R0),R5 ; GET WORD COUNT ASL R5 ; BYTE COUNT COM R5 MOV R5,@#MTBCNT .ENDC RTS PC .PAGE ; DEQUEUE THE REQUEST MTDEQ: H~@yW  wh)D&9 whx&9 wlL~yh&9W  w0h&9   ~0zw7 hD&9   w7 >h~z&9   w^7 h&9 w$I@~9~97,:@d<:&@&& ~p:vtf&fnş x1D7!vk "3Ŋe B` ] BY87V Dw N~:E /H J5,a  6 & `3 ] ,a @& i,a5 55 ] 37,a\    \K,$b|]`&d f]Bv,Jb ezb00& ,pbDž]www,b]@aAa !B@\\w ,bf CqBa fh],b 5 K MOV R4,ERROR(R0) DEC NMTREQ MOV @#MTSTAT,STATUS(R0) MOV @#PS,-(SP) ;SAVE CURRENT CPU STATUS REGISTER SPL 7 ;INHIBIT INTERRUPTS MOV (R0),MTFRST ;PUT NEXT GUY IN THRAED AT TOP OF QUEUE BNE MTDEQ2 MOV #MTFRST,MTLAST .IFNZ $KT11C CLC ROR MTLAST CLC ROR MTLAST .ENDC MTDEQ2: MOV #1,(R0) ;SET LIST RELh R~ {THIS BUFFER OF DATA WILL BE USED TO TEST THE MAGNETIC TAPE 62CSECOND LINE OF THE WRITE, REWIND, AND READ TES~{T 62 CHARACTERS.INPUT BUFFER~|~|MBW>1 4 @ R7ğ`7`7 `f  t  -L ! T75a7~`;T: @ f ^ wtwxwwP7$f pV7Dw:0X70Z7,\7 K*2 9+e^~;  B:   e 1 ltd7 <@ -ww9Ee9 @  ~P<Հ E ``e7  b7 c7 =$:= $:& 4 vt^7EP&:=Nf NDžb1 7   _ H I.,c% f 6 ".cwe.c6 n,Lc$,rcEU0~E|UvEjUP,cdEbU\ EPU@JEHU,cBw P7 7М   DLc ,c  5qLc W !5  , d ^V NNEJ  5ADY MOV (SP)+,@#PS ;UN-INHIBIT THE INTERRUPTS MOV SYSTEM(R0),R2 ;GET TASK NUMBER OF REQUESTOR BEQ MTDEQ1 ;BRANCH IF NOT A TASK DECB IOSTAT(R2) ;OTHERWISE, DECREMENT THE I/O IN PROGRES BNE MTDEQ1 MOV R2,-(SP) ;GO TO OVERLAY MONITOR SO THE TASKS CORE JSR PC,RELTSK ; CAN BE RELEASED MTDEQ1: RTS PC .END P}~}~x}@ ~}~h~Q(:%~<:UAP^7CT:v ß}^7": a7 w߉    ķ 5V:~@=& wwŀ EjŸ7 [@!$~=t4e 41   +5% z2 lm l m 44 e~0>  $& P߀e&f d߄ w fWt5? R0dqLcw чU.d,d 4>, 7 w,dw 7^dyoow  7xw J,ew XĝZ7ޚ7J F ޚkT,4e֚!:e0w & ܚ֚d,Ze@ D A  &DCc  ,ew @w  w  ' 7  ^,e &w \w wXw w ,e fw  w 7 wtwh,ew o %oE e^dS ** ;* +36 RESERVED ** ;* ** ;* THE RETURN ERROR CODES ARE AS FOLLOWS: ** ;* ** ;* 0 I/O SUCCESSFUL ** ;* 1 LIST ALREADY IN A QUEUE ** ;* 2 INVALID DEVICE TYPE T" BE 7*A~~7Z8&9 whl&9 wxh&9~X wBh&9W  wh&9 ~whP&9W  wh&9 w`e~HhU@w TEV:~>wa7 CT: AV7DX7wZ7w\75":wV@qwWf & @P7DR7C ~ ?`` K $  87`7B ! Wfff  @ T7T:R:"~? a7  T7wܟ5V: wTwD@BEp Bmd7 $ b@ u`7wXw~@w дδff 0w ?@ 52":5*:V wh$,foD uo =w TD = w H,>f6 w @/ w 8 w 0w 8 7 w ,df*7 w "7 7 houo XI,fw7  ww (b ww ,fw A B` %,f w| 7wrxwh,fu E 7|d~wh^ E ,"g t|dP |dIw ,-;,Hg% w  =w $7,ng  |d=w W ** ;* 3 ILLEGAL EXIT TYPE ** ;* 5 ILLEGAL DEVICE NUMBER ** ;* 10 ILLEGAL I/O FUNCTION CODE ** ;* 11 FATAL HARDWARE ERROR, STATUS REG IS IN WORD 13 ** ;* 12 MAGNETIC TAPE TIME OUT ** ;* 14 WRITE COMMAND FOR REAL WITHOUT WRITE RING ** ;* X&9W  w$h&9W  w/~h0&9 whd&9 wh<~8&9 wLh&9W  whB~&9W  wh)D&9 whYb7 ":B^7 E :w B::2r2~@r": r*:  bt":t*:":w> Ta7 w@B@ V:a7AV7DX7wZ7w\7c7 ":~AJ  1GEMw  K D7!F ~xA"3BEW<q B5 2 - Dw8 A!1 f ܄L 7B -L6 ~A! (G FE7 Ze0w ,w %t,g@w ke=,gw @w fwww=w ,g w  rw 8Ae0w ,w ,h|VPTw D- <@7k,,h|d: (6 4,*w ,Rh ?w "7 w 777 ,xh   w %0 %7E ` ,h 1o W ֆ m7 h yhiiipiekif|i{hifJjjjitkf[ ** ;* COUNT =NUMBER OF WORDS READ BY THE READ COMMAND ** ;* =NUMBER OF RECORDS (+-N) TO SPACE ** ;* =NUMBER OF FILES (+-N) TO SKIP ** ;* =UNUSED FOR ALL OTHER FUNCTIONS ** ;* ** ;* PROGRAMMER: 67 ** ;* DATE 10.0\~(x&9 wlh&9W  w0h&9 ~  w7 hD&9   w7 >h~&9   w^7 h&9 w$h{~ THIS BUFFER OF DATA WILL BE USED TO TEST THE MAGNETIC TAPE 62C]pہDwȲw  CPC6A77 7~hBC7 fwW RLw ~:4w f& fww ٞTLJ ~BHI 52-:56  ewX-ƻw- ڃ v~XCtE0PEPr hQ ^Wf & AAK B !: .01"~C W^ff,hggg4hRhgfbeFeh7cJ,iD @ 7<76%.* W,>i"w %=w (w 1,di w w ww  #,i 7mw ,iw %/w \,i  j~~o  L ed,i  !dB !d=L !6,"j4d4 d o!4dd4 d =,Hj% w *_4.72 ** ;* ** ;* GULF ELECTRONIC SYSTEMS ** ;* ** ;********************************************************************** ; .DEF MAGTAP,MTINT .REF PUSHR,POPR,ACTIVE,$CTASK,IOSTAT,DSPTCH,RESTOR,RELTSK .REF UNSPND,QSAVEI,PPASV5,PPASV6,SVPPA,SAVE `SECOND LINE OF THE WRITE, REWI~ND, AND READ TEST 62 CHARACTERS.INPUT BUFFER~}~~paf v 8ww 꺂5ܺw 05857 w8A ~HDw61nDu~Dd88!A$GIII>~8EVEVE@b  @w @,nj % % w  ww 7,j D  & ,jC@AEPA&fw w /w ,jw Hw   ` ,kE ` V F ,,k w8Ĕw 7-U&"E,Rkw b7DE\,xk  pdjw V׭,kRU#,kc.REF TSK.PC,QTIME,DQTIME,IOCOMX ; ; M A G T A P E Q U A T E P A R A M E T E R S ; DATUM = 1 ; 0 FOR PEC, 1 FOR DATUM MULRE = 1 ; 0 FOR DELETE, 1 TO INCLUDE DEVICE = 2. ;LOGICAL DEVICE TYPE TYPE = 3. ;EXIT TYPE $EXIT = 4. ;I/O COMPLETE ADDRESS DEVNUM = 6. ;DEVICE NUMBER LEVEL = 7. ;I/O PRIORITY ERROR = 8. ;ERRd~2i~`2lL $%&  @ -~؆  <   @   $   & & "&& ' L  ~P &   bde~Ew , w $ w w f ׅ1 F~(F %?%;  5 EE "3* -L%س! 0^w w & X(&~F vw f ցwtp  | ՀE@ x"E$& ր &L HwL[~Gwfw^ t7@ bG7DE    f7w @ŝŝ",kw vt wjt!d ,lw w Joow @e>%ĕt,6ld72 ddw Bw .e",\l` w ;w ĝdw w,ljdf&f ,l4ddd ,l77w r,l~5rlgdbbV b,m <dd !%&gOR PARAMETER SYSTEM = 10. ;RESERVED (SAVE TASK NUMBER) DATA = 12. ;ADDRESS OF DATA BUFFER DTPAR = 14. ;KPAR6 VALUE FOR VIRTUAL DATA BUFFER ADDRESS DTVIRT = 16. ;SYSTEM VIRTUAL EQUIVALENT OF DATA BUFFER ADDRES FUNCT = 18. ;FUNCTION CODE NWORD = 20. ;BUFFER SIZE IN WORDS COUNT = 22. ;SEE DEFINITION ABOVE STATUS = 24. ;HARDWARE STATUS REGISTEh7 b $% P2w~ȇ(~@ AC:  ? ILL CMD! ILL PAR! I~NON-QUIESCENT ENDSQUXXXTTMDTRECMAS.LD4ID@FLNTC:BRXBPTEX. 4(7 0i~0 i @ }@E` DxD~G o72`xD \DnD7 GtDE   |Z 8G\ r ~ ` ( ~HE T1ŀE@&& vw" XD7 7 !&  7 w>wH 7 7 ~H H77 DE  dExz `r ŜE `Z-\RHr@e <~H b-^: , DxD 1 wj 8TIjT,@m &e N @ e0w &  ,fm |d 7,m葅ܑؑE w ,m  w ׭ R,m^w Uw ^dwr na,mj  7,|dXR|d-P DR,$nw@ 78 %(! l,Jn %??oo<,pnow N%w 77w ,nZ e0w ,w kR RES1 = 26. ;RESERVED 1 RES2 = 28. ;RESERVED 2 RES3 = 30. ;RESERVED 3 ; MTDVLM = 1 ;HIGHEST LOGICAL DEVICE NUMBER (0 & 1) MTMREW = 177774 ;COM OF DEFINED LOGICAL UNITS MTREP = 18. ;MAG TAPE REPEAT COUNT (4N+2) ; .IFZ DATUM MTWORD = 167540 ;WORD COUNT REGISTER MTSTAT = 167542 ;STATUS REGISTER MTCOMM = 167544 lD S#      !  E"W,  ! ~   ! 7Lzvx* & &&  0.&W,WBWA~ h !  j x*7 7 7 ajc d  #~*Bv W,5 3!0 ,!)!& %! yߕ.4.ߕm DE   m~pIzI   w$3 7w4JRJxZJp@ Izw\DE |1~I r ~B H . @ E H$J& < H *w œE@El3 Հŀ~`J 1w   1 w 1J  * EWq Ca 3 9 e  Ŝ9E ~Jq e9 7 L r nw ,np C,nå å$ נA  ,o  e` \o ,.o Ëנe ee e ѐ To @(,do ODT-11R V003A8 oBEt,o *;/\ $G _<^,OWEBP@>SRC-FI!XASPMoCFRBo,^dd"oo;COMMAND REGISTER MTMEMO = 167546 ;MEMORY ADDRESS REGISTER .IFF MTSTAT = 772520 ; STATUS REGISTER MTCOMM = 772522 ; COMMAND REGISTER MTBCNT = 772524 ; 2'S COMPLEMENT BYTE COUNT REG MTMEMO = 772526 ; MEMORY ADDRESS REGISTER .ENDC ; ; COMMAND CODES FOR MAGNETIC TAPE CONTROLLER .IFZ DATUM READ = 1 WRIT = 2 ;WRITE BUFFER WRFM = 4 ;WRITE FILE MARK WEXG = p.H~. 0  .&& & &  & HH:MM:SS MM/DD/YY  &e~ I W, ! 1 w(W, ! 0E7Pr~dDԝԝ  6 q~xq@p edE6C 8 "3@ <K s Հs @E~PKlBE|wNwT 5f&F Ua  ;pE`MM7M~K 7Lz@WtEE ~,hf`\EatEEti~@L`EU֋ tE Et` EU &&77 0C~eE&~LrZr`rdrrsPsrsst-oZr`rxrr8snsss6t<@,pqqw ŀ,&p d0] YW VL,LpQW NID pW T,rp ?0 W :0 & B4 X,p(-Ll! ,p ,7R o,p,   0P, qw Ŏpfo  ,0qes 10 ;WRITE WITH EXTENDED GAP SPCF = 20 ;SPACE FILE FORWARD BCKF = 40 ;BACK SPACE FILE SPCR = 100 ;SPACE RECORD FORWARD BCKR = 200 ;BACK SPACE RECORD REWD = 400 ;REWIND ENAB = 1000 ;ENABLE INTERRUPT OFFL = 2000 ;OFF LINE CLEA = 40000 ;CLEAR CONTROLLER MTDVS = 14 ; SHIFT COUNT MTINB = 1000 t}~~h~~XuU0  * BҦ |^"%'$%j&|%0**HA:625l:]XV`W~0MEEE6d:L6d;Fp~M!0033  #~ Nvw & ww |O4,Vqrpp   oP,|q 1 ^& & &,q& ""& Ϋ7 &,q o, pfo,q ww  ,  "l,r p & ,:r& b && w Ç D,`r  4UR  0,r7P9T p`   Cw ; INTERRUPT ENABLE .IFF OFFL = 0 ; SET OFFLINE READ = 2 ; READ RECORD WRIT = 4 ; WRITE RECORD WRFM = 6 ; WRITE FILE MARK SPCR = 10 ; SPACE RECORD BCKR = 12 ; BACKSPACE RECORD WEXG = 10 ; EXTENDED GAP SPCF = 10 ; SPACE FILE FORWARD BCKF = 12 ; BACK SPACE FILE REWD = 16 ; REWIND MTDVS = 10 ; SHIFT COUNT MTINB = 20101 ; INTERRUPT ENABLE CLEA = 10000 ; CLEAR CONTROLLER x~Ў#~H~2~8y~N[NNNN [OOBOO ~O&~O~Pz,rTU R   ,rPt  EUUR K,r  7P9T p` P g,s Pt  UR  ,Ds7P9 7PUR0 ,js  U_TRUQ,s A gTp  PWt ,sT   U  $,sU R     4,t fE  PE{ .ENDC ; ; FIRST AND LAST WORDS FOR LIST THREAD MTFRST: .WORD 0 .IFZ $KT11C MTLAST: .WORD MTFRST .IFF MTLAST: .PACK MTFRST CDTLST: .WORD 0 ; USED TO SAVE CURRENT LIST S.V.A. MTPAR5: .WORD 0 ; USED TO SAVE CURRENT LIST PAR5 .ENDC NMTREQ: .WORD -1 ; NUMBER OF (REQUESTS - 1) IN QUEUE ; ; MAGNETIC TAPE FUNCTION JUMP TABLE MTFCT =.-2 .WORD MOPEN ;OPEN .WORD MCLOS |~A~(~P~}3~xPNRNNOFOOOP>P|P8N ~P6 ~hQ  3wRBPw we  P  pw2~Q  m  fT3~@U,(tR   E ER@m,NtR5P e   xR>,tttRUA 0 ,PWt ,t & $ wuQ,t EQ_Vp E _T0,t P7 o7 7 $ u ! ,@u@!ufu,v" BE 7*7Z  ;CLOSE .WORD MREAD ;READ .WORD MWRIT ;WRITE .WORD MWEOF ;WRITE FILE MARK .WORD MREWI ;REWIND .WORD MSPRC ;SPACE +-N RECORDS .WORD MSKFI ;SKIP +-N FILES .IFNZ MULRE .WORD MUREW ;REWIND MULTIPLE UNITS .ENDC ; MAGNETIC TAPE RETURN AFTER INTERRUPT JUMP TABLE MTRET =.-2 .WORD MOPEN ;OPEN .WORD MCLOS ~_~~EP5P& ^˄T:CP4LZ  e0~XRe  tL 043e&ʋ   .!  1.! e8f \ D w*~RBP2P+P ~U| z dB wʕ& \ʄwB wb~HSew(3  3 AP E EWe  Cq" E f ~~SEŠpPʋwv8&9 w[,vhlC,v&9 wxh$w&9 wB,$whI,Jw&9W  whx,pw&9 w,whP&,w9W  wh,w&9 w` ,x ;CLOSE .WORD MRREA ;READ .WORD MRWRI ;WRITE .WORD MRWEO ;WRITE FILE MARK .WORD MRREW ;REWIND .IFZ DATUM .WORD MSPRC ;SPACE +-N RECORDS .IFF .WORD MRPRC .ENDC .WORD MSKFI ;SKIP +-N FILES .IFNZ MULRE .WORD MUREWI .ENDC MTIMV =.-3 ; TIME OUT VALUE IN SECONDS .BYTE 5 n~~p}~~`EWE! f f /.! .!3TY~8Te33e e   w. e wA `w& L1.! 1 3^7 ~T P  KPBP3   Eeʋ  wE 4~(UB@ >  0 *3΁w BP (& Ȅ w%e ~UNh&9,.xW  w$hY,Tx&9W  w,zxh,x0&9 wh6,xd&9 w,xh&9 V,ywLh,8y&9W  w,^yh&9W ; READ .BYTE 5 ; WRITE .BYTE 5 ; WRITE FILE MARK .BYTE 180. ; REWIND .BYTE 5 ; SPACE .BYTE 60. ; SKIP .IFNZ MULRE .BYTE 1 ; MULTIPLE REWIND .ENDC .BOUND MTTLI: ;MAGNETIC TAPE TIMER LIST .WORD 1 .WORD 0,0,0 ; RSVRD 1 TO 3 .BYTE 2 ; TIMER RESOLUTION .BYTE 20 ; TIMER OPTIONS (J) ~ؕ~P~Ȗ#~@  Ƿ U 22 wL 4 P3 0 P  rfע׬.! xi~V RCe w P  .!wD 5-1 .!X(& & 1~V F3 <ʕ.! <p>p< 6C3  BP  Ee  Z~WA ͕AwEAq"ECP  A d w W  ,y wh),yD&9 w,yhx&9 w,ylh,z&9W  w0h,Bz&9  C,hz w7 h9,zD&9  ,z w7 >h,z&9   .WORD 0 ; RESERVED .WORD MTTIM ; OPTIONAL (A=1) .WORD 0,0 ; OPTIONAL (F=1) .WORD MTTIM ; OPTIONAL (J=1) .WORD 0 ; OPTIONAL (T=1) ; ; MACRO DEFINITIONS ; .MACRO SAV.56 .IFNZ $KT11C MOV @#$KPAR5,-(SP) MOV @#$KPAR6,-(SP) .ENDC .ENDM ; .MACRO RST.56 .IFNZ $KT11C MOV (SP)+,@#$KPAR6 MOV ~2~0~A~  \ʕ~Ww އ < ʕ3w Pe3  .! wʕ36 @~W"  3Pe   & D2  .! & . > $3>b~pX  C & fPw"2 @" Z PE!ʕw3ʕ D& Zw~X3 Pw 蛀 .! ֛Лw ݎ&W ,{w^7 h,&{&9 w$D,L{h THIS BUFt,r{FER OF DATA WILL BE USED TO TEST THE M9,{AGNETIC TAPE 62CSECOND LINE OF THE W,{RITE, REWIND, AND READ TEST 62 CHARACT{ERS.INPUT BUFFERX|#,~@!@~&~,@" BE 7*7ZC (SP)+,@#$KPAR5 .ENDC .ENDM .PAGE ; S T A R T O F M A G T A P MAGTAP: JSR R5,PUSHR ;SAVE R0-R5 ON STACK MOV 14.(SP),R0 ;R0 = F.W.A. OF LIST SAV.56 MOV #1,R4 ;SET ERROR CODE IN R4 DEC (R0) ;IS THREAD = 1 BNE MTERR ;IF NOT, RETURN MOV FUNCT(R0),RES2(R0) ; IS DEVICE TYPE = 4 CMPB DEVICE(R0),#4 BNE ~P~~_~.! T.! 66 e8f ~`YD vb  e ewE43 P f&  - ~YCt # & Ä&> 0>ʕ.! 1 @Qt& wfʕ3 Pi~PZe8f @  BlP K.!G :ff FÃt `$ G  ʋ &> ~Z> 12 .!ʕw <><f8&9 w,xhlz,&9 wxh3$&9 wB,h, &9W  wh,0&9 w(,VhP&,|9W  wh,&9 w`C,ȀhMTERR ;RETURN IF NOT 4 ; IS EXIT TYPE 1 OR 2 INC R4 ;SET R4 = 3 MOVB TYPE(R0),R1 ;R1 = EXIT TYPE BLE MTERR ;BRANCH IF .LE. 0 CMP R1,#3 BGT MTERR ; BR IF .GT. 3 ; IS THE LOGICAL DEVICE NUMBER 0 OR1 MOV #5,R4 MOVB DEVNUM(R0),R1 ;PLACE DEVICE NUMBER IN R1 BLT MTERR ;RETURN IF NEGATIVE CMP R1,#MTDVLM ;IS THE DEVICE NUM~xn~~h Q5f .! Dwx B 0Quf ٟ~@[!.!wD.!wB q"PCafQr rPC DEr rPɕ!~[E.! f n5  f Z  lP  P  r  e  ;~0\ !"$'(+-.03569:h,&9   MT02 TST COUNT(R0) BEQ MTERR ;BR IF COUNT IS ZERO CLR NWORD(R0) MT01: .IFNZ MULRE CMP R1,#11 BGT MTERR ; BR IF MORE THAN 9 .ENDC MT02: CLR SYSTEM(R0) ; PLACE LIST IN THREAD MOV @#PS,-(SP) ;INHIBIT INTERRUPTS, SAVE PROGRAM STATUS REG. SPL 7 ;SET PRIORITY TO 7 .IFZ $KT11C MOV R0,@MTLAST ;QUEUE IT ~#~8~2~(  e& tw0  \s\3 \3 \\s\3 \ D\  T~_ w0w ڼ  \M\\ ^\  D\  M\2\ e\  2\~x_\!& l \& f&\ Ӄ\  \e(\  v~_ wVs\\3 \3 \D\s\3 \  M 3 \|]  M \%\ X z M ,w^7 hP,&9 w$|, h THIS BUF,2FER OF DATA WILL BE USED TO TEST THE Mp,XAGNETIC TAPE 62CSECOND LINE OF THE W,~RITE, REWIND, AND READ TEST 62 CHARACT/ERS.INPUT BUFFER?Z,f2,d!2lL $%&  MOV R0,MTLAST .IFF MOV R0,-(SP) ; STORE SYSTEM VIRTUAL LIST ADDRESS ON STACK JSR PC,SVPPA ; GET LIST'S PPA (PACKED PHYSICAL ADDRESS ) MOV MTLAST,-(SP) ; CONVERT THE ADDRESS OF THE LAST ENTRY IN QUEUE JSR PC,PPASV6 ; GET LAST'S SVA (SYSTEM VIRTUAL ADDRESS ) MOV 2(SP),@(SP)+ ; QUEUE THE CURRENT REQUEST MOV (SP)+,MTLAST MOV 16(R0),@#$KPAR6 .ENDC CMP 16~A~~P~] `w~h`] N V3 \|]&`d | MC f\\\ ⼀  \  \,\d 2 ~` wf&ff& ]\Aaes!\B3 \ D! ! 3 ] \ % !3 ]  ^ĕ  R  s!\5Е~Xas\]  3 ] \ 5  6 & `3 ]  @~a& 5 55 ] 3\    \, @   < #,  @   $,և   & & "&& ' O,L   &  h" 7  :$% ,@R2fn,Z, '"0$!4+4*$KT11C(SP),#TSK.PC ; IS CALLER A TASK BNE MT04 ; BRANCH IF NOT MOV $CTASK,R2 INCB IOSTAT(R2) MOV R2,SYSTEM(R0) MT04: MOV (SP)+,@#PS MOV #MTREP,RES1(R0) ; SET REPEAT COUNT AND CLEAR BACK SPACE INC NMTREQ ; BUMP NUMBER OF REQUESTS BNE MTEX2 ;BR IF NOT FIRST IN QUEUE .IFNZ $KT11C MOV R0,CDTLST ; SAVE LIST S.V.A. FOR INTERRUPT ROUTINE ~_~~pn~|]`&d f]$~HbB ezb00& Dž]w]@aAa !B@\\w f CqBa ~bfh] 5 f NDž1 7 % f 6 w~8ce.c6 EU0~E|UvEjUPdEbU\ EPU~c@JEHUBw P7 7М   DLc  AC: q P ? X ILL CMD! f ILL PAR! ,tNON-QUIESCENT ENDSQUXXXT@,TMDTRECMAS0LD6IDBFLPTC<,BR|XBPTEX. 2,扖&7 . D , S#     0,2 !  E"W,  G,X!    ! ,~ 7Lxtx*  MOV $KPAR5,MTPAR5 ; SAVE KPAR5 FOR INTERRUPT POUTINE .ENDC MOV #CLEA,@#MTCOMM ;ISSUE CLEAR TO MAG TAPE CONTROLLER MOV FUNCT(R0),R1 ;RETURN JUMP TO JSR PC,@MTFCT(R1) ; ROUTINE CMP RES2(R0),#2 BLE MTXB2 TST R4 BEQ MTEX1 ;BR IF NO ERRORS MTXB2: JSR PC,MTDEQ ; DEQUEUE REQUEST BR MTEXIT MTERR: INC (R0) MOV R4,ERR~`}~ؤ~P   5qLc W !5  ^V NNEJ~(d  5qLcw чU.mmmm X3pKNooooooooooO~d 4>, 7 ww 7^dyoow  7xw w XĝZL~e7ޚ7J F ޚk֚!:e0w & ܚ֚@ D A  &DCc  w @w  w ~e ' 7  & 5,&&  0,ʊ.&W,WB  n ! $, j ,x*7 7 7 ajc M,<d   8l| ,,bW,5 3!0 ,!,)!& %! yߕ.*,4.ߕ.. ,ԋ:  .&& & &  ,& OR(R0) ;STORE ERROR CODE IN LIST MTEXIT: MOV @#MTSTAT,STATUS(R0) RST.56 JSR R5,POPR ;RESTORE REGISTERS MOV (SP)+,(SP) ;MOVE RETURN ADDRESS RTS PC ;RETURN TO CALLE- MTEX1: MOV #MTTLI,-(SP) ;ADDRESS OF MAG TAPE TIMER LIST MOV FUNCT(R0),R1 MOVB MTIMV(R1),-(SP) ; TIMER DELAY JSR PC,QTIME TST (SP)+ MTEX2: CMPB #2,TYPE(R0) ;TYPE 2 ~ȥ~@~#~0 &w \w wXw w  fw  w 7 wtwhw o %oE~f e^d whoD uo =w TD = w H6 w @/ w 8 w 0w 8 7 w *7 w "7 7 houo ~fXw7  ww (b ww w A B` % w| 7wrxw%~fhu E 7|d~wh^ E t|dP |dIw ,-% w  =w $7  HH:MM:SS MM/DD/YY Y,  &e I,F W, ! 1 ,lw(W, !, 0E7P|&dDԝ&ԝ#  @ K? BNE MTEXIT ;BR IF NOT TST SYSTEM(R0) ;SEE IF THIS IS A TASK CALLING BEQ MTEXIT ;BR IF THE CALLER IS NOT A TASK .IIF NE $KT11C ADD #4,SP ; THE CALLER IS A TASK, THE PAR'S CAN GO MOV @#PS,14.(SP) ;PLACE PS ON STACK JSR R5,POPR ;RESTORE REGESTERS CLR -(SP) ;SET INVOLUNTARY SUSPEND FLAG JSR PC,QSAVEI ;AND LET QSAVI SUSPEND THE TASK JMP DSPTCH ~2~ ~A~~pg |d=w e0w ,w %@w ke=w @w fwww=w  w *~g rw 8Ae0w ,w |VPTw D- <@7|d: (6 4,*w  ?w ~`h"7 w 777    w %0 %7E `  1o W ֆ m7 yhiiipiek~hif|iifJjjjitkfffggg4hRhgfbeFeh7cJD @ 7<76%.*  ; =2 - WORD OPEN .EVEN O.CAD: 0   ; CURRENT ADDRESS O.DOT: 0   ; ORIGIN ADDRESS O.XXX: .WORD 0  ;TEMPORARY STORAGE O.XXY: .WORD 0  ;2ND WORD OF TEMPORARY STORAGE O.LPC: .WORD 0 ;PC OF LAST INSTRUCTION EXECUTED O.SEQ: .BYTE 0 ;CHANGE SEQUENCE INDICATOR O.WDFG: .BYTE 0  ;SEARCH FLAG = 1 - EFFECTIVE    ; = 0 - WORD O.S: .BYTE 0  ;SINGLE INSTRUCTION FLAG    ;0 IF NOT ACTIVE    ;-1 IF ACTIVE    ;NO BREAK BOINTS MAY BE S .PAGE ; MAGNETIC TAPE INTERRUPT ROUTINE MTINT: JSR R5,SAVE SPL 5 TST NMTREQ BMI MTEYIT .IFZ $KT11C MOV MTFRST,R0 ;PLACE LIST ADDRESS IN R0 .IFF MOV CDTLST,R0 ; PLACE CURRENT LIST S V A IN R0 MOV MTPAR5,$KPAR5 ; GET CURRENT LIST PAR5 .ENDC MOV #MTTLI,-(SP) JSR PC,DQTIME TST (SP)+ CLR R4 ; BRANCH ON FU~P~~x_~"w %~Pi=w (w  w w ww   7mw w %M~i/w \  j~~o  L ed  !dB !d=L !64d4 d o!4d~@jd4 d % w *  @w @ % % w  ww  D  <~j&C@AEPA&fw w /w w Hw   ` ET WHILE IN    ;SINGLE INSTRUCTION MODE O.TRC: .BYTE 0 ;TRACE MODE, 0 = NON-TRACE O.T: .BYTE 0  ; T-BIT FLAG O.P: .BYTE 0  ;PROCEED FLAG = -2 IF MANUAL ENTRY    ;  -1 IF NO PROCEED ALLOWED    ;  0-7 IF PCEED ALLOWED O.CSR1: .BYTE 0  ;SAVE CELL - R C/SR O.CSR2: .BYTE 0  ;SAVE CELL - T C/SR O.CMFD: .BYTE 0 ;COMMA FOUND SWITCH, =0 NO COMMA FOUND   ;   =1 COMMA FOUND O.SMFD: .BYTE 0 ;SEMICOLON FOUND SWITCH   ;=0 NO SEMICOLONNCTION CODE ON RETURNING FROM AN INTERRUPT MOV FUNCT(R0),R5 ;LOAD FUNCTION CODE (1 TO 8) ASL R5 JSR PC,@MTRET(R5) MOV @#MTSTAT,STATUS(R0) TST R5 BNE MTIN05 ;BRANCH IF I/O NOT COMPLETE MTINRE: JSR PC,MTDEQ ; DEQUEUE REQUEST CMPB TYPE(R0),#2 ;TYPE 2 EXIT BNE MTIN00 MOV SYSTEM(R0),-(SP) ;PLACE TASK NUMBER ON STACK CLR -(SP) ~hn~~X} E ` V F A~0kw8Ĕw 7-U&"Ew b7DE  pdjw V׭~kRU7w @ŝŝw vt wjt!d w w Joi~ low @e>%ĕtd72 ddw Bw .e` w ;w ĝdw wjdf&f~l 4dd FOUND   ;=1 SEMICOLON FOUND O.ALF1: .BYTE 0 O.ALF2: .BYTE 0 O.ALF3: .BYTE 0 O.SCRN: .BYTE 0 ;FLAG; 1=PASS SPACES ON FROM TTY   ;ALSO, IF =1, IS ECHOED O.ID: .BYTE 015 .ASCII /DEBUG / O.IDT: .BYTE 0,0,0 ;TASK NO. .BYTE 015 TRCHDR: .WORD 72.,0 .BYTE 014 .ASCII /PC CP R L T NZVC R0 R1 R2 R3 R4/ .ASCII / R5 SP / .BYTE /012 DMPHDR: .WORD 64.,0 . ;PUSH 0 ON STACK JSR PC,UNSPND TST (SP)+ ;POP OFF ERROR CODE MTIN00: CMPB TYPE(R0),#3 BNE MTIN02 MOV R0,-(SP) ; LIST ADDRESS MOV SYSTEM(R0),-(SP) ; TASK NUMBER JSR PC,IOCOMX ; EXECUTE I/O COMPLETE SUBROUTINE MTIN02: TST NMTREQ BMI MTEYIT ;BR IF -1 MOV MTFRST,R0 ;GET NEXT LIST ADDRESS MOV R0,-(SP) ; CO~Ь~H~~8d 77w r~5rlgdbs~mbV  <dd !%& &e N @ e0w &  |d I~m7葅ܑؑE w   w ׭ ^w Uw ^dwr nj{~n  7,|dXR|d-P Dw@ 78 %(!  %??ooow N_~xn%w BYTE 014 .ASCII /LOCN CONTENTS/ .ASCII / / .BYTE 012 O.IDND=.-1 .EVEN O.BD: .WORD "BE O.BIAS: .WORD 0 ;CURRENT RELOCATION BIAS O.MINS: .BYTE 0 ;MINUS SIGN TYPED (SWITCH)   ;0=NO MINUS TYPED; 1=MINUS SIGN TYPED .EVEN O.TMP1: .WORD 0 ;SAVE CELL O.TMP2: .WORD 0 ;SAVE CELL O.CR: O.CRN: .BYTE 0,0,0 .BYTE '* ; * O.CRND = .-1 O.LGCH: .BYTE '; ; .BYTE '/ ; / NVERT LIST ADDRESS JSR PC,PPASV5 ; FROM PACKED PHYSICAL TO MOV (SP)+,R0 ; SYSTEM VIRTUAL MOV R0,CDTLST ; SAVE FOR NEXT MOV $KPAR5,MTPAR5 ; INTERRUPT MOV DTPAR(R0),@#$KPAR6 ;INITIALIZE KPAR FOR DATA BUFFER ADDR MOV FUNCT(R0),R1 ;RETURN JUMP TO ASL R1 ; FUNCTIONAL JSR PC,@MTFCT(R1) ; ROUTINE CMP RES2(R0),#2 BLE MT~#~(~2~77w Z e0w ,w w p Cå å$ נ~nA   e` \o  Ëנe ee e ѐ  @(PP~ho@ ODT-11R V003ABENPP *;/\ $G _<^,OWEBP@>SRC-FI!XASPMCFRB8r>rBrrr.sPs~oss8r>rVrrsLsrsst<qqw ŀ ` [ WD UpND .BYTE '\ ; \  (BACK SLASH) .BYTE 015 ; CARRIAGE RETURN .BYTE '$ ; $ .BYTE 'G ; G .BYTE O.NEXT ; SYMBOL USED TO OPEN NEXT LOCN .BYTE '_ ; _ (BACK ARROW) .BYTE '< ; < .BYTE '^ ; ^ (UP ARROW) .BYTE ', ; , .BYTE 'O ; O .BYTE 'W ; W .BYTE 'E ; E .BYTE 'B ; B .BYTE 'P ; P .BYTE '@ ; @ .BYTE '> ; > .BYTE 'S ; S .BYTE 'R ; R .BYTE 'C ; C .BYTE '- ; - .BYTE 'F ; F .BYTE 'INRE TST R4 BNE MTINRE MTIN05: MOV #MTTLI,-(SP) MOV FUNCT(R0),R1 MOVB MTIMV(R1),-(SP) JSR PC,QTIME TST (SP)+ MTEYIT: JMP RESTOR .PAGE ; MAGNETIC TAPE TIME OUT ROUTINE MTTIM: JSR R5,PUSHR .IFZ $KT11C MOV MTFRST,R0 BEQ MTTIM2 .IFF MOV CDTLST,R0 ; GET LIST S.V.A. MOV MTPAR5,$KPAR5 ; AND ASSO~A~~P~~XpGW D W  =0 W 80 & F8 ,-Lp!  *7^~p o,   0Pw Ŏpfo £  ew & ww ]~Hq zxp   oP  w 4& & && ""& Ϋ7 %~q& o, pfo w  ,   pI ; I .BYTE '! ; ! .BYTE 'X ; X .BYTE 'A ; A .BYTE 'D ; D .BYTE 'T ; T O.CLGT = .-O.LGCH  ;TABLE LENGTH O.TL: .BYTE 'S ;DO  1 .BYTE 'P ;NOT  2 .BYTE 'M ;CHANGE  3 .BYTE 0 ;THE  4 .BYTE 0 ;ORDER  5 .BYTE 'D ; .BYTE 'T ; .BYTE 'C ; 6 .BYTE 'F ;  7 .BYTE 'R ;  10 .BYTE 0 ; 11 .BYTE 0 ; 12 .BYTE 0 Kp rɋ Zw|Lc   P  & E`Üˋjѐ c, !%p~< Ê N   x Je)@q> qt~#~p_~~`n~س  Nw Ç~8r   ,UR  7P9T p`   TU R   w~rPt  EUUR  7P9T p` H  Pt  UR  7P~(s9 7P UR0   U_TRU A gTp  PWt T ~s  U  U R      ; 13 .BYTE 0 ; 14 .BYTE 0 ;  15 .BYTE 0 ;  16 .BYTE 0 ;  17 .BYTE 'B ; 20 O.LG = .-O.TL .EVEN IOLIST: .WORD 1 ;THREAD WORD DEVICE: .BYTE 0 ;LOGICAL UNIT NO. .BYTE 2 ;EXIT TYPE .WORD 0 .BYTE 0,0 ;ERROR TASK, PRIORITY IOERR: .WORD 0,0 ;ERROR PARAMETER BUFADR: .WORD IOBUF ;BUFFER ADDRESS IOBUF: .WORD 0 ;N~~~~=~P}~ȴ~@fE  HE@UR ~t  E ERPR5P e RtRUA 0 ,PWt  & N wu~tQ EQ_Vp  _T0 P7 o7 7  ! ;~u@ 4~uO. OF CHARS .WORD 0 ;NO. OF CHARS INPUT (TTYIN ONLY) MSGDAT: .BLKB 72 ;MSG DATA AREA MSGDEN: ;MSG DATA AREA END TTY: .BYTE TTYLOG ;LOGICAL TTY UNIT NO. LP: .BYTE LPLOG ;LOGICAL LP UNIT NO. LNCNT: .BYTE 0 ;LINE COUNT FOR PAGE CONTROL .EVEN O.TRTC: BPT ;BREAKPOINT TRAP INSTRUCTION ;THE ORDER OF THE FOLLOWING ENTRIES IS CRITICAL . =~}(~~n8~9~~0~#~ ~u" BE 7*7Z8&9 ~pvwhl&9 wxh&9 wB~vh&9W  wh&9 w~`wh O.ODT-150 ;ODT'S STACK IMMEDIATELY PRECEDES ODT O.UR0: 0 ;USER R0 0 ; R1 0 ; R2 0 ; R3 0 ; R4 0 ; R5 O.USP: 0 ;USER SP O.UPC: 0 ;USER PC O.UST: 0 ;USER ST O.PRI: 377 ;ODT PRIORITY (DEFAULT - SAME AS USER) O.MSK: 0 ;MASK O.LOW: 0 ;LOW LIMIT O.HI: 0 ;HIGH LIMIT O.DDEV: LPLOG ;DUMP LOGICAL DEVICE (DEFAULT LP) O.TDEV: LPLOG ;TRACE LOGICAL DEVICE (DEFAULT LP) O.CNST: 0 ;CONSTANT REGISTER O.FORM: 0 ; FORMAT REGIS~_H~~PX~5~2~~A~P&9W  wh&9 w`h~w&9W  w$h&9W  wh~Px0&9 whd&9 whR~x&9 wLh&9W  wh&9TER  ; IF $F=0 RELATIVE ADDRESSING  ; ABSOLUTE OTHERWISE ;RELOCATION REGISTERS O.RELT: -1,-1,-1,-1,-1,-1,-1,-1 ;INITIALLY SET TO A HIGH ADDR. ; BREAK POINT LISTS, ADR1 = ADDRESS OF BREAKPOINT,CT = COUNT, ; UIN = CONTENTS O.ADR1:  . = .+O.BKP+4 O.CT:  . = .+O.BKP+4 O.UIN:  . = .+O.BKP+4 . = O.TRTC+2 .END O.ODT  ;END OF TAPE #4 ~Ah~~21~xP~~h_~~@yW  wh)D&9 whx&9 wlL~yh&9W  w0h&9   ~0zw7 hD&9   w7 >h~z&9   w^7 h&9 w$L~~M\~.x~~#~~-~Xn~л~H}~h R~ {THIS BUFFER OF DATA WILL BE USED TO TEST THE MAGNETIC TAPE 62CSECOND LINE OF THE WRITE, REWIND, AND READ TES~{T 62 CHARACTERS.INPUT BUFFER~|~|~>l~~/|~*~ ~~}0~)~8~~(}~}~x}@ ~}~h~~ ~~~&~n@~~_P~%~#~~2~" BE 7*A~~7Z8&9 whl&9 wxh&9~X wBh&9W  wh&9 ~whP&9W  wh&9 w`e~Hh$~~z4~~k"~P`~~Ap~!~A~~pP~&9W  w$h&9W  w/~h0&9 whd&9 wh<~8&9 wLh&9W  whB~&9W  wh)D&9 whD~~\T~~M~2~~#~`_~~Pn~~(x&9 wlh&9W  w0h&9 ~  w7 hD&9   w7 >h~&9   w^7 h&9 w$h{~ THIS BUFFER OF DATA WILL BE USED TO TEST THE MAGNETIC TAPE 62Cd~~>t~~~~(~~@}~~0~SECOND LINE OF THE WRITE, REWI~ND, AND READ TEST 62 CHARACTERS.INPUT BUFFER~}~~p~/~ ~ ~~}8~~nH~~ ~#~~2i~`2lL $%&  @ -~؆  <   @   $   & & "&& ' L  ~P &   bd~~,~~z~_X~~Ph~~2~~xA~7 b $% P2w~ȇ(~@ AC:  ? ILL CMD! ILL PAR! I~NON-QUIESCENT ENDSQUXXXTTMDTRECMAS.LD4ID@FLNTC:BRXBPTEX. 4(7 0i~0 <~~kL~~\~Ax~~2~ ~hP~~X_~D S#      !  E"W,  ! ~   ! 7Lzvx* & &&  0.&W,WBWA~ h !  j x*7 7 7 ajc d  #~*Bv W,5 3!0 ,!)!& %! yߕ.4.ߕ\~~Ml~~> ~#~ ~ ~Hn~~8}~.H~. 0  .&& & &  & HH:MM:SS MM/DD/YY  &e~ I W, ! 1 w(W, ! 0E7Pr~dDԝԝ  6 q~x|~~/~~0~~}@~~(~~~}~~h~~X~ ~$~~~nP~~_`~#~~2~ ~Ў#~H~2~84~~zD~~k~Pp~~A~ ~pA~~`P~ ~A~(~P~T~~\d~~M~2~~#~~P_~~@n~~_~~t~~>~ ~/(~~8~~0}~~ ~n~~p}~~`~~ ~~}H~л~nX~~~#~~x~ؕ~P~Ȗ#~@,~~<~Ļ~z~_h~~Px~2~~hA~~2~0~A~ L~Ժ~k\~~\~A~~2~ ~XP~~H_~!~P~~_~l~~M|~~> ~#~0~~$~8n~~(}~%~xn~~h~~/~$~@~ȴ~}P~(~~~~)}~~X~Н~H ~4~~س~n`~~_p~#~t q>@q)eJ x   N Ê <~p%! ,c ѐjˋÜ`E &  P   cL|wZ ɋr߷ pK-~#~8~2~(D~̳~zT~ܲ~k/ ; KT11C MOV NWORD(R0),R5 ;GET WORD COUNT MOV R5,COUNT(R0) .IFZ DATUM MOV R5,@#MTWORD .IFF MOV NWORD(R0),R5 ; GET WORD COUNT ASL R5 ; BYTE COUNT COM R5 MOV R5,@#MTBCNT .ENDC RTS PC .PAGE ; DEQUEUE THE REQUEST MTDEQ: MOV R4,ERROR(R0) DEC NMTREQ MOV @#MTSTAT,STATUS(R0) MOV @#PS~P~~A~1~A~~P~d~~\t~~M3,-(SP) ;SAVE CURRENT CPU STATUS REGISTER SPL 7 ;INHIBIT INTERRUPTS MOV (R0),MTFRST ;PUT NEXT GUY IN THRAED AT TOP OF QUEUE BNE MTDEQ2 MOV #MTFRST,MTLAST .IFNZ $KT11C CLC ROR MTLAST CLC ROR MTLAST .ENDC MTDEQ2: MOV #1,(R0) ;SET LIST READY MOV (SP)+,@#PS ;UN-INHIBIT THE INTERRUPTS MOV SYSTEM(R0),R2 ;GET TASK ~2~(~#~5~_~~pn~~ ~>~~/NUMBER OF REQUESTOR BEQ MTDEQ1 ;BRANCH IF NOT A TASK DECB IOSTAT(R2) ;OTHERWISE, DECREMENT THE I/O IN PROGRES BNE MTDEQ1 MOV R2,-(SP) ;GO TO OVERLAY MONITOR SO THE TASKS CORE JSR PC,RELTSK ; CAN BE RELEASED MTDEQ1: RTS PC .END 8~~H~Ь~9~`}~ؤ~P~,~ ~<~;T~̤~D~}X~~nh~=~ȥ~@~#~0Ĭ~L~ԫ~z? ~4~/~$~~_x~~P~~2~ ~A~\~~kl~~\>~~M~~|