Source Code

046068,000001: # Copyright: Public domain. 046069,000002: # Filename: WAITLIST.agc 046070,000003: # Purpose: A section of Luminary 1C, revision 131. 046071,000004: # It is part of the source code for the Lunar Module's (LM) 046072,000005: # Apollo Guidance Computer (AGC) for Apollo 13 and Apollo 14. 046073,000006: # This file is intended to be a faithful transcription, except 046074,000007: # that the code format has been changed to conform to the 046075,000008: # requirements of the yaYUL assembler rather than the 046076,000009: # original YUL assembler. 046077,000010: # Reference: pp. 1116-1131 of 1729.pdf. 046078,000011: # Contact: Ron Burkey <info@sandroid.org>. 046079,000012: # Website: www.ibiblio.org/apollo/index.html 046080,000013: # Mod history: 05/31/03 RSB. Began transcribing. 046081,000014: # 05/14/05 RSB Corrected website reference above. 046082,000015: # 2010-10-25 JL Indentation fixes. 046083,000016: # 2011-05-07 JL Removed workarounds. 046084,000017: 046085,000018: # Page 1116 046086,000019: # PROGRAM DESCRIPTION DATE -- 10 OCTOBER 1966 046087,000020: # MOD NO -- 2 LOG SECTION -- WAITLIST 046088,000021: # MOD BY -- MILLER (DTMAX INCREASED TO 162.5 SEC) ASSEMBLY -- SUNBURST REV 5 046089,000022: # MOD 3 BY KERNAN (INHINT INSERTED AT WAITLIST) 2/28/68 SKIPPER REV 4 046090,000023: # MOD 4 BY KERNAN (TWIDDLE IN 54) 3/28/68 SKIPPER REV 13. 046091,000024: 046092,000025: # FUNCTIONAL DESCRIPTION -- 046093,000026: # PART OF A SECTION OF PROGRAMS -- WAITLIST, TASKOVER, T3RUPT, USED TO CALL A PROGRAM (CALLED A TASK), 046094,000027: # WHICH IS TO BEGIN IN C(A) CENTISECONDS. WAITLIST UPDATES TIME3, LST1, AND LST2. THE MEANING OF THESE LISTS 046095,000028: # FOLLOW. 046096,000029: 046097,000030: # ((TIME3) = 16384 -(T1-T) CENTISECONDS, (T=PRESENT TIME, T1-TIME FOR TASK1) 046098,000031: 046099,000032: # C(LST1) = -(T2-T1)+1 046100,000033: # C(LST1 +1) = -(T3-T2)+1 046101,000034: # C(LST1 +2) = -(T4-T3)+1 046102,000035: # ... 046103,000036: # C(LST1 +6) = -(T8-T7)+1 046104,000037: # C(LST1 +7) = -(T9-T8)+1 046105,000038: 046106,000039: # C(LST2) = 2CADR OF TASK1 046107,000040: # C(LST2 +2) = 2CADR OF TASK2 046108,000041: # ... 046109,000042: # C(LST2 +14) = 2CADR OF TASK8 046110,000043: # C(LST2 +16) = 2CADR OF TASK9 046111,000044: 046112,000045: # WARNINGS -- 046113,000046: # 1) 1 <= C(A) <= 16250D (1 CENTISCOND TO 162.5 SEC) 046114,000047: # 2) 9 TASKS MAXIMUM 046115,000048: # 3) TASKS CALLED UNDER INTERRUPT INHIBITED 046116,000049: # 4) TASKS END BY TC TASKOVER 046117,000050: 046118,000051: # CALLING SEQUENCE -- 046119,000052: # L-1 CA DELTAT (TIME IN CENTISECONDS TO TASK START) 046120,000053: # L TC WAITLIST 046121,000054: # L+1 2CADR DESIRED TASK. 046122,000055: # L+2 (MINOR OF 2CADR) 046123,000056: # L+3 RELINT (RETURNS HERE) 046124,000057: 046125,000058: # TWIDDLE -- 046126,000059: # TWIDDLE IS FOR USE WHEN THE TASK BEING SET UP IS IN THE SAME EBANK AND FBANK AS THE USER. IN 046127,000060: # SUCH CASES, IT IMPROVES UPON WAITLIST BY ELIMINATING THE NEED FOR THE BBCON HALF OF THE 2CADR, 046128,000061: # Page 1117 046129,000062: # SAVING A WORD. TWIDDLE IS LIKE WAITLIST IN EVERY RESPECT EXCEPT CALLING SEQUENCE, TO WIT, 046130,000063: # L-1 CA DELTAT 046131,000064: # L TC TWIDDLE 046132,000065: # L+1 ADRES DESIRED TASK 046133,000066: # L+2 RELINT (RETURNS HERE) 046134,000067: 046135,000068: # NORMAL EXIT MODES -- 046136,000069: # AT L+3 OF CALLING SEQUENCE. 046137,000070: 046138,000071: # ALARM OR ABORT EXIT MODES -- 046139,000072: # TC ABORT 046140,000073: # OCT 1203 (WAITLIST OVERFLOW -- TOO MANY TASKS) 046141,000074: 046142,000075: # ERASABLE INITIALIZATION REQUIRED -- 046143,000076: # ACCOMPLISHED BY FRESH START -- LST2, ..., LST2 +16 = ENDTASK 046144,000077: # LST1, ..., LST1 +7 = NEG1/2 046145,000078: 046146,000079: # OUTPUT -- 046147,000080: # LST1 AND LST2 UPDATED WTIH NEW TASK AND ASSOCIATED TIME. 046148,000081: 046149,000082: # DEBRIS -- 046150,000083: # CENTRALS -- A,Q,L 046151,000084: # OTHER -- WAITEXIT, WAITADR, WAITTEMP, WAITBANK 046152,000085: 046153,000086: # DETAILED ANALYSIS OF TIMING -- 046154,000087: # CONTROL WILL NOT BE RETURNED TO THE SPECIFIED ADDRESS (2CADR) IN EXACTLY DELTA T CENTISECONDS. 046155,000088: # THE APPROXIMATE TIME MAY BE CALCULATED AS FOLLOWS: 046156,000089: # LET T0 = THE TIME OF THE TC WAITLIST 046157,000090: # LET TS = T0 +147U + COUNTER INCREMENTS (SET UP TIME) 046158,000091: # LET X = TS -(100TS)/100 (VARIANCE FROM COUNTERS) 046159,000092: # LET Y = LENGTH OF TIME OF INHIBIT INTERRUPT AFTER T3RUPT 046160,000093: # LET Z = LENGTH OF TIME TO PROCESS TASKS WHICH ARE DUE THIS T3RUPT BUT DISPATCHED EARLIER. 046161,000094: # (Z=0, USUALLY). 046162,000095: # LET DELTD = THE ACTUAL TIME TAKEN TO GIVE CONTROL TO 2CADR 046163,000096: # THEN DELTD = TS+DELTA T -X +Y +Z +1.05MS* +COUNTERS* 046164,000097: # *THE TIME TAKEN BY WAITLIST ITSELF AND THE COUNTER TICKING DURING THIS WAITLIST TIME. 046165,000098: # IN SHORT, THE ACTUAL TIME TO RETURN CONTROL TO A 2CADR IS AUGMENTED BY THE TIME TO SET UP THE TASK'S 046166,000099: # INTERRUPT, ALL COUNTERS TICKING, THE T3RUPT PROCESSING TIME, THE WAITLIST PROCESSING TIME AND THE POSSIBILITY 046167,000100: # OF OTHER TASKS INHIBITING THE INTERRUPT. 046168,000101: 046169,000102: 5173 BLOCK 02 046170,000103: # Page 1118 046171,000104: 5173 E3,1400 EBANK= LST1 # TASK LISTS IN SWITCHED E BANK. 046172,000105: 046173,000106: 5173 COUNT* $$/WAIT 046174,000107: 5173 00004 TWIDDLE INHINT 046175,000108: 5174 54001 TS L # SAVE DELAY TIME IN L 046176,000109: 5175 34733 CA POSMAX 046177,000110: 5176 26002 ADS Q # CREATING OVERFLOW AND Q-1 IN Q 046178,000111: 5177 30006 CA BBANK 046179,000112: 5200 00006 EXTEND 046180,000113: 5201 04007 ROR SUPERBNK 046181,000114: 5202 56001 XCH L 046182,000115: 046183,000116: 5203 00004 WAITLIST INHINT 046184,000117: 5204 56002 XCH Q # SAVE DELTA T IN Q AND RETURN IN 046185,000118: 5205 54061 TS WAITEXIT # WAITEXIT. 046186,000119: 5206 00006 EXTEND 046187,000120: 5207 50061 INDEX WAITEXIT # IF TWIDDLING, THE TS SKIPS TO HERE 046188,000121: 5210 30001 DCA 0 # PICK UP 2CADR OF TASK. 046189,000122: 5211 54063 -1 TS WAITADR # BBCON WILL REMAIN IN L 046190,000123: 5212 35220 DLY2 CAF WAITBB # ENTRY FROM FIXDELAY AND VARDELAY. 046191,000124: 5213 56006 XCH BBANK 046192,000125: 5214 13232 TCF WAIT2 046193,000126: 046194,000127: # RETURN TO CALLER AFTER TASK INSERTION: 046195,000128: 046196,000129: 5215 52062 LVWTLIST DXCH WAITEXIT 046197,000130: 5216 64752 AD TWO 046198,000131: 5217 52006 DTCB 046199,000132: 046200,000133: 5220 E3,1400 EBANK= LST1 046201,000134: 5220 02063 WAITBB BBCON WAIT2 046202,000135: 046203,000136: # RETURN TO CALLER +2 AFTER WAITING DT SPECIFIED AT CALLER +1. 046204,000137: 046205,000138: 5221 50002 FIXDELAY INDEX Q # BOTH ROUTINES MUST BE CALLED UNDER 046206,000139: 5222 30000 CAF 0 # WAITLIST CONTROL AND TERMINATE THE TASK 046207,000140: 5223 24002 INCR Q # IN WHICH THEY WERE CALLED. 046208,000141: 046209,000142: # RETURN TO CALLER +1 AFTER WAITING THE DT AS ARRIVING IN A. 046210,000143: 046211,000144: 5224 56002 VARDELAY XCH Q # DT TO Q. TASK ADRES TO WAITADR. 046212,000145: 5225 54063 TS WAITADR 046213,000146: 5226 30006 CA BBANK # BBANK IS SAVED DURING DELAY. 046214,000147: 5227 00006 EXTEND 046215,000148: 5230 04007 ROR SUPERBNK # ADD SBANK TO BBCON. 046216,000149: 5231 54001 TS L 046217,000150: 5232 35235 CAF DELAYEX 046218,000151: 5233 54061 TS WAITEXIT # GO TO TASKOVER AFTER TASK ENTRY. 046219,000152: 5234 15212 TCF DLY2 046220,000153: 046221,000154: # Page 1119 046222,000155: 5235 15257 DELAYEX TCF TASKOVER -2 # RETURNS TO TASKOVER. 046223,000156: 046224,000157: # Page 1120 046225,000158: # ENDTASK MUST ENTERED IN FIXED-FIXED SO IT IS DISTINGUISHABLE BY ITS ADRES ALONE. 046226,000159: 046227,000160: 5236 E3,1400 EBANK= LST1 046228,000161: 5236 72537 73714 ENDTASK -2CADR SVCT3 046229,000162: 046230,000163: 5240 10076 SVCT3 CCS FLAGWRD2 # DRIFT FLAG 046231,000164: 5241 15261 TCF TASKOVER 046232,000165: 5242 15261 TCF TASKOVER 046233,000166: 5243 15244 TCF +1 046234,000167: 046235,000168: 5244 11301 CKIMUSE CCS IMUCADR # DON'T DO NBDONLY IF SOMEONE ELSE IS IN 046236,000169: 5245 15256 TCF SVCT3X # IMUSTALL. 046237,000170: 5246 15251 TCF +3 046238,000171: 5247 15256 TCF SVCT3X 046239,000172: 5250 15256 TCF SVCT3X 046240,000173: 046241,000174: 5251 37726 +3 CAF PRIO35 # COMPENSATE FOR NBD COEFFICIENTS ONLY. 046242,000175: 5252 05072 TC NOVAC # ENABLE EVERY 81.93 SECONDS 046243,000176: 5253 E3,1460 EBANK= NBDX 046244,000177: 5253 03563 14063 2CADR NBDONLY 046245,000178: 046246,000179: 5255 15261 TCF TASKOVER 046247,000180: 046248,000181: 5256 05221 SVCT3X TC FIXDELAY # DELAY MAX OF 2 TIMES FOR IMUZERO. 046249,000182: 5257 00764 DEC 500 B-14 046250,000183: 5260 05240 TC SVCT3 # CHECK DRIFT FLAG AGAIN. 046251,000184: 046252,000185: # Page 1121 046253,000186: # BEGIN TASK INSERTION. 046254,000187: 046255,000188: 01,3232 BANK 01 046256,000189: 01,3232 COUNT* $$/WAIT 046257,000190: 01,3232 54062 WAIT2 TS WAITBANK # BBANK OF CALLING PROGRAM. 046258,000191: 01,3233 30002 CA Q 046259,000192: 01,3234 00006 EXTEND 046260,000193: 01,3235 63524 BZMF WAITP00H 046261,000194: 046262,000195: 01,3236 40026 CS TIME3 046263,000196: 01,3237 64744 AD BIT8 # BIT 8 = OCT 200 046264,000197: 01,3240 10000 CCS A # TEST 200 - C(TIME3). IF POSITIVE, 046265,000198: # IT MEANS THAT TIME3 OVERFLOW HAS OCCURRED PRIOR TO CS TIME3 AND THAT 046266,000199: # C(TIME3) = T - T1, INSTEAD OF 1.0 - (T1 - T). THE FOLLOWING FOUR 046267,000200: # ORDERS SET C(A) = TD - T1 + 1 IN EITHER CASE. 046268,000201: 046269,000202: 01,3241 66112 AD OCT40001 # OVERFLOW HAS OCCURRED. SET C(A) = 046270,000203: 01,3242 40000 CS A # T - T1 + 1.0 - 201 046271,000204: 046272,000205: # NORMAL CASE (C(A) NNZ) YIELDS SAME C(A): -( -(1.0-(T1-T)) + 200) - 1 046273,000206: 046274,000207: 01,3243 63371 AD OCT40201 046275,000208: 01,3244 60002 AD Q # RESULT = TD - T1 + 1. 046276,000209: 046277,000210: 01,3245 10000 CCS A # TEST TD - T1 +1. 046278,000211: 046279,000212: 01,3246 61400 AD LST1 # IF TD - T1 POS, GO TO WTLST5 WITH 046280,000213: 01,3247 13311 TCF WTLST5 # C(A) = (TD - T1) + C(LST1) = TD-T2+1 046281,000214: 046282,000215: 01,3250 13251 NOOP 046283,000216: 01,3251 40002 CS Q 046284,000217: 046285,000218: # NOTE THAT THIS PROGRAM SECTION IS NEVER ENTERED WHEN T-T1 G/E -1, 046286,000219: # SINCE TD-T1+1 = (TD-T) + (T-T1+1), AND DELTA T = TD-T G/E +1. (G/E 046287,000220: # SYMBOL MEANS GREATER THAN OR EQUAL TO). THUS THERE NEED BE NO CON- 046288,000221: # CERN OVER A PREVIOUS OR IMMINENT OVEFLOW OF TIME3 HERE. 046289,000222: 046290,000223: 01,3252 64736 AD POS1/2 # WHEN TD IS NEXT, FORM QUANTITY 046291,000224: 01,3253 64736 AD POS1/2 # 1.0 - DELTA T = 1.0 - (TD - T) 046292,000225: 01,3254 56026 XCH TIME3 046293,000226: 01,3255 64735 AD NEGMAX 046294,000227: 01,3256 60002 AD Q # 1.0 - DELTAT T NOW COMPLETE. 046295,000228: 01,3257 00006 EXTEND # ZERO INDEX Q. 046296,000229: 01,3260 22007 QXCH 7 # (ZQ) 046297,000230: 046298,000231: # Page 1122 046299,000232: 01,3261 57400 WTLST4 XCH LST1 046300,000233: 01,3262 57401 XCH LST1 +1 046301,000234: 01,3263 57402 XCH LST1 +2 046302,000235: 01,3264 57403 XCH LST1 +3 046303,000236: 01,3265 57404 XCH LST1 +4 046304,000237: 01,3266 57405 XCH LST1 +5 046305,000238: 01,3267 57406 XCH LST1 +6 046306,000239: 01,3270 57407 XCH LST1 +7 046307,000240: 046308,000241: 01,3271 30063 CA WAITADR # (MINOR PART OF TASK CADR HAS BEEN IN L.) 046309,000242: 01,3272 50002 INDEX Q 046310,000243: 01,3273 13274 TCF +1 046311,000244: 046312,000245: 01,3274 53411 DXCH LST2 046313,000246: 01,3275 53413 DXCH LST2 +2 046314,000247: 01,3276 53415 DXCH LST2 +4 046315,000248: 01,3277 53417 DXCH LST2 +6 046316,000249: 01,3300 53421 DXCH LST2 +8D 046317,000250: 01,3301 53423 DXCH LST2 +10D # AT END, CHECK THAT C(LST2 +10) IS STD 046318,000251: 01,3302 53425 DXCH LST2 +12D 046319,000252: 01,3303 53427 DXCH LST2 +14D 046320,000253: 01,3304 53431 DXCH LST2 +16D 046321,000254: 01,3305 65236 AD ENDTASK # END ITEM, AS CHECK FOR EXCEEDING 046322,000255: # THE LENGTH OF THE LIST. 046323,000256: 01,3306 00006 EXTEND # DUMMY TASK ADRES SHOULD BE IN FIXED- 046324,000257: 01,3307 15215 BZF LVWTLIST # FIXED SO ITS ADRES ALONE DISTINGUISHES 046325,000258: 01,3310 13364 TCF WTABORT # IT. 046326,000259: 046327,000260: # Page 1123 046328,000261: 01,3311 10000 WTLST5 CCS A # TEST TD - T2 + 1 046329,000262: 01,3312 61401 AD LST1 +1 046330,000263: 01,3313 13317 TCF +4 046331,000264: 01,3314 64753 AD ONE 046332,000265: 01,3315 03375 TC WTLST2 046333,000266: 01,3316 00001 OCT 1 046334,000267: 046335,000268: 01,3317 10000 +4 CCS A # TEST TD - T3 + 1 046336,000269: 01,3320 61402 AD LST1 +2 046337,000270: 01,3321 13325 TCF +4 046338,000271: 01,3322 64753 AD ONE 046339,000272: 01,3323 03375 TC WTLST2 046340,000273: 01,3324 00002 OCT 2 046341,000274: 046342,000275: 01,3325 10000 +4 CCS A # TEST TD - T4 + 1 046343,000276: 01,3326 61403 AD LST1 +3 046344,000277: 01,3327 13333 TCF +4 046345,000278: 01,3330 64753 AD ONE 046346,000279: 01,3331 03375 TC WTLST2 046347,000280: 01,3332 00003 OCT 3 046348,000281: 046349,000282: 01,3333 10000 +4 CCS A # TEST TD - T5 + 1 046350,000283: 01,3334 61404 AD LST1 +4 046351,000284: 01,3335 13341 TCF +4 046352,000285: 01,3336 64753 AD ONE 046353,000286: 01,3337 03375 TC WTLST2 046354,000287: 01,3340 00004 OCT 4 046355,000288: 046356,000289: 01,3341 10000 +4 CCS A # TEST TD - T6 + 1 046357,000290: 01,3342 61405 AD LST1 +5 046358,000291: 01,3343 13347 TCF +4 046359,000292: 01,3344 64753 AD ONE 046360,000293: 01,3345 03375 TC WTLST2 046361,000294: 01,3346 00005 OCT 5 046362,000295: 046363,000296: 01,3347 10000 +4 CCS A # TEST TD - T7 + 1 046364,000297: 01,3350 61406 AD LST1 +6 046365,000298: 01,3351 13355 TCF +4 046366,000299: 01,3352 64753 AD ONE 046367,000300: 01,3353 03375 TC WTLST2 046368,000301: 01,3354 00006 OCT 6 046369,000302: 046370,000303: # Page 1124 046371,000304: 01,3355 10000 +4 CCS A # TEST TD - T2 + 1 046372,000305: 01,3356 61407 AD LST1 +7 046373,000306: 01,3357 13363 TCF +4 046374,000307: 01,3360 64753 AD ONE 046375,000308: 01,3361 03375 TC WTLST2 046376,000309: 01,3362 00007 OCT 7 046377,000310: 046378,000311: 01,3363 10000 +4 CCS A 046379,000312: 01,3364 03372 WTABORT TC FILLED 046380,000313: 01,3365 13366 NOOP # CAN'T GET HERE 046381,000314: 01,3366 64753 AD ONE 046382,000315: 01,3367 03375 TC WTLST2 046383,000316: 01,3370 00010 OCT 10 046384,000317: 046385,000318: 01,3371 40201 OCT40201 OCT 40201 046386,000319: 046387,000320: # Page 1125 046388,000321: 01,3372 52062 FILLED DXCH WAITEXIT 046389,000322: 01,3373 05706 TC BAILOUT1 # NO ROOM IN THE INN 046390,000323: 01,3374 31203 OCT 31203 046391,000324: 046392,000325: # Page 1126 046393,000326: # THE ENTRY TC WTLST2 JUST PRECEDING OCT N IS FOR T LE TD LE T -1. 046394,000327: # N N+1 046395,000328: # (LE MEANS LESS THAN OR EQUAL TO). AT ENTRY, C(A) = -(TD - T + 1) 046396,000329: # N+1 046397,000330: # THE LST1 ENTRY-(T -T +1) IS TO BE REPLACED BY -(TD - T + 1), AND 046398,000331: # N+1 N N 046399,000332: # THE ENTRY-(T - TD + 1) IS TO BE INSERTED IMMEDIATELY FOLLOWING. 046400,000333: # N+1 046401,000334: 046402,000335: 01,3375 54064 WTLST2 TS WAITTEMP # C(A) = -(TD - T + 1) 046403,000336: 01,3376 50002 INDEX Q 046404,000337: 01,3377 30000 CAF 0 046405,000338: 01,3400 54002 TS Q # INDEX VALUE INTO Q. 046406,000339: 046407,000340: 01,3401 34753 CAF ONE 046408,000341: 01,3402 60064 AD WAITTEMP 046409,000342: 01,3403 50002 INDEX Q # C(A) = -(TD - T ) + 1. 046410,000343: 01,3404 27377 ADS LST1 -1 # N 046411,000344: 046412,000345: 01,3405 40064 CS WAITTEMP 046413,000346: 01,3406 50002 INDEX Q 046414,000347: 01,3407 13261 TCF WTLST4 046415,000348: 046416,000349: # C(TIME3) = 1.0 - (T1 - T) 046417,000350: 046418,000351: # C(LST1) = - (T2 - T1) + 1 046419,000352: # C(LST1+1) = - (T3 - T2) + 1 046420,000353: # C(LST1+2) = - (T4 - T3) + 1 046421,000354: # C(LST1+3) = - (T5 - T4) + 1 046422,000355: # C(LST1+4) = - (T6 - T5) + 1 046423,000356: 046424,000357: # C(LST2) = 2CADR TASK1 046425,000358: # C(LST2+2) = 2CADR TASK2 046426,000359: # C(LST2+4) = 2CADR TASK3 046427,000360: # C(LST2+6) = 2CADR TASK4 046428,000361: # C(LST2+8) = 2CADR TASK5 046429,000362: # C(LST2+10) = 2CADR TASK6 046430,000363: 046431,000364: # Page 1127 046432,000365: # ENTERS HERE ON T3 RUPT TO DISPATCH WAITLISTED TASK. 046433,000366: 046434,000367: 01,3410 00006 T3RUPT EXTEND 046435,000368: 01,3411 04007 ROR SUPERBNK # READ CURRENT SUPERBANK VALUE AND 046436,000369: 01,3412 54016 TS BANKRUPT # SAVE WITH E AND F BANK VALUES. 046437,000370: 01,3413 00006 EXTEND 046438,000371: 01,3414 22012 QXCH QRUPT 046439,000372: 046440,000373: 01,3415 34734 T3RUPT2 CAF NEG1/2 # DISPATCH WAITLIST TASK. 046441,000374: 01,3416 57407 XCH LST1 +7 046442,000375: 01,3417 57406 XCH LST1 +6 046443,000376: 01,3420 57405 XCH LST1 +5 046444,000377: 01,3421 57404 XCH LST1 +4 # 1. MOVE UP LST1 CONTENTS, ENTERING 046445,000378: 01,3422 57403 XCH LST1 +3 # A VALUE OF 1/2 +1 AT THE BOTTOM 046446,000379: 01,3423 57402 XCH LST1 +2 # FOR T6-T5, CORRESPONDING TO THE 046447,000380: 01,3424 57401 XCH LST1 +1 # INTERVAL 81.91 SEC FOR ENDTASK. 046448,000381: 01,3425 57400 XCH LST1 046449,000382: 01,3426 64733 AD POSMAX # 2. SET T3 = 1.0 - T2 - T USING LIST 1. 046450,000383: 01,3427 26026 ADS TIME3 # SO T3 WON'T TICK DURING UPDATE. 046451,000384: 01,3430 54332 TS RUPTAGN 046452,000385: 01,3431 44755 CS ZERO 046453,000386: 01,3432 54332 TS RUPTAGN # SETS RUPTAGN TO +1 ON OVERFLOW. 046454,000387: 046455,000388: 01,3433 00006 EXTEND # DISPATCH TASK. 046456,000389: 01,3434 45237 DCS ENDTASK 046457,000390: 01,3435 53431 DXCH LST2 +16D 046458,000391: 01,3436 53427 DXCH LST2 +14D 046459,000392: 01,3437 53425 DXCH LST2 +12D 046460,000393: 01,3440 53423 DXCH LST2 +10D 046461,000394: 01,3441 53421 DXCH LST2 +8D 046462,000395: 01,3442 53417 DXCH LST2 +6 046463,000396: 01,3443 53415 DXCH LST2 +4 046464,000397: 01,3444 53413 DXCH LST2 +2 046465,000398: 01,3445 53411 DXCH LST2 046466,000399: 046467,000400: 01,3446 56001 XCH L 046468,000401: 01,3447 00006 EXTEND 046469,000402: 01,3450 01007 WRITE SUPERBNK # SET SUPERBANK FROM BBCON OF 2CADR 046470,000403: 01,3451 56001 XCH L # RESTORE TO L FOR DXCH Z. 046471,000404: 01,3452 52006 DTCB 046472,000405: 046473,000406: # Page 1128 046474,000407: # RETURN, AFTER EXECUTION OF T3 OVERFLOW TASK: 046475,000408: 046476,000409: 5261 BLOCK 02 046477,000410: 5261 COUNT* $$/WAIT 046478,000411: 5261 10332 TASKOVER CCS RUPTAGN # IF +1 RETURN TO T3RUPT, IF -0 RESUME. 046479,000412: 5262 35220 CAF WAITBB 046480,000413: 5263 54006 TS BBANK 046481,000414: 5264 13415 TCF T3RUPT2 # DISPATCH NEXT TASK IF IT WAS DUE. 046482,000415: 046483,000416: 5265 30016 CA BANKRUPT 046484,000417: 5266 00006 EXTEND 046485,000418: 5267 01007 WRITE SUPERBNK # RESTORE SUPERBANK BEFORE RESUME IS DON 046486,000419: 046487,000420: 5270 00006 RESUME EXTEND 046488,000421: 5271 22012 QXCH QRUPT 046489,000422: 5272 30016 NOQRSM CA BANKRUPT 046490,000423: 5273 56006 XCH BBANK 046491,000424: 5274 52011 NOQBRSM DXCH ARUPT 046492,000425: 5275 00003 RELINT 046493,000426: 5276 50017 RESUME 046494,000427: 046495,000428: # Page 1129 046496,000429: # LONGCALL 046497,000430: # PROGRAM DESCRIPTION DATE -- 17 MARCH 1967 046498,000431: # PROGRAM WRITTEN BY W.H.VANDEVER LOG SECTION WAITLIST 046499,000432: # MOD BY -- R. MELANSON TO ADD DOCUMENTATION ASSEMBLY SUNDISK REV. 100 046500,000433: 046501,000434: # FUNCTIONAL DESCRIPTION -- 046502,000435: # LONGCALL IS CALLED WITH THE DELTA TIME ARRIVING IN A,L SCALED AS TIME2,TIME1 WITH THE 2CADR OF THE TASK 046503,000436: # IMMEDIATELY FOLLOWING THE TC LONGCALL. FOR EXAMPLE, IT MIGHT BE DONE AS FOLLOWS WHERE TIMELOC IS THE NAME OF 046504,000437: # A DP REGISTER CONTAINING A DELTA TIME AND WHERE TASKTODO IS THE NAME OF THE LOCATION AT WHICH LONGCALL IS TO 046505,000438: # START. 046506,000439: # CALLING SEQUENCE -- 046507,000440: # EXTEND 046508,000441: # DCA TIMELOC 046509,000442: # TC LONGCALL 046510,000443: # 2CADR TASKTODO 046511,000444: # NORMAL EXIT MODE -- 046512,000445: # 1) TC WAITLIST 046513,000446: # 2) DTCB (TC L+3 OF CALLING ROUTINE 1S PASS THRU LONGCYCL) 046514,000447: # 3) DTCB (TO TASKOVER ON SUBSEQUENT PASSES THRU LONGCYCL) 046515,000448: # ALARM OR ABORT EXIT MODE -- 046516,000449: # NONE 046517,000450: # OUTPUT -- 046518,000451: # LONGTIME AND LONGTIME+1 = DELTA TIME 046519,000452: # LONGEXIT AND LONGEXIT+1 = RETURN 2CADR 046520,000453: # LONGCADR AND LONGCADR+1 = TASK 2CADR 046521,000454: # A = SINGLE PRECISION TIME FOR WAITLIST 046522,000455: # ERASABLE INITIALIZATION -- 046523,000456: # A = MOST SIGNIFICANT PART OF DELTA TIME 046524,000457: # L = LEAST SIGNIFICANT PART OF DELTA TIME 046525,000458: # Q = ADDRESS OF 2CADR TASK VALUE 046526,000459: # DEBRIS -- 046527,000460: # A,Q,L 046528,000461: # LONGCADR AND LONGCADR+1 046529,000462: # LONGEXIT AND LONGEXIT+1 046530,000463: # LONGTIME AND LONGTIME+1 046531,000464: # *** THE FOLLOWING IS TO BE IN FIXED-FIXED AND UNSWITCHED ERASIBLE ** 046532,000465: 046533,000466: 5277 BLOCK 02 046534,000467: 5277 E3,1400 EBANK= LST1 046535,000468: 5277 53153 LONGCALL DXCH LONGTIME # OBTAIN THE DELTA TIME 046536,000469: 046537,000470: 5300 00006 EXTEND # OBTAIN THE 2CADR 046538,000471: # Page 1130 046539,000472: 5301 50002 NDX Q 046540,000473: 5302 30001 DCA 0 046541,000474: 5303 53147 DXCH LONGCADR 046542,000475: 046543,000476: 5304 00006 EXTEND # NO GO TO THE APPROPRIATE SWITCHED BANK 046544,000477: 5305 35310 DCA LGCL2CDR # FOR THE REST OF LONGCALL 046545,000478: 5306 52006 DTCB 046546,000479: 046547,000480: 5307 E3,1400 EBANK= LST1 046548,000481: 5307 03453 02063 LGCL2CDR 2CADR LNGCALL2 046549,000482: 046550,000483: # *** THE FOLLOWING MAY BE IN A SWITCHED BANK, INCLUDING ITS ERASABLE *** 046551,000484: 046552,000485: 01,3453 BANK 01 046553,000486: 01,3453 COUNT* $$/WAIT 046554,000487: 01,3453 23435 LNGCALL2 LXCH LONGEXIT +1 # SAVE THE CORRECT BB FOR RETURN 046555,000488: 01,3454 34752 CA TWO # OBTAIN THE RETURN ADDRESS 046556,000489: 01,3455 26002 ADS Q 046557,000490: 01,3456 55434 TS LONGEXIT 046558,000491: 046559,000492: 01,3457 31152 CA LONGTIME # CHECK FOR LEGITIMATE DELTA-TIME 046560,000493: 01,3460 10000 CCS A 046561,000494: 01,3461 13467 TCF LONGCYCL # HI-ORDER OK --> ALL IS OK. 046562,000495: 01,3462 13464 TCF +2 # HI-ORDER ZERO --> CHECK LO-ORDER. 046563,000496: 01,3463 13522 TCF LONGP00H # HI-ORDER NEG. --> NEG. DT 046564,000497: 01,3464 31153 +2 CA LONGTIME +1 # CHECK LO-ORDER FOR ZERO OR NEGATIVE. 046565,000498: 01,3465 00006 EXTEND 046566,000499: 01,3466 63522 BZMF LONGP00H # BAD DELTA-TIME. ABORT 046567,000500: 046568,000501: # *** WAITLIST TASK LONGCYCL *** 046569,000502: 046570,000503: 01,3467 00006 LONGCYCL EXTEND # CAN WE SUCCESFULLY TAKE ABOUT 1.25 046571,000504: 01,3470 43501 DCS DPBIT14 # MINUTES OFF OF LONGTIME 046572,000505: 01,3471 21153 DAS LONGTIME 046573,000506: 046574,000507: 01,3472 11153 CCS LONGTIME +1 # THE REASONING BEHIND THIS PART IS 046575,000508: 01,3473 13512 TCF MUCHTIME # INVOLVED, TAKING INTO ACCOUNT THAT THE 046576,000509: # WORDS MAY NOT BE SIGNED CORRECTED (DP 046577,000510: # BASIC INSTRUCTIONS 046578,000511: # DO NOT SIGN CORRECT) AND THAT WE SUBTRAC- 046579,000512: # TED BIT14 (1 OVER HALF THE POS. VALUE 046580,000513: # REPRESENTABLE IN SINGLE WORD) 046581,000514: 01,3474 13475 NOOP # CAN'T GET HERE ************* 046582,000515: 01,3475 13476 TCF +1 046583,000516: 01,3476 11152 CCS LONGTIME 046584,000517: 01,3477 13512 TCF MUCHTIME 046585,000518: 01,3500 00000 DPBIT14 OCT 00000 046586,000519: 01,3501 20000 OCT 20000 046587,000520: # Page 1131 046588,000521: 01,3502 34736 LASTTIME CA BIT14 # GET BACK THE CORRECT DELTA TFOR WAITLIST 046589,000522: 01,3503 27153 ADS LONGTIME +1 046590,000523: 01,3504 05203 TC WAITLIST 046591,000524: 01,3505 E3,1400 EBANK= LST1 046592,000525: 01,3505 03517 02063 2CADR GETCADR # THE ENTRY TO OUR LONGCADR 046593,000526: 046594,000527: 01,3507 33521 LONGRTRN CA TSKOVCDR # SET IT UP SO THAT ONLY THE FIRST EXIT IS 046595,000528: 01,3510 53435 DXCH LONGEXIT # TO THE CALLER OF LONGCALL 046596,000529: 01,3511 52006 DTCB # THE REST ARE TO TASKOVER 046597,000530: 046598,000531: 01,3512 34736 MUCHTIME CA BIT14 # WE HAVE OVER OUR ABOUT 1.25 MINUTES 046599,000532: 01,3513 05203 TC WAITLIST # SO SET UP FOR ANOTHER CYCLE THROUGH HERE 046600,000533: 01,3514 E3,1400 EBANK= LST1 046601,000534: 01,3514 03467 02063 2CADR LONGCYCL 046602,000535: 046603,000536: 01,3516 13507 TCF LONGRTRN # NOW EXIT PROPERLY 046604,000537: 046605,000538: # *** WAITLIST TASK GETCADR *** 046606,000539: 046607,000540: 01,3517 53147 GETCADR DXCH LONGCADR # GET THE LONGCALL THAT WE WISHED TO START 046608,000541: 01,3520 52006 DTCB # AND TRANSFER CONTROL TO IT 046609,000542: 046610,000543: 01,3521 05261 TSKOVCDR GENADR TASKOVER 046611,000544: 01,3522 53435 LONGP00H DXCH LONGEXIT 046612,000545: 01,3523 13525 TCF +2 046613,000546: 01,3524 52062 WAITP00H DXCH WAITEXIT 046614,000547: 01,3525 05716 +2 TC P00DOO1 046615,000548: 01,3526 21204 OCT 21204 046616,000549: End of include-file WAITLIST.agc. Parent file is MAIN.agc