; DDCGTP.S06 ; DDCGTP.S05 ; DDCGTP.S04 ; DDCGTP.S03 AUG-28-73 ; DDCGTP.S02 ; DDCGTP.SO1 AUG-24-73 ; DDCGTP.S00 AUG-21-73 .TITLE DDCGTP ( D D C GENERAL TEST PROGRAM ) BIT0=1 BIT1=2 BIT2=4 BIT3=10 BIT4=20 BIT5=40 BIT6=100 BIT7=200 BIT8=400 BIT9=1000 BIT10=2000 BIT11=4000 BIT12=10000 BIT13=20000 BIT14=40000 BIT15=100000 R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 SRE$@ @8P@.j ,@xvrtp02468:<>},&@m,L@ H ``% %,r@`Q ULX,@ZM``%x_@B,@_fC_E_F_>G_G,@_I_lK 7 -, A7 7 7  Up,0AwvX 8%kU%7&,VA.X %k%7U>X 0,|Ar; UPDATE SYSMAC.S07 10-JUN-74 ; UPDATE SYSMAC.S06 09 JUN 74 .TITLE MACT ; PROGRAMMER 67 .MACRO ERPR LST,CLER .IF NB CLER JMP CLER ; GO TO ERROR PROCESSOR .IFF #; ERROR PROCESS MUST BE SPECIFIED .ENDC .ENDM ERPR .MACRO ERRM CLER .IF NB CLER JMP CLER .IFF #; ERROR LOCATION MUST BE SPECIFIED .ENDC .ENDM ERRM .MACRO SPM$ LST .LIST MEB .IF NB LST MOV #LST,-(SP) ; PLACE ON STACK .IFF #; PARAMETER IS REQUIRED .ENDC .ENDM SPM$ ; MAGTAP.324 ; MAGTAP.323 ; MAGTAP.322 ; MAGTAP.321 20-JUL-73 ; MAGTAP.320 18-JUL-73 ; MAGTAP.319 17-JUL-73 ; MAGTAP.318 16-JUL-73 ; MAGTAP.317 ; 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 ;********************************************************************** ;* Q = 177570 ; SWITCH REGISTER EQUATE NO = 67 ; WRITE=TRAP+3 WRCHECK=TRAP+7 READ=TRAP+5 ; ; ;DDC DATA TEST PROGRAM ;VECTORS USED IN PROGRAM ;#1 LOC 130,134,140,144,150,154,160,164 DISK INTERRUPT ;#2 LOC 30 EMT (TELETYPE OUTPUT) ;#3 LOC 34 TRAP (DISK HANDLERS) ;#4 LOC 14 TRACE TRAP (USED IN BACKGROUND TEST) ;#5 LOC 20 IOT TRAP (USED IN CALLING BACKGROUND TEST) ; ;I/O ADDRESS POINTERS SR: 177570 ;SWITCH REGIISTER CSR: 177776 ;PROCESSOR STATUS REGISTER TPB: 177566 ;TELET %lfw w WX ,A%Lw Dw @]<h`X %k,,A%7$oX E %x,A>:*X h%@,BX R%% Uw ,:BEpX *%k%7U@O,`BX %k%7|U X$,B %kd%7\U5pz5b,BrWh7 7  ,w jjV,BWW5BBw,B,C .MACRO SPD$ LST .IF NB LST MOV #LST,-(SP) ; PLACE ON STACK .IFF #; PARAMETER IS REQUIRED .ENDC .ENDM SPD$ .MACRO STP$ VAR,CNT .IF NB VAR TEMP$ = TEMP$ + CNT .ENDC .ENDM STP$ .PAGE .MACRO SLP$ PAR,LST,OFS .IF NB PAR MOV #PAR,LST+OFS ; SAVE PAR IN LIST .ENDC .ENDM SLP$ .MACRO SLH$ PAR,LST,OFS .IF NB PAR MOVB #PAR,LST+OFS ; SAVE PAR IN LIST .ENDC .ENDM SLH$ .MACRO SRS$ PAR .IF NB PAR MOV (SP)+,PAR ; REMOVE FROM STACK .IFF #; PAR IS M A G T A P ** ;* ** ;* PROGRAM IDENTIFICATION. MAGTAP - MAGNETIC 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 ** ;* FOLL YPE REGISTERS TKB: 177562 TPS: 177564 TKS: 177560 ; ;DISK I/O REGISTERS ; DCS: 177460 ;DISK CONTROL REGISTER WC: 177462 ;WORD COUNT REGISTER CMA: 177464 ;CURRENT ADDRESS REGISTER DAR: 177466 ;LOWER 16 BITS OF DISK ADDRESS DAE: 177470 ;EXTENSION ADDRESS REGISTER DBR: 177472 ;DATA BUFFER REGISTER MA: 177474 ;MAINTENANCE REGISTER ADS: 177476 ;LOOK AHEAD REGISTER VECTOR: 204 ;INTERRUPT VECTOR ADDRESS STATUS: 206 ;DISK INTERRUPT STATUS PRIORITY:BIT7 ;DISK PRIORITY LEVEL ,DC,jCxX7 7 7 w ,C. Unh bV,CV w  \U82,C ,,\ XT>w 7 8,D7 2B"@$U p,(D  w Nte,NDX7@C~UX,tD  ,Dw pw jVWW@ B~,D7 tr`X REQUIRED .ENDC .ENDM SRS$ .MACRO HDR$ LST .LIST MEB .BOUND .IF NB LST LST: .WORD 1 ; THREAD .IFF #; LIST REQUIRED .ENDC .ENDM HDR$ .MACRO WRD$ PAR .IF NB PAR .WORD PAR .IFF #; VARIABLE REQUIRED .ENDC .ENDM WRD$ .MACRO WRO$ PAR .IF NB PAR .WORD PAR .ENDC .ENDM WRO$ .MACRO CRASH .LIST MEB HALT .NLIST MEB .ENDM CRASH .PAGE ; TASK HEADER MACRO .MACRO TSKH$ TSKN,ACC,PRI,STR,MXT,STK .LIST MEB .WORD 1 ; OWING MAGNETIC TAPE FUNCTIONS: ** ;* 1 OPEN (RETURN STATUS) ** ;* 2 CLOSE (NO OPERATION) ** ;* 3 READ ** ;* 4 WRITE ** ;* 5 WRITE FILE MARK ** ;* 6 REWIND ** ;*  ; ; ; ; ; ; ;RF11 DEDICATE REGISTERS (MEMORY) ; FLAG: 0 ;INTERNAL PROGRAM FLAG RANNU: 146723 ;RANDOM NUMBER PRIME WRDCT: 0 ;WORKING WORD COUNT TRACK: 0 ;WORKING DAE DMA: 0 ;WORKING DAR PATNU: 0 ;DATA PATTERN INDEX BUF: 0 ;WORKING DATA BUFFER (OUT-IN) TWRDCT: 0 ;TEMP WORD COUNT TDMA: 0 ;TEMP DAR SWRDCT: 0 ;STANDARD WORD COUNT ERCOUNT:0 ;ERROR COUNT FOR MESSAGES. SAVE: 0 SAV1: 0 PASS: 0 DSKNOR: 0 ;NUMBER OF DISKS ON THE SYSTEM HRDER: 0 ;^@P0 * ,DLVNw %?8 2wn, E5wN7 x7 7 S,2EXX %h,XEU w ",~Ee %7 7 7 ,Eh@vUVP J l,E>tw hLWt@$ ~ ,E7PwN8w  $%@5,F7 x7 w UX@, 8,F  Z,bw -L! DP!,FH 4w %,5?$ 7 !, GU?e?5w7  @,FGx7 7 XU,lGD@  w ,GEteEB`  ~,Gw % b%?\7 V PLe,G _x5U xw 8w :,H@7 ? .ENDM Q$ .PAGE ; QUE$ QUEUE TASK MACRO REQUEST USEING DYNAMIC FREE CORE .MACRO QUE$ LST,CLER .MCALL SPM$,ERPR SPM$ LST JSR PC,GETBLK ; PUBLIC LIBRARY SUBROUTINE EMT QUEE$ ERPR LST,CLER .NLIST MEB .ENDM QUE$ .PAGE ; QL$ TASK QUEUE DEFINITION MACRO .MACRO QL$ LIST,TSKN,PRIR,EXTY,ERES,NRES,BUF1,N1,BUF2,N2,ARG1,ARG2 .MCALL HDR$,WRD$ HDR$ LIST .WORD 0 ; CALLING TASK'S NUMBER WRD$ TSKN .IF NB PRIR .BYTE PRIR ; PRIORITY .BYTE EXTY ; EXIT TYPE .IFF * ;* MOV #LIST,-(SP) ;PUSH LIST ADDRESS ON STACK ** ;* EMT MAGTAP ** ;* ** ;* THE FORTRAN EQUIVALENT CALL IS: ** ;* ** ;* CALL MAGTAP(IADDR(LIST)) ** ;*  3$ CMP #200,R0 ; DONE BNE 1$ ; NO ; BACKGROUND TEST VECTOR MOV #XWAIT,@#20 CLR @#22 ; SET EMT TRAP VECTOR MOV #EMTRP,@#30 ; TTY VECTOR MOV #340,@#32 MOV #DISK,@#34 ; DISK CALLING VECTOR MOV #340,@#36 ; SET UP INTERRUPT VECTORS FOR D.D.C. DISK MOV #130,R0 MOV #132,R1 2$: MOV #DKINT,(R0) ; INTERRUPT @XUU~,*HX w " D,PH7  w g,vH ?hx r ,Hfw @h%UU~ ,HpwzUUvw @%UU~ ,HLUUVwPw w5U,Ixw (w X*~,4IX7 ? ,ZIw @7 ?h,I xw @h%,I*~ *ww # ; PRIORITY MUST BE SPECIFIED .ENDC .WORD 0 ; CONTAINS ERROR CODE .WORD NRES ; NORMAL RESUME LOCATION OR 0 .WORD ERES ; ERROR RESUME LOCATION OR 0 .BYTE N1 ; NUMBER OF ARGUMENTS SENT, 0, OR 1ST ARGUMENT .BYTE N2 ; NUMBER OF ARGUMENTS TO RECEIVE, 0, OR 2ND ARG .WORD BUF2 ; POINTER TO RECEIVING BUFFER, 0, OR 3RD ARG .WORD BUF1 ; POINTER TO SENDING BUFFER, 0, OR 4TH ARGUMENT .WORD ARG1 ; 0 OR ARG .WORD ARG2 ; 0 OR ARG .NLIST MEB .ENDM QL$ .PAGE ; R$ RESUME TASK MACRO FOR ** ;* THE FORMAT OF THE LIST IS AS FOLLOWS: ** ;* ** ;* LIST 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 (ROUTINE MOV #200,(R1) ; PSR ADD R2,R0 ADD R2,R1 CMP #170,R0 ; DONE BNE 2$ ; NO ; SET UP START ADDRESS MOV #137,@#200 ; JMP MOV #START,@#202 ; SET UP JUMP INSTRUCTIONS MOV #600,R0 MOV #137,(R0)+ ; JMP MOV #ADT2,(R0)+ ; EXTRANEOUS DATA ALTERATION TEST MOV #137,(R0)+ ; JMP MOV #ADT3,(R0)+ ;  ^w ,In@RhT7 L( ")DILw t ,>J@h%*~ *ww , ,dJw57 7 Jx/,Jw 2w vx5@XC5Rl,JhH5 `Xd2G5,J(>56*h:E(,Jw 8 E55,"Kw 0w E %53,HK  w\e%$7 j,nKE6LzXw ,KJE*  METHOD 1 & 2 .MACRO R$ CLER .MCALL ERRM .LIST MEB EMT R$ ERRM CLER .NLIST MEB .ENDM R$ .PAGE ; RES$ RESUME TASK MACRO FOR METHOD 3 .MACRO RES$ LST,CLER .MCALL SPM$,ERPR SPM$ LST EMT RES$ ERPR LST,CLER .NLIST MEB .ENDM RES$ .PAGE ; RESL$ RESUME TASK LIST MACRO .MACRO RESL$ LST,TSKN,PROC,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6 .MCALL HDR$,WRD$ HDR$ LST WRD$ TSKN WRD$ PROC .WORD ARG1 ; ARGUMENT 1 .WORD ARG2 ; ARGUMENT 2 .WORD ARG3 ; ARGUMENT 3 0 TO 14) ** ;* +12 SYSTEM (CALLING TASK #) ** ;* +14 DATA BUFFER ADDRESS ** ;* +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 !SECTOR ADDRESSING TEST MOV #137,(R0)+ ; JMP MOV #ADT4,(R0)+ ; TRACK ADDRESSING TEST MOV #137,(R0)+ ; JMP MOV #ADT5,(R0)+ ; LOOK AHEAD REGISTER TEST MOV #137,(R0)+ ; JMP MOV #SPIRAL,(R0)+ ; SEQUENTIAL TRACK ADDRESSING FOR READ MOV #137,(R0)+ ; JMP MOV #XSPIRL,(R0)+ ; SEQUENTIAL TRACK ADDRESSING FOR WRITE MOV #137,(R0)+ ; JMP MOV #RANEX"$  EzE 5,K    `ZvXw XRU ,K*C5, G5-,Lhw $E5,,Lw (w 5Ew *@aWw ,RL(@mWw &@WUWmWaWW 5n,xLw7 7 5E-,LexXElwff&N,L`EtVE@` NB  ,LwVEPLE rU>,M,E&w  D@mWWE4,6M % #.WORD ARG4 ; ARGUMENT 4 .WORD ARG5 ; ARGUMENT 5 .WORD ARG6 ; ARGUMENT 6 .NLIST MEB .ENDM RESL$ .PAGE ; SUS$ TASK SUSPEND MACRO .MACRO SUS$ .LIST MEB EMT SUSE$ .NLIST MEB .ENDM SUS$ .PAGE ; UNS$ TASK UNSUSPEND MACRO .MACRO UNS$ TSKN,RTRN,CLER .MCALL SPM$,ERRM SPM$ TSKN MOV #RTRN,-(SP) EMT UNSE$ ERRM CLER .NLIST MEB .ENDM UNS$ .PAGE ; EXT$ TASK EXIT MACRO .MACRO EXT$ .LIST MEB EMT EXTE$ .NLIST MEB .ENDM EXT$ .PAGE ; QTM$ QUEU$ ** ;* +30 STATUS ** ;* +32 -BACKSPACE FLAG REPEAT COUNT ** ;* +34 RESERVED ** ;* +36 RESERVED ** ;* ** ;* THE RETURN ERROR CODES ARE AS FOLLOWS: ** ;* %,(R0)+ ; DATA PATTERN TEST (WITH OPTIONAL BACKGROUND) CLR R0 ; SET UP JSR PC,SETREG ; REGISTERS HALT START: RESET ;CLEAR THE WORLD MOV #1000,%6 ;SET UP STACK MOV #340,@CSR ;LOCK UP INTERRUPT LEVELS CLR FLAG ;CLEAR PROGRAM FLAG CLR TRACK ;CLEAR TRACK REGISTERS CLR DMA ;CLEAR DAR REGISTERS CLR PATNU ;CLEAR PATTER COUNT MOV #1000,SWRDCT ;SET UP STANDARD WORD COUNT MOV SWRDCT,WRDCT TST @SR BMI CONM ;OPERATE UNDER PROGRAM&Ew D@WW,\M w D@aWmWaWw D@#,MuWuW5@|~Ew D@,MWFWWUR5<t 9,M>5(5U5 g,M 55E/,NE7PWtmtO,@NB`  U@5@e5,fN7  eEw5@w ,N*@aWw F@mW8WmWaWE@v7 z7 ,Nt5Fh^zX%"8O,N hPN'E TIMER MACRO .MACRO QTM$ LIST,ERR,TMUL .MCALL SPM$,SPD$,ERRM SPM$ LIST SPD$ TMUL EMT QTME$ ERRM ERR .NLIST MEB .ENDM QTM$ .PAGE ; QTML$ TIMER LIST MACRO .MACRO QTML$ LIST,SOPT,RESL,ARGU,TSKN,MASK,FLAG,JSRA TEMP$ = 0 .MCALL HDR$,WRO$ HDR$ LIST .WORD 0,0,0 ;RESERVED FOR SYSTEM STP$ SOPT,200 STP$ ARGU,100 STP$ FLAG,40 STP$ JSRA,20 STP$ TSKN,10 .BYTE RESL ; SET RESOLUTION .BYTE TEMP$ ; OPTION .WORD 0 ; RESERVED FOR SYSTEM WRO$ ARGU .IF NB FL( ** ;* 0 I/O SUCCESSFUL ** ;* 1 LIST ALREADY IN A QUEUE ** ;* 2 INVALID DEVICE TYPE ** ;* 3 ILLEGAL EXIT TYPE ** ;* 5 ILLEGAL DEVICE NUMBER ** ;* 6 ILLEGAL COUNT FOR SPACE OR SKIP ** ;* 10 ILLEGAL I/O FU) CONTROL BIS #70000,FLAG JMP ADTST ;ENTER OPERATOR CONVERSATION MODE CONM: EMT +1 ;ASK ABOUT DATA TEST ONLY CON1 JSR %7,ALPHA ;GO WAIT FOR ANSWER CMP #153,TEXBUF ;TEST FOR YES BNE 2$ ; BRANCH IF NOT YES BIS #BIT10,FLAG BR 4$ 2$: CMP #67,TEXBUF ; TEST FOR NO BNE CONM ; TRY AGAIN IF NEITHER YES OR NO 4$: EMT +1 CON2 ;ASK ABOUT MULTI DISK MODE JSR %7,ALPHA ;GO WAIT FOR ANSWER CMP #153,TEXBUF ;TEST * D B m8D ,Nm4B e/D B eOB e`D 7 1,$O7  HF8qUU,JOBgP07 Xh/,pO -eeU,Om5 @,OdE]|vw fD@aWw \F@mW,OPZw LD@WBJw <D@W,P:E4w &D@WWWmWaWWW5f,.PXh ~D eh,TP!x U7w jVW,,zP7w jV+AG .WORD FLAG ; FLAG .WORD MASK ; MASK .WORD 0,0 ;RESERVED FOR SYSTEM .ENDC WRO$ JSRA WRO$ TSKN .NLIST MEB .ENDM QTML$ .PAGE ; DQTM$ DEQUEUE TIMER MACRO .MACRO DQTM$ LIST,ERR .MCALL SPM$,ERRM SPM$ LIST EMT DQTE$ ERRM ERR .NLIST MEB .ENDM DQTM$ .PAGE ; QSC$ QUEUE SCHEDULER MACRO ; QUEUE SCHEDULER MACRO .MACRO QSC$ LIST,ERR .MCALL SPM$,ERRM SPM$ LIST EMT QSKE$ ERRM ERR .NLIST MEB .ENDM QSC$ .PAGE ; QSCL$ SCHEDULER LIST MACR,NCTION CODE ** ;* 11 FATAL HARDWARE ERROR, STATUS REG IS IN WORD 13 ** ;* 12 MAGNETIC TAPE TIME OUT ** ;* 13 END OF TAPE DETECTED ;* 14 WRITE COMMAND FOR REAL WITHOUT WRITE RING ** ;* ** ;* COUNT =NUMBER OF WORDS READ BY THE READ COMMAND ** ;* =NUMBER OF RECORDS (+-N) TO SPACE -FOR YES BEQ 3$ CMP #NO,TEXBUF ; NO BEQ DATTES ; DO NOT ENTER STATIC TEST BR 4$ 3$: BIS #BIT11,FLAG ;SET FLAG TO ENTER STATIC TEST DSKDR: EMT +1 CON3 JSR %7,NOCHA SUB #1,TEXBUF CMP #10,TEXBUF BLOS DSKDR MOV TEXBUF,DSKNOR ROL DSKNOR ROL DSKNOR ; DSKNOR CONTAINS NUMBER OF DISKS - 1 TIMES 4 BR ASKWC DATTES: EMT +1 CON4 ;ASK UNIT NUMBER JSR %7,NOCHA ;WAIT FOR NO. CMP #10,TEXBUF ;IS NO = O>10 BLOS DATTES .W,WWW,,PUfVPNJ&v r,P%&le `$7 " ,PJXD@:7 62"Q07 ,Q7  &Xw XC5,8QG5 ,^QQ7 U ,Q  lEfXwp8,Q02R4 RN_6EM,Q_80:7 p5P5P$*QRXVTR,"S U7 7 *S/O .MACRO QSCL$ LIST,SOPT,XOPT,DED,DEH,DEM,ARGE,TSKN,STD,STH,STM,MASK,FLAG .MCALL HDR$,STP$,WRO$ TEMP$ = 0 HDR$ LIST .WORD 0,0,0 ;RESERVED FOR SYSTEM .BYTE 0 STP$ ARGE,200 STP$ FLAG,100 STP$ SOPT,40 STP$ XOPT,20 .BYTE TEMP$ ; OPTION .WORD TSKN ; TASK NUMBER .WORD STD*40+STH*100+STM ; START .WORD DED*40+DEH*100+DEM ; DELTA WRO$ ARGE .IF NB FLAG .WORD FLAG ; FLAG .WORD MASK .WORD 0,0 ;RESERVED FOR SYSTEM .ENDC .NLIST MEB .ENDM QSCL$ .PAGE ; DQSC$ 0 ** ;* =NUMBER OF FILES (+-N) TO SKIP ** ;* =UNUSED FOR ALL OTHER FUNCTIONS ** ;* ** ;* PROGRAMMER: 67 ** ;* DATE 10.04.72 ** ;* ** ;* GULF ELECTRONIC SY1;NO CLC ROL TEXBUF ROL TEXBUF ; PLACE DISK NUMBER IN FLAG BIS TEXBUF,FLAG ASKWC: EMT +1 CON5 ;ASK ABOUT OPTIONAL WORD COUNT JSR %7,ALPHA ;WAIT FOR ANSWER CMP #153,TEXBUF BEQ WCCON ; BR IF YES CMP #NO,TEXBUF ; TEST FOR NO BEQ OPDAR ; ASK ABOUT OPTIONAL DAR BR ASKWC ; ASK AGAIN WCCON: EMT +1 CON6 ;ASK LENGTH OF WC JSR PC,NOCHA BIC #3,TEXBUF ; MAKE A MULTIPLE OF2SЬD,HS̬C5 UD,nS7 7 hSG5|r c,SwUjSlSd],S w `7 X7 RSdTV,S2.G5& *,TUTT  z,,TU 7 7 ,RTw fX.TC5V,xTG5|r X4,T\hTbL\DV<,TPN*0X,3DEQUEUE SCHEDULER MACRO .MACRO DQSC$ LIST,ERR .MCALL SPM$,ERRM SPM$ LIST EMT DQSE$ ERRM ERR .NLIST MEB .ENDM DQSC$ .PAGE ; NCKP$ MACRO TO PROHIBIT CHECKPOINTING OF THE CALLING TASK .MACRO NCKP$ .LIST MEB EMT NCKE$ .NLIST MEB .ENDM NCKP$ .PAGE ; CKP$ MACRO TO ALLOW CHECKPOINTING OF THE CALLING TASK .MACRO CKP$ .LIST MEB EMT CKPE$ .NLIST MEB .ENDM CKP$ .PAGE ; SGLD$ LOAD TASK SEGMENT .MACRO SGLD$ SGNM,CLER,ERES,NRES .MCALL SPM$,SPD$,E4STEMS ** ;* ** ;********************************************************************** ; .DEF MAGTAP,MTINT .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 FOROS2 = 1 $KT11C = 0 MULRE = 1 5 4 TST TEXBUF BEQ WCCON CMP #1001,TEXBUF ;IS WORD COUNT>1000 BLOS WCCON ;YES ASK FOR COUNT AGAIN MOV TEXBUF,SWRDCT ;OPERATING WORD COUNT MOV SWRDCT,WRDCT ; OPTIONAL SECTOR ADDRESS **************** OPDAR: EMT +1 CON7 ;ASK ABOUT OPTIONAL DAR JSR %7,NOCHA CMP #100,TEXBUF ; 77 MAX SECTOR NUMBER BLOS OPDAR MOV TEXBUF, DMA ;TEMP DAR REGISTER OPPAT: EMT +1 CON8 ;ASK ABOUT DATA PATTERNS JSR %7,NOCHA CMP #23,TEXBUF ;TEST FOR CORRECT NO BLOS OPPAT ;ASK AGA6",T5U @<8Eh,U27 .7 *7 &7 "7 ,6Uw w w EhU,,\U-w D@Ww 6@HWp,UFWHWWw D@Ww F@Ww ,U6@HWFWHWWW%.e,U7L@F%<"4 53,U@    ,Ve7 %w,A,@VB`"Ee0E7 7 7  3,fV @|7 p7RRM SPM$ SGNM SPD$ ERES EMT SGLE$ ERRM CLER .NLIST MEB .ENDM SGLD$ .PAGE ; MOVE N ARGUMENTS FROM THE CALLING TASKS ADDRESS SPACE INTO BUF .MACRO GETA CLER,BUF,NN .MCALL SPM$,ERRM SPM$ NN EMT GETE$ ERRM CLER .NLIST MEB .ENDM GETA .PAGE ; MOVE N ARGS FROM BUF INTO THE CALLING TASK ADDRESS .MACRO PUTA CLER,BUF,NN .MCALL SPM$,SPD$,ERRM SPM$ NN SPD$ BUF EMT PUTE$ ERRM CLER .NLIST MEB .ENDM PUTA .PAGE .MACRO LSTH$ LABL,PRM3,PRIR,EXTY,NRES,EREH ; 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 SYSTEM = 10. ;RESERVED (SAVE TASK NUMBER) DATA = 12. ;ADDRESS OF DATA BUFFER DTPAR = 14. ;KPAR6 VALUE FOREIN CMP #22,TEXBUF BEQ OPWRT ;DATA PATTERN UNDER PROGRAM CONTROL BIS #BIT15,FLAG ;SET PROGRAM FLAG MOV TEXBUF, PATNU ;OPERATOR WANTS TO SELECT DATA CLC ROL PATNU BIC #70000,FLAG ;CLEAR OP MODE BITS IN FLAG OPWRT: EMT +1 CON9 ;ASK ABOUT WRITE JSR %7,ALPHA CMP #153,TEXBUF ;TEST FOR YES BEQ $5 ; BR IF YES CMP #NO,TEXBUF ; TEST FOR NO BEQ OPWCK ; GO ASK ABOUT WRITE CHECK BR OPWRT ; ASK AGAIN $F,Vxtt%j WEL7 H7 D7 ,V@%J=2@W4pEP,Vjw w w mTEt,Ve @ C~%DATA ERR @%STAT],$WUS ERR @%EXTRA BKS @%DK ADDR ERR @%@ A,JW ERR CNT @%RANEX ERR @ DAR @ !,pWDAE @ DCS @ HRD ERR@ W,WRD CNT@ WRD ADDR.@ GD DATA,W @ BD DATA @?@/@ WRD1 @ ,W WRD2 @%UNIT NO.@ @ READ @%CPU BK,XGRND TIMED OUT@%OK!@%DATA TEST ONLY? @GS HDR$ LABL .WORD 0 ; THREAD WORD KPAR5 VALUE .WORD 0 ; CALLING TASK'S NUMBER .WORD PRM3 .BYTE PRIR ; CALL PRIORITY .BYTE EXTY ; EXIT TYPE .WORD 0 ; CALL ERROR CODE .WORD NRES ; POINTER TO NORMAL RESUME LOCATION AFTER I/O .WORD ERES ; POINTER TO RESUME LOCATION AFTER I/O ERROR .ENDM LSTH$ .PAGE .MACRO FDL$ FDL,FID,FTY,FPR,ARA,RSZ,NMR,DRS .MCALL LSTH$,HDR$,WRD$ LSTH$ FDL,FID,0,2,RSZ,0 .BYTE FTY,FPR ; TYPE / PROTECTION .BYTE DRS,ARA ; RESIDENCY / AREA # .""""""" """""""""""""""""""""""""""""""""""""""""DDDDDDD@DDDDDDDDDADD7B B 7B B B C.{ b.KFzkQxDoQ8}bfG^Z{ +2 <`>  H CW$D3333333333333""""""ffa ͋,L  B8w&B ` % & }&*C$$Βe E%>k  aʋaՀ$ & * P$ ΋Ί   ΋   d Ί  ( 1'u  Q$f $5@ U C΋ Cb M΋U@ U &  B" .&0 M &0 & M 0 &I5: BIS #BIT14,FLAG ;YES SET FLAG BIT OPWCK: EMT +1 CON10 ;ASK ABOUT WRITE CHECK JSR %7,ALPHA CMP #153,TEXBUF ;TEST FOR YES ANSWER BEQ $6 ; BR IF YES CMP #NO,TEXBUF ; TEST FOR NO BEQ OPRD ; GO ASK ABOUT READ BR OPWCK ; ASK AGAIN $6: BIS #BIT13,FLAG ;YES SET FLAG BIT OPRD: EMT +1 CON11 ;ASK ABOUT READ JSR %7,ALPHA CMP #153,TEXBUF ;TEST FOR YES ANSWER BEQ $7 ; BR ,.X%MULTI DK MODE?@%# OF DKS 1 TO 10 OCTAO,TXL?@%EX. DK?@%OPT WRD CNT? @%LENGTH (1 ,zXTO 1000)?@%WRD ADDR?@%OPT. DATA PAT. #,X?@%WRITE?@%WRITE CHECK?@%READ?@%END@*x*P@iKWORD NMR,0,0 ; NUMBER OF RECORDS / ERROR # / STATUS .NLIST MEB .ENDM FDL$ .PAGE ; DCL GENERATION MACRO .MACRO DCL$ LABL,LUNP,PRIR,EXTY,ERES,BLNP,ACCP,AREP .MCALL LSTH$,HDR$,WRD$ LSTH$ LABL,LUNP,PRIR,EXTY,0,ERES .WORD BLNP ; BACKUP LUN .BYTE ACCP,AREP ; ACCESS CONT / AREA NUM .WORD 0,0,0 ; RESERVED DEST DEV/ EW2 / EW3 .WORD 0,0 ; CURRENT BLOCK NUM/REC LENGTH .WORD 0,0 ; PREVIOUS BLOCK NUM/REC LENGTH .WORD 0,0 ; NEXT BLOCK NUM/REC LENGTH .BYTE 0,0 ; UOPT/ SYSFLAGS .NLL 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 = 26. ;RESERVED 1 RES2 = 28. ;RESERVED 2 RES3 = 30. ;RESERVED 3 ; MTDVLM = 1 ;HIGMIF YES CMP #NO,TEXBUF ; TEST FOR NO BEQ CHKFLG BR OPRD ; ASK AGAIN $7: BIS #BIT12,FLAG ;SET FLAG TO READ CHKFLG: BIT #70000,FLAG BEQ OPWRT ; GO BACK AND ASK AGAIN IF ALL NO ; ; ; ADTST: BIT #BIT11,FLAG ;ARE WE IN MULTI DISK MODE BEQ EXMFLG ;BRANCH IF NO. EMT +1 MES11 MOV FLAG,ACNVX ROR ACNVX ROR ACNVX MOV ACNVX,R0 ; SET UP DEVICE PAGE REGISTERS JSR PC,SETREG JSR %5,CNBCNT = 172524 ; 2'S COMPLEMENT BYTE COUNT REGISTER MTMEMO = 172526 ; 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 ;WRITE WITH EXTENDED GAP SPCF = 20 ;SPACE FILE FORWARD BCKF = 40 ;BACK SPACE FILE SPCR = OIST MEB .ENDM DCL$ .PAGE ; IOCL GENERATION MACRO .MACRO IOCL$ LABL,DCLP,PRIR,EXTY,NRES,ERES,MODP,FUNP,NWDP,RECP,BUFP .MCALL LSTH$,HDR$,WRD$ LSTH$ LABL,DCLP,PRIR,EXTY,NRES,ERES .BYTE MODP,FUNP ; TRANSFER MODE / FUNCTION CODE .WORD NWDP,0,0,0 ; WORDS REQUESTED / WORDS TRAN / EW2 / EW3 .WORD RECP ; RECORD NUMBER .WORD BUFP ; TVA BUFFER ADDRESS .WORD 0,0,0 ; SVA BUFFER / KPAR6 / CURRENT ACTIVE LUN .WORD 0 ; RESERVED FOR DISC .BYTE 0,0 ; UOPT/ SYSFLAGS .NLIST MEB .ENDM IOCLPHEST 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 REGISTER MTMEMO = 167546 ;MEMORY ADDRESS REGISTER .IFF MTSTAT = 172520 ; STATUS REGISTER MTCOMM = 172522 ; COMMQONV ACNVX MES12 1 EMT +1 MES12 EXMFLG: BIT #BIT10,FLAG ;TEST FOR DATA TEST ONLY BEQ ADT2 ; DO COMPLETE TEST JMP DATAT ;DO DATA TEST ONLY TSTBF: .REPT 40 .WORD -1,-1 .ENDR ;***ADDRESS ADT2*** ; ;IN THIS TEST WRITE TRACK ZERO WITH ZERO'S ;THEN WRITE ALL ONES IN AN ADDRESS ;CHECK IF WRITING ONES IN THAT ADDRESS ALTERED ;ANY OTHER ADDRESS IN THE TRACK ;FOLLOW THIS PROCEDURE FOR ADDRESS (SECTORS) 1 TO 77 ; ; ADT2: MOV #1000,%R 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 ENABLE MTCLR = 30000 ; CLEAR CONTROLLER MTRWD = 100 ; TEST IF REWINDING MTUIC = 10000 ; S$ .PAGE .MACRO CONINT .LIST MEB .REF CONVCT MOV $KPAR4,$GTKP4(R0) MOV #DIP,$GTDIP(R0) TST $GTDFS(R0) BNE 70$ JSR PC,CONVCT 70$: MOV #DFS,$GTDFS(R0) .NLIST MEB .ENDM CONINT .PAGE .MACRO DRVST$ GG,SUBADR .MCALL CONINT .LIST MEB .REF GG'ENT .REF CONPOL .REF IOQTIM,IODQIT,SV6PA,OKTERM,ERTERM,ERRREQ,SPUIR .REF RTAND REGISTER MTBCNT = 172524 ; 2'S COMPLEMENT BYTE COUNT REGISTER MTMEMO = 172526 ; 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 ;WRITE WITH EXTENDED GAP SPCF = 20 ;SPACE FILE FORWARD BCKF = 40 ;BACK SPACE FIU6 ;SET UP STACK MOV #2000,@#SREQ ; SET LIGHTS MOV #4000,WRDCT ; SET UP WORD COUNT MOV #OUTBUF,BUF ;SET UP CURRENT ADDRESS MOV PATNU,SAVE CLR PATNU CLR TRACK CLR DMA JSR %5,PASEL ;SET UP DATA BUFFER MOV SAVE,PATNU ; ZERO SECTORS 0 TO 37 RFADT: BIS #BIT8,@DCS WRITE 3$: TSTB @DCS ; TEST FOR READY BPL 3$ TST @DCS ;TEST FOR ERROR BPL RFADTY MOV #1,ERCOUNT ;ERROR OCCURRED MOV @DCS,WORK1 ;FETCH DCS REGISTER VUNIT 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 = 14 ;WRITE WITH 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 CONTROWEQSET,APPER .DEF GG'ST$ GG'ST$: DRVENT: MOV GG'ENT,R0 ;GENTAB ADDRESS BIS #$GTRUN,$GTOPT(R0) ;INDICATE DRIVER RUNNING CONINT .IF NB SUBADR JSR PC,SUBADR .ENDC JSR PC,CONPOL ;TEMP TIL ROS KTASK RTS PC ;TEMP TIL ROS KTASK DFS: .NLIST MEB .ENDM DRVST$ .PAGE .MACRO DCLF$ DCL,LUN,BLUN,ERESL,NRESL,EXTYP,PRIR,ACCS,ARA .MCALL DCM$,HDR$,WRD$ .LIST MEB DCM$ DCL,LUN,BXLE 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 ENABLE MTCLR = 30000 ; CLEAR CONTROLLER MTRWD = 100 ; TEST IF REWINDING MTUIC = 10000 Y MOV @DAR,WORK DEC WORK ER1: JSR %5,STAER1 ;REPORT ERROR OCURRED ;****WRD1=CONTROL STATUS REG. AT THE THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. AT THE TIME OF THE ERROR **** BR RFADT ;LOOP ON ERROR RFADTY: MOV #40,DMA ; ZERO SECTORS 40 TO 77 RFADTX: BIS #BIT8,@DCS ;CLEAR THE DISK WRITE $4: TSTB @DCS BPL $4 TST @DCS ;TEST FOR ERROR BPL RFRC MOV @DAR,WORK DEC WORK MOV @DCS,WORK1 ;FETCH DCS REGISTER MOV #2,ERCOUNT ;SETUP ERROR CZLLER ENAB = 100 ; INTERRUPT ENABLE MTCLR = 1400 ; CLEAR CONTROLLER MTRWD = 2 ; TEST IF REWINDING MTUIC = 400 ; UNIT NUMBER INCREMENT MDATST = 134600 ; BITS TO TEST IN THE DATUM STATUS REGISTER ENDTAP = 2000 ; END OF TAPE BIT .ENDC ; ; FIRST AND LAST WORDS FOR LIST THREAD MTFRST: .WORD 0 .IFZ $KT11C MTLAST: .WORD MTFRST .IFF MTLAST: .PACK MTFRST CDTLST[LUN,ERESL,NRESL,EXTYP,PRIR,ACCS,ARA .NLIST MEB .WORD 0 ; CURR REC # .WORD 0 ; CURR REC LENGTH .WORD 0 ; PREV REC # .WORD 0 ; PREV REC LENGTH .WORD 0 ; NEXT REC # .WORD 0 ; NEXT REC LENGTH .ENDM DCLF$ .PAGE .MACRO DCM$ DCL,LUN,BLUN,ERESL,NRESL,EXTYP,PRIR,ACCS,ARA HDR$ DCL .WORD 0 ; CALLING TASK # WRD$ LUN .BYTE PRIP ; PRIORITY .BYTE EXTYP ; EXIT TYPE .WORD 0 ; ERROR WORD .WORD NRESL ; NORMAL RESUME .WORD ERESL ; ERROR RESUME .WORD BLUN ; BACKUP LUN .BYTE AC\ ; 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 = 14 ;WRITE WITH 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 ]OUNT ER2: JSR %5,STAER1 ;REPORT DISK ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. REG AT THE TIME OF THE ERROR **** BR RFADTX ;LOOP ON ERROR RFRC: CLR SAV1 RFRD: CLR SAVE WONWD: MOV #TSTBF,BUF MOV #100,WRDCT MOV SAV1,DMA BIS #BIT8,@DCS WRITE TSTB @DCS ;TEST FOR READY BPL .-4 TST @DCS ;TEST FOR ERROR BPL SUADB ;BRANCH IF NO CONTROL ERROR MOV @DCS,WORK1 MOV SAV1,WORK MOV #3,ERCOUNT ;SETUP ERROR COU^: .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 .IFNZ DATUM DROLD: .BYTE 0 ; LAST TAPE DIRECTION 0 FORWARD NMOLD: .BYTE 0 ; LAST UNIT NUMBER DRNEW: .BYTE 0 ; CURRENT TAPE DIRECTION 1 BACKWARDS NMNEW: .BYTE 0 ; CURRENT UNIT NUMBER .ENDC ; _CS ; ACCESS .BYTE ARA ; AREA .WORD 0 ; PHYSICAL UNIT # .WORD 0,0,0 .WORD 0,0,0 .NLIST MEB .ENDM DCM$ .PAGE ; OPEN CALL MACRO FOR ROS3.1 .MACRO OPN$ IOCL,CLER,ERES,NRES,ACCS .MCALL SLP$,ERPR .LIST MEB SLP$ NRES,IOCL,$NR SLP$ ERES,IOCL,$ER SLP$ ACCS,IOCL,$ACC MOV #2,IOCL+$EX ; SET CALL TYPE TO SEQUENTIAL MOV #IOCL,-(SP) EMT OPNE$ ERPR IOCL,CLER .NLIST MEB .ENDM OPN$ .PAGE ; CLOSE CALL MACRO FOR ROS3.1 .MACRO CLS$ IOCL,CLER,ERES,NRES .MCALL S` ; CLEAR CONTROLLER ENAB = 100 ; INTERRUPT ENABLE MTCLR = 1400 ; CLEAR CONTROLLER MTRWD = 2 ; TEST IF REWINDING MTUIC = 400 ; UNIT NUMBER INCREMENT MDATST = 134600 ; BITS TO TEST IN THE DATUM STATUS REGISTER ENDTAP = 2000 ; END OF TAPE BIT .ENDC ; ; FIRST AND LAST WORDS FOR LIST THREAD MTFRST: .WORD 0 .IFZ $KT11C MTLAST: .WORD MTFRST .IFF MTLAST: .PACK aNT ER3: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=DISK CONTROL STATUS AT THE TIME OF THE ERROR**** ;****WRD2=DISK ADDR. IN ERROR WHEN TRYING TO WRITE ALL ONES **** BR WONWD ;RE-WRITE WORD SUADB: MOV SAV1,R0 ; COMPUTE BUFFER ADDRESS OF -1 BLOCK ASH #7,R0 ADD #OUTBUF,R0 MOV R0,WORK4 ; SAVE FOR CLEAN UP MOV #100,R1 2$: MOV #-1,(R0)+ SOB R1,2$ WRCADT: BIS #BIT8,@DCS MOV #10000,WRDCT ;b ; MAGNETIC TAPE FUNCTION JUMP TABLE MTFCT =.-2 .WORD MOPEN ;OPEN .WORD MCLOS ;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 ; MAGNcLP$,ERPR .LIST MEB SLP$ NRES,IOCL,$NR SLP$ ERES,IOCL,$ER MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT CLSE$ ERPR IOCL,CLER .NLIST MEB .ENDM CLS$ .PAGE ; INPUT CALL MACRO FOR ROS3.1 .MACRO INP$ IOCL,CLER,LUN,BLUN,ERES,NRES,NWD,BUF,EXT,MOD,PRI,REC .MCALL SLP$,SLH$,ERPR .LIST MEB SLP$ LUN,IOCL,$LUN SLP$ BLUN,IOCL,$BLU SLP$ ERES,IOCL,$ER SLP$ NRES,IOCL,$NR SLP$ NWD,IOCL,$NW SLP$ BUF,IOCL,$BUF SLH$ EXT,IOCL,$EX SLH$ MOD,IOCL,$MOD SLH$ PRI,IOCd 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 .IFNZ DATUM DROLD: .BYTE 0 ; LAST TAPE DIRECTION 0 FORWARD NMOLD: .BYTE 0 ; LAST UNIT NUMBER DRNEW: .BYTE 0 ; CURRENT TAPE DIRECTION 1 BACKWARDS NMNEW: .BYTE 0 ; CURRENT UNIT NUMBER e SET UP WORD COUNT MOV #OUTBUF,BUF ;SETUP CURRENT ADDR MOV SAVE,DMA ;SETUP DISK ADDRESS WRCHECK TSTB @DCS ;CHECK FOR READY BPL .-4 TST @DCS ;TEST FOR ERROR BPL CHKBUF ;BRANCH NO DISK ERROR MOV @DCS,WORK1 MOV SAV1,WORK DEC WORK MOV #4,ERCOUNT ;SET UP ERCOUNT ER4: JSR %5,STAER1 ;REPORT ERROR MOV @DAR,ACNVX ;SET UP DISK ADDR. FOR REPORT JSR %5,CONV ACNVX MES4 6 EMT +1 MES4 ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. IN ERRORfETIC TAPE RETURN AFTER INTERRUPT JUMP TABLE MTRET =.-2 .WORD MOPEN ;OPEN .WORD MCLOS ;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 MUgL,$PRI SLH$ REC,IOCL,$REC MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK MOVB #$FINP,IOCL+$FUN EMT IOE$ ERPR IOCL,CLER .NLIST MEB .ENDM INP$ .PAGE ; OUTPUT CALL MACRO FOR ROS3.1 .MACRO OUT$ IOCL,CLER,LUN,BLUN,ERES,NRES,NWD,BUF,EXT,MOD,PRI,REC .MCALL SLP$,SLH$,ERPR .LIST MEB SLP$ LUN,IOCL,$LUN SLP$ BLUN,IOCL,$BLU SLP$ ERES,IOCL,$ER SLP$ NRES,IOCL,$NR SLP$ NWD,IOCL,$NW SLP$ BUF,IOCL,$BUF SLH$ EXT,IOCL,$EX SLH$ MOD,IOCL,$MOD SLH$ PRI,IOCL,$PRI SLH$ h .ENDC ; ; MAGNETIC TAPE FUNCTION JUMP TABLE MTFCT =.-2 .WORD MOPEN ;OPEN .WORD MCLOS ;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 i DURING WRITE CHECK **** ;****WRD ADDR.=ADDR. WHICH CONTAINS ALL ONES **** BR WRCADT ; CHKBUF: MOV WORK4,R0 ; CLEAR -1 BLOCK IN BUFFER MOV #100,R1 3$: CLR (R0)+ SOB R1,3$ ZEROAD: CLR SAVE ; MOV SAV1,DMA ;SETUP DISK ADDRESS MOV #OUTBUF,BUF MOV #100,WRDCT ; SET UP WORD COUNT WRITE TSTB @DCS ;CHECK FOR READY BPL .-4 TST @DCS ;TEST FOR ERROR BPL INDADT MOV #5,ERCOUNT MOV @DCS,WORK1 MOV @DAR,jLRE .WORD MUREWI .ENDC MTIMV =.-3 ; TIME OUT VALUE IN SECONDS .BYTE 5 ; 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 .IFZ FOROS2 .WORkREC,IOCL,$REC MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT OUTE$ ERPR IOCL,CLER .NLIST MEB .ENDM OUT$ .PAGE ; I/O MACRO CALL .MACRO IOM$ IOCL,CLER,LUN,ERES,NRES,FCT .LIST MEB SLP$ LUN,IOCL,$LUN SLP$ ERES,IOCL,$ER SLP$ NRES,IOCL,$NR SLH$ FCT,IOCL,$FCT MOV #IOCL,-(SP) ; PLACE LIST ADDRESS ON STACK EMT IOE$ ERPR IOCL,CLER .NLIST MEB .ENDM IOM$ .PAGE .MACRO REW$ IOCL,CLER,LUN,ERES,NRES .MCALL IOM$,SLP$,SLH$,ERPR IOM$ IOCL,CLER,LUN,ERES,Nl .ENDC ; MAGNETIC TAPE RETURN AFTER INTERRUPT JUMP TABLE MTRET =.-2 .WORD MOPEN ;OPEN .WORD MCLOS ;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 mWORK ER5: JSR %5,STAER1 ;****WRD1=CONTROL STATUS REG. AT THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. AT THE TIME OF THE ERROR **** BR ZEROAD ;LOOP ON ERROR INDADT: CMP #77,SAV1 BEQ LP2ADT ;LAST ADDR. CHECKED INC SAV1 JMP RFRD ;CHECK NEXT ADDRESS LP2ADT: BIT #BIT11,@SR ;IS BIT 11 SET IN SR BEQ ADT3 JMP ADT2 ;BIT 11 SET LOOP ON TEST .PAGE ;***** ADDRESS TEST ***** ; ;WRITE EACH UNIQUE ADDRESS ON ITSELF FOR TRACK 0 ;THEN READ IT BACK AND COMPARE FOR THE nD 0,0,0 ; RSVRD 1 TO 3 .BYTE SECR ; TIMER RESOLUTION .BYTE 20 ; TIMER OPTIONS (J) .IFF .BYTE 0 .BYTE 25 .ENDC .WORD 0 ; RESERVED .WORD MTTIM ; OPTIONAL (J=1) ; ; MACRO DEFINITIONS ; .MACRO SAV.56 .IFNZ $KT11C MOV @#$KPAR5,-(SP) MOV @#$KPAR6,-(SP) .ENDC .ENDM ; .MACRO RST.56 oRES,REWE$ .ENDM REW$ .PAGE ; FORWARD SPACE RECORD CALL MACRO .MACRO FSR$ IOCL,CLER,LUN,ERES,NRES .MCALL IOM$,SLP$,SLH$,ERPR IOM$ IOCL,CLER,LUN,ERES,NRES,FSRE$ .ENDM FSR$ .PAGE ; BACKSPACE RECORD CALL MACRO .MACRO BSR$ IOCL,CLER,LUN,ERES,NRES .MCALL IOM$,SLP$,SLH$,ERPR IOM$ IOCL,CLER,LUN,ERES,NRES,BSRE$ .ENDM BSR$ .PAGE ; FORWARD SPACE FILE CALL MACRO .MACRO FSF$ IOCL,CLER,LUN,ERES,NRES .MCALL IOM$,SLP$,SLH$,ERPR IOM$ IOCL,CLER,LUN,ERES,NRES,FSFE$ .Ep .IFNZ MULRE .WORD MUREWI .ENDC MTIMV =.-3 ; TIME OUT VALUE IN SECONDS .BYTE 5 ; 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 .IFZ FOROq;CORRECT DATA ; ; ADT3: CLR DMA ;CLEAR ACTIVE REG MOV #3000,@#SREQ ; SET LIGHTS MOV #0,TRACK ; USE MOV RATHER THAN 'CLR' FOR PATCHING IN TRAC CLR WORK CLR WORK1 MOV #1000,%6 ;SETUP STACK MOV #OUTBUF,BUF ;SET UP CURRENT ADDRESS MOV #4000,WRDCT ; SET UP WORD COUNT MOV #OUTBUF,%0 ;FILL BUFFER WITH COUNT INADB: MOV WORK,(0)+ INC WORK ;+1 COUNT CMP #OUTBUF+10000,R0 BNE INADB ;SET UP NEXT WORD MOV WORK,SAVE WRABF: BIS #BIr .IFNZ $KT11C MOV (SP)+,@#$KPAR6 MOV (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 ; IS DEVICE TYPE = 4 INC sNDM FSF$ .PAGE ; BACK SPACE FILE CALL MACRO .MACRO BSF$ IOCL,CLER,LUN,ERES,NRES .MCALL IOM$,SLP$,SLH$,ERPR IOM$ IOCL,CLER,LUN,ERES,NRES,BSFE$ .ENDM BSF$ .PAGE ; WRITE END OF FILE CALL MACRO .MACRO EOF$ IOCL,CLER,LUN,ERES,NRES .MCALL IOM$,SLP$,SLH$,ERPR IOM$ IOCL,CLER,LUN,ERES,NRES,EOFE$ .ENDM EOF$ .PAGE ; CREATE FILE MACRO .MACRO CF$ LST,CLER .MCALL SPM$,ERPR SPM$ LST EMT Q$ ERPR LST,CLER .NLIST MEB .ENDM CF$ .PAGE ; DELETE FILE MACRO tS2 .WORD 0,0,0 ; RSVRD 1 TO 3 .BYTE SECR ; TIMER RESOLUTION .BYTE 20 ; TIMER OPTIONS (J) .IFF .BYTE 0 .BYTE 25 .ENDC .WORD 0 ; RESERVED .WORD MTTIM ; OPTIONAL (J=1) ; ; MACRO DEFINITIONS ; .MACRO SAV.56 .IFNZ $KT11C MOV @#$KPAR5,-(SP) MOV @#$KPAR6,-(SP) .ENDC .ENDM ; uT8,@DCS ;CLEAR THE DISK WORLD WRITE ;WRITE TSTB @DCS ;IS THE CONTROL READY BPL .-4 ;CONTROL READY TST @DCS ;IS THERE AN ERROR BPL TFBL ;NO ERROR MOV @DCS,WORK ;FETCH CONTENTS OF CONTROL REG MOV #6,ERCOUNT ;SET UP ERROR COUNT ER6: JSR %5,STAER ;REPORT CONTROL ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR WRABF ;RE-WRITE DATA TFBL: MOV SAVE,WORK ADD #40,DMA CMP #10000,WORK BNE INADB-4 CLR WORK CLR WORK1 CLR vR4 ; SET R4 = 2 CMPB DEVICE(R0),#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,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 MOVB R1,RES2(R0) BLE MTERR w .MACRO DF$ LST,CLER .MCALL SPM$,ERPR SPM$ LST EMT Q$ ERPR LST,CLER .NLIST MEB .ENDM DF$ .PAGE ; DISABLE SCHEDULER .MACRO MSK$ .LIST MEB EMT MSKE$ .NLIST MEB .ENDM MSK$ .PAGE ; ENABLE SCHEDULER .MACRO UMSK$ .LIST MEB EMT UNME$ .NLIST MEB .ENDM UMSK$ .PAGE ; CONVERT FROM BINARY TO ASCII MACRO .MACRO BASC$ BVAL,ASCB .MCALL SPM$,SPD$ .LIST MEB SPM$ BVAL SPD$ ASCB EMT BTAE$ .NLIST MEB .ENDM BASC$ .PAGE ; CONVERT ASCII TOx.MACRO RST.56 .IFNZ $KT11C MOV (SP)+,@#$KPAR6 MOV (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 ; IS DEVICE TYPE = 4 yDMA ADT3A: MOV #0,TRACK ; USE MOV RATHER THAN 'CLR' FOR PATCHING IN TRAC MOV #INBUF,BUF MOV #100,WRDCT RDTDN: BIS #BIT8,@DCS ;CLEAR THE DISK READ TSTB @DCS ;IS THE CONTROL READY BPL .-4 ;YES THE CONTROL IS READY TST @DCS ;IS THERE AN ERROR BPL ADRCMP ;NO ERROR MOV #7,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;FETCH CONTROL REG. ER7: JSR %5,STAER ;REPORT CONTROL ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR RDTDN ;z ;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 MOV #5,R4 ; SET LOGICAL DEVICE ERROR CODE MOVB DEVNUM(R0),R2 BLT MTERR ; BR IF NEGATIVE DEVICE NUMBER CMP R2,#MTDVLM ; IS DEVICE NUMBER DEFINED BGT MTERR ; BR IF NOT INC R4 { BINARY MACRO .MACRO ASCB$ ASCB,BVAL,ERES .MCALL SPM$,SRS$,ERRM SPM$ ASCB EMT ATBE$ SRS$ BVAL ERRM ERES .NLIST MEB .ENDM ASCB$ .PAGE ; CONVERT ASCII TO RAD50 .MACRO ASCR$ ASCB,RADB .MCALL SPM$,SPD$ SPM$ ASCB SPD$ RADB EMT ASRE$ .NLIST MEB .ENDM ASCR$ .PAGE ; CONVERT RAD50 TO ASCII .MACRO RASC$ RADB,ASCB .MCALL SPM$,SPD$ SPM$ ASCB SPD$ RADB EMT RACE$ .NLIST MEB .ENDM RASC$ .PAGE ; GET DATE .MACRO DATE$ YADR,MADR,DADR .MCALL SRS$ | INC R4 ; SET R4 = 2 CMPB DEVICE(R0),#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,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 MOVB R1,RES2(R0) BLE }RE-READ ADRCMP: MOV #INBUF,R0 MOV DMA,R1 ASH #6,R1 MOV #100,R2 1$: CMP (R0)+,R1 BNE 2$ INC R1 SOB R2,1$ BR INCCMP 2$: MOV -(R0),WORK MOV R1,WORK1 MOV #10,ERCOUNT ;SET UP ERROR COUNT ER10: JSR %5,STAER1 ;REPORT COMPARISON ERROR ;****WRD1=DISK ADDR. WANTED **** ;****WRD2=DISK ADDR. RECEIVED **** INCCMP: INC DMA ; INC SECTOR NUMBER CMP #100,DM~ ; SET SKIP OR SPACE COUNT ERROR CODE CMP R1,#7 BLT MT02 TST COUNT(R0) BEQ MTERR ;BR IF COUNT IS ZERO CLR NWORD(R0) BR MT02 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  .LIST MEB EMT GDAE$ SRS$ YADR SRS$ MADR SRS$ DADR .NLIST MEB .ENDM DATE$ .PAGE ; GET TIME .MACRO TIME$ HADR,MADR,SADR .MCALL SRS$ .LIST MEB EMT GTIE$ SRS$ HADR SRS$ MADR SRS$ SADR .NLIST MEB .ENDM TIME$ .PAGE ; GET JULIAN DATE .MACRO JDATE$ JUL .MCALL SRS$ .LIST MEB EMT GJDE$ SRS$ JUL .NLIST MEB .ENDM JDATE$ .PAGE DRVST$ CR,ASDF IOCL$ CRIOCL,CRDCL,1,2,0,CRERS,$AMOD,1,1 DCL$ CRDCL,$CR00 NOP 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 MOV #5,R4 ; SET LOGICAL DEVICE ERROR CODE MOVB DEVNUM(R0),R2 BLT MTERR ; BR IF NEGATIVE DEVICE NUMBER CMP R2,#MTDVLM ; IS DEVICE NUMBER DEFINED BGT MTERR ; BR IF NOT INC A ; LAST SECTOR BEQ LPADT3 BR RDTDN ;GO READ BUFFER LPADT3: BIT #BIT11,@SR ;LOOP ON TEST? BNE ADT3 ;YES BIT 11 SET IN SR .PAGE ;RF11 TRACK SELECTION TEST ; ;WRITE THE FIRST AND LAST ADDRESS OF EACH TRACK ;WITH THE OCTAL VALUE OF EACH TRACK ;BITS 6 THRU 11 EQUAL TRACK NUMBER ;BITS 0 THRU 5 EQUAL 0 IN FIRST SECTOR OF EACH TRACK ;BITS 0 THRU 5 EQUAL 77 IN LAST SECTOR OF EACH TRACK ; ;AFTER WRITING THE DISK READ EACH ADDRESS ;AND COMPARE DATA FOR THE CORRECT VALUE ; ;SET PRIORITY TO 7 .IFZ $KT11C MOV R0,@MTLAST ;QUEUE 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 INP$ CRIOCL,CRECAL ; DAP DIP: NOP ASDF: NOP CRERS: NOP CRECAL: HALT ; DAP .END R4 ; SET SKIP OR SPACE COUNT ERROR CODE CMP R1,#7 BLT MT02 TST COUNT(R0) BEQ MTERR ;BR IF COUNT IS ZERO CLR NWORD(R0) BR MT02 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. SPADT4: CLR DMA ;CLEAR WORK REGISTERS MOV #4000,@#SREQ ; SET LIGHTS CLR TRACK JSR R5,ZOBUF ; ZERO OUTPUT BUFFER MOV #1000,%6 ;SETUP STACK BIS #BIT8,@DCS ;CLEAR THE DISK WORLD MOV #OUTBUF,BUF ;SET CURRENT ADDRESS MOV #4,WRDCT ; SET WORD COUNT INSWT: WRITE ;GO WRITE TSTB @DCS ;IS READY SET BPL .-4 ;YES! WAIT FOR NOT BUSY TST @DCS ;TEST FOR ERROR BPL TSTTK ;NO ERROR GO ON MOV #11,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;REPOR MOV (SP)+,MTLAST MOV 16(R0),@#$KPAR6 .ENDC .IFZ FOROS2 CMP 4*$KT11C+16(SP),#TSK.PC ; IS CALLER A TASK BNE MT04 ; BRANCH IF NOT .IFF TST ACTIVE BEQ MT04 .ENDC 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 NMTR DPRTY = 0, THE ALL TASK PRIORITIES ; WILL BE RETRIEVED FROM TASK TABLE. ; IF DPRTY = 1, THEN CALLING PROGRAM ; CAN SELECT PRIORITY. ARG = 1 ;ARGUMENT OPTION; IF ARG = 1, THEN ; THE CALLING PROGRAM CAN PASS AN ; ARGUMENT TO THE QUEUED TASK. RGSAVE = 1 ;REGISTER SAVE OPTION. 1 = SAVE L 7 ;SET PRIORITY TO 7 .IFZ $KT11C MOV R0,@MTLAST ;QUEUE 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 T CONTENTS OF DCS REG ER11: JSR %5,STAER ;REPORT ERROR OCCURRED ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR INSWT ;GO RE-WRITE TSTTK: CMP #7777,OUTBUF ; TEST FOR LAST ADDRESS BEQ INSRD ;GO READ THE DATA BIT #77,OUTBUF ; IS IT SECTOR NUMBER ZERO BNE MVNEM ;NO BIS #77,OUTBUF ; YES, SET UP FOR LAST SECTOR IN TRACK BIS #77,OUTBUF+2 BIS #77,OUTBUF+4 BIS #77,OUTBUF+6 ADD #77,DMA EQ ; 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 MOV $KPAR5,MTPAR5 ; SAVE KPAR5 FOR INTERRUPT POUTINE .ENDC MOV DRNEW,DROLD ; UPDATE TAPE DIRECTION AND UNIT NUMBER MOV FUNCT(R0),R1 ;RETURN JUMP TO ASL R1 JSR PC,@MTFCT(R1) ; ROUTINE CMPB RES2(R0),#2 ;REGISTERS, 0 = DON'T SAVE 'EM. ; ; ***** NOTE: IF DPRTY = 0 OR ARG = 0, THEN THE CORRESPONDING ; ---- ARGUMENT SHOULD BE OMITTED FROM THE CALLING LIST. .IFL DPRTY ; XXXXXXXX ;CREATE ASSEMBLY ERROR IF DPRTY ISNT .ENDC ;ZERO OR ONE. .IFG DPRTY-1 ; XXXXXXXX ; .ENDC ; .IFL ARG ; XXXXXXXX CURRENT REQUEST MOV (SP)+,MTLAST MOV 16(R0),@#$KPAR6 .ENDC .IFZ FOROS2 CMP 4*$KT11C+16(SP),#TSK.PC ; IS CALLER A TASK BNE MT04 ; BRANCH IF NOT .IFF TST ACTIVE BEQ MT04 .ENDC 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 BR INSWT ;GO WRITE MVNEM: INC OUTBUF ;INC. TO NEXT TRACK INC OUTBUF+2 INC OUTBUF+4 INC OUTBUF+6 CLR DMA INC TRACK ;INC. DAE REG. BR INSWT ;GO WRITE ; ;READ THE FIRST AND LAST ADDRESS OF EACH TRACK ;AND VERIFY IT HAS THE CORRECT DATA INSRD: CLR DMA ;CLEAR WORK REG. CLR TRACK CLR SAVE BIS #BIT8,@DCS ;CLEAR THE DISK WORLD MOV #INBUF,BUF ;SET UP CURRENT ADDR MOV #4,WRDCT ; SET UP WORD COUNT RDTKS: READ ; 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: MOV @#MTSTAT,STATUS(R0) RST.56 JSR R5,POPR ;RESTORE REGISTERS MOV (SP)+,(SP) ;MOVE RETURN ADDRESS RTS PC ;RETURN TO CALLE- MTEX1: MOV #M ;CREATE ASSEMBLY ERROR IF ARG IS NO .ENDC ;ZERO OR ONE .IFG ARG-1 ; XXXXXXXX ; .ENDC ; .IFL RGSAVE ; XXXXXXXX ;CAUSE AN ASSEMBLY ERROR IF .ENDC ;RGSAVE ISN'T 0 OR 1 .IFG RGSAVE-1 ; XXXXXXX ; .ENDC ; $ABMES = 1 ; ONLY 1 ABORT MESSA 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 MOV $KPAR5,MTPAR5 ; SAVE KPAR5 FOR INTERRUPT POUTINE .ENDC MOV DRNEW,DROLD ; UPDATE TAPE DIRECTION AND UNIT NUMBER MOV FUNCT(R0),R1 ;RETURN JUMP TO ASL R1 JSR PC,@MTFCT(R1) ; ROUTINE CMPB RES2READ DATA TSTB @DCS ;CHECK FOR READY BPL .-4 ;CONTROL NOT READY TST @DCS ;IS THERE AN ERROR BPL CMPDTK ;NO ERROR MOV #12,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;FETCH CONTENTS OF DCS ER12: JSR %5,STAER ;REPORT CONTROL ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR RDTKS ;GO RE-READ CMPDTK: CMP SAVE,INBUF ;IS DATA CORRECT BEQ CMNETK ;YES SETUP FOR NEXT WORD MOV SAVE,WORK1 ;CORRECT ADDRESS MOV INBUF,WORK ;INCORRECT DATA MOV #13,ERCOUNT ;SET UP ERTTLI,-(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 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) ;PGE BUFFER ******** .IFL $ABMES ; $ABMES MUST BE => 0. XXXXXX ; ABRT .ENDC ; PSTP ; THE SYSGEN PARAMETER '$PST CONTROLS THE EXECUTION PATH*PSTP ; DURING A TASK ERROR. PSTP ; = -1 ROS + USER ROUTINES PSTP ; (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: MOV @#MTSTAT,STATUS(R0) RST.56 JSR R5,POPR ;RESTORE REGISTERS MOV (SP)+,(SP) ;MOVE RETURN ADDRESS RTS PC ;RETURN TO CALLE- MTEX1: ROR COUNT ER13: JSR %5,STAER1 ;REPORT SELECTION ERROR ;****WRD1=TRACK ADDR. WANTED **** ;****WRD2=TRACK ADDR. RECEIVED **** CMNETK: CMP #7777,SAVE ; IS IT THE LAST ADDRESS BEQ LPTSK ;END OF TEST BIT #77,SAVE ; IS IT ADDRESS ZERO OF THE TRACK BEQ ZRBIT ;NO! SETUP FOR LAST ADDR INC SAVE ;INC FOR TRACK NO. CLR DMA ; SET UP DAR INC TRACK ;INC TRACK BR RDTKS ;GO READ ZRBIT: BIS #77,SAVE ; SET UP FOR LAST SECTOR IN TRACK LACE 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 .BLKW 20 .PAGE ; MAGNETIC TAPE INTERRUPT ROUTINE MTINT: .IFZ FOROS2 JSR R5,SAVE .IFF $SAVE .ENDC SPL 5 TST NMTREQ BMI MTEYIT .IFZ $KT11C MOV MT = 0 ROS PSTP ; = +1 USER PSTP ; PSTP $PST = 0 ; PSTP ; PSTP .PAGE ;FOLLOWING ARE SYSGEN PARAMETERS FOR THE TIMER AND CALENDAR ROUTINES ; NORMALLY THE BASE PERIOD FOR THE TIMERS IS THE 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 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 @# ADD #77,DMA BR RDTKS ;GO READ LAST ADDR OF TK LPTSK: BIT #BIT11,@SR ;IS BIT 11 SET IN SR BEQ ADT5 ; YES, LOOP ON TEST JMP ADT4 .PAGE ;RF11 LOOK AHEAD TEST ;WRITE ONE WORD UPON RECEIPT OF ;NOT READY READ THE LOOK AHEAD ;REGISTER IT SHOULD CONTAIN THE ;ADDRESS +1 ; ADT5: CLR DMA ;CLEAR REGISTERS MOV #5000,@#SREQ ; SET LIGHTS CLR TRACK CLR SAVE MOV #1000,%6 ;SETUP STACK MOV #4,WRDCT ; SET UP FOR MINIMUM X-FEFRST,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 MOV FUNCT(R0),R5 ;LOAD FUNCTION CODE (1 TO 8) ASL R5 JSR PC,@MTRET(R5) MOV @#MTSTAT,STATUS(R0) INTERRUPT PERIOD, AND ; IF THAT PERIOD IS DESIRED FOR USE BY ANY TIMER 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 COUNTPS,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 .BLKW 20 .PAGE ; MAGNETIC TAPE INTERRUPT ROUTINE MTINT: .IFZ FOROS2 JSR R5,SAVE .IFF $SAVE .ENDC SPL 5 TST NMTREQ BMI MTEYIT .IFZ $KT11C R MOV #OUTBUF,BUF ;SET UP CURRENT ADDRESS WRADT5: MOV ADS,R0 ; PLACE ADDRESS OF LOOK AHEAD REG IN RO BIS #BIT8,@DCS ;CLEAR THE DISK WRITE ;WRITE 1$: TSTB @DCS ; IS THE CONTROLLER BUSY BPL 1$ ;CONTROL STILL BUSY MOV (%0),@#WORK ; FETCH LOOK AHEAD TST @DCS ;IS THERE AN ERROR BPL LPADT5 ;NO DISK ERRORS MOV #14,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;FETCH DCS FOR REPORT ER14: JSR %5,STAER ;REPROT CONTROL ERROR ;****WRD1=DISK C BIT @#MTSTAT,#ENDTAP ; TEST FOR END OF TAPE MARK BEQ MTINT2 MOV #13,ERROR(R0) ; SET END OF TAPE INDICATOR IN LIST MTINT2: 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 ER TABLES FOR DETERMINING THE PERIOD OF EACH ; RESOULTION. THE PERIOD 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 ; 1/60 SEC ******** RES1 = 1 ; 1/60 SEC 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 MOV FUNCT(R0),R5 ;LOAD FUNCTION CODE (1 TO 8) ASL R5 JSR PC,@MTRET(R5) MOV @#MTONTROL REG AT THE TIME OF THE ERROR **** BR WRADT5 ;LOOP ON ERROR LPADT5: MOV TRACK,R2 BIC #177000,R2 ASH #6,R2 MOV DMA,R1 ADD #2,R1 BIC #177700,R1 ADD R1,R2 CMP R2,WORK BEQ INCADS ;BRANCH IF EQUAL MOV R2,WORK1 MOV #15,ERCOUNT ER15: JSR %5,STAER1 ;REPORT LOOK AHEAD INCORRECT ;****WRD1=DISK ADDR. WANTED FROM LOOK AHEAD REG. **** ;****WRD2=DISK ADDR. RECEIVED FROM DISK LOOK A 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 ******** RES2 = 2 ; 1/30 SEC. ******** RES3 = 5 ; 1/6 SEC. ******** RES4 = 2 ; 1/3 SEC. ******** RES5 = 3 ; 1.0 SEC. ******** RES6 = 5 ; 5.0 SEC RES7 = 2 ; 10.0 SEC RES8 = 3 ; 30.0 SEC RES9 = 2 STAT,STATUS(R0) BIT @#MTSTAT,#ENDTAP ; TEST FOR END OF TAPE MARK BEQ MTINT2 MOV #13,ERROR(R0) ; SET END OF TAPE INDICATOR IN LIST MTINT2: 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 NUHEAD REG. **** BR WRADT5 ;LOOP ON ERROR INCADS: CMP #10000,R2 BLE XLPADT5 ; LAST ADDRESS EXIT INC DMA ;+1 DMA CMP #77,DMA BNE WRADT5 CLR DMA INC TRACK MOV TRACK,R1 ADD #5000,R1 MOV R1,@#SREQ BR WRADT5 ;CHECK NEXT ADDRESS XLPADT5:BIT #BIT11,@SR ;LOOP ON TEST BNE ADT5 ;YES LOOP ON TEST BIT 11 SET .PAGE ; SPIRAL TESTS ; ;WRITE THE LAST WORD OF TRACK ZERO ;AND T.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 DRNEW,DROLD ; UPDATE TAPE DIRECTION AND UNIT NUMBER MOV FUNCT(R0),R1 ;RETURN JUMP TO ; 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 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 SEMBER ON STACK 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 AHE FIRST WORD OF TRACK ONE ;USING ONE WORD X-FERS ;DATE = 52525 SPIRAL: BIS #BIT8,@DCS ;CLEAR THE DISK MOV #6000,@#SREQ ; SET LIGHTS JSR R5,ZOBUF ; ZERO OUTPUT BUFFER JSR R5,ZBUF ; ZERO INPUT BUFFER MOV #340,@CSR ;LOCK UP PROCESSING MOV #1000,%6 ;SETUP STACK MOV #100,WRDCT ; SET WORD COUNT TO 100 CLR TRACK MOV #77,DMA ; LAST SECTOR OF TRACT ZERO MOV #100,R0 ; SET UP DATA ASL R1 ; FUNCTIONAL JSR PC,@MTFCT(R1) ; ROUTINE CMPB 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 .BLKW 20 .PAGE ; MAGNETIC TAPE TIME OUT ROUTINE MTTIM: JSR R5,PUSHR TST NMTREQ ; IS QCR = 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 .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,DDRESS .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 DRNEW,DROLD ; UPDATE TAPE DIRECTION AND UNIT NUMBER MOV FUNCT(R0),R1 ;RETUR MOV #OUTBUF,R1 1$: MOV #52525,(R1)+ SOB R0,1$ MOV #OUTBUF,BUF WRITE ;WRITE LAST ADDR TK ZERO TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS BPL SPIL1 MOV #16,ERCOUNT MOV @DCS,WORK ER16: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR SPIRAL SPIL1: CLR DMA INC TRACK WRITE ;WRITE FIRST ADDR. TK 1 TSTB @DCS ;WAIT FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS BPL SPIL2 MUEUE EMPTY BMI MTTIM2 .IFZ $KT11C MOV MTFRST,R0 .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 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 = 60. ; TOD CLOCK TICKS PRE SECOND ******** $ABMPL = 6 ; TOD CLOCK BASE MULTIPLER ******** TODINT = 100 ; T-O-D CLOCK INTERRUPT VECTOR ******** TIMINT = 0 ; NO SEPERATE TIMER CLOCK ******** STLINT N JUMP TO ASL R1 ; FUNCTIONAL JSR PC,@MTFCT(R1) ; ROUTINE CMPB 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 .BLKW 20 .PAGE ; MAGNETIC TAPE TIME OUT ROUTINE MTTIM: JSR R5,PUSHR TST NMTREQOV #17,ERCOUNT MOV @DCS,WORK ER17: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR SPIRAL SPIL2: MOV #200,WRDCT ; SET UP FOR 2 SECTOR X-FER DEC TRACK MOV #77,DMA MOV #INBUF,BUF ; READ ;READ DATA TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS BPL SPIL3 MOV #20,ERCOUNT MOV @DCS,WORK ER20: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR SPIRAL SPIL3: MOV MTTIM2 ; DEQUEUE THE REQUEST MTTIM1: MOV #12,R4 MTTIM4: 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: .IFNZ DATUM CLRB DRNEW ; SET FO= 0 ; NO STALL ALARM ******** STLREG = 167000 ;ADDRESS FOR STALL ALARM RESET CLKENB = 177546 ; ADDRESS FOR CLOCK ENEBL ******** TODBIT = 100 ; BIT TO TURN ON THE T-O-D CLOCK ******** TIMBIT = 0 ; NO TIMER CLOCK ******** STLBIT = 0 ;BIT TO ENABLE STALL ALARM INTERRUPT $TMSLC = 0 ; NO TIME SLICING IN THI ; IS QUEUE EMPTY BMI MTTIM2 .IFZ $KT11C MOV MTFRST,R0 .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 (S #100,R0 ; CHECK INPUT FROM LAST SECTOR OF TRACK 0 MOV #INBUF,R1 1$: CMP #52525,(R1)+ BNE 2$ SOB R0,1$ BR CMPX1 2$: MOV #21,ERCOUNT ;SETUP ERROR COUNT MOV -(R1),WORK MOV #52525,WORK1 ;CORRECT DATA ER21: JSR %5,STAER1 ;REPORT ADDR 377 HAE BAD DATA ;****WRD1=THE DATA THAT SHOULD HAVE BEEN IN ADDR. 3777**** ;****WRD2=THE DATA READ FROM ADDR. 3777**** BR SPIRAL ;LOOP ON ERROR CMPX1: MOV #100,R0 1$: RWARD FLAG .ENDC RTS PC .PAGE ; M A G N E T I C T A P E R E A D MREAD: .IFNZ DATUM CLRB DRNEW ; SET FORWARD FLAG .ENDC JSR PC,MTINIT BPL MREA1 JSR 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 READS SYSTEM ******** $SWATZ = 20. ;NUMBER OF ENTRIES IN SCHEDULER "WAIT" TABLE $TWATZ = 20. ;WORDS IN TIMER'S "WAIT" TABLE .PAGE ; $DTAPE = 0 ; NO DECTAP ******** ; NDISCS = 1 ; DISC OPTION AND NUMBER OF CONTROLLERS ; $DDSDC = 1 ; USE DDS DICS ; ACTSIZ = 1 ; ONLY ONE AUTH. CODE. ******** .IFL 20.-ACTSIZ XXXXP)+ BR MTTIM2 ; DEQUEUE THE REQUEST MTTIM1: MOV #12,R4 MTTIM4: 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: .IFNZ DATUM CLRB DRNEW CMP #52525,(R1)+ BNE 2$ SOB R0,1$ BR LPSPI1 2$: MOV #22,ERCOUNT ;SETUP ERROR COUNT MOV #52525,WORK1 ;CORRECT DATA MOV -(R1),WORK ER22: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=THE DATA THAT SHOULD BE IN ADDR. 0 OF TRACK 1 **** ;****WDR2=THE DATA READ FROMADDR.0 OF TRACK 1 **** SPIL5: JMP SPIRAL LPSPI1: BIT #BIT11,@SR ;LOOP ON TEST? BNE SPIL5 .PAGE ; SPIRAL TEST EXT. ; ;WRITE TWO WORDS OF DATA ;STARTING WITH 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 ;CONTINUE IF NOT SET JSR PC,MREAD BR MRRE3 MRRE1: .IFZ DATUM MOV @#MTSTAT,R2 BMI MRRE6 ; BR IF EOF DETECTED ASH #4,R2 XXXX ; ERROR-ALLOCATE MORE LOCATIONS XXXXXXXX ; FOR AUTHORIZATION CODES .ENDC ; .IFNZ NDISCS DRESDI = 0 ; NO DISR RESIDENT DIRECTORIES ******** .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 ; SET FORWARD FLAG .ENDC RTS PC .PAGE ; M A G N E T I C T A P E R E A D MREAD: .IFNZ DATUM CLRB DRNEW ; SET FORWARD FLAG .ENDC JSR PC,MTINIT BPL MREA1 JSR 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 ENTETHE LAST ADDRESS OF TRACK0 ;DATA PATTERN = 25252 ;THEN READ THE DATA DOING ONE WORD ;X-FERS XSPIRL: BIS #BIT8,@DCS ; CLEAR MOV #7000,@#SREQ ; SET LIGHTS JSR R5,ZBUF ; ZERO INPUT BUFFER JSR R5,ZOBUF ; ZERO OUTPUT BUFFER MOV #340,@CSR ;LOCK UP PROCESSING MOV #1000,%6 ;SET UP STACK MOV #200,R0 ; SET UP TWO SECTORS MOV #OUTBUF,R1 1$: MOV #25252,(R1)+ SOB R0,1$ MOV # ;MOVE ERROR BIT INTO SIGN BIT BMI MRRE2 ;BRANCH IF ERROR SET MRRE6: SUB @#MTWORD,COUNT(R0) ; SUB WORD COUNT .IFF MRRE6: BIT @#MTSTAT,#MDATST BNE MRRE2 ; BRANCK IF ANY ERRORS MOV @#MTBCNT,R1 ASR R1 ADD R1,COUNT(R0) .ENDC BR MRRE4 MRRE2: MOV #11,R4 DEC RES1(R0) ; DEC REPEAT COUNT BEQ MRRE4 MOVB #1 LEAST THREE .ENDC MAXID1 = 256. ; MAX. # OF FILE ID ON DISK #1. ******** ; .IFG NDISCS-1 NDPRT2 = 7 ; NO. OF PRIORITY LEVELS IN DISC 2 QUEUES .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 RED 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 ;CONTINUE IF NOT SET JSR PC,MREAD BR MRRE3 MRRE1: .IFZ DATUM MOV @#MTSTAT,R2 BMI MRRE6 ; BR IF EOF DETECTED 200,WRDCT ; SET WORD COUNT FOR 2 SECTORS MOV #OUTBUF,BUF ;SET UP CMA CLR TRACK ;SET UP DISK ADDR. MOV #77,DMA WRITE ;WRITE DATA TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS ;TEST FOR ERROR BPL X1SPIL ;BRANCH IF NO ERROR MOV @DCS,WORK MOV #23,ERCOUNT ;SET UP ERROR COUNT ER23: JSR %5,STAER ;REPORT CONTROL ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR XSPIRL X1SPIL: MOV #100,WRDCT ; S,DRNEW ; SET BACKWARDS FLAG 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 NOT COMPLETE MRRE4: RTS PC .PAGE ; M A G N E T I C T A P E W R I T E ; R0 = ADD 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 ; ; COMPID,FTDIR,CDIMGE,CDIHDR,TTFILE .IFZ DRESDI NCFILE = $SYSFL+MAXOVR+20. ; NO. OF CORE RES. FILE IDS ******** .ENDC .IFNZ DRESDI NCFILE = NDISCS+$SYSFL+40. ; NO. OF CORE RESIDENT IASH #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,#MDATST BNE MRRE2 ; BRANCK IF ANY ERRORS MOV @#MTBCNT,R1 ASR R1 ADD R1,COUNT(R0) .ENDC BR MRRE4 MRRE2: MOV #11,R4 DEC RES1(R0) ; DEC REPEAT COUNT BEQ MRRE4 ET UP FOR 100 WORD X-FER CLR TRACK MOV #77,DMA ; SET UP DAR MOV #INBUF,BUF ;SET UP CMA READ ;READ DAR 3777 TSTB @DCS ;TEST FOR NOT READY BPL .-4 ;CONTROL STILL BUSY TST @DCS ;TEST FOR ERROR BPL X2SPIL ;BRANCH IF NO ERROR MOV #24,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;REPORT CONTROL REG ER24: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE THE ERROR **** BR XSPIRL X2SPIL: MOV #100,R0 ; CHRESS OF LIST ; BYTE RES1 IS REWRITE REPEAT COUNT ; BIT 15 OF RES1 IS BACK SPACE RECORD FLAG ; MWRIT: .IFNZ DATUM CLRB DRNEW ; SET FORWARD FLAG .ENDC 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 BCS MWRI1 ;BR IF ND'S .ENDC ; ******** ; ; INCLUDING DOD'S AND SYSTEM FILES NCRWDS = NCFILE*5 ; NO. OF CORE RESIDENT WORDS NEEDED ; ; FOR CORE DIRECTORY NCRLOC = NCRWDS+NCRWDS ; NO. OF LOCATIONS IN CORE RESIDENT ; ; DIRECTORY ERRPRT = 1 ; PRINT-OUT DISC ERROR MESSAGES OPTION CHKPTC = 0 MOVB #1,DRNEW ; SET BACKWARDS FLAG 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 NOT COMPLETE MRRE4: RTS PC .PAGE ; M A G N E T I C T A P E W R I T E ; ECK INPUT FROM LAST SECTOR OF TRACK 0 MOV #INBUF,R1 1$: CMP #25252,(R1)+ BNE 2$ SOB R0,1$ BR X3SPIL 2$: MOV #25,ERCOUNT ;SET UP ERROR COUNT MOV #25252,WORK1 ;GOOD DATA MOV -(R1),WORK ER25: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=THE DATA THAT SHOULD BE IN ADDR.3777 OF TRACK 0 **** ;****WRD2=THE DATA THAT WAS READ FROM ADDR. 3777 OF TRACK 0 **** BR XSPIRL X3SPIL: MOV #1,TRACK JSR R5,ZBUF O 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 COMMAND BR MWRI3 MWRI ; CHECKPOINT CAPABILITY OPTION- ; ;******MODEL 45 ONLY FXPART = 0 ; NO FIXED PARTIONS ******** $SGMNT = 0 ; NO OVERLAY SEGMENTS IN THIS SYSTEM. ******** $FTMAX = 10. ; LARGEST FILE TYPE IN SYSTEM $IDMAX = 256. ; LARGEST FILE ID IN SYSTEM. ******** ; ; MUST BE >= MAXID1,2,3,..,N $FTDRL = $FTMAX*3/64.+1 ; NO R0 = ADDRESS OF LIST ; BYTE RES1 IS REWRITE REPEAT COUNT ; BIT 15 OF RES1 IS BACK SPACE RECORD FLAG ; MWRIT: .IFNZ DATUM CLRB DRNEW ; SET FORWARD FLAG .ENDC 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 BCS MWRI1 ; ZERO INPUT BUFFER MOV #100,WRDCT MOV #INBUF,BUF CLR DMA READ ;READ DATA TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS ;TEST FOR ERROR BPL X4SPIL ;BRANCH IF NO ERROR MOV #26,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;REPORT CONTROL REG. ER26: JSR %5,STAER ;REPORT ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR XSPIRL .BLKW 40 ; PATCH AREA X4SPIL: 2: 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: .IFZ DATUM MOV . 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 ; # BYTES IN EXT OF TASK TABLES $TKFLN = $TKFL1+$TKFL2+2+3/4*2 ; # WORDS IN ALL TASK TABLES ; + 'TASKS' + EVEN NUMBE ;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 COMMAND BR MOV #100,R0 MOV #INBUF,R1 1$: CMP #25252,(R1)+ BNE 2$ SOB R0,1$ BR LPXSPIL ; BR IF ALL DATA OK 2$: MOV #27,ERCOUNT ;SET UP ERROR COUNT MOV #25252,WORK1 ;GOOD DATA MOV -(R1),WORK ER27: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=THE DATA THAT SHOULD BE IN ADDR. 0 OF TRACK 1 **** ;****WRD2=THE DATA THAT WAS READ FROM ADDR. 0 OF TRACK 1 **** X5SPIL: JMP XSPIRL LPXSPIL:BIT #BIT11,@SR ;LOOP ON TEST? B @#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,#MDATST 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 W R I T E F I L E M A R K ; R OF ; WORDS FOR DISCIO $TKFNS = $TKFLN/64.+1 ; NO. OF SECTORS IN TASK TABLE FILE ; ******** $ROSIZE = 320. ; SIZE OF ROS BOOT AREA ******** ; ******** ; ; THE FOLLOWING IS FOR DISC RESIDENT DIRECTORIES ; DIRAD1 = $ROSIZE ; DISC1 DISK DIR. AFTER BOOT ARE 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: .IFZ DATUNE X5SPIL .PAGE CLRREG: CLR DMA ;CLEAR WORD ADDRESS CLR TRACK ;CLEAR TRACK ADDRESS ; ; DATAT: MOV SWRDCT,WRDCT MOV #LDAT,HRDER ;SETUP FOR HARD ERROR MOV #340,@CSR ;LOCK UP PROCESSOR PRIORITY JSR %5,PASEL ;SET UP DATA BUFFERS LDAT: JSR %5,OPDSEL ;SET UP DISK ADDRESS MOV TRACK,@#SREQ BIT #BIT14,FLAG ;TEST FOR WRITE BEQ SLH ;TEST FOR WRITE CHECK MOV #OUTBUF,BUF ;SETUP OUTPUT BUFFER WRITE +100 ;WRITE WITH INT. ENABLED BIT #BIT9,@SR ;FIND OUT HOW TO WAIT FOMWEOF: .IFNZ DATUM CLRB DRNEW ; SET FORWARD FLAG .ENDC 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 BIA ******** ; ; LEAVES ROOM FOR 20K ROS BOOT .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 M 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,#MDATST 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 W R I T E F I L ER INT BNE WRWAIT ;WAIT WITH WAIT INSTRUCTION IOT ;WAIT IN BACKGROUND TEST BR SLH WRWAIT: MOV PRIORITY,@CSR WAIT ;WAIT FOR FLAG SLH: BIT #BIT13,FLAG ;TEST FOR WRITE CHECK BEQ ESH ;TEST FOR READ MOV #OUTBUF,BUF ;SETUP OUTPUT BUFFER MOV #340,@CSR WRCHECK +100 ;WRITE CHECK WITH INT. ENABLE BIT #BIT9,@SR ;FINDOUT HOW TO WAIT FOR INT. BNE WCWAIT ;WAIT WITH WAIT INSTRUCTION IOT ;WAIT IN BACKGROUND TEST BR ESH WCWAIT: MOV PRIORITY,@CSR WAIT ;WAIT FOR FLAG ESH: BIT #BIT12S #WRFM,R3 ; 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 DIRECTORY ADDRESS DISC 3 DIRLN3 = MAXID3-1/12.+1 ; DISC DIRECTORY 3 LENGTH .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 M A R K ; MWEOF: .IFNZ DATUM CLRB DRNEW ; SET FORWARD FLAG .ENDC 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 F,FLAG ;TEST FOR READ BEQ REH ;CHECK BUFFER MOV #INBUF,BUF ;SETUP OUTPUT BUFFER BIC #3,FLAG ;CLEAR RE-READ COUNT DSKRD: MOV #340,@CSR JSR %5,ZBUF ;CLEAR BUFFER INC FLAG READ +100 ;READ + INT ENABLE BIT #BIT9,@SR ;FIND OUT HOW TO WAIT FOR INT. BNE RDWAIT ;WAIT WITH WAIT INSTRUCTION IOT BR ELH RDWAIT: MOV PRIORITY,@CSR ;SET UP PRIORITY WAIT ;WAIT FOR FLAG ELH: BIT #BIT12,@SR BNE ADRD JSR %5,COMPARE ;COMPARE OUTBUFFER TO INBUFFER ADRD: JSR %5,OVRFLO ;TEST FOR EXTRA DATE ;PLACE ERROR BIT IN SIGN BIT BPL MWEOF1 .IFF BIT @#MTSTAT,#MDATST 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: .IFNZ DATUM MOVB #1,DRNEW ; SET BACKWARDS FLAG .ENDC JSR PC,MTINIT BPL MREW1 .IFZ DATUM BIT @#MTSTAT,#2 ;TEST LOAD POINT BIT .I; FILE TYPE 4, LOG UNIT 1 $FD005 = 1 ; FILE TYPE 5, LOG UNIT 1, NO CHECK PONT******** $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 OVLAG BIS #WRFM,R3 ; 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 BREAKS MOV FLAG,WORK ;CHECK DISK RE-READ COUNT BIC #177774,WORK ;DO 3 RE-READS. CMP #3,WORK BNE DSKRD ;DO ANOTHER RE-READ REH: BIT #BIT8,@SR BNE DATAT JSR %7,DISBUF ;GO SET UP DISK BUFFER. BR LDAT MSTR: TST FLAG BPL .+6 ;UNDER PROGRAM CONTROL JMP EXTPP ;OPERATOR SELECTED PATTERN ADD #2,PATNU ;INC PATTERN INDEX CMP #44,PATNU BNE DATAT ;NOT LAST PATTERN EXIT CLR PATNU ;LAST PATTERN EXIT ; ;THIS IS A RANDOM DATA, RANDOM ADDRESS ;AND RANDOM WORD COUNT ; ;WORD COUNT CAN FF BIT @#MTSTAT,#40 .ENDC BNE MREW2 BIS #REWD,R3 MOV R3,@#MTCOMM MREW1: RTS PC MREW2: CLRB 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 CERLAY TASKS ; ; FILE TYPE SIZE TABLE - IN SECTORS ; .IFNZ DRESDI $FS000 = DIRAD1+DIRLN1+$FTDRL+$CDISZ+$TKFNS .ENDC .IFZ DRESDI $FS000 = $FTDRL+$CDISZ+$TKFNS .ENDC $FS001 = $ROSIZE ; BOOT AREA ******** $FS002 = 0 ; ******** $FS003 = 0 ; ******** $FS004 = 0 #4,R2 ;PLACE ERROR BIT IN SIGN BIT BPL MWEOF1 .IFF BIT @#MTSTAT,#MDATST 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: .IFNZ DATUM MOVB #1,DRNEW ; SET BACKWARDS FLAG .ENDC JSR PC,MTINIT BPL MREW1 .IFZ DATUM BIT @#MTSTAT,#2 ;TEST LOAD POINTBE EQUAL TO OR LESS THAN 1000 WORDS ; RANEX: MOV #-1000,PASSC MOV #1000,%6 BIC #BIT9,FLAG MOV #RANER,HRDER ;SET UP FOR HARD ERROR MOV PRIORITY,@CSR ;SET PRIORITY TO LEVEL 5 WRLG: MOV #3,WORK ;GENERATE RANDOM WORD MOV #OUTBUF,%1 JSR %5,RANDOM BIC #177003,OUTBUF ; MASK FOR WORD LENGTH BEQ WRLG MOV OUTBUF,WRDCT ;SET UP WORD COUNT MOV OUTBUF+2,DMA ;SET UP DAR BIC #177700,DMA BIC #177000,OUTBUF+4 BIT #400,OUTBUF+4 BEQ .+6OMPLETE TST @#MTSTAT ;CHECK FOR FILE MARK BMI MSPRC5 JSR PC,MTINIT ;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) ; ******** $FS005 = 1719. ; TASK FILE AREA - FORCE TYPE 9 TO 16X 2/7/73 $FS006 = 0 ; ******** $FS007 = 0 ; FOR CITGO BATCH IS WITH DATA - TYPE 9.******** $FS008 = 0 ; ******** $FS009 = 0 ; ******** ; $DSIZE = 8192. ; NUMBER OF  BIT .IFF BIT @#MTSTAT,#40 .ENDC BNE MREW2 BIS #REWD,R3 MOV R3,@#MTCOMM MREW1: RTS PC MREW2: CLRB 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 DEC OUTBUF+4 MOV OUTBUF+4,TRACK ;SET UP DAE MOV WRDCT,WORK ;GENERATE RANDOM MOV #OUTBUF,%1 ;DATA BUFFER JSR %5,RANDOM MOV #OUTBUF,BUF BIS #BIT8,@DCS ;CLEAR THE DISK WRITE +100 ;WRITE DATA BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT WRCHECK +100 ;WRITE CHECK DATA BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT MOV #INBUF,BUF ;SET UP BUFFER JSR %5,ZBUF ;CLEAR BUFFER AREA READ +100 ;READ DATA BIT #BIT9,@SR BNE .+6 IOPC .ENDC .PAGE ; MAGNETIC TAPE SKIP FILES (+-N) ; MSKFI: 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 BIS #BCKR,R3 MSPRC4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;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 CLRB DRNEW TST COUNT(R0) BGE MSPRA INCB SECTORS ON DISK. ******** ; ******** $ALOD1 = $FS000+$FS001+$FS002+$FS003+$FS004 $ALOD2 = $FS005+$FS006+$FS007+$FS008+$FS009 ; ******** ; ******** ; NOTE: TYPE 9. MUST START ON A 16K SECTOR BOUNDARY FOR RETENION. ******** ; T BR .+12 MOV PRIORITY,@CSR WAIT JSR %5,COMPARE ;COMPARE OUT BUFFER TO IN BUFFER JSR %5,OVRFLO ;TEST FOR EXTRA DATA BREAKS RANER: BIT #BIT9,FLAG ;CHECK FOR ERROR BEQ EXRAX BIC #BIT9,FLAG JSR %5,CONV DMA MES1 6 JSR %5,CONV TRACK MES1A 2 JSR %5,CONV WRDCT MES3 4 EMT+0 HED6 MES1A MES1 MES3 -1 EXRAX: INC PASSC ;HAVE WE DONE IT 1000 TIMES BNE WRLG ;BRANCH IF NO BIT #BIT11,@SR ;LOOP ON TEST BEQ .+6 ;BRANCH IF YES JMP RANEX ; ;CHECK FOR MULTI DISK ;BR IF NEGATIVE DEC COUNT(R0) INC NWORD(R0) BIS #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) BGDRNEW ; SET BACKWARDS FLAG MSPRA: 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: 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 ******** $FS009 = $DSIZE-$ALOD1-$ALOD2 ; NUMBER OF DATA REA SECTORS. ******** ; ******** .IFL $DSIZE-$ALOD1-$ALOD2 ; ******** XXXXXXXX ; ONLY 8192 SECTORS AVAIL.- 1/2 MEGAWORDS .ENDC ; ; FORCE THIS IDS TO BE IN SYSTEM. ******** $BCHID = NDISCS+$SYSFL+1 ; FILE ID FO MODE ;IF IN MULTI DISK MODE REPORT "END" ;IF LAST DISK ON SYSTEM HAS BEEN ;EXERCISED. ; ; CLR DMA CLR TRACK BIT #BIT11,FLAG ;ARE WE IN MULTI DISK MODE BEQ REPOEN ;REPORT "END" MOV FLAG,WORK ;WHAT DISK ARE WE ON BIC #177743,WORK ;IF LAST DISK ON SYSTEM CMP WORK,DSKNOR ;REPORT END BEQ REPOEN ;REPORT "END" LAST DISK ADD #4,FLAG ;INC. DISK NO. BR EXTPP ;EXERCISE DISK REPOEN: EMT +1 END ;REPORT END OF PASS BIC #34,FLAG EXTPP: JMP ADTST ;RECYCLE ; ;ENTER DISK HANDLER BY T MSKFI6 INC NWORD(R0) DEC COUNT(R0) BR MSKFI2 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 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: .IFNZ DATUM CLRB DRNEW TST COUNT(R0) BGE MSKRA INCB DRNEW ; SET BACKWARDS FLAG MSKRA: .ENDC CLR R5 ;SET I/O COMPLETE MOV @#MTSTAT,R1 R BATCH FILE $BCHTP = 9. ; 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 DIRECTORY (LSD) ; ; NOTE: $LSDSZ MUST BE >/= TO ; THE TRAP INSTRUCTION ;ARGUMENT TO TRAP INSTRUCTION IS TWO ORDER ;BYTE OF THE CONTROL REGISTER. ; DISK: MOV R5,-(SP) MOV R1,-(SP) MOV R0,-(SP) MOV DAR,R5 MOV TRACK,R0 BIC #177000,R0 ASH #6,R0 MOV DMA,R1 BIC #177700,R1 ADD R1,R0 MOV R0,(R5) ; LOAD DAR MOV BUF,-(R5) ; LOAD CMA MOV WRDCT,-(R5) ; LOAD WC NEG (R5) BCC MURE2 ;BR IF BIT 0 WAS CLEAR MOVB R2,DEVNUM(R0) ;SET DEVICE 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)+,DE .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 FILE COMMAND BR MSKFI4 MSKFI3: $MXOBJ*7/2 (5 WO-DS PE- SY4B6L#D $MXOBJ = 50. ; MAX NO. OF OBJECT MODULES TO BE ******** ; ; LINKED INTO ANY GIVEN LOAD ; ; MODULE. .ENDC ; MATCHES .IFNZ NDISCS .PAGE ; ; TTYIO SYSGEN PARAMETERS ; NTTYS = 1 ; JUST 1 TTY IN SYSTEM ******** ;IN SYSTEM SYSTTY = 0 MOV 6(6),%1 MOV -(1),WORK BIC #177600,WORK ;MASK FUNCTION BITS MOV WORK,-(5) ;LOAD FUNCTION REG. MOV (SP)+,R0 MOV (SP)+,R1 MOV (SP)+,R5 RTI ;RETURN FROM TRAP ; ; ; ; ; ; ; ;RF11 DISK INTERRUPT HANDLER ;ROUTINE CONTINUES ON ERRORS ; DKINT: BIC #BIT4,@CSR ;CLEAR TRACE BIT TST @DCS ;TEST FOR ERROR BPL INTEXT ;BRANCH IF NO ERROR BIS #BIT9,FLAG ;SET ERROR BIT MOV @DAE,WORK ;REPORT ERROR BIC #177700,WORK ;MASK ADDRVNUM(R0) ;RESTOR RTS PC ;RETURN ; MUREWI: MOV DEVNUM(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 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) INC COUNT(R0) BR ;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 ;FOR MESSAGE BUFFERING DBUFSZ = 1 ;NO. OF 64 WORD DISC SECTOESS EXT. BITS. JSR %5,CONV ;CONVERT TO ASCII WORK MES1A 2 EMT+1 HED2 MOV @DCS,WORK ;TEST FOR READ BIC #177770,WORK CMP #4,WORK BNE DELMES ;IF READING REPORT WHICH READ MOV FLAG,WORK BIC #177774,WORK JSR %5,CONV WORK MES13 1 EMT+1 MES13 DELMES: MOV @DAR,WORK ;SET UP LOWER 16 BITS OF ADDR. DEC WORK JSR %5,CONV ;CONVERT TO ASCII WORK MES1 6 EMT+0 MES1A MES1 -1 MOV @DCS,WORK ;SET UP STATUS JSR %5,CONV WORK MES2 6 EMT+1 MES2 BIT #BIT1 MURE4 ;BR IF DONE INC R2 ;INC IF NOT DONE MURE4: 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 MSKFI2 .PAGE .IFNZ MULRE ; MAGNETIC TAPE MULTIPLE DRIVE REWIND MUREW: .IFNZ DATUM MOVB #1,DRNEW .ENDC 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 LIRS 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. ; 250MS (1/4 SEC.) COUNT FOR TTY ******** ;OUTPUT TIMERS TTITIM = 15. ;SECOND COUNT FOR TTY INPUT/OPERATOR ;RESPONSE TIMERS TTWTIM4,@DCS ;TEST FOR HARD ERROR BEQ SOFTER ;GO AND CONTINUE SOFT ERROR MOV @DAE,WORK ;FETCH ERROR EXT. BITS SWAB WORK BIC #177400,WORK JSR %5,CONV ;CONVERT TO ASCII WORK MES2A 3 EMT+0 HED5A MES2A -1 BIS #BIT8,@DCS ;CLEAR THE DISK MOV #1000,%6 BIT #BIT10,@SR ;HALT ON ERROR BEQ .+4 HALT ;YES HALT BIT 10 SET IN SR JMP @HRDER ;EXIT HARD ERROR SOFTER: TST @WC ;CHECK FOR X-FER DONE BEQ INTEXT ;EXIT FROM ROUTINE BIT #BIT9,@SR BEQ .+6 SUB #2,(6) ;X-FER NOT DONE SIF NO ERROR ; R4 = 1 AND (N) BIT CLEAR IF TIME OUT ERROR MTINIT: MOV #CLEA,@#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 ST 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 DEVNUM(R0),R1  = 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 = 0 ;EOM PRINT OPTION WHERE ET UP FOR RETURN BIT #BIT10,@SR ;HALT ON ERROR BEQ .+4 HALT ;YES HALT BIT10 SET IN SR BIS #BIT0,@DCS ;SET GO AND CONTINUE RTI ;RETURN TO WAIT INSTR. ; ; INTEXT: BIT #BIT13,@SR ;HALT ON COMPLETION FLAG BEQ .+4 HALT ;YES BIT 13 SET IN SR HALT BIT #BIT9,@SR BNE .+6 MOV #774,%6 ;RESET STACK RTI ;EXIT ; ; ;ROUTINE TO SET UP DAR AND DAE ;FROM SR AND CONVERSATION ;ENTER FROM JSR %5,OPDSEL OPDSEL: BIT #BIT7,@SR ;DOES SR CONTAIN TRACK # BNE .+4 RTS %5 MOV @S CMP FUNCT(R0),#1 ;OPEN COMMAND BEQ MTIN3 MOVB @#MTSTAT,R1 ;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 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: ADD #MTUIC,R3  ; 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 ;TYPED IN A LINE .PAGE ;* ;* G E N E R A R,R0 ; FETCH SW BIC #177600,R0 MOV R0,TRACK MOV #0,DMA ; USE MOV RATHER THAN CLR FOR PATCHING RTS %5 ;EXIT ; ;ROUTINE TO SETUP DISK BUFFERS ;ADD WORD COUNT TO STARTING DISK ADDRESSES ;COMPARE CALCULATED ADDRESS TO TERMINATING ADDRESS ; DISBUF: MOV WRDCT,R1 ASH #-6,R1 ; CONVERT TO SECTION ADD DMA,R1 MOV TRACK,R2 ASH #6,R2 ADD R1,R2 COMDAR: CMP R2,@DAR (R0),@MTMEMO .IFF MOV DTPAR(R0),@#772354 MOV DTVIRT(R0),-(SP) JSR PC,SVPPA ; 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 &  ; 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 ; (N) BIT SET IF NO ERRORS, (N) BIT CLEARED IF AN ERROR MTINIT: MOV #7000,MTDEL CMPB NMNEW,NMOLD L S Y S T E M E Q U A T E S ;* $1145 = 0 ;1 = 11/45 0 = 11/20 HICORE = 24576.+24576. ; TOP OF CORE IN SYSTEM ******** $RASM = 1 ;1 = ASSEMBLER IS INCLUDED, AND THEREFORE ;CREAD MUST INSERT , AFTER ;ASSEMBLER READ REQUESTS .PAGE ;********************************************************************** ;*  BEQ CMDAE BIS #BIT6,FLAG ; CMDAE: ADD DMA,R1 1$: BIT #177700,R1 BEQ 2$ SUB #100,R1 INC TRACK BIC #177700,R1 2$: MOV R1,DMA BIT #BIT6,FLAG ;REPORT ADDRESS ERROR BNE .+4 EXTDR: RTS %7 ;EXIT ERADR: JSR %5,CONV ;CONVERT DMA REG COUNT TO ASCII DMA MES1 6 JSR %5,CONV ;CONVERT TRACK REG COUNT TO ASCII WORK1 MES1A 2 EMT +0 ;REPORT ERROR HED4 MES1A MES1 -1 BIC #BIT6,FLAG CLR DMA ;DISK ADDRESS E 17 .ENDC ; DATUM MOV DATA(R0),R4 ; GET BITS 0 & 1 BIC #177774,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 NEG R5  BNE MTIN6 CMPB DRNEW,DROLD BNE MTIN6 MTINA: MOVB DEVNUM(R0),R3 ; OBTAIN DEVICE NUMBER MOVB R3,NMNEW 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 MOV #7000,MTDEL CLR R4 CMP FUNC ** ;* 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 ** ;* ** ;********************************************************************** NCR = 0 RROR RE-START PROG. CLR TRACK BIT #BIT10,@SR ;HALT ON ERROR BEQ .+4 HALT ;SWITCH 10 SET IN SR HALT RTS %7 ; ; ; ;ROUTINE TO SELECT DATA PATTERNS FOR TEST ; ;ENTER FROM JSR %5 PASEL ; PASEL: MOV PATNU,%0 ;SET UP PATTERN NUMBER MOV WRDCT,WORK ;SET UP WORK MOV #OUTBUF,%1 ;LOC. OF OUTBUFFER CMP #42,%0 ;TEST FOR RANDOM DATA NUMBER BEQ RANDOM ;GO GENERATE RANDOM DATA FILDAT: MOV PAT0(0),(1)+ ;FILL BUFFER DEC WORK ;DEC. WORK COUNT BNE FILDAT ;LOAD NEXT WORD RTS %5 ;BUFFER  MOV R5,@#MTBCNT .ENDC RTS PC .PAGE ; DEQUEUE THE REQUEST MTDEQ: 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 T(R0),#1 ;OPEN COMMAND BEQ MTIN3 .IFZ DATUM BIT #200,R1 ;TEST READY BIT BEQ MTIN2 ; BR IF NOT READY .IFF CMPB NMNEW,NMOLD BNE MTIN4 CMPB DRNEW,DROLD BNE MTIN4 MTIN1: BIT #200,@#MTCOMM ; TEST CUR BIT BNE MTIN3 ; BR IF CUR BIT IS SET DEC MTDEL ; DECREMENT DELAY COUNTER BNE MTIN1 BR MTIN ; NO CARD READERS IN CITGO ******** .IFNZ NCR ; ******** 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 FULL ; ;RANDOM DATA ; ; ;RANDOM DATA GENERATOR SUBROUTINE RANDOM: MOV LONUM,%0 ;SET UP R0 WITH 5 DIGITS LOW MOV HINUM,%4 ;SET UP R1 WITH 5 DIGITS HIGH MOV #7,%3 ;SET UP SHIFT COUNT CLR %2 ;CLEAR R2 SHIFT: ASL %0 ;SHIFT R0 LEFT AND ROL %4 ;ROTATE CARRY INTO LSB OF R1 INTO ROL %2 ;ROTATE CARRY OUT OF R1 INTO R2 DEC %3 ;DECREMENT R3 BNE SHIFT ;CONTINUE SHIFT LOOP ADD LONUM,%0 ;ADDN IN NUMBER TO MAKE X 129 ADC %4 ;PROPOGATE CARRY ADD HINUM,%4 ;ADDN IN NUMBER TO MAKE X 129  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 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 ; 2 . MTIN4: BIT #1,@#MTSTAT ; TEST TUR BIT BNE MTIN3 ; BR IF TUR BIT IS SET DEC MTDEL ; DECREMENT DELAY COUNTER BNE MTIN4 BR MTIN2 MTIN3: SEN MTIN5: RTS PC ;RETURN MTIN7: MOV #CLEA,@#MTCOMM ; ISSUE CLEAR TO CONTROLLER BR MTINA MTIN6: BIT #1,@#MTSTAT ; TEST TUR BIT BNE MTIN7 DEC MTDEL BNE MTIN6 MTIN2:  ; (029 CARD CODE) $RES = 1 ; 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 THEADC %2 ;PROPOGATE CARRY ADD #1057,%0 ;ADDN LOW CONSTANT ADC %4 ;PROPOGATE CARRIES ADC %2 ;PROPOGATE AGAN ADD #47401,%4 ;ADDN HIGH CONSTANT ADC %2 ;PROPOGATE CARRY ADD #6,%2 ;ADDN HIGHEST CONSTANT ADD %2,%0 ;REPRIME R0 WITH HIGH DIGIT ADC %4 ;PROPOGATE CARRY MOV %0,LONUM ;PUT R0 BACK IN LONUM MOV %0,(1)+ ;HOLD LONUM FOR PROGRAM DEC WORK BEQ EXGEN MOV %4,HINUM ;PUT R1 BACK IN HINUM MOV %4,(1)+ ;HOLD HINUM FOR PROGRAM DEC WORK BNE RANDOM EXGEN: RTS %5 ;RETURN T PR CAN BE RELEASED MTDEQ1: RTS PC .END  MOV #11,R4 BR MTIN5 MTDEL: .WORD 7000 ; .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,SVPPA ; TO PPA MOV (SP)+,R5 ; LOAD PPA CLR R4 ; PLACE BITS ASHC #2,R4 ; 16 & 17 IN R4 .IFZ DA ; TIMES STATES. ; ; ; C / 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 = 777162OGRAM LONUM: 0 HINUM: 0 ; ; .EVEN ; ;RF11 DATA PATTERNS ; PAT0: 0 PAT1: 177777 PAT2: 134510 PAT3: 043267 PAT4: 100000 PAT5: 107070 PAT6: 070707 PAT7: 052525 PAT10: 125252 PAT11: 177737 PAT12: 004102 PAT13: 136363 PAT14: 063636 PAT15: 000001 PAT16: 100005 PAT17: 000520 PAT20: 030303 ;PAT21 RANDOM DATA ; ; ; ;DATA COMPARISON ROUTINE ;IF AN ERROR OCCURS BETWEEN THE OUT-BUFFER AND ;THE IN-BUFFER AN ERROR WILL BE REPORTED IN THE ;FOLLOWING MANNER ;DATA ERROR XX DAE XXXXXX ;SET I/O COMPLETE TST @#MTSTAT ;CHECK FOR FILE MARK BMI MSPRC5 JSR PC,MTINIT ;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) DETUM 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 #177774,R4 BIS R4,R5 MOV R5,@#MTMEMO ; SET BITS 0 THRU 15 .ENDC ; KT11C MOV NWORD(R0),R5 ;GET WORD COUNT  ;CARD READER BINARY DATA BUFFER CRB2.1 = 777164 ;CARD READER COMPRESSED DATA ADDRESS ; CRS.2 = 777160 ;CARD READER STATUS - C/O # 2 CRB1.2 = 777162 ;CARD READER BINARY DATA CRB2.2 = 777164 ;CARD READER COMPRESSED DATA ; CRS.3 = 0 ;CAR READER STATUS - C/R # 3 CRB1.3 = 0 ;CARD READER BINARY DATA BUFFER CRB2.3 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CR! DAR XXXXXX GOOD DATA XXXXXX BAD DATA ; ; COMPARE:CLR WORK2 ;WORD COUNT MOV #OUTBUF,SAVE ;SET UP OUTBUFFER POINTER MOV #INBUF,SAV1 ;SET UP IN BUFFER POINTER WRDCMP: CMP @SAVE,@SAV1 ;COMPARE BUFFERS BNE WDERR ;WORD IN ERROR WRDINC: INC WORK2 ;+1 WORD COUNT CMP WRDCT,WORK2 ;IS COMPLETE BUFFER CHECKED BEQ ADAM ;EXIT ROUTINE ADD #2,SAVE ADD #2,SAV1 BR WRDCMP ;COMPARE NEXT WORD ADAM: RTS %5 ;EXIT THIS ROUTINE ; WDERR: BIS #BIT9,FLAG ;SET ERROR BIT MOV DMA,WORK ;FETCH STARTING "C NWORD(R0) BIS #BCKR,R3 MSPRC4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;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 CLRB DRNEW TST COUNT(R0) BGE MSPRA # MOV R5,COUNT(R0) .IFZ DATUM MOV R5,@#MTWORD .IFF MOV NWORD(R0),R5 ; GET WORD COUNT ASL R5 ; BYTE COUNT NEG R5 MOV R5,@#MTBCNT .ENDC RTS PC .PAGE ; DEQUEUE THE REQUEST MTDEQ: MOV R4,ERROR(R0) DEC NMTREQ MOV @#MTSTAT,STATUS(R0) MOV @#PS,-(SP) ;SAVE CURRENT CPU STATUS REGISTER SPL 7 $S.4 = 0 ;CARD READER STATUS - C/R # 4 CRB1.4 = 0 ;CARD READER BINARY DATA BUFFER CRB2.4 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRVC.1 = 230 ; C/R # 1 INTERRUPT VECTOR CRVC.2 = 230 ;C/R # 2 INTERRUPT VECTOR CRVC.3 = 0 ;C/R # 3 INTERRUPT VECTOR CRVC.4 = 0 ;C/R # 4 INTERRUPT VECTOR .ENDC ; %DISK ADDR MOV TRACK,WORK1 ; ADD WORK2,WORK ;CALCULATE FAILING ADDR 1$: BIT #177700,WORK BEQ 2$ INC WORK1 SUB #100,WORK BR 1$ 2$: MOV FLAG,WORK3 BIC #177743,WORK3 ASH #10,WORK3 BIS WORK3,WORK1 JSR %5,CONV ;CONVERT WORD ADDR TO ASCII WORK MES1 6 JSR %5,CONV ;CONVERT TRACK ADDR TO ASCII WORK1 MES1A 2 MOV @SAVE,WORK ;FETCH GOOD DATA JSR %5,CONV ;CONVERT GOOD DATA TO ASCII WORK MES5 6 MOV @SAV1,WORK ;FE& INCB DRNEW ; SET BACKWARDS FLAG MSPRA: 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: 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' ;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 NUMBER OF REQUESTOR BEQ MTDEQ1 ;BRANCH IF NOT A TAS( ******** .PAGE ;********************************************************************** ;* ** ;* L I N E P R I N T E R E Q U A T E C A R D S ** ;* ** ;********************************************************************** NLP = 0 ; NO LINE PRINTERS IN CITGO ******** .IFNZ NLP )TCH BAD DATA JSR %5,CONV ;CONVERT TO ASCII WORK MES6 6 MOV FLAG,WORK ;WHICH READ THE BIC #177774,WORK ;ERROR OCCURRED ON JSR %5,CONV WORK MES13 1 EMT +0 ;PRINT MESSAGE HED1 MES13 MES1A MES1 MES5 MES6 -1 BIT #BIT10,@SR ;HALT ON ERROR BEQ .+4 HALT ;YES HALT BIT 10 SET IN SR BR WRDINC ;GO COMPARE NEXT WORD ; ; ; ; ; ; ;ROUTINE TO ZERO DATA INPUT BUFFER ;ZERO BUFFER BEFORE READING ; ZOBUF: MOV #OUTBUF,R4 ; ZERO OUTPUT BUFFER BR * ; INTERRUPT ROUTINE 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: .IFNZ DATUM CLRB DRNEW TST COUNT(R0) BGE MSKRA INCB DRNEW ; SET BACKWARDS FLAG MSKRA: .ENDC CLR R5 ;SET I/O COMK 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 , ; ******** NLPRTY = 3 ;NUMBER OF L/P PRIORITY LEVELS LPBACK = 1 ;1 = BACKUP L/P WITH TTY BY OPER COMMAND LPVC.1 = 200 ;L/P # 1 INTERRUPT VECTOR ADDRESS LPVC.2 = 200 ;L/P # 2 INTERRUPT VECTOR ADDRESS LPVC.3 = 000 ;L/P # 3 INTERRUPT VECTOR ADDRESS LPVC.4 = 000 ;L/P # 4 INTERRUPT VECTOR ADDRESS LPDT.1 = 765010 ;L/P # 1 DATA - ZBUFE ; ZBUF: MOV #INBUF,%4 ;FETCH START OF INBUFFER ZBUFE: MOV #4000,R0 1$: CLR (R4)+ SOB R0,1$ RTS %5 ;EXIT ROUTINE ; ; ; ; ;ROUTINE TO TEST FOR ADDITIONAL DATA TRANSFERS ;ANY DATA TRANSFERRED AFTER WORD COUNT OVERFLOW IS AN ERROR ; ; OVRFLO: MOV WRDCT,%4 ;ADD WORD COUNT ROL %4 ADD #INBUF,%4 CHWRD: CMP R4,#INBUF+10000 ; IS TEST COMPLETE BNE CKNEX ;CHECK NEXT WORD RTS %5 ;TEST IS COMPLETE CKNEX: TST (4)+ ;TEST FOR ZERO WORD BEQ CH.PLETE 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 FILE /; TSKNTR.S07 ; TSKNTR.SO6 18-JUL-73 ; TSKNTR.S05 16-JUL-73 ; TSKNTR.S04 13-JUL-73 ; TSKNTR.S03 12-JUL-73 ; TSKNTR.S02 10-JUL-73 ;************************************************************************ ;* * ;* T A S K E N T E R * ;* * ;* TASK E0BUFFER I/O ADDRESS LPDT.2 = 765010 ;L/P # 2 DATA BUFFER I/O ADDRESS LPDT.3 = 0 ;L/P # 3 DATA BUFFER I/O ADDRESS LPDT.4 = 0 ;L/P # 4 DATA BUFFER I/O ADDRESS LFRG.1 = 765012 ;L/P # 1 LINE FEED REGISTER LFRG.2 = 765012 ;L/P # 2 LINE FEED REGISTER LFRG.3 = 0 ;L/P # 3 LINE FEED REGISTER LFRG.4 = 0 ;L/P # 4 LINE FEED REGISTER CNT.1 = 765014 ;L/P # 1 WOR1WRD ;WORD IS ZERO BIS #BIT9,FLAG ;SET ERROR BIT MOV %4,ACNVX SUB #2,ACNVX JSR %5,CONV ;CONVERT 1 OCTAL TO ASCII ACNVX ;ADDRESS MES4 6 MOV %4,ACNVX SUB #2,ACNVX MOV @ACNVX,ACNVX JSR %5,CONV ;CONVERT OCTAL TO ASCII ACNVX ;DATA MES6 6 EMT +0 ;CALL TYPE OUT ROUTINE HED3 MES4 MES6 -1 BR CHWRD ;FETCH NEXT WORD ; ; ;EXTENDED MEMORY EXERCISER ;THE PROGRAM DETERMINES HOW MUCH MEMORY ;IS ON THE SYSTEM THEN IT ;GENERATES A RANDOM BUFFER THAT SIZE ;AND WRITES2COMMAND 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) 3NTER WILL INSERT THE FOLLOWING ITEMS IN THE HEADER OF A * ;* LOAD MODULE * ;* 1 TASK NUMBER * ;* 2 PRIORITY * ;* 3 TASK ACCESS STATUS * ;* IN ADDITION TO THE ABOVE, THE FOLLOWING OPTIONAL ENTRIES MAY * ;* BE SET 4D COUNT REGISTER CNT.2 = 765014 ;L/P # 2 WORD COUNT REGISTER CNT.3 = 0 ;L/P # 3 WORD COUNT REGISTER CNT.4 = 0 ;L/P # 4 WORD COUNT REGISTER CMD.1 = 765016 ;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 5 AND WRITE CHECKS THE DATA ; EXTMEN: BIS #BIT8,@DCS ;CLEAR THE DISK MOV #340,@CSR ;LOCK UP PRIORITY LEVELS MOV #1000,%6 MOV #MAXREF,4 ;SET UP I/O BUS TRAP MOV #340,6 MOV #17446,SAVE ;SET UP FOR 4K EXREF: TST @SAVE ;REFERENCE MEMORY CMP #177446,SAVE ;TEST FOR GREATER THAN 28K BNE .+6 ;BRANCH IF LESS THAN 32K HALT BR MAXREF ;LAST REFERENCE MADE TO I/O REG. ADD #20000,SAVE ;SET UP FOR NEXT MEMORY REF. BR EXREF ;GO REFERENCE MEMORY ; ;ENTER HERE WHEN I/O BUS ERROR OCCURS ; MAX6 INC COUNT(R0) BR MSKFI2 .PAGE .IFNZ MULRE ; MAGNETIC TAPE MULTIPLE DRIVE REWIND MUREW: .IFNZ DATUM MOVB #1,DRNEW .ENDC 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 MOVB7 * ;* 1 MAXIMUM TASK RUN TIME * ;* 2 TPDR7 & TPAR7 SET TO THE DEVICE PAGE * ;* * ;* AN EXAMPLE OF AN INPUT CARD IS * ;* ACC=BCH; DEV; NAM=LDFILE; PRI=2; TIM=180; TSK=12;END; * ;* THE 'END;' COMMAND MUST BE THE LAST COMMAND * ;* THE OTHER COMMANDS MAY BE IN ANY ORDER8= 765016 ;L/P # 2 STATUS REGISTER STAT.3 = 0 ;L/P # 3 STATUS REGISTER STAT.4 = 0 ;L/P # 4 STATUS REGISTER ; ; 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. 9REF: MOV #6,4 ;RESTORE I/O BUS TRAP CLR 6 MOV #1000,%6 SUB #20000,SAVE ; SUB #OUTBUF,SAVE ;SET UP NEW WORD COUNT MOV SAVE,SWRDCT ROR SWRDCT MOV SWRDCT,WRDCT MOV #BIT7,@CSR ;SET UP PRIORITY LEVEL MOV #NEWBUF,HRDER ;SET UP FOR HARD ERROR CLR DMA CLR TRACK NEWBUF: MOV WRDCT,WORK ;SET UP FOR RANDOM BUFFER MOV #OUTBUF,%1 JSR %5,RANDOM ;NEW DATA BUFFER GENERATED MOV #OUTBUF,BUF WRITE+100 ;WRITE BUFFER BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT WRCHECK: R2,DEVNUM(R0) ;SET DEVICE 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 ; MU; AND ON MORE THAN ONE CARD* ;************************************************************************ ; THE SWITCH REGISTER MUST BE SET AS FOLLOWS ; BATCH TASK = 0 ; BACKGROUND TASK = 1 ; FOREGROUND OR SYSTEM = 2 ; THE ABOVE ARE ONLY TEMPORARY UNTIL KEY SWITCHES ARE INSTALLED ; ; ; ROSLNK ERROR CODES SET IN R3 BEFORE GOING TO RLKER ; ; CODE DEFINITION PRINTS ON TTY ; 60 SUCCESSFUL 0 ; $LPERR = 10. .ENDC ; ******** $RES = 1 ; TIMER RES. FOR CREAD (1/60 SEC.) ******** $100MS = 6. ; MULTIPLER TO GET 100MS OFF $RES ******** $500MS = 30. ; MULTIPLER TO GET 1/2 SEC. OFF $RES. ******** $1SEC = 60. ; MULTIPLER TO GET 1 SEC. OFF $RES. ******** =+100 ;WRITE CHECK DATA BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT JSR %7,DISBUF ;SET UP NEW DISK BUFFER BR NEWBUF ;GO WRITE NEW BUFFER BR NEWBUF-10 ;DISK COMPLETE START AGAIN ; ;BACKGROUND TEST FOR INTERRUPTS ; XWAIT: MOV #RTIX,14 ;SET UP TRACE TRAP CLR 16 MOV #-1000,PASS ;SET UP TIME BASE BIS #BIT4,@CSR ;SET TRACE BIT CLR #0 XINCW: INC XINCW-2 TSTB XINCW-2 BPL XINCW INC PASS BEQ .+4 BR XINCW-4 ;REPORT BACKGROUND TEST TIMED OUT MOV #340,@CSR >REWI: MOV DEVNUM(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 ? 61 BAD COMMAND 1 ; 62 BAD ACCESS CODE 2 ; 63 NO END COMMAND 3 ; 64 BAD NAME 4 ; 65 PROIRITY ERROR 5 ; 66 BAD TIME LIMIT 6 ; 67 BAD TASK NUMBER 7 ; 70 IMPROPER KEY SETTING 8 ; 71 MISSING DELIMITER 9 ; 101 DISCIO ERROR A ; 102 DEVICE PAGE UNAVAILABLE B ; 103 PROGRAM SIZE TOO@; DDCGTP.S03 AUG-28-73 ; DDCGTP.S02 ; DDCGTP.SO1 AUG-24-73 ; DDCGTP.S00 AUG-21-73 .TITLE DDCGTP ( D D C GENERAL TEST PROGRAM ) .ENABLE ABS BIT0=1 BIT1=2 BIT2=4 BIT3=10 BIT4=20 BIT5=40 BIT6=100 BIT7=200 BIT8=400 BIT9=1000 BIT10=2000 BIT11=4000 BIT12=10000 BIT13=20000 BIT14=40000 BIT15=100000 R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 NO = 67 ; WRITE=TRAP+3 WRCHECK=TRAP+7 READ=TRA BIC #BIT4,@CSR ;CLEAR TRACE BIT EMT+1 TIMO HALT ; RTIX: RTI ;RF11 POWER FAIL TEST "1 ; DISK ZERO ; WRITE COMPLETE DISK WITH 125252 PATTERN ; REPORT "OK" ;START WRITING THE SAME PATTERN ;WHEN POWER FAIL OCCURS ABORT TRANSFER ;SETUP NEW ENTRY POINT AND HALT ; ;POWER UP AND WRITE CHECK THE DISK FOR ERRORS ; ;***ONLY ONE ERROR IS CONSIDERED ACCEPTABLE*** ; ; PFT1: MOV #1000,%6 ;SET UP STACK JSR %7,POWFAL ;WRITE 125252 ON DISK PFWAT: BIS #BIT8,@DCS ;CLEAR DISK CLR DMA CLR TRACKB;INC IF NOT DONE MURE4: 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 ; (N) BIT SET IF NO ERRORS, (N) BIT CLEARED IF AN ERROR MTINIT: MOV #7000,C LARGE C ; 104 ILLEGAL FILE I.D. D ; 105 FILE ERROR E ; .PAGE ; ROS3 INPUT / OUTPUT CONTROL BLOCK MACRO .MACRO IOCBM DEV,EXTY,EXIT,ETSK,LEV,DATB .WORD 1 .BYTE DEV ;LOGICAL DEVICE NUMBER .BYTE EXTY ;EXIT TYPE .WORD EXIT ;I/O COMPLET .BYTE ETSK ;ERROR TASK .BYTE LEV ;PRIORITY LEVEL .WORD 0,0 DAP+5 ; ; ;DDC DATA TEST PROGRAM ;VECTORS USED IN PROGRAM ;#1 LOC 130,134,140,144,150,154,160,164 DISK INTERRUPT ;#2 LOC 30 EMT (TELETYPE OUTPUT) ;#3 LOC 34 TRAP (DISK HANDLERS) ;#4 LOC 14 TRACE TRAP (USED IN BACKGROUND TEST) ;#5 LOC 20 IOT TRAP (USED IN CALLING BACKGROUND TEST) ; ;I/O ADDRESS POINTERS SR: 177570 ;SWITCH REGIISTER CSR: 177776 ;PROCESSOR STATUS REGISTER TPB: 177566 ;TELETYPE REGISTERS TKB: 177562 TPS: 177564 TKS: 177560 ; ;DISK I/O REGISTERS ; DCS: 177460 ;DE MOV #PFWAT,HRDER ;SET UP FOR HARD ERROR MOV #DOWN,24 ;SET UP POWER FAIL VEC. MOV #340,26 MYBYWR: WRITE +100 BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT JSR %7,DISBUF ;SET UP NEW DISK BUFFER BR MYBYWR BR PFWAT ;ROUTINE TO CHECK DATA AFTER POWER FAIL ; UPCHK: BIS #BIT8,@DCS ;CLEAR THE DISK CLR DMA CLR TRACK MOV #UPCHK,HRDER ;SET UP FOR HARD ERROR CHKDAT: WRCHECK +100 BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT JSR %7,DISBUF ;SET UP FMTDEL MOVB DEVNUM(R0),R3 ; OBTAIN DEVICE NUMBER MOVB R3,NMNEW ; SET CURRENT DEVICE NUMBER CMPB NMNEW,NMOLD BNE MTIN6 CMPB DRNEW,DROLD BNE MTIN6 MTINA: 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) ;CLEARG ;ERROR PARA / SYSTEM .WORD DATB ;DATA BUFFER ADDRESS .ENDM ; $ROSM = 0 ; *********************************** ; ROS 3 TASK HEADER EQUATES THRD = 0 ; THREAD WORD TASK = 2 ; TASK NUMBER TACC = 4 ; TASK ACCESS STATUS PRIR = 5 ; PRIORITY ENTY = 6 ; ENTRY POINT MTIM = 10 ; MAXIMUM RUN TIME CTIM = 12 ; CURRENT TIME STSZ = 14HISK CONTROL REGISTER WC: 177462 ;WORD COUNT REGISTER CMA: 177464 ;CURRENT ADDRESS REGISTER DAR: 177466 ;LOWER 16 BITS OF DISK ADDRESS DAE: 177470 ;EXTENSION ADDRESS REGISTER DBR: 177472 ;DATA BUFFER REGISTER MA: 177474 ;MAINTENANCE REGISTER ADS: 177476 ;LOOK AHEAD REGISTER VECTOR: 204 ;INTERRUPT VECTOR ADDRESS STATUS: 206 ;DISK INTERRUPT STATUS PRIORITY:BIT7 ;DISK PRIORITY LEVEL ; ; ; ; ; ; ;RF11 DEDICATE REGISTERS (MEMORY) ; FLAG: 0 ;INTERNAL PROGRAM FLAG RANNUINEW DISK BUFFER BR CHKDAT JMP PFWAT ;GO WAIT FOR ANOTHER ;POWER FAIL ; ;POWER DOWN ROUTINE ;ABORT DISK AND HALT ; ; DOWN: BIS #BIT8,@DCS ;ABORT DISK MOV #UP,24 ;SET POWER FAIL VECTOR HALT ; UP: MOV #DOWN,24 MOV #1000,%6 MOV #-300.,WORK ;SET UP TWENTY SECOND TIMER TIMCNT: RESET INC WORK ;+1 TIMER BNE TIMCNT ;TWO SECONDS NOT UP GO WAIT JMP UPCHK ;GO CHECK DISK ; ; ; ; ; ; ;POWER FAIL TEST #2 ;DISK ZERO ;WRITE COMPLETE DISK WITH 125252 PATTERN ;REPORT "OK" J BACK SPACE FLAG MOV #7000,MTDEL CLR R4 CMP FUNCT(R0),#1 ;OPEN COMMAND BEQ MTIN3 .IFZ DATUM BIT #200,R1 ;TEST READY BIT BEQ MTIN2 ; BR IF NOT READY .IFF CMPB NMNEW,NMOLD BNE MTIN4 CMPB DRNEW,DROLD BNE MTIN4 MTIN1: BIT #200,@#MTCOMM ; TEST CUR BIT BNE MTIN3 ; BR IF CUR BIT IS SET DEC K ; STACK SIZE STAT = 16 ; CPU STATUS STPT = 20 ; STACK POINTER ARGU = 22 ; ARGUEMENT TPDR = 24 ; PAGE DESCRIPTOR REGISTER TPAR = 44 ; PAGE ADDRESS REGISTER PRGH = 64 ; PROGRAM HI ; ; ROS 3 I/O CONTROL BLOCK EQUATES THRD = 0 ; THREAD WORD DEVN = 2 ; DEVICE NUMBER ETYP = 3 ; EXIT TYPE EXIT = 4 ; EXIT ADDRESS LEVL = 7 ; L: 146723 ;RANDOM NUMBER PRIME WRDCT: 0 ;WORKING WORD COUNT TRACK: 0 ;WORKING DAE DMA: 0 ;WORKING DAR PATNU: 0 ;DATA PATTERN INDEX BUF: 0 ;WORKING DATA BUFFER (OUT-IN) TWRDCT: 0 ;TEMP WORD COUNT TDMA: 0 ;TEMP DAR SWRDCT: 0 ;STANDARD WORD COUNT ERCOUNT:0 ;ERROR COUNT FOR MESSAGES. SAVE: 0 SAV1: 0 PASS: 0 DSKNOR: 0 ;NUMBER OF DISKS ON THE SYSTEM HRDER: 0 ;POINTER FOR HARD ERROR PASSC: 0 ; ;RF11 WORK REGISTERS ;(CAN BE CHANGED IN ANY ROUTINE) WOM;WRITE CHECK DISK AND WAIT FOR POWER FAIL ;WHEN POWER COMES BACK WRITE CHECK DISK AGAIN ;AND CHECK FOR ERRORS ;***NO ERRORS SHOULD OCCUR.*** ; ;DO NOT CREATE ANOTHER POWER FAIL UNTIL ;THE ADDRESS REGISTER HAS COMPLETELY CYCLED ;THROUGH. ; PFT2: MOV #1000,%6 ;SET UP STACK JSR %7,POWFAL ;WRITE 125252 ON DISK PWRFL: CLR DMA CLR TRACK MOV #PWRFL,HRDER ;SET UP HARD ERROR MOV #PWRDN,24 ;SET UP POWER FAIL VEC. MOV #340,26 CHKDSK: WRCHECK +100 BIT #BIT9,@SR BNE .+6 IOT ;WAIT IN BACKGRNMTDEL ; DECREMENT DELAY COUNTER BNE MTIN1 BR MTIN2 . MTIN4: BIT #1,@#MTSTAT ; TEST TUR BIT BNE MTIN3 ; BR IF TUR BIT IS SET DEC MTDEL ; DECREMENT DELAY COUNTER BNE MTIN4 BR MTIN2 .ENDC MTIN3: SEN RTS PC ;RETURN MTIN7: MOV #CLEA,@#MTCOMM ; ISSUE CLEAR TO CONTROLLER BR MTINA MTIN6: BIT #1,@#MTSTAT ; OPRIORITY LEVEL EROR = 10 ; ERROR CODE DATA = 14 ; DATA BUFFER ; ; ASCII CHARACTER CODES EQSN =075 ; EQUAL SIGN SCOL =073 ; SEMI-COLON COMA =054 ; COMMA RPAR =051 ; RIGHT PARENTHESIS SPAC =040 ; SPACE LPAR =050 ; LEFT PARENTHESIS DOLR = 44 ; DOLLAR SIGN CODE SWR = 177570 ; SWITCH REGISTER TIMLM = 2000 ; TIME LIMIT IN SECONDS ; ; ROS EMTPRK: 0 WORK1: 0 WORK2: 0 WORK3: 0 WORK4: 0 WORK5: 0 BEGIN: RESET CLR R0 ; CLEAR INTERRUPT VECTORS MOV #2,R1 MOV #4,R2 1$: MOV R1,(R0) ; SET INTERRUPT VECTOR TO .+2 CLR R1 ; SET UP HALT ADD R2,R0 ADD R2,R1 CMP #200,R0 ; DONE BNE 1$ ; NO ; BACKGROUND TEST VECTOR MOV #XWAIT,@#20 QOUND BR .+12 MOV PRIORITY,@CSR WAIT JSR %7,DISBUF ;CHECK NEXT BUFFER BR CHKDSK BR PWRFL ; ;ROUTINE TO ABORT DISK DURING POWER FAIL ; PWRDN: BIS #BIT8,@DCS ;CLEAR THE DISK MOV #PWRUP,24 ;SET UP RESTART HALT ; PWRUP: MOV #PWRDN,24 ;RESET POWER FAIL VECTOR MOV #1000,%6 MOV #-300.,WORK ;SET UP TWENTY SECOND TIMER XTIMCNT: RESET INC WORK ;+1 TIMER BNE XTIMCNT ;TWO SECONDS NOT UP GO WAIT BR PWRFL ;GO CHECK DISK ; ; ; ; ; ;ROUTINE TO WRITE THE COMPLETE DISK ;WITH 12RTEST TUR BIT BNE MTIN7 DEC MTDEL BNE MTIN6 MTIN2: MOV #11,R4 RTS PC MTDEL: .WORD 7000 ; .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,SVPPA ; TO PPA MOV (SP)+,R5 ; LOAD PPA CLR R4 S NUMBERS TSKDEF = 10 ; DEFAULT OR BATCH TASK NUMBER ; FOLLOWING ARE EMT INDICES FOR THE "BFUP" ROUTINES BFINIT = 36 BFENTR = 37 BFOPEN = 40 BFCLOS = 41 ; FOLLOWING ARE MISCELLANEOUS DEFINITIONS EXIT = 4 ;EMT FOR CALL TO MONITOR EXIT TTYOUT = 13 ;EMT FOR CALL TO TELETYPE OUTPUT TTYIN = 14 ;EMT FOR TELETYPE INPUT BINASC = 16 ;EMT FOR BINARY-TO-ASCII ASCBINT CLR @#22 ; SET EMT TRAP VECTOR MOV #EMTRP,@#30 ; TTY VECTOR MOV #340,@#32 MOV #DISK,@#34 ; DISK CALLING VECTOR MOV #340,@#36 ; SET UP INTERRUPT VECTORS FOR D.D.C. DISK MOV #130,R0 MOV #132,R1 2$: MOV #DKINT,(R0) ; INTERRUPT ROUTINE MOV #200,(R1) ; PSR ADD R2,R0 ADD R2,R1 CMP #170,R0 ; DONE BNE 2$ ;U5252 PATTERN ;WRITE CHECK AND REPORT ERRORS IF THEY ;OCCUR ;REPORT "OK" AT COMPLETION POWFAL: BIS #BIT8,@DCS ;CLEAR THE DISK MOV (6),PASSC MOV #1000,%6 MOV #20,PATNU ;SET UP PATTERN CLR DMA CLR TRACK MOV #2000,SWRDCT ;SETUP WORD COUNT MOV SWRDCT,WRDCT JSR %5,PASEL ;GENERATE DATA BUFFER MOV #OUTBUF,BUF ;SET UP CURRENT ADDRESS MOV #POWFAL,HRDER WRDNW: WRITE +100 BIT #BIT9,@SR ;CHECK ON HOW TO WAIT BNE .+6 IOT ;BACKGROUND TEST BR .+12 MOV PRIORITY,@CSR WAIT WRCHECK +V ; 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 #177774,R4 BIS R4,R5 MOV R5,@#MTMEMO ; SET BITS 0 THRU 15 W = 17 DISCIO = 23 ;EMT FOR DISC I/O ROUTINE CREAD = 24 ;EMT FOR CARD READER LPRNTR = 25 ;EMT FOR LINE PRINTER CKPT = 27 NOCKPT = 30 ;EMT FOR NO CHECKPOINT ROUTINE GETIME = 31 ;EMT FOR GET TIME GEDATE = 32 ;EMT FOR GET DATE R50PAK = 46 ;EMT FOR RADIX-50 PACK ROUTINE R50UNP = 47 ;EMT FOR RADIX-50 UNPACK DEFINE = X NO ; SET UP START ADDRESS MOV #167,@#200 ; JMP INSTRUCTION MOV #START,@#202 ; SET UP JUMP INSTRUCTIONS MOV #600,R0 MOV #167,(R0)+ ; JMP MOV #ADT2,(R0)+ ; EXTRANEOUS DATA ALTERATION TEST MOV #167,(R0)+ MOV #ADT3,(R0)+ ; SECTOR ADDRESSING TEST MOV #167,(R0)+ MOV #ADT4,(R0)+ ; TRACK ADDRESSING TEST MOV #167,(R0)+ MOV #ADT5,(R0)+ ;Y100 BIT #BIT9,@SR ; BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT JSR %7,DISBUF ;SET UP NEW DISK BUFFER BR WRDNW ;WRITE NEW BUFFER EMT +1 OK JMP @PASSC ;ROUTINE TO ALLOW THE OPERATOR TO SET BITS ;IN THE I/O REGISTERS VIA THE SWITCH REGISTER ; ;WORD COUNT REGISTER SELWC: MOV @SR,@WC ;MOV SR INTO WORD COUNT REG BR SELWC ; ;CURRENT ADDRESS REGISTER SELCMA: MOV @SR,@CMA ;MOV SR INTO CURRENT ADDR REG BR SELCMA ; ;DISK ADDRESS REGISTER SELDAR: MOV @SR,@DAR ;MOV SR INTO DISZ .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 NEG R5 MOV R5,@#MTBCNT .ENDC RTS PC .PAGE ; DEQUEUE THE REQUEST MTDEQ: MOV R4,ERROR(R0) DEC NMTREQ MOV @#MTSTAT,STATUS(R0) [51 ;EMT FOR "DEFINE FILE" DELETE = 52 ;EMT FOR "DELETE FILE" CORLOD = 56 ;EMT TO GET ADDR OF MONTOR REF TABLE ; TASK HEADER FOR TSKNTR TSKHD: .WORD 1 ; THREAD .WORD 64. ; TASK NUMBER .BYTE 20 ; SYSTEM TASK .BYTE PRIBKG ; PRIORITY .WORD TSKNTR ; ENTRY POINT .WORD 0,0 ; MAX TIME / TIMER .WORD 200 ; \ LOOK AHEAD REGISTER TEST MOV #167,(R0)+ MOV #SPIRAL,(R0)+ ; SEQUENTIAL TRACK ADDRESSING FOR READ MOV #167,(R0)+ MOV #XSPIRL,(R0)+ ; SEQUENTIAL TRACK ADDRESSING FOR WRITE MOV #167,(R0)+ MOV #RANEX,(R0)+ ; DATA PATTERN TEST (WITH OPTIONAL BACKGROUND) CLR R0 ; SET UP JSR PC,SETREG ; REGISTERS HALT START: RESET ;CLEAR THE WORLD MOV #1000,%6 ;SET UP STACK MOV ]K ADDR REG BR SELDAR ; ;DISK ADDRESS EXT AND ERROR REGISTER SELDAE: MOV @SR,@DAE ;MOV SR INTO DISK ADDR EXT REG BR SELDAE ; ;DATA BUFFER REGISTER SELDBR: MOV @SR,@DBR ; MOV SR INTO DATA BUFFER BR SELDBR ; ; ;LOOK AHEAD REGISTER MOVLK: MOV @ADS,%0 ;MOVE LOOK AHEAD RESET RESET BR MOVLK ;INTO REGISTER 0 ; ; ;DISK CONTROL STATUS REGISTER SELDCS: MOV #340,@CSR ;LOCK UP INTERRUPTS MOV #177777,@WC ;SET WORD COUNT -1 WORD MOV #OUTBUF,@CMA ;SET UP CURRENT ADDRESS MOV @SR,@DCS ;MO^ 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 READY MOV (SP)+,@#PS ;UN-INHIBIT THE INTERRUPTS MOV SYSTEM_STACK SIZE .WORD $OVTYP ; CUP STATUS .WORD 0,0 ; STACK POINTER / ARG .BYTE 6 ; SET READ AND WRITE ACCESS .BYTE TSKND-TSKBG/100 ; TPDR 0 .WORD 0,0 ; TPDR 1-2 .WORD 0,0,0 ; TPDR 3-5 .WORD 0,0 ; TPDR 6-7 .WORD TSKBG,0,0 ; TPAR O-2 .WORD 0,0,0 ; TPAR 3-5 .WORD 0,0 ; TPAR 6-7 . = . + 14 .CSECT `#340,@CSR ;LOCK UP INTERRUPT LEVELS CLR FLAG ;CLEAR PROGRAM FLAG CLR TRACK ;CLEAR TRACK REGISTERS CLR DMA ;CLEAR DAR REGISTERS CLR PATNU ;CLEAR PATTER COUNT MOV #1000,SWRDCT ;SET UP STANDARD WORD COUNT MOV SWRDCT,WRDCT TST @SR BMI CONM ;OPERATE UNDER PROGRAM CONTROL BIS #70000,FLAG JMP ADTST ;ENTER OPERATOR CONVERSATION MODE CONM: EMT +1 ;ASK ABOUT DATA TEST ONLY CON1 JSR %7,ALPHA ;GO WAIT FOR ANSWER CMP #153,TEXBUF ;TEST FOR YES BNE 2$ ; BRANCH aV SR INTO CONTROL REG BIT #BIT0,@DCS ;IS FUNCTION BITS SET BEQ SELDCS ;FUNCTION BITS NOT SET DKBUSY: TSTB @DCS ;TEST FOR DISK NOT READY BPL DKBUSY ;DISK STILL READY BR SELDCS ;DISK NOT BUSY SELECT NEW CR ; ; ; ; ; ; ; ; ;THIS ROUTINE ENABLES THE OPERATOR TO SELECT A TRACK STATICLY ;THE ROUTINE DOES A ONE WORD READ TO SELECT THE TRACK ;THE OPERATOR MAY CHANGE THE SWITCH REGISTER AT ANY TIME ;SR6-0 EQUALS THE TRACK NUMBER ;SR9-7 EQUALS THE DISK NUMBER ; STAMP: BIS #BIT8,@DCS (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 cTSKNTC TSKBG: .WORD 0 .BLKW 177 .ASCII / / FWASC: .WORD 0,0,0 ; TEMTORARY ASCII BUFFER .WORD 0 LWASC = . FWRAD: .WORD 0,0,0 ; TEMTORARY RAD50 BUFFER LWRAD = . DACRD: .WORD 80. ; NUMBER OF CHARACTERS TO READ .WORD 0 ; NUMBER ACTUALLY READ FWCRD: .BLKW 40. ; BUFFER LWCRD: .WORD 0 ; LAST WORD OF INPUT TABLE ; TSKNO: .WORD TSKDEF ; TASK NUMBER TSKAC: .BYTE 0 dIF NOT YES BIS #BIT10,FLAG BR 4$ 2$: CMP #67,TEXBUF ; TEST FOR NO BNE CONM ; TRY AGAIN IF NEITHER YES OR NO 4$: EMT +1 CON2 ;ASK ABOUT MULTI DISK MODE JSR %7,ALPHA ;GO WAIT FOR ANSWER CMP #153,TEXBUF ;TEST FOR YES BEQ 3$ CMP #NO,TEXBUF ; NO BEQ DATTES ; DO NOT ENTER STATIC TEST BR 4$ 3$: BIS #BIT11,FLAG ;SET FLAG TO ENTER STATIC TEST DSKDR: EMT +1 CON3 JSR %7eMOV @SR,WORK1 ;FETCH SR MOV WORK1,WORK BIC #176000,WORK ;MASK THE TRACK AND DISK NO. ROR WORK ROR WORK ROR WORK ROR WORK ROR WORK MOV WORK,@DAE ;DISK EXT. ADDR. REG. LOADED MOV @SR,WORK SWAB WORK ROL WORK ROL WORK ROL WORK BIC #3777,WORK MOV WORK,@DAR ;DISK ADDRESS REG LOADED MOV #INBUF,@CMA ;LOAD CURRENT ADDRESS MOV #177777,@WC ;LOAD WORD COUNT BIS #5,@DCS ;GO AND READ CTBUSY: TSTB @DCS ;TEST FOR CONTROL NOT READY BPL CTBUSY ;WAIT FOR CONTROL NOT READY SRCHG: CMfR2 ;PLACE BIT 0 IN CARRY BIT BCS MWRI1 ;BR IF NO WRITE RING CLR R4 ;CLEAR ERROR FLAG MOV NWORD(R0),@#MTWORD ; 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 COMMAND BR MWRI3 MWRI2: BIS #WEXG,R3 g ; TASK ACCESS STATUS HPRIR: .BYTE 0 ; PRIORITY MAXTM: .WORD 0 ; MAXIMUM TIME DEVPG: .WORD 0 ; DEVICE PAGE FLAG ; ; CARD READER LIST CSIOB: IOCBM 2,2,0,0,3,DACRD TYIOB: IOCBM 0,2,0,0,0,TYMES TYMES: .WORD 14,0 .ASCII /TSKNTR MSG/ TYNUM: .BYTE 40,40 ; SET ERROR NUMBER CODE .BOUND BFBLK1: .WORD 0 ; STATUS CODE .WORD 0 ; ID OF ROS FILE BFNAM: .WORD 0,0 h,NOCHA SUB #1,TEXBUF CMP #10,TEXBUF BLOS DSKDR MOV TEXBUF,DSKNOR ROL DSKNOR ROL DSKNOR ; DSKNOR CONTAINS NUMBER OF DISKS - 1 TIMES 4 BR ASKWC DATTES: EMT +1 CON4 ;ASK UNIT NUMBER JSR %7,NOCHA ;WAIT FOR NO. CMP #10,TEXBUF ;IS NO = O>10 BLOS DATTES ;NO CLC ROL TEXBUF ROL TEXBUF ; PLACE DISK NUMBER IN FLAG BIS TEXBUF,FLAG ASKWC: EMT +1 CON5 ;ASK ABOUT OPTIONAL WORD COUNT JSR %7,ALPHA ;WAIT FOR ANSWER CMP #153,TEXBUF BEQ WCCON ; BR IFiP WORK1,@SR BNE STAMP ;SR HAS CHANGED BR SRCHG ;SR HAS NOT CHANGED ; ; ; ; ; ; ; ;ROUTINE TO REPORT ERROR COUNT AND CONTENTS OF ONE REGISTER ; STAER: JSR %5,CONV ;CONVERT OCTAL TO ASCII WORK ;DATA TO BE CONVERTED MES10 ;ADDRESS OF MESSAGE 6 JSR %5,CONV ;CONVERT OCTAL TO ASCII ERCOUNT ;ERROR COUNT TO BE CONVERTED HED5 ;ADDRESS OF MESSAGE 3 EMT +0 ;REPORT MESSAGE HED5A HED5 MES10 -1 RTS %5 ;EXIT ROUTINE ; ;ROUTINE TO REPORT ERROR COUNT AND THE CONTENj ;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 MOV RES1(R0),R1 BPL MRWR1 ;BRANCH IF THE BACK SPACE IS NOT SET JSR PC,MWRIT BR MRWR5 MRWR1: MOV @#MTSTAT,R2 ASH #4,R2 ;PALk ; ELEMENT NAME BFSTAT: .BYTE 0 BFTYPE: .BYTE 1 ; ELEMENT TYPE BFSECT: .WORD 0 ; RELATIVE START SECTOR BFSIZE: .WORD 0 ; LENGTH IN SECTORS .BOUND TXTLST: .WORD 1 .BYTE 1,2 ; DISC / SUSPEND .WORD 0 ; EXIT .BYTE 0,3 ; ERROR / LEVEL TXTERR: .WORD 0,0 ; ERROR WORD / RESERVED .WORD TXTHED ; BUFFER HEADER ADDRESS .WORD l YES CMP #NO,TEXBUF ; TEST FOR NO BEQ OPDAR ; ASK ABOUT OPTIONAL DAR BR ASKWC ; ASK AGAIN WCCON: EMT +1 CON6 ;ASK LENGTH OF WC BIC #3,TEXBUF ; MAKE A MULTIPLE OF 4 TST TEXBUF BEQ WCCON CMP #1001,TEXBUF ;IS WORD COUNT>1000 BLOS WCCON ;YES ASK FOR COUNT AGAIN MOV TEXBUF,SWRDCT ;OPERATING WORD COUNT MOV SWRDCT,WRDCT ; OPTIONAL SECTOR ADDRESS **************** OPDAR: EMT +1 CON7 ;ASK ABOUT OPTIOmTS OF TWO REGISTERS ; ; ; STAER1: JSR %5,CONV ;CONVERT OCTAL TO ASCII WORK ;DATA TO BE CONVERTED MES10 ;ADDRESS OF MESSAGE 6 JSR %5,CONV ;CONVERT OCTAL TO ASCII WORK1 ;DATA TO BE CONVERT MES10A ;ADDRESS OF MESSAGE 6 JSR %5,CONV ;CONVERT OCTAL TO ASCII ERCOUNT ;ERROR COUNT TO BE CONVERTED HED5 ;ADDRESS OF MESSAGE 3 EMT +0 ;REPORT MESSAGE HED5A HED5 MES10 MES10A -1 RTS %5 ;EXIT ROUTINE ; ; ;ROUTINE TO DECODE EMT CALLS ;EMT+1=TYPE ONE LINE OF TEXT nCE ERROR BIT IN SIGN BIT BMI MRWR2 ;BRANCH IF ERROR ; PLACE WORD COUNT AND STATUS IN LIST MOV NWORD(R0),COUNT(R0) ;SAVE COUNT SUB @#MTWORD,COUNT(R0) MOV @#MTSTAT,STATUS(R0) ;SAVE STATUS BR MRWR3 ; ERROR ON LAST WRITE MRWR2: MOV #11,R4 DECB RES1(R0) ;DECREMENT REPEAT COUNT BEQ MRWR3 JSR PC,MTINIT ;INITIALIZE FOR BACK SPACE COMMAND BPL MRWRo 0,0 ; TXTHED: .WORD $BCHID ; FILE I D FOR BATCH FILE .BYTE 0 ; RELATIVE SECTOR TXTR.W: .BYTE 0 .WORD 0,0,0 TXTSEC: .WORD 0 ;RELATIVE SECTOR TO READ OR WRITE TXTCNT: .WORD 40 ; NUMBER OF WORDS TO TRANSFER TXTBK1: .BLKW 40 ; .BOUND DFLIST: .WORD 1 ; "DEFINE FILE" LIST .BYTE 0,0 ; ERROR , ERRTSK .WORD 0 ; IFD .WORD 0 pNAL DAR JSR %7,NOCHA CMP #100,TEXBUF ; 77 MAX SECTOR NUMBER BLOS OPDAR MOV TEXBUF, DMA ;TEMP DAR REGISTER OPPAT: EMT +1 CON8 ;ASK ABOUT DATA PATTERNS JSR %7,NOCHA CMP #23,TEXBUF ;TEST FOR CORRECT NO BLOS OPPAT ;ASK AGAIN CMP #22,TEXBUF BEQ OPWRT ;DATA PATTERN UNDER PROGRAM CONTROL BIS #BIT15,FLAG ;SET PROGRAM FLAG MOV TEXBUF, PATNU ;OPERATOR WANTS TO SELECT DATA CLC ROL PATNU BIC #70000,FLAG ;CLEAR OP MODE BITS IN FLAG OPWRT: EMT +1 CON9 ;ASK ABOUT WRq ;EMT+0=TYPE A SERIES OF LINES EMTRP: MOV (6),%0 CMP #EMT+1,-(0) ;WAS THE CALL EMT+1 BNE TYPS ;NO! TYPE A SERIES OF LINES OF TEXT BR TYP ;YES TYPE ONE LINE OF TEXT ;SUBROUTINE TO OUTPUT ASCII MESSAGE ON TELETYPE PRINTER. TYP: MOV @%6,%0 ;GET ADDRESS THAT CONTAINS MESSAGE ADDRESS ADD #2,@%6 ;SET UP EXIT. MOV @%0,%0 ;ADDRESS OF MESSAGE TO R0. TYPA: MOVB (0)+,TYPDAT ;GET CHARACTER CMPB #100,TYPDAT ;CHECK FOR "@" CHARACTER BNE TYPC ;CRANCH IF NOT "@". RTI ;TERMINATOR CHAR. DONE. r3 ;BRANCH NONE ZERO MOVB #200,RES1+1(R0) ;SET BACK SPACE FLAG BIS #BCKR,R3 ; MOV R3,@#MTCOMM ;GIVE COMMAND MRWR5: INC R5 ;SET I/O NOT COMPLETE MRWR3: RTS PC ; .PAGE ; 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 ASR s ; FILE I.D. .WORD 0 ; FILE TYPE .WORD 0 ; # SECTORS IN FILE ; ROSLNK COMMAND LIST RKLCL: .RAD50 /ACC/ ; ACCESS STATUS .RAD50 /DEV/ ; DEVICE PAGE .RAD50 /END/ ; END .RAD50 /NAM/ ; NAME .RAD50 /PRI/ ; PRIORITY .RAD50 /TIM/ ; TIME LIMIT IN SECONDS .RAD50 /TSK/ ; TASK NUMBER .WORD 0 ; ; ROSLNK COMMtITE JSR %7,ALPHA CMP #153,TEXBUF ;TEST FOR YES BEQ $5 ; BR IF YES CMP #NO,TEXBUF ; TEST FOR NO BEQ OPWCK ; GO ASK ABOUT WRITE CHECK BR OPWRT ; ASK AGAIN $5: BIS #BIT14,FLAG ;YES SET FLAG BIT OPWCK: EMT +1 CON10 ;ASK ABOUT WRITE CHECK JSR %7,ALPHA CMP #153,TEXBUF ;TEST FOR YES ANSWER BEQ $6 ; BR IF YES CMP #NO,TEXBUF ; TEST FOR NO BEQ OPRDuEXIT. TYPC: CMPB #45,TYPDAT ;CHECK FOR "%". BEQ TYPF ;BRANCH IF "%". CMPB #42,TYPDAT ;NOT "%". CHECK FOR "#". BEQ TYPG ;BRANCH IF "#" JSR %7,TYPD ;TYPE CHAR IN TYPDAT BR TYPA TYPD: BIT #BIT14,@SR BNE TYEXIT MOVB TYPDAT,@TPB ;OUTPUT CHARACTER TO PRINTER TSTB @TPS ;WAIT FOR DONE FLAG. BPL .-4 TYEXIT: RTS %7 ;EXIT TYPF: MOVB #15,TYPDAT ;MOVE CARRIAGE RETURN CODE TO TYPDAT JSR %7,TYPD ;GO TYPE CHAR. TYPG: MOVB #12,TYPDAT ;MOVE LF CODE TO TYPDAT. JSR %7,TYPD ;GO TYPE CHAR. BvR2 ;PLACE BIT 0 IN CARRY BIT BCS MWEOF1 ;BR IF NO WRITE RING CLR R4 ;CLEAR ERROR FLAG BIS #WRFM,R3 ; 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 FLwAND PROCESSOR JUMP TABLE RLKJT: .WORD RLACC ; ACCESS STATUS .WORD RLDEV ; DEVICE PAGE .WORD RLEND ; END .WORD RLNAM ; NAME .WORD RLPRI ; PRIORITY .WORD RLTIM ; TIME LIMIT .WORD RLTSK ; TASK NUMBER ; ; TASK ACCESS STATUS MNEMONICS AND ASSOCIATED BIT SETTINGS ACCTB: .RAD50 /BCH/ ; BATCH TASK .WORD 1 .RAD50 /BCF/ ; FLOATING POINT BAx ; GO ASK ABOUT READ BR OPWCK ; ASK AGAIN $6: BIS #BIT13,FLAG ;YES SET FLAG BIT OPRD: EMT +1 CON11 ;ASK ABOUT READ JSR %7,ALPHA CMP #153,TEXBUF ;TEST FOR YES ANSWER BEQ $7 ; BR IF YES CMP #NO,TEXBUF ; TEST FOR NO BEQ CHKFLG BR OPRD ; ASK AGAIN $7: BIS #BIT12,FLAG ;SET FLAG TO READ CHKFLG: BIT #70000,FLAG BEQ OPWRT ; GO BACK AND ASK AGAIN IF ALL yR TYPA TYPDAT: 0 ;SUBROUTINE TO OUTPUT A SERIES OF ASCII MESSAGES ON TELETYPE PRINTER TYPS: MOV @%6,%0 ;GET ADDRESS THAT CONTAINS MESSAGE ADDRESS ADD #2,@%6 ;UPDATE TO NEXT MESSAGE ADDRESS MOV @%0,TYPSB ;ADDRESS OF MESSAGE TO TYPSB CMP #-1,TYPSB ;CHECK FOR TERMINATOR BNE TYPSA ;BRANCH IF NOT TERMINATOR. RTI ;TERMINATOR. EXIT TYPSA: EMT +1 ;CALL ON TYP SUB TO TYPE MESSAGE TYPSB: 0 ;ADDRESS OF MESSAGE GOES HERE BR TYPS ;GO PROCESS NEXT MESSAGE ; ; ;OCTAL TO ASCII CONVERT ROUTINEzAG IS NOT SET JSR PC,MWEOF BR MRWEO3 MRWEO1: MOV @#MTSTAT,R2 ASH #4,R2 ;PLACE ERROR BIT IN SIGN BIT BPL MRWEO2 MOV #11,R4 DECB RES1(R0) ;DECREMENT REPEAT COUNT BEQ MRWEO2 JSR PC,MTINIT ;INITIALIZE FOR BACK SPACE COMMAND BPL MRWEO2 MOVB #200,RES1+1(R0) ;SET BACK SPACE FLAG BIS #BCKR,R3 ; COMMAND MOV R3,@{TCH TASK .WORD 11 .RAD50 /BKG/ ; BACKGROUND TASK .WORD 2 .RAD50 /BKF/ ; FLOATING POINT BACKGROUND TASK .WORD 12 .RAD50 /FCD/ ; FOREGROUND TASK .WORD 4 .RAD50 /FGF/ ; FLOATING POINT FOREGROUND TASK .WORD 14 .RAD50 /SYS/ ; SYSTEM TASK .WORD 20 .RAD50 /SYF/ ; FLOATING POINT SYSTEM TASK .WORD 30 .WORD 0 ; END FLAG ; BSZTAB: |NO ; ; ; ADTST: BIT #BIT11,FLAG ;ARE WE IN MULTI DISK MODE BEQ EXMFLG ;BRANCH IF NO. EMT +1 MES11 MOV FLAG,ACNVX ROR ACNVX ROR ACNVX MOV ACNVX,R0 ; SET UP DEVICE PAGE REGISTERS JSR PC,SETREG JSR %5,CONV ACNVX MES12 1 EMT +1 MES12 EXMFLG: BIT #BIT10,FLAG ;TEST FOR DATA TEST ONLY BEQ ADT2 ; DO COMPLETE TEST JMP DATAT ;DO DATA TEST ONLY TSTBF: .REPT 40 .WORD -1,-1 .ENDR ;***ADDRE} ; ;ENTER ROUTINE AS FOLLOWS ;JSR%5,CONV ;ADDR#=ADDRESS OF NUMBER TO BE CONVERTED ;ADDR BYTE=LSB OF WHERE ASCII IS GOING ;ASCII#=THE NUMBER OF ASCII CHAR. TO BE CONVERTED ; ; CONV: MOV @(5)+,ACNVX ;VALUE OF # TO BE CONVERTED MOV (5)+,%1 ;ASCII ADDR MOV (5)+,%2 ;# OF ASCII CHAR ADD %2,%1 ACVN: MOV ACNVX,%3 BIC #177770,%3 ;ISOLATE LEAST SIGNIFICANT OCTAL# ADD #60,%3 ;SET UP ASCII# MOVB %3,-(1) ;STORE ASCII CHAR BIC #7,ACNVX ROR ACNVX ;ROTATE OCTAL# ROR ACNVX ROR ACNVX DE~#MTCOMM ;GIVE COMMAND MRWEO3: INC R5 ;SET I/O NOT COMPLETE MRWEO2: 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 BIT @#MTSTAT,#2 ;TEST LOAD POINT BIT BNE MREW2 BIS #REWD,R3 MOV R3,@#MTCOMM MREW1: RTS PC MREW2: CLR RES2(R0) BR MREW1 ; ; THIS ROUTINE IS ENTE;TABLE OF MAX ALLOWABLE BLOCK OR "PAGE SIZES FOR EACH PRIORITY ;THE SIGN BIT IS SET IF THE PRIORITY IS DYNAMIC, I.E. NOT FIXED ;NOR TIME-SLICE. .WORD PRIP01&100000!$PS001 .WORD PRIP02&100000!$PS002 .WORD PRIP03&100000!$PS003 .WORD PRIP04&100000!$PS004 .WORD PRIP05&100000!$PS005 .WORD PRIP06&100000!$PS006 .WORD PRIP07&100000!$PS007 .WORD PRIP08&100000!$PS008 .WORD PRIP09&100SS ADT2*** ; ;IN THIS TEST WRITE TRACK ZERO WITH ZERO'S ;THEN WRITE ALL ONES IN AN ADDRESS ;CHECK IF WRITING ONES IN THAT ADDRESS ALTERED ;ANY OTHER ADDRESS IN THE TRACK ;FOLLOW THIS PROCEDURE FOR ADDRESS (SECTORS) 1 TO 77 ; ; ADT2: MOV #1000,%6 ;SET UP STACK MOV #4000,WRDCT ; SET UP WORD COUNT MOV #OUTBUF,BUF ;SET UP CURRENT ADDRESS MOV PATNU,SAVE CLR PATNU CLR TRACK CLR DMA JSR %5,PASEL ;SET UP DATA BUFFER MOV SAVE,PATNU ; ZERO SECTORS 0 TO 37 RFADT: BIS #BITC %2 ;-1 FROM ASCII CHAR COUNT BNE ACVN RTS %5 ;EXIT # CONVERTED ACNVX: 0 ;WORK REGISTER ; ;ROUTINE TO HANDLE KEYBOARD CONVERSATION ;ROUTINE ACCEPTS NUM. OR ALPHA CHARACTERS ; NOCHA: MOV #40,TSTCH ;SET UP FOR NUM. CHAR. BR TYST ALPHA: MOV #100,TSTCH ;SET UP FOR ALPHA CHAR TYST: MOV #340,@CSR ;LOCK UP INTERRUPTS CLR TEXBUF ;CLEAR TEXT BUFFER REG TSTFLG: TSTB @TKS ;CHECK FOR FLAG BPL TSTFLG ; MOV @TKB,@TPB ;CHARACTER IN BUFFER TSTB @TPS ;ECHO CHARACTER BPL .-4 CMP #377,@TKRED BY THE INTERRUPT PROCESSOR AFTER A REWIND ; MRREW: CLR R5 ;SET I/O COMPLETE RTS PC .PAGE ; MAGNETIC TAPE SPACE RECORD (+-N) ; MSPRC: CLR R5 ;SET I/O COMPLETE TST @#MTSTAT ;CHECK FOR FILE MARK BMI MSPRC5 JSR PC,MTINIT ;INITIALIZE BPL MSPRC2 TST COUNT(R0) BEQ MSPRC2 BMI MSPRC3 ;BR IF NEGATIVE ; DECRE000!$PS009 .WORD PRIP10&100000!$PS010 .WORD PRIP11&100000!$PS011 .WORD PRIP12&100000!$PS012 .WORD PRIP13&100000!$PS013 .WORD PRIP14&100000!$PS014 .WORD PRIP15&100000!$PS015 .WORD PRIP16&100000!$PS016 .PAGE TSKNTR: ; TASK ENTER MOV #LWCRD,R1 ; SET CHARACTER POINTER SO A CARD WILL BE READ RLKGC: JSR PC,GWORD ; GET NEXT COMMAND MOV #FWASC,-(SP) ; ASCII BUFFER8,@DCS WRITE 3$: TSTB @DCS ; TEST FOR READY BPL 3$ TST @DCS ;TEST FOR ERROR BPL RFADTY MOV #1,ERCOUNT ;ERROR OCCURRED MOV @DCS,WORK1 ;FETCH DCS REGISTER MOV @DAR,WORK DEC WORK ER1: JSR %5,STAER1 ;REPORT ERROR OCURRED ;****WRD1=CONTROL STATUS REG. AT THE THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. AT THE TIME OF THE ERROR **** BR RFADT ;LOOP ON ERROR RFADTY: MOV #40,DMA ; ZERO SECTORS 40 TO 77 RFADTX: BIS #BIT8,@DCS ;CLEB ;CHECK FOR RUB-OUT BNE CKCH ;EXIT IF NOT RUB-OUT EMT +1 MES8 ;REPORT RUB-OUT ACKNOWLEDGED BIC #7,TEXBUF ROR TEXBUF ROR TEXBUF ROR TEXBUF BR TSTFLG ;GO WAIT FOR NEW CHAR. CKCH: CMP #215,@TKB ;CHECK FOR CARRIAGE RETURN BNE .+4 RTS %7 ;EXIT DELIMITER TYPED BIT TSTCH,@TKB BNE CHOK EMT +1 ;REPORT QUESTION MARK MES7 BR TSTFLG ;WAIT FOR CORRECT CHAR. CHOK: MOV @TKB,WORK BIC #177770,WORK CLC ROL TEXBUF CLC ROL TEXBUF CLC ROL TEXBUF ADD WORK,TEXBUF ;ADD CHARMENT (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 ;SET I/O NOT COMPLETE MSPRC2: RTS PC MSPRC5: TST NWORD(R0) BGT MSPRC6 INC NWORD(R0)  ADDRESS MOV #FWRAD,-(SP) ; RAD50 BUFFER ADDRESS EMT R50PAK MOV FWRAD,R2 MOV #RKLCL,R4 ; SET POINTER TO COMMAND LIST RLKA1: TST (R4) ; AT END OF LIST BNE RLKA2 ;YES, BRANCH MOV #61,R3 ; SET ERROR CODE BR RLKER ; ERROR ROUTINE RLKA2: CMP (R4)+,R2 ;NO, TEST COMMAND BNE RLKA1 ; BRANCH IF NOT A COMMAND SUB AR THE DISK WRITE $4: TSTB @DCS BPL $4 TST @DCS ;TEST FOR ERROR BPL RFRC MOV @DAR,WORK DEC WORK MOV @DCS,WORK1 ;FETCH DCS REGISTER MOV #2,ERCOUNT ;SETUP ERROR COUNT ER2: JSR %5,STAER1 ;REPORT DISK ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. REG AT THE TIME OF THE ERROR **** BR RFADTX ;LOOP ON ERROR RFRC: CLR SAV1 RFRD: CLR SAVE WONWD: MOV #TSTBF,BUF MOV #100,WRDCT MOV SACTER BR TSTFLG ;WAIT FOR NEW CHARACTER TEXBUF: 0 TSTCH: 0 ; ; THIS ROUTINE SETS UP THE D D C DEVICE PAGE REGISTERS ; USAGE; PLACE LOGICAL DISK NUMBER IN R0 AND JSR PC,SETREG ; SETREG: BIC #177770,R0 ; DEV NUMBER 0 THRU 7 ASH #4,R0 ; MULT BY 20 ADD #165300,R0 MOV #10,R1 ; NUMBER OF REGISTERS MOV #DCS,R2 ; FIRST REGISTER ADDRESS 2$: MOV R0,(R2)+ TST (R0)+ SOB  DEC COUNT(R0) BR MSPRC2 MSPRC6: DEC NWORD(R0) INC COUNT(R0) BR MSPRC2 .PAGE ; MAGNETIC TAPE SKIP FILES (+-N) ; MSKFI: CLR R5 ;SET I/O COMPLETE MOV @#MTSTAT,R1 ASL R1 BMI MSKFI5 JSR PC,MTINIT ;INITIALIZE BPL MSKFI2 TST COUNT(R0) BEQ MSKFI2 BMI MSKFI3 ;BR IF NEGATIVE  #RKLCL,R4 ; DETERMINE COMMAND INDEX SUB #2,R4 ; R4=R4-2 JMP @RLKJT(R4) ; JUMP TO COMMAND PROCESSOR RLKER: MOVB R3,TYNUM+1 ; SET ERROR CODE TO BE PRINTED MOV #TYIOB,-(SP) ; LIST ADDRESS EMT TTYOUT EMT EXIT .PAGE ; PROCESS TASK ACCESS STATUS RLACC: TST R3 ; EQUAL SIGN DELIMITER BNE RLAC1 JSR PC,GWORD ;GET TASK ACCESS STATUS AV1,DMA BIS #BIT8,@DCS WRITE TSTB @DCS ;TEST FOR READY BPL .-4 TST @DCS ;TEST FOR ERROR BPL SUADB ;BRANCH IF NO CONTROL ERROR MOV @DCS,WORK1 MOV SAV1,WORK MOV #3,ERCOUNT ;SETUP ERROR COUNT ER3: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=DISK CONTROL STATUS AT THE TIME OF THE ERROR**** ;****WRD2=DISK ADDR. IN ERROR WHEN TRYING TO WRITE ALL ONES **** BR WONWD ;RE-WRITE WORD SUADB: MOV SAV1,R0 ; COMPUTE BUFFER ADDRESS OF -1 BLOCK ASH #6,R0 AD R1,2$ RTS PC ; RETURN ; ;ERROR MESSAGE HEADERS ; HED1: .ASCII /%DATA ERR @/ ; HED2: .ASCII /%STATUS ERR @/ ; HED3: .ASCII /%EXTRA BKS @/ ; HED4: .ASCII /%DK ADDR ERR @/ ; HED5A: .ASCII /%@/ ; HED5: .ASCII / ERR CNT @/ ; HED6: .ASCII /%RANEX ERR @/ .PAGE ;MESSAGE TRAILERS ; MES1: .ASCII / DAR @/ ; MES1A: .ASCII / DAE @/ ; MES2: .ASCII / DCS @/ ; MES2A: .ASCII / HRD ERR@/ ; MES3: .ASCII / WRD CNT@/ ; MES4: .ASCIDEC COUNT(R0) INC NWORD(R0) BIS #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( CMP R3,#1 ; TEST FOR SEMI-COLON BEQ RLAC2 ; RLAC1: MOV #62,R3 ; SET ERROR CODE BR RLKER ; ERROR ROUTINE RLAC2: MOV #FWASC,-(SP) MOV #FWRAD,-(SP) EMT R50PAK MOV FWRAD,R2 ; PLACE ACCESS CODE IN R2 MOV #ACCTB-2,R4 ; SET POINTER TO TABLE - 2 RLAC3: CMP #30,(R4)+ ; TEST FOR END OF TABLE BEQ RLAC1 ; BRANCH IF ATD #OUTBUF,R0 MOV R0,WORK4 ; SAVE FOR CLEAN UP MOV #100,R1 2$: MOV #-1,(R0)+ SOB R1,2$ WRCADT: BIS #BIT8,@DCS MOV #10000,WRDCT ; SET UP WORD COUNT MOV #OUTBUF,BUF ;SETUP CURRENT ADDR MOV SAVE,DMA ;SETUP DISK ADDRESS WRCHECK TSTB @DCS ;CHECK FOR READY BPL .-4 TST @DCS ;TEST FOR ERROR BPL CHKBUF ;BRANCH NO DISK ERROR MOV @DCS,WORK1 MOV SAV1,WORK DEC WORK MOV #4,ERCOUNT ;SET UP ERCOUNT ER4: JSR %5,STAER1I / WRD ADDR.@/ ; MES5: .ASCII / GD DATA @/ ; MES6: .ASCII / BD DATA @/ ; MES7: .ASCII /?@/ ; MES8: .ASCII '/@' ; MES10: .ASCII / WRD1 @/ ; MES10A: .ASCII / WRD2 @/ ; MES11: .ASCII /%UNIT NO.@/ ; MES12: .ASCII / @/ ; MES13: .ASCII / READ @/ ; TIMO: .ASCII /%CPU BKGRND TIMED OUT@/ ; OK: .ASCII /%OK!@/ ;CONVERSATION TEXT ; ; CON1: .ASCII /%DATA TEST ONLY? @/ ; CON2: .ASCII /%MULTI DK MODE?@/ ; CON3: .ASCII /%# OF DKS 1 TO 10 OCTAL?@/ ; CON4: R0) DEC COUNT(R0) BR MSKFI2 MSKFI6: DEC NWORD(R0) INC COUNT(R0) BR MSKFI2 .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 #CLEA,@#MTCOMM ;ISSUE CLEAR TO MAG TAPE C END OF TABLE CMP (R4)+,R2 ; COMPAIR INPUT COMMAND WITH TABLE ENTRY BNE RLAC3 ; TRY NEXT ENTRY IN TABLE MOVB (R4),TSKAC ; SAVE ACCESS CODE JMP RLKGC ; PROCESS NEXT COMMAND ; ; PROCESS DEVICE PAGE COMMAND RLDEV: CMP #1,R3 ; TEST FOR SEMI-COLON BEQ RLDEV1 MOV #71,R3 ; SET ERROR CODE BR RLKER RLDEV1: INC DEVPG ; SET DEVICE PAGE FLAG ;REPORT ERROR MOV @DAR,ACNVX ;SET UP DISK ADDR. FOR REPORT JSR %5,CONV ACNVX MES4 6 EMT +1 MES4 ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. IN ERROR DURING WRITE CHECK **** ;****WRD ADDR.=ADDR. WHICH CONTAINS ALL ONES **** BR WRCADT ; CHKBUF: MOV WORK4,R0 ; CLEAR -1 BLOCK IN BUFFER MOV #100,R1 3$: CLR (R0)+ SOB R1,3$ ZEROAD: CLR SAVE ; MOV SAV1,DMA ;SETUP DISK ADDRESS MO.ASCII /%EX. DK?@/ ; CON5: .ASCII /%OPT WRD CNT? @/ ; CON6: .ASCII /%LENGTH (1 TO 1000)?@/ ; CON7: .ASCII /%WRD ADDR?@/ ; CON8: .ASCII /%OPT. DATA PAT. #?@/ ; CON9: .ASCII /%WRITE?@/ ; CON10: .ASCII /%WRITE CHECK?@/ ; CON11: .ASCII /%READ?@/ ; END: .ASCII /%END@/ .EVEN ; .WORD 25252 OUTBUF: .BLKW 4000 ; INBUF: .BLKW 4000 .WORD 25252 .END BEGIN ONTROLLER MOVB DEVNUM(R0),R3 ;OBTAIN DEVICE NUMBER ASH #12.,R3 ;LEST SHIFT 0&1 INTO 12&13 MOV R3,@#MTCOMM ;STORE UNIT NUMBER IN COMMAND REGISTER BIS #1000,R3 ;SET INTERRUPT ENABLE BIT ; 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 BYT BR RLKGC ; GO PROCESS NEXT COMMAND .PAGE ; PROCESS END COMMAND RLEND: CMP #1,R3 ; TEST FOR SEMI-COLON BEQ RLED2 RLED1: MOV #63,R3 ; SET ERROR CODE JMP RLKER ; BR TO ERROR ROUTINE RLED2: CMP TSKNO,TSKDEF ; IS THIS A BATCH TASK BEQ RLED3 ;******* CHANGE WHEN KEY SWITCH IS INSTALLED ********************** CMP @#SWR,#1 BEQ RLED3 CMP @#SWV #OUTBUF,BUF MOV #100,WRDCT ; SET UP WORD COUNT WRITE TSTB @DCS ;CHECK FOR READY BPL .-4 TST @DCS ;TEST FOR ERROR BPL INDADT MOV #5,ERCOUNT MOV @DCS,WORK1 MOV @DAR,WORK ER5: JSR %5,STAER1 ;****WRD1=CONTROL STATUS REG. AT THE TIME OF THE ERROR **** ;****WRD2=DISK ADDR. AT THE TIME OF THE ERROR **** BR ZEROAD ;LOOP ON ERROR INDADT: CMP #77,SAV1 BEQ LP2ADT ;LAST ADDR. CHECKED INC SAV1 JMP RFRD ;CHECK NEXT ADDRESS LP2ADT: BIT #BIT11,@SR ;IS BIT 11 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 E SIGN EXTENDED BGT MTIN2 ;BRANCH IF BIT 7 WAS 0 MTIN3: RTS PC ;RETURN MTIN2: MOV #11,R4 BR MTIN3 ; ; DEQUEUE THE REQUEST MTDEQ: 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 R,#2 BNE RLED1 RLED3: MOV #BFBLK1,-(SP) EMT BFOPEN MOV BFSECT,TXTSEC ; SET TO READ IN TASK HEADER INFO CLRB TXTR.W ; SET READ FLAG JSR PC,TEXTIO MOV TSKNO,TXTBK1+2 ; MOVE TASK NUMBER MOV TSKAC,TXTBK1+4 ; MOVE PRIORITY AND TASK ACCESS STSATUS MOV HPRIR,R2 TSTB PPTAB+$ROSM(R2) ; IS THIS A TIME-SLICING PRIORITY BLE RLD04 ; NO TST  SET IN SR BEQ ADT3 JMP ADT2 ;BIT 11 SET LOOP ON TEST .PAGE ;***** ADDRESS TEST ***** ; ;WRITE EACH UNIQUE ADDRESS ON ITSELF FOR TRACK 0 ;THEN READ IT BACK AND COMPARE FOR THE ;CORRECT DATA ; ; ADT3: CLR DMA ;CLEAR ACTIVE REG CLR TRACK CLR WORK CLR WORK1 MOV #1000,%6 ;SETUP STACK MOV #OUTBUF,BUF ;SET UP CURRENT ADDRESS MOV #4000,WRDCT ; SET UP WORD COUNT MOV #OUTBUF,%0 ;FILL BUFFER WITH COUNT INADB: MOV WORK,(0)+ INC WORK ;+1 COUNT  $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 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 NUMBER OF REQUESTOR BEQ MTDEQ1 ;BRANCH IF NOT A TASK DECB IOSTAT(R2) ;OTHERWISE, DECREMENT THE I/O IN PROGRES BNE MTDEQ1  MAXTM ; YES EXECUTION TIME MUST BE SPECIFIED BLE RLKER RLD04: MOV MAXTM,TXTBK1+10 ; MOVE MAX TIME TST DEVPG BEQ RLED4 ; BR IF DEVICE PAGE NOT DESIRED MOV #102,R3 ; SET ERROR CODE TST TXTBK1+42 ; TEST TPDR 7 BNE RLKER ; BR IF IN USE MOV #77406,TXTBK1+42 ; SET TPDR7 MOV #7600,TXTBK1+62 ; SET TPAR 7 RLED4: INCB TXTR.W CMP #OUTBUF+10000,R0 BNE INADB ;SET UP NEXT WORD MOV WORK,SAVE WRABF: BIS #BIT8,@DCS ;CLEAR THE DISK WORLD WRITE ;WRITE TSTB @DCS ;IS THE CONTROL READY BPL .-4 ;CONTROL READY TST @DCS ;IS THERE AN ERROR BPL TFBL ;NO ERROR MOV @DCS,WORK ;FETCH CONTENTS OF CONTROL REG MOV #6,ERCOUNT ;SET UP ERROR COUNT ER6: JSR %5,STAER ;REPORT CONTROL ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR WRABF ;RE-WRITE DATA TFBL: MOV SAVE,WORK ADD #4X ; 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  MOV R2,-(SP) ;GO TO OVERLAY MONITOR SO THE TASKS CORE JSR PC,RELTSK ; CAN BE RELEASED MTDEQ1: RTS PC .END  ; SET WRITE FLAG JSR PC,TEXTIO MOVB HPRIR,R2 ; LOAD PRIORITY ASL R2 ; GET WORD INDEX MOV BSZTAB-2(R2),R4 ; GET MAX ALLOWED # OF PAGES WITH DYNAMIC BIT MOV R4,R5 ; SAVE DYNAMIC BIT BIC #100000,R4 ; LEAVE ONLY # OF PAGES MOV #103,R3 ; SET ERROR CODE CMP TXTBK1+22,R4 ; PROGRAM SIZE :: MAX ALLOWED BGT RLKER ; ERROR BRANCH 0,DMA CMP #10000,WORK BNE INADB-4 CLR WORK CLR DMA CLR WORK1 RDTDN: BIS #BIT8,@DCS ;CLEAR THE DISK READ TSTB @DCS ;IS THE CONTROL READY BPL .-4 ;YES THE CONTROL IS READY TST @DCS ;IS THERE AN ERROR BPL ADRCMP ;NO ERROR MOV #7,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;FETCH CONTROL REG. ER7: JSR %5,STAER ;REPORT CONTROL ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR RDTDN ;RE-READ ADRCMP: MOV #OUTBUF,SAVE CMPNEX: CMP @SAVE,WORK1 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.  TST R5 ; IS THIS PRIORITY "DYNAMIC"? BMI RLED5 MOV R4,TXTBK1+22 ; REPLACE WITH MAX SIZE FOR FIXED PARTITION RLED5: MOV FILID,R5 ; LOAD FILE I.D. MOV #104,R3 ; LOAD ERROR CODE FOR ILLEGAL FILE I.D. CMP R5,#NDISCS+$SYSFL ; MUST BE GREATER THAN SYSTEM RESERVED BLE RLKER1 ; ERROR EXIT CMP R5,#MAXID1 ; I.S. MUST BE <= MAXIMUM ALLOWED BGT RLKER1 ; ;IS THE ADDRESS CORRECT BEQ INCCMP ;COMPARE NEXT WORD MOV @SAVE,WORK ;FETCH LOAD ADDRESS MOV #10,ERCOUNT ;SET UP ERROR COUNT ER10: JSR %5,STAER1 ;REPORT COMPARISON ERROR ;****WRD1=DISK ADDR. WANTED **** ;****WRD2=DISK ADDR. RECEIVED **** INCCMP: ADD #2,SAVE INC WORK1 CMP #OUTBUF+10000,SAVE ; IS IT THE LAST ADDRESS IN BUF BNE CMPNEX ;COMPARE NEXT WORD CMP #10000,WORK1 ; IS IT THE LAST ADDRESS OF TRACK BEQ LPADT3 ADD #4000,DMA ; SET UPOF 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 5?-r-U>,+&+ $+0Z~ҥ֥¦) ERROR XXXXX SXXXXX SXXXXX SXXXXX SXXXXX  w  w YV~JY w| zYw  7 \+wV֥PrYf& C >  J ܥ . f~¦ ^4Y.Y"Y`0 E .~:ERROR EXIT MOV R5,DFLIST+6 ; LOAD FILE I.D. INTO LIST ; ******* ************ MOV TXTBK1+ ,R5 ; GET REQUESTED FILE TYPE ; ******* ************ BIC #177600,R5 ; SUPPRESS IFD REQUEST BIT CMP R5,#$OVTYP ; IS IT LEGAL FOR AN OVERLAY ? BNE RLKER1 ; ERROR EXIT ; READY TO "DEFINE" ROS FILE MOVB #5,DFLIST+10 ;LOAD FILE TYPE INTO LIST MOV TX FOR NEXT BUFFER BR RDTDN ;GO READ BUFFER LPADT3: BIT #BIT11,@SR ;LOOP ON TEST? BNE ADT3 ;YES BIT 11 SET IN SR .PAGE ;RF11 TRACK SELECTION TEST ; ;WRITE THE FIRST AND LAST ADDRESS OF EACH TRACK ;WITH THE OCTAL VALUE OF EACH TRACK ;BITS 6 THRU 11 EQUAL TRACK NUMBER ;BITS 0 THRU 5 EQUAL 0 IN FIRST SECTOR OF EACH TRACK ;BITS 0 THRU 5 EQUAL 77 IN LAST SECTOR OF EACH TRACK ; ;AFTER WRITING THE DISK READ EACH ADDRESS ;AND COMPARE DATA FOR THE CORRECT VALUE ; ADT4: CLR DMA ;CLEA ;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~(~*w ×&  ݥ~6  d7aߕ ZV < Jߐ=W?r ߕ 2 ~ TBK1+22,DFLIST+12 ; # OF SECTOR TO DEFINE MOV #DFLIST,-(SP) EMT NOCKPT ; FORCE TO STAY IN CORE DURING I/O EMT DELETE ; FIRST TRY TO DELETE FILE EMT CKPT MOVB DFLIST+2,R2 ; ERROR BYTE BEQ RLD24 ; O.K. MOV #105,R3 CMP #11,R2 ; THIS ERROR IS O.K. BNE RLKER1 ; ERROR EXIT RLD24: MOV #DFLIST,-(SP) EMT NOCKPT EMT R WORK REGISTERS CLR TRACK CLR OUTBUF CLR OUTBUF+2 CLR OUTBUF+4 CLR OUTBUF+6 MOV #1000,%6 ;SETUP STACK BIS #BIT8,@DCS ;CLEAR THE DISK WORLD MOV #OUTBUF,BUF ;SET CURRENT ADDRESS MOV #4,WRDCT ; SET WORD COUNT INSWT: WRITE ;GO WRITE TSTB @DCS ;IS READY SET BPL .-4 ;YES! WAIT FOR NOT BUSY TST @DCS ;TEST FOR ERROR BPL TSTTK ;NO ERROR GO ON MOV #11,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;REPORT CONTENTS OF DCS REG ER11: 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  42  ߐw  ee Dw 6 &fl~  ߕ D[7 >6fv$ < 6 6 Õߕ~ & 7 f  2 7  ߐ& 姀 <<0< 0<ߐ_~& wߕh 17 T7 0 7 \0 HW  f ww Z p7J DEFINE ; DEFINE FILE EMT CKPT ; ALLOW SWAPPING TSTB DFLIST+2 ; ERROR BNE RLKER1 ; ERROR EXIT ; NOW TRANSFER BATCH ELEMENT TO THE ROS FILE JSR R5,REGSAV ; NEED TABLE POINTERS BELOW MOV BFSECT,R0 ; INIT RELATIVE READ SECTOR # CLR R1 ; INIT RELATIVE WRITE SECTOR MOV DFLIST+6,R2 ; WRITE FILE I.D. RLD30: CLRB TXTR.W ; SET TO READ JSR %5,STAER ;REPORT ERROR OCCURRED ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR INSWT ;GO RE-WRITE TSTTK: CMP #7777,OUTBUF ; TEST FOR LAST ADDRESS BEQ INSRD ;GO READ THE DATA BIT #77,OUTBUF ; IS IT SECTOR NUMBER ZERO BNE MVNEM ;NO BIS #77,OUTBUF ; YES, SET UP FOR LAST SECTOR IN TRACK BIS #77,OUTBUF+2 BIS #77,OUTBUF+4 BIS #77,OUTBUF+6 ADD #77,DMA BR INSWT ;GO WRITE MVNEM: = 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 mߕX~ yʫʫʫʫʫ":ppʫʫʫp& ߕ J"2 SS NEXT COMMAND .PAGE ; PROCESS PRIORITY RLPRI: TST R3 ; EQUAL SIGN BEQ RLPR2 RLPR1: MOV #65,R3 ; SET ERROR CODE BR RTIM6 RLPR2: JSR PC,GWORD CMP #1,R3 ; TEST FOR SEMI-COLON BNE RLPR1 MOV #FWASC,-(SP) EMT ASCBIN MOV (SP)+,R2 ; R2 = BINARY NUMBER TST (SP)+ ; CLEAR STACK TST R2 BLT RLPR1 S LOOK AHEAD CORRECT CMP WORK1,WORK BEQ INCADS ;LOOK AHEAD OK DEC WORK ;COMPARE FOR ADDRESS+1 CMP WORK1,WORK ; BEQ INCADS ;BRANCH IF EQUAL INC WORK MOV #15,ERCOUNT ER15: JSR %5,STAER1 ;REPORT LOOK AHEAD INCORRECT ;****WRD1=DISK ADDR. WANTED FROM LOOK AHEAD REG. **** ;****WRD2=DISK ADDR. RECEIVED FROM DISK LOOK AHEAD REG. **** BR WRADT5 ;LOOP ON ERROR INCADS: CMP #3777,DMA ;IS IT THE LAST ADDR. BEQ XLPADT5 ;LAST ADDRESS EXIT INC DMA ;+1 DMA BR WRADT5 ;CHECK NEXT ADDRESS XL************** 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 /IISC.A: S2ME ;/ @AE D /IISC.A: 1AES M; @/R DA / I CIAS .1:ES M; RSLEAITRE AGSSME ; GEPA . / @RR EEXAN%R /IISC.A: D6HE ;/ @NT CRR E / I CIAS .5:ED H; @//%I CIAS .A:D5HE ;/ @RR EDRADK %D /IISC.A: D4HE ;/ @KS BRAXT%E /IISC.A: D3HE ;/ @RR EUSATST/%I CIAS .2:ED H; @/R ERA AT%D /IISC.A: D1HE ;S ERADHEE AGSSMER ROER ;; RNTURE; PC S RT $ ,2R1 B SO + R0 T TS )+R2,(R0 V MO : 2$ SSREDD AERSTGIRET RSFI; : ; BRANCH IF NEGATIVE CMP R2,#NPRIOR BGT RLPR1 ; BR IF TOO HIGH MOVB R2,HPRIR ; SAVE PRIORITY JMP RLKGC ; GO TO PROCESS NEXT COMMAND .PAGE ; PROCESS TIME LIMIT COMMAND RLTIM: TST R3 BNE RTIM1 JSR PC,GWORD CMP #1,R3 ; SEMI-COLON DELIMITER ? BEQ RTIM2 ;YES, CONTINUE RTIM1: MOV #66,R3 ; SET ERROR CODE BR PADT5:BIT #BIT11,@SR ;LOOP ON TEST BNE ADT5 ;YES LOOP ON TEST BIT 11 SET .PAGE ; SPIRAL TESTS ; ;WRITE THE LAST WORD OF TRACK ZERO ;AND THE FIRST WORD OF TRACK ONE ;USING ONE WORD X-FERS ;DATE = 52525 SPIRAL: BIS #BIT8,@DCS ;CLEAR THE DISK MOV #340,@CSR ;LOCK UP PROCESSING MOV #1000,%6 ;SETUP STACK MOV #100,WRDCT ; SET WORD COUNT TO 100 CLR TRACK MOV #77,DMA ; LAST SECTOR OF TRACT ZERO MOV #100,R0 ; SET UP DATA  ; 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. ; ; ; C2 ,RCS#D V MO S ERSTGIREF OERMBNU; R10,#1 V MO R00,3065#1 D AD 20Y BLTMU; 0 ,R#4 H AS 7RUTH0 ERMBNUV DE; R00,7777#1 C BI: EGTRSE ; G REET,SPC R JS D AN R0N IERMBNUK IS DALICOG LCELA P E;AGUS ; RSTEISEG RGEPAE ICEV DC D D E THP UTSSEE INUTROS HI T; ;0 : CHST T0 : UFXBTE ERCTRAHA CEW NOR FITWA ;G FLST TBR R TEACARCHD AD ;UFXBTEK,OR WDD A UFXBTEL RO C CL F BUEX TOL R LC C UFXBTEL RO C CL K OR,W7077176 RTIM6 RTIM2: MOV #FWASC,-(SP) ; ASCII STRING ADDRESS EMT ASCBIN ; DECIMAL ASCII TO BINARY MOV (SP)+,R4 ; PLACE CONVERTED NUMBER IN R4 TST (SP)+ TST R4 BEQ RTIM4 ; BR IF ZERO CMP R4,#TIMLM BPL RTIM1 ; BRANCH IF OVER TIME LIMIT MOV R4,MAXTM ; SAVE TIME LIMIT RTIM3: JMP RLKGC ; PROCESS NEXT COMMAND RTIM4: CMP @#SWR,#2  MOV #OUTBUF,R1 1$: MOV #52525,(R1)+ SOB R0,1$ MOV #OUTBUF,BUF WRITE ;WRITE LAST ADDR TK ZERO TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS BPL SPIL1 MOV #16,ERCOUNT MOV @DCS,WORK ER16: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR SPIRAL SPIL1: CLR DMA INC TRACK WRITE ;WRITE FIRST ADDR. TK 1 TSTB @DCS ;WAIT FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS BPL SPIL2 M / 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 #IC B RKWOB,TK @OV MK:HO C. ARCHT ECRRCOR FOT AI;W LGTFTSR B S7ME K AR MONTIESQUT OREP;R +1T EM K HO CNE B KB@TH,TCTST BI D PETYR TEMILIDET XI;E %7S RT 4 .+E BN N URET RGEIARRCAR FOK ECCH ;KB@T5,21 #MP CH:KC C. ARCHW NER FOT AI WGO ;G FLST TBR F BUEX TOR R UFXBTER RO F BUEX TOR R UFXBTE7, #IC B EDDGLEOWKNACT OUB-RUT OREP;R 8 ES M +1T EM T OUB-RUT NOF IITEX ;H KC CNE B UT-OUB ROR FCKHE;CB TK,@77#3P CM 4 .-L BP R TEACARCHO CH;E PS@TB ST T ERFFBUN IERCTRAHA;CB TP,@KB@TV MO ; LG2 ; FOREGROUND OR SYSTEM TASK BEQ RTIM3 ; BR IF YES RTIM5: MOV #70,R3 ; SET ERROR CODE RTIM6: JMP RLKER ; ERROR EXIT .PAGE ; PROCESS TASK NUMBER COMMAND RLTSK: TST R3 BNE RTSK1 JSR PC,GWORD CMP #1,R3 ; SEMI-COLON BEQ RTSK2 ;YES, BRANCH RTSK1: MOV #67,R3 ; SET ERROR CODE BR GWDER ; ERROR ROUTINE ;*************** COV #17,ERCOUNT MOV @DCS,WORK ER17: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR SPIRAL SPIL2: MOV #200,WRDCT ; SET UP FOR 2 SECTOR X-FER DEC TRACK MOV #77,DMA MOV #INBUF,BUF ; READ ;READ DATA TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS BPL SPIL3 MOV #20,ERCOUNT MOV @DCS,WORK ER20: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR SPIRAL SPIL3: MOV  = 777164 ;CARD READER COMPRESSED DATA ADDRESS ; CRS.2 = 777160 ;CARD READER STATUS - C/O # 2 CRB1.2 = 777162 ;CARD READER BINARY DATA CRB2.2 = 777164 ;CARD READER COMPRESSED DATA ; CRS.3 = 0 ;CAR READER STATUS - C/R # 3 CRB1.3 = 0 ;CARD READER BINARY DATA BUFFER CRB2.3 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRS.4 = 0 ;CARD READER STATUS -TFTSL BP G LA FOR FCKHE;C KS@TB ST TG:FLST TG RER FEUF BXTTER EACL ;F BUEX TLR C TSUPRRTEINP UCKLO ;SR@C0,34 #OV MT:YS TR HA CHALP AOR FUPT SE ;CHST,T00#1V MO: HALP AT YS TBR . ARCH. UM NOR FUPT SE ;CHST,T40 #OV MA:CHNO ;S ERCTRAHA CHALP AOR. UM NTSEPCC ANETIOU;R ONTISAERNVCOD ARBOEY KLENDHAO TNETIOU;R ;R TEISEG RRKWO ; 0X:NVAC EDRTVEON C #ITEX ;5 %TS R VNACE BN T UNCOR HA CIISC AOMFR1 ;- %2C DE X NVACR RO X NVACR RO # ALCT OTETARO ;X NVACR RO X NVAC7, #IC B ARCHI CIASE ORST ;) (1,-.HANGE WHEN KEY SWITCH IS INSTALLED ********** RTSK2: CMP @#SWR,#2 ; FOREGROUND OR SYSTEM ? BEQ RTSK3 ; BR IF YES CMP @#SWR,#1 ; BACKGROUND ? BNE RTIM5 ;NO, BRANCH RTSK3: MOV #FWASC,-(SP) EMT ASCBIN ; CONVERT ASCII STRING TO BINARY MOV (SP)+,R4 TST (SP)+ CMP R4,#TASMAX ; WITHIN SYSTEM LIMITS BGT RTSK1 CMP R4,#OVTMIN BL #100,R0 ; CHECK INPUT FROM LAST SECTOR OF TRACK 0 MOV #INBUF,R1 1$: CMP #52525,(R1)+ BNE 2$ SOB R0,1$ BR CMPX1 2$: BEQ CMPX1 ;COMPARE SECOND WORD MOV #21,ERCOUNT ;SETUP ERROR COUNT MOV INBUF,WORK ;INCORRECT DATA MOV #52525,WORK1 ;CORRECT DATA ER21: JSR %5,STAER1 ;REPORT ADDR 377 HAE BAD DATA ;****WRD1=THE DATA THAT SHOULD HAVE BEEN IN ADDR. 3777**** ;****WRD2=THE DATA READ FROM ADDR. 3777**** BR SPIRAL ;LOOP ON ER C/R # 4 CRB1.4 = 0 ;CARD READER BINARY DATA BUFFER CRB2.4 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRVC.1 = 230 ; C/R # 1 INTERRUPT VECTOR CRVC.2 = 230 ;C/R # 2 INTERRUPT VECTOR CRVC.3 = 0 ;C/R # 3 INTERRUPT VECTOR CRVC.4 = 0 ;C/R # 4 INTERRUPT VECTOR .PAGE ;********************************************************************** ;* %3B OV M I#CIASP UET;S %30,#6D AD # ALCT ONTCAFINIIG SSTEA LTELASO;I3 ,%707717 #IC B %3X,NVACV MO: VNAC %12, %DD A ARCHI CIASF O;# %2+,5) (OV M DRADI CIAS ;1 ,%)+(5V MO D TEERNVCOE BTO# F OUEAL;VX NVAC+,5)@(V MO: NVCO ;; EDRTVEON CBEO TR.HA CIISC AOFR BEUM NHE=TI#CIAS ;G INGOS IIISC AREHE WOFB LSE=YT BDRAD ;D TEERNVCOE BTOR BEUM NOFS ESDRAD#=DRAD ;V ON,C%5SR;J WSLOOL FASE INUTROR TEEN ;; NETIOU RRTVEON CIISC ATOL TAOC ;; ;E AGSSMET EX NSSCERO PGO ;S YP TBR E ER HESGOE AGSSMEF O*T RTSK1 MOV R4,TSKNO ; SAVE TASK NUMBER JMP RLKGC ; PROCESS NEXT COMMAND .PAGE ; GET NEXT WORD FROM ROSLNK 3 CONTROL CARDS ; ; INPUT: RO = FWA OF TASK HEADER ; R1 = CHARACTER POINTER ; ; R2 IS USED AS A CHARACTER POINTER TO THE ASCII BUFFER ; ; OUTPUT: THE WORD WILL BE PLACED IN (TMASC) AND R3 WILL INDICATE DELIMITER ; R3 = 0 EQUAL SIGN ; R3 = 1 SEMI-COLON ; R3 = 2 COMMA ; R3 = 3 RIGHT PARENTHESIS ROR CMPX1: MOV #100,R0 1$: CMP #52525,(R1)+ BNE 2$ SOB R0,1$ BR LPSPI1 2$: BEQ LPSPI1 ;BRANCH IF DATA OK MOV #22,ERCOUNT ;SETUP ERROR COUNT MOV #52525,WORK1 ;CORRECT DATA MOV INBUF+2,WORK ;DATA READ FROM ADDR0 TK1 ER22: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=THE DATA THAT SHOULD BE IN ADDR. 0 OF TRACK 1 **** ;****WDR2=THE DATA READ FROMADDR.0 OF TRACK 1 **** SPIL5: JMP SPIRAL LPSPI1: BIT #BIT11,@SR ;LOOP ON TEST? BNE  ** ;* L I N E P R I N T E R E Q U A T E C A R D S ** ;* ** ;********************************************************************** NLP = 1 ;NUMBER OF LINE PRINTERS IN SYSTEM NLPRTY = 3 ;NUMBER OF L/P PRIORITY LEVELS LPBACK = 1 ;1 = BACKUP L/P WITH TTY BY OPER COMMAND LPVC.1 = 200 ;L/P SSREDD;A 0 : SBYP TE AGSSMEE YP TTOB SUP TYN OLLCA ;1 +MT EA:PSTY ITEX. ORATINRMTE ; TI R R.TONAMIER TOT NIFH NCRA;B SAYP TNE B ORATINRMTER FOK ECCH ;SBYP,T-1 #MP C SBYP TTOE AGSSMEF OSSREDD;AB PSTY0,@%V MO S ESDRADE AGSSMET EX NTOE ATPD;U %6,@#2D AD S ESDRADE AGSSMES INTAON CATTHS ESDRADT GE ;0 ,%%6 @OV MS:YP TR TEINPRE YPETEL TONS GESAES MIISC AOFS IEER S AUTTPOUO TNETIOUBRSU ;0 : ATPDTY PATYR B R.HA CPETYO ;G PDTY7, %SR J T.DAYP TTOE OD CLFE OV;MT DAYP,T12 #VBMO: PGTY R.HA CPETYO ;G&; GWORD: MOV R2,-(SP) MOV R4,-(SP) MOV #FWASC+6,R2 MOV #20040,R3 ; 2 SPACE CODES MOV R3,-(R2) MOV R3,-(R2) MOV R3,-(R2) GWD1: CMP #LWCRD,R1 ; IS CARD BUFFER EMPTY BEQ GWD3 ; BR IF AT END MOVB (R1)+,R4 ; GET CHARACTER CMP R4,#SPAC ; SPACE ? BEQ GWD1 ; YES BRANCH CLR R3 ; R3 = 0  SPIL5 .PAGE ; SPIRAL TEST EXT. ; ;WRITE TWO WORDS OF DATA ;STARTING WITH THE LAST ADDRESS OF TRACK0 ;DATA PATTERN = 25252 ;THEN READ THE DATA DOING ONE WORD ;X-FERS XSPIRL: BIS #BIT8,@DCS ; CLEAR MOV #340,@CSR ;LOCK UP PROCESSING MOV #1000,%6 ;SET UP STACK MOV 200,R0 ; SET UP 2 SECTORS OF DATA MOV #OUTBUF,R1 1$: MOV #25252,(R1)+ SOB R0,1$ MOV #200,WRDCT ; SET WORD COUNT FOR 2 SECTORS MOV #OUTBUF# 1 INTERRUPT VECTOR ADDRESS LPVC.2 = 200 ;L/P # 2 INTERRUPT VECTOR ADDRESS LPVC.3 = 000 ;L/P # 3 INTERRUPT VECTOR ADDRESS LPVC.4 = 000 ;L/P # 4 INTERRUPT VECTOR ADDRESS LPDT.1 = 765010 ;L/P # 1 DATA BUFFER I/O ADDRESS LPDT.2 = 765010 ;L/P # 2 DATA BUFFER I/O ADDRESS LPDT.3 = 0 ;L/P # 3 DATA BUFFER I/O ADDRESS LPDT.4 = 0 ;L/P # 4 DATA BUFFER I/O ADDRESS LFRG.1 = PDTY7, %SR J ATPDTYO TDECON URET RGEIARRCAE OV;MT DAYP,T15 #VBMO: PFTY ITEX ;7 %TS RT:XIYE T4 .-L BP . AGFLE ON DOR FITWA ;S TP @TBTS R TEINPRO TERCTRAHA CUTTPOU ;PB@TT,DAYP TVBMO T XIYE TNE B SR,@14IT#BT BI: PDTY PATYR B ATPDTYN IARCHE YP;T PDTY7, %SR J #" "IFH NCRA;B PGTYQ BE . #" "OR FCKHE C"."%T NO ;ATPDTY2,#4B MP C "."%F ICHANBR ;F YP TEQ B "."%R FOK ECCH ;ATPDTY5,#4B MP CC:YP T. ITEX. NEDO. ARCHR TONAMIER;T I RT . @" "OT NIFH NCRA;C PCTYE BN R TEACARCH" "@R FOK ECCH ;ATPDTY" CMP R4,#EQSN ; = ? BEQ GWEX ; YES INC R3 ; R3 = 1 CMP R4,#SCOL ; ; ? BEQ GWEX ; YES INC R3 ; R3 = 2 CMP R4,#COMA ; , ? BEQ GWEX ; YES INC R3 ; R3 = 3 CMP R4,#RPAR ; ) ? BNE GWD7 ; NO GWEX: MOV (SP)+,R4 MOV (SP)+,R2 RTS ,BUF ;SET UP CMA CLR TRACK ;SET UP DISK ADDR. MOV #77,DMA WRITE ;WRITE DATA TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS ;TEST FOR ERROR BPL X1SPIL ;BRANCH IF NO ERROR MOV @DCS,WORK MOV #23,ERCOUNT ;SET UP ERROR COUNT ER23: JSR %5,STAER ;REPORT CONTROL ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR XSPIRL X1SPIL: MOV #100,WRDCT ; SET UP FOR 100 WORD X-FER CLR TRACK  765012 ;L/P # 1 LINE FEED REGISTER LFRG.2 = 765012 ;L/P # 2 LINE FEED REGISTER LFRG.3 = 0 ;L/P # 3 LINE FEED REGISTER LFRG.4 = 0 ;L/P # 4 LINE FEED REGISTER CNT.1 = 765014 ;L/P # 1 WORD COUNT REGISTER CNT.2 = 765014 ;L/P # 2 WORD COUNT REGISTER CNT.3 = 0 ;L/P # 3 WORD COUNT REGISTER CNT.4 = 0 ;L/P # 4 WORD COUNT REGISTER CMD.1 = 765016 0,10 #PBCM R TEACARCHT GE ;ATPDTY+,0) (VBMO: PATY 0. RTOE AGSSMEF OSSREDD;A %00,@%V MO . ITEXP UET;S %6,@#2D AD S ESDRADE AGSSMES INTAON CATTHS ESDRADT GE ;0 ,%%6 @OV MP:TY R.TEINPRE YPETEL TONE AGSSMEI CIAST PUUT OTOE INUTROUB;S XTTEF ONELIE ONE YP TES;Y YP TBR T EX TOFS NELIF OESRISEA E YP TO!;N PSTYE BN 1 T+EML AL CHE TAS;W) (0,-+1MT#EP CM 0 ,%6) (OV MP:TREM ESIN LOFS IEER S APETY0=T+EM ;T EX TOFE IN LNE OPETY1=T+EM ;S LLCAT EME ODEC DTOE INUTRO ;; ;E INUTROT XI;E %5S RT 1 -  PC GWD7: MOVB R4,(R2)+ ; NO, PLACE CHARACTER IN TEMB CMP #LWASC,R2 ; COMPAIR CHAR POINTER WITH END OF TABLE BNE GWD1 ; NO MOV #71,R3 ; SET ERROR CODE BR GWDER GWD3: ; INSERT ROS CARD READ COMMAND MOV #CSIOB,-(SP) EMT CREAD ; READ A CARD MOV #FWCRD,R1 ; RESET CHARACTER POINTER CMP @R1,#DOLR ; ROS 3 CONTROL CARD BNE GWD1MOV #77,DMA ; SET UP DAR MOV #INBUF,BUF ;SET UP CMA READ ;READ DAR 3777 TSTB @DCS ;TEST FOR NOT READY BPL .-4 ;CONTROL STILL BUSY TST @DCS ;TEST FOR ERROR BPL X2SPIL ;BRANCH IF NO ERROR MOV #24,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;REPORT CONTROL REG ER24: JSR %5,STAER ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE THE ERROR **** BR XSPIRL X2SPIL: MOV #100,R0 ; CHECK INPUT FROM LAST SECTOR OF TRACK 0 MOV #IN ;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 ; 0AS1ME 0 S1ME 5 ED H 5AED H GESAES MRTPORE ;0 +MT E 3 GESAES MOFS ESDRAD ; D5HE D TEERNVCOE BTOT UNCOR ROER ; NTOURC E IISC ATOL TAOCT ERNVCO ;V ON,C%5R JS 6 E AGSSMEF OSSREDD;A A 10ES M RTVEON CBEO TTADA ; K1OR W IISC ATOL TAOCT ERNVCO ;V ON,C%5R JS 6 E AGSSMEF OSSREDD;A 0 S1ME D TEERNVCOE BTOA AT;D K OR W IISC ATOL TAOCT ERNVCO ;V ON,C%5R JS: R1AEST ;; ;S ERSTGIREO TWF OTSENNTCOE THD ANT UNCOR ROERT OREP RTOE INUTRO ;; NETIOU RITEX ;5 %TS R -1 0 S1ME 5 ED H 5A MOV #63,R3 ; SET ERROR CODE GWDER: JMP RLKER ; ERROR TSKND: ; REGSAV: MOV R4,-(SP) ; RK PUSHED BY "JSR" MOV R3,-(SP) ; SAVE REST MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) JMP (R5) ; ; REGPOP: TST (SP)+ ; POP UNNEEDED R5 MOV (SP)+,R0 MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 BUF,R1 1$: CMP #25252,(R1)+ BNE 2$ SOB R0,1$ BR X3SPIL 2$: MOV #25,ERCOUNT ;SET UP ERROR COUNT MOV #25252,WORK1 ;GOOD DATA MOV OUTBUF,WORK ;DATA DATA ER25: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=THE DATA THAT SHOULD BE IN ADDR.3777 OF TRACK 0 **** ;****WRD2=THE DATA THAT WAS READ FROM ADDR. 3777 OF TRACK 0 **** BR XSPIRL X3SPIL: INC TRACK ; SET UP TO READ FIRST SECTOR OF TRACK 1 CLR DMA READ ;READ D ; 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 PRED H GESAES MRTPORE ;0 +MT E 3 GESAES MOFS ESDRAD ; D5HE D TEERNVCOE BTOT UNCOR ROER ; NTOURC E IISC ATOL TAOCT ERNVCO ;V ON,C%5R JS 6 E AGSSMEF OSSREDD;A 0 S1ME D TEERNVCOE BTOA AT;D K OR W IISC ATOL TAOCT ERNVCO ;V ON,C%5R JS: ERTA S; ERSTGIREE ONF OTSENNTCOD ANT UNCOR ROERT OREP RTOE INUTRO ;; ;; ;; ;; EDNGHA COT NAS HSR ;G CHSRR B EDNGHA CAS HSR ;P AMSTE BN R @S1,RKWOP CM: HGRC SY ADRET NOL RONTCOR FOT AI;W SYBUCTL BP Y ADRET NOL RONTCOR FOT ES;T CS@DB ST TY:US RTS R5 ; TEXTIO: MOV #TXTLST,-(SP) EMT NOCKPT ; STAY IN CORE DURING I/O EMT DISCIO ; READ OR WRITE EMT CKPT ; ALLOW SWAP OUT TST TXTERR ; ANY ERRORS BNE LDR05 RTS PC LDR05: MOV #105,R3 ; LOAD ERROR CODE JMP RLKER .END ATA TSTB @DCS ;TEST FOR READY BPL .-4 ;CONTROL STILL BUSY TST @DCS ;TEST FOR ERROR BPL X4SPIL ;BRANCH IF NO ERROR MOV #26,ERCOUNT ;SET UP ERROR COUNT MOV @DCS,WORK ;REPORT CONTROL REG. ER26: JSR %5,STAER ;REPORT ERROR ;****WRD1=DISK CONTROL STATUS REG. AT THE TIME OF THE ERROR **** BR XSPIRL X4SPIL: MOV #100,R0 MOV #INBUF+100,R1 1$: CMP #25252,(R1)+ BNE 2$ SOB R0,1$ BR LPXSPIL ; BR IF 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^}Č ~1wj 1 ħ Ġ1@wtw&w8EE D@ f~  D+ŀ| n *-el.BE,I  5@ =C5@@w~Rĕ ^2    ށ ĕ\Ē1IJ  1ĕ\f d~" Ľ= f  ĕ=TB CD EA RND AGO ;S DC,@#5S BI T UNCOD OR WADLO ;WC,@777717 #OV M SSREDD ANTREUR CADLO ;MA@CF,BUIN #OV M EDADLOG RES ESDRADK IS;DR DA,@RKWOV MO K OR,W7737 #IC B RKWOL RO K OR WOL R RKWOL RO K OR WABSW K OR,WSR @OV M EDADLO. EG RR.DD AT.EXK IS;DE DA,@RKWOV MO K OR WOR R RKWOR RO K OR WOR R RKWOR RO K OR WOR R O. NSKDID ANK ACTRE THK AS;MK OR,W006017 #IC B RKWO1,RKWOV MO R SCHET;F1 RKWOR,@SV MO S DC,@T8BI #IS BP:AMST ;R BEUM NSKDIE THS ALQU E-7R9;S ERMBNUK ACTRE THS ALQU E-0R6;S METIALL DATA OK 2$: MOV #27,ERCOUNT ;SET UP ERROR COUNT MOV #25252,WORK1 ;GOOD DATA MOV INBUF,WORK ;DATA DATA ER27: JSR %5,STAER1 ;REPORT ERROR ;****WRD1=THE DATA THAT SHOULD BE IN ADDR. 0 OF TRACK 1 **** ;****WRD2=THE DATA THAT WAS READ FROM ADDR. 0 OF TRACK 1 **** X5SPIL: JMP XSPIRL LPXSPIL:BIT #BIT11,@SR ;LOOP ON TEST? BNE X5SPIL .PAGE CLRREG: CLR DMA ;CLEAR WORD ADDRESS CLR TRACK ;CLEAR TRACK ADDRESS ; ; DATAT: MOV SWRDCT,WRDCT MOV #LDAT,HRDER ;SETUP FOR 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 $ : 46w ,4 W z<4ķ5& & b4e4ķ5f `D` CD11z~b@ 4   =f@  J@ 3 11DA5@ =fP~ fÝY ANT AERSTGIREH TCWI SHE TGEANCHY MAR TORAPE OHE;T CKRA THE TCTLESEO TADRED OR WNE O AESDOE INUTROE TH ;Y CLTITA SCKRA T ACTLESEO TORATEROPE THS LEABENE INUTROS HI;T ; ; ;; ;; ;; CRW NET ECEL SSYBUT NOK IS;D CSLDSER B DYEA RLLTI SSKDI ;Y USKB DPL B DYEA ROT NSKDIR FOT ES;T CS@DB ST TY:USKB DT SET NOS IT BONTINCFU ;S DCEL SEQ B ET STSBIN IOCTUN FIS ;CS@D0,IT#BT BI G REL RONTCOO NT ISRV MO ;CS@DR,@SV MO S ESDRADT ENRRCUP UET;SA CM,@UFTBOU #OV M RDWO1 -NTOU CRDWOT SE ;WC,@777717 HARD ERROR MOV #340,@CSR ;LOCK UP PROCESSOR PRIORITY JSR %5,PASEL ;SET UP DATA BUFFERS LDAT: JSR %5,OPDSEL ;SET UP DISK ADDRESS BIT #BIT14,FLAG ;TEST FOR WRITE BEQ SLH ;TEST FOR WRITE CHECK MOV #OUTBUF,BUF ;SETUP OUTPUT BUFFER WRITE +100 ;WRITE WITH INT. ENABLED BIT #BIT9,@SR ;FIND OUT HOW TO WAIT FOR INT BNE WRWAIT ;WAIT WITH WAIT INSTRUCTION IOT ;WAIT IN BACKGROUND TEST BR SLH WRWAIT: MOV PRIORITY,@CSR WAIT ;WAIT FOR FLAG SLH: BIT #BIT13,FLAG ;TEST FOR WRITE CHECK BEQ E1145 SPL 7 .ENDC ; ; SET INTERRUPT LOCKOUT .ENDM ;  A7w@@hf7 d 5@rq 5rj5r~Rf5 rUr==ārp w B e @ee :J  H4 !~ E ĵķ4 N33 3}f 3ć -Z ه ~B~E =ı7n@^ć33f&@ ĄR #OV M TSUPRRTEINP UCKLO ;SR@C0,34 #OV MS:DCEL SR TEISEG RUSATSTL RONTCOK IS;D ;; 0ERSTGIREO NT;I LKOV MBR T SERE T SERE D EAAHK OO LVEMO ;0 ,%DS@AV MO: LKOV MR TEISEG RADHE AOKLO ;; ;R DBEL SR B ERFFBUA AT DTOINR SOV M ;BR@DR,@SV MO: BRLDSE ERSTGIRER FEUF BTADA ;; AELDSER B EG RXT EDRADK IS DTOINR SOV;ME DA,@SR @OV ME:DAEL SR TEISEG RORRR END AXT ESSREDD ASKDI ;; ARLDSER B EG RDRADK IS DTOINR SOV;MR DA,@SR @OV MR:DAEL SR TEISEG RSSREDD ASKDI ;; MALCSER B EG RDRADT ENRRCUO SH ;TEST FOR READ MOV #OUTBUF,BUF ;SETUP OUTPUT BUFFER MOV #340,@CSR WRCHECK +100 ;WRITE CHECK WITH INT. ENABLE BIT #BIT9,@SR ;FINDOUT HOW TO WAIT FOR INT. BNE WCWAIT ;WAIT WITH WAIT INSTRUCTION IOT ;WAIT IN BACKGROUND TEST BR ESH WCWAIT: MOV PRIORITY,@CSR WAIT ;WAIT FOR FLAG ESH: BIT #BIT12,FLAG ;TEST FOR READ BEQ REH ;CHECK BUFFER MOV #INBUF,BUF ;SETUP OUTPUT BUFFER BIC #3,FLAG ;CLEAR RE-READ COUNT DSKRD: MOV #340,@CSR JSR %5,ZBUF ;CLEAR BUFFER INC FLAG READ +~~2~ ~"NT ISRV MO ;MA@CR,@SV MO: MALCSE ERSTGIRES ESDRADT ENRRCU ;; WCEL SBR G RET UNCOD OR WTOINR SOV;M WC,@SR @OV MC:LWSE ERSTGIRET UNCOD OR;W ;R TEISEG RCHITSWE THA VIS ERSTGIREO I/E THN ;I TSBIT SEO TORATEROPE THW LOALO TNETIOU;R C SSPA @MP J OK 1 +MT E ERFFBUW NEE ITWR ;W DNWRR B ERFFBUK IS DEW NUPT SE ;UFSBDI7, %SR J ITWA R CS,@TYRIIOPRV MO 2 +1 .BR T IO 6 .+E BN ; R @S9,IT#BT BI 0 10 +CKHERC W ITWA R CS,@TYRIIOPRV MO 2 +1 .BR T ES TNDOUGRCKBA ; OT I +6 .NE B ITWAO TOW H100 ;READ + INT ENABLE BIT #BIT9,@SR ;FIND OUT HOW TO WAIT FOR INT. BNE RDWAIT ;WAIT WITH WAIT INSTRUCTION IOT BR ELH RDWAIT: MOV PRIORITY,@CSR ;SET UP PRIORITY WAIT ;WAIT FOR FLAG ELH: BIT #BIT12,@SR BNE ADRD JSR %5,COMPARE ;COMPARE OUTBUFFER TO INBUFFER ADRD: JSR %5,OVRFLO ;TEST FOR EXTRA DATE BREAKS MOV FLAG,WORK ;CHECK DISK RE-READ COUNT BIC #177774,WORK ;DO 3 RE-READS. CMP #3,WORK BNE DSKRD ;DO ANOTHER RE-READ REH: BIT #BIT8,@SR BNE DATAT JSR %7,DISBUF ;GO SET UP DI~!~~TULSA ~2222@2@dONK ECCH ;SR,@T9BI #IT B 00+1E ITWR: NWRD WR DEHRL,FAOW#PV MO S ESDRADT ENRRCUP UET;SF BUF,BUUT#OV MO R FEUF BTADAE ATEREN;GL SEPA5, %SR J CTRD,WCTRDSWV MO T UNCOD OR WUPET;ST DCWR,S0020 #OV M CKRA TLR C MA DLR C RNTEAT PUPT SE ;NUAT,P20 #OV M %60,00#1V MO C SSPA),(6V MO K IS DHE TARLE;CS DC,@T8BI #IS BL:FAOW PN IOETPLOM CAT" OK "RTPORE ;R CUOC ; EYTHF IRSROERT OREP RND ACKHE CTERI;W RNTEAT P525212H IT;W SKDIE ETPLOM CHE TTERI WTOE INUTRO ;; ;; ;; SKDIK ECCHO ;G FLWR PBR T AI WGOSK BUFFER. BR LDAT MSTR: TST FLAG BPL .+6 ;UNDER PROGRAM CONTROL JMP EXTPP ;OPERATOR SELECTED PATTERN ADD #2,PATNU ;INC PATTERN INDEX CMP #44,PATNU BNE DATAT ;NOT LAST PATTERN EXIT CLR PATNU ;LAST PATTERN EXIT ; ;THIS IS A RANDOM DATA, RANDOM ADDRESS ;AND RANDOM WORD COUNT ; ;WORD COUNT CAN BE EQUAL TO OR LESS THAN 1000 WORDS ; RANEX: MOV #-1000,PASSC MOV #1000,%6 BIC #BIT9,FLAG MOV #RANER,HRDER ;SET UP FOR HARD ERROR MOV PRIORITY,@CSR ;SET PRIORITY TO LEVEL 5 WRLG: MO d2~zV~~j~P UOT NDSONEC SWO;T NTMCTI XNE B R METI1 ;+ RKWOC IN T SERE: NTMCTI XR METID ONEC STYENTWP UET;SK OR,W0.30#-V MO 6 ,%0010 #OV M ORCTVEL AI FEROW PETES;R4 ,2DNWR#PV MO: UPWR P; LTHA T ARSTREP UET;S4 ,2UPWR#PV MO K IS DHE TARLE;CS DC,@T8BI #IS BN:RDPW ;L AI FEROW PNGRIDUK IS DRTBO ATOE INUTRO ;; L RFPWR B SKKDCHR B ERFFBUT EX NCKHE;CF BUIS,D%7R JS T AI W SR@CY,ITORRI POV M 12.+R B NDOUGRCKBAN IITWA ; OT I +6 .NE B SR,@T9BI #IT B 00+1K ECCHWR: SKKDCH 260,34 #OV M C.VEL AI F V #3,WORK ;GENERATE RANDOM WORD MOV #OUTBUF,%1 JSR %5,RANDOM BIC #177000,OUTBUF ;MASK FOR WORD LENGTH=1K BEQ WRLG MOV OUTBUF,WRDCT ;SET UP WORD COUNT MOV OUTBUF+2,DMA ;SET UP DAR ADD WRDCT,DMA BCS WRLG MOV OUTBUF+2,DMA BIC #177774,OUTBUF+4 MOV OUTBUF+4,TRACK ;SET UP DAE MOV WRDCT,WORK ;GENERATE RANDOM MOV #OUTBUF,%1 ;DATA BUFFER JSR %5,RANDOM MOV #OUTBUF,BUF BIS #BIT8,@DCS ;CLEAR THE DISK WRITE +100 ;WRITE DATA BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@Cw 2222~ZW~~Jd~EROW PUPT SE ;24N,RDPW #OV M ORRR ERDHAP UET;SR DEHRL,RFPW #OV M CKRA TLR C MA DLR CL:RFPW SKDIN O525212E ITWR ;ALWFPO7, %SR J CKTA SUPT SE ;%60,00#1V MO: T2PF ;. GHOUHR;T EDCLCYY ELETPLOM CAS HERSTGIRES ESDRADE TH ;L TIUNL AI FEROW PERTHNO ATEEACRT NOO ;D ;* **R.CUOCD ULHO SRSROERO *N** ;S ORRR EOR FCKHE CND;A INGA ASKDIK ECCHE ITWRK AC BESOM CEROW PENWH ;L AI FEROW POR FITWAD ANK IS DCKHE CTERI;W K""OT OREP;R RNTEAT P525212H IT WSKDIE ETPLOM CTERI;W ROZEK IS;D #2T ES TILFAR WEPO ;; ;SR WAIT WRCHECK +100 ;WRITE CHECK DATA BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT MOV #INBUF,BUF ;SET UP BUFFER JSR %5,ZBUF ;CLEAR BUFFER AREA READ +100 ;READ DATA BIT #BIT9,@SR BNE .+6 IOT BR .+12 MOV PRIORITY,@CSR WAIT JSR %5,COMPARE ;COMPARE OUT BUFFER TO IN BUFFER JSR %5,OVRFLO ;TEST FOR EXTRA DATA BREAKS RANER: BIT #BIT9,FLAG ;CHECK FOR ERROR BEQ EXRAX BIC #BIT9,FLAG JSR %5,CONV DMA MES1 6 JSR %5,CONV TRACK MES1A 2 JSR %5,C~:s~~*; ;; ;K IS DCKHE CGO ;K CHUPP JM ITWAO GUPT NOS NDCOSEO TW ;T CNIM TNE B ERIM T+1 ;K OR WNC I ETES RT:CNIM TR METID ONEC STYENTWP UET;SK OR,W0.30#-V MO 6 ,%0010 #OV M 24N,OW#DV MO: UP ;T AL H ORCTVEL AI FEROW PET;S 24P,#UV MO K IS DRTBO;AS DC,@T8BI #IS BN:OW D; ;T AL HND ASKDIT ORAB ;E INUTRON OW DEROW;P ; ILFAR WEPO ; R HEOTANR FOT AI WGO ;T WAPFP JM T DAHK CBR R FEUF BSKDIW NEP UET;SF BUIS,D%7R JS T AI W SR@CY,ITORRI POV M 12.+R B OT I +6 .NE B SR,@T9BI #IT B 00ONV WRDCT MES3 4 EMT+0 HED6 MES1A MES1 MES3 -1 EXRAX: INC PASSC ;HAVE WE DONE IT 1000 TIMES BNE WRLG ;BRANCH IF NO BIT #BIT11,@SR ;LOOP ON TEST BEQ .+6 ;BRANCH IF YES JMP RANEX ; ;CHECK FOR MULTI DISK MODE ;IF IN MULTI DISK MODE REPORT "END" ;IF LAST DISK ON SYSTEM HAS BEEN ;EXERCISED. ; ; CLR DMA CLR TRACK BIT #BIT11,FLAG ;ARE WE IN MULTI DISK MODE BEQ REPOEN ;REPORT "END" MOV FLAG,WORK ;WHAT DISK ARE WE ON BIC #177743,WORK ;IF LAST DISK ON SYSTEM CMP ~ ~~~ +1K ECCHWR: ATKDCH ORRR ERDHAR FOP UET;SR DEHRK,CHUP #OV M CKRA TLR C MA DLR C SKDIE THR EACL ;CS@D8,IT#BS BI: HKPC U; ILFAR WEPOR TEAFA AT DCKHE CTOE INUTRO ;T WAPFR B WRBYMYR B ERFFBUK IS DEW NUPT SE ;UFSBDI7, %SR J ITWA R CS,@TYRIIOPRV MO 2 +1 .BR T IO 6 .+E BN R @S9,IT#BT BI 0 10 +TERI WR:YWYB M6 ,240#3V MO . EC VILFAR WEPOP UET;S4 ,2WNDO #OV M ORRR ERDHAR FOP UET;SR DEHRT,WAPF #OV M CKRA TLR C MA DLR C SKDIR EACL ;CS@D8,IT#BS BI: ATFW PK IS DON2 2525 1TERI;WL FAOW,P%7R JS K WORK,DSKNOR ;REPORT END BEQ REPOEN ;REPORT "END" LAST DISK ADD #4,FLAG ;INC. DISK NO. BR EXTPP ;EXERCISE DISK REPOEN: EMT +1 END ;REPORT END OF PASS BIC #34,FLAG EXTPP: JMP ADTST ;RECYCLE ; ;ENTER DISK HANDLER BY THE TRAP INSTRUCTION ;ARGUMENT TO TRAP INSTRUCTION IS TWO ORDER ;BYTE OF THE CONTROL REGISTER. ; DISK: MOV DAR,R5 ; SET UP TO LOAD DISK REG MOV TRACK,R0 BIC #177000,R0 ASH #6,R0 MOV DMA,R1 BIC ~(~~r7~ACSTP UET;S6 ,%0010 #OV M1:FT P; ;* **LEABPTCEACD REDESION CISR ROERE ONY NL*O** ;; RSROERR FOK IS DHE TCKHE CTERI WND AUPR WEPO ;; LTHAD ANT INPOY TRENW NEP TUSE ;R FENSRA TRTBO ARSCUOCL AI FEROW PENWH ;N ERTTPAE AM SHE TNGTIRI WRTTA;S K""OT OREP R ;N ERTTPA2 2525 1THWIK IS DTELEMPCOE ITWR; ROZEK IS D ;1 "STTEL AI FEROW P11RF ; TI RX:TI R; LTHA O IM T +1MT E IT BCERA TARLE;CR CS,@T4BI #IC B SR@C0,34 #OV M UT OEDIM TSTTED UNROKGAC BRTPORE ;4 W-NCXIR B +4 .EQ B SSPAC IN W NCXIL BP #177700,R1 ADD R1,R0 MOV R0,(R5) ; LOAD DAR MOV BUF,-(R5) ; LOAD CMA MOV WRDCT,-(R5) ; LOAD WC NEG (R5) MOV (6),%4 MOV -(4),WORK ; BIC #177600,WORK ;MASK FUNCTION BITS MOV WORK,-(5) ;LOAD FUNCTION REG. RTI ;RETURN FROM TRAP ; ; ; ; ; ; ; ;RF11 DISK INTERRUPT HANDLER ;ROUTINE CONTINUES ON ERRORS ; DKINT: BIC #BIT4,@CSR ;CLEAR TRACE BIT TST @DCS ;TEST FOR ERROR BPL INTEXT ;BRANCH IF NO ERROR ~bF~~RU~ 2 W-NCXIB ST T -2CWIN XNC IW:NCXI #0R CL T BIE ACTRT SE ;SR@C4,IT#BS BI E AS BMETIP UET;SS AS,P0010#-V MO 6 1LR C APTRE ACTRP UET;S4 ,1IXRT #OV MT:AIXW ;S PTRUERNT IOR FSTTED UNROKGAC;B ; INGA ARTTA STELEMPCOK IS;D0 -1UFWBNER B ERFFBUW NEE ITWRO ;G UFWBNER B ERFFBUK IS DEW NUPT SE ;UFSBDI7, %SR J ITWA R CS,@TYRIIOPRV MO 2 +1 .BR T IO 6 .+E BN R @S9,IT#BT BI A AT DCKHE CTERI;W 00+1CKHERC W ITWA R CS,@TYRIIOPRV MO 2 +1 .BR T IO 6 .+E BN R @S9,IT#BT BI R FEUF BTERI;W 00  BIS #BIT9,FLAG ;SET ERROR BIT MOV @DAE,WORK ;REPORT ERROR BIC #177700,WORK ;MASK ADDRESS EXT. BITS. JSR %5,CONV ;CONVERT TO ASCII WORK MES1A 2 EMT+1 HED2 MOV @DCS,WORK ;TEST FOR READ BIC #177770,WORK CMP #4,WORK BNE DELMES ;IF READING REPORT WHICH READ MOV FLAG,WORK BIC #177774,WORK JSR %5,CONV WORK MES13 1 EMT+1 MES13 DELMES: MOV @DAR,WORK ;SET UP LOWER 16 BITS OF ADDR. DEC WORK JSR %5,CONV ;CONVERT TO ASCII WORK MES1 6 EMT+0 MES1A MES1 -1"~Bd~~2s~+1TERI W UF,BUFTBOU #OV M EDATEREN GERFFBUA AT DEW;NM DOAN,R%5R JS 1 ,%UFTBOU #OV M ERFFBUM DOAN ROR FUPT SE ;RKWOT,DCWRV MO: UFWBNE CKRA TLR C MA DLR C ORRR ERDHAR FOP UET;SR DEHRF,BUEW#NV MO L VELEY ITORRI PUPT SE ;SR@C7,IT#BV MO T DCWRT,DCWR SOV M CTRDSWR RO T DCWR,SVESAV MO T UNCOD OR WEW NUPT SE ;VESAF,BUUT#OB SU ; E AV,S0000#2B SU 6 ,%0010 #OV M 6LR C APTRS BUO I/E ORSTRE ;4 6, #OV MF:REAX M; RSCUOCR ROERS BUO I/N HE WREHER TEEN ;; RYMOMEE NCREFEREO ;G EFXR EBR . EF RRYMOMET $ MOV @DCS,WORK ;SET UP STATUS JSR %5,CONV WORK MES2 6 EMT+1 MES2 BIT #BIT14,@DCS ;TEST FOR HARD ERROR BEQ SOFTER ;GO AND CONTINUE SOFT ERROR MOV @DAE,WORK ;FETCH ERROR EXT. BITS SWAB WORK BIC #177400,WORK JSR %5,CONV ;CONVERT TO ASCII WORK MES2A 3 EMT+0 HED5A MES2A -1 BIS #BIT8,@DCS ;CLEAR THE DISK MOV #1000,%6 BIT #BIT10,@SR ;HALT ON ERROR BEQ .+4 HALT ;YES HALT BIT 10 SET IN SR JMP @HRDER ;EXIT HARD ERROR SOFTER: TST @WC ;CHECK FOR X-FER DONE &~"~ ~EX NOR FUPT SE ;VESA0,0020 #DD A G.REO I/O TDEMAE NCREFERET AS;L EFXRMAR B LTHA K 32N HA TSSLEF ICHANBR ;6 .+E BN K 28N HA TERATRE GOR FSTTE ;VESA6,4477#1P CM Y OREM MCEENEREF;R VESA @ST TF:REEX 4KR FOP UET;SE AV,S4674#1V MO 6 0,34 #OV M APTRS BUO I/P UET;S4 F,REAX#MV MO 6 ,%0010 #OV M LSVELEY ITORRI PUPK OC;LR CS,@40#3V MO K IS DHE TARLE;CS DC,@T8BI #IS BN:MEXT E; TADAE THS CKHE CTERI WND AESITWRD AN ;E IZ SATTHR FEUF BOMNDRAA S TERANEGE ;T IENTHM TEYS SHE TONS ;I RYMOMEH UC MOW HES( BEQ INTEXT ;EXIT FROM ROUTINE BIT #BIT9,@SR BEQ .+6 SUB #2,(6) ;X-FER NOT DONE SET UP FOR RETURN BIT #BIT10,@SR ;HALT ON ERROR BEQ .+4 HALT ;YES HALT BIT10 SET IN SR BIS #BIT0,@DCS ;SET GO AND CONTINUE RTI ;RETURN TO WAIT INSTR. ; ; INTEXT: BIT #BIT13,@SR ;HALT ON COMPLETION FLAG BEQ .+4 HALT ;YES BIT 13 SET IN SR HALT BIT #BIT9,@SR BNE .+6 MOV #774,%6 ;RESET STACK RTI ;EXIT ; ; ;ROUTINE TO SET UP DAR AND DAE ;FROM SR AND CONVERSATION ;ENTER FROM JSR %5,OPD*~~ q>@q)eJ x   N Ê <%! ~z,c ѐjˋÜ`E &  P   cL|wZ ɋr߷ p7INRMTEDEM RAOGPRE TH ;R SECIEREXY OREM MEDNDTEEX ; ;; RDWOT EX NCHET;F RDHW CBR 1 - S6ME 4 ES M D3HE E INUTROT OUE YP TLLCA ;0 +MT E 6 S6ME A AT;D X NVAC I CIASO TALCT ORTVEON;C NVCO5, %SR J VXCN,AVXCN@AV MO X NVAC2, #UB S VXCN,A%4V MO 6 4 ES M SSREDD;A X NVAC I CIASO TALCT O 1RTVEON;C NVCO5, %SR J VXCN,A#2B SU X NVAC4, %OV M IT BORRR EET;SG LA,FT9BI #IS B ROZES IRDWO ;D WRCHQ BE D OR WROZER FOT ES;T )+(4T TS: EXKN CE ETPLOM CIST ES;T %5S RT D OR WXTNEK ECCH ;X NE,SEL OPDSEL: BIT #BIT7,@SR ;DOES SR CONTAIN TRACK # BNE .+4 RTS %5 MOV @SR,R0 ; FETCH SW BIC #177600,R0 MOV R0,TRACK ADD R0,DMA RTS %5 ;EXIT ; ;ROUTINE TO SETUP DISK BUFFERS ;ADD WORD COUNT TO STARTING DISK ADDRESSES ;COMPARE CALCULATED ADDRESS TO TERMINATING ADDRESS ; DISBUF: ADD WRDCT,DMA ;ADD WORD COUNT TO LOWER 16 BITS BCC COMDAR INC TRACK ;OVERFLOW ADD ONE TO TRACK COMDAR: CMP DMA,@DAR ;COMPARE LOWER 16 BITS BEQ CMDACKE BN E ETPLOM CSTTES ;I0 00+2UFNB#I4, %MP CD:WRCH %4F,BUIN #DD A %4L RO T UNCOD OR WDD;A4 ,%CTRD WOV MO:FLVR O; ;R ROERN AISW LORFVE ONTOU CRDWOR TEAFD REERSFANTRA AT DNY;A RSFENSRA TTADAL NAIOITDD AOR FSTTEO TNETIOU;R ;; ;; UFNZR B RDWOE THR EACL ;+ 4) (LR CR:EACL NETIOU RITEX ;5 %TS R RDWOT EX NROZE ;R EACLE BN E ETPLOM CNETIOU RHE TIS ;0020F+BUIN,#%4P CM: UFNZ ERFFBUINF ORTTA SCHET;F4 ,%UFNB#IV MO: UFZB ;; NGDIEA RREFOBER FEUF BROZE ;R FEUF BUTNP ITADAO ER ZTOE INUTRO ;; 0E BIS #BIT6,FLAG ; CMDAE: MOV @DAE,WORK1 ;FETCH EXT. ADDR BITS BIC #177740,WORK1 ;MASK TRACK AND DISK ADDR MOV FLAG,WORK ;SET UP DISK ADDRESS BIC #177743,WORK ADD TRACK,WORK BIC #177740,WORK CMP WORK,WORK1 ;ARE THEY EQUAL BNE ERADR ;ERROR IN DAE REG TSTB FLAG ;CHECK FOR LAST DISK BUFFER BPL EXTCME CLR DMA ;CLEAR LOWER 16 BITS CLR TRACK ;CLEAR EXT. ADDR. BITS. BIC #200,FLAG ADD #2,(6) ;INC STOCK POINTER MOV SWRDCT,WRDCT BR EXTDR ;EXIT EXTCME: BIC #177774,WORK1 ;MASK ;; ;; ;; RDWOT EX NREPAOM CGO ;C INRD WBR R SINT SE0 1IT BLTHAS YE ; LTHA 4 .+Q BE R ROERN OLTHA ;SR,@10IT#BT BI 1 - S6ME 5 ES M S1ME A S1ME 3 S1ME 1 ED H GESAES MNTRI;P +0T EM 1 3 S1ME K OR W NVCO5, %SR J OND REURCC OORRR;E RKWO4,7777#1C BI E THD EA RCHHI;WK OR,WAGFLV MO 6 6 ES M RKWO I CIASO TRTVEON;C NVCO5, %SR J TADAD BAH TCFE ;RKWO1,AV@SV MO 6 5 ES M RKWO I CIASO TTADAD OO GRTVEON;C NVCO5, %SR J TADAD OO GCHET;FK OR,WVESA @OV M 2 1AES M K1OR W4 EXT. TRACK BITS CMP #3,WORK1 ;COMPARE FOR LAST TRACK BNE AKH ;NOT LAST TRACK EXIT MOV @DAR,WORK ;FETCH LOWER 16 BITS OF ADDRESS ADD WRDCT,WORK ;WILL DISK OVERFLOW BCC AKH BIS #200,FLAG MOV @DAR,WRDCT ;DISK WILL OVERFLOW COM WRDCT ;SET UP NEW WORD COUNT INC WRDCT ;MAKE TWO'S COMP. AKH: MOV @DAE,TRACK BIC #177774,TRACK ;MASK TRACK BITS MOV @DAR,DMA ;LOWER 16 BITS OF ADDRESS BIT #BIT6,FLAG ;REPORT ADDRESS ERROR BNE .+4 EXTDR: RTS %7 ;EXIT ERADR: JSR %5,CONV ;CONVERT DMA REG IISC ATOR DD ACKRA TRTVEON;C NVCO5, %SR J 6 S1ME K OR W IISC ATOR DD ARDWOT ERNVCO ;V ON,C%5R JS 1 RKWO3,RKWOS BI 3 RKWO3,7477#1C BI 3 RKWOG,LA FOV M K1OR WNC I EDNTMERENC IBEE DAD ULHO;S +6 .CC B DRADG INILFAE ATULLCCA ;RKWO2,RKWOD AD ; 1 RKWOK,ACTRV MO R DD ASKDIG INRTTA SCHET;FK OR,WMA DOV M IT BORRR EET;SG LA,FT9BI #IS BR:ERWD ;E INUTROS HI TITEX ;5 %TS RM:DA AD OR WXTNEE ARMPCO ;P CMRD WBR 1 AV,S#2D AD E AV,S#2D AD E INUTROT XI;E AMADQ BE D KEECCHR FEUF BTELEMPCOS ;I2 RKWO8 COUNT TO ASCII DMA MES1 6 JSR %5,CONV ;CONVERT TRACK REG COUNT TO ASCII WORK1 MES1A 2 EMT +0 ;REPORT ERROR HED4 MES1A MES1 -1 BIC #BIT6,FLAG CLR DMA ;DISK ADDRESS ERROR RE-START PROG. CLR TRACK BIT #BIT10,@SR ;HALT ON ERROR BEQ .+4 HALT ;SWITCH 10 SET IN SR HALT RTS %7 ; ; ; ;ROUTINE TO SELECT DATA PATTERNS FOR TEST ; ;ENTER FROM JSR %5 PASEL ; PASEL: MOV PATNU,%0 ;SET UP PATTERN NUMBER MOV WRDCT,WORK ;SET UP WORK MOV #OUTBUF,%1 ;LOC. OF OUTBUFFER T,DCWRP CM T UNCOD OR W+1 ;2 RKWOC IN: NCDIWR ORRR EIND OR;W RRDE WNE B RSFEUF BREPAOM;C1 AV@SE,AV@SP CM: MPDCWR ERNTOI PERFFBUN IUPT SE ;V1SAF,BUIN #OV M ERNTOI PERFFBUUT OUPT SE ;VESAF,BUUT#OV MO T UNCOD OR;W K2OR WLR:CREPAOM C; ;A AT DAD BXXXXXXA AT DODGOX XXXX XAR DXXXXXXE DAX XORRR ETADA ;R NEAN MNGWILOOL;F E THN IEDRTPOREE BLLWIR ROERN AERFFBUN- IHE;T ND AERFFBUT-OUE THN EETWBES URCC OORRR EANF ;I NETIOU RONISARMPCOA AT;D ;; ;A AT DOMNDRA1 T2PA ;3 3030 00:T2PA 200500: 17AT P<CMP #42,%0 ;TEST FOR RANDOM DATA NUMBER BEQ RANDOM ;GO GENERATE RANDOM DATA FILDAT: MOV PAT0(0),(1)+ ;FILL BUFFER DEC WORK ;DEC. WORK COUNT TST WORK ;TEST FOR LAST WORK BNE FILDAT ;LOAD NEXT WORD RTS %5 ;BUFFER FULL ; ;RANDOM DATA ; ; ;RANDOM DATA GENERATOR SUBROUTINE RANDOM: MOV LONUM,%0 ;SET UP R0 WITH 5 DIGITS LOW MOV HINUM,%4 ;SET UP R1 WITH 5 DIGITS HIGH MOV #7,%3 ;SET UP SHIFT COUNT CLR %2 ;CLEAR R2 SHIFT: ASL %0 ;SHIFT R0 LEFT AND ROL %4 ;ROTATE CARRY INTO LSB OF5 0000 16:T1PA 010000: 15AT P6 6363 04:T1PA 636313: 13AT P2 1004 02:T1PA 377717: 11AT P2 2525 10:T1PA 252505: T7PA 070707: T6PA 707010: T5PA 000010: T4PA 673204: T3PA 104513: T2PA 777717: T1PA 00:AT P; NSERTTPAA AT D11RF ;; ENEV . ; ;0 : UMIN H0 : UMON LM RAOGPRT N URET;R %5S RT: ENXG EM DOAN RNE B RKWOC DE M RAOGPRR FOM NUHID OL;H )+(14, %OV M UMIN HINK AC BR1T PU ;UMIN,H%4V MO N GEEXQ BE K OR WEC D AMGRRO POR FUMON LLDHO ;+ 1),(%0V MO M NULON ICKBA0 RUT;PM NULO0, %OV M R1 INTO ROL %2 ;ROTATE CARRY OUT OF R1 INTO R2 DEC %3 ;DECREMENT R3 BNE SHIFT ;CONTINUE SHIFT LOOP ADD LONUM,%0 ;ADDN IN NUMBER TO MAKE X 129 ADC %4 ;PROPOGATE CARRY ADD HINUM,%4 ;ADDN IN NUMBER TO MAKE X 129 ADC %2 ;PROPOGATE CARRY ADD #1057,%0 ;ADDN LOW CONSTANT ADC %4 ;PROPOGATE CARRIES ADC %2 ;PROPOGATE AGAN ADD #47401,%4 ;ADDN HIGH CONSTANT ADC %2 ;PROPOGATE CARRY ADD #6,%2 ;ADDN HIGHEST CONSTANT ADD %2,%0 ;REPRIME R0 WITH HIGH DIGIT ADC %4 ;PROPOGATE CARRY