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