Source Code
![]() |
YAYUL: ASSEMBLE REVISION 5 OF PROGRAM BOREALIS BY MSTEWART MAR. 27,2017This is a modern AGC system self-test program, though based on the Apollo-era AURORA 12 program, and was not written by the original AGC developers, but rather by Mike Stewart. All of the original AURORA 12 DAP code added by the DAP Group has been removed, and extensive new system test code has been added in its place. This allows more in-depth testing of CPU behavior, both in AGC software simulations and hardware simulations. |
004938,000002: ## Copyright: Public domain.
004939,000003: ## Filename: WAITLIST.agc
004940,000004: ## Purpose: This program is designed to extensively test the Apollo Guidance Computer
004941,000005: ## (specifically the LM instantiation of it). It is built on top of a heavily
004942,000006: ## stripped-down Aurora 12, with all code ostensibly added by the DAP Group
004943,000007: ## removed. Instead Borealis expands upon the tests provided by Aurora,
004944,000008: ## including corrected tests from Retread 44 and tests from Ron Burkey's
004945,000009: ## Validation.
004946,000010: ## Assembler: yaYUL
004947,000011: ## Contact: Mike Stewart <mastewar1@gmail.com>.
004948,000012: ## Website: www.ibiblio.org/apollo/index.html
004949,000013: ## Mod history: 2016-12-20 MAS Created from Aurora 12 (with much DAP stuff removed).
004950,000014: ## 2017-01-15 MAS Added setting of LASTIMER in T3RUPT.
004951,000015: ## 2017-02-09 RSB Comment-text fixes identified in proofing Artemis 72
004952,000016:
004953,000017: # GROUNDRULE....DELTA T SHOULD NOT EXCEED 12000 (= 2 MINUTES)
004954,000018:
004955,000019: 4517 SETLOC ENDEXECF
004956,000020:
004957,000021: 4517 E3,1400 EBANK= LST1 # TASK LISTS IN SWITCHED E BANK.
004958,000022:
004959,000023: 4517 56002 WAITLIST XCH Q # SAVE DELTA T IN Q AND RETURN IN
004960,000024: 4520 54065 TS WAITEXIT # WAITEXIT.
004961,000025: 4521 00006 EXTEND
004962,000026: 4522 50000 INDEX A
004963,000027: 4523 30001 DCA 0 # PICK UP 2CADR OF TASK.
004964,000028: 4524 54070 TS WAITADR # BBCON WILL REMAIN IN L.
004965,000029: 4525 34534 DLY2 CAF WAITBB # ENTRY FROM FIXDELAY AND VARDELAY.
004966,000030: 4526 56006 XCH BBANK
004967,000031: 4527 12566 TCF WAIT2
004968,000032:
004969,000033: # RETURN TO CALLER AFTER TASK INSERTION:
004970,000034:
004971,000035: 4530 30066 LVWTLIST CA WAITBANK
004972,000036: 4531 54006 TS BBANK
004973,000037: 4532 50065 INDEX WAITEXIT
004974,000038: 4533 00002 TC 2
004975,000039:
004976,000040: 4534 02003 WAITBB BBCON WAIT2
004977,000041:
004978,000042: # RETURN TO CALLER +2 AFTER WAITING DT SPECIFIED AT CALLER +1.
004979,000043:
004980,000044: 4535 50002 FIXDELAY INDEX Q # BOTH ROUTINES MUST BE CALLED UNDER
004981,000045: 4536 30000 CAF 0 # WAITLIST CONTROL AND TERMINATE THE TASK
004982,000046: 4537 24002 INCR Q # IN WHICH THEY WERE CALLED.
004983,000047:
004984,000048: # RETURN TO CALLER +1 AFTER WAITING THE DT AS ARRIVING IN A.
004985,000049:
004986,000050: 4540 56002 VARDELAY XCH Q # DT TO Q. TASK ADRES TO WAITADR.
004987,000051: 4541 54070 TS WAITADR
004988,000052: 4542 30006 CA BBANK # BBANK IS SAVED DURING DELAY.
004989,000053: 4543 54001 TS L
004990,000054: 4544 34547 CAF DELAYEX
004991,000055: 4545 54065 TS WAITEXIT # GO TO TASKOVER AFTER TASK ENTRY.
004992,000056: 4546 14525 TCF DLY2
004993,000057:
004994,000058: 4547 14561 DELAYEX TCF TASKOVER -2 # RETURNS TO TASKOVER
004995,000059:
004996,000060:
004997,000061: # ENDTASK MUST BE ENTERED IN FIXED-FIXED SO IT IS DISTINGUISHABLE BY ITS ADRES ALONE.
004998,000062:
004999,000063: 4550 73225 73774 ENDTASK -2CADR SVCT3
005000,000064:
005001,000065: 4552 10063 SVCT3 CCS STATE +2 # DRIFT FLAG
005002,000066: 4553 14563 TCF TASKOVER
005003,000067: 4554 14563 TCF TASKOVER
005004,000068: 4555 14556 TCF +1
005005,000069:
005006,000070: 4556 34514 CAF PRIO35 # COMPENSATE FOR NBD COEFFICIENTS ONLY
005007,000071: 4557 04344 TC NOVAC # ENABLE EVERY 81.93 SECONDS
005008,000072: 4560 02257 16003 2CADR NBDONLY # EBANK IS SET TO 3
005009,000073:
005010,000074: 4562 14563 TCF TASKOVER
005011,000075:
005012,000076:
005013,000077: # BEGIN TASK INSERTION.
005014,000078:
005015,000079: 01,2566 SETLOC ENDEXECS
005016,000080:
005017,000081: 01,2566 54066 WAIT2 TS WAITBANK # BBANK OF CALLING PROGRAM.
005018,000082: 01,2567 40026 CS TIME3
005019,000083: 01,2570 62571 AD +1 # CCS A = + 1/4
005020,000084: 01,2571 10000 CCS A # TEST 1/4 - C(TIME3). IF POSITIVE,
005021,000085: # IT MEANS THAT TIME3 OVERFLOW HAS OCCURRED PRIOR TO CS TIME3 AND THAT
005022,000086: # C(TIME3) = T - T1, INSTEAD OF 1.0 - (T1 - T). THE FOLLOWING FOUR
005023,000087: # ORDERS SET C(A) = TD - T1 + 1 IN EITHER CASE.
005024,000088:
005025,000089: 01,2572 66042 AD OCT40001 # OVERFLOW HAS OCCURRED. SET C(A) =
005026,000090: 01,2573 40000 CS A # T - T1 + 3/4 - 1
005027,000091:
005028,000092: # NORMAL CASE (C(A) MINUS) YIELDS SAME C(A) -(-(1.0-(T1 - T))+1/4)-1
005029,000093:
005030,000094: 01,2574 62722 AD OCT50001
005031,000095: 01,2575 60002 AD Q # RESULT = TD - T1 + 1.
005032,000096:
005033,000097: 01,2576 10000 CCS A # TEST TD - T1 + 1
005034,000098:
005035,000099: 01,2577 61400 AD LST1 # IF TD - T1 POS, GO TO WTLST5 WITH
005036,000100: 01,2600 12642 TCF WTLST5 # C(A) = (TD - T1) + C(LST1) = TD-T2+1
005037,000101:
005038,000102: 01,2601 12602 NOOP
005039,000103: 01,2602 40002 CS Q
005040,000104:
005041,000105: # NOTE THAT THIS PROGRAM SECTION IS NEVER ENTERED WHEN T-T1 G/E -1,
005042,000106: # SINCE TD-T1+1 = (TD-T) + (T-T1+1), AND DELTA T = TD-T G/E +1 . (G/E
005043,000107: # SYMBOL MEANS GREATER THAN OR EQUAL TO). THUS THERE NEED BE NO CON-
005044,000108: # CERN OVER A PREVIOUS OR IMMINENT OVERFLOW OF TIME3 HERE.
005045,000109:
005046,000110: 01,2603 67642 AD POS1/2 # WHEN TD IS NEXT, FORM QUANTITY
005047,000111: 01,2604 67642 AD POS1/2 # 1.0 - DELTA T = 1.0 - (TD - T)
005048,000112: 01,2605 56026 XCH TIME3
005049,000113: 01,2606 67641 AD NEGMAX
005050,000114: 01,2607 60002 AD Q # 1.0 - DELTAT T NOW COMPLETE.
005051,000115: 01,2610 00006 EXTEND # ZERO INDEX Q.
005052,000116: 01,2611 22007 QXCH 7 # (ZQ)
005053,000117:
005054,000118:
005055,000119: 01,2612 57400 WTLST4 XCH LST1
005056,000120: 01,2613 57401 XCH LST1 +1
005057,000121: 01,2614 57402 XCH LST1 +2
005058,000122: 01,2615 57403 XCH LST1 +3
005059,000123: 01,2616 57404 XCH LST1 +4
005060,000124: 01,2617 57405 XCH LST1 +5
005061,000125: 01,2620 57406 XCH LST1 +6
005062,000126: 01,2621 57407 XCH LST1 +7
005063,000127:
005064,000128: 01,2622 30070 CA WAITADR # (MINOR PART OF TASK CADR HAS BEEN IN L.)
005065,000129: 01,2623 50002 INDEX Q
005066,000130: 01,2624 12625 TCF +1
005067,000131:
005068,000132: 01,2625 53411 DXCH LST2
005069,000133: 01,2626 53413 DXCH LST2 +2
005070,000134: 01,2627 53415 DXCH LST2 +4
005071,000135: 01,2630 53417 DXCH LST2 +6
005072,000136: 01,2631 53421 DXCH LST2 +8D
005073,000137: 01,2632 53423 DXCH LST2 +10D # AT END, CHECK THAT C(LST2 +10) IS STD
005074,000138: 01,2633 53425 DXCH LST2 +12D
005075,000139: 01,2634 53427 DXCH LST2 +14D
005076,000140: 01,2635 53431 DXCH LST2 +16D
005077,000141: 01,2636 64550 AD ENDTASK # END ITEM, AS CHECK FOR EXCEEDING
005078,000142: # THE LENGTH OF THE LIST.
005079,000143: 01,2637 00006 EXTEND # DUMMY TASK ADRES SHOULD BE IN FIXED-
005080,000144: 01,2640 14530 BZF LVWTLIST # FIXED SO ITS ADRES ALONE DISTINGUISHES
005081,000145: 01,2641 12715 TCF WTABORT # IT.
005082,000146:
005083,000147:
005084,000148: 01,2642 10000 WTLST5 CCS A # TEST TD - T2 + 1
005085,000149: 01,2643 61401 AD LST1 +1
005086,000150: 01,2644 12650 TCF +4
005087,000151: 01,2645 67657 AD ONE
005088,000152: 01,2646 02723 TC WTLST2
005089,000153: 01,2647 00001 OCT 1
005090,000154:
005091,000155: 01,2650 10000 +4 CCS A # TEST TD - T3 + 1
005092,000156: 01,2651 61402 AD LST1 +2
005093,000157: 01,2652 12656 TCF +4
005094,000158: 01,2653 67657 AD ONE
005095,000159: 01,2654 02723 TC WTLST2
005096,000160: 01,2655 00002 OCT 2
005097,000161:
005098,000162: 01,2656 10000 +4 CCS A # TEST TD - T4 + 1
005099,000163: 01,2657 61403 AD LST1 +3
005100,000164: 01,2660 12664 TCF +4
005101,000165: 01,2661 67657 AD ONE
005102,000166: 01,2662 02723 TC WTLST2
005103,000167: 01,2663 00003 OCT 3
005104,000168:
005105,000169: 01,2664 10000 +4 CCS A # TEST TD - T5 + 1
005106,000170: 01,2665 61404 AD LST1 +4
005107,000171: 01,2666 12672 TCF +4
005108,000172: 01,2667 67657 AD ONE
005109,000173: 01,2670 02723 TC WTLST2
005110,000174: 01,2671 00004 OCT 4
005111,000175:
005112,000176: 01,2672 10000 +4 CCS A # TEST TD - T6 + 1
005113,000177: 01,2673 61405 AD LST1 +5
005114,000178: 01,2674 12700 TCF +4
005115,000179: 01,2675 67657 AD ONE
005116,000180: 01,2676 02723 TC WTLST2
005117,000181: 01,2677 00005 OCT 5
005118,000182:
005119,000183: 01,2700 10000 +4 CCS A # TEST TD - T7 + 1
005120,000184: 01,2701 61406 AD LST1 +6
005121,000185: 01,2702 12706 TCF +4
005122,000186: 01,2703 67657 AD ONE
005123,000187: 01,2704 02723 TC WTLST2
005124,000188: 01,2705 00006 OCT 6
005125,000189:
005126,000190:
005127,000191: 01,2706 10000 +4 CCS A
005128,000192: 01,2707 61407 AD LST1 +7
005129,000193: 01,2710 12714 TCF +4
005130,000194: 01,2711 67657 AD ONE
005131,000195: 01,2712 02723 TC WTLST2
005132,000196: 01,2713 00007 OCT 7
005133,000197:
005134,000198: 01,2714 10000 +4 CCS A
005135,000199: 01,2715 05440 WTABORT TC ABORT # NO ROOM IN THE INN.
005136,000200: 01,2716 01203 OCT 1203
005137,000201:
005138,000202: 01,2717 67657 AD ONE
005139,000203: 01,2720 02723 TC WTLST2
005140,000204: 01,2721 00010 OCT 10
005141,000205:
005142,000206: 01,2722 50001 OCT50001 OCT 50001
005143,000207:
005144,000208:
005145,000209: # THE ENTRY TO WTLST2 JUST PRECEDING OCT N IS FOR T LE TD LE T -1.
005146,000210: # N N+1
005147,000211:
005148,000212: # (LE MEANS LESS THAN OR EQUAL TO). AT ENTRY, C(A) = -(TD - T + 1)
005149,000213: # N+1
005150,000214:
005151,000215: # THE LST1 ENTRY -(T - T +1) IS TO BE REPLACED BY -(TD - T + 1), AND
005152,000216: # N+1 N N
005153,000217:
005154,000218: # THE ENTRY -(T - TD + 1) IS TO BE INSERTED IMMEDIATELY FOLLOWING.
005155,000219: # N+1
005156,000220:
005157,000221: 01,2723 54071 WTLST2 TS WAITTEMP # C(A) = -(TD - T + 1)
005158,000222: 01,2724 50002 INDEX Q
005159,000223: 01,2725 30000 CAF 0
005160,000224: 01,2726 54002 TS Q # INDEX VALUE INTO Q.
005161,000225:
005162,000226: 01,2727 37657 CAF ONE
005163,000227: 01,2730 60071 AD WAITTEMP
005164,000228: 01,2731 50002 INDEX Q # C(A) = -(TD - T ) + 1.
005165,000229: 01,2732 27377 ADS LST1 -1 # N
005166,000230:
005167,000231: 01,2733 40071 CS WAITTEMP
005168,000232: 01,2734 50002 INDEX Q
005169,000233: 01,2735 12612 TCF WTLST4
005170,000234:
005171,000235: # C(TIME3) = 1.0 - (T1 - T)
005172,000236:
005173,000237: # C(LST1 ) = - (T2 - T1) + 1
005174,000238: # C(LST1+1) = - (T3 - T2) + 1
005175,000239: # C(LST1+2) = - (T4 - T3) + 1
005176,000240: # C(LST1+3) = - (T5 - T4) + 1
005177,000241: # C(LST1+4) = - (T6 - T5) + 1
005178,000242:
005179,000243: # C(LST2 ) = 2CADR TASK1
005180,000244: # C(LST2+2 ) = 2CADR TASK2
005181,000245: # C(LST2+4 ) = 2CADR TASK3
005182,000246: # C(LST2+6 ) = 2CADR TASK4
005183,000247: # C(LST2+8 ) = 2CADR TASK5
005184,000248: # C(LST2+10) = 2CADR TASK6
005185,000249:
005186,000250:
005187,000251: # ENTERS HERE ON T3 RUPT TO DISPATCH WAITLISTED TASK.
005188,000252:
005189,000253: 01,2736 54016 T3RUPT TS BANKRUPT
005190,000254: 01,2737 00006 EXTEND
005191,000255: 01,2740 22012 QXCH QRUPT
005192,000256:
005193,000257: 01,2741 36165 CAF THREE
005194,000258: 01,2742 55112 TS LASTIMER
005195,000259:
005196,000260: 01,2743 37640 T3RUPT2 CAF NEG1/2 # DISPATCH WAITLIST TASK.
005197,000261: 01,2744 57407 XCH LST1 +7
005198,000262: 01,2745 57406 XCH LST1 +6
005199,000263: 01,2746 57405 XCH LST1 +5
005200,000264: 01,2747 57404 XCH LST1 +4 # 1. MOVE UP LST1 CONTENTS, ENTERING
005201,000265: 01,2750 57403 XCH LST1 +3 # A VALUE OF 1/2 +1 AT THE BOTTOM
005202,000266: 01,2751 57402 XCH LST1 +2 # FOR T6-T5, CORRESPONDING TO THE
005203,000267: 01,2752 57401 XCH LST1 +1 # INTERVAL 81.91 SEC FOR ENDTASK.
005204,000268: 01,2753 57400 XCH LST1
005205,000269: 01,2754 67637 AD POSMAX # 2. SET T3 = 1.0 - T2 -T USING LIST 1.
005206,000270: 01,2755 26026 ADS TIME3 # SO T3 WONT TICK DURING UPDATE.
005207,000271: 01,2756 55070 TS RUPTAGN
005208,000272: 01,2757 47665 CS ZERO
005209,000273: 01,2760 55070 TS RUPTAGN # SETS RUPTAGN TO +1 ON OVERFLOW.
005210,000274:
005211,000275: 01,2761 00006 EXTEND # DISPATCH TASK.
005212,000276: 01,2762 44551 DCS ENDTASK
005213,000277: 01,2763 53431 DXCH LST2 +16D
005214,000278: 01,2764 53427 DXCH LST2 +14D
005215,000279: 01,2765 53425 DXCH LST2 +12D
005216,000280: 01,2766 53423 DXCH LST2 +10D
005217,000281: 01,2767 53421 DXCH LST2 +8D
005218,000282: 01,2770 53417 DXCH LST2 +6
005219,000283: 01,2771 53415 DXCH LST2 +4
005220,000284: 01,2772 53413 DXCH LST2 +2
005221,000285: 01,2773 53411 DXCH LST2
005222,000286:
005223,000287: 01,2774 52006 DTCB
005224,000288:
005225,000289: 01,2775 ENDWAITS EQUALS
005226,000290:
005227,000291:
005228,000292: # RETURN, AFTER EXECUTION OF T3 OVERFLOW TASK:
005229,000293:
005230,000294: 4563 BLOCK 02
005231,000295:
005232,000296: 4563 11070 TASKOVER CCS RUPTAGN # IF +1 RETURN TO T3RUPT, IF -0 RESUME.
005233,000297: 4564 34534 CAF WAITBB
005234,000298: 4565 54006 TS BBANK
005235,000299: 4566 12743 TCF T3RUPT2 # DISPATCH NEXT TASK IF IT WAS DUE.
005236,000300:
005237,000301: 4567 00006 RESUME EXTEND
005238,000302: 4570 22012 QXCH QRUPT
005239,000303: 4571 30016 NOQRSM CA BANKRUPT
005240,000304: 4572 54006 TS BBANK
005241,000305: 4573 52011 NOQBRSM DXCH ARUPT
005242,000306: 4574 50017 RESUME
005243,000307:
005244,000308: 4575 ENDWAITF EQUALS # LAST FIXED-FIXED LOCATION OF T3RUPT.
End of include-file WAITLIST.agc. Parent file is MAIN.agc