P15.agc
### FILE="Main.annotation"
## Copyright: Public domain.
## Filename: P15.agc
## Purpose: A section of Artemis revision 071.
## It is part of the reconstructed source code for the first
## release of the flight software for the Command Module's
## (CM) Apollo Guidance Computer (AGC) for Apollo 15 through
## 17. The code has been recreated from a copy of Artemis 072.
## It has been adapted such that the resulting bugger words
## exactly match those specified for Artemis 071 in NASA
## drawing 2021154-, which gives relatively high confidence
## that the reconstruction is correct.
## Reference: 527
## Assembler: yaYUL
## Contact: Ron Burkey <info@sandroid.org>.
## Website: www.ibiblio.org/apollo/index.html
## Mod history: 2019-08-14 MAS Created from Artemis 072.
## 2019-08-15 MAS Undid changes between Artemis 071 and 072
## in the KILLSIVB logic.
## Page 527
# P15 TLI INITIATE/CUTOFF
#
# DISPLAYS N33 : TIME OF SIVB INJECTION SEQUENCE START (TB6)
# ESTABLISHES T6SET TO BE EXECUTED AT TB6 TIME
# SETS TLITIG = TB6 + 9:37.6
# DISPLAYS N14 : INERTIAL VELOCITY MAGNITUDE AT TLI C/O
# DISPLAYS N95 : TFI - TIME FROM TLITIG (DECREASING)
# VG - VELOCITY-TO-BE-GAINED
# V - INERTIAL VELOCITY MAGNITUDE
# T6SET : SETS THE SIVB INJECTION SEQUENCE START BIT,
# ESTABLISHES T6RESET (DT = 10 SECS), AND
# TURNS ON THE UPLINK ACTIVITY LIGHT
# T6RESET : CLEARS THE SIVB I.S.S. BIT AND
# TURNS OFF THE UPLINK ACTIVITY LIGHT
# P40S/SV : CALLS MIDTOAV1 TO INTEGRATE THE CSM
# STATE VECTOR TO TLITLIG - 100 AND
# ESTABLISHES TIGBLNK AT TLITIG - 105
# TIGBLNK : BLANKS THE DSKY FOR 5 SECS AND
# ESTABLISHES TIGAVEG FOR TLITIG - 100
# TIGAVEG : STARTS READACCS AND REDISPLAYS
# N95 (VG AND V NOW DYNAMIC)
# SIVBCOMP : UPDATES VG AND V AND
# AFTER TLITIG + 10 CALCULATES TGO AND
# CHANGES THE N95 R1 DISPLAY TO TFC
# WHEN TGO < 4 SECS, SIVBCOMP ESTABLISHES SIVBOFF (DT = TGO)
# SIVBOFF : SHUTS DOWN THE SIVB AND CALLS POSTTLI
# POSTTLI : FLASHES N95 TO INDICATE TLI IS COMPLETED
# P15 EXITS VIA GOTOPOOH
SETLOC P15LOC1
BANK
COUNT* $$/P15
EBANK= TIG
P15JOB CAF V06N33 # DISPLAY TB6 TIME
TC VNFLASH
TC INTPRET
DLOAD DAD
TIG
TLIDT
STORE TLITMP
RTB BDSU
LOADTIME
TIG
STORE P40TMP # TIG-TIME2
EXIT # .TO P40TMP
DXCH MPAC # ..AND A,L
TC LONGCALL
EBANK= P40TMP
2CADR T6SET
TC 2PHSCHNG
## Page 528
OCT 00153 # A,3.15=T6SET IN P40TMP CSEC
OCT 24024 # C,JOB BELOW,LONGBASE FOR A ABOVE
3P15SPT1 = 3.15SPOT
EXTEND
DCA TLITMP
DXCH TIG # TLITIG = TB6 + 9:37.6
DISP14 CAF V06N14 # DISPLAY V AT TLI C/O
TC VNFLASH
TC INTPRET
VLOAD ABVAL
VRECTCSM # M/CS B+7
STORE VNOW
BDSU SET
VC/O # B+7
TIMRFLAG # ENABLE CLOKTASK
STODL VGTLI # VGTLI = VC/O - |VRECTCSM| B+7
S4BCOMP
STORE AVEGEXIT # SET AVERAGEG EXIT TO SIVBCOMP
EXIT
CAF V06N95
TS NVWORD1 # ENABLE CLOCKJOB
CLOKNOW CAF ONE
TC WAITLIST
EBANK= TIG
2CADR CLOKTASK
TC 2PHSCHNG
OCT 40036 # 6.3SPOT FOR CLOKTASK
OCT 00004 # KILL GROUP 4
6P3SPT4 = 6.3SPOT
TCF ENDOFJOB
TLIDT 2DEC 57760 # 9 MIN 37.6 SEC (TB6 + TLIDT = TLITIG)
EBANK= TIG
S4BCOMP 2CADR SIVBCOMP
V06N14 VN 0614
V06N95 VN 0695
SETLOC P15LOC
BANK
EBANK= TIG
COUNT* $$/P15
T6SET EXTEND
DCA TIME2
DXCH TEVENT
CAF 10SEC # T6RESET IN 10 SEC.
TC TWIDDLE
## Page 529
ADRES T6RESET
TC PHASCHNG
OCT 40023 # A,3.2=T6CHNSET IMMED.,
# T6RESET IN 10 SEC,TBASE NOW
3P2SPT1 = 3.2SPOT
T6CHNSET CAF BIT13
EXTEND # SIVB INJECTION
WOR CHAN12 # SEQUENCE START
CAF BIT3
EXTEND
WOR DSALMOUT # UPLINK ACTIV. ON
TC TASKOVER
10SEC DEC 1000
T6RESET CS BIT13 # PROTECTED BY GROUP 3
EXTEND # CLEAR SIVB ISS
WAND CHAN12
CS BIT3 # TURN OFF UPLINK ACTIVITY
EXTEND
WAND DSALMOUT
TC 2PHSCHNG
OCT 00003 # KILL GROUP 3
OCT 05014
DEC -0 # GROUP 4 CONTINUES BELOW
P15INTEG EXTEND
DCA 100SEC
DXCH AVEGDT # START AVERAGEG AT TIG - 100.00
CAF PRIO12
TC FINDVAC
EBANK= TIG
2CADR P40S/SV # COMMON CODE IN P40
TCF TASKOVER
100SEC 2DEC 10000
## Page 530
# SIVB SHUTDOWN COMPUTATIONS
#
# CALLED VIA AVEGEXIT EVERY 2 SECS STARTING AT TLITIG - 100
# VG AND V (N95) ARE ALWAYS UPDATED
# TGO CALCULATONS FOR TLI SHUTDOWN AND TTOGO (N95)
# ARE ENABLED (STEERSW = 1) AT TLITIG + 10
SETLOC P15LOC1
BANK
EBANK= TIG
COUNT* $$/P15
SIVBCOMP TC INTPRET
DLOAD DSU
TTOGO
TENSEC # TFI > +10 ? (TFC CAN NEVER EXCEED +2)
BMN SET # YES, SET STERSW TO ENABLE TGO CALC
+2 # NO
STEERSW
CALL
S11.1 # VMAG, HDOT, AND H FOR N62
DLOAD BDSU
VNOW # VMAG M/CS B+7 FOR N95
VC/O # VMAG(C/O) M/CS B+7
STODL VGTLI # VG = VC/O - VNOW FOR N95
VNOW
BOFF DSU
STEERSW
SETVPAST # STEERSW = 0, EXIT
VPAST # MPAC = VNOW - VPAST (DV FOR LAST 2 SECS)
BMN PUSH # 00D = DV FOR LAST 2 SECS
SETVPAST # DV NEGATIVE, EXIT
DLOAD SR
VGTLI # B+7
09D # SR9 NOW B+16
DDV # B+16 / B+7 NOW B+9
BOV DMP
SETVPAST # OVERFLOW, EXIT
200B+19 # B+9 X B+19 NOW B+28
PUSH SLOAD # 00D = TGO WITHOUT TAILOFF EFFECTS
DTF # TLI TAILOFF CONSTANT B+14
SR BDSU # COMPENSATE FOR TAILOFF
14D # B+28
PUSH DAD # 00D = COMPENSATED TGO
PIPTIME
STODL TIG # FOR CLOKTASK (N95)
DSU BMN # TGO FROM 00D
4SEC # TGO < 4 SECS ?
KILLSIVB # YES : SET UP SIVB SHUTDOWN
SETVPAST DLOAD
VNOW
STCALL VPAST # VPAST = VNOW
## Page 531
SERVXT1 # ** NO RETURN ** SAME AS GOTO SERVXT1
EBANK= TIG
KILLSIVB EXIT
INHINT
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.
DCA TIG
DXCH AVEGDT
EXTEND
DCS TIME2
DAS AVEGDT
CAE AVEGDT +1 # DT TO C/O = TIG - TIME2 (< 4 SECS TO GO)
# PIPTIME + TGO - TIME2
EXTEND # DT <= 0 ?
BZMF +2 # YES
TCF +3 # NO
CAF ONE
TS AVEGDT +1
TC TWIDDLE
ADRES SIVBOFF
TC 2PHSCHNG
OCT 40614 # 4.61 SIVBOFF IN (AVEGDT+1) CS
OCT 10035
4P61SPT1 = 4.61SPOT
5P3SPT16 = 5.3SPOT
TC POSTJUMP
CADR CLEARSTR
EBANK= WHOCARES
SIVBOFF CAF BIT14
EXTEND
WOR CHAN12 # SHUTDOWN THE SIVB
EXTEND
DCA TIME2
DXCH TEVENT # SET TEVENT
TC FIXDELAY
DEC 250 # DELAY 2.5 SECS
CAF ZERO
TS NVWORD1 # ZERO NVWORD1 IN CASE CLOCKJOB WAITING
CS TIMRBIT
MASK FLAGWRD7
TS FLAGWRD7 # DISABLE CLOKTASK
TC PHASCHNG
OCT 05014
DEC -0 # START BELOW
CAF PRIO12
TC NOVAC
## Page 532
EBANK= WHOCARES
2CADR POSTTLI
TC TASKOVER
4SEC 2DEC 400
TENSEC 2DEC 1000
200B+19 2DEC 200 B-19
SETLOC P15LOC2
BANK
EBANK= WHOCARES
COUNT* $$/P15
POSTTLI CAF V16N95
TC VNFLASH
TCF GOTOPOOH
V16N95 VN 1695
## Page 533
## This page empty.