TITLE RUN PDP-10 MAINT A=1 B=2 C=3 D=4 T=15 I=16 P=17 USRO==1 USRI==2 UTIC==3 TYOC==4 BUFL==100 LOC 42 JSR INT LOC 100 BEG: MOVEI P,PDL-1 MOVEI A,0 MOVEI B,1_ ;ENABLE INTERRUPT .SETM2 A, .OPEN TYOC,[SIXBIT / !TTY/] .VALUE MOVE A,[440700,,[ASCIZ /THROW TTY SWITCH TO PDP10 /]] ILDB B,A JUMPE B,BEG1 PUSHJ P,TYO JRST .-3 BEG1: .SUSET [.RUNAME,,A] ;READ MY USER NAME FOR INFERIOR OPEN MOVEM A,OUSRU MOVEI A,22 ;BLOCK INPUT, PDP10 INTERRUPT HRLM A,OUSR .OPEN USRI,OUSR .VALUE MOVEI A,3 ;BLOCK OUTPUT HRLM A,OUSR .OPEN USRO,OUSR .VALUE MOVE A,[SIXBIT /MAINT/] ;DISK FILES UNDER "MAINT" .WSNAM A, MOVEI I,0 LDLP: SKIPN A,PRGM(I) JRST LDLE ;NOT FOUND,SKIP THIS ONE MOVEM A,OUTIC+2 ;SECOND NAME MOVE A,[SIXBIT /PART/] PUSHJ P,SIXO PUSHJ P,TSPAC MOVE A,PRGM(I) PUSHJ P,SIXO PUSHJ P,CRLF .OPEN UTIC,OUTIC ;READ MAINT PROGRAM JRST LDLE ;FILE NOT FOUND MOVEI T,41 MOVEI A,[JRST 41] ;CLOBBER UUO HANDLER OF PREVIOUS PROGRAM PUSHJ P,DEP .RESET USRO, ;CLEAR CORE, 41=>MA PUSHJ P,ALD ;LOAD JOB .ACCESS USRO,[77] MOVE A,[%PROG-%END,,%PROG] .IOT USRO,A ;LOAD IN STARTING CODE MOVE A,RUNTIM(I) MOVEI T,%TIME ;AFTER JSP 17,4001 PUSHJ P,DEP MOVEI T,%NAME MOVE A,PRGM(I) LSH A,-30. ADDI A,40 PUSHJ P,DEP ;IDENTIFY CORE IMAGE MOVEI T,41 MOVE A,[JRST %BEG] PUSHJ P,DEP ;RUNNING MOVSI A,1 AOSE DONE' ;PDP10 JOB ALREADY FINISHED? LDWT: .SLEEP A, LDLE: CAIGE I,NPRGM-1 AOJA I,LDLP MOVEI I,0 JRST LDLP INT: 0 0 MOVEM A,INT ;SAVE A HRRZ A,INT+1 ;PICK UP PC CAIN A,LDWT ;ARE WE WAITING FOR JOB DONE? .DISMIS [LDLE] ;YES, FLUSH TO NEW PROGRAM SETOM DONE ;NO, SET FLAG TO REMEMBER PDP10 DONE MOVE A,INT ;RESTORE A .DISMIS INT+1 ;CONTINUE DEP: .ACCESS USRO,T HRROI B,A .IOT USRO,B POPJ P, FETCH: .ACCESS USRI,T HRROI B,A .IOT USRI,B POPJ P, SIXO: JUMPE A,CPOPJ MOVEI B,0 ROTC A,6 ADDI B,40 PUSHJ P,TYO JRST SIXO CONSTANTS %PROG: OFFSET 77-. 0 ;FLAG FOR DONE %BEG: MOVE B,[SIXBIT /PART/] %LUP: MOVEI A,0 ROTC A,6 ADDI A,40 .T JUMPN B,%LUP MOVEI A,40 .T MOVE A,%NAME .T MOVEI A,15 .T MOVEI A,12 .T JSP 17,4001 %TIME: 0 CONO 20,20 ;FLAG FOR DONE JRST . ;WAIT FOR OBLITERATION %NAME: 0 %TYO: CONSZ TTY,20 JRST .-1 DATAO TTY,A JRST (17) .T=JSP 17,%TYO CONSTANTS OFFSET 0 %END: TSPAC: MOVEI B,40 TYO: .IOT TYOC,B CPOPJ: POPJ P, CRLF: MOVEI B,15 PUSHJ P,TYO MOVEI A,12 JRST TYO OUSR: SIXBIT / #USR/ OUSRU: 0 SIXBIT /PDP10/ OUTIC: SIXBIT / "DSK/ SIXBIT /PART/ 0 PRGM: IRPS NM,,A B C D E F G H I J K L M N SIXBIT /NM/ TERMIN BLOCK 2 NPRGM==.-PRGM RUNTIM: 200 500 600 200 400 400 400 1400 ;H REPEAT NPRGM-.+RUNTIM,1 ALD: PUSHJ P,GTWD CAME B,[JRST 1] JRST .-2 ALD1: PUSHJ P,GTWD JUMPGE B,ALDJ MOVE C,B ALD2: MOVE D,B CAMGE B,[-BUFL,,] HRLI B,-BUFL HRRI B,UBUF PUSHJ P,ALDRD MOVEI A,(D) .ACCESS USRO,A MOVE A,B .IOT USRO,A HLRS B HRLI B,-1(B) SUBM D,B JUMPL B,ALD2 PUSHJ P,GTWD CAME C,B JRST CKSER JRST ALD1 ALDJ: POPJ P, GTWD: HRROI A,B GTWD1: .IOT UTIC,A JUMPL A,EOF POPJ P, ALDRD: MOVE A,B PUSHJ P,GTWD1 ALDRD1: MOVE A,B ROT C,1 ADD C,(A) AOBJN A,.-2 POPJ P, UBUF: BLOCK BUFL CKSER: MOVSI A,(SIXBIT /CKS/) PUSHJ P,SIXO JRST LDLE EOF: MOVSI A,(SIXBIT /EOF/) PUSHJ P,SIXO JRST LDLE PAT: BLOCK 200 PDL: BLOCK 200 END BEG  ONTROL: ^B USE LINE PRINTER ^E STOP USING LINE PRINTER ^Y USE>7;bx 340 ^N STOP USING 340 OTHER: P PROCEED BUT RETURN TTY TO DDT Q QUIT Z SET DOZE IN SECONDS ! STAND ALONE " O}+1 * `@@` `@A`,,t U` @P m,t k` @Q5,t {` @R+,t>` @S },t w` @T y,t;` @U<,t ` @V ,t,5!&x@- EdZ@&,t*f++T+ 7@h:6m6+2`,t` W` `@X+t+@!& Y,DS7,t!& Z,D_7+Ta5kx@0N+ + &`u xAx!"|h`*bG`,tdp Y`%<{<O LZ:1i&IcGMI'N" 6+j ,e+ $ [2 +W1H+]1H+jq+b` +Wq: ( Y1"+\,t+W` /(4HW+WXB,,~ \`}."7L,t $ $Q+T+T0X+ e,t 6s."]$^ /$p$$.$....8 _ "`..0`6 [x * " aj + q bA (@  $A c)D}l$À. o  d'À+ _ 8@Y+TiJl`