Apollo Comms Part 34: Trying every function of the Apollo command system
Greeting Earthlings. If you follow the channel, you know that we are resurrecting the Apollo communications system, with original spacecraft and NASA ground equipment. In the previous episode, we finally were able to transmit a command from our original NASA Up-Data Link test system, or UDL for short, over to the spacecraft, and decoded it all the way through the complicated chain of original electronic boxes that were in the spacecraft: the transponder, the premodulation processor, the central timing equipment, and the Up-data Link decoder.
And that felt like a major achievement. However, the result was admittedly somewhat underwhelming: we made a multimeter beep on the space side of the link. [Marc] All right, that's first command 4601, that's abort relay one. Send... Oh, works!
[Eric] Works! [Marc] All right, we got it. So that was it. [Eric] Right there! [Marc] So, in this episode, we’ll give the Up-Data Link the grand workout and demonstration it deserves, sending commands to flip relays and lights, take control of the Central Timing Equipment, and the exercise the most powerful capability of them all, controlling of the Apollo Guidance Computer remotely via its DSKY. In essence, we’ll show you how you could have hacked the spacecraft, if you had been so enclined and well-equipped in 1969. I’m sure NASA will be glad that we only figured this out 55 years too late... [Marc] So, we were looking at something fun that we could connect our relays to. And a panel of lights would be a good thing.
So, the idea is to light up one of the lights that were controlled by the UDL in the actual missions. There are two that I am aware of, the abort request light, and the Crew Alert light. Apollo Crew Alert and Abort Lights (with elevator music) The Crew Alert light was on the main Caution and Warning panel. In this diagram, you can verify that it is directly wired into the relay K2 of the UDL. Interestingly enough, the Crew Alert light was only controllable by the ground. It also could only be reset by the ground, and not by the astronauts.
The other light controlled by the ground via the UDL, is the abort light. It was on subpanel 1B, right in front of the commander, where the emergency manual controls for boost, entry and abort are also located. Looking at its wiring in the schematics, you can see that the light is wired both to the Abort A relay and the Abort B relay in the UDL. The only difference is that the Abort B relay is resettable by the crew, while the Abort A relay is resettable only by the ground. You can actually double check that in the UDL schematics. Here is the Abort A S-K1 relay,
and it can be reset from the ground via this wire. But it has no reset connection to the front panel. The Abort B relay does have such a connection, called reset override, leading to the Up Telemetry Command Reset button, and is pointed out in this side note that says “crew cannot reset K-1 to K-5 relays”. Which are these relays over here. The side legend tells us what they do. We already know that the Abort A and the Crew Alert lights cannot be reset by the crew. The ACE refers to the Automated Checkout Equipment. The ACE was used to talk to the Apollo Guidance Computer while on the
ground. As we’ll see later, there was a separate wire path for transmitting ones and zeroes, so apparently you can block either of these. TRDC stands for the Tape Recorder Data Conditioner. This is one is even more arcane. The TRDC was an electronic box in charge of retiming the
data bits as they were replayed by the onboard tape data recorder, to straighten them out before transmission. Today it would be called a clock and data recovery circuit. Apparently, the ground could bypass that box and send the raw un-retimed bits if the TRDC were to malfunction. There you go, you know everything. All right, we rat-holed again, back to our abort light. The spacecraft operations manual tells me that the abort light was used by the ground to request a manual abort, but only as a backup to voice communications. The
commander would then have to initiate the abort by rotating his translation controller handle. This is indeed confirmed by the wiring, which does nothing else than turn on the light. The actual abort signal was generated manually by the handle rotation. There were of course automatic and triple redundant abort circuits that needed no astronaut intervention, but for relatively few conditions. They are detailed here:
too much pitch or yaw rates, too much roll rates, or not enough thrust. That’s it for the auto abort. For all the rest, the ground would turn on the light via the UDL, as we are about to reenact here, and the astronauts would have to react to it.
We’d love to have a real Apollo caution and warning panel to light up, but we have the next best thing: a period correct warped panel of roto-tellites, from Marcel’s collection of course. These indicators were used all over the place in Apollo control rooms. The panel arrived way more banged up than the auction pictures suggested, so while Mike and Eric are wiring up the UDL, I need to do a little unbending.
[Marc] This one was just bent so much, I had to take out the rods and the rods were bent at 30° in there. This is the last one, it's pretty good. And this one. All right.
Gee, hook how mangled that thing is. We just do it by eye. All right. Tada! Okay, so, this is why these are called Roto-Tellites. You rotate them, and then you can change the bulbs from the back, which is now the front. So, no need to dismantle the thing. So, everyone has left, and I still haven't finished my panel. At least,
it's back together. There are some cables that are mangled, deep inside here. Fortunately I have the extraction tool, which sometimes works. There we go. Oh, yeah, I see the problem! It is attached, but it's been partially cut. Okay. So that explains it. It's probably part of the big accident that bent the whole thing. All right, so let's see... So, this should be one. And then two, three. It kind of makes sense.
We can hook it up to the updata link, and see if we can light some. [Marc] Hey guys, you have wired up a few more things? [Mike] We have, yeah. We've got a big light panel that used to be round, and is now flat. [Marc] Oh, this one, yes.
We're going to turn relays... [Mike] Yep, so we'll flip the relay... [Marc] ...lights through the relays... [Mike] ...turn on the lights.
[Eric] We've only got two of them connected, but you should still be able to see. [Marc] (laughter) I've been trying to motivate Mike... [Eric] It's a lot of wiring! [Marc] ...and Eric to wire the 72 lights,
but I had no success. The connectors are so impossible. They are so dense. Anyhow it's, a lot of work for little reward. And I've been busy making tapes that could potentially turn those on. So I'm going to try that. So now, the question is, what is the correct binary command to turn our lights on and off. We now have two lights, one connected to the Abort A and one to the Abort B relay. I sort of messed up, I wanted Abort A and Crew Alert, but I did not give Mike and Eric the correct relays. Anyhow, it will allow us to demonstrate the difference between Abort A and B.
The relays in the UDL are of the fancy latching kind. You can spy them at the bottom of the UDL. It’s the kind that remembers its state, so there are two coils per relay, a set coil, and a reset coil. The coils are actuated by the logic block below them. Fortunately, there is a table on the side that summarizes how it’s encoded. The first three bits are the vehicle address. You could wire up your UDL to respond to
one of 8 different vehicle addresses. The command module was assigned to address 4, and that’s how we configured our UDL in the previous episodes. The next 3 bits are the system address. The system that flips the relays is called the RTC system,
and uses system addresses 5 and 6. RTC by the way, stands for Real Time Command, and when you overhear the Houston controllers referring to sending RTC commands, it means they are sending commands to flip relays via the UDL. Other systems addresses were used for test commands, controlling the AGC, and setting the central timing equipment. We’ll exercise them later on. So, back to RTC commands. On system address 6, bits 7 to 12 indicate which relay coil will be
activated. These 6 bits form a two digit octal number, which happens to be the number drawn on the relay coils. In our case, we need to tickle coils 00, 01, 06 and 07. You can see that there are no coil numbers with a digit 8 or 9, this is indeed an octal numbering system. There are an additional 4 codes for the system at address 5, called the Salvo Reset codes. These reset a whole bunch of relays at once.
Here is the list of all the relay coil numbers next to their function, essentially this is the Real Time Command cheat sheet, an Apollo hackers’ dream. It also sheds more light on what the Salvo Reset commands do. The first salvo code gets you back to a normal flight condition (no alarms, TRDC in normal mode, ranging off, reset the PCM telemetry settings), and the second one resets the communication system.
For our first demo, our commands are therefore going to be: Turn on Abort A is 4601 (as in vehicle 4, system 6, coil 01) Turn off Abort A is 4600 (which is the same, for coil 00) Turn on Abort B is 4607, and Turn off Abort B is 4606. But we are not quite done yet, we need to punch a command tape for our clunky UDL transmitter. And it is not as simple as punching the command numbers in, oh no. The UDL tape reader does not use the ASCII encoding that every one else used to punch their 8-bit tapes. Instead, it uses another code that Master Ken cracked many episodes ago, and has some embedded error checking features. Here is the reversed engineered list from my
notebook. For a 0, you have to type in an 8, a 1 is actually a 1 by pure accident, a 2 is a star, and so on and so forth. Many are special control characters. To add insult to injury, they also hijacked character bit 7 and parity bit 8 as special tape control bits. Plus you need to add a three digit command number preamble, which will be read and indicated to the left of the current command, but not transmitted.
And then you need a leader and sync command to start. So, making tapes quickly gets complicated. I ended up with an incomprehensible file of mostly special characters, which I then sent via serial to my ASR-33 Teletype, which we repaired some years ago - I knew it would come in handy one day. And finally, out comes a punched command tape, which I eventually got right. Okay, done. Hopefully this is a good one, we made a few bad ones. Let's try to see if that works. Okay. 0 0 0, got the start. All right, that's first command, 4601. That's Abort Relay 1.
4600 clears it. Relay one again. Clears it. 4607, that's Abort Relay 2.
4606, that's clearing that relay. Try again. Yeah, we got it! Let's try that.
Can you put the receive on "up". (transmitted data sounds) Okay, I'm sending stuff, that's good. [Mike] We're seeing it on the scope. [Marc] Okay, so turn it back to normal. Now I'll... (tape noises) That should have turned it... Oh no, not yet! I haven't turned the relay on yet.
If I do this, I will. No. No cigar? [Eric] Are we looking at the data valid? [Marc] Okay, well, let's keep going on. No? Neither? That should be the second relay. Am I selecting the right thing at least? Did you hear a relay click at all? [Eric] No.
[Marc] Do I have the bits the right polarity. Yeah, we did. Should I try... You know, I could try my older tape, where it worked, right? Let me try another tape. Okay, zero.
Anything? Oh, sorry... [Eric] I heard a click. [Marc] You heard a click? [Eric] I heard a click.
[Marc] Okay, there should hear another click here. You hear another click? [Mike] Yeah! [Eric] It's definitely clicking. [Marc] It's clicking. It's clicking, but our lights are not indicating. Oh, did I give you the wrong pinout? [Eric] Yeah maybe that's it. [Marc] Yep, that's what what I did. I gave Eric the wrong panel pins. So let's try this again, with feeling, and the correct panel wiring.
[Marc] ... with feeling. So, that should be Abort 1. I'm going to tape stop it, and give you the command. See if it clicks. It did! All right! Then I keep going. And that's going to be Clear Abort 1.
Sending it. [Mike] Yeah. [Marc] All right. We have command of our spacecraft. And then, that should turn the other one on. That's Abort 2. [Eric] That's Abort 1. [Marc] Oh, I have twice Abort 1? [Mike] Yeah.
[Marc] Yeah, I do have twice Abort 1. [Mike] Hey! [Eric] There is Abort 2! [Marc] Okay. Okay! (laughter) [Eric] Can you turn on Abort 2 again? [Marc] You want to do what? [Eric] The Command Reset switch. [Marc] Oh! [Mike] We can turn off Abort 2, but not Abort 1.
[Eric] That's correct! [Marc] Abort 2. [Eric] Yep. [Marc] You tell me, you can reset that one? [Eric] From the switch here, Command Reset. [Marc] It works! [Eric] It reset the relay! [Marc] Yeah! And Abort 1 you cannot reset it, for some reason.
And, if we had the patience, we could wire more lights. But instead, since we don't have the patience, we wired the CTE. Where's CTE? Over there. And that's this guy, over here, the one that gives us the time in the mission. And, supposedly, we're supposed to remote control it. So I've
made a tape for that, we'll see if that works. Before we leave the subject of RTC commands, let’s briefly scan the ones we’ve not already talked about. You’ll quickly discover that they all have to do with controlling the data communication system: turning the transmitter power amplifier on, resetting the antenna configuration, turning ranging and telemetry on, switching the telemetry bit rate, and controlling the tape data recorder. These were implemented as shadow switches to the astronaut’s
manual switches on the control panel. The ground controlled relays always have precedence over the command panel switch positions, unless you flip up the magic Command Reset button that we just demonstrated, which would give back control to the panel, by virtue of resetting the relays. In practice, the astronauts were rarely bothered with setting ranging, telemetry, and data bit rates manually, nor did they have to manage the tape recorder voice and data dumps. This was done from the ground via RTCs, lightening the workload.
However, if you had to, you could flip the Up Telemetry switch, the same that we just flipped up to reset the relays, to the down ”Off” position instead. That would shut out the ground commands entirely - in case you were worried that the Soviet equivalent of CuriousMarc and team was tinkering with your spacecraft. Last but not least, you probably noticed that there are no RTC commands to actually fly the spacecraft - this was done instead via the Apollo Guidance Computer commands, which we’ll demonstrate later. But before that, let’s play with the Central Timing Equipment. The CTE produced reference frequencies, timing pulses and second ticks used throughout the spacecraft. It also provided the mission clock, both in parallel and serial form, which was used to timestamp every telemetry message sent back to earth, and to sequence automatic events in the SIM bay, the service module bay with all the external scientific equipment. It
is one of the rare Apollo piece of electronics, besides the AGC, that used integrated circuits. We got it working back in episode 25, and hooked it up to an HP Nixie instrument display, for extra vintage style points. The ground could control this clock remotely via the UDL system 4. It’s pretty straightforward: you use Vehicle Address 4, System Address 4, and then send a series of 6-bit binary numbers for the seconds, minutes, hours and days. Once received, they are sent out as that many pulses to set the appropriate counters on the CTE, as if you were setting a digital clock by repeatedly pressing on the minutes or hours button.
But there is something very odd about the bit structure of this command. Maybe you even spotted it already. But I sure didn’t at first, which is going to lead to interesting results. [Marc] So, here we go, that's my CTE messages tape. And, what did I do? This was complicated.
One is supposed to reset, then I go to 4 days 3 hours 2 minutes 1 second. Then I go to the landing time of Apollo 11. And then I go back through the sequence a couple times. Took me a whole orbit to figure that one out.
So watch this. Zero zero, okay. So that should be now 44 000000. Let's see if I... Yeah! [Mike] Aha! [Marc] It worked. Okay! Let's try the next one. So, this one should be 01 02 03 04, if I got the right order of stuff.
01 06 02... So I got my encoding wrong in the second bit. Okay. I'm getting there. I need another orbit. This one should be the time of landing. Oh no, I got it completely wrong. It's 4 day 6 hours 55 minutes and 40 seconds. And I got I got 45 instead of 55. Do I get 6? I got 3 instead of 6.
[Mike] Is this just an endianess then? [Marc] I think so. And it looks that they switched from big endian to small endian as they move from Vehicle Address / System Address. And then, this obviously means 4, so that's the most significant bit over here. But here,
the seconds has the most significant bit at the other end. So there's some reversal here, that I have to figure out. So I think I sort of figured it out. I put my time in second, minute, hour, days, which gives me that binary representation. Now I have to reverse the endianess.
So 000001 becomes 100000. And then I do that for every number. And then I have to split them in two octal numbers. That gives me 40 20 60 10. And then, this, I have to encode with my little tape cheat sheet.
And then I'll have to add 4 4, but with the opposite endianness. So I think I have it. So the time of of landing is: FS FS 8 NAK BELL # # 8 1 8. That's the landing of Apollo 11. Try again.
All right CTE with endianness changed. Okay, so that should reset the time. It does! Next one, so that should be 04 03 02 01. Oh yes, I got it, that was the bit order! And then, somebody remembers the time of Apollo 11 landing? Days 4, hours 6, minute 55, 40 seconds. Day 4, hour 6, minute 55, 40 seconds! We've landed! [Mike] Nice! [Marc] Yeah, all right! Oh well it worked, but I slightly messed up again, the GET time of the Apollo 11 landing, per the contact light, is 6 days 6 hours 45 minutes and 40 seconds, not 55 minutes and 40 seconds. But you get the idea, and I don’t feel like making another tape. [Aldrin] ACA out of detent. Command Engine Override off. Engine Arm off. 413 is in.
[Houston] We've had shut down. [Capcom] We copy you down Eagle! [Mike] (laughter) [Marc] But what a thing, they change endianness in the middle of the message! (laughter) Okay, well. But that's pretty cool. I can reset time in space. Okay, so are you guys busy trying to wire the AGC? [Mike] Mhm. [Eric] That is correct! [Marc] So, because, the next thing we want to do is wire the AGC. [Eric] Wires! [Mike] Yep! [Marc] Because this whole system could basically control the entire AGC. [Mike] Yeah, it gives you the ability to press DSKY keys. So
anything you can do through the DSKY, you can do from the ground. [Marc] Yeah. And then, on the way down, it could read anything of course. [Mike] Mhm. [Eric] Sort remote desktop for Apollo! [Mike] Yeah, yeah. So we saved the best for last. You could control the Apollo Guidance Computer from the ground, just like the astronauts did, by simply sending DSKY key press codes. Since the
AGC continuously transmitted what was displayed on its DSKY screen via down telemetry, Houston could operate the computer remotely if they wanted to. For that, you used system address 3. The data payload consisted of a 1 bit, a 5 bit key code, its 5 bit complement, and the 5 bit keycode repeated again. With an endianness that is not quite specified, but we’ll figure it out. The resulting 16 bit data word was transmitted serially to the AGC by pulses over two wires, one to input a 0, and another one to input a 1. The AGC was responsible to check for validity. Note that two switches, one on the command panel, and one in the lower bay, had to be set both to the Accept position, in order to grant remote access to the AGC. Generally,
that was not the case, and the ground had to specifically request computer access before they uploaded anything, and access was turned off right afterwards. [Mike] It's 16 bits you need to send for every key. Every key is going to be its own UDL message. [Marc] Okay.
[Mike] It'll be a leading 1... [Marc] Okay. [Mike] ...and then the 5 bit key code... [Marc] Okay. [Mike] ...and then the 5 bit key code inverted...
[Marc] Right. [Mike] ...and then the 5 bit key code uninverted again. [Marc] Yes. And then, we have to split it with the right endianness. [Mike] Right.
[Marc] It's good that we did the clock before we do the AGC! [Mike] I think the clock is reversed from the AGC. [Marc] Good! (laughter) Sadly, we don’t have the real AGC with us anymore, but Mike still has his gate exact FPGA replica. He breadboarded two input stages for the zeroes and ones lines, and we should be in business. [Marc] You brought your replica? [Mike] Yep. So I've got both the AGC and the monitor programed into that FPGA. [Marc] Oh, it has shrunk? That's a new one? [Mike] Yeah.
[Marc] All right! It's a long time we didn't have an AGC running. [Mike] Yeah! [Marc] At least here. I'm sure you had it running at your place. [Mike] Well, it's been a while since I've had the blinkenlights going at my place too! So what I'm going to do is, I'm going to set up my wild card register to monitor address 45, which is what the update is going to get shifted into. So we can see what bits the AGC is getting.
[Marc] Okay. So, we can try first a simple tape where we just select the AGC subsystem, send it zeros for example? [Mike] Uh, yeah, we could do that. It probably would be easier to... [Marc] ...just give it real data? Give it one key code? [Mike] Yeah. If we if we put up like Verb 01, Noun 01, whatever. When you transmit a verb key, we would see the verb disappear. [Marc] Let me see if I get the hang on how to make the tapes quickly.
Moments later... [Marc] So we're going to go for the AGC control, the DSKY. And that's my first stab at programming it, so it might be full of errors.
Zero, okay. You're ready? This is reset. [Mike] Okay.
[Mike] You see anything? [Mike] No, but... [Marc] ...you don't expect to see anything. Verb? [Mike] No. Nothing.
[Marc] Do you see the data coming through? [Mike] No. [Marc] Did I miss something? System... oh wait, wait, wait, wait, wait. There's something wrong with my... It didn't sync up correctly. [Mike] Oh, okay. Oh! It would help if we turned the UDL on! (laughter) [Marc] Okay try again. But I was having the wrong commands here. 0, 01, okay, so that should be reset I think.
[Mike] Okay. [Marc] Okay. And this will be verb. [Mike] Okay. Yes! [Marc] Okay. And this will be 3.
[Mike] Yep. [Marc] And this will be 5. [Mike] Mhm. [Marc] It's working? [Mike] It's working! [Marc] This will be enter.
[Mike] Yeah, it's doing the light test! [Marc] Oh! Wow. [Mike] Nice! [Marc] Excellent! So do I need to wait, or I can do... [Mike] It's done. [Marc] Okay. So then I do, I think I have a reset. Then I have verb. [Mike] That did not take.
[Marc] Oh yeah, I have an error. I am wrong over here. [Mike] Yeah, you got stop bit error. [Marc] So I am missing a bit somewhere. Let me try to replay the tape. Six, seven. Okay, I have a problem at seven. Okay, let me fix that. Soon after...
Okay, so, we start again. I think I found a mistake in my program. So, here we go. Okay, you are clear on your side? [Mike] Yep! [Marc] Okay, so, reset, V, 3, 5, enter.
[Mike] Yep, you got the light test going. [Marc] Excellent. Do I need to wait for it? [Mike] It's done.
[Marc] Reset. Now I'm am good. V 3 7 enter 0 0 enter. [Mike] Perfect. [Marc] And then reset. [Mike] Yes, you are on P00.
[Marc] Wow! That's pretty good! [Mike] Yeah! [Marc] I think I can run it all in one fell swoop, see what happens. I'm just going to blast it. Okay guys, witness that awesome achievement of computing. (tape noises) Okay, there you go.
[Mike] Yeah that's fine [Marc] 3 7 enter 0 0... P00! [Ken] You took a lamp test! [Eric] Not bad! [Ken] Now we just need a real AGC to do this, and a real DSKY. [Marc] That's advanced computing! But we we can do anything we want with the DSKY, basically. [Mike] Mhm! [Marc] And indeed, NASA used the DSKY uplink capability extensively during the real missions. Here is a list of all the uploads from the Apollo 15 flight. Granted, there are a few for the Instrument Unit, but most are for the Command Module or the LM computer. They included navigation updates, burn loads, time syncs, and landing site updates.
And, if you are as curious as I am, you’re probably left wondering, how did they do this in a real mission? Did they actually type into the DSKY from their consoles? You sure wouldn’t want to punch a paper tape to send a message to the spacecraft. Or would you? And how did they get these commands from Houston to the remote tracking sites, and then to the spacecraft itself? Doing this with 1960’s technology was a fascinating tour de force, and merits a video of itself. Hopefully coming up in a future episode. See you then!
2024-10-12 21:44