https://github.com/virtualagc/virtualagc
Revision 078c79d8734a9ed2860303a7c1662004284fe853 authored by Ron Burkey on 07 August 2022, 15:04:04 UTC, committed by Ron Burkey on 07 August 2022, 15:04:04 UTC
assembly listings from yaASM and yaLEMAP. Added some debugging messages to 'make install'. Tweaked debugging messages that VirtualAGC embeds in 'simulate'. Verified buildability in Mint 21, 20, 19, 17, and verified buildability using clang in Mint 17.
1 parent 6bb1acc
Tip revision: 078c79d8734a9ed2860303a7c1662004284fe853 authored by Ron Burkey on 07 August 2022, 15:04:04 UTC
Fixed a potential string-overflow bug in yaASM. Removed timestamps from
Fixed a potential string-overflow bug in yaASM. Removed timestamps from
Tip revision: 078c79d
R60,R62.agc
### FILE="Main.annotation"
## Copyright: Public domain.
## Filename: R60,R62.agc
## Purpose: A section of LUM69 revision 2.
## It is part of the reconstructed source code for the flown
## version of the flight software for the Lunar Module's (LM)
## Apollo Guidance Computer (AGC) for Apollo 10. The code has
## been recreated from a copy of Luminary revsion 069, using
## changes present in Luminary 099 which were described in
## Luminary memos 75 and 78. The code has been adapted such
## that the resulting bugger words exactly match those specified
## for LUM69 revision 2 in NASA drawing 2021152B, which gives
## relatively high confidence that the reconstruction is correct.
## Reference: pp. 485-497
## Assembler: yaYUL
## Contact: Ron Burkey <info@sandroid.org>.
## Website: www.ibiblio.org/apollo/index.html
## Mod history: 2019-07-27 MAS Created from Luminary 69.
## Page 485
# MOD NO: 0 DATE: 1 MAY 1968
# MOD BY: DIGITAL DEVEL GROUP LOG SECTION R60,R62
#
# FUNCTIONAL DESCRIPTION:
#
# CALLED AS A GENERAL SUBROUTINE TO MANEUVER THE LM TO A SPECIFIED
# ATTITUDE.
#
# 1. IF THE 3-AXIS FLAG IS NOT SET THE FINAL CDU ANGLES ARE
# CALCULATED (VECPOINT).
#
# 2. THE FDAI BALL ANGLES (NOUN 18) ARE CALCULATED (BALLANGS).
#
# 3. REQUEST FLASHING DISPLAY V50 N18 PLEASE PERFORM AUTO MANEUVER.
#
# 4. IF PRIORITY DISPLAY FLAG IS SET DO A PHASECHANGE. THEN AWAIT
# ASTRONAUT RESPONSE.
#
# 5. DISPLAY RESPONSE RETURNS:
#
# A. ENTER - RESET 3-AXIS FLAG AND RETURN TO CLIENT.
#
# B. TERMINATE - IF IN P00 GO TO STEP 5A. OTHERWISE CHECK IF R61 IS
# THE CALLING PROGRAM. IF IN R61 AN EXIT IS MADE TO GOTOV56. IF
# NOT IN R61 AN EXIT IS DONE VIA GOTOP00H.
#
# C. PROCEED - CONTINUE WITH PROGRAM AT STEP 6.
#
# 6. IF THE 3-AXISFLAG IS NOT SET, THE FINAL CDU ANGLES ARE CALCULATED
# (VECPOINT).
#
# 7. THE FDAI BALL ANGLES (NOUN 18) ARE CALCULATED (BALLANGS).
#
# 8. IF THE G+N SWITCH IS NOT SET GO BACK TO STEP 3.
#
# 9. IF THE AUTO SWITCH IS NOT SET GO BACK TO STEP 3.
#
# 10. NONFLASHING DISPLAY V06N18 (FDAI ANGLES).
#
# 11. DO A PHASECHANGE.
#
# 12. DO A MANEUVER CALCULATION AND ICDU DRIVE ROUTINE TO ACHIEVE FINAL
#
# GIMBAL ANGLES (GOMANUR).
# 13. AT END OF MANEUVER GO TO STEP 3.
#
# IF SATISFACTORY MANEUVER STEP 5A EXITS R60.
# FOR FURTHER ADJUSTMENT OF THE VEHICLE ATTITUDE ABOUT THE
# DESIRED VECTOR, THE ROUTINE MAY BE PERFORMED AGAIN STARTING AT
## Page 486
# STEP 5C.
#
# CALLING SEQUENCE: TC BANKCALL
# CADR R60LEM
#
# ERASABLE INITIALIZATION REQUIRED: SCAXIS, POINTVSM (FOR VECPOINT)
# 3AXISFLG.
#
# SUBROUTINES CALLED: VECPOINT, BALLANGS, GOPERF2R, LINUS, GODSPER,
# GOMANUR, DOWNFLAG, PHASCHNG, UPFLAG
#
# NORMAL EXIT MODES: CAE TEMPR60 (CALLERS RETURN ADDRESS)
# TC BANKJUMP
#
# ALARMS: NONE
#
# OUTPUT: NONE
#
# DEBRIS: CPHI, CTHETA, CPSI, 3AXISFLG, TBASE2
BANK 34
SETLOC MANUVER
BANK
EBANK= TEMPR60
COUNT* $$/R06
R60LEM TC MAKECADR
TS TEMPR60
REDOMANN CAF 3AXISBIT
MASK FLAGWRD5 # IS 3-AXIS FLAG SET
CCS A
TCF TOBALL # YES
TC INTPRET
CALL
VECPOINT # TO COMPUTE FINAL ANGLES
STORE CPHI # STORE FINAL ANGLES - CPHI, CTHETA, CPSI
EXIT
TOBALL TC BANKCALL
CADR BALLANGS # TO CONVERT ANGLES TO FDAI
TOBALLA CAF V06N18
TC BANKCALL
CADR GOPERF2R # DISPLAY PLEASE PERFORM AUTO MANEUVER
TC R61TEST
TC REDOMANC # PROCEED
TC ENDMANU1 # ENTER I.E. FINISHED WITH R60
## Page 487
TC CHKLINUS # TO CHECK FOR PRIORITY DISPLAYS
TC ENDOFJOB
REDOMANC CAF 3AXISBIT
MASK FLAGWRD5 # IS 3-AXIS FLAG SET
CCS A
TCF TOBALLC # YES
TC INTPRET
CALL
VECPOINT # TO COMPUTE FINAL ANGLES
STORE CPHI # STORE ANGLES
EXIT
TOBALLC TC BANKCALL
CADR BALLANGS # TO CONVERT ANGLES TO FDAI
TC G+N,AUTO # CHECK AUTO MODE
CCS A
TCF TOBALLA # NOT AUTO, GO REREQUEST AUTO MANEUVER.
AUTOMANV CAF V06N18 # STATIC DISPLAY DURING AUTO MANEUVER
TC BANKCALL # -
CADR GODSPR # -
TC CHKLINUS # TO CHECK FOR PRIORITY DISPLAYS
STARTMNV TC BANKCALL # PERFORM MANEUVER VIA KALCMANU
CADR GOMANUR
ENDMANUV TCF TOBALLA # FINISHED MANEUVER.
ENDMANU1 TC DOWNFLAG # RESET 3-AXIS FLAG
ADRES 3AXISFLG
CAE TEMPR60 # -
TC BANKJUMP # -
CHKLINUS CS FLAGWRD4
MASK PDSPFBIT # IS PRIORITY DISPLAY FLAG SET?
CCS A # -
TC Q # NO - EXIT
CA Q
TS MPAC +2 # SAVE RETURN
CS THREE # OBTAIN LOCATION FOR RESTART
AD BUF2 # HOLDS Q OF LAST DISPLAY
TS TBASE2
TC PHASCHNG
OCT 00132
CAF BIT7
TC LINUS # GO SET BITS FOR PRIORITY DISPLAY -
TC MPAC +2
## Page 488
RELINUS CAF PRIO26 # RESTORE ORIGINAL PRIORITY
TC PRIOCHNG
CAF TRACKBIT # DON'T CONTINUE R60 UNLESS TRACKFLAG ON.
MASK FLAGWRD1
CCS A
TCF RER60
CAF RNDVZBIT # IS IT P20?
MASK FLAGWRD0
CCS A
TC +4 # YES
TC PHASCHNG # NO, MUST BE P25, SET 2.11 SPOT
OCT 40112
TC ENDOFJOB
TC PHASCHNG # SET 2.7 SPOT FOR P20
OCT 40072
TC ENDOFJOB
RER60 TC UPFLAG # SET PRIO DISPLAY FLAG AFTER RESTART
ADRES PDSPFLAG
TC TBASE2
R61TEST CA MODREG # IF WE ARE IN P00 IT MUST BE V49 OR V89
EXTEND
BZF ENDMANU1 # THUS WE GO TO ENDEXT VIA USER
CA FLAGWRD4 # ARE WE IN R61 (P20 OR P25)
MASK PDSPFBIT
EXTEND
BZF GOTOPOOH # NO
TC GOTOV56 # YES
BIT14+7 OCT 20100 # -
OCT203 OCT 203
V06N18 VN 0618
# SUBROUTINE TO CHECK FOR G+N CONTROL, AUTO STABILIZATION
#
# RETURNS WITH C(A) = + IF NOT SET FOR G+N, AUTO
# RETURNS WITH C(A) = +0 IF SWITCHES ARE SET
G+N,AUTO EXTEND
READ CHAN30
MASK BIT10
CCS A
TC Q # NOT IN G+N C(A) = +
## Page 489
ISITAUTO EXTEND # CHECK FOR AUTO MODE
READ CHAN31
MASK BIT14
TC Q # (+) = NOT IN AUTO, (+0) = AOK
## Page 490
# PROGRAM DESCRIPTION BALLANGS
# MOD NO. LOG SECTION R60,R62
#
# WRITTEN BY RAMA M. AIYAWAR
# FUNCTIONAL DESCRIPTION
#
# COMPUTES LM FDAI BALL DISPLAY ANGLES
# CALLING SEQUENCE
#
# TC BALLANGS
# NORMAL EXIT MODE
#
# TC BALLEXIT (SAVED Q)
#
# ALARM OR EXIT MODE NIL
# SUBROUTINES CALLED
# CD*TR*G
# ARCTAN
#
# INPUT
#
# CPHI,CTHETA,CPSI ARE THE ANGLES CORRESPONDING TO AOG,AIG,AMG. THEY ARE
# SP,2S COMPLIMENT SCALED TO HALF REVOLUTION.
# OUTPUT
#
# FDAIX, FDAIY, FDAIZ ARE THE REQUIRED BALL ANGLES SCALED TO HALF REVOLUTION
# SP,2S COMPLIMENT.
# THESE ANGLES WILL BE DISPLAYED AS DEGREES AND HUNDREDTHS, IN THE ORDER ROLL, PITCH, YAW, USING NOUNS 18 & 19.
#
# ERASABLE INITIALIZATION REQUIRED
#
# CPHI,CTHETA,CPSI EACH A SP REGISTER
# DEBRIS
#
# A,L,Q,MPAC,SINCDU,COSCDU,PUSHLIST,BALLEXIT
#
# NOMENCLATURE: CPHI, CTHETA, & CPSI REPRESENT THE OUTER, INNER, & MIDDLE GIMBAL ANGLES, RESPECTIVELY; OR
# EQUIVALENTLY, CDUX, CDUY, & CDUZ.
#
# NOTE: ARCTAN CHECKS FOR OVERFLOW AND SHOULD BE ABLE TO HANDLE ANY SINGULARITIES.
SETLOC BAWLANGS
BANK
COUNT* $$/BALL
BALLANGS TC MAKECADR
TS BALLEXIT
CA CPHI
## Page 491
TS CDUSPOT +4
CA CTHETA
TS CDUSPOT
CA CPSI
TS CDUSPOT +2
TC INTPRET
SETPD CALL
0D
CD*TR*G
DLOAD DMP
SINCDUX # SIN (OGA)
COSCDUZ # COS (MGA)
SL1 DCOMP # SCALE
ARCSIN PDDL # YAW = ARCSIN(-SXCZ) INTO 0 PD
SINCDUZ
STODL SINTH # (SINTH = 18D IN PD)
COSCDUZ
DMP SL1 # RESCALE
COSCDUX
STCALL COSTH # (COSTH= 16D IN PD)
ARCTAN
PDDL DMP # ROLL = ARCTAN(SZ/CZCX) INTO 2 PD
SINCDUZ
SINCDUX
SL2 PUSH # SXSZ INTO 4 PD
DMP PDDL # SXSZCY INTO 4 PD
COSCDUY
DMP PDDL # SXSZSY INTO 6 PD
SINCDUY
COSCDUX
DMP SL1 # CXCY
COSCDUY
DSU STADR # PULL UP FROM 6 PD
STODL COSTH # COSTH = CXCY - SXSZSY
SINCDUY
DMP SL1
COSCDUX # CXSY
DAD STADR # PULL UP FROM 4 PD
STCALL SINTH # SINTH = CXSY + SXSZCY
ARCTAN # RETURNS WITH D(MPAC) = PITCH
PDDL VDEF # PITCH INTO 2 PD, ROLL INTO MPAC FROM 2 PD
RTB # VDEF MAKES V(MPAC) = ROLL, PITCH, YAW
V1STO2S
STORE FDAIX # MODE IS TP
EXIT
ENDBALL CA BALLEXIT
## Page 492
TC BANKJUMP
## Page 493
# PROGRAM DESCRIPTION - VECPOINT
#
# THIS INTERPRETIVE SUBROUTINE MAY BE USED TO POINT A SPACECRAFT AXIS IN A DESIRED DIRECTION. THE AXIS
# TO BE POINTED MUST APPEAR AS A HALF UNIT DOUBLE PRECISION VECTOR IN SUCCESSIVE LOCATIONS OF ERASABLE MEMORY
# BEGINNING WITH THE LOCATION CALLED SCAXIS. THE COMPONENTS OF THIS VECTOR ARE GIVEN IN SPACECRAFT COORDINATES.
# THE DIRECTION IN WHICH THIS AXIS IS TO BE POINTED MUST APPEAR AS A HALF UNIT DOUBLE PRECISION VECTOR IN
# SUCCESSIVE LOCATIONS OF ERASABLE MEMORY BEGINNING WITH THE ADDRESS CALLED POINTVSM. THE COMPONENTS OF THIS
# VECTOR ARE GIVEN IN STABLE MEMBER COORDINATES. WITH THIS INFORMATION VECPOINT COMPUTES A SET OF THREE GIMBAL
# ANGLES (2S COMPLEMENT) CORESPONDING TO THE CROSS-PRODUCT ROTATION BETWEEN SCAXIS AND POINTVSM AND STORES THEM
# IN T(MPAC) BEFORE RETURNING TO THE CALLER.
# THIS ROTATION, HOWEVER, MAY BRING THE S/C INTO GIMBAL LOCK. WHEN POINTING A VECTOR IN THE Y-Z PLANE,
# THE TRANSPONDER AXIS, OR THE AOT FOR THE LEM, THE PROGRAM WILL CORRECT THIS PROBLEM BY ROTATING THE CROSS-
# PRODUCT ATTITUDE ABOUT POINTVSM BY A FIXED AMOUNT SUFFICIENT TO ROTATE THE DESIRED S/C ATTITUDE OUT OF GIMBAL
# LOCK. IF THE AXIS TO BE POINTED IS MORE THAN 40.6 DEGREES BUT LESS THAN 60.5 DEG FROM THE +X (OR -X) AXIS,
# THE ADDITIONAL ROTATION TO AVOID GIMAL LOCK IS 35 DEGREES. IF THE AXIS IS MORE THAN 60.5 DEGEES FROM +X (OR -X)
# THE ADDITIONAL ROTATION IS 35 DEGREES. THE GIMBAL ANGLES CORRESPONDING TO THIS ATTITUDE ARE THEN COMPUTED AND
# STORED AS 2S COMPLIMENT ANGLES IN T(MPAC) BEFORE RETURNING TO THE CALLER.
# WHEN POINTING THE X-AXIS, OR THE THRUST VECTOR, OR ANY VECTOR WITHIN 40.6 DEG OF THE X-AXIS, VECPOINT
# CANNOT CORRECT FOR A CROSS-PRODUCT ROTATION INTO GIMBAL LOCK. IN THIS CASE A PLATFORM REALIGNMENT WOULD BE
# REQUIRED TO POINT THE VECTOR IN THE DESIRED DIRECTION. AT PRESENT NO INDICATION IS GIVEN FOR THIS SITUATION
# EXCEPT THAT THE FINAL MIDDLE GIMBAL ANGLE IN MPAC +2 IS GREATER THAN 59 DEGREES.
#
# CALLING SEQUENCE -
# 1) LOAD SCAXIS, POINTVSM
# 2) CALL
# VECPOINT
#
# RETURNS WITH
#
# 1) DESIRED OUTER GIMBAL ANGLE IN MPAC
# 2) DESIRED INNER GIMBAL ANGLE IN MPAC +1
# 3) DESIRED MIDDLE GIMBAL ANGLE IN MPAC +2
#
# ERASABLES USED -
#
# 1) SCAXIS 6
# 2) POINTVSM 6
# 3) MIS 18
# 4) DEL 18
# 5) COF 6
# 6) VECQTEMP 1
# 7) ALL OF VAC AREA 43
#
# TOTAL 99
SETLOC VECPT
BANK
## Page 494
COUNT* $$/VECPT
EBANK= BCDU
VECPOINT STQ BOV # SAVE RETURN ADDRESS
VECQTEMP
VECLEAR # AND CLEAR OVFIND
VECLEAR AXC,2 RTB
MIS # READ THE PRESENT CDU ANGLES AND
READCDUK # STORE THEM IN PD25, 26, 27
STCALL 25D
CDUTODCM # S/C AXES TO STABLE MEMBER AXES (MIS)
VLOAD VXM
POINTVSM # RESOLVE THE POINTING DIRECTION VF INTO
MIS # INITIAL S/C AXES (VF = POINTVSM)
UNIT
STORE 28D
# PD 28 29 30 31 32 33
VXV UNIT # TAKE THE CROSS PRODUCT VF X VI
SCAXIS # WHERE VI = SCAXIS
BOV VCOMP
PICKAXIS
STODL COF # CHECK MAGNITUDE
36D # OF CROSS PRODUCT
DSU BMN # VECTOR, IF LESS
DPB-14 # THAN B-14 ASSUME
PICKAXIS # UNIT OPERATION
VLOAD DOT # INVALID.
SCAXIS
28D
SL1 ARCCOS
COMPMATX CALL # NOW COMPUTE THE TRANSFORMATION FROM
DELCOMP # FINAL S/C AXES TO INITIAL S/C AXES MFI
AXC,1 AXC,2
MIS # COMPUTE THE TRANSFORMATION FROM FINAL
KEL # S/C AXES TO STABLE MEMBER AXES
CALL # MFS = MIS MFI
MXM3 # (IN PD LIST)
DLOAD ABS
6 # MFS6 = SIN(CPSI) $2
DSU BMN
SINGIMLC # = SIN(59 DEGS) $2
FINDGIMB # /CPSI/ LESS THAN 59 DEGS
# I.E. DESIRED ATTITUDE NOT IN GIMBAL LOCK
DLOAD ABS # CHECK TO SEE IF WE ARE POINTING
SCAXIS # THE THRUST AXIS
DSU BPL
SINVEC1 # SIN 49.4 DEGS $2
## Page 495
FINDGIMB # IF SO, WE ARE TRYING TO POINT IT INTO
VLOAD # GIMBAL LOCK, ABORT COULD GO HERE
STADR
STOVL MIS +12D
STADR # STORE MFS (IN PD LIST) IN MIS
STOVL MIS +6
STADR
STOVL MIS
MIS +6 # INNER GIMBAL AXIS IN FINAL S/C AXES
BPL VCOMP # LOCATE THE IG AXIS DIRECTION CLOSEST TO
IGSAMEX # FINAL X S/C AXIS
IGSAMEX VXV BMN # FIND THE SHORTEST WAY OF ROTATING THE
SCAXIS # S/C OUT OF GIMBAL LOCK BY A ROTATION
U=SCAXIS # ABOUT +- SCAXIS, I.E. IF (IG (SGN MFS3)
# X SCAXIS . XF) LESS THAN 0, U = SCAXIS
# OTHERWISE U = -SCAXIS
VLOAD VCOMP
SCAXIS
STCALL COF # ROTATE ABOUT -SCAXIS
CHEKAXIS
U=SCAXIS VLOAD
SCAXIS
STORE COF # ROTATE ABOUT + SCAXIS
CHEKAXIS DLOAD ABS
SCAXIS # SEE IF WE ARE POINTING THE AOT
DSU BPL
SINVEC2 # SIN 29.5 DEGS $2
PICKANG1 # IF SO, ROTATE 50 DEGS ABOUT +- SCAXIS
DLOAD GOTO # IF NOT, MUST BE POINTING THE TRANSPONDER
VECANG2 # OR SOME VECTOR IN THE Y, OR Z PLANE
COMPMFSN # IN THIS CASE ROTATE 35 DEGS TO GET OUT
# OF GIMBAL LOCK (VECANG2 $360)
PICKANG1 DLOAD
VECANG1 # = 50 DEGS $360
COMPMFSN CALL
DELCOMP # COMPUTE THE ROTATION ABOUT SCAXIS TO
AXC,1 AXC,2 # BRING MFS OUT OF GIMBAL LOCK
MIS
KEL
CALL # COMPUTE THE NEW TRANSFORMATION FROM
MXM3 # DESIRED S/C AXES TO STABLE MEMBER AXES
# WHICH WILL ALIGN VI WITH VF AND AVOID
# GIMBAL LOCK
FINDGIMB AXC,1 CALL
0 # EXTRACT THE COMMANDED CDU ANGLES FROM
DCMTOCDU # THIS MATRIX
RTB SETPD
V1STO2S # CONVERT TO 2:S COMPLEMENT
## Page 496
0
GOTO
VECQTEMP # RETURN TO CALLER
PICKAXIS VLOAD DOT # IF VF X VI = 0, FIND VF . VI
28D
SCAXIS
BMN TLOAD
ROT180
25D
GOTO # IF VF = VI, CDU DESIRED = PRESENT CDU
VECQTEMP # PRESENT CDU ANGLES
BANK 35
SETLOC MANUVER1
BANK
ROT180 VLOAD VXV # IF VF, VI ANTIPARALLEL, 108 DEG ROTATION
MIS +6 # IS REQUIRED. Y STABLE MEMBER AXIS IN
HIDPHALF # INITIAL S/C AXES.
UNIT VXV # FIND Y(SM) X X(I)
SCAXIS # FIND UNIT(VI X UNIT(Y(SM) X X(I)))
UNIT BOV # I.E. PICK A VECTOR IN THE PLANE OF X(I),
PICKX # Y(SM) PERPENDICULAR TO VI
STODL COF
36D # CHECK MAGNITUDE
DSU BMN # OF THIS VECTOR.
DPB-14 # IF LESS THAN B-14,
PICKX # PICK X-AXIS.
VLOAD
COF
XROT STODL COF
HIDPHALF
GOTO
COMPMATX
PICKX VLOAD GOTO # PICK THE XAXIS IN THIS CASE
HIDPHALF
XROT
SINGIMLC 2DEC .4285836003 # = SIN(59) $2
SINVEC1 2DEC .3796356537 # = SIN(49.4) $2
SINVEC2 2DEC .2462117800 # = SIN(29.5) $2
VECANG1 2DEC .1388888889 # = 50 DEGREES $360
VECANG2 2DEC .09722222222 # = 35 DEGREES $360
1BITDP OCT 0 # KEEP THIS BEFORE DPB(-14) *********
DPB-14 OCT 00001
OCT 00000
## Page 497
# ROUTINE FOR INITIATING AUTOMATIC MANEUVER VIA KEYBOARD (V49)
BANK 34
SETLOC R62
BANK
EBANK= BCDU
COUNT* $$/R62
R62DISP EQUALS R62FLASH
R62FLASH CAF V06N22 # FLASH V06N22 AND
TC BANKCALL # ICDU ANGLES
CADR GOFLASH
TCF ENDEXT # TERMINATE
TCF GOMOVE # PROCEED
TCF R62FLASH # ENTER
# ASTRONAUT MAY LOAD NEW ICDUS AT THIS
# POINT
GOMOVE TC UPFLAG # SET FOR 3-AXIS MANEUVER
ADRES 3AXISFLG
TC BANKCALL
CADR R60LEM
TCF ENDEXT # END R62
Computing file changes ...