Source Code
|
These source-code files are part of a reconstructed copy of Artemis 071, the
first release of the Apollo 15 through 17 Command Module (CM) Apollo Guidance
Computer (AGC) software.
The reconstruction began with source code of Artemis 072 previously transcribed from a digitized copy of that program. The code was then updated by undoing changes between the two versions. The reconstruction was verified by matching memory-bank checksums to those listed in drawing 2021154-. Note that page numbers in the reconstructed code match those on the Artemis 072 printout, although the changed code would likely have changed page numbers for a real Artemis 071 listing. Comments from the original source code are prefixed with a single '#' symbol, whereas comments added later are prefixed by "##" or "###". Report any errors noted by creating an issue report at the Virtual AGC project's GitHub repository. |
023080,000002: ## Copyright: Public domain.
023081,000003: ## Filename: P15.agc
023082,000004: ## Purpose: A section of Artemis revision 071.
023083,000005: ## It is part of the reconstructed source code for the first
023084,000006: ## release of the flight software for the Command Module's
023085,000007: ## (CM) Apollo Guidance Computer (AGC) for Apollo 15 through
023086,000008: ## 17. The code has been recreated from a copy of Artemis 072.
023087,000009: ## It has been adapted such that the resulting bugger words
023088,000010: ## exactly match those specified for Artemis 071 in NASA
023089,000011: ## drawing 2021154-, which gives relatively high confidence
023090,000012: ## that the reconstruction is correct.
023091,000013: ## Reference: 527
023092,000014: ## Assembler: yaYUL
023093,000015: ## Contact: Ron Burkey <info@sandroid.org>.
023094,000016: ## Website: www.ibiblio.org/apollo/index.html
023095,000017: ## Mod history: 2019-08-14 MAS Created from Artemis 072.
023096,000018: ## 2019-08-15 MAS Undid changes between Artemis 071 and 072
023097,000019: ## in the KILLSIVB logic.
023098,000020:
|
Page 527 |
023100,000022:
023101,000023: # P15 TLI INITIATE/CUTOFF
023102,000024: #
023103,000025: # DISPLAYS N33 : TIME OF SIVB INJECTION SEQUENCE START (TB6)
023104,000026: # ESTABLISHES T6SET TO BE EXECUTED AT TB6 TIME
023105,000027: # SETS TLITIG = TB6 + 9:37.6
023106,000028: # DISPLAYS N14 : INERTIAL VELOCITY MAGNITUDE AT TLI C/O
023107,000029: # DISPLAYS N95 : TFI - TIME FROM TLITIG (DECREASING)
023108,000030: # VG - VELOCITY-TO-BE-GAINED
023109,000031: # V - INERTIAL VELOCITY MAGNITUDE
023110,000032: # T6SET : SETS THE SIVB INJECTION SEQUENCE START BIT,
023111,000033: # ESTABLISHES T6RESET (DT = 10 SECS), AND
023112,000034: # TURNS ON THE UPLINK ACTIVITY LIGHT
023113,000035: # T6RESET : CLEARS THE SIVB I.S.S. BIT AND
023114,000036: # TURNS OFF THE UPLINK ACTIVITY LIGHT
023115,000037: # P40S/SV : CALLS MIDTOAV1 TO INTEGRATE THE CSM
023116,000038: # STATE VECTOR TO TLITLIG - 100 AND
023117,000039: # ESTABLISHES TIGBLNK AT TLITIG - 105
023118,000040: # TIGBLNK : BLANKS THE DSKY FOR 5 SECS AND
023119,000041: # ESTABLISHES TIGAVEG FOR TLITIG - 100
023120,000042: # TIGAVEG : STARTS READACCS AND REDISPLAYS
023121,000043: # N95 (VG AND V NOW DYNAMIC)
023122,000044: # SIVBCOMP : UPDATES VG AND V AND
023123,000045: # AFTER TLITIG + 10 CALCULATES TGO AND
023124,000046: # CHANGES THE N95 R1 DISPLAY TO TFC
023125,000047: # WHEN TGO < 4 SECS, SIVBCOMP ESTABLISHES SIVBOFF (DT = TGO)
023126,000048: # SIVBOFF : SHUTS DOWN THE SIVB AND CALLS POSTTLI
023127,000049: # POSTTLI : FLASHES N95 TO INDICATE TLI IS COMPLETED
023128,000050: # P15 EXITS VIA GOTOPOOH
023129,000051: 33,2000 SETLOC P15LOC1
023130,000052: 33,2000 BANK
023131,000053: 33,3455 COUNT* $$/P15
023132,000054: 33,3455 E7,1412 EBANK= TIG
023133,000055: 33,3455 35026 P15JOB CAF V06N33 # DISPLAY TB6 TIME
023134,000056: 33,3456 05535 TC VNFLASH
023135,000057: 33,3457 06006 TC INTPRET
023136,000058: 33,3460 43345 DLOAD DAD
023137,000059: 33,3461 03413 TIG
023138,000060: 33,3462 27533 TLIDT
023139,000061: 33,3463 03464 STORE TLITMP
023140,000062: 33,3464 44234 RTB BDSU
023141,000063: 33,3465 51751 LOADTIME
023142,000064: 33,3466 03413 TIG
023143,000065: 33,3467 03673 STORE P40TMP # TIG-TIME2
023144,000066: 33,3470 77776 EXIT # .TO P40TMP
023145,000067: 33,3471 52155 DXCH MPAC # ..AND A,L
023146,000068: 33,3472 05332 TC LONGCALL
023147,000069: 33,3473 E7,1672 EBANK= P40TMP
023148,000070: 33,3473 02311 40067 2CADR T6SET
023149,000071: 33,3475 05362 TC 2PHSCHNG
|
Page 528 |
023151,000073: 33,3476 00153 OCT 00153 # A,3.15=T6SET IN P40TMP CSEC
023152,000074: 33,3477 24024 OCT 24024 # C,JOB BELOW,LONGBASE FOR A ABOVE
023153,000075: 33,3500 01,2077 3P15SPT1 = 3.15SPOT
023154,000076: 33,3500 00006 EXTEND
023155,000077: 33,3501 31464 DCA TLITMP
023156,000078: 33,3502 53413 DXCH TIG # TLITIG = TB6 + 9:37.6
023157,000079: 33,3503 33536 DISP14 CAF V06N14 # DISPLAY V AT TLI C/O
023158,000080: 33,3504 05535 TC VNFLASH
023159,000081: 33,3505 06006 TC INTPRET
023160,000082: 33,3506 51575 VLOAD ABVAL
023161,000083: 33,3507 01563 VRECTCSM # M/CS B+7
023162,000084: 33,3510 03723 STORE VNOW
023163,000085: 33,3511 43021 BDSU SET
023164,000086: 33,3512 02356 VC/O # B+7
023165,000087: 33,3513 03464 TIMRFLAG # ENABLE CLOKTASK
023166,000088: 33,3514 17725 STODL VGTLI # VGTLI = VC/O - |VRECTCSM| B+7
023167,000089: 33,3515 27535 S4BCOMP
023168,000090: 33,3516 01062 STORE AVEGEXIT # SET AVERAGEG EXIT TO SIVBCOMP
023169,000091: 33,3517 77776 EXIT
023170,000092: 33,3520 33537 CAF V06N95
023171,000093: 33,3521 54777 TS NVWORD1 # ENABLE CLOCKJOB
023172,000094: 33,3522 34770 CLOKNOW CAF ONE
023173,000095: 33,3523 05233 TC WAITLIST
023174,000096: 33,3524 E7,1412 EBANK= TIG
023175,000097: 33,3524 03225 50067 2CADR CLOKTASK
023176,000098:
023177,000099: 33,3526 05362 TC 2PHSCHNG
023178,000100: 33,3527 40036 OCT 40036 # 6.3SPOT FOR CLOKTASK
023179,000101: 33,3530 00004 OCT 00004 # KILL GROUP 4
023180,000102: 33,3531 01,2325 6P3SPT4 = 6.3SPOT
023181,000103: 33,3531 15205 TCF ENDOFJOB
023182,000104:
023183,000105: 33,3532 00003 20640 TLIDT 2DEC 57760 B-28 # 9 MIN 37.6 SEC (TB6 + TLIDT = TLITIG)
023184,000106:
023185,000107: 33,3534 E7,1412 EBANK= TIG
023186,000108: 33,3534 03540 66067 S4BCOMP 2CADR SIVBCOMP
023187,000109:
023188,000110: 33,3536 01416 V06N14 VN 0614
023189,000111: 33,3537 01537 V06N95 VN 0695
023190,000112:
023191,000113:
023192,000114: 20,2000 SETLOC P15LOC
023193,000115: 20,2000 BANK
023194,000116: 20,2311 E7,1412 EBANK= TIG
023195,000117: 20,2311 COUNT* $$/P15
023196,000118: 20,2311 00006 T6SET EXTEND
023197,000119: 20,2312 30025 DCA TIME2
023198,000120: 20,2313 53022 DXCH TEVENT
023199,000121: 20,2314 32330 CAF 10SEC # T6RESET IN 10 SEC.
023200,000122: 20,2315 05223 TC TWIDDLE
|
Page 529 |
023202,000124: 20,2316 02331 ADRES T6RESET
023203,000125: 20,2317 05402 TC PHASCHNG
023204,000126: 20,2320 40023 OCT 40023 # A,3.2=T6CHNSET IMMED.,
023205,000127: # T6RESET IN 10 SEC,TBASE NOW
023206,000128:
023207,000129: 20,2321 01,2052 3P2SPT1 = 3.2SPOT
023208,000130: 20,2321 34754 T6CHNSET CAF BIT13
023209,000131: 20,2322 00006 EXTEND # SIVB INJECTION
023210,000132: 20,2323 05012 WOR CHAN12 # SEQUENCE START
023211,000133: 20,2324 34766 CAF BIT3
023212,000134: 20,2325 00006 EXTEND
023213,000135: 20,2326 05011 WOR DSALMOUT # UPLINK ACTIV. ON
023214,000136: 20,2327 05314 TC TASKOVER
023215,000137:
023216,000138: 20,2330 01750 10SEC DEC 1000 B-14
023217,000139:
023218,000140: 20,2331 44754 T6RESET CS BIT13 # PROTECTED BY GROUP 3
023219,000141: 20,2332 00006 EXTEND # CLEAR SIVB ISS
023220,000142: 20,2333 03012 WAND CHAN12
023221,000143: 20,2334 44766 CS BIT3 # TURN OFF UPLINK ACTIVITY
023222,000144: 20,2335 00006 EXTEND
023223,000145: 20,2336 03011 WAND DSALMOUT
023224,000146: 20,2337 05362 TC 2PHSCHNG
023225,000147: 20,2340 00003 OCT 00003 # KILL GROUP 3
023226,000148: 20,2341 05014 OCT 05014
023227,000149: 20,2342 77777 DEC -0 B-14 # GROUP 4 CONTINUES BELOW
023228,000150: 20,2343 00006 P15INTEG EXTEND
023229,000151: 20,2344 32354 DCA 100SEC
023230,000152: 20,2345 53460 DXCH AVEGDT # START AVERAGEG AT TIG - 100.00
023231,000153: 20,2346 34664 CAF PRIO12
023232,000154: 20,2347 05135 TC FINDVAC
023233,000155: 20,2350 E7,1412 EBANK= TIG
023234,000156: 20,2350 02523 50067 2CADR P40S/SV # COMMON CODE IN P40
023235,000157: 20,2352 15314 TCF TASKOVER
023236,000158:
023237,000159: 20,2353 00000 23420 100SEC 2DEC 10000 B-28
023238,000160:
|
Page 530 |
023240,000162:
023241,000163: # SIVB SHUTDOWN COMPUTATIONS
023242,000164:
023243,000165: # CALLED VIA AVEGEXIT EVERY 2 SECS STARTING AT TLITIG - 100
023244,000166: # VG AND V (N95) ARE ALWAYS UPDATED
023245,000167: # TGO CALCULATONS FOR TLI SHUTDOWN AND TTOGO (N95)
023246,000168: # ARE ENABLED (STEERSW = 1) AT TLITIG + 10
023247,000169: 33,2000 SETLOC P15LOC1
023248,000170: 33,2000 BANK
023249,000171: 33,3540 E7,1412 EBANK= TIG
023250,000172: 33,3540 COUNT* $$/P15
023251,000173: 33,3540 06006 SIVBCOMP TC INTPRET
023252,000174: 33,3541 45345 DLOAD DSU
023253,000175: 33,3542 03661 TTOGO
023254,000176: 33,3543 27666 TENSEC # TFI > +10 ? (TFC CAN NEVER EXCEED +2)
023255,000177: 33,3544 43040 BMN SET # YES, SET STERSW TO ENABLE TGO CALC
023256,000178: 33,3545 67547 +2 # NO
023257,000179: 33,3546 01064 STEERSW
023258,000180: 33,3547 77624 CALL
023259,000181: 33,3550 70537 S11.1 # VMAG, HDOT, AND H FOR N62
023260,000182: 33,3551 44345 DLOAD BDSU
023261,000183: 33,3552 03723 VNOW # VMAG M/CS B+7 FOR N95
023262,000184: 33,3553 02356 VC/O # VMAG(C/O) M/CS B+7
023263,000185: 33,3554 17725 STODL VGTLI # VG = VC/O - VNOW FOR N95
023264,000186: 33,3555 03723 VNOW
023265,000187: 33,3556 45214 BOFF DSU
023266,000188: 33,3557 01344 STEERSW
023267,000189: 33,3560 67605 SETVPAST # STEERSW = 0, EXIT
023268,000190: 33,3561 03462 VPAST # MPAC = VNOW - VPAST (DV FOR LAST 2 SECS)
023269,000191: 33,3562 41440 BMN PUSH # 00D = DV FOR LAST 2 SECS
023270,000192: 33,3563 67605 SETVPAST # DV NEGATIVE, EXIT
023271,000193: 33,3564 54345 DLOAD SR
023272,000194: 33,3565 03725 VGTLI # B+7
023273,000195: 33,3566 20612 09D # SR9 NOW B+16
023274,000196: 33,3567 77671 DDV # B+16 / B+7 NOW B+9
023275,000197: 33,3570 41200 BOV DMP
023276,000198: 33,3571 67605 SETVPAST # OVERFLOW, EXIT
023277,000199: 33,3572 27670 200B+19 # B+9 X B+19 NOW B+28
023278,000200: 33,3573 67206 PUSH SLOAD # 00D = TGO WITHOUT TAILOFF EFFECTS
023279,000201: 33,3574 02355 DTF # TLI TAILOFF CONSTANT B+14
023280,000202: 33,3575 44261 SR BDSU # COMPENSATE FOR TAILOFF
023281,000203: 33,3576 20617 14D # B+28
023282,000204: 33,3577 43206 PUSH DAD # 00D = COMPENSATED TGO
023283,000205: 33,3600 01044 PIPTIME
023284,000206: 33,3601 17413 STODL TIG # FOR CLOKTASK (N95)
023285,000207: 33,3602 50025 DSU BMN # TGO FROM 00D
023286,000208: 33,3603 27664 4SEC # TGO < 4 SECS ?
023287,000209: 33,3604 67611 KILLSIVB # YES : SET UP SIVB SHUTDOWN
023288,000210: 33,3605 77745 SETVPAST DLOAD
023289,000211: 33,3606 03723 VNOW
023290,000212: 33,3607 37462 STCALL VPAST # VPAST = VNOW
|
Page 531 |
023292,000214: 33,3610 51603 SERVXT1 # ** NO RETURN ** SAME AS GOTO SERVXT1
023293,000215:
023294,000216:
023295,000217: 33,3611 E7,1412 EBANK= TIG
023296,000218: 33,3611 77776 KILLSIVB EXIT
023297,000219: 33,3612 00004 INHINT
023298,000220: 33,3613 00006 EXTEND
|
The following code has a bug with sign agreement that was fixed in Artemis 072. It is possible for the (TIG - TIME2) calculation to result in a mixed-sign result, in which case the following logic will behave incorrectly. In Artemis 072, the result of the calculation was stored in MPAC instead of AVEGDT. After the DAS, sign agreement was then forced via a "TCR DPAGREE". Finally, because the result was now in MPAC instead of AVEGDT where it needed to be, the TCF +3 was changed to TCF +2 to ensure the number made it safely into AVEGDT +1. |
023306,000228: 33,3614 31413 DCA TIG
023307,000229: 33,3615 53460 DXCH AVEGDT
023308,000230: 33,3616 00006 EXTEND
023309,000231: 33,3617 40025 DCS TIME2
023310,000232: 33,3620 21460 DAS AVEGDT
023311,000233: 33,3621 31460 CAE AVEGDT +1 # DT TO C/O = TIG - TIME2 (< 4 SECS TO GO)
023312,000234: # PIPTIME + TGO - TIME2
023313,000235: 33,3622 00006 EXTEND # DT <= 0 ?
023314,000236: 33,3623 63625 BZMF +2 # YES
023315,000237: 33,3624 13627 TCF +3 # NO
023316,000238: 33,3625 34770 CAF ONE
023317,000239: 33,3626 55460 TS AVEGDT +1
023318,000240: 33,3627 05223 TC TWIDDLE
023319,000241: 33,3630 03636 ADRES SIVBOFF
023320,000242: 33,3631 05362 TC 2PHSCHNG
023321,000243: 33,3632 40614 OCT 40614 # 4.61 SIVBOFF IN (AVEGDT+1) CS
023322,000244: 33,3633 10035 OCT 10035
023323,000245:
023324,000246: 33,3634 01,2231 4P61SPT1 = 4.61SPOT
023325,000247: 33,3634 01,2250 5P3SPT16 = 5.3SPOT
023326,000248: 33,3634 04655 TC POSTJUMP
023327,000249: 33,3635 51134 CADR CLEARSTR
023328,000250:
023329,000251: 33,3636 0003777 EBANK= WHOCARES
023330,000252: 33,3636 34753 SIVBOFF CAF BIT14
023331,000253: 33,3637 00006 EXTEND
023332,000254: 33,3640 05012 WOR CHAN12 # SHUTDOWN THE SIVB
023333,000255: 33,3641 00006 EXTEND
023334,000256: 33,3642 30025 DCA TIME2
023335,000257: 33,3643 53022 DXCH TEVENT # SET TEVENT
023336,000258: 33,3644 05255 TC FIXDELAY
023337,000259: 33,3645 00372 DEC 250 B-14 # DELAY 2.5 SECS
023338,000260: 33,3646 34772 CAF ZERO
023339,000261: 33,3647 54777 TS NVWORD1 # ZERO NVWORD1 IN CASE CLOCKJOB WAITING
023340,000262: 33,3650 44756 CS TIMRBIT
023341,000263: 33,3651 70103 MASK FLAGWRD7
023342,000264: 33,3652 54103 TS FLAGWRD7 # DISABLE CLOKTASK
023343,000265: 33,3653 05402 TC PHASCHNG
023344,000266: 33,3654 05014 OCT 05014
023345,000267: 33,3655 77777 DEC -0 B-14 # START BELOW
023346,000268: 33,3656 34664 CAF PRIO12
023347,000269: 33,3657 05121 TC NOVAC
|
Page 532 |
023349,000271: 33,3660 0003777 EBANK= WHOCARES
023350,000272: 33,3660 02012 74067 2CADR POSTTLI
023351,000273:
023352,000274: 33,3662 05314 TC TASKOVER
023353,000275:
023354,000276: 33,3663 00000 00620 4SEC 2DEC 400 B-28
023355,000277: 33,3665 00000 01750 TENSEC 2DEC 1000 B-28
023356,000278: 33,3667 00006 10000 200B+19 2DEC 200 B-19
023357,000279:
023358,000280:
023359,000281: 36,2000 SETLOC P15LOC2
023360,000282: 36,2000 BANK
023361,000283: 36,2012 0003777 EBANK= WHOCARES
023362,000284:
023363,000285: 36,2012 COUNT* $$/P15
023364,000286: 36,2012 32015 POSTTLI CAF V16N95
023365,000287: 36,2013 05535 TC VNFLASH
023366,000288: 36,2014 14103 TCF GOTOPOOH
023367,000289:
023368,000290:
023369,000291: 36,2015 04137 V16N95 VN 1695
023370,000292:
|
Page 533 |
023372,000294:
|
This page empty. |
023374,000296:
End of include-file P15.agc. Parent file is MAIN.agc