# Copyright: Public domain.
# Filename: YUL_SYSTEM_ASSEMBLER_PARA_PASS_1.mitigus
# Purpose: Part of the source code for YUL (revision 9).
# Assembler: TBD
# Contact: Jim Lawton <jim.lawton@gmail.com>
# Website: https://www.ibiblio.org/apollo/index.html
# Page scans: https://archive.org/details/yulsystemsourcec00hugh
# Pages: 211-222
# Mod history: 2016-10-06 JL Created.
# 2016-11-25 JL Transcribed pages 211-214.
# 2016-11-26 JL Transcribed pages 215-219.
# 2016-11-27 JL Transcribed pages 220-222.
# 2018-01-03 JL Fixed multiply-defined symbol OLDBINQ on p.216.
# Annotations:
#
# B L A I R - S M I T H
# Y U L S Y S T E M
#
# Listings in
# MITIGUS Format
#
# Note: Page numbers are scan page numbers rather than listing.
L @YUL SYSTEM ASSEMBLER PARA PASS 1
# Page 211
# @YUL SYSTEM ASSEMBLER PARA PASS 1 USER'S OWN PAGE NO. 1 PAGE 59
R2900 PARAPROGRAM RD1 -- PASS 1 -- GROUP B
R2901 ====================================
R2902 THIS PARAPROGRAM IS OPERATED BY GROUP B DURING PASS 1 AND READS SYPT, SYLT, AND BYPT RECORDS FROM
R2904 TAPE 1 (SYSTEM TAPE). IT CLASSIFIES SYPT AND SYLT RECORDS INTO DELETE, SAVE, AND INPUT RECORDS. SAVE RECORDS
R2906 ARE SIMPLY PASSED OVER UNTIL THE FIRST DELETE OR INPUT RECORD IS ENCOUNTERED. THEREAFTER, SAVE RECORDS ARE
R2908 TRANSMITTED TO BE WRITTEN ON TAPE 3 BY A PROGRAM IN GROUP C. IN A PROGRAM ASSEMBLY, ALL SYLTSAVES ARE TRANS-
R2910 MITTED. BYPT RECORDS ARE CLASSIFIED INTO DELETE OR SAVE RECORDS, BYPTSAVES BEING TRANSMITTED TO BE WRITTEN ON
R2912 TAPE 4. IN EACH FILE, THOSE RECORDS ARE DELETED WHOSE NAMES ARE THREADED FOR DELETION IN THE YUL FILE. ALSO,
R2914 IN A PROGRAM ASSEMBLY, ANY EXISTING LOAD DECK (BYPT RECORD) FOR THE PROGRAM BEING ASSEMBLED IS DELETED. THERE
R2916 ARE INPUT RECORDS FROM SYPT DURING A PROGRAM RE-ASSEMBLY, AND THERE ARE INPUT RECORDS FROM SYLT DURING A SUBROU-
R2918 TINE RE-ASSEMBLY OR WHENEVER SUBROUTINES ARE USED. THE FINAL TASK OF RD1 IS TO POSITION TAPE 1 CORRECTLY FOR
R2920 WRITING DURING PASS 2. SYLT RECORDS THAT ARE INPUT (EXCEPT BELONGING TO THE PRINCIPAL IN SUBROUTINE ASSEMBLY)
R2922 ARE ALSO SAVED, TO PERMIT ONE-SHOT MODIFICATION OF SUBROUTINES.
R2923 A "PARAPROGRAM" IS A SUBSIDIARY ROUTINE RUNNING IN A SIDE GROUP. WE ARE INDEBTED AS USUAL TO JOHN SHAW FOR
R29232 JSOCTL
2924 SETLOC,5 1056 B7
29244 TS L BANK 1 Z,X6 PASS 1 GPB
29245 TS L BANK 1 Z,X6 PASS 1 GPC MINI-TRANSFER-VECTOR FOR SIDE GP STARTS.
2925 BIT 6 P OCT 01
2926 BIT 25 P OCT -4000 0000
2927 SPEC SGN P OCT -10 0000
2928 BIT 46 OCT -4
2929 ONE P OCT -1
2930 D12 P OCT -17
2931 C5T8 P OCT -7777 7777
2932 CAC 3 P OCT -17 7777
2933 THREE P OCT -3
29335 *ONES P DEC GGGG GGGG GGGG
29338 D4T8P DEC 000G GGGG
29339 OCT 400 OCT -400
2934 OCT 200 OCT -200
# Page 212
# @YUL SYSTEM ASSEMBLER PARA PASS 1 USER'S OWN PAGE NO. 2 PAGE 60
P29345 ALPHABETIC CONSTANTS, RESERVATIONS, AND ADDRESS CONSTANTS.
2935 W END SYPT ALF END SYPT
2936 W END SYLT ALF END SYLT
2937 W END POPO ALF END¢POPO
2938 EOF BANER DEC -GGGG
2939 WANTED RESERVE 1
2940 LIST NAME RESERVE 1
2941 LHS RESERVE 3
29419 END SYMBF RESERVE 1
2942 SAVE XSP RESERVE 5
2943 L DO DELET SPEC DO DELETE
2944 SPEC DELETE Q
2945 L WANT PRG SPEC WANT PROG
2946 OCT -33757
2947 OCT -133770
2948 L DO INPUT SPEC DO INPUT
2949 L DO SAVE SPEC DO SAVE
2950 L DO INSAV SPEC DO INPSAV
2951 L SUBKNO Q SPEC SUBKNOW Q
2952 L GET SUBS SPEC GET SUBS
2953 L BANK 1 SPEC, B1 DAMN ZERO
2954 L ENDTHR 1 SPEC,B7 7
29544 L EORVF M2 CAC ANAL SYMB COMMON EOR OR EOF -2
# Page 213
# @YUL SYSTEM ASSEMBLER PARA PASS 1 USER'S OWN PAGE NO. 3 PAGE 61
P29545 ASSIGNMENTS AND EQUIVALENCES.
29546 COMMON ASSIGN 1,0
2955 TAPCO NAM ASSIGN 2,0
2956 TAPRO NAM ASSIGN 2,1
2957 PROG NAME ASSIGN 6,0
2958 NEXT NAME ASSIGN 6,1
2959 SWITCH ASSIGN 6,2
2960 MID POINT ASSIGN 6,40
2961 L PROG FIL ASSIGN 6,44
2962 INIT X5 ASSIGN 6,49
2963 SORS NAME ASSIGN 6,52
2964 COMPUTER ASSIGN 6,53
29645 SEG OWNER ASSIGN 6,54
2965 SUBSTRAB ASSIGN 6,55
2966 TRACK LOG ASSIGN 6,57
2967 DISCALIM ASSIGN 6,58
2968 DISC ADDR ASSIGN 6,59
2969 REC COUNT ASSIGN 6,60
2970 ZERO ASSIGN 6,62
2971 BIT 32 ASSIGN 6,69
2972 BIT 45 NOT ASSIGN 6,70
2973 TWO ASSIGN 6,71
2974 NINE ASSIGN 6,72
2975 FREE NTRY ASSIGN 6,73
2976 FREE EXIT ASSIGN 6,74
2977 SAPO NTRY ASSIGN 6,75
2978 P1 MASKS ASSIGN 6,76
2979 END PARAS ASSIGN 6,77
2980 END YUL ASSIGN 6,78
2981 DISASTER ASSIGN 6,81
2982 GRAB FREE ASSIGN 6,83
2983 FREE INSV ASSIGN 6,91
2984 SET FREE ASSIGN 6,95
2985 L STOPPER EQUALS CAC3 P
29851 L COMMON P EQUALS L EORVF M2
29852 L ANAL SYM EQUALS L EORVF M2
# Page 214
# @YUL SYSTEM ASSEMBLER PARA PASS 1 USER'S OWN PAGE NO. 4 PAGE 62
R2986 DECISION PROCESS UPON THE RECORD IN THE BUFFER WHOSE ADDRESS IS IN X2. SOME EXPLANATION IS CALLED FOR ABOUT THE
R2988 INDEXED SPECIAL REGISTER ADDRESSES ON THIS PAGE (3) AND PAGE 6. THEY ARE IN PRACTICE INDEXED INDIRECT MEMORY
R2990 ADDRESSES, AND ARE RESPECTIVELY A 3-WAY AND A 2-WAY BRANCH.
R2991 IF THERE ARE NO DELETES AND THE TASK IS NOT A PROGRAM ASSEMBLY, THEN ALL OF SYPT CAN BE PASSED BY. IN THIS CASE
R2993 X5 CONTAINS GB,R2 (WITH TAB BIT), SO THAT 5,Z,0 = N,R2 = DO DELETE. THE ADDRESS 5,Z,1 IS NOT USED.
R2995 IF THERE ARE NO DELETES AND THE TASK IS A PROGRAM ASSEMBLY, THEN SYPT RECORDS MIGHT BE EXAMINED FOR WANTEDNESS.
R2997 HERE C(X5) = GB,R4, SO THAT 5,Z,0 = N,R4 = WANTPROG. AGAIN, 5,Z,1 IS NOT USED.
R2999 IF THERE ARE DELETES AND THE TASK IS NOT A PROGRAM ASSEMBLY, THEN SYPT RECORDS MUST BE EXAMINED FOR DELETION
R3001 ONLY. HERE C(X5) = -3B,R3, SO THAT 5,Z,0 = N,R3 = DELETEQ. THEN 5,Z,1 IS ACTIVE IF THE RECORD IS NOT DELETED
R3003 AND = N,R2 = DO DELETE OR DO SAVE.
R3004 IF THERE ARE DELETES AND THE TASK IS A PROGRAM ASSEMBLY, THEN SYPT RECORDS MUST BE EXAMINED FIRST FOR DELETION
R3006 AND SECOND FOR WANTEDNESS. HERE C(X5) = +GB,R3, SO THAT 5,Z,0 = N,R3 = DELETEQ. THEN 5,Z,1 IS ACTIVE IF THE
R3008 RECORD IS NOT DELETED AND = N,R4 = WANTPROG.
R3009 ANALOGOUS RULES GOVERN SYLT RECORDS IN SUBROUTINE REVISIONS, EXCEPT THAT IN SYLT, N,R2 = DO SAVE ALWAYS.
3011 END FILE Q LA N,X2 CAC 3 P 5,Z,0 BRANCH IF NOT END OF FILE.
3013 TS C,+1 END FILE Q +1 END SYPT
3014 TS GOT EOFRI END FILE Q +1 END SYLT
3015 GOT EOFRI TS L STOPPER Z,X1 END BYPT
3016 DELETE Q TX 9 - Z,X0 LOOK THROUGH ENTIRE DELETE LIST IF THERE
3018 TS TAPRO NAM 6 C,+2 ARE ANY DELETES WAITING.
3020 SWS, B38T48 N,X0 0 Z,X0
3021 NA N,X0,1 TAPRO NAM C,-1
3022 NA Z,X0 L END THR 1 REAL DELE -2 BRANCH IF MATCH ON NAME WAS REAL.
3024 LA N,X2 C5T8 P 5,Z,1 FOUND END OF DELETE LIST, SO GO TO INPUT
3026 LA LHS C5T8 P 5,Z,1 OR SAVE RECORD IF COMPUTER NAME IS VOID
3028 TX Z,R2 - Z,SC OR OK, OTHERWISE ALWAYS SAVE IT.
3030 LA N,X2 C5T8 P REAL DELE ASSUME MATCH IF COMPUTER NAME IS VOID.
3032 NA, C1T4 TAPCO NAM 0,0 DELETE Q +2 LOOK AT NEXT DELETE NAME IF WRONG COMP.
3034 REAL DELE TS L DO DELET Z,SC SAVEMODE -1 C SWITCH FROM PASS TO SAVE MODE IF NEEDED.
3036 WANT PROG NA TAPRO NAM WANTED N,R2 BRANCH TO SAVE UNWANTED RECORD.
3038 TS - - SAVE MODE -1 C
3039 VERSION Q NA, B1T12R SWITCH 7 DO INPUT BRANCH IF RECORD IS NOT VERSION INPUT.
3041 TS - - DO INP SAV
# Page 215
# @YUL SYSTEM ASSEMBLER PARA PASS 1 USER'S OWN PAGE NO. 5 PAGE 63
P3042 PROCEDURE FOR THE END OF THE SYPT (SYMBOLIC YUL PROGRAM TAPE).
3043 END SYPT SSL, D12 Z,X5 0 C,-1 ENSURE WANTEDNESS CHECK DURING SYLT.
3045 SM Z,X5,2 Z,SC,1 - CHANGE GB,R2 TO GB,R4.
3047 SM Z,X5 SPEC SGN P Z,X5 CHANGE -GB,R3 TO +GB,R3.
3049 TS N,X2 EOF BANER SAVE MODE -1 C HIDE END SYPT FROM WWT, GO TO SAVE MODE.
3051 TS L PROG FIL Z,X4 FIND SUBS C POINT TO NAME OF 1ST POSSIBLE SUBRO.
3053 NA, PROG SUB SWITCH 7 UNWASSL TEST PROG/SUB BIT WHEN NO (OTHER) SUBS.
3055 NA, PROG SUB SWITCH ZERO ITS A SUBR TEST PROG/SUB BIT WHEN THERE ARE SUBROS.
3057 ITS A PROG TX L SUBKNO Q - Z,R4 SET UP WAIT FOR SUBROS OF THIS COMPUTER.
3059 TS N,X4 LIST NAME UNWASSL +1 POINT TO FIRST SUBROUTINE OF COMPUTER.
3061 ITS A SUBR SSL, ONE SWITCH 46 UNWASSL OMIT WANT QUESTION IF NOT MERGING.
3063 UNWASSL SSL, D12 Z,X5 0 UNWASSL -3 C
3064 NA NEXT NAME W END SYPT C,+2
3065 NA Z,S1 ZERO DO ALT OP MAYBE AWAIT DISC XFER HERE IF PROGRAM.
3067 TS N,X4 LIST NAME DO SAVE
3068 UNWANT HA Z,X5 SPEC SGN P Z,X5 CHANGE +GB,R3 TO -GB,R3.
3070 WD Z,X5 TWO Z,X5 CHANGE GB,R4 TO GB,R2.
3072 FIND SUBS SWS,THREAD10 4,1 0 Z,X4 C SUBROUTINE TO FIND SUBROUTINE NAMES...
3074 LA,BIT36R 4,1 ZERO C,-1 C SUBS FOR THIS MACH. ONLY ON THIS THREAD.
3076 LA Z,X4 L END THR 1 N,SC,1 C BRANCH IF ONLY END OF LIST WAS FOUND.
3078 TS Z,SC,1 - - EXIT SKIPPING WITH NAME FOUND VIA X4.
3080 SUB CALL Q LA, ONE 4,1 ZERO FIND SUBS C
3081 SUB KNOW Q NA TAPRO NAM LIST NAME N,R2 BYPASS RECORDS UNTIL 1ST POSSIBLE SUBRO.
3083 LA,KNEW SUBS SWITCH ZERO DO ALT OP WAIT FOR SUBROS TO BE ACCOUNTED FOR.
3085 TS SUB CALL Q FIND SUBS +1 FIND SUBS +1 C LOOK FOR NAME OF 1ST CALLED SUBRO.
3087 TS Z,R2 Z,SC UNWASSL C SAVE REST OF SYLT IF NONE.
3089 NA NEXT NAME W END SYLT C,+2
3090 TX N,X4 - NEXT NAME SPECIFY LOCATION OF TAPE BREAK.
3092 TX L GET SUBS - Z,R4 SET UP SEARCH FOR SLAVE SUBROUTINES.
3094 SEE NEXT NA TAPRO NAM N,X4 N,R2 SAVE IF NOT 1ST REC. OF NEXT WANTED.
3096 SS ZERO ONE P 4,1 REMOVE CALL BIT FROM SUBROUTINE NAME.
3098 TS N,X4 WANTED FIND SUBS C SET NEXT AS WANTED AND SEEK NEXT SLAVE.
3100 TX WANT PROG - GET SUBS CHECK WANT ONLY IF NO MORE SUBROS.
3102 GET SUBS NA TAPRO NAM WANTED SEE NEXT BRANCH IF NOT OF CURRENT SUBROUTINE.
3104 TS L DO INSAV Z,SC SAVEMODE -1 C DO BOTH INPUT AND SAVE.
R3106 PROCEDURE FOR THE END OF THE SYLT (SYMBOLIC YUL LIBRARY TAPE).
3107 END SYLT TS INIT X5 Z,X5 SAVE MODE -1 C RESTORE CRITERION FOR WANTEDNESS CHECK.
3109 NA Z,S1 ZERO DO ALT OP MAYBE AWAIT END OF DISC XFER IF SUBRO.
3111 TS Z,SC Z,X4 DO INP SAV SET UP BYPT PROCEDURE.
# Page 216
# @YUL SYSTEM ASSEMBLER PARA PASS 1 USER'S OWN PAGE NO. 6 PAGE 64
P311202 PROCEDURE TO ADD THE OWNER'S SYMBOL TABLE TO A SEGMENT'S SYMBOL TABLE.
311204 NA TAPRO NAM SEG OWNER OLD BINQ BRANCH IF NOT AUTHMEMO OF SEG'S OWNER.
31121 TX L EORVF M2 - Z,AU1
311213 NA N,AU1 ZERO C,-1 WAIT UNTIL PASS 1 IS DONE WITH SYM TAB.
311219 TS Z,SC Z,R4 DO SAVE SAVE AUTHMEMO AND PROCESS SYMTAB BELOW.
311225 LA TAPRO NAM +1 CAC3 P OLD BINQ -1 BACK TO NORMAL WHEN A PARAGRAPH COMES.
311231 TN Z,X1 5 SAVE XSP
311232*FLIP MXR HA Z,MXR ONE P Z,MXR S
311234 WA Z,X2 THREE P Z,X4 X4 POINTS TO 1ST SYMBOL IN RECORD.
31124 WA Z,X4 OCT 400 END SYMBF END SYMBF POINTS TO FIRST ORTHOWORD.
311246 SWE, CAC3 L COMMON P 16 Z,X1
311249 SEG SYMBS TX N,X4,1 - COMMON
311252 SWE, CAC3 L ANAL SYM 32 Z,CSC C ANALYZE HISTORY OF SYMBOL.
311258 LA COMMON +2 CAC3 P C,+3 BRANCH IF SYMBOL IS UNDEFINED.
311264 SM N,X2 D4T8 P N,X2 OTHERWISE IT'S IN MISCELLANEOUS TROUBLE.
31127 TS Z,X4,1 - C,+2
311273 SS N,X4,1 D4T8 P N,X2 SUPPLY HEALTH AND DEFINITION FROM OWNER.
311277* LA ONES P N,X4 C,+2
311279 NA Z,X4 END SYMBF SEG SYMBS
311282 TN SAVE XSP 5 Z,X1
311285* TS L DO SAVE Z,SC FLIP MXR C SAVE EACH SYMBOL TABLE RECORD.
311291 TS Z,SC Z,R4 DO SAVE SAVE FIRST PARAGRAPH, CONTINUE BELOW.
3113 OLD BINQ NA TAPRO NAM PROG NAME DO SAVE SAVE LOAD DECK UNLESS OF PROG BEING REV.
R3115 DISPOSITIONS OF RECORDS FROM TAPE 1. "SLEEP" MEANS "DO DISC (TRANSFERRED) INPUT IF NECESSARY, OTHERWISE SLEEP".
3116 DO DELETE LA Z,X3 ZERO RD NEXT SIMPLY READ AGAIN IF NO REMOTE COMING.
3118 TX Z,X3 - Z,X0 SWAP NEXT AND REMOTE BUFFERS.
3120 TS Z,X2 Z,X3 PHI TAPE
3121 RF,1 3,0 - DISASTER READ A NEW REMOTE.
3123 TS Z,X0 Z,X2 RD REMOTE +2
3126 DO INP SAV NA N,R5 ZERO DO ALT OP GO TO SLEEP IF JOINT LIST IS FULL.
3128 TX Z,X2 - N,R5,1 PUT BUFFER INTO JOINT STATUS.
3130 SM Z,R5 BIT 46 Z,R5 MODULATE JOINT LIST ENTRY POINTER.
3132 TX N,SC,1 - REMOTE Q -1 CALL FOR SAVE AFTER INPUT.
3134 TS ZERO REMOTE Q -1 DO SAVE
3135 DO INPUT NA N,R6 ZERO DO ALT OP GO TO SLEEP IF INPUT LIST IS FULL.
3137 TS Z,X2 N,R6,1 MON WAKE C PUT BUFFER INTO INPUT LIST, WAKE PASS 1.
3139 SWS, BIT46R Z,SC,5 16 Z,R6 MODULATE INPUT LIST ENTRY POINTER, SKIP.
3141 LA N,R7 ZERO C,+3 BRANCH IF SAPO LIST NOT FULL.
3143 TS Z,SC,1 - DO ALT OP OTHERWISE SLEEP UNTIL THERE'S A VACANCY.
3145 DO SAVE TS SAPO NTRY Z,R7 C,-2
3146 TS Z,X2 N,R7,1 - PUT SAVE BUFFER INTO SAPO STATUS.
3148 SM Z,R7 BIT 46 SAPO NTRY MODULATE SAPO LIST ENTRY POINTER.
3150 PR
# Page 217
# @YUL SYSTEM ASSEMBLER PARA PASS 1 USER'S OWN PAGE NO. 7 PAGE 65
P3151 PROCEDURE AFTER DISPOSITION OF EACH BUFFER.
3152 REMOTE Q LA Z,X3 ZERO CH NEX BUF GO FOR A BUFFER IF NO REMOTE.
3154 TS Z,X3 Z,X2 CH REM BUF CHANGE REMOTE TO NEXT, GO FOR REMOTE.
3156 CH NEX BUF TS Z,SC Z,CSC GRAB FREE C
3157 TS Z,AU1 Z,X2 C,+1 S ACQUIRE A FREE BUFFER.
3159 RD NEXT TS Z,X2 Z,X3 PHI TAPE SET UP DOUBLE TRY FOR REMOTE.
3161 RF,1 2,0 - DISASTER
3162 CH REM BUF LA Z,S1 ZERO GRAB REM -1 BRANCH IF NO DISC TRANSFER INPUT TO DO.
3164 TS Z,SC,5 - DO ALT OP
3165 REM BUF OK NA N,R7 BIT 32 GRAB REM BRANCH IF WE HAVE A BUFFER FOR REMOTE.
3167 LA Z,X3 ZERO RD REMOTE +2 GIVE UP AFTER 2ND FAILURE AT REMOTE.
3169 TS ZERO Z,X3 PHI TAPE
3170 RF,1 - - DISASTER
3171 TS FREE EXIT Z,R7 REM BUF OK SECOND TRY FOR A REMOTE BUFFER.
3173 GRAB REM TS N,R7 Z,X3 - GRAB NAME OF REMOTE BUFFER.
3175 TS BIT 32 N,R7,1 - PLANT BUSY FLAG IN FREE LIST.
3177 EX Z,R7 BIT 45 NOT FREE EXIT MODULATE FREE LIST EXIT POINTER.
3179 RD REMOTE TS - - PHI TAPE
3180 RF,1 3,0 - DISASTER
3181 NA, PROG SUB SWITCH ZERO SAVE MODE +2 ALWAYS CUT TAPE AT BEGINNING IN PROGRAM
3183 TS L DO SAVE Z,R2 SAVE MODE +1 ASSEMBLY. NOTE SEQUENCE MODE CALL HERE.
3185 CC N,X2 - LHS
3186 NA LHS ZERO DISASTER
3187 NA LHS +1 ZERO DISASTER BRANCH IF INCOMING RECORD HAD BAD ORTHO.
3189 WA REC COUNT ONE P REC COUNT
3190 NA, CAC3R 2,0 REC COUNT DISASTER BRANCH IF IT HAD BAD RECORD NUMBER.
3192 LA N,X2 C5T8 P END FILE Q IF NO COMPUTER NAME, SEE WHETHER EOF.
3194 HA N,X2 COMPUTER LHS FORM LEFT-HALF ZERO IF NAMES MATCH.
3196 LA LHS C5T8 P 5,Z,0 IF OK COMPUTER NAME, DO 3-WAY BRANCH.
3198 NA 5,Z,0 N,R4 5,Z,0 OTHERWISE DO ANYTHING BUT INPUT.
3200 TX Z,R2 - Z,SC ...WHICH FOR WRONG COMPUTER BECOMES SAV.
R3202 CLOSED SUBROUTINE TO CHANGE FROM PASSOVER TO SAVE MODE FOR NOMINALLY SAVE RECORDS.
3204 NA Z,R2 L DO DELET N,SC,1 C
3205 SAVEMODE TX L DO SAVE - Z,R2 C SAVES HEREAFTER ARE WRITTEN ON TAPE 3.
3207 SWE, SPECMAG N,X2 0 MID POINT RECORD NO. OF 1ST RECORD WRITTEN OVER.
3209 TN RD REMOTE +4 10 RD REMOTE +2 DO THAT TEST ON FIRST RECORD ONLY.
3211 TS - - RD REMOTE +2
# Page 218
# @YUL SYSTEM ASSEMBLER PARA PASS 1 USER'S OWN PAGE NO. 8 PAGE 66
P3212 PROCEDURE AFTER BYPT IS READ, TO POSITION TAPE 1 AT THE FIRST RECORD THAT WAS INPUT OR DELETED. THE RECORD
R3214 NUMBER KEPT IN MIDPOINT AND THAT OF THE EOFRI RECORD ARE USED TO DETERMINE THE OPTIMUM WAY OF POSITIONING, CON-
R3216 SIDERING ALL RECORDS TO HAVE EQUAL LENGTH AND THAT RECORDS ARE REWOUND OVER THREE TIMES AS FAST AS READ OVER.
R3218 IF BIT 11 OF SWITCH IS FOUND TO BE ON BEFORE OR DURING POSITIONING, EITHER THE TASK IS A REPRINT, OR A MERGING
R3220 ERROR HAS BEEN FOUND. IN THESE CASES, YULPROGS WILL NOT BE WRITTEN ON, SO REWIND AND FORGET POSITIONING.
3222 END BYPT TS - - PHI TAPE
3223 RF,1 - - -
3224 LA Z,X3 ZERO C,+2 BRANCH IF THERE IS NO REMOTE.
3226 TS Z,X3 Z,SH SET FREE C FREE REMOTE EOFRI BUFFER.
3228 TS C,+1 REMOTE Q DO INP SAV TRANSMIT EOFRI RECORD.
3230 TS - - C,+1
3231 WD N,X2 MID POINT Z,S3 FORM COUNT FOR BACKWARDS RUN.
3233 LA Z,X3 ZERO C,+2 BRANCH IF THERE WAS NO REMOTE BUFFER.
3235 WA Z,S3 ONE P Z,S3 INCLUDE 2ND EOFRI IN BACKSPACE COUNT.
3237 WA MID POINT MID POINT LHS
3238 END P1 RB SSL, ONE SWITCH 37 C,+1 OMIT TEST IF BIT 11 IS ON.
3240 LA Z,S3 LHS BK SPACE BRANCH IF BACKSPACING IS BETTER.
3242 END P1 RW TS MID POINT Z,S3 PHI TAPE
3243 RW,1 - - -
3244 WA Z,S3 ONE P Z,S3 FORM COUNT FOR READING FORWARD.
3246 END P1 RF SSL, ONE SWITCH 37 C,+1
3247 TS Z,SC,4 - PHI TAPE
3248 LA MID POINT Z,S3 C,+2
3249 TS - - END P1 RW IF REWIND WAS NOT DONE, GO TO DO IT NOW.
3251 NA MID POINT Z,S3 DEAD STOP -1 OTHERWISE NO-HUNT FROM BIT TEST TO STOP.
3253 TS - - END P1 RW
3254 RF,1 1,0 - DISASTER
3255 NA Z,S3,1 ONE P END P1 RF
3256 BK SPACE TS - - PHI TAPE
3257 RB,1 1,0 - DISASTER
3258 NA Z,S3,1 ZERO END P1 RB GO TO REWIND AND HALT IF BIT 11 IS ON.
3260 TS ZERO Z,S3 PHI TAPE PLAY SAFE ABOUT MOD3 CHECK BITS.
3262 RB,1 - - DISASTER FINAL DUMMY READ FOR POSITIONING.
3264 SWS, CHAR1 ZERO 0 END PARAS
R3265 FINAL INSTRUCTION FOR PARAPROGRAMS.
3266 DEAD STOP TS Z,R0 Z,SC MON WAKE C WAKE OTHERS AND GO BACK TO BED.
# Page 219
# @YUL SYSTEM ASSEMBLER PARA PASS 1 USER'S OWN PAGE NO. 9 PAGE 67
P3268 PROCEDURE TO INPUT CARD IMAGES TO PASS 1 FROM A FILE ON THE DISC INSTEAD OF FROM TAPE. THE FILE MUST HAVE BEEN
R3270 PUT ON THE DISC BY A TRANSFER TASK. THE RESULT OF A "TRANSFERRED ASSEMBLY" IS A NEW PROGRAM OR SUBROUTINE.
R3272 CONSTANTS, RESERVATION, AND EQUIVALENCES.
3273 130 IN A PR 130
3274 OCT 1000 OCT -1000
3275 8 BLOX OCT 0000 0010
3276 SNATRACK DEC -31
3277 DF INC MSG ALF,3 DISC FILE INCOMPLETE (½)
3278 END RUINS ALF,5 ⌑999999Q RUINS OF INCOMPLETE DISCFILE
3279 DISC BUF 1 CAC XFR BEGIN 13288
3280 DISC BUF 2 SPEC 13800
3281 TRINDEX RESERVE 15
3282 L XFR BEGN EQUALS DISC BUF 1
3283 MOVE RECD RT N,AU1 - N,S3 MOVE RECORD FROM DISCBUF2 TO DISCBUF 1.
3285 NA DISC ADDR DISCALIM READ DB2 BRANCH UNLESS JUST EXHAUSTED A TRACK.
3287 DS TRACK LOG ONE P TRACK LOG DECREMENT LOG NO. FROM TRACK TO TRACK.
3289 XFR BEGIN SWS, C1T4 TRACK LOG D,6,L TRINDEX +2
3290 TS ZERO DISC ADDR DISCAP C
3291 OCT -1 LOOKUP TRACK WITH KNOWN LOG NUMBER.
3293 SPEC TRINDEX
3294 TS, B7T13 TRINDEX +6 DISC ADDR C,-2
3295 SET DTRAP TS DF INCOMP DTRAP LOC DTRAP LOC -1 SET UP CUSS FOR INCOMPLETE DISCFILE.
3297 NA, C7T8 TRINDEX +3 SNATRACK C,-1 GIVE UP QUICK IF FILE IS WRONG TYPE.
3299 SWS, B7T13 DISC ADDR 0 DISCALIM
3300 READ DB2 TX DISC BUF 2 - Z,X0
3301 S, DISC READ 0,0 8 DISC ADDR READ 512 WORDS FROM DISC.
3303 WA DISC ADDR 8 BLOX DISC ADDR
3304 TX SAME 8K - C,+0 (SPECIAL INITIAL STATE).
3306 DTRAP LOC NA N,R1 ZERO DO ALT OP DO TAPE OPS IF WAITING FOR DISC.
3308 NA, C1T4 1,0 EOR SAME 8K BRANCH IF NOT END OF 8K-WORD SUPER-RECD.
3310 HA C,-1 130 IN A C,-1 AUGMENT IS ALTERNATIVELY 0 AND 130.
3312 LA, B22T25 C,-2 BIT 25 P MOVE BAK 2 BRANCH IF END OF 8K BUT NOT END OF 16K.
3314 TS DISC BUF 2 Z,X1 SAME 8K +1 AFTER 16K, NO INPUT, THEN MOVE, READ.
# Page 220
# @YUL SYSTEM ASSEMBLER PARA PASS 1 USER'S OWN PAGE NO. 10 PAGE 68
P3316 EACH 512-WORD RECORD FROM DISC HAS A COMPLETE 26-CARD INPUT RECORD AND PIECES OF ONE OR TWO MORE.
3318 MOVE BAK 2 RT 1,132 - 1,130 SINCE TRANSFER HAD PUT 819 CARDS IN 8K.
3320 TS FREE EXIT Z,R7 XFR INPUT INPUT LAST 26 CARDS IN OLD 8K.
3322 WD DISC BUF 2 TWO Z,AU1
3323 SM Z,X1,2 Z,SC,2 -
3324 SAMKE 8K TS FREE EXIT Z,R7 XFR INPUT INPUT 26 CARDS (260 WORDS) TO PASS 1.
3326 TX DISC BUF 2 - Z,AU1
3327 WD Z,X1 OCT 1000 Z,X1 BECAUSE RECORD IS MOVED BACK 512 WORDS.
3329 TS DISC BUF 1 Z,S3 MOVE RECD CLEAR OUT DISC BUF 2 FOR NEW DISC READ.
R3331 SUBROUTINE TO DELIVER 26 CARDS TO PASS 1 BY WAY OF THE INPUT LIST.
3332 XFR INPUT TS Z,SH Z,S3 -
3333 NA N,R7 BIT 32 GRAB XFER BRANCH IF THERE IS A FREE BUFFER.
3335 DO ALT OP TS Z,S1 Z,SC C,+1 C
3336 LA Z,S1 ZERO C,+2 C BRANCH IF NOT DOING TRANSFERRED ASSY.
3338 WD Z,SH ONE P Z,S1 S SET UP S1 FOR RETURN AND DO OTHER OP.
3340 WD Z,SH ONE P Z,SC C
3341 TS Z,SC Z,CSC MON SLEEP C
3342 GRAB XFER TS N,R7 Z,S2 GRAB REM +1 C
3343 TS D12 P Z,CSH - C REMOVE BUFFER NAME FROM FREE LIST.
3345 XF SET AU2 TN ZERO 2 N,S2 S CLEAR 1ST WORD OF 265-WORD BUFFER.
3347 MT N,X1,1 52 N,AU2,1 MOVE 260 WORDS.
3349 LA BIT 46 Z,CSH,3 C,-1
3350 TX END RUINS - N,AU2,1 SET UP SEARCH FOR "END OF" CARD.
3352 TS EOR N,AU2 XF SET AU2 C MAKE 264-WD BUFF LOOK LIKE ODD TAPE REC.
3354 NA N,AU2,10 END RUINS C,+0
3355 WD Z,AU2,1 NINE Z,AU1
3356 NA N,AU1 EOR END DFILE BRANCH IF FOUND THE "END OF" CARD.
3358 DO X INPUT NA N,R6 ZERO DO ALT OP SLEEP OR DO TAPE IF NO ROOM IN INPUTLST.
3360 TS Z,S2 N,R6,1 MON WAKE C PUT BUFFER IN INPUT STATUS, WAKE PASS 1.
3362 SS ZERO BIT 46 Z,R6 MODULATE INPUT LIST ENTRY POINTER.
3364 NA Z,S3 Z,S1 N,S3 EXIT UNLESS JUST SENT LAST INPUT.
3366 NA N,R1 ZERO DO ALT OP SLEEP OR DO TAPE UNTIL DISC READ DONE.
3368 TS ZERO Z,S1 N,S3 SHOW END OF DISC OPS, EXIT.
3370 END DFILE TX EOR - N,AU2 SHORTEN BUFFER CONTAINING "END OF" CARD.
3372 TS Z,S1 Z,S3 DO X INPUT SET FLAG AND DO LAST INPUT.
3374 DF INCOMP S, MON TYPER DF INC MSG SPRA +24 C,+1 "DISCFILE INCOMPLETE (?)".
3376 TN END RUINS 5 N,X1
3377 TN TRINDEX 2 N,AU2 PHONY UP AN "END OF" CARD.
3379 SWS, BIT 11 ONE P 11 SWITCH CALL THIS ASSEMBLY A REJECT.
3381 TS END YUL +2 END YUL +1 SAME 8K SET FLAG FOR END OF RD1.
# Page 221
# @YUL SYSTEM ASSEMBLER PARA PASS 1 USER'S OWN PAGE NO. 11 PAGE 69
P3383 PARAPROGRAM WWT -- PASS 1 -- GROUP C
R3384 ====================================
R3385 THIS PARAPROGRAM IS OPERATED BY GROUP C DURING PASS 1 AND WRITES SYPT AND SYLT SAVE RECORDS ON TAPE 3
R3387 AND BYPT SAVE RECORDS ON TAPE 4, KEEPING THE ORIGINAL BANNERS. WWT ALSO WRITES POPO RECORDS ON TAPE 2. AT THE
R3389 END OF PASS 1, TAPES 2 AND 3 ARE REWOUND.
3390 TS - - MON SLEEP C
3391 CH SP LIST LA N,R6 ZERO C,-1 GO TO SLEEP IF SAPO LIST IS EMPTY.
3393 TX N,R6 - Z,X2 RECEIVE NAME OF SAPO BUFFER.
3395 TS ZERO N,R6,1 MON WAKE C PLANT VOID FLAG IN SAPO LIST.
3397 SM Z,R6 BIT 46 Z,R6 MODULATE SAPO LIST EXIT POINTER.
3399 LA N,X2 ZERO WRIT POPO BRANCH IF SAPO IS A POPO BUFFER.
3401 TS TRY PO REM CH SP LIST PHI TAPE SET REMOTE SWITCH TO POPO.
3403 WRITE SAV WF,3 2,0 - DISASTER
3404 LA Z,X3 ZERO C,+2 BRANCH IF THERE IS NO SAVE REMOTE.
3406 TS Z,X3 Z,SH FREE IN SV C FREE SAVE REMOTE.
3408 LA, C5T8 2,0 EOF BANER LAS2REM1 BRANCH IF NOT END SYLT OR END BYPT.
3410 WA WRITE SAV BIT 6 P WRITE SAV CHANGE TAPE 3 TO TAPE 4.
3412 TS ZERO Z,X3 PHI TAPE
3413 WF,3 2,0 - DISASTER WRITE END-OF-FILE RECORD AGAIN.
3415 WA DUMMY SAV BIT 6 P DUMMY SAV
3416 TS WRITE SAV C,-2 PHI TAPE
3417 WF,3 - - DISASTER
3418 FREE EOF TS Z,X2 Z,SH FREE IN SV C FREE END-OF-FILE BUFFER.
3420 TS DUMMY SAV C,-2 PHI TAPE
3421 RW,3 - - -
3422 TS C,+1 FREE EOF +1 CH SP LIST CHANGE POST-EOF ACTION AND LOOP.
3424 TS ZERO W34 WAIT WR2 WAIT END OF W34 SECTION OF WWT.
3426 SAV REMOT LA Z,X3 ZERO CH SP LIST -1 GO TO SLEEP IF NEITHER TYPE OF REMOTE.
3428 LA Z,X3 ZERO PO REMOT BRANCH IF NO SAVE REMOTE.
3430 TS TRY PO REM CH SP LIST PHI TAPE SET REMOTE SWITCHG TO POPO.
3432 DUMMY SAV WF,3 - - DISASTER
3433 TS Z,X3 Z,SH FREE IN SV C
3434 TS ZERO Z,X3 CH SP LIST FREE SAVE REMOTE & SHOW LACK THEROF.
3436 TRY SA MEM LA N,R6 ZERO SAV REMOT +1 BRANCH IF SAPO LIST IS EMPTY.
3438 LAS2REM1 TS Z,X2 Z,X3 CH SP LIST
# Page 222
# @YUL SYSTEM ASSEMBLER PARA PASS 1 USER'S OWN PAGE NO. 12 PAGE 70
P3439 PROCEDURE IN PARAPROGRAM WWT TO DISPATCH A POPO BUFFER.
3440 WRIT POPO TS TRY SA REM CH SP LIST PHI TAPE SET REMOTE SWITCH TO SAVE.
3442 WF,2 2,0 - DISASTER
3443 LA Z,X4 ZERO C,+2 BRANCH IF THERE IS NO POPO REMOTE.
3445 TS Z,X4 Z,SH SET FREE C FREE POPO REMOTE.
3447 NA 2,2 W END POPO LAS2REM2 BRANCH IF NOT END OF TAPE.
3449 TS ZERO Z,X4 PHI TAPE
3450 WF,2 - - DISASTER
3451 TS Z,X2 Z,SH SET FREE C FREE END POPO BUFFER.
3453 TS TRY SA REM CH SP LIST PHI TAPE SET REMOTE SWITCH TO SAVE MODE.
3455 RW,2 - - -
3456 TS WR2 WAIT +1 WR2 WAIT W34 WAIT END OF WR2 SECTION OF WWT.
3458 PO REMOT LA Z,X4 ZERO CH SP LIST -1 BRANCH IF NEITHER TYPE OF REMOTE.
3460 LA Z,X4 ZERO SAV REMOT BRANCH IF THERE IS NO POPO REMOTE.
3462 TS TRY SA REM CH SP LIST PHI TAPE SET REMOTE SWITCH TO SAVE MODE.
3464 WF,2 - - DISASTER
3465 TS Z,X4 Z,SH SET FREE C
3466 TS ZERO Z,X4 CH SP LIST FREE POPO REMOTE & SHOW LACK THEREOF.
3468 TRY PO REM LA N,R6 ZERO PO REMOT +1 BRANCH IF SAPO LIST IS EMPTY.
3470 LAS2REM2 TS Z,X2 Z,X4 CH SP LIST LAST POPO BECOMES POPO REMOTE.
3472 W34 WAIT TS - - CH SP LIST
3473 WR2 WAIT TS - - CH SP LIST
3474 TS, CAC3R ZERO END PARAS DEAD STOP
34745 *PARA PACH RESERVE 10
R3475 INITIALIZING SEQUENCES FOR PARAPROGRAMS.
3477 PASS 1 GPB HA P1 MASKS ONE P Z,MXR SIDE GRPS USE SAME S, INVERSE F AS GP A.
3479 TN SUBSTRAB 2 TRINDEX DISC FILE NAME OF TRANSFERRED INPUT.
3481 EBA Z,X7 BIT 46 Z,X1 PRETEND X1 IS LOOKING AT AN END-BUFFLAG.
3483 TN L DO DELET 5 Z,R2 LOAD ADDRESSES FOR INSTANT BRANCHING.
3485 SSL, ONE SWITCH 35 C,+1
3486 TS ZERO Z,S1 C,+2 SHOW THAT THERE IS NO TRANSFERRED INPUT.
3488 SWE, CAC3 L XFR BEGN 16 Z,S1 SHOW TAPE ROUTINES WHERE TO GO FOR DISC.
3490 TX INIT X5 - Z,X5 SET X5 TO R2, +-R3, OR R4 OF GROUP B.
3492 EBS Z,X7 OCT 200 Z,R1
3493 SWE, B38T48 DISC CHEK 24 C,+0 GET A ADDRESS OF ORDER IN XFER VECTOR.
3495 EBA Z,R1 C,-1 Z,R1
3496 EBA N,R1 THREE P Z,R1 POINT TO DFLOK (DISC FILE LOCK) IN MON.
3498 TS SORS NAME WANTED CH NEX BUF BEGIN READING TAPE 1.
3501 PASS 1 GPC TS SAPO NTRY Z,R6 PASS1 GPB C LOAD BUFFER LIST ADDRESS AND MXR.
3503 TS ZERO Z,X4 DUMMY SAV +2 INITIALIZE REMOTE SWITCH AND BEGIN.