Source Code
These source-code files are part of a reconstructed copy of Aurora 88, the
final release of the Lunar Module (LM) Apollo Guidance Computer (AGC) system
test software.
They have been created via disassembly of binary dumps of original core rope memory modules, part numbers 2003972-011, 2003972-091, and 2003972-111, belonging to Steve Jurvetson. Since only binary dumps (rather than listings) of Aurora 88 are available as source material, all comments and labels are approximate. They have been taken from other AGC programs where possible, or, in some places, written from scratch to match what we believe would have been in the original listing. |
004904,000002: ## Copyright: Public domain.
004905,000003: ## Filename: WAITLIST.agc
004906,000004: ## Purpose: A section of Aurora 88.
004907,000005: ## It is part of the reconstructed source code for the final
004908,000006: ## release of the Lunar Module system test software. No original
004909,000007: ## listings of this program are available; instead, this file
004910,000008: ## was created via disassembly of dumps of Aurora 88 core rope
004911,000009: ## modules and comparison with other AGC programs.
004912,000010: ## Assembler: yaYUL
004913,000011: ## Contact: Ron Burkey <info@sandroid.org>.
004914,000012: ## Website: www.ibiblio.org/apollo/index.html
004915,000013: ## Mod history: 2023-06-30 MAS Created from Aurora 12.
004916,000014: ## 2023-07-12 MAS Updated for Aurora 88.
004917,000015:
004918,000016:
004919,000017: # GROUNDRULE....DELTA T SHOULD NOT EXCEED 12000 (= 2 MINUTES)
004920,000018:
004921,000019: 4451 SETLOC ENDEXECF
004922,000020:
004923,000021: 4451 E3,1400 EBANK= LST1 # TASK LISTS IN SWITCHED E BANK.
004924,000022:
004925,000023: 4451 56002 WAITLIST XCH Q # SAVE DELTA T IN Q AND RETURN IN
004926,000024: 4452 54065 TS WAITEXIT # WAITEXIT.
004927,000025: 4453 00006 EXTEND
004928,000026: 4454 50000 INDEX A
004929,000027: 4455 30001 DCA 0 # PICK UP 2CADR OF TASK.
004930,000028: 4456 54070 TS WAITADR # BBCON WILL REMAIN IN L.
004931,000029: 4457 34466 DLY2 CAF WAITBB # ENTRY FROM FIXDELAY AND VARDELAY.
004932,000030: 4460 56006 XCH BBANK
004933,000031: 4461 12566 TCF WAIT2
004934,000032:
004935,000033: # RETURN TO CALLER AFTER TASK INSERTION:
004936,000034:
004937,000035: 4462 30066 LVWTLIST CA WAITBANK
004938,000036: 4463 54006 TS BBANK
004939,000037: 4464 50065 INDEX WAITEXIT
004940,000038: 4465 00002 TC 2
004941,000039:
004942,000040: 4466 02003 WAITBB BBCON WAIT2
004943,000041:
004944,000042: # RETURN TO CALLER +2 AFTER WAITING DT SPECIFIED AT CALLER +1.
004945,000043:
004946,000044: 4467 50002 FIXDELAY INDEX Q # BOTH ROUTINES MUST BE CALLED UNDER
004947,000045: 4470 30000 CAF 0 # WAITLIST CONTROL AND TERMINATE THE TASK
004948,000046: 4471 24002 INCR Q # IN WHICH THEY WERE CALLED.
004949,000047:
004950,000048: # RETURN TO CALLER +1 AFTER WAITING THE DT AS ARRIVING IN A.
004951,000049:
004952,000050: 4472 56002 VARDELAY XCH Q # DT TO Q. TASK ADRES TO WAITADR.
004953,000051: 4473 54070 TS WAITADR
004954,000052: 4474 30006 CA BBANK # BBANK IS SAVED DURING DELAY.
004955,000053: 4475 54001 TS L
004956,000054: 4476 34501 CAF DELAYEX
004957,000055: 4477 54065 TS WAITEXIT # GO TO TASKOVER AFTER TASK ENTRY.
004958,000056: 4500 14457 TCF DLY2
004959,000057:
004960,000058: 4501 14503 DELAYEX TCF TASKOVER -2 # RETURNS TO TASKOVER
004961,000059:
004962,000060:
004963,000061: # ENDTASK MUST BE ENTERED IN FIXED-FIXED SO IT IS DISTINGUISHABLE BY ITS ADRES ALONE.
004964,000062:
004965,000063: 4502 73273 73774 ENDTASK -2CADR SVCT3
004966,000064:
004967,000065: 4504 14505 SVCT3 TCF TASKOVER
004968,000066:
004969,000067:
004970,000068: # BEGIN TASK INSERTION.
004971,000069:
004972,000070: 01,2566 SETLOC ENDEXECS
004973,000071:
004974,000072: 01,2566 54066 WAIT2 TS WAITBANK # BBANK OF CALLING PROGRAM.
004975,000073: 01,2567 40026 CS TIME3
004976,000074: 01,2570 62571 AD +1 # CCS A = + 1/4
004977,000075: 01,2571 10000 CCS A # TEST 1/4 - C(TIME3). IF POSITIVE,
004978,000076: # IT MEANS THAT TIME3 OVERFLOW HAS OCCURRED PRIOR TO CS TIME3 AND THAT
004979,000077: # C(TIME3) = T - T1, INSTEAD OF 1.0 - (T1 - T). THE FOLLOWING FOUR
004980,000078: # ORDERS SET C(A) = TD - T1 + 1 IN EITHER CASE.
004981,000079:
004982,000080: 01,2572 66042 AD OCT40001 # OVERFLOW HAS OCCURRED. SET C(A) =
004983,000081: 01,2573 40000 CS A # T - T1 + 3/4 - 1
004984,000082:
004985,000083: # NORMAL CASE (C(A) MINUS) YIELDS SAME C(A) -(-(1.0-(T1 - T))+1/4)-1
004986,000084:
004987,000085: 01,2574 62722 AD OCT50001
004988,000086: 01,2575 60002 AD Q # RESULT = TD - T1 + 1.
004989,000087:
004990,000088: 01,2576 10000 CCS A # TEST TD - T1 + 1
004991,000089:
004992,000090: 01,2577 61400 AD LST1 # IF TD - T1 POS, GO TO WTLST5 WITH
004993,000091: 01,2600 12642 TCF WTLST5 # C(A) = (TD - T1) + C(LST1) = TD-T2+1
004994,000092:
004995,000093: 01,2601 12602 NOOP
004996,000094: 01,2602 40002 CS Q
004997,000095:
004998,000096: # NOTE THAT THIS PROGRAM SECTION IS NEVER ENTERED WHEN T-T1 G/E -1,
004999,000097: # SINCE TD-T1+1 = (TD-T) + (T-T1+1), AND DELTA T = TD-T G/E +1 . (G/E
005000,000098: # SYMBOL MEANS GREATER THAN OR EQUAL TO). THUS THERE NEED BE NO CON-
005001,000099: # CERN OVER A PREVIOUS OR IMMINENT OVERFLOW OF TIME3 HERE.
005002,000100:
005003,000101: 01,2603 67635 AD POS1/2 # WHEN TD IS NEXT, FORM QUANTITY
005004,000102: 01,2604 67635 AD POS1/2 # 1.0 - DELTA T = 1.0 - (TD - T)
005005,000103: 01,2605 56026 XCH TIME3
005006,000104: 01,2606 67634 AD NEGMAX
005007,000105: 01,2607 60002 AD Q # 1.0 - DELTAT T NOW COMPLETE.
005008,000106: 01,2610 00006 EXTEND # ZERO INDEX Q.
005009,000107: 01,2611 22007 QXCH 7 # (ZQ)
005010,000108:
005011,000109:
005012,000110: 01,2612 57400 WTLST4 XCH LST1
005013,000111: 01,2613 57401 XCH LST1 +1
005014,000112: 01,2614 57402 XCH LST1 +2
005015,000113: 01,2615 57403 XCH LST1 +3
005016,000114: 01,2616 57404 XCH LST1 +4
005017,000115: 01,2617 57405 XCH LST1 +5
005018,000116: 01,2620 57406 XCH LST1 +6
005019,000117: 01,2621 57407 XCH LST1 +7
005020,000118:
005021,000119: 01,2622 30070 CA WAITADR # (MINOR PART OF TASK CADR HAS BEEN IN L.)
005022,000120: 01,2623 50002 INDEX Q
005023,000121: 01,2624 12625 TCF +1
005024,000122:
005025,000123: 01,2625 53411 DXCH LST2
005026,000124: 01,2626 53413 DXCH LST2 +2
005027,000125: 01,2627 53415 DXCH LST2 +4
005028,000126: 01,2630 53417 DXCH LST2 +6
005029,000127: 01,2631 53421 DXCH LST2 +8D
005030,000128: 01,2632 53423 DXCH LST2 +10D # AT END, CHECK THAT C(LST2 +10) IS STD
005031,000129: 01,2633 53425 DXCH LST2 +12D
005032,000130: 01,2634 53427 DXCH LST2 +14D
005033,000131: 01,2635 53431 DXCH LST2 +16D
005034,000132: 01,2636 64502 AD ENDTASK # END ITEM, AS CHECK FOR EXCEEDING
005035,000133: # THE LENGTH OF THE LIST.
005036,000134: 01,2637 00006 EXTEND # DUMMY TASK ADRES SHOULD BE IN FIXED-
005037,000135: 01,2640 14462 BZF LVWTLIST # FIXED SO ITS ADRES ALONE DISTINGUISHES
005038,000136: 01,2641 12715 TCF WTABORT # IT.
005039,000137:
005040,000138:
005041,000139: 01,2642 10000 WTLST5 CCS A # TEST TD - T2 + 1
005042,000140: 01,2643 61401 AD LST1 +1
005043,000141: 01,2644 12650 TCF +4
005044,000142: 01,2645 67652 AD ONE
005045,000143: 01,2646 02723 TC WTLST2
005046,000144: 01,2647 00001 OCT 1
005047,000145:
005048,000146: 01,2650 10000 +4 CCS A # TEST TD - T3 + 1
005049,000147: 01,2651 61402 AD LST1 +2
005050,000148: 01,2652 12656 TCF +4
005051,000149: 01,2653 67652 AD ONE
005052,000150: 01,2654 02723 TC WTLST2
005053,000151: 01,2655 00002 OCT 2
005054,000152:
005055,000153: 01,2656 10000 +4 CCS A # TEST TD - T4 + 1
005056,000154: 01,2657 61403 AD LST1 +3
005057,000155: 01,2660 12664 TCF +4
005058,000156: 01,2661 67652 AD ONE
005059,000157: 01,2662 02723 TC WTLST2
005060,000158: 01,2663 00003 OCT 3
005061,000159:
005062,000160: 01,2664 10000 +4 CCS A # TEST TD - T5 + 1
005063,000161: 01,2665 61404 AD LST1 +4
005064,000162: 01,2666 12672 TCF +4
005065,000163: 01,2667 67652 AD ONE
005066,000164: 01,2670 02723 TC WTLST2
005067,000165: 01,2671 00004 OCT 4
005068,000166:
005069,000167: 01,2672 10000 +4 CCS A # TEST TD - T6 + 1
005070,000168: 01,2673 61405 AD LST1 +5
005071,000169: 01,2674 12700 TCF +4
005072,000170: 01,2675 67652 AD ONE
005073,000171: 01,2676 02723 TC WTLST2
005074,000172: 01,2677 00005 OCT 5
005075,000173:
005076,000174: 01,2700 10000 +4 CCS A # TEST TD - T7 + 1
005077,000175: 01,2701 61406 AD LST1 +6
005078,000176: 01,2702 12706 TCF +4
005079,000177: 01,2703 67652 AD ONE
005080,000178: 01,2704 02723 TC WTLST2
005081,000179: 01,2705 00006 OCT 6
005082,000180:
005083,000181:
005084,000182: 01,2706 10000 +4 CCS A
005085,000183: 01,2707 61407 AD LST1 +7
005086,000184: 01,2710 12714 TCF +4
005087,000185: 01,2711 67652 AD ONE
005088,000186: 01,2712 02723 TC WTLST2
005089,000187: 01,2713 00007 OCT 7
005090,000188:
005091,000189: 01,2714 10000 +4 CCS A
005092,000190: 01,2715 05350 WTABORT TC ABORT # NO ROOM IN THE INN.
005093,000191: 01,2716 01203 OCT 1203
005094,000192:
005095,000193: 01,2717 67652 AD ONE
005096,000194: 01,2720 02723 TC WTLST2
005097,000195: 01,2721 00010 OCT 10
005098,000196:
005099,000197: 01,2722 50001 OCT50001 OCT 50001
005100,000198:
005101,000199:
005102,000200: # THE ENTRY TO WTLST2 JUST PRECEDING OCT N IS FOR T LE TD LE T -1.
005103,000201: # N N+1
005104,000202:
005105,000203: # (LE MEANS LESS THAN OR EQUAL TO). AT ENTRY, C(A) = -(TD - T + 1)
005106,000204: # N+1
005107,000205:
005108,000206: # THE LST1 ENTRY -(T - T +1) IS TO BE REPLACED BY -(TD - T + 1), AND
005109,000207: # N+1 N N
005110,000208:
005111,000209: # THE ENTRY -(T - TD + 1) IS TO BE INSERTED IMMEDIATELY FOLLOWING.
005112,000210: # N+1
005113,000211:
005114,000212: 01,2723 54071 WTLST2 TS WAITTEMP # C(A) = -(TD - T + 1)
005115,000213: 01,2724 50002 INDEX Q
005116,000214: 01,2725 30000 CAF 0
005117,000215: 01,2726 54002 TS Q # INDEX VALUE INTO Q.
005118,000216:
005119,000217: 01,2727 37652 CAF ONE
005120,000218: 01,2730 60071 AD WAITTEMP
005121,000219: 01,2731 50002 INDEX Q # C(A) = -(TD - T ) + 1.
005122,000220: 01,2732 27377 ADS LST1 -1 # N
005123,000221:
005124,000222: 01,2733 40071 CS WAITTEMP
005125,000223: 01,2734 50002 INDEX Q
005126,000224: 01,2735 12612 TCF WTLST4
005127,000225:
005128,000226: # C(TIME3) = 1.0 - (T1 - T)
005129,000227:
005130,000228: # C(LST1 ) = - (T2 - T1) + 1
005131,000229: # C(LST1+1) = - (T3 - T2) + 1
005132,000230: # C(LST1+2) = - (T4 - T3) + 1
005133,000231: # C(LST1+3) = - (T5 - T4) + 1
005134,000232: # C(LST1+4) = - (T6 - T5) + 1
005135,000233:
005136,000234: # C(LST2 ) = 2CADR TASK1
005137,000235: # C(LST2+2 ) = 2CADR TASK2
005138,000236: # C(LST2+4 ) = 2CADR TASK3
005139,000237: # C(LST2+6 ) = 2CADR TASK4
005140,000238: # C(LST2+8 ) = 2CADR TASK5
005141,000239: # C(LST2+10) = 2CADR TASK6
005142,000240:
005143,000241:
005144,000242: # ENTERS HERE ON T3 RUPT TO DISPATCH WAITLISTED TASK.
005145,000243:
005146,000244: 01,2736 54016 T3RUPT TS BANKRUPT
005147,000245: 01,2737 00006 EXTEND
005148,000246: 01,2740 22012 QXCH QRUPT
005149,000247:
005150,000248: 01,2741 37633 T3RUPT2 CAF NEG1/2 # DISPATCH WAITLIST TASK.
005151,000249: 01,2742 57407 XCH LST1 +7
005152,000250: 01,2743 57406 XCH LST1 +6
005153,000251: 01,2744 57405 XCH LST1 +5
005154,000252: 01,2745 57404 XCH LST1 +4 # 1. MOVE UP LST1 CONTENTS, ENTERING
005155,000253: 01,2746 57403 XCH LST1 +3 # A VALUE OF 1/2 +1 AT THE BOTTOM
005156,000254: 01,2747 57402 XCH LST1 +2 # FOR T6-T5, CORRESPONDING TO THE
005157,000255: 01,2750 57401 XCH LST1 +1 # INTERVAL 81.91 SEC FOR ENDTASK.
005158,000256: 01,2751 57400 XCH LST1
005159,000257: 01,2752 67632 AD POSMAX # 2. SET T3 = 1.0 - T2 -T USING LIST 1.
005160,000258: 01,2753 26026 ADS TIME3 # SO T3 WONT TICK DURING UPDATE.
005161,000259: 01,2754 55071 TS RUPTAGN
005162,000260: 01,2755 47657 CS ZERO
005163,000261: 01,2756 55071 TS RUPTAGN # SETS RUPTAGN TO +1 ON OVERFLOW.
005164,000262:
005165,000263: 01,2757 00006 EXTEND # DISPATCH TASK.
005166,000264: 01,2760 44503 DCS ENDTASK
005167,000265: 01,2761 53431 DXCH LST2 +16D
005168,000266: 01,2762 53427 DXCH LST2 +14D
005169,000267: 01,2763 53425 DXCH LST2 +12D
005170,000268: 01,2764 53423 DXCH LST2 +10D
005171,000269: 01,2765 53421 DXCH LST2 +8D
005172,000270: 01,2766 53417 DXCH LST2 +6
005173,000271: 01,2767 53415 DXCH LST2 +4
005174,000272: 01,2770 53413 DXCH LST2 +2
005175,000273: 01,2771 53411 DXCH LST2
005176,000274:
005177,000275: 01,2772 52006 DTCB
005178,000276:
005179,000277: 01,2773 ENDWAITS EQUALS
005180,000278:
005181,000279:
005182,000280: # RETURN, AFTER EXECUTION OF T3 OVERFLOW TASK:
005183,000281:
005184,000282: 4505 BLOCK 02
005185,000283:
005186,000284: 4505 11071 TASKOVER CCS RUPTAGN # IF +1 RETURN TO T3RUPT, IF -0 RESUME.
005187,000285: 4506 34466 CAF WAITBB
005188,000286: 4507 54006 TS BBANK
005189,000287: 4510 12741 TCF T3RUPT2 # DISPATCH NEXT TASK IF IT WAS DUE.
005190,000288:
005191,000289: 4511 00006 RESUME EXTEND
005192,000290: 4512 22012 QXCH QRUPT
005193,000291: 4513 30016 NOQRSM CA BANKRUPT
005194,000292: 4514 54006 TS BBANK
005195,000293: 4515 52011 NOQBRSM DXCH ARUPT
005196,000294: 4516 50017 RESUME
005197,000295:
005198,000296: 4517 ENDWAITF EQUALS # LAST FIXED-FIXED LOCATION OF T3RUPT.
End of include-file WAITLIST.agc. Parent file is MAIN.agc