forked from chrislgarry/Apollo-11
-
Notifications
You must be signed in to change notification settings - Fork 3
/
DAPIDLER_PROGRAM.s
481 lines (428 loc) · 12.7 KB
/
DAPIDLER_PROGRAM.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
# Copyright: Public domain.
# Filename: DAPIDLER_PROGRAM.agc
# Purpose: Part of the source code for Luminary 1A build 099.
# It is part of the source code for the Lunar Module's (LM)
# Apollo Guidance Computer (AGC), for Apollo 11.
# Assembler: yaYUL
# Contact: Ron Burkey <[email protected]>.
# Website: www.ibiblio.org/apollo.
# Pages: 1410-1420
# Mod history: 2009-05-10 SN (Sergio Navarro). Started adapting
# from the Luminary131/ file of the same
# name, using Luminary099 page images.
#
# This source code has been transcribed or otherwise adapted from
# digitized images of a hardcopy from the MIT Museum. The digitization
# was performed by Paul Fjeld, and arranged for by Deborah Douglas of
# the Museum. Many thanks to both. The images (with suitable reduction
# in storage size and consequent reduction in image quality as well) are
# available online at www.ibiblio.org/apollo. If for some reason you
# find that the images are illegible, contact me at [email protected]
# about getting access to the (much) higher-quality images which Paul
# actually created.
#
# Notations on the hardcopy document read, in part:
#
# Assemble revision 001 of AGC program LMY99 by NASA 2021112-61
# 16:27 JULY 14, 1969
# Page 1410
# THE DAPIDLER PROGRAM IS STARTED BY FRESH START AND RESTART. THE DAPIDLER PROGRAM IS DONE 10 TIMES
# PER SECOND UNTIL THE ASTRONAUT DESIRES THE DAP TO WAKE UP, AND THE IMU AND CDUS ARE READY FOR USE BY THE DAP.
# THE NECESSARY INITIALIZATION OF THE DAP IS DONE BY THE DAPIDLER PROGRAM.
BANK 16
SETLOC DAPS1
BANK
EBANK= AOSQ
COUNT* $$/DAPID
CHEKBITS EXTEND
READ CHAN31 # IF BOTH BIT13 AND BIT14 ARE ONE, THEN
COM # THE MODE SELECT SWITCH IS IN THE OFF
MASK BIT13-14 # POSITION, AND SO THE DAP SHOULD BE OFF,
EXTEND # WITH NO ATTITUDE ERROR DISPLAY.
BZF MOREIDLE
CS IMODES33
MASK BIT6
CCS A
TCF JUMPDSP
CS RCSFLAGS # IMU NOT USABLE. SET UP INITIALIZATION
MASK BIT3 # FLAG FOR ATT ERROR DISPLAY ROUTINE.
ADS RCSFLAGS
TCF SHUTDOWN
CHEKMORE CAF BIT10 # BIT 10 OF 30 IS PGNCS CONTROL OF S/C
EXTEND
RAND CHAN30 # BITS IN 30 ARE INVERTED
CCS A
TCF MOREIDLE
RETURN
# Page 1411
# DAPIDLER ENTRY.
DAPIDLER LXCH BANKRUPT # INTERRUPT LEAD INS (CONTINUED)
EXTEND
QXCH QRUPT
CA RCSFLAGS
MASK BIT13
CCS A # CHECK IF 1/ACCJOB HAS BEEN SET UP SINCE
TCF CHECKUP # THE LAST FRESH START OR RESTART.
CA BIT13
ADS RCSFLAGS # BIT 13 IS 1.
CAF PRIO27
TC NOVAC # SET UP JOB TO DO A LITTLE INITIALIZATION
EBANK= AOSQ # AND EXECUTE 1/ACCS.
2CADR 1/ACCSET # (WILL BRANCH TO MOREIDLE ON ACCSOKAY)
CHECKUP TC CHEKBITS # CHECK TO SEE IF LM DAP IS TO GO ON AND
# DO ERROR DISPLAY.
CAE DAPBOOLS # IF 1/ACCS HAS NOT BEEN COMPLETED, IDLE.
MASK ACCSOKAY # NOTE: ONLY FRESH START AND RESTART
EXTEND # KNOCK THIS BIT DOWN.
BZF MOREIDLE
STARTDAP TC IBNKCALL # ZERO ATTITUDE ERROR AND DESIRED RATES.
FCADR ZATTEROR
CAF ZERO # ************ INITIALIZE: *************
TS TJP
TS TJU
TS TJV
TS OMEGAP # RATES IN BODY (PILOT) COORDINATES.
TS OMEGAQ
TS OMEGAR
TS TRAPEDP
TS TRAPEDQ
TS TRAPEDR
TS AOSQ # OFFSET ACCELERATION ESTIMATES.
TS AOSQ +1
TS AOSR
TS AOSR +1
TS ALPHAQ # COPIES OF OFFSET ESTIMATES FOR DOWNLIST.
TS ALPHAR
TS NEGUQ
TS NEGUR
TS AOSQTERM # QRAXIS RATE DERIVATION TERMS AND KALMAN
TS AOSRTERM # FILTER INITIALIZATION TERMS.
TS QACCDOT # DESCENT ACCELERATION DERIVATIVE EST.
TS RACCDOT
# Page 1412
TS ALLOWGTS # AOSTASK FLAG FOR QRAXIS RCS CONTROL USE.
TS COTROLER # DO TRYGTS ON FIRST PASS (WILL GO TO RCS)
TS INGTS # RECOGNIZE FIRST GTS PASS AS SUCH.
TS QGIMTIMR # STOP GIMBAL DRIVES. (PROBABLY WOULD BE
TS RGIMTIMR # GOOD ENOUGH JUST TO INACTIVATE TIMERS)
TS OLDPMIN # MINIMUM IMPULSE MODE ERASABLES
TS OLDQRMIN
TS PJETCTR # INITIALIZE DOCKED JET INHIBITION
TS UJETCTR # COUNTERS
TS VJETCTR
CALLGMBL EQUALS BIT5 # RCSFLAGS INITIALIZATION.
CS MANFLAG
MASK RCSFLAGS # NEGUQ(R) HAVE BEEN GENERATED.
TS RCSFLAGS
# SET UP "OLD" MEASURED CDU ANGLES:
EXTEND
DCA CDUX # OLDXFORP AND OLDYFORP
DXCH OLDXFORP
CA CDUZ
TS OLDZFORQ
CS RCSFLAGS
MASK BIT12
ADS RCSFLAGS # BIT 12 SET TO 1.
CA FOUR
TS SKIPU
TS SKIPV
CA POSMAX
TS TIME6
TS T6NEXT
TS T6FURTHA
CA ZERO
TS T6NEXT +1
TS T6FURTHA +1
TS NXT6ADR
TS NEXTP
TS NEXTU
TS NEXTV
CS TEN
TS DAPZRUPT # JASK NOT IN PROGRESS, INITIALIZE NEG.
CA TWO
TS NPTRAPS
TS NQTRAPS
TS NRTRAPS
EXTEND
DCA PAXADIDL
DXCH T5ADR
SETTIME5 CAF MS100
TS TIME5
# Page 1413
TCF RESUME
EBANK= AOSQ
IDLERADR 2CADR DAPIDLER
MOREIDLE TC IBNKCALL # CALCULATE Q,R-AXES ATTITUDE ERRORS.
CADR QERRCALC
TC IBNKCALL
CADR CALCPERR # CALCULATE P AXIS ATTITUDE ERRORS.
SHUTDOWN EXTEND
DCA IDLERADR
DXCH T5ADR
CAF ZERO # KILL ANY POSSIBLE JET REQUESTS
TS NEXTP
TS NEXTU
TS NEXTV
EXTEND # COMMAND JETS OFF.
WRITE CHAN5
EXTEND
WRITE CHAN6
CS BGIM23 # TURN TRIM GIMBAL OFF
EXTEND
WAND CHAN12
TCF SETTIME5 # RETURN IN 100 MSEC.
MANFLAG OCT 03021
BGIM23 OCTAL 07400
EBANK= OMEGAP
PAXADIDL 2CADR PAXIS
MS100 = OCT37766
COSMG = ITEMP1
JUMPDSP EXTEND # TRANSFER TO BANK 20
DCA DSPCADR # FOR ATTITUDE ERROR DISPLAYS
DTCB
EBANK= AK
DSPCADR 2CADR ALTDSPLY
# Page 1414
BANK 20
SETLOC DAPS3
BANK
COUNT* $$/NEEDL
# PROGRAM: ALTDSPLY
# MOD 0. 6 DEC 1967
# AUTHOR: CRAIG WORK, DON KEENE, MIT IL
# MOD 3 BY DON KEENE AUG 1, 1968 -- MOVED PROGRAM TO BANK 20
#
# PROGRAM DESCRIPTION:
# ALTDSPLY REVERSES THE DSPLYALT BIT OF RCSFLAGS EACH TIME IT IS CALLED, WHICH IS PRESUMABLY EVERY 100 MS.
# IF THE REVERSED BIT IS ONE, NEEDLER IS CALLED TO DISPLAY ATTITUDE ERRORS. IF THE BIT IS ZERO, THE ATTITUDE ERR-
# ORS ARE CALCULATED AS 1) DAP FOLLOWING ERRORS, IF NEEDLFLG = 0, AND 2) TOTAL ATTITUDE ERRORS FOR NEEDLFLG = 1.
#
#
# WARNING: ALTDSPLY MAY ONLY BE CALLED WITH INTERRUPT INHIBITED
#
# WARNING: EBANK MUST BE SET TO 6 WHEN USING THIS ROUTINE.
#
# INPUT: RCSFLAGS AND 1) IF NEEDLFLG = 0, INPUT PERROR, QERROR, RERROR.
# 2) IF NEEDLFLG = 1, INPUT CPHI,CTHETA,CPSI,CDUX,CDUY,CDUZ,M11,M21,M32,M22,M32. (GPMATRIX)
#
#
# OUTPUTS: RCSFLAGS WITH DSPLYALT REVERSED, AK, AK1, AK2, + NEEDLER OUTPUTS.
#
# ENTRY: TCF ALTDSPLY
#
# EXIT: TCF CHEKMORE
#
# ALARM OR ABORT EXITS: NONE
#
# SUBPROGRAMS CALLED: NEEDLER, OVERSUB2
#
# DEBRIS: A, L, AND NEEDLER DEBRIS.
ALTDSPLY CA RCSFLAGS # INVERT THE DISPLAY ALTERNATION BIT.
TS L
CA DSPLYALT
EXTEND
RXOR LCHAN
TS RCSFLAGS
MASK DSPLYALT
CCS A # IS ALTERNATION FLAG ZERO?
TCF NEEDLER
CAE FLAGWRD0 # NEEDLFLG WILL INDICATE TOTAL OR DAP AT-
# Page 1415
MASK NEEDLBIT # TITUDE ERROR DISPLAY REQUEST.
CCS A
TCF DSPLYTOT # TOTAL ERROR IS NEEDED IN AK, AK +1, AK +2
CS QERROR # YES. DISPLAY ATT ERRORS ON THE -BALL.
TS AK +1 # ERROR COMPLEMENTS ARE INPUT TO NEEDLER.
CS RERROR
TS AK +2
CS PERROR
XCH AK
TCF RETNMORE # DISPLAY THESE THE NEXT TIME THROUGH
# CALCULATE GIMBAL ANGLE TOTAL ERRORS, RESOLVE INTO PILOT AXES, STORE TOTAL ERRORS FOR NEEDLER. Q-AXIS FIRST.
DSPLYTOT EXTEND
QXCH ITEMP1 # SAVE Q FOR CHEKBITS RETURN.
CA CTHETA # DESIRED ATTITUDE, Y-AXIS, 2'S COMP.
EXTEND # SUBTRACT CURRENT ATTITUDE.
MSU CDUY # DIFFERENCE SCALED AT PI, 1'S COMP.
TS AK # SAVE FOR R-ERROR CALCULATION.
EXTEND
MP M21 # (CTHETA-CDUY)*M21 SCALED AT PI RADIANS.
XCH AK +1 # STORE FIRST TERM OF Q ERROR.
CA CPSI # DESIRED ATTITUDE, Z-AXIS, 2'S COMP.
EXTEND # SUBTRACT CURRENT ATTITUDE.
MSU CDUZ # DIFFERENCE SCALED AT PI, 1'S COMP.
TS AK +2 # SAVE Z-AXIS TERM FOR R ERROR CALCULATION
EXTEND
MP M22 # (CPSI-CDUZ)*M22, SCALED AT PI RADIANS.
AD AK +1 # Q ERROR COMPLETE , AT PI RAD.
TC OVERSUB2 # PIN NEEDLES IN CASE OF OVERFLOW
TS AK +1
# R ERROR CALCULATION NEXT.
CA AK # Y-AXIS DIFFERENCE STORED BY Q-AXIS CALC.
EXTEND
MP M31 # (CTHETA-CDUY)*M31, SCALED AT PI RADIANS.
XCH AK +2 # FIRST TERM OF R ERROR.
# Z-AXIS DIFFERENCE, STORED BY A CALC. IS
EXTEND # RECOVERED BY THE EXCHANGE.
MP M32 # (CPSI-CDUZ)*M32, SCALED AT PI RADIANS.
AD AK +2 # R ERROR COMPLETE , AT PI RAD.
TC OVERSUB2 # PIN NEEDLES IN CASE OF OVERFLOW.
TS AK +2
# NOW CALCULATE P ERROR. (NOTE THAT M13 = 1, SCALED AT 1, SO THE MULTIPLICATION IS BY-PASSED.)
# Page 1416
CA AK # Y-AXIS DIFFERENCE STORED BY Q AXIS CALC.
EXTEND
MP M11 # (CTHETA-CDUY)*M11 SCALED AT PI RADIANS.
XCH AK # FIRST TERM OF P ERROR IN AK, AT PI RAD.
CAE CPHI # DESIRED ATTITUDE, X-AXIS, 2'S COMP.
EXTEND # SUBTRACT CURRENT X ATTITUDE.
MSU CDUX # X-AXIS DIFFERENCE, 1'S COMP, AT PI RAD.
# M13 = 1, SO BYPASS THE MULTIPLICATION.
# EXTEND
# MP M13 # (CPHI-CDUX)*M13 SCALED AT PI RADIANS.
AD AK # P ERROR COMPLETE , SCALED AT PI RAD
TC OVERSUB2 # PIN NEEDLES IN CASE OF OVERFLOW.
TS AK
EXTEND
QXCH ITEMP1 # RESTORE Q FOR CHEKBITS RETURN.
TCF RETNMORE # DISPLAY THESE THE NEXT TIME THROUGH
# Page 1417
# FDAI ATTITUDE ERROR DISPLAY SUBROUTINE
#
# PROGRAM DESCRIPTION: D. KEENE 5/24/67
# MOD 1 BY CRAIG WORK, 12 DEC 67
# MOD 2 BY CRAIG WORK, 6 APRIL 68, CONVERTS ATTITUDE ERROR DISPLAY SCALING FROM 16 7/8 DEG. TO 42 3/16 DEGREES.
#
# THIS SUBROUTINE IS USED TO DISPLAY ATTITUDE ERRORS ON THE FDAI VIA THE DIGITAL TO ANALOG CONVERTERS (DACS)
# IN THE CDUS. CARE IS TAKEN TO METER OUT THE APPROPRIATE NUMBER OF PULSES TO THE IMU ERROR COUNTERS AND PREVENT
# OVERFLOW, TO CONTROL THE RELAY SEQUENCING, AND TO AVOID INTERFERENCE WITH THE COARSE ALIGN LOOP WHICH ALSO USES
# THE DACS.
#
# CALLING SEQUENCE:
# DURING THE INITIALIZATION SECTION OF THE USER'S PROGRAM, BIT3 OF RCSFLAGS SHOULD BE SET TO INITIATE THE
# TURN-ON SEQUENCE WITHIN THE NEEDLES PROGRAM:
# CS RCSFLAGS # IN EBANK6
# MASK BIT3
# ADS RCSFLAGS
# THEREAFTER, THE ATTITUDE ERRORS GENERATED BY THE USER SHOULD BE TRANSFERRED TO THE FOLLOWING LOCATIONS IN EBANK6:
# AK SCALED 180 DEGREES NOTE: THESE LOCATIONS ARE SUBJECT
# AK1 SCALED 180 DEGREES TO CHANGE
# AK2 SCALED 180 DEGREES
# FULL SCALED DEFLECTION OF THE NEEDLES CORRESPONDS TO 5 1/16 DEGREES, WHILE 384 BITS IN THE IMU ERROR COUNTER
# CORRESPONDS TO 42 3/16 DEGREES. (DAC MAXIMUM CAPACITY IS 384 BITS.) 46 BITS EFFECTIVELY PIN THE NEEDLES.
#
# A CALL TO NEEDLER WILL THE UPDATE THE DISPLAY:
# INHINT
# TC IBNKCALL # NOTE: EBANK SHOULD BE SET TO E6
# CADR NEEDLER
# RELINT
# THIS PROCESS SHOULD BE REPEATED EACH TIME THE ERRORS ARE UPDATED. AT LEAST 3 PASSES THRU THE PROGRAM ARE
# REQUIRED BEFORE ANYTHING IS ACTUALLY DISPLAYED ON THE ERROR METERS.
# NOTE: EACH CALL TO NEEDLER MUST BE SEPARATED BY AT LEAST 50 MS. TO ASSURE PROPER RELAY SEQUENCING.
#
# ERASABLES USED:
# AK CDUXCMD
# AK1 CDUYCMD
# AK2 CDUZCMD
# EDRIVEX A,L,Q
# EDRIVEY T5TEMP
# EDRIVEZ DINDX
# Page 1418
#
# SWITCHES: RCSFLAGS BITS 3,2
#
# I/O CHANNELS: CHAN12 BIT 4 (COARSE ALIGN -- READ ONLY)
# CHAN12 BIT 6 (IMU ERROR COUNTER ENABLE)
# CHAN14 BIT 13,14,15 (DAC ACTIVITY)
#
# SIGN CONVENTION: AK = THETAC - THETA
# WHERE THETAC = COMMAND ANGLE
# THETA = PRESENT ANGLE
NEEDLER CA RCSFLAGS
MASK SIX
EXTEND
BZF NEEDLES3
MASK BIT3
EXTEND
BZF NEEDLER2 # BIT3 = 0, BIT2 = 1
CS BIT6 # FIRST PASS BIT3 = 1
EXTEND # DISABLE IMU ERROR COUNTER TO ZERO DACS
WAND CHAN12 # MUST WAIT AT LEAST 60 MS BEFORE
NEEDLE11 CS ZERO # ENABLING COUNTERS.
TS AK # ZERO THE INPUTS ON FIRST PASS
TS AK1
TS AK2
TS EDRIVEX # ZERO THE DISPLAY REGISTERS
TS EDRIVEY
TS EDRIVEZ
TS CDUXCMD # ZERO THE OUT COUNTERS
TS CDUYCMD
TS CDUZCMD
CS SIX # RESET RCSFLAGS FOR PASS2
MASK RCSFLAGS
AD BIT2
TS RCSFLAGS
TCF RETNMORE
NEEDLER2 CAF BIT6 # ENABLE IMU ERROR COUNTERS
EXTEND
WOR CHAN12
CS SIX # RESET RCSFLAGS TO DISPLAY ATTITUDE
MASK RCSFLAGS # ERRORS. WAIT AT LEAST 4 MS FOR
TS RCSFLAGS # RELAY CLOSURE.
TCF RETNMORE
NEEDLES3 CAF BIT6 # CHECK TO SEE IF IMU ERROR COUNTER
EXTEND # IS ENABLED
RAND CHAN12
# Page 1419
CCS A # IF NOT, RE-INITIALIZE NEEDLER.
TCF NEEDLES
CS RCSFLAGS # SET UP INITIALIZATION FLAG IN RCSFLAGS.
MASK BIT3
ADS RCSFLAGS
TCF RETNMORE
NEEDLES CAF TWO
DACLOOP TS DINDX
CS ONETENTH # RESCALE INPUTS TO + OR - 1800 DEGREES.
EXTEND
INDEX DINDX
MP AK
TS L
CCS A
CA DACLIMIT
TCF +2
CS DACLIMIT
AD L
TS T5TEMP # OVFLO CHK
TCF +4
INDEX A # ON OVERFLOW LIMIT OUTPUT TO +-384
CAF DACLIMIT
TS L
INDEX DINDX
CS EDRIVEX # CURRENT VALUE OF DAC
AD L
INDEX DINDX
ADS CDUXCMD
INDEX DINDX
LXCH EDRIVEX
CCS DINDX
TCF DACLOOP
CAF 13,14,15
EXTEND
WOR CHAN14 # SET DAC ACTIVITY BITS
TCF RETNMORE
DEC -384
DACLIMIT DEC 16000
DEC 384
ONETENTH OCT 03146 # DECIMAL +0.1, SCALED AT 1.
DSPLYALT EQUALS BIT4 # 100 MS ALTERNATION BIT IN RCSFLAGS
OVERSUB2 TS 7 # RETURNS A UNCHANGED OR LIMITED TO
TC Q # POSMAX OR NEGMAX IF A HAS OVERFLOW
INDEX A
# Page 1420
CS LIMITS # DUPLICATE CODING IN BANK 16
TC Q
RETNMORE EXTEND # RETURN TO CHEKMORE
DCA MORECADR
DTCB
EBANK= AOSQ
MORECADR 2CADR CHEKMORE