V29; RESTART; JP200; JP200; PROGRAM; (== Typed from a photocopy of a lineprinter listing at the NAHC First unverified version 1 June 2005 Corrections based on first generation assembler output : 2 June 2005 Differences from listing : 1. Lower case characters used in comments 2. character * used in place of pound sterling symbol Hans B PUFAL, May 2005); [ == Various corrections by David Holdsworth, who wrote much of the code around 1967-71 - Feb 2009 [ == Comments introduced by [ and continued to end of line are "21st century comments" inserted from recollections (TITLE: OUT20 ETC) [ at the end of P45 is a string of erases followed by EXIT1 [ These are used for obeying conditional exits and discarding nesting store data V5=1.048576/23; [ V7 is currently executing program priority V8=Q4/-453/0; (Increment .027 Msec) V10=1/35; V11=2/35; V12=3/25; V14=1; V15=B0207464151546300; [ "FAILS " for use in console error messages [ V16-22 are the reason for interrupt markers V23=B1010101010101010; [ radix word for octal conversions V24=B0204777777072000; [ four tabbing words for the user program columns on the console V25=B0204047777072100; V26=B0204040477072200; V27=B0204040404072300; (V28=Director/Program marker) (V29 is easily OUT11 accessable marker, current bits in set are D0 - SET1 if on line M/C D35-44 - Number of words of user space(mod 32) D45-47 - Data number Sunday=0,Monday=1 etc); [ surely it means day number V28; J35=Z; [ This means that an interrupt occurred even though still in director ZERO; =V28; K4; Q5; =V2; [ get RFI and preserve programmer's Q5 -- hooter comes on if K4 not obeyed frequently V7; =M5; SET3; J11NTR; SHC-2; 11; J12NV; SHC-1; 12; =V1P104M5; DUP; SHL-22; STR; REV; ERASE; V0P13; AND; OR; 51; DUP; SETB101; SHL+19; REV; SHC+1; SHL+21; J2!=Z; OR; (No RFIS so insert D22,28); ZERO; 2; NOT; AND; (Remove D22,28) DUP; SHC+1; SHL+21; J1!=Z; (Jump if any RFI other than PR or LOV) [ this is where the long path is chosen V5; x; DUP; =V6; V5P104M5; +; [ short path continues here DUP; =V5P104M5; M5; REV; V9M5; SHL+5; =M5; M5M0HN; SIGN; J4>Z; (Jump if time limit exceeded) SET-109891; (Basic SP 0.655 Msec) 32; V8; =Q5; =M5; V0P104; K5;OR; SHL-1; *5; SHL+6; DUP; J6>=Z; (Jump if hold-up digit not present); DC5; M+I5; J5C5NZS; [ find the highest priority program that is not held up (No program can be entered); =V14; (d0=1) ERASE; JSP1; J23; [ main idle loop in long path 6; =LINK; (Plant dummy link) SET4; C5; -; M5; PERM; (N1= new priority, N2= old priority, N3= path correction) 30; REV; =M5; K7; SHC+7; NOT; NEG; SHC-7; =V13P104M5; (Preserve adjusted NS counters) DUP; =V7; =M5; (New priority number) V5P104M5; +; V6; -; =V5P104M5; (Run time) VR; V1P104M5; SHA+1; =TR; [ clever code to reinstate VR and TR V17P104M5; =K2; ERASE; (CPDAR); [ current peripheral device allocation register V9M5; V13P104M5; V2; =Q5; DUP; =K3; [ switches to new register stack (== 2 ==) DUMMY; DUMMY; DUMMY; DUMMY; DUMMY; DUMMY; (Allow new set to settle down) =V28; LINK; ERASE; (Remove dummy link) =V28; (Store twice in case of reset) *=K1; ERASE; EXITD; (return to program) 35; (Director failure); SET-9; DUP; =M5; =V7; ZERO; NOT; =V1P6; JSP1; JSP12; 36; K4; ERASE; JSP59; J36; 4; =M5; JSP1; ZERO; DUP; NOT; J9; 1; DUP; SHL+25; REV; [ long path entry - don't know why it does not do DUP; = Q5; SHLD+25; J... =Q5; J10=Z; (Prog is silent so skip output ident); V41P104M5; V37P104M5; SHLD24; V24P0M5; SET3; JS4P6; 30; DUP; SHL-12; J6!=Z; ZERO; SHLD-45; V23P0; DUP; CAB; FRB; REV; SHL+1; +; SHL+36; SHL-12; REV; V23P0; SHL-2; REV; SHL-45; FRB; DUP; SHL+6; -; -; SETB131355; SHL+2; AND; 6; V1; JSP55; SHC-6; OR; V24P0M5; SET3; JS4P6; 2; JSP12; JS4P29; DUMMY; DUMMY; DUMMY; JS7P29; DUMMY; DUMMY; DUMMY; V0; DUP; J1P15!=Z; V26P101; SHL1; J4>=Z; (J if no react query); [ when prog fails operator is asked query REACT; 5; SETB20; =V29P104M5; (Stop tint a while react query); [ e.g. TINT A abandons a program, which might interfere V24P0M5; JS3; =M0M6; M6; DUP; SET2; +; JSP8; ZERO; =V29P104M5; JS3; E2M6; SHL-42; SETB41; REV; J1!=Z; 9; SET7; J1P15; 4; V77P104M5; SHL6; J5>=Z; (J if loud); ERASE; J9; *10; JSE4; 3; V13P104M5; SHL-46; DUP; SHL+1; +; SETAV2; +; =M6; EXIT1; 1; (Even restart) V9P0M5; SHL5; =M6; E4M6; R10; NEV; SHL-24;J9=Z; V97P104M5; SET4; DUP; SHL24; +; +; =V97P104M5; (JS142P195; Clear OUT40 if set); SET4; DUP; JS6P29; J35P0; SHL+24; V5P104M5; +; V9P0M5; SHL+5; =M6; =M6M0HN; EXIT1; 20; V21P0; J29!=Z; (Not if fail S); SHC-9; =V77P104M5; [ cancel the right to a silent fail - stops looping =RC7; V6P12; J21=Z; V64P1; V33P1; SHL+43; V32P1; SHLD+5; =I7; =V6P12; SET15; DUP; =V32P1; =V33P1; J22; 21; JS5P29; JS35P0; [ EXIT1 should never happen - so fail director if it ever does (== 4 ==) 22; =M7; JS1; Q7; =E6M6; EXIT1; P3V0; (OUT subroutine) V0=B 77 77 77 77 77 76 67 55; [ bit for each valid OUT 0-34 36 37 39-42 44 45 47 ZERO; =V20P0; (Clear out marker); V19P0; =Q7; V16P1; SETB57777; -; DUP; J1>=Z; [ top cell of program's SJNS SETB120000; SHC+1; -; 1; =V16P1; (Link has 3 syllables added); [ so as to resume at the next instruction ZERO; NOT; =V19P0; [ force EDT routine to deal with all sorts of things V32P1; J4=Z; V0P1; =C6; V0; ZERO; SHLDC6; BITS; REV; J3>=Z; SHC-1; STR; SETB60000; AND; +; 6; =LINK; ( C6; SETB77; AND; SETAV0P6000U; +; =M6; [ supresses incrementing of out counter M0M6H; SHL-24; NOT; NEG; SHL24; =M0M6H; ); EXITAR2; 3; ERASE; C6; SET50; JP65=; SET51; JP66=; [ OUT 50 etc -- NPL specials ?? SET52; J52P2939=; SET53; J53P2939=; SET54; J54P2939=; DUP; NOT; J100=Z; (J if OUT -1 for clear transfer); SETB12345; NEV; J5!=Z; [ originally (DH) just set silent fail (Alter bit in V77P104M5); [ generalised by NPL to define other program properties V0P1; STR; REV;=Q6; DUP; V77P104M5; NEV; SETB2000; SHLC6; SETB3520; AND; SHL+2; OR; NEV; =V77P104M5; EXIT1; (Allow D5,6,7,9); [ see comment on P104 100; NEG; SHLC1; V17P104M5; AND; J5=Z; Q7; =V19P0; I1; =RM7; JSP128; M0M7; DUP; =V0P1; J101!=Z; CTQ1; 101; EXIT1; 15; ERASE; (Used by P195 in OUT54); 5; SETB10; JP2; (Illegal out number); 4; ZERO; J6; [ OUT with empty nest is same as OUT 0 *2; JP15; JP16; JP17; JP18; JP19; [ OUT 0 1 2 3 4 JP20; JP21; JP21; JP23; JP24; JP61; [ 5 6 7 8 9 10 J11P193; J12P193; JP2939; J14P66; J15P66; JP23; [ 11 12 13 14 15 16 JP64; J18P105; J19P66; JP192; [ 17 18 19 20 J21P196; J22P196; J23P196; [ 21 22 23 J24P195; J25P130; J26P195; [ 24 25 26 J27P194; J28P194; [ 27 28 J29P195; [ 29 J30P196; J31P196; J32P196; [ 30 31 32 J33P196; J34P196; J36P196; [ 33 34 36 J37P195; [ 37 J39P130; J40P195; [ 39 40 J41P196; J42P196; [ 41 42 J44P195; J45P195; J47P196; [ 44 45 47 P4V5; (Instant TINT) [ Typewriter (= Flexowriter) interrupt -- instant because DH made it jump the Flex output queue V0=B0207414741515677; [ cr cn AGAIN V1=B0207645156647734; [ cr cn TINT; (V2 and V3 contain answer to TINT query); V4=B2777547752/29; (D3=A,D4=B etc Permitted TINTS A=JLMPR-XZ .EM is same as F); V5=0; (TINT params); ZERO; NOT; =V19P0; V1P11; J4P45!=Z; [ TINT supressed if subprogram 0 is active ZERO; =V16P0; (Clear TINT RFI); ZERO; SETAV1; 2; V0P11; =Q4; SHL+16; SETAV3; OR; ZERO; [ uses subprogram 0 to ask the query ZERO; NOT; =V19P0; NOT; CONT; =V5; JS51P10; SETAV2; =Q6; 5; JSP31; J3; J3; J3; [ P31 fetches and classifies characters SET-30; =+C7; V4; ZERO; SHLDC7; BITS; REV; J4>=Z; (Validity check) SHC-1; STR; SETB60000; AND; +; JS1; (== 5 ==) (TINT subroutine fails); J3; (Exit 2 from TINT subroutine); V0P11; =Q4; EXIT1; 4; ERASE; 3; ZERO; SETAV0; J2; [ invalid input, say AGAIN TINT; 1; =LINK; EXITAR6; *6; EXIT2; JP33; JP34; JP35; JP35; JP37; EXIT2; JP39; JP40; JP41; JP42; JP44; JP45; JP48;JP49; JP50; JP51; JP52; JP53; JP54; JP76; JP72; P5V0; (EDT subroutine); [ called when V19 is set, eithr by real EDT or internally V0P0; =V0; (Time of last EDT); ZERO; =V0P13; (Clear marker to give EDT on fpr RFI); ZERO; =V19P0; (Clear EDT indicator) JSP100; (Deal with W magnetic tapes) JSP105; (Consolidate store etc.) JSP59; (Deal with flex queue) JSP155; (Deal with OUT8 queue) JS3P199; (Enables disc access if appropriate); JSP11; (Deal with subprograms) ZERO; =V0P101; (Clear new identifier marker) V4P23; (Look for OUT8); J7!=Z; JSP155; 7; JSP193; (Attend to JO); K5; M0TOQ5; 2; ZERO; SHLD+4; =C5; DUP; SHL+1; J3>=Z; DUP; =TR; J9NTR; BUSYQ5; J3TR; J1; 9; V9P0M5; JS107P300; J3; 1; (Clear PHU); V13P104M5; ZERO; NOT; NEG; OR; =V13P104M5; M5; SHL+123; SETB140000; OR; =K1; ERASE; CLOQ0; SETB140000; =K1; ERASE; 3; SHL+2; M5; SET3; J4=; NOT; NEG; =M5; J2; 4; =C6; ERASE; V7P0; 5; NOT; NEG;SET3; AND; DUP; =M5; V13P104M5; SHC-1; J6=Z; ERASE; ZERO; NOT; 8; =V14P0; EXIT1; P6V64; (Put N2=NX in FLEX queue, X=1 given in N1, if flex queue overlows enter P59; to make room); V1=-1; V56=-1; (For benefit of the OUT8 system); M5; SHL-2; J4>=Z; 5; REV; ERASE; NEG; NOT; DUP; J5!=Z; J1P45; 4; SETAP6; SETAV1P6; -; =RC7; 1; V1M7Q; NOT; J1!=Z; 3; J2C7Z; (Queue not full) REV; =V0M7; ZERO; NOT;=V1M7Q; NEG; NOT; DUP; J3!=Z; NOT; =V19P0; EXIT1; (== 6 ==) 2; (Queue full); JSP59; JSP60; ERASE; J4P6; P8; (Put query parameters in FLEX queue and enter 2P10); REV; SHL+16; OR; ZERO; NOT; CONT; C4;SHL+32; OR; DUP; SET1; JS4P6; ZERO; REV; J2P10; P9V1; (Convert cell count from binary to signed decimal characters, used in P12); V0=B1212121212010101; V1=B0707434554546300; DUP; SHA-4; SHL-1; (Non-zero if count >=24); J1=Z; SET132;-; NEG; 1; V0; REV; FRB;SETB35202; SHL+21; +; V1;V24P0M5; SET3; J4P6; P10; (Normal entry test BUSYQ7. If busy or if entry at 2, put SHUL, SHUP, and SHUL* into SHU list. Exit to level X+1 lower, X given in N1 (or N3 for entry 2)); [ P10 is the routine called from within a subprogram [ when it is necessary to wait for things to happen elsewhere e.g. transfer, tape load [ on entry: M5 = priority number, Q4 = subprog number / 1 / AV1P11Msubprogno -- see P30 ZERO; =TR; J1C7Z; [ normal entry waits if device in C7 is busy BUSYQ7; 1; TLOQ7; J1P45NTR; 3; ZERO; Q7; I4; SHC-27; =V0P13; (Next PR causes EDT); [ definitely decided to hold up 2; =E10M4; LINK; OR; =M0M4; [ E0M4 has return address and marker, E10M4 has transfer params = SHUP C4; SHC-1; J5<=Z; [ jump for secondary subprogram belonging to a user program SET1;JS113P300; [ set program hold-up 5; DUP; STR; NEV; =C7; [ count is ones comp if EXIT2 is needed ZERO; J7C7Z; *6; SHL+16; LINK; OR; DC7; J6C7NZS; [ preserve specified number of SJNS cells 7; =E30M4; J4P45>=Z; [ SHUL* i.e. extra SJNS levels saved EXIT2; 4; ZERO; [ hold-up but always come back next time, i.e. EDT 14; ZERO; ZERO; J2; [ and do EXIT1 to the caller 50; ZERO; 51; ZERO; ZERO; ZERO; NOT;CONT; J2; [ ditto but do EXIT2 (P6000V23; (OUT COUNTS);); P104V116; [ P104 is only V-stores [ V0 is a hold-up word in the same format as the hardware equivalent obtained from K5 [ V1-117 are in quartets, addressed by instructions such as V25P104M5 [ V5P104M5 = program CPU time used so far [ V13P104M5 = nesting store counters for use with =K3 (The various bits in V77P104M5 have the following significance D 0 = Prog read in by TINT X D 1 = TINIT X in progress D 2 = Last disc transfer parittied D 3 = Disc repeat in progress after parity D 4 = Not used (David thinks) D 5 = Auxiliary systems program D 6 = FLEX suppression D 7 = Job initiated by OUT39 D 8 = OUT 40 on by this level D 9 = Silent fail D10 = OUT 50 done by this level D11 = This level will print OUT8 tapes D12 = Shows TINT;TLM has been done D13 = OUT20 done by this level....Different bit from Leeds ); (The various bits of V25P104M5 have the following significance D47 = Main subprogram active D46 = No program to run D45 = TINT S D44 = HU due to OUT8 subprogram D43 = Store move/priority change D42 = Rolled out D41 = OUT 19 (== 7 ==) ); V0=B01010101/23; V13=B0141/11; V14=B2141/11; V15=B4141/11; V16=B6141/11; V17=1; V18=1; V19=1; V20=1; V25=2; V26=2; V27=2; V21=2; V29=5; V30=5; V31=5; V32=5; V97=B 20 00 00 00 20 00 00 00; V98=B 20 00 00 00 20 00 00 00; V99=B 20 00 00 00 20 00 00 00; V100=B 20 00 00 00 20 00 00 00; (V101 to V113 are all for use of controllers when running ROGS); P11V40; (Deal with hold-ups in SHU list in due order); V0=Q0/1/AV1; 15; V0; =Q4; 3; M0M4; DUP; J1!=Z; (Jump if this SHU is in use); 11; ERASE; 7; M+I4; C4; DUP; SET9; SIGN; J1P45>=Z; NOT; NEG; =C4; J3; [ loop back to try the next one up 1; E10M4; REV; J4=Z; M5; V7P0; NEV; J10=Z; V13P10M5; SHL+2; SHL-43; NEG; NOT; J11; 10; V32P1; SET2; +; 11; JSP9; J12; 8; V2; V3M7; V24P0M5; SET3; JS4P6; 12; ERASE; EXIT1; 3; ZERO; =V6; V34P1; DUP; SET4; -; =V7; JS13; V33P1; SHL+43; J9!=Z; SETB37; JSP9; J6; 13; V5; REV; FRB; V23P0; SHL-11; +; V0M7; V24P0M5; SET3; JS4P6; M0TOQ7; EXIT1; P13V0; (Set program HU bit in V0P104); SET1; M5; V14P0; NEV; J1!=Z; ZERO; NOT; =V14P0; 1; M5; NOT; SHA+1; DUP; SHA+1; +; =C5; SHCC5; V0P104; REV; DUP; J2=Z; ZERO; =V21P104M5; 3; V65P104M5; ZERO; NOT; SIGN; ABS; DUP; SHL+4; OR; SHL+6; OR; (Add 10 if OUT8 used); =V1P104M5; JS4P29; DUMMY; DUMMY; DUMMY; JS7P29; DUMMY; DUMMY;DUMMY; SET1; =V17P104M5; SET2; JS113P300; V0P26; =Q6; 4; M0M6Q; ERASE; J5C6Z; JSP125; J4; CTQ6; PARQ6; ZERO; =TR; V0P26M6; SHL+17; J6>=Z; SETB52000; JS10P100; J4; 6; V21P104M5; JSP27; J4; 5; M0M4N; J10!=Z; SETAP23; =M0M4N; ZERO; =E11M4; ZERO; =E31M4; 10; JS4P10; V29P104M5; J10=Z; V9P0M5; DUP; SHC+24; SHL+10; V89P14M5; OR; SHC+14; JSP136; J44P120; (OUT 2); 91; (Deal with disc); ZERO; =V61P104M5; ZERO; =V105P104M5; V2; =V97P104M5; V85P104M5; SHL-24; DUP; J8=Z; V9P0M5; SHL+5; =M6; SET31; REV; 15; JS10P130; (Bit of a botch, see P198, DDES read); V9P0M5; SHL5; =M6; ZERO; NOT; =M0M6; (Put -1 in progs ED); SET31; V85P104M5; SHL-24; JS10P130; ZERO; (Write -1 on global disc); (== 9 ==) 8; =V85P104M5; ZERO; NOT; JS255P60; (Restart any OUT19); JS3P193; J10P121; (End if J0); ZERO; NOT; =V0P193; J10P121;(Set J0 flag); 90; (Output stats and FLEX message, entered from P155); M-I5; V3P120; =M0M6N; V93P104M5; 74; =E4M6; V0P0; V53P104M5; -; (Elapsed); JSP57; V5P104M5; DUP; V9P104M5; +; (N E T); [ notional elapsed time DUP; SHA-24; JS1P161; =E8M6; JSP57; REV; ZERO; =V5P104M5; DUP; (Run time); SHA24; JS1P161; =E7M6; JSP57; V1; V24P0M5; SETB33; OR; V0; V1P104M5; (Ending no); OR; V41P104M5; V37P104M5; (Ident); DUPD; JS71; SHLD+24; V24P0M5; V77P104M5; SHL10; J75=Z;M5; =V0P52; (Mag tape input waits for level); 7; V9P0M5; SHL+24; SHL-36; NOT; NEG; SHL+5; =V1P104M5; J22P120; 8; ERASE; JSP194; J9; JS102P29; J10; V2P194; =V1P1; J132P194; 10; ERASE; REV; ERASE; V2P194; REV; JS101P29; J132P194; 9; ZERO; J132P194; P17; (OUT2) [ enter a new program that is already in store, i.e. load and go JSP62; J2; [ check existence of NS info V9P0M5; SHL+5; =RM6; M0M6Q; =V33P104M5; [ picks up word 0 of object program =M6M0H; J2<=Z; [ stores time limit in word 1 if positive M0M6N; JSP119; [ check OK program name in word 2 SETB200; J3; ERASE; V9P0M5; SHC+24; ZERO; SHLD+10; M0M6; SHL+24; DUP; J5!=Z; ERASE; DUP; NOT; NEG; SHL+5; M0M6; OR; (== 10 ==) =M0M6; J6; 5; NEG;NOT;SHL-29; VR; MAX; ERASE; J6V; ERASE; ERASE; SETB220; J3; 6; =V89P104M5; ERASE; (SHC14; JS115P300;); SET2;SET9; ( V0P104; SHLC6; SHL+2; J2P15=Z; (Mag tape); SETB32000; JS10P100; C7TOQ6; 7; JSP138; 6; JS3P29; J35P0; (== 11 ==) EXIT1; 3; (Not mag tape); IM0TOQ7; ZERO; JSP10; PARQ7; ZERO;=TR; C7; =M6; (B program); V0P26M6; SHL-24; SETB607; AND; ZERO;SHLD+45; SHL-4; SHLD+3; -; =C6; V21P104M5; SHCC6; NC6; STR; REV; SHCC6; =V21P104M5; 5; C7TOQ6; JSP27; J7; 1; ERASE; 2; SETB30; JP2; [ ---------- replace P23V4; (OUT8); V0=0; V1=AV0; (L queue); V2=0; V3=AV2; (N queue); V4=-1; (Marker to initiate p155); J1; 99; V29P104M5; J98>=Z; (Check for termination); 82; V57P104M5; DUP; J86=Z; STR; ERASE; 83; SET45; FLOAT; FIX; ROUND; JS80; J82; (close streams); 86; ERASE; (No more streams open); 87; SETB10; JS114P300; (Clear holdup, probably unnecessary); V29P104M5; STR; ERASE; =V29P104M5; (clear termination marker); 98; M-I4; DC4; M-I4; DC4; EXIT1; (Retrurn to main subprog); 80; (Close stream, coded str no in N1); DUP; SETAV65P104; M5; +; SHL+16; SET4; OR; REV; JS157; =C7; V57P104M5; SETB177776; SHCC7; AND; DUP; STR; ERASE; ZERO; SIGN; NEG; AND; =V57P104M5; J50P10; 156; (Add to Q); C5; 157; SHL4; C4; OR; SHC-16; OR; V57P104M5; STR; SHL1; =M6; ERASE; [ top bit of V57P104M5 indicates which tape is used by this prog V2M6; V4; ZERO; MAX; SIGN; AND; =V4; (Sets V4=0 if queue needs processing); DUP; V3M6; DUP; CAB; SHL-16; SHLD-16; ERASE; SHC16; DUP; =V3M6; =M6; ZERO; =M0M6; =M6; =M0M6; EXIT1; 158; (Check str no and put coded stream in N1); C7; DUP; SETB177710; AND; SHL-3; NEG; NOT; J1P45#Z; (invalid); [ output streams are 10-17, 30-37, 50-57, 70-77 SHC-4; ZERO; SHAD+3; OR; EXIT2; [ coded stream nos are 00-07, 10-17, 20-27, 30,37 15; ERASE; 16; SETB770; JP2; (Invalid parameters in N1); 18; SETB740; JP2; (Invalid stream number); 19; M0M7; V2P155; NEV; SHL-16; J21=Z; M-I4; DC4; SETB720; JP2; (Invalid last char); 1; Q7; =V19P0; (Restore EDT); JSP62; J16; =Q7; M7; I7; J27#; C7; NEV; J15#Z; ERASE; (Close stream); JS158; J16; =Q7; JS1P139; M7; DUP; NOT; =C7; (Wait for second subprog); JS8P196; (Remove progs N2); V57P104M5; SHCC7; J1P45>=Z; M+I4; I4; =+C4; (Check str open); JS80; J99; 27; ERASE; JSP133; J16; (Check parametrs); 29; C0TOQ7; JS1P139; JSP102; (Wait for previous transfer or P105, set CPL); I7; =RM6; M0M6; =C7; J13C7Z; (J if FLEX); V61P104M5; NEG; NOT; DUP; =V61P104M5; J71=Z; (Check access O/P); JS158; J18; DUP; =C5; I4; DUP; =+C4; M+I4; (Switch to second subprog); SHLC5; V57P104M5; DUPD; OR; =V57P104M5; AND; J28#Z; (Stream not yet open); [ V57P104M5 is the bit pattern of open streams SETAV65P104; M5; +; SHL+16; JS156; (Open); 28; SHC-4; J21>=Z; (jump if punch str); [ J if stream < 50 M0M7; SHL42; ABS; SHL-43; NEG; NOT; J19#Z; (Check last char); 21; C0TOQ7; ZERO; ZERO; Q7; ZERO; NOT; CONT; DUP; JS156; JS3P29; JS35P0; PMHQ7; (Lock out transfer area); JS2P10; J99; 14; ZERO; JS3P10; I7; =RM6; 13; V56P6; NOT; J14!=Z; (Wait if transfer will fill FLEX queue); M7; I7; -; SET8; MAX; ERASE; =C6; (Truncate if more than 8 words); 3; J4C6Z; SET-42; =C5; M0M6QN; 5; SHLC5; SETB77; AND; SET2; J6=; SET4; J6=; (Check not 02 or 04); SETB75; J7#; (EM); ERASE; 4; V45P104M5; J8=Z; J8C5NZ; J8C6Z; V77P104M5; SHL6; V26P101; SHL1; NOT; AND; J8Z; (Nest too full); E5; 50; JS101; EXIT2;(ZERO); 13; SHL2; SHL-45; J29=Z; (Next empty); ERASE;J50; 14; ERASE; J14NEN; J50; 15; SHL7; SHL-44; J29=Z; (SJNS empty); LINK; J32; 16; SHL7; SHL-43; SET16; -; J29>Z; (SJNS TOO FULL); E5; =LINK; J50; 40; LINK; 17; ERASE; J40NEJ; J50; 29; JS101; EXIT1; (ZERO; NOT;); 102; M5; V7P0; NEV; J1P127=Z; (Exit 2 if nest in core); LINK; JS100; REV; =LINK; EXIT1; (EXIT1 if in nest stack); (N1=stack count on exit); 100; (Swap to programmers nest); SET1; SHL41; K7; +; =E3; V13P104M5; DUP; =K3; DUMMY; DUMMY; DUMMY; DUMMY; DUMMY; DUMMY; DUMMY; DUMMY; DUMMY; DUMMY; J1P45; 101; (Swap to director's nest); ZERO; SET1; SHL41; K7; +; E3; =K3; DUMMY; DUMMY; DUMMY; DUMMY; DUMMY; DUMMY; DUMMY; DUMMY; DUMMY; DUMMY; ERASE; DUP; V13P104M5; NEV; V7P0; =M6; K7; V13P104M6; NEV; OR; SHL-46; J35P0!=Z; =V13P104M5; J1P45; P30; (Set Q4 = 2P+2/1/AV1P11+2P+2, for entry to P10); M5; NOT; NEG; SHA+1; DUP; =RC4; SETAV1P11; +; =M4; EXIT1; P31; (Fetch character, result in C7); [ on entry M6 points at word and C6 = char number, 0 for most sig 8; M0M6; SHLC6; SHL-42; =C7; SET6; =+C6; ZERO; NOT; SHLC6; J2!=Z; C0TOQ6; SET1; =+M6; 2; V1P122; ZERO; SHLDC7; SHLD-15; ERASE; J3>=Z; I6; J4!=Z; EXIT4; 5; ERASE; 4; EXIT3; 3; C7; SET4; J5=; SETB32; J5=; SETB34; J5=; SETB75; J5=; SET2; J6!=;ERASE; EXIT2; 6; SET6; -; DUP;J7!=Z;I6=-1; 7; NEG; NOT; J1!=Z; I0TOQ6; 1; J8C7NZ; EXIT1; P32; (Fetch number. Result in N1); SETB77600; 1; =Q7; ZERO; 5; DUP; J3=Z; (== 15 ==) ERASE; ZERO; NOT;EXIT1; 2; C7; SETB75; NEV; J4P45=Z; 6; DUP; J4=Z; (Dont J if TINT X or quiet) V24P0M5; =V0; V3; =V5P4; ZERO; NOT; DUP; =V19P0; JS51P10; (Await reply); V2; SHL-36; SETB7137; NEV; J4P45!=Z; (Ignore if not Y.); 2; E20M4; =C7; JSP56; JS35P0; 7; V29P10M5; DUP; J1!=Z; (J if TINT A suppressed); V0P130; C7; NEV; J3!=Z; DUP; NOT;=V0P130; (Clear if dumped); 3; SETB144; JS114P300; (Clear possible OUT19, TINT S and rollout); Q4; JSP30; REV; ZERO; V2P4; SHL12; SHL-42; JS8; =Q4; EXIT2; (Keeps Q4 in case in director subprogram when just overwriting it cases subprogentrys to be lost which is catasrophic if thos levels are in disc Q) 1; DUP; I4; SHL45; AND; SHL1; OR; =V29P104M5; EXIT2; 8; JS2P10; (Now in priority subprogram) SET4; M7; SETB35; NEV; J1P15!=Z; =V0P2; J2P2; P34; (TINT B - read integer to E0); JSP38; JSP32; J1P45; V9P0M5; DUP; SHL+36; J3P45=Z; SHL+6; NOT; NEG; =M6; V29P104M5; SETB177376; SHC-3; AND; (Mask out disc Q markers); =V33P104M5;EXIT2; 1; SHL+24; =M0M6H; EXIT2; P35V0; (Reset max number of dumpable levels); V0=4; (Initial value =4); JSP32; J1P45; DUP; SHL-2; J1P45!=Z; (Check <4); NOT; NEG; =V0; EXIT2; P37; (TINT E - nominate program tape) JSP32; J1P45; DUP; =M7; DUP; SET7; SIGN; J1P45=Z; (== 16 ==) JSP32; J15;(Reading D2); DUPD;-; J3P45>Z; DUP; SET15;-; J3P45>Z; 16; REV; DUP; PERM;-; SET1;DUP; PERM;+;=RC6;-; =M6; (Q6=D2-D1+1/1/D1=1); 1; V1P26M6Q; DUP; J4=Z; SETB10; J3P45!=; M5; SET7; SIGN; J3P45!=Z; 4; DUP; J3P45Z; (Jump if top of machine passed); SETAV2P11; =RM4; I4; =C4; SETB3654; JS1P26; J5; ERASE; 6; V0P26M6; SETB24; SHL+18; -; SETB44; OR; DUP; =V0P26M6; SET1; JSP6; (Type new descriptor); C6TOQ7; SETAV0; =I7; SETAV2; =M7; ZERO; M5; SET2; =RM6; V3; =V11; V6; =V12; 7; V8; REV; FRB; V9; +; J8C6Z; =V11M6Q; 10; ZERO;SHLD+16; J7; 8; SET2; OR; =V11M6; ERASE; ZERO; NOT; Q5; =V7; JSP10; SET3; =RC6; *11; V11M6; =V0M6Q; J11C6NZS; PWQ7; V7; =Q5; J9C5Z; M0M5Q; SET2; =RC6; J10; 9; C7; =M6; V0P26M6;SHL-6;SHL+6; SETB24; SHL+18; +; DUP; =V0P26M6; SET1; JSP6; EXIT2; 5; V5; V4; V3; SET3; JSP6; ZERO; NOT; DUP; STR; NEV; DUP; SET3; OR; Q5; =V7; JS2P10; V7; =Q5; J6; 13; ERASE; 12; ERASE; 3; ERASE; 1; ERASE; 4; EXIT1; P48; (TINT P P60 switch on job organiser P61 switch off jo P62 dont as react on on-line jobs P63 ask react always P64 switch on jo message P65 switch off jo message ); JSP32; J1P45; SETB60; -; DUP; J1P45=Z; DUP; =RM5;SET4;REV; -; =C5; JS15;J11;SHL+46; =V77P104M5; V7; STR; ERASE; =V7; (Cleared stored TINT T marker); C7; SETB54; J12=; SETB55; J117=; SETB60; NEV; 13; =V3; C7; SETB56; NEV; J115=Z; 116; V10P45; V0P117; -; SETB77740; JS1P32; J3P45; DUP; J3P45=Z; NEG; NOT; SHL-5; NOT; NEG;SHL+5; VR; MAX; ERASE; DUP; SHL-32; REVD; PERM; -; J25Z; 7; V5P104M5; DUP; V9P104M5; +; 5; JSP57; REV; JSP57; V23P0; DUP; V9P0M5; SHL+38; SHL-33; FRB; REV; SHL-17; OR; SHL+12; (BA); V41P104M7; DUP; PERM; SHLD-12; ERASE; REV; V37P104M7; SHL24;SHL-24; SHLD-12; C5; =M7; SET4; =+M7; 3; M5; SETB20; OR; SHL+10; OR; (Priority); V25P104M5; SHC-6; J8Z; 12; J7C6NZ; ERASE; V0P26; =Q6; 3; SETB10544; JS2P26; J4; ERASE; PMBQ6; J3TR; (L, not on BT); SETB4000; JS10P100; J3; 4; V0P26; =Q6; 5; SETB10654; JS2P26; [ This line was missing in Hans P's version J6; ERASE; PMBQ6; J5NTR; (U, on BT); SETB32000; JS10P100; J5; 8; V16P0; (== 22 ==) 6; V19P0; OR; E7; =Q6; EXIT1; 11; (Fail this for exessive time); Q6; Q5; Q4; M-I6; Q6TOQ5; V97P104M5; SET5; +; =V97P104M5; (Allow time for restart); ZERO; JS41P41; DUMMY; DUMMY; DUMMY; =Q4; =Q5; =Q6; J12; 255; (Restart any OUT19 suspended progs, J1!=0 if start to be forced); Q5; REV; SET4; =RC5; 254; V25P104M5; SHC-7; J253>=Z; JSP30; E20M4; DUP; =Q7; J250=Z; ZERO; =TR;BUSYQ7; JSP128; TLOQ7; J252NTR; (Go if no lockout); 251; E10M4; V0P0; -; J253>=Z; Q7; J252=Z; CTQ7; (Kill); JS247P196; 252; Q5; SETB100; JS114P300; =Q5; (Release prog); V0P0; E30M4; -; V9P104M5; +; =V9P104M5; 253; M0M5Q; ERASE; J254C5NZ; ERASE; =Q5; JP30; 250; DUP; J251=Z; J252; (First J if not forced); P61; (OUT 10); ZERO; =V45P104M5; JS3P29; J4; V32P1; SHL-1; J4=Z; V0P1; V3P155; J11=; DUP; J2=Z; DUP; JSP122; J5; J3!=Z; 5; DUP; JSP132; J3; V1P1; DUP; JSP122; J6; ERASE; J3!=Z; 2; V1P1; J3!=Z; 7; ZERO; NOT; SHL-3; 6; REV; JSP58; JSP138; C6; JSP131; =M6; V-18P101M6; JS3P29; J35P0; V45P104M5; J8!=Z; JS3P29; J35P0; J10; 8; ERASE; 10; JS2P29; J35P0; EXIT1; 3; ERASE; 4; SETB110; JP2; 11; V25P101; JS1P161; V1P1; NEV; SHL6; J5!=Z; ZERO; =V25P101; J5; P62; (Initial housekeeping for OUTS 2,4,8. Erase out no., check at least 1 other item in programs nest); JS3P29; J35P0; V32P1; J4P45<=Z; V0P1; DUP; EXIT2; P64; (OUT 17); V5P104M5; DUP; V9P104M5; +; 2; =V0P1; JS2P29; J1; EXIT1; 1; SETB40; JP2; (Fail nest full when OUT17 obeyed); P65V2; (OUT 50 and related topics); V0=B2020212077770064; (Header word for stats block, used in P155); V1=P /X*E; (Skeleton job descriptor, used in P15); V2=P *SYSTEM; (Used in P52); I4; SHC-11; V77P104M5; OR; =V77P104M5; (Show OUT50 done); ERASE; (Erases the out number, see P3); JSP62; J10; ERASE; JSP133; J10; I7; =M7; M0M7; V3P120; NEV; SHA-1; J10!=Z; SET7; =M7; M+I7; (== 23 ==); JSP139; JSP102; (Wait, see ref 29P23); JS3P29; JS35P0; (Remove N2); M+I4; (Put Transfer in OUT8 queue); J99P23; (End of OUT1); 2; PMHQ7; I7; 3; SETAV65P104; M5; +; SHL+16; OR; ZERO; JS157P23; (Put item in OUT8 queue); J50P10; (Await end of transfer); 10; (Invalid or wrong date); SETB700; JP2; P66; (OUT51- overwrite job no.); ERASE; SETAV93P104; 1; =M7; JS8P196; JS1P29; JS128P196; =M7M5; EXIT1; 14; (OUT 14); SETAV61P104; J1; 15; (OUT15); SETAV61P104; J1; 19; (OUT19); JS8P196; JS1P29; JS128P196; DUP; J191=Z; V30; SET1; JSP6; J2P100; 5; (W becomes L) ZERO; 51; ZERO;NOT; =V0; SETB17765; J43; 6; (W becomes L, nothing typed) ZERO; NOT;J51; P102; (Hold up subprogram until peripheral transfer in programs area can be obeyed. Parameters given in Q7) SET1; JSP10; 2; Q7; JSP103; J1; =Q7; EXIT1; 1; SET1; ZERO; CAB; JS2P10; J2; P103; (Check parameters in N1 before peripheral transfer which may involve programs area) SET4; =RC6; 1; J2C6NZ; EXIT2; 2; V9P0M6Q; JS1P300; DUP; JS108P300; J1; V8P0M6; DUP; SHL-24; J1P45!=Z; 3; SETB30000; AND; SETB140000; OR; =K1; ERASE; EXIT2; (For actual p104 see in front of P11 V0=B01010101/23; (HUR) (V1 onwards= constants associated with priorities, in groups of 4) (V1-4= overflow and TR record, etc. V5-8= run time V9-12= PHU time) V13=B0141/11; (NS counters etc.); V14=B2141/11; V15=B4141/11; V16=B6141/11; V17=1; V18=1; V19=1; V20=1; (CPDAR); (V21=24 = A program unit pre-allocation. For B programs, records types to be pre-allocated on dellocation by OUT 6) V25=2; V26=2; V27=2; V28=2; (Hold-ups); V29=5; V30=5; V31=5; V32=5; (APM); (V33-36= Dump for E0 V37-44= Current program name V45-52=New program name, transfer parameters, OUT4/10 marker, etc. used (== 26 ==) only by main subprogram. V53-56=Program start time V57-60=Streams used by proram V61-68=Serial number of prog on tape) (V69 D0-15 System discs D16-31 32-47 Non system discs V73 Correspondence between logical and actual discs V77 D0 System marker D1 D2 OUT 41/42/43 Obeyed D3 Parity V81 D0-16 OUT43 selection marker D32-47 last seek requested V85 D0-15 D32-47NOC for OUT46 D16 last C block D17-31 length of block V89 input store for NOC); (V93-V96 job desc, of progs); (V97.. top half CPU time allowed for job, bottom half PHU time allowed for job. Overides E1 time for CPU, does restart on job if PHU time exceeded(as V9P104),set by OUT15); End of dummy P104); P105V2; (Consolidate core storage and swop priorities. Upgrades A priorities automatically if needed) (V1=Q no. of quartets in P104/4/AV1P104, set up by P200); V2=Q 4/10/AV3P11; V0; J4P54=Z; 6; ZERO; =V0; SET4; =RC5; 2; V9P0M5; 3; DUP; SHL+38; J5=Z; DUP; JS107P300; J4; (Test for store move) DUP; SHL+14; SHL-38; J5=Z; (ZERO; NOT; =V0P193; (Set JO marker);) (Move program in store) Q7TOQ4; I4=-1; DUP;SHL+14; SHL-38; SHL+5; I7; -; DUP; =M6; I4=+1; *7; M0M4;=M6M4Q; *J7C4NZS; (Alter value of base address) ZERO; REV; SHC-24; SHLD-10; SHC+24; SHLD-38; ERASE; (Alter affected parameters in OUT 8 q) 107; 61; (Alter affected parameters in FLEX q) SETAV0P6; =RM4; 8; M0M4; NOT; J9=Z; M0M4; JSP127; JS109P300; =M0M4Q; J8; 9; (Alter affected SHUPS) SET10; =RC4; 10; V1P11M4Q; J11Z; (J if too much); V10P0; V11P0; V12P0; OR; OR; SHL38; J1P45!=Z;(J if others in MC); 20; SHL14; V9P0M5; +; =V9P0M5; ZERO; J1P24; 19; (Store to be reduced); DUP; NEG; V9P0M5; SHL24; SHL-38; -; J1P45>=Z; J20; (Not quite as bad as 1st bit); P300; (Old seperate P routines); 106; (Given BA/NOL, set C7= no. of words occupied, I7,M7= first and last addresses occupied) DUP; SHL+38; SHL-33; DUP; J10!=Z; =Q7; ERASE; EXIT1; 10; DUP; =I7; =M7; SHL+24; SHL-38; NOT; NEG; SHL+5; DUP; =C7; NEG; NOT; =+M7; EXIT1; 107; (Given BA/NOL, set up Q7 as in P106, and test lock-out on progrms area) ZERO; =TR; JS106; TLOQ7; J4P45TR; EXIT2; 108; (Given transfer paramters, test for I >= I7 and M <= M7) ZERO; REV; SHLD-16; SHL+32; SHLD-32; I7; SIGN; M7; CAB; SIGN; OR; J4P45=Z; V8P0M7; =V0M6; ZERO; 3; ERASE; 4; J2C7NZ; ERASE; V0M6Q; J1C6NZ; ERASE; EXIT1; P117V0; (Set in N1 parameters for space between B and A programs, as C= no. of words, I,M= first and last addresses) JSP116; SET4;=RC7; V10P45; 1; V0P116M7; DUP; JS115P300; J2=Z; V0P116M7Q; V0P104; SHLC6; SHL+2; J3=Z; V29P104M5; SHL+1; J20>=Z; 24; SET9; JP121; 25; (Program not on tape) C7; =M6; JSP135; ZERO; =V1P52; J19; 105; C7; =M6; JSP135; J22; (Abandon search); 21; V29P104M5; SHL+3; ZERO; NOT; CONT; SHL-3; =V29P104M5; V0P26M6; SHL+24; SHL-42; SETB43; NEV; J19=Z; ZERO; V0P26M6; SHL+24; SHLD-30; SHL-12; SETB54; NEV; OR; J20!=Z; V0P26M6; JSP55; OR; =V0P26M6; 23; IM0TOQ7; PMAQ7; ZERO; JSP10; V29P104M5; SHL+3; J105>=Z; PARQ7; J28TR; 28; PMFQ7; J25TR; PMCQ7; J23NTR; JSP126; JSP102; PIAQ7; ZERO; JSP10; PARQ7; J29TR; 29; PMCQ7; PMFQ7; J25TR; I7; =M6; M0M6; V45P104M5; JSP137; M0M6N; V49104M5; JSP137; OR; J23!=Z; 30; (Read B-block) JSP102; PIAQ7; ZERO; JSP10; PARQ7; J31NTR; 74; SET4; JP121; 81; V49P104M5; V45P104M5; SHL24; SHL-8; SETB135371; SHLD-16; ERASE; V24P0M5; SET3; JS4P6; J20P121; (Nod gives CRNP message); 69; (Binary archived); ZERO; NOT; SHL-3; REV; JSP58; (Request tape); J24C6Z; V0P26M6; V45P104M5; SET9; SHL18; DUP; SHL12; +D; =V45P104M5; SHL-6; SHL6; =V0P26M6; (Change D to M and C to L); C6TOQ7; J21; 82; (Program to be read from disc); ERASE; V89P104M5; V29P104M5; SHL37; J182Z; 133; V1P104M5; =Q7; JSP126; I7; =M6; DUP; J63<=Z; ZERO; ); 33; ERASE; DUP; M0M6N; OR; =M0M6N; 34; NEG; NOT; SHL-5; 35; DUP; V9P0M5; SHL+24; SHL-38; SIGN; J38<=Z; Q7; JSP117; J36; SHL-32; SHL+9; V9P0M5; +; =V9P0M5; =Q7; J35; 36; REV; =V1P104M5; V77P104M5; SHL+7; JP130=Z; V0P76; J42!=Z; 86; I7; NEG; NOT; DUP; =I7; =M6; M0M6; =V37P104M5; (Preserve word which will be overwritten by N.O.C.); M7; I7; -; SET3839; -; J85>Z; JSP102; V89P104M5; JS84; J78; I7; =M6; I4; =+I7; M0M6; (N.O.C.); V37P104M5; =M0M6; =V89P104M5; 42; M7; I7; DUP; =RM6; -; =C6; V1P104M5; *51; J52C6Z; M0M6Q; +; J51C6NZS; 52; E20M4; SHL-32; J40!=Z; (== 32 ==) (Check C-block sum) M0M7; NEV; V9P0M5; SHL+5; =M7; M0M7; SHL+24; J53=Z; SET3; REV; JP121!=Z; 53; (Dispose of input unit) ERASE; J47C7Z; C7; =M6; V0P26M6; SHL17;J43=Z; JS3P29; DUMMY; DUMMY; DUMMY; 183; JS5P29; J50; ERASE; V77P104M5; SHL12; J200=Z; (CRNP failure in OUT 1); SET5; J1P15; (CRNP in OUT1 does not say FAILSIO); 2; V2P52; =C7; J3C7Z; MANUALQ7; ZERO; =V2P52; 3; V0P26; =Q6; 4; M0M6Q; ERASE; J10C6Z; JSP125; J4; JS1P27; (Make unit U); J4; 10; (Clear BA/NOL, PHU, etc.) ZERO;=V77P104M5; (Clear disc allocation and other markers); ZERO; =V37P104M5; ZERO; =V41P104M5; ZERO; =V33P104M5; V9P0M5; DUP; JS115P300; DUP; SETB147777; SHL+3; SHL-3; NOT; AND; JSP136; V0P104; SHCC6; SHL+4; NC6; SHL-4; SHCC6;=V0P104; EXIT1; P122V1; (Check given word as mag tape identifier) V0=B3252326532563253; [ underlined word JUNK V1=B377727377777777/43; [ mask for allowable characters, digits, letters and a few others DUP; SETB77; AND; 1; =C7; DUP; J1P45=Z; [ EXIT1 for OK, includes zero tape , i.e. work tape / scratch tape 2; V1; ZERO; SHLDC7; REV; ERASE; SHL+27; SHLD+6; DUP; J1=Z; DUP; SHL+1; SHA-44; J4P45=Z; (The SHA is changed from SHA-38 in a desperate bid to et KKT92P1 to work); 1; EXIT2; P128; (Add base address of priority in M5 to I7 and M7) V9P0M5; SHL+38; SHL-33; DUP; =+I7; =+M7; EXIT1; P130V0; (Handle foreground jobs); V0=-1; (Letter of dumped job); V0; J136P120>=Z; (J if if one level already dumped); V1P104M5; V9P0M5; SHL+24; SHL-38; -; (== 34 ==) V0P35;=RC6; 1; DUP; V9P0M6Q; SHL+24; SHL-38; -; J2>Z; (J if no big enough); V76P104M6; SHL+7; (Look at foreground marker and OUT40); V24P104M6; SHC-2; (Lok at subprog activity bit and absent bit); OR; DUP; SHL+1; OR; J3>=Z; (J if OK to roll out); 2; J1C4NZ; 5; ERASE; J136P120; (Wait and come round again); 3; M-I6; M5; JS4; =M5; JSP30; J5; 4; M6TOQ5; JSP30; V9P0M5; JS106P300; JSP55; =V0; JSP139; JSP102; (Wait for no lo and no 2ND subprog); (Now OK to dump); ZERO; 6; DUP; DUP; SET96; +; DUP; =E31M4; (SHUL* of sec subprog); SET40; xD; CONT;(Extent of max transfer); VR; V9P0M5; SHL+24; SHL-38; NOT; NEG; SHL+5; MAX; ERASE; (Leaves size of transfer in N1); (VR set if this is last transer); NEG; NOT; (High address of transfer); REV; (Strat sector); SET40; xD; CONT; SHL+16; (Low address); OR; REV; SET1152; +; (Strat dump on track 12); J7V; (J if last time); JS10; E31M4; J6; 7; (Last time); JS10; V9P0M5; DUP; SHL+5; =M6; DUP; =E2M6; SHC+24; SHL+10; SHC+14; =V9P0M5; (Sets NOL = 32 words); SET1152; =M0M6N; JS13; SET7; =RM6; Q6; SET33;JS10; (Put entry for JO on disc); SETB40; J113P300; (Hold up obj pro); 10; (Write on global disc); SET768; +;LINK; J234P196; 12; (Invalid OUT25); SETB670; JP2; 50; (Swop levels - only available to JO); DUP; SHL+16; SHL-32; REV;=LINK; LINK; JS1P54; JS247P196; J8P196; (Set TR if swop not possible); 25; (OUT25, restore dumped prog if D0=0, swop levels if D0=1); (Used by JO, N2=Q-/LO/HI of prog now in store); JS3P193; J11; SETB10; JP2; (Fail 01 if not JO); 11; JS3P196; J50=Z; (If no TINT J); JSP161; SET9; =RC6; SET3;=I6; SHC+6; NEG; NOT; SHC-6; *98; V5P101M6Q; J96=; 97; J98C6NZS; J91; 96; V3; V1P101M6; NEV; J97!=Z; C6; NEG; =M6; V15P26M6; SHL+24; SHL-42; SETB65; NEV; J90!=Z; (J if tape still on machine); 91; (Switch); SET4; =RC5; V0P161; NOT; NEG; =V0P161; V-1; =V4; 95; V57P104M5; DUP; ZERO; SIGN; NEG; CONT; =V57P104M5Q; J95C5NZ; V2P23; DUP; =V0P23; V3P23; REV; J92!=Z; SETAV0P23; SHLD-16; ERASE; SHC+16; 92; =V1P23; ZERO; =V2P23; SETAV2P23; =V3P23; J93; 162; SETB7777; 163; V2P161; CAB; JS2P161; SHL+12; OR; SHL+6; C5; OR; SHL+6; V12P104M5; SHL-46; SHL+3; NEG; =C6; V0; SHLC6; SETB77; AND; OR; EXIT1; 90; ERASE; 100; V3P22; SET2; =M4; =Q7; J102C7Z; BUSYQ7; J4P45TR; V2P23; DUP; J1P45=Z; 1; METQ7; J112TR; 7; PARQ7; ZERO; =TR; DUP; =Q6; DUP; J11=Z;M7; I7; -; JS162; =M0M6; 4; MWQ7; 5; EXIT1; 254; (If punch then do gap); C5; SHC-4; J12=Z; V100P104M5; =M0M6QN; V108P104M5; =M0M6QN; V112P104M5;J31; 25; SETB02; 31; =M0M6QN; C6; NEG; JS162; =V7; 32; M6TOQ7; J4; 22; ZERO; C5; SHLD-3; SHL+4; V6; OR; SHLD+15; =M0M6QN; ERASE; V0P57; SHC+12; V0P0; SHA-24; SET30; +; FRB;V23P0; SHL+1; OR; V1; SHLD+18; SHL-6; SHLD-36; ERASE; SHC24; =M0M6QN; SETB170202; J31; 101; (L queue empty); ERASE; V57P104; V58P104; OR; V59P104; OR; V60P104; OR; J100=Z; (J if ELDON will not print tape); V0P161; =V25P101; J255; (Store serial number for OUT 11); 253; Q7; SET16; SET288; JS1P193; J90; (J if nogo); JSP126; V0P161; =M0M7N; (Put reel no tape in E8 of prog); =Q7; 255; M0TOQ4; 107; SETAV5; DUP; =I7; =M7; MLWQ7; V1P23M4; SHL+32; SHC+16; =V1P23M4; C7; =M6; JP135; 102; (No N tape); V2P23; J4P45=Z; I7; J4P45=Z; (J if no queued TINT T); JS5P4; (Enter TINT routine to attempt prog input); 9; V26P101; J4P45=Z; (J if foreground job); 8; ERASE; V0; J10=Z; (J if no JO req); 13; SET2048; JS1; EXIT1; 6; ZERO;=V0; V0P0; =V2; V26P101; SHL2;J4P45Z; (Exit if nogo); 2; (Input prog without store availability check); JS18P52; J3P45; V0P52; NOT; J3P45!=Z; (Exit if prog input in progress); (Now OK to go); JSP30; I7; SHL-5; JSP118; =V1P104M5; I4; SHC-7; =V77P104M5; (Suppress FLEX output); JS19P52; (Initiate input); EXIT2; (EXIT2 if prog initiated); 3; (Check for JO, EXIT1 if JO); V41P104M5; V37P104M5; 4; (Ditto ident in N1,N2); SHLD-30; ERASE; V17P254; (JO ident); NEV; J4P45=Z; EXIT2; 5; V49P104M5; V45P104M5; J4; (As 3 but during prog input); 7; V0P130; J8>=Z; (J if there is already a foreground job running); JSP117; J3P45; ERASE; JS2; EXIT1; ZERO; NOT; =V1; SET73; SHC-8; =V77P104M5; (Set foreground); J6; (To clear V0 and give monitor message); 10; (If time since last JO >4 mins then call JO); V0P0; V2; -; SHL-32; J1P45=Z; J13; 11; (OUT11, transfer from absolute address, used by JO); JS3P196; ERASE; JSP133; JSP196; JS1P139; V45P104M5; SHL-32; =RM6; M7; I7; DUP; =RM7; -; NOT; NEG; =C6; 111; M0M6Q; =M0M7Q; J111C6NZ; J8P196; (Copy core and go); (== 40 ==) 12; (OUT12, set up table in upper core store); JSP117; J112; ERASE; JS2P196; ERASE; C7; REV; JSP133; J114; V6P120; =RM6; I6=-1; M7; I7; -; NOT; NEG; DUP; =C7; -; J112=Z; (J if find or OUT 28); NEV; SHL-6; SHC-12; SHL-12; J23; (Ignore mod butno wild -); 22; JSP137; (For find do NEV with wild -); 23; J17!=Z; (fOUND); V-1P197M7; =V2; (Keep ID2); V0P197M7; (FOC); =V0; E20M4; DUP; NOT; J8=Z; ROUND; J200>=Z; (Delete); ZERO; V2P197M7; V3P197M7; JS19; JS29; (Set empty); (Only set 1st wd !=Z if more entries in same sector); J101; 8; ERASE; JS14; JS29; 101; JS2P199; V0; EXIT2; 200; (Mark prog used); V0; SHL19;J101=Z; (Check no OUT40 on); Q0TOQ7; JS1P139; (Await 2nd subprog); 17; ZERO; JS1P199; (Await fixed head access); V0; (Start on same sector as last allocated block, OUT29 resets); 10; =E20M4; JS5; (Read ASL sector); E20M4; DUP; NEG; NOT; SHL-2; SHL+5; DUP; V45P104M5; NOT; SHL-42; AND; SHL-3; OR; SET40; REV; -; =RC7; (Set up loop); (Keeps 2 cylinders for user discs); V45P104M5; J211=Z; NEG; (Max NOL in N1); SHLD+24; DUP; =M7; (Required BA); MAX;ERASE; M7; OR; SHC-24; (Actual BA/NOL); =V85P104M5; VR; J147P196; (Reset EDT and erase N1); 40; (OUT40, inhibit other levels from disc); JS3P196;JS8P196;ERASE; SHL-47; =Q7; JS1P139; Q7;J140=Z; V77P104M5; SHL+8; JP45=Z; 3; (Reset EDT); Q7; =V19P0; (Check nest); JSP62; J128; EXIT1; 128; SETB510; J4; 129; SETB10; 4; LINK; ERASE; JP2; 5; SETB600; JP2; 7; xD; 17; =LINK; ERASE; (Spare item in SJNS is removed later on); 6; SETB560; J4; 9; ERASE; SETB550; JP2; 21; (OUT21); 31; (OUT 31); ZERO; NOT; J127; 22; (OUT 22); ZERO; 127; =V49P104M5; JS2; 132; ERASE; V73P104M5; STR; ERASE; 130; =E20M4; JSP133; J5; C0TOQ7; JSP102; JS1P139; V45P104M5; SHL-32; SETB17700; AND; E20M4; V49P104M5; JP198; 100; ERASE; ERASE; SETB650; JP2; (Invalid global address); 23; (OUT23); JS2; ERASE; JS126; 147; Q7; =V19P0; 8; JS3P29; JS35P0; EXIT1; 126; JS10; =V73P104M5; EXIT1; 10; ZERO; SHLD+4; JS101; REV; SHL-42; SHL+9; OR; EXIT1; 30; (OUT30); SET1;=V49P104M5; JS3; ERASE; ZERO; J130; 32; (OUT32); JS3; ERASE; JS126; ZERO; =V49P104M5; JS3; J132; (== 44 ==); 41; (OUT41, write to user disc); JS3; ZERO; NOT; J142; 42; (OUT42, ditto but read); JS3; ZERO; 142; =V49P104M5; SHL-32; DUP; V77P104M5; SHL+16; DUP; SHL+1; +; ZERO; SHLD-16; SHL+8; J236; (Changes disc to sector no); 143; SET96; %I; =I7; SET16; %I; REV; SHL+9; REV; JS10; OR; REV; SHL+10; I7; SHLD-10; ERASE; REV; J130; 47; (OUT47); JS147; Q0TOQ7; JS1P139; V77P104M5; SHC+2; DUP; J1P45>=Z; STR; ERASE; SHC-2; =V77P104M5; 247; V1P104M5; DUP; SHC+1; J1P45=Z; (Check disc address not too big); 138; J143; 34; (OUT34); JS3; ZERO; J136; 36; (OUT36); JS3; SHL-32; SET768; +; ZERO; 234; =V49P104M5; J143; 70; +D; ERASE; ERASE; JS8; J247; P197V41; (Transfer fixed head sector); (N1=sector, N2=SJNS count); V0=QB16/AV1/AV40; V18; (Max number of system discs allowed, the only chnages necessary to increase this are in this routine); 100; DUP; V0; SHL-32; NEV; SETB17700; AND; J4P56=Z; [ label 100 must be on a word boundary (Does EXIT2 if sector already present); [ labels 100 and 1 are temporarily overwritten at start-up in P298 3; V0; =Q7; SETB100016; OR; =C7; Q7; =V0; NOT; NEG; (Add 1 to SJNS count); DUP; =V41; JSP199; 11; V0; SHL-32;=C7; JS14P199; PICQ7; JS6P199; EXIT1; J11; EXIT2; 5; ZERO; 4; (Form sum check); SET40; =RC7; *10; V1M7Q; DUMMY; DUMMY; NEV; J10C7NZS; EXIT1; 2; (Write ASL sector); JS5; V0; SHL+3; SHL-41; =M7; =V1P195M7; *1; (Write to disc); NOT; NEG; DUP; =V41; Q0TOQ7; JSP199; [ label 1 must be on a word boundary 12; V0; =Q7; JS14P199; (Check on disc Q); POCQ7; JS6P199; EXIT1; J12; EXIT2; P198; (Transfer to disc); (N1= -1 write, 0 read, +1 FH read, N2=posn. N3=sector); SHLD+16; SHL+16; OR; OR; DUP; =Q6; DUP; =E21M4; =E20M4; (== 45 ==); 1; SETB14000; M6; -; SET40; SHC-7; x; I7; +; M7; SIGN; J10<=Z; V77P104M5; SHC2; STR; ERASE; SHC-2; =V77P104M5; (Clear parity); C6; ABS; SHL-1; J9!=Z; JS8P196; M+I4; I4; =+C4; (Erase progs N2, switch subprog); PMHQ7; (Set LO to preserve area); 9; ZERO; JSP199; (Wait in queue); 12; E20M4; DUP; SHC+16; =Q6; SETB16; OR; =C7; M6; DUP; NEG; NOT; J4=Z; JS4P199; DUP; J2=Z; DUP; SETAR15P15; NEV; SHL32; J15=Z; POAQ7; NOT; J3=Z; (Checks for read in P15); 16; ZERO; JS5P199; J14; J12; 14; E20M4; SHC+16; =LINK; EXIT1; 4; JS14P199; PICQ7; J13; 2; PIAQ7; 13; ERASE; 3; ZERO; JS5P199; J99P23; J12; J99P23; 15; ERASE; PIAQ7; J16; 10; SETB500; JP2; P199V3; (Share out disc); V0=-1; (FH Q); V1=-1; (Disc Q); (V2 last seek address); (V3 last read address); (Await disc); Q0TOQ6; V1; DUP; DUP; SHL+1; AND;(-ve if Q empty); V77P104M5; SHL+8; (-ve if Q suspended by this level); OR; (-ve if OK to go ahead with transfer); J11>=Z; C4; SHLD+42; =V1; J3P45; 11; DUP; V23P0; SHL+1; AND; ZERO; FLOAT; FIX; =C7; ERASE; C4; NOT; SHL+42; NOT; SHCC7; AND; =V1M6; SETB100000; =C7; NOT; NEG; JS3P10; EXIT1; 1; (Await access to fixed heads); I4; SHC-3;V29P104M5; OR; =V29P104M5; ZERO; NOT; =Q6; V0; V0P197; DUP; ZERO; NOT; CONT; =V0P197; J11=Z; ERASE; V0P197; STR; ERASE; =V0P197; EXIT1; 3; (Allow disc access if free, entered every EDT); V1; DUP; =TR; SETB16; =C7; BUSYQ7; J1P45TR; Q0TOQ6; DUP; SHL-43; NEG; NOT; =M5; PARQ7; J16NTR; V77P104M5; SHL2;J21>=Z; V2; DUP; NOT;J71=Z; V3;SHL3; ZERO; SHLD3; JS72; SHL24; REV; SHL-44; JS72; OR; SHL6; REV; DUP; ZERO; SHAD6; JS72; PERM; SHL-44; REV; SHL-47; SHL3; OR; JS72; SHL24; OR; SHL6; J73; 71; ERASE; V3; SHL3; SHL-41; JS72; SETB100465; SHL9; SHC24; 73; V30P101; SETB4407; SHC-12; NEV; V24P0M5; SET4; JS4P6; 21; SET1; SHL+44; V77P104M5; OR; DUP; =V77P104M5; SHL+2; J18>=Z; ( SET; -> SET1; ???? ) 16; JS13; (Clear HU for completed transfer); 19; V1; DUP; J1P45=Z; V40; C7; SHLD-3; SHL+3; OR; SHC+21; =V37; 107; JSP32; J108; =C7; ZERO; NOT; 109; =V38; C7; SHL-4; J102!=Z; SET7; [ 2020fix V37; C7; SHLD-3; SHL+3; OR; SHC+9; C7; =M7; DUP; =V0P26M7; SHL+17; J110Z; V38; J107!=Z; J100; 108; DUP; =C7; J100=Z; J10C5Z; JSP204; J9; DUP; SET100; SIGN; J9>=Z; DUP; SET64; SIGN; J9=Z; SET3600; xD; ERASE; =Q5; JSP204; J12; DUP; SET60; SIGN; J12>=Z; SET60; xD; ERASE; Q5; +; SHL+24; =V0P0; V0P0; =V2P193; (Dont start JO immediately); E2; SHL-24; SHL+12; SETAV3P101; OR; SHL+12; SETAV0P104; OR; =E2; (Set up word 2 for OUT 11); J23P0; (Enter Director PROPER); 70; ERASE; ZERO;=V41; 60; SET8; J61; 200; V29P0; OR; =V29P0; EXIT1; P201; (Type message); 1; K4; ERASE; BUSYQ5; J1TR; POBQ5; EXIT1; P202; (Type query direct); JSP201; M5; I5; DUP; NOT; NEG; =RM5; -; 1; K4; ERASE; BUSYQ5; J1TR; PARQ5; =C5; J6TR; 2; SET8; J3C5NZ; =TR; 6; EXIT1; 3; =C6; M0M5Q; 4; ZERO; SHLD+6; SETB75; J5=; DC6; SETB37; SIGN; SHC-1; NOT; =TR; J4C6NZ; ERASE; J2; 5; ERASE; ERASE; J6NTR; EXIT2; P204; (Fetch decimal number); SETB77740; J1P32; P206; (Read prog.lst); V34P200; =Q5; SET16; =RC6; 1; PIBQ5; 2; K4; ERASE; BUSYQ5; J2TR; PARQ5; J102P200TR; Y2; Y1; DUP; JSP119; J102P200; J102P200; SHL+47; PERM; SHLD-30; ERASE; OR; =V0P254M6Q; J1C6NZ; EXIT1; (== 49 ==); P208V9; (OUT8,COPLOT,STREAM,COUNT); V0/1=P [CN]OUT*8*REEL*NO[Q]; V3/4=P [CNN]STREAM*COUNT[Q]; V6/8=P [C8N]COPLOT*REEL*NO[Q]; V41P200; J3=Z; SETAV0; =RI5; SETAV2; =M5; JSP202; JP208; SETAV2; =Q6; JSP204; JP208Z; (j IF PRIME n); (Select track 0 of global); SET3840; =RC4; *51; ZERO; NOT; =Y3840M4Q; *J51C4NZS; 68; V0; =Q5; POAQ5; JS12; JS100; EXIT1; 69; (Clear any jobs which were going on when Director put in); V0; =Q5; PIAQ5; JS12; J100; V20; =Q15; *64; M0M15Q; NOT; J65!=Z; 67; J64C15NZS; J68; 65; M-I15; M0M15N; SHL-24; SET40; xD; CONT; =RM14; SET39; =C14; ZERO; NOT; DUP; =Y3840M14Q; *66; ZERO; =Y3840M14Q; *J66C14NZS; DUP; =Y3840M14; DUP; =M0M15; DUP; =M0M15N; DUP; =E2M15; =E3M15; M+I15; J67; 61; V18; J62!=Z;J63; 120; ZERO;NOT; =V21; (Show primed and mode X); 20; (Prime); ERASE; 62; JS7; (Write empty PPI); JS12; J100; V21; DUP; =V0P76; (Set primed or not if Y or X); ZERO; NOT; SHL32;=Y3968; SETB13200; =Y3969; ZERO; NOT; DUP; =Y3841; DUP; =Y3842; SHL12; =Y3843; J150=Z; (J if prime Y); SET128; =RC5; (For mode X set ASL all ones); 236; ZERO; NOT; =Y3840M5Q; J236C5NZ; (ASL set up for prime X); J150; 7; V4; =Q5; POCQ5; EXIT1; (Write back new PPI and exit); 11; SETAV9; =RI5;M+I5; JSP201; J111; 12; K4; ERASE; BUSYQ5; J12TR; PARQ5; J4P45TR; EXIT2; 100; SETAV10; DUP; =RI5; =M5; JSP201; J103P200; P210V14; (Compute day of week); [ used in check that the correct date was input at start-up V0=B 03 36 14 62 50 35; V1/2=P SUNDAY[DQ]; V3/4=P MONDAY[DQ]; V5/6=P TUESDAY[Q]; V7/8=P WDNSDAY[Q]; V9/10=P THRSDAY[Q]; V11/12=P FRIDAY[DQ]; V13/14=P SATDAY[DQ]; M5; DUP; NOT; NEG; REV; NEG; NOT; SHL-2; +; SET12; C5; -; SET-3; xD; CONT; =C15; V0; SHLC15; SETB7; AND; x; C5; SET2; -; (== 51 ==); J1<=Z; M5; SET3; AND; J1!=Z; NOT; NEG; 1; I5; NEG; NOT; x; SET7; %I; REV; ERASE; DUP; JS200P200; SHL1; SETAV1; x; DUP; =RI15; NOT; NEG; =M15; 2; Q15TOQ5; JSP202; J2; M0M15; SHL-42; SETB71; NEV; J4P45!=Z; EXIT2; P297V0; (Simulate PPI in core); V0=40/6; SET1; =+Q1; DUP; V0P197; SHL+16; OR; SETB16; OR; SHC-16; =V0P197; JS2; *11; Y3600M15Q; =V1P197M7Q; J11C7NZS; EXIT2; 1; V0P197; SHL-32; JS2; *12; V1P197M7Q; =Y3600M15Q; J12C7NZS; EXIT2; 2; SHL-6; DUP; SHL+2; +; SHL+3; =RM15; SET40; =RC7; ERASE; EXIT1; P298V5; (Optimise PPI); V0=Q90/40/AY32; V1=Q2/1/AV3P11; V2=B07024402454456; V3=B0702440253; V4=Q13/3/0; V5=B 07 02 44 02 45 44 56 22; Q0TOQ14; R100P197; =Q10; R1P197; =Q11; R9; =R100P197; R10; =R1P197; (Bus FH handler); Q0TOQ5; V1; =Q4; (Play at level 0); V0; =Q8; 2; V4; =Q9; 3; M8M9; V5; J5=; SHL-6; V2; J4=; (J if EDN but not CON2); SHL-12; V3; J5!=; (J if not K prog); 4; JS60; 5; ERASE; J3C8NZ; M+I8; DC8; J2C6NZ; V4; =Q8; 6; V0; =Q9; (Put rest in PPI, 1 from each sector in turn); 7; M8M9Q; J8=Z; JS60; 8; J7C9NZ; M+I8; DC8; J6C8NZ; Q10; =R100P197; Q11; =R1P197; EXIT1; *9; JP297; *10; J1P297; 60; M-I9; M9; NOT; NEG; =RM3; K4; ERASE; (Keep clock happy - this bit takes 6 secs); SET1; =+Q14; M8M3N; =V81P104; M8M9N; =V49P104; M8M9; =V45P104; ZERO; =M8M9; (Mark as gone); M+I9; JS1P194; EXIT1; (Wierd if same in twice); ERASE; V49P104; V45P104; SHLD+16; SET2; J4P6; (Put ident of duplicated prog in FLEXqueue); P999V9; [ diagnostic aid V0 = Q 0/AV1/AV3; V1 = B0702640645636477; V2 = B5156470702640677; V3 = B4563645156470202; K4; ERASE; V0; =Q1; TWQ1; 2; K4; ERASE; BUSYQ1; J2TR; SETB6551; =M15; M0M15; ZERO; SHLD16; SETB177400; AND; SET6; OR; SHLD-16; ERASE; =M0M15; JP200; SET6; =R1; J1; $1; SETAP104; EXIT1; MRWDQ0; FINISH;