Home
yaAGS et al.
Download
Links
Change log
Bug and issues
Developer info
FAQ
Virtual AGC and AGS
Change-Log Page
  

yaAGC
yaYUL
yaDSKY
yaOtherStuff
Luminary
Colossus
Language Manual
Physical Implementations


2008-02-14
Added a nifty photo Alessandro Cinquemani has sent in of the Pultorak-style AGC/DSKY he is constructing.
2008-02-05
  • We've had word of another AGC physical implementation, by Philip Schmidt.  We're not hosting it here, though we'd be delighted to.  Check it out!
  • Dimitris Vitoris has sent us an update to his AGC physical implementation, which now includes most of the 'A1' phase of his Block I design.  (See here.)  Here is his own description, slightly edited for time and content, and to fit on your screen:

I've completed all the subassemblies, which are now in their final form except for the DSKY. I plan to make it a 3 PCB unit; 1 PCB for the mainboard/keyboard, 1 for the LED display/caution & status lights and 1 for the interface daughterboard.That's necessary because the keys I'll use (RS 336-191) are a little tall and I'll have to elevate the displays. Also I plan to design my DSKY in such a way that it can be used in any revision I plan to make by just exchanging it's I/O daughterboard. You'll find that there are 5 new elements in this revision:
  • DSKY
  • Monitoring and Control Assembly - Driver Module     (MCADM)
  • Monitoring and Control Assembly - Logic Module     (MCALM)
  • Monitoring and Control Assembly - Memory Module (MCAMM)
  • Master Controller
 The MCAs are the separated monitoring busses and control switches from each A0 module. The MC is the main power distribution hub,
panel illumination controller and using it you can power down any or all the monitoring panels at will.
 
I have attached together with the A1 schematics the following:
  1. My custom libraries for the PSA05-12GWA Kingbright alphanumeric display and for the RS 336-191 illuminated keys. You'll have to put those 2 in the 'lbr' directory of EAGLE before opening the DSKY schematic (only used there).
  2. The datasheets of PSA05-12GWA and HDSP-5601 plus dimensions and a pic of 336-191.  [Actually, I have held back these datasheets for copyright reasons.  I'll certainly maintain a private archive of them here, in case someone absolutely can't get their hands on them in a 'legal' way—Ron Burkey]
  3. A draft correction log of A1.
 As before these schematics should NOT be considered final and may contain errors. Looking forward for your comments and suggestions!
2008-01-13
  • I've discovered a change in the status of the CircuitMaker2000 program needed to work with John Pultorak's Block I schematics, so I've added some textual comments related to that situation.
  • Meanwhile, Dimitris Vitoris has sent some minor corrections to his own Eagle-based Block I AGC schematics.  In his words:
    • I forgot to connect 1_CONTROL_BUS Net19 to U45D in the LOGIC MODULE ALU #5.
    • Also I named U135 as R135 by mistake which lead to the comment #4 situation (Logic
      Module section of my changelog). After that it's R135 again as the original and not R201.
    • That thing is so complex my head hurts...
2008-01-03
  • Onno Hommes has updated the AGC source highlighting so that it includes vim (both Linux and Windows) and TextPad.  He also indicates that when all this stuff is installed, emacs also highlights correctly (but he isn't sure why).
  • Dimitris ("Jim") Vitoris has sent us some electrical CAD files using the Eagle schematic-capture program that provide an alternate editable form of the physical Block I AGC simulation pioneered by John Pultorak and available elsewhere on this site.  This is only the first step of what we're hoping ... keep fingers crossed! ... will be a physical Block II simulation.  Check it out!
2007-12-28
  • Josef (Jeff) Sipek is now generously mirroring the Virtual AGC website, and a link to his mirror has been added on the links page.  Thanks, Jeff!  Actually, he has been doing so for some months.
  • Onno Hommes has sent us some configuration files (and a nice set of instructions) for adding AGC-specific syntax-highlighting for the following source-code editors:  Kate, KWrite, Kdevelop, and Eclipse.  You can now get these from the download page.
2007-04-25
  • Fixed lots and lots of broken or workable but ill-formed links throughout the website.
  • Stephan tells us that v1.0 of his "stand-alone" Windows executable has some startup problems, and has sent a revised version of it.
2007-04-22
Stephan Hotto has sent version 1.0 of LM_Simulator, both in source code and in the Windows "stand-alone" executable version, with the following notes:
  • FDAI now fully functional! The attitude looks a bit confusing around ±90 degrees Yaw but that is for the reason that LM_Simulator does not uses a real 3-dimensional ball to show the attitude. Please keep in mind that the LM-IMU has its Gimbal Lock Condition on the Roll-Axis and not on the Yaw-Axis like the Command Module has.
  • A Checkbutton in the FDAI window now allows to switch off the 8-Ball for computers with low performance.  [LM_Simulator's CPU performance has been greatly improved from a month or two ago, but you still might like to reduce it some, and updating the 8-ball is the majority of the CPU time used by LM_Simulator.  Thus, the option for switching it off.]
  • FDAI angles are additionally presented as numerical values.
  • New lm_configuration.ini parameters:
    • Operationg_System "Windows/Linux" - To allow one source code for both operating systems.
    • FDAI_Update_Rate "updates per second" - Choose a lower value if you experience performance problems.
  • New HTML documentation as well as re-work of the existing documents.  [The HTML documentation is in the development snapshot under the directory Contributed/LM_Simulator/Documentation, whereas the ASCII documentation is in Contributed/LM_Simulator/doc.]
Please remember if you're using the development snapshot (rather than the Windows stand-alone executable) that to take complete advantage of the pad loads in the latter-day versions of LM_Simulator, you have to copy Contributed/LM_Simulator/LM.core into the directory from which you intend to run the simulation.
2007-04-17
  • Stephan Hotto has sent over what he refers to as a "stand-alone" version of the simulation for Windows.  It is a lot easier to install than the full version of Virtual AGC --- not least because I don't update the Windows version very often --- but is very LM_Simulator-centric.  For example, it doesn't include the Abort Guidance System simulation.  Check it out on the download page!
  • I've improved several of the documents in the HRST archive.  Not much, but a little!
2007-04-16
I have found a backdoor into the "archived" HRST website, and modified the links page accordingly.  However, I'll still continue to host the documents, because it gives me a chance to improve them.
2007-04-15
As mentioned earlier, MIT's Dibner Institute, whose website (HRST) formerly hosted most of the scans of historical AGC documents on which Virtual AGC is based, has closed and its website is gone.  I have decided to begin hosting the documents formerly available from HRST, with improvements to some of them, here at Virtual AGC.   Some of the documents---particularly the assembly listings---have been improved from the versions formerly at HRST; others will be improved in the future.   It may take a while to find and fix all of the now-broken links, so if you find any of them let me know.
2007-04-13
Okay ... I haven't updated the development snapshot or website since dev snapshot 20060110, mostly from laziness.  Agood thing, too, because since then a very nasty bug had been introduced into yaAGC, but I couldn't find it or fix it because I was falsely blaming the symptoms on  the LM_Simulator changes.  Hooray for laziness!  But yaAGC is now fixed. 

If you're iffy about installing the new dev snapshot, here's the executive summary of changes since 20060110:
  • Builds again in Win32.  (Not a behavioral change.)
  • Incorporates patches used by the Orbiter integrators.  (Not a behavioral change.)
  • Handles the BRUPT register properly, eliminating some serious problems that occurred when using the digital autopilot.
  • LM_Simulator tremendously improved in terms of bugs, CPU utilization, and some features.
Enjoy!
2007-03-17
Busy Stephan has sent still another LM_Simulator update, as follows:
  • LM_Simulator now has its own RHC/ACA (Rotational Hand Controller) and THC (Translational Hand Controller). Both are implemented as simple GUI-Elements (Sliders and Buttons).  [In other words, if the joystick interface provided by the yaACA program doesn't work for your joystick, or you don't have a joystick, or you're just not very good at operating the joystick, you can now replace it with LM_Simulator.]
  • A minor change in the RCS calculation allows now the usage of translational commands without influencing the rotation of the vessel.
2007-03-16
Stephan has sent another LM_Simulator update, which he describes as follows:

Now the FDAI shows the correct 8-ball angles - currently with a limitation to:
Yaw: 0Deg ±90Deg
Pitch: 0Deg ±90Deg
Roll: Anyway limited by the Gimbal Lock condition at 0Deg ±85Deg

The functionality of the DAP and the dynamic model as well as the displayed FDAI angles can be verified by using the "Crew Defined Maneuver Routine V49". By initiating this routine you must provide the desired destination IMU Gimbal Angles, subsequently the AGC presents you with the associated FDAI angles it steers the LM to (please refer to the Tutorial). Because of the above mentioned limitation those FDAI angles should be in the defined range.  [By the "tutorial", Stephan means the Contributed/LM_Simulator/tutorial.txt, which you'll get by downloading the development snapshot of Virtual AGC.]

The CPU load maximum lies around 20% on an Intel Core Duo 2.13GHz processor.
2007-03-05
Here's a sort of omnibus update that takes into account stuff people have been sending me over the last year or so.  I apologize to anybody who sent me something I've forgotten about!
  • yaAGC:   The AGC architecture allows for a wacky feature using the BRUPT register, in which an interrupt-service routine can place in instruction into BRUPT to be executed upon return from interrupt.  In other words, the instruction executed upon return from an interrupt doesn't have to be the instruction that's at the location to which the program returns.  I had implemented this feature, but couldn't figure out why anyone would want to do anything so crazy, and so disabled it by default.  'x15' of the group which has integrated Virtual AGC into the Orbiter spacecraft simulator has discovered that this feature does need to be activated for proper operation, as the multi-tasking performed by the program executive makes use of it.  The effect of turning off this feature is that the digital autopilot will hit the dreaded EDRUPT instruction, and hence reset the AGC from time to time.  Hence, it is now activated by default.  (You can get this feature without a new download by compiling Virtual AGC with the command "make -DALLOW_BSUB".)
  • LM_Simulator:  Stephan Hotto has sent in a major update, v. 0.8, that he describes as follows:
  • Critical Bug Fixes!!!
  • Implementation of a precise RCS-Thruster simulation by using the transformation between the U,V and P,Q,R systems
  • Complete rework of the IMU/FDAI which had errors in the coordination transformation between Pilot axes and Stable Member axes.
  • CPU load now below 25% on an Intel Core Duo 2.13GHz processor
Additionally, Stephan tells us:

The DAP is now stable around all axes and even the "DAP V49 Crew Defined Maneuver" routine steers the LM exactly into the right orientation.

There was a major bug in the IMU coordination transformation that caused the DAP instabilities.

Furthermore, to handle single RCS jet events it was necessary to transform the U,V jet system into the P,Q,R pilot axes.

The whole dynamical model of the LM is now based on the equations used for the DAP state estimator. This approach makes the model very precise and comparable to the real thing.

To assure the right AGC initialization it is necessary to stick to the following pre-conditions and steps:
  1. yaAGC has to be compiled with: "make CFLAGS=-DALLOW_BSUB".  (This is now the default.)
  2. The LM.core file delivered with the on hand LM_Simulator package has to be used because it is populated with the necessary pad load data
  3. After start of the simulation the following steps have to be executed (please use the Tutorial as a reference):
  • V36E to reset the AGC
  • V37E 00E to start the idle program. Probably there is a need to do this a couple of times until PROG shows 00
  • V48E (DAP Initialization) -> V21E to change the value to 21022 (ACA Fine Scaling 4Deg/Sec)
  • AGC Crew Inputs -> Set "Attitude Hold Mode" to ON
  • V77E (Rate Command and Attitude Hold Mode)
  • V61E (DISPLAY DAP FOLLOWING ATTITUDE ERRORS)
  1. Now the DAP should enable you to steer the LM. !!!Please steer slowly to avoid that the simulation gets overloaded!!!
  2. Use "V49 Crew Defined Maneuver" to let the DAP steer the LM to the selected attitude
  • hrst.mit.edu, the mother-lode of documentation for the AGC, has apparently given up the ghost.  Links at the former site imply that an archive site exists at caltech.edu, but that archive site is apparently "under construction", and has been for the past six months (as I write this).  I have archived the complete contents of hrst.mit.edu, so  if the caltech.edu site does not come up eventually, I'll host all of the old hrst.mit.edu docs myself.  If you have an opinion on this, let me know.  (Thanks, Geoff!)
  • Eugene Dorr has written with such a rave review of "Computer for Apollo", one documentary from a 2-DVD set of documentaries called "Mission to the Moon" (available from www.spacecraftfilms.com), that I feel obliged to mention it even though I have not yet seen it myself.  Apparently, it shows demonstrations of using the AGC, as well as covering the AGC's manufacture.
  • Onno Hommes has written with nice apologia for the interpreter language used in some AGC programming.  I've made a few changes to the assembly-language manual based on his comments.
  • Charles Chapman has pointed out that some of the links on the yaAGC page were pointing to my local disk, and weren't web-accessible.
  • Others have written to mention problems with the Windows scripts, which I hope to take care of soon.
2006-02-26
  • Orbiter:  Various source-code changes have been made to make integrating new Virtual AGC versions with Orbiter more routine.  (Thanks to Mark Grant.)  In case you haven't been watching the efforts being made in Orbiter, the integration has been making great strides lately.  There is talk that flying a complete Apollo 8 mission in Orbiter may be possible in the near future.  Check it out!
  • Linux:  When building Virtual AGC, 'make install' now creates an uninstallation script called VirtualAgcUninstall.  I assume this will work on any *nix type system, but I admit I haven't made any effort to try it out except on Linux.
  • Win32:  Recent versions haven't being building on Win32.  (Thanks to Peter Joseph for pointing this out.)  This is now fixed.
  • Mac OS X:  Instructions by Fabrizio Bernardini have been added to the download page for installing the Virtual AGC binaries on Mac OS X 10.4.  Some time ago I removed the instructions for installing binaries on Mac OS X, because it just wasn't any easier than building from source.  However, it has apparently become much easier.
2006-01-10
Have added the SimArtemis072_lite startup script, have tried out Artemis072 in Win32, and have hopefully updated all of the web-pages to properly reference Artemis072.

Milestone:  The Artemis072 (Colossus 3) command-module software from Apollo 15-17 can now be run in the simulation!  Simply use the startup scripts SimArtemis072 or SimArtemis072_lite wherever the scripts SimColossus249 or SimColossus249_lite would have been used before.  I leave to those of you who are more expert than I the task of evaluating it.

Unfortunately, it may be quite a long time before the source code for Artemis072 is available, so we'll just have to live with having only the executable for a while.
2006-01-09
All data entry and proofing for the Artemis 072 (Colossus 3) executable  has been completed, and some startup scripts have been added for it.  I haven't yet made the necessary mods to the webpages yet to explain how to use it, nor have I gotten the chance yet to try it in Windows.  Tomorrow, hopefully.  In the meantime:  Start the simulation using the script "SimArtemis072".  (I'm really only posting it today just in case I happen to die overnight, which I presume is unlikely.)
2005-12-24
I now have in hand the complete listing of the Colossus 3 (Artemis 072) executable used in the CM of Apollo 15-17.  Thanks to D. Thrust for providing the scans!  It will take me some time to convert it into machine-readable form so that it can be executed by the AGC simulator, but I will proceed with it as quickly as possible.  I don't yet have much of the Colossus 3 assembly-language source code, but hopefully it will make an appearance as well, in due time.
2005-11-06
Well, I seem to have hit the jackpot this week, in terms of getting into contact with some of the original AGC programmers.  Eileen Hughes has sent me the first names of several programmers---including her own---while Jonathan Addelston has written to tell me that I was spelling his name wrong.  Sorry about that!  The acknowledgement list on the home page has been corrected.
2005-10-29
  • yaAGC:   If you use the VIEW command in --debug mode, the value of the variable will always print at least once now, even if it doesn't change.
  • General:  I had to make a couple of minor tweaks to get Virtual AGC to build in OpenSUSE 10.0.  Note that if you upgrade from SuSE 9.x to openSUSE 10.0, you'll probably need to rebuild Allegro.
2005-10-17
I've been holding onto some changes for a while, so let's hope I manage to remember them all.  The reason I was holding on is that I have seen some segfaults in yaAGC when manipulating the RHC.  However, now that I am trying to fix them, they've magically disappeared.  (If you experience such problems, please send me the files called "core" and "LM.core".  Thanks!)
  • yaAGC:
    • The PCDU and MCDU commands (used by the simulated IMU to update the CPU counter registers related to gimbal-angle measurements) have been split into two separate commands each, one of which is a "fast" count at 6400 counts per second, and the other of which is a "slow" count at 400 counts per second.  This replaces the 800 count-per-second buffering used in the 2005-10-05 snapshot.  (But there's some doubt as to whether it actually works yet!)
    • The WATCH command (used in --debug mode) has been fixed so that it accepts symbolic variable names in addition to numerical addresses.
    • A new command called VIEW has been added to --debug mode.  It works similarly to WATCH, except that it displays the values of variables in real time rather than interrupting execution upon change.
  • LM_Simulator:  Stephan Hotto has sent us v0.7.
    • The timing of the Jet Firing, the timing of the dynamic simulation, and the FDAI refresh rate have been decoupled.  This reduces the CPU time, as well as making the firing of the jets snappier.
    • Fast/Slow Increment/Decrement of the IMU AGC counter to pass the KALMAN-Filter.
    • Tutorial extended: "V49E Crew Defined Maneuver Routine"
    • Final Gimbal Lock of the FDAI now at >85 degrees
    • Moment of Inertia factor removed (ini-file and program)
    • There is an LM.core file --- i.e., a snapshot of erasable memory --- in which Stephan has performed a number of erasable pad loads related to things like the LM mass.  (This contrasts with the default LM.core, which is all zeroes, and in which nothing is initialized.)  If you want to use it, please copy it from yaAGC/Contributed/LM_Simulator into the directory from which you run SimLuminary131.  (Probably your home directory.)
  • yaDSKY web-page:  Some image links were broken.  Thanks to Anthony Rich for pointing them out.
2005-10-05
  • yaAGC:  Provides a complementary feature to yesterday's LM_Simulator update, in that it internally buffers all PCDU or MCDU commands to the CDUX, CDUY, and CDUZ counter registers, and actually applies them to the counters at an 800 cps rate.  In other words, the simulated IMU can feed in new angle measurements as fast as it likes, but they are now applied to the simulated AGC's internal counters only at an 800 cps rate.  The reason for this is that the real IMU communicated with the real AGC using an 800 cps signal, and the digital autopilot (DAP) in the Luminary/Colossus software employs a digital filter based on this assumed counter update rate.  The filter was intended to eliminate electrical noise and or noisy angles due to the vibration of the spacecraft, but it also has been causing rejection of changes to the CDUX, CDUY, and CDUZ counters that don't conform to the assumed 800 cps timing.  Consequently, the simulated IMU has been feeding info on the spacecraft orientation to the simulated CPU, but the DAP has been rejecting this info.  I don't claim that this change has been extensively tested, though, and an erasable pad load is needed to set the DAP's "Kalman filter" characteristics, or else the CDU inputs will continue to be rejected anyhow.  (But I don't quite know what those pad loads are yet.)  Thanks, as usual, to Stephan for figuring this out.
2005-10-04
  • LM_Simulator:  Another v0.6 (but this time really saying 0.6 in the window title).  This should work a little better with tomorrow's yaAGC update, as it is intended to be able to feed in IMU orientation changes at (at least) and 800 cps rate, so as to avoid falling behing the AGC software's expectations about update rates.
2005-10-03
  • LM_Simulator:  Another update, v0.6, thanks to Stephan Hotto.  (The main window still says "v0.5", but don't worry about that.)  Here are the changes:
    • Documentation revised
    • Code clean up
    • Changed the switch handling of the DAP Mode Switch within the Crew Switch Window.
    • Rotational Model Moment of Inertia Calculation bases now on the same hyperbola equation as used by the AGC state estimator
    • Roll, Pitch and Yaw Rate-Indicators added. In the real LM the data for these indicators came from the fixed mounted gyro rate assembly unit.
    • Error Needles added. The data shown by the error needles can be switched between 3 modes:
      1. DSKY: V61E -> DISPLAY DAP FOLLOWING ATTITUDE ERRORS. This is the standard mode. The needles show how far the DAP is away from the wished axes positions.
      2. DSKY: V62E -> DISPLAY TOTAL ATTITUDE ERRORS WITH RESPECT TO NOUN 22.  Here the needles display the absolute difference between the entry shown by V16N22E and V16N20E. Normally used for automatic positioning.
      3. DSKY: V60E -> DISPLAY VEHICLE ATTITUDE RATES ON FDAI ERROR NEEDLES. These outputs should provide the same information as the FDAI rate indicators do. The Roll, Yaw and Pitch rate shown by the FDAI bases on a separate Rate Gyro Assembly fixed mounted to the LM body, whereas the Information on the needles shown by V60E is derived from the AGC measurement of the angular changes. This is also a backup mode in case of a Rate Gyro Assembly Fault.
2005-09-25
  • LM_Simulator:  Stephan has sent us a new version, designated v0.5.  Here are the changes:
    • Stage Separation
    • Ascent Engine (Veryfication shows that the engine exactly reaches the defined delta V).
    • Extension of the config file by adding the ascent engine parameter
    • Elaboration of the Help text
  • yaAGC & yaAGS:  Several people have pointed out to me that Virtual AGC no longer builds properly on their *nix systems, because of new dependencies I've forgotten to document.  Namely, you now need "readline-devel" and "curses" (or else "ncurses" with a symbolic link making it appear to be "curses").  Now documented in the build instructions.
2005-09-20
  • yaDSKY:  "Accelerator keys" have been added, thanks to Christian Bucher.  The hotkeys are: vne0123456789+-.  Note that the hotkeys for VERB, NOUN, and ENTR are lower-case.  There are no hotkeys for RSET, CLR, and PRO.
  • LM_Simulator:  A lot of changes, thanks to Stephan Hotto.  You should particularly note the changes to the tutorial (in the Contributed/LM_Simulator/doc directory).  Here's what Stephan has to say about it:
  • Used the new LM-Coordinates to re-code the whole IMU-Module
    • IMU Coarse Align
    • IMU Fine Align
    • PIPA Vectors
  • Gimbal Lock (Middle Gimbal) on LM-Z-Axis (Roll-Axis)
  • Complete re-work of the RCS Thruster handling:
    • 4 Thruster Mode along X, Y, Z axes
    • 2 Thruster Mode (Minimum Impulse Mode) along X, Y, Z, U, V axes
  • Remark: THC (Crew-Inputs) activates the correct thrusters to translate the LM along the X,Y,Z axes. This increase in speed is not jet reflected within the IMU PIPAs.
  • Update of the tutorial to reflect the DAP mode and data load routines.
The summary of these changes is that for some time we've been trying to correctly match all of the various thrust and rotational axes of the simulation with the axes assumed by the Luminary and Colossus, and hopefully have them all correct now. However,  the DAP is not yet stabilizing the LM even after loading the correct data (e.g. LM weight) as in the updated tutorial. It just bounces back and forth around the desired orientation, until it runs out of fuel.  Obviously, we're still working on figuring that out!
  • Web:  The fragments of Stephan's tutorial (see above) which had been on the yaOtherStuff page have been removed, and the reader is instead directed to Stephan's real tutorial in the development snapshot.  (It was too hard to keep the two in sync.)
2005-09-14
  • yaACA and LM_Simulator:  The sign of yaw has been reversed, thanks to Stephan's feedback.
2005-09-09
  • LM_Simulator:  (Thanks to Stephan Hotto.)  The mapping of pitch/yaw/roll axes to thruster/joystick axes has been modified.  The ATTITUDE HOLD mode thus now actually works (and attempts to hold the attitude) rather than merely allowing thrusters to fire.  However, there is an overcompensation, so that the attitude overshoots, resulting in continual corrections and eventual exhaustion of fuel.  This may be due to mismatch between the AGC's and IMU's assumptions about the LM's inertial characteristics.  At any rate, it's a big improvement, but we haven't crossed the finish line yet.
2005-08-28
  • yaAGC:  The freeze-up problem in ATTITUDE HOLD mode has been fixed, I hope.  For anyone who has been holding off on downloading new development snapshots, I think it's okay to do so now.
2005-08-23
  • yaAGC:  In "--debug" mode, a "WATCH A V" command has been added, to allow breaking upon the value stored at an address changing to a specific value.  (Whereas the already-existing "WATCH A" simply broke upon any change.)
2005-08-22
  • In general:  All uses of unsigned long long now replaced by uint64_t, to make it easier to build Virtual AGC with MS Visual C++ (which is apparently being done for integration with Orbiter).
2005-08-21
  • yaAGC:
    • Fixed the calculation of "patterns" in fixed memory in "--debug" mode.
    • Added detection of certain types of infinite loops, for debugging purposes.
    • The current version of yaAGC has a mysterious problem.  I'm not sure when this problem began.  (I suspect the underlying problem was always present, but that it was masked by other problems in versions 20050814 and prior, so that it was not noticeable.)  The problem can be observed as follows:  Suppose you run Luminary131, then you activate ATTITUDE HOLD mode, then you use the hand controller to fire the thrusters.  At some later time, you'll find that the AGC has become largely unresponsive, though it still responds in an automatic way to certain stimuli.  The only way of recovering from this is to restart the simulation.  Fixing this problem is my top priority at present.
  • LM_Simulator:  Stephan has sent over a new version, differing principally in that it supports combined pitch & roll control from the hand-controller. 
2005-08-20
  • yaAGC
    • The DELETE command in debugging mode was not consistent in format with the BREAK command, and (in fact) was broken for numerical addresses; this is now fixed.
    • There had been a problem for some time, in which activating ATTITUDE HOLD mode caused a program alarm 32000.  I think this has now been fixed, with the advice from a number of people.  (Specifically, Julian Webb, Hugh Blair-Smith, and Mike Higgins.  I hope I haven't forgotten anybody; if so, my apologies!)
  • Assembly-language page:  Heavily modified the description of the EDRUPT instruction.  This change relates to the latter bullet point above.
  • FAQ:  Mark Grant has sent me a more exciting screenshot from the Orbiter integration project, showing the DSKY during liftoff.
2005-08-17
  • yaAGC:  Christian Bucher has fixed an embarrassing bug for me.  (For arithmetic with a double-precision negative value in which the less-significant word was +0, the more-significant word would have been arbitrarily converted to -0.  Admittedly, I don't know if this situation ever occurred in practice, but it's great to have it fixed.)  Also, Markus Joachim has sent a fix for timing in some output pulses generated by the CPU; the timing error was not perceptible in a human sense, but caused some program alarms in the Orbiter integration.
2005-08-15
  • Web-pages:  Stephan Hotto send me some nifty photos of the AGC and DSKY taken at the Computer Historic Museum in Palo Alto.  I've incorporated a few of these into the yaAGC and yaDSKY pages.  The ones on the yaAGC page show some of the inner construction of the AGC.  The one on the yaDSKY page is nice because it's almost head-on, and therefore shows the relative sizes (of buttons vs. indicator lamps vs. numerical display) with reasonable accuracy.
2005-08-14
  • Building yaAGC and yaAGS in Win32:  "x15" points out that the Pthreads-w32 project, needed for building yaAGC and yaAGS in Win32, has changed its library-naming, so that you can't use newer versions of this library without manually editing a couple of Virtual AGC makefiles.  The stock Virtual AGC makefiles now auto-select a Pthreads-w32 library version in a way that's hopefully adequate to obviate the need for manual editing.  Note that I've not personally had the chance yet to try it out with the newer versions of Pthreads-w32, so your mileage may vary.
  • LM_Simulator:  Stephan has sent over a new version of LM_Simulator, with the following changes:
    • CPU Load reduction
    • Smaller font to reduce window sizes
  • Luminary page:  Some clarifications have been added, relating to discrepancies in the known versions of Luminary 099.
2005-08-13
  • Interoperability with Orbiter integration project:  Applied several code fixes provided as feedback from the Orbiter integration.  (Thanks to Mark Grant.)  Specifically, header-file changes have been made that should allow you to link Virtual AGC libraries to C++ code, and some hooks have been added for use by the Orbiter integration but which could theoretically by used for other purposes as well.  (I refer to the agc_clientdata and ags_clientdata fields in the agc_t and ags_t structures.)
  •  yaAGC's or yaAGS's "--debug" mode apparently did not work on some versions of Windows, but some initialization changes have been made to fix this.  (Thanks to "x15".)
2005-08-06
  • yaAGC:  Apparently, we had been concentrating so much on yaAGC's "--debug" mode, that we didn't notice that the regular (non-debug) mode had been broken for several days, and so the usual startup scripts like SimLuminary131 didn't work unless yaAGC was built without readline support.  Jordan has now fixed this for us.
  • yaAGC & yaAGS:  Took care of some build-platform-specific dependencies in finding the 'curses' library sometimes needed with the 'readline' library.
  • Win32 with Cygwin:  For those of you who think my Win32 build instructions seem too complex, Virtual AGC now seems to build with Cygwin.  (Warning:  I haven't yet gotten the Allegro library to install because I'm too lazy to follow the instructions, so I haven't yet tried yaACA.)   You have to install a huge number of Cygwin packages first, but fortunately that's really easy.  For now, I'll just note that you use the Linux build instructions, and you have to do 'make NOREADLINE=yes", because for some reason Jordan's command-history stuff doesn't build.  Also, the stuff for shutting down all of the components of the simulation gracefully doesn't work, so comment out the line reading "SimStop" in scripts like SimLuminary131.  Finally, the steps to running the simulation are to run "startx" from a Cygwin command line, and then to run SimLuminary131 or another startup script from the X-terminal.  I'll write up the instructions for this in detail as I perfect it.
  • Building, in general:  Now have a much better technique, I think, for detecting the build-platform, so there's more consistency among the build-instructions on different platforms.
2005-08-04
  • Artemis072 docs:  Thanks to Shelly Kelly and UHCL, we now have the Colossus 3 Guidance System Operation Plan (GSOP) scans ... or at least as much of them as can be located at present.  (Sections 4 and 6 are missing, but we have sections 1-3, 5, and 7.)  Section 7 is particularly interesting, because it documents and contains AGC assembly listings of all programs loaded into AGC erasable core memory rather than fixed core memory.  In other words, these are the programs that were loaded into the "RAM" by the astronauts or via digital upload from a ground station.
  • yaAGS, yaLEMAP:  Thanks to Jordan Slott, symbolic debugging of AGS firmware (via the "--debug" command-line switch of yaAGS) is now implemented.  This also includes a few little flourishes I forgot to add myself, such as a HELP command.
2005-08-02
  • yaAGS:  Courtesy of Jordan Slott, yaAGS again has a working --debug mode, and the command-history support in it seems to work perfectly.
2005-08-01
  • yaAGC:  Jordan Slott has added a few fixes to the recent --debug mode features.  Because of the fixes, 'readline' support is now enabled by default in the Makefiles. 
    1. With readline support enabled, hitting ENTER no longer interrupted execution of the AGC program.  This has been fixed.
    2. Repaired some spurious printing of prompts during AGC program execution.
    3. "Break" was no longer working.  This is now fixed.  [That was my fault, not Jordan's --- RSB.]
    4. yaAGS now builds when readline support is enabled, and actually works in Win32.  In other words, you can get a command history.  Warning:  In Linux, yaAGS --debug mode no longer functions properly, regardless of whether you compile with or without readline support.  Hopefully that will be fixed Real Soon Now.  (If you need --debug mode in yaAGS under Linux or Mac OS X, please hold off on downloading the development snapshot, since there are no improvements in yaAGS anyhow.)
    5. There is also an issue with the prompt. When you hit a breakpoint it does not print a ">" prompt. You can just hit "enter" to get a prompt.  (Actually, it does work in Windows, but just not in Linux or presumably Mac OS X.)
2005-07-31
  • yaAGC:  Jordan has added some further frills to the --debug mode.  Here are the notes on the changes:
  1. Added the "files <regex>" debugging command. This lists the source files matching the given regular expression. 
  2. Reworked the "break" command. Now "break *address" is used to add a breakpoint at a memory address, as in gdb.  The "break <line>" is used to break at a line number, whenever <line> can be parsed as an integer. Update "help break" to reflect this change.
  3. Improved the output from "breakpoints" a bit -- for those breakpoints specified using a symbol or a line number, it outputs the file:line from where it can be found. Note that I do not output file:line if you create a breakpoint using a memory address, although I don't think this would be difficult to do.
  4. Fixed a small bug in "list from,to" where the line numbers were not being displayed.
  5. Cleaned up some of my old code in symbol_table.c
  6. Added the ability to use libreadline to read in the debugger command line. The upshot is you get source file name completion, history, etc.  (Note:  Though apparently functional, this feature is currently disabled in the Makefile, because of some conflicts which prevent yaAGS from building.  Hopefully it can be fixed up soon.)
  • Startup scripts:  After performing some upgrades on my main Linux workstation, I found that the startup scripts (SimLuminary131, etc.) have become unreliable and may randomly shut down the simulation.  (It's a problem in the relatively-recently-added feature that shutting down any component of the simulation, such as yaDSKY, shuts down all of the other components, such as yaAGC and LM_Simulator.)  This should not affect Windows users, but potentially affect everyone else.  I don't know how to fix this problem with any satisfying degree of certainty, but workarounds have been added that should reduce the probability of such a random shutdown to a very low order of probability.
2005-07-30
  • yaAGC & yaYUL:  Jordan has greatly improved the symbolic debugging, with the greatest improvement being that (where possible) the actual source code is displayed rather than disassembled source code.  This lets you see not only program labels and variable names, but even program comments.  Several versions of the LIST command have been implemented in the debugger, so that you can get various types of disassemblies.   Also, it's all related to the source files by filename and line number, so it's cross-referenced much more nicely.  I'd say this feature is now at a completely satisfying stage, from a user's point of view.  Note:  The symbol tables created for this functionality are now quite large.  (About 11 megabytes each for Luminary131 and Colossus249.)  Therefore, you'll now find that Virtual AGC is chewing a lot more disk space than before.
2005-07-28
  • yaAGC & yaYUL:  Jordan Slott (thanks, Jordan!) has sent in a very cool mod that integrates symbol tables produced by yaYUL into the "--debug" mode of yaAGC.  The upshot of this is that in some cases you can use symbolic names when debugging, rather than being forced to use absolute numeric addresses all the time.  It's still not fully implemented, but it's pretty valuable nonetheless.  Refer to the yaAGC page to see how to use it.  Symbolic debugging was on my wish list, but I was too lazy to do anything about it.  Besides, it was very brave of Jordan to poke around in my source code.  (Hopefully there won't be too much emotional scarring.)  This builds and works on both Linux and Win32, but I haven't had a chance to try it in MacOS X.
  • Scans of the Colossus 3 GSOP document have begun filtering in.  (Thanks to Shelly Kelly and U. H. Clear Lake.)  I only have section 1 and a small chunk of section 2 right now, but more is coming.  (This is nicely coincident, of course, with the fact that the Colossus 3 source code is also dribbling in, and the GSOP document is basically the program documentation.)
  • yaDSKY:  Thanks to the availability of the docs mentioned above, all of the CM digital downlink lists have been implemented.  Therefore, all of the downlink lists are now implemented (if not necessarily correctly).
2005-07-19
  • yaACA:  Fixed a bug in variable-declarations that caused compilation with gcc 2.9.x to fail (but which gcc 3.x hadn't minded).
2005-07-17
  • yaYUL:  The inconsistency in SBANK bits between the octals produced by yaYUL on Linux vs. Windows platforms has been fixed.  (One octal word in Colossus249 was being assembled incorrectly in Win32; the incorrect octal word was being repaired by a workaround in the makefile, but would actually have executed properly even if it hadn't been repaired.  Now that yaYUL is fixed, the workaround in the Makefile has been removed.)  Also, some variable initializers which did not work properly Linux for PowerPC has been fixed; this error manifested itself in assembly-time error messages, but presumably could have caused incorrect octals as well.
  • Linux PPC:  Virtual AGC now builds and works on Linux for PowerPC (or at least, on Ubuntu 5.04 for PPC).
2005-07-16
  • Mac OS X:  Now builts completely (including yaACA, which hadn't ever been built before on Mac OS X), and partakes of the automatic shutdowns recently put into the Win32 and Linux versions, and is so much more convenient to shut down.  Furthermore, the installation/build instructions have been completely revamped, so the simulation is much more convenient to run, and a little more convenient to build.
  • yaACA:  There had been a bug in which the raw joystick values as received from the driver were being used for yaAGC, without applying yaACA's --yaw, --pitch, and --roll adjustments, or even their default values; for me, this only affected the Win32 platform (with the symptom being that in ATTITUDE HOLD, the thrusters were continually firing to increase yaw), but it has been fixed for all platforms.  The program has been tweaked so that its timing is much more convenient in Mac OS X.  Also, if it does not find a joystick on start-up, it keeps trying until it finds one, so you can plug in the joystick after startup without having to restart the simulation.
2005-07-13
  • MS Windows:  A few days ago I was able to modify the startup scripts (SimLuminary131, etc.) in Linux so that:  a) they don't open so many useless windows; and b) they shutdown all of the Virtual AGC apps and windows when you choose to exit from any one of them.  This is tremendously convenient, and is theoretically possible in Windows XP Pro, but not (apparently) in Windows XP Home, or any other version of Windows.  The facilities for doing process management simply aren't provided in Windows in a form usable by batch files.  So instead, I've written a program (WinAGC.exe) that accomplishes the same thing.  It's a program that simply runs groups of programs, and then shuts down all of those programs when any one of them shuts down.  I've revamped all of the Windows batch files (SimLuminary131.bat, etc.) so that they take advantage of WinAGC.exe.  This should work in any version of Windows, but I've only tried it in Windows 98 (first edition), Windows XP Home, and Windows XP Pro. 
The downside is that you can no longer use any command-line parameters with the batch files.  I've tried to make intelligent choices as to which command-line switches you might want, but if I'm wrong you need to edit one or another of the files SimLuminary131.xeq, SimLuminary131_lite.xeq, SimColossus249.xeq, or SimColossus249_lite.xeq.  (These ".xeq" files contain the lists of files, along with their command-line parameters, that are run by WinAGC.exe.)  Even then, there are some things you can't accomplish, such as running yaAGC or yaAGC in --debug mode.  If you want to do that, I'd suggest setting the environment variable NOWINAGC=yes before running the startup scripts, as this will restore the batch files to their pre-WinAGC glory.

Another downside is that that Allegro and Tcl/Tk are now really requirements rather than options, although I've not had a chance to update the instructions yet.  The reason is that the startup scripts will abort if yaACA and LM_Simulator cannot be run, rather than ignoring it.  (I must say, though, that you really want to run both of these things, although admittedly yaACA isn't of much use without a "3D game controller" --- i.e., a joystick.  Therefore, buy a joystick.)  If you absolutely don't want to run these programs, or cannot for some reason, edit the appropriate ".xeq" file and prefix the yaACA and/or LM_Simulator lines by the character '#' (without quotes, of course).
  • yaAGC, yaAGC, others:  Some fixes have been made that can prevent the CPU utililization from shooting up to very high levels under some circumstances.
2005-07-11
  • MS Windows:  The startup scripts have some experimental improvements that may (in Windows XP Professional only!) allow automatic shutdown of the simulation when any of the apps closes.  I further hope that the scripts continue to work as before in non-XP-Pro versions of Windows.  To activate the new script feature, you need to set the environment variable XPPRO to anything non-blank.  Since I don't have a computer with XP Pro available, I haven't been able to try the new feature out.
  • LM_Simulator:  This is the last version for at least a month, so enjoy now!
    • Fixes a critical bug within DSKY Lite which causes a serious memory problem and therefore the slows down handling the socket data when "Attitude Hold" was activitated. Now LM_Simulator does not fall behind in reading socket data anymore.
    • The simulation of the joystick is very limited jet and just in an experimental status. The steering commands are only recognized when they are along the three axis (Roll, Pitch and Yaw). A combined steering command (e.g. u or v axis) is not yet implemented.  Also, the calculation of the RCS fire time is based on the setting within the "Attitude & Speed Control" window.  The simulation just takes the RCS thruster time and multiplies that time with the joystick amplitude divided by 57.  That means that a full stick deflection takes the selected time as RCS fire time.
2005-07-10
  • LM_Simulator:  
    • Dynamic CPU Load handling.  (It's infinitely more responsive than in the last version, and you can ignore the workaround advice I gave on 2005-07-06.)
    • All RCS parameter and Moment of Inertia factors are configurable within the INI file.
    • The Moment of Inertia and therefore the rotational model are quite near the real thing.  (Data Source: CSM/LM Spacecraft Operational Data Book Volume III Mass Properties.)  Assumptions made:  Moment of Inertia along all three axes is identical (which is obviously not completely true for the real world).  MOI change is stable over the whole LM weight range (which is comparable with real world behavior).
    • It now interoperates with yaACA, so that when you turn on attitude-hold, you can see the digital auto-pilot (DAP) firing thrusters in response to displacement of the rotational hand-controller (RHS).  Of course, if you don't have a 3D joystick, this will be of little value to you.  Also, the connection has not yet been made between the thrust outputs of the CPU and the thrust inputs of the IMU.  In other words, while the IMU can respond to thrust inputs entered into it manually, it will not yet respond to the thrust commands generated by the CPU.  (By the way, turning on ATTITUDE HOLD causes a program alarm 32000---which is a CPU overload---but this is not LM_Simulator's fault.  We'll worry about this problem later.)
  • yaACA:  There were lots of bits in input channel 031 that yaACA was supposed to be setting but was not.  It is now, I hope.
  • yaAGC:  Was incorrectly saving the contents of CM erasables in LM.core rather than CM.core.  In other words, the Colossus simulation would always start up using the Luminary erasables.  This is now fixed.
  • In general:  Virtual AGC has been opening so many windows on your screen, that it's very difficult not only to manage them, but also to make sure you get all of the individual programs closed when you want to exit the simulation.  The startup scripts have now been modified to that in Linux, so that not only are less xterms open, but also closing any one of the applications (like yaDSKY) will also close all of the other applications and windows as well.  I only found out how to do this by accident, and it's awfully convenient!  I don't know how to do this in Windows, but I'm sure I'll figure it out one of these days.  (Of course, if anybody already knows, it would be ever so helpful ....)
  • Mac OS X:  I've noticed that (as usual) the Mac OS X version has become almost impossible to build, and almost intolerable to use.   *Sigh!*
2005-07-09
  • Artemis072:  Banks 6-7 of the octal executable are now available, proofed, and have the correct checksums.
  • yaACA:  Development continued, because LM_Simulator is now at the point where it wants to have a rotational hand-controller (RHC).  I think yaACA is actually complete.
  • yaAGC:  Modified to accept data from yaACA, and to output RHC data for use by LM_Simulator, yaAGS, etc.  Note that LM_Simulator has not yet been modified to take advantage of this stuff.
  • Docs:  Various RHC-related stuff added or modified on the developer page and language-manual page.
2005-07-07
  • yaAGC:  Tweaked a little to restore erasable 010 upward on startup (rather than 020 upward).  Also, most of the machinery has been put in place to allow structural coverage analysis of the executed flight software, but it is not actually working yet.
  • Artemis072:  Banks 4-5 of the octal executable are now available, proofed, and have the correct checksums.
2005-07-06
  • LM_Simulator:  (Stephan continues to be a busy bee.)  This is the first version with a rotation model.  (In other words, rather than adding angular displacements around the pitch/yaw/roll axes, you can apply thrust around the pitch/yaw/roll axes.  Once you start playing with that, it's hard to stop!)  The calculation of the "moment of inertia" by using the LM mass distribution is not yet correctly implemented.  The values used are just experimental.  The calculation of the RCS propellant consumption depends on the RCS impulse length and should be correct within in the current simulation which uses 445N for each thruster and a specific impulse of 2840MS.  The Attitude control uses an impulse length between 0.05 - 1 second.  The CPU usage has popped up again to very high levels in this version, and if you're going to use it I'd suggest not turning on the "output log".  However, the rotational model is so neat to have that I'd be reluctant to recommend not using this version.
  • Artemis072:  Banks 0-3 of the octal executable are now entered, proofed, and have correct checksums.  Half of bank 043 is (and has been) in place and proofed, but there's no way to know if the checksum is okay with only half a bank.
2005-07-05
  • yaAGC:  Now saves the contents of erasable memory when the AGC "powers down", and restores it when the AGC "powers up", to preserve things like pad loads.  I'm sure there are other things that need to be restored that I'm not restoring, or things I'm restoring that I shouldn't be, since it always starts with OPR ERR now.  But we'll work it all out eventually.  For a full explanation (along with available adjustments) see "--dump-time" on the yaAGC page.
  • Artemis072:  Bank 0 of the octal executable has been added and proofed, but there's still a 1-bit error in it somewhere.
  • LM_Simulator (thanks, Stephan):
    • Fuel Flow is calculated by using the specific impulse (3050m/s)
    • The CPU load has been heavily reduced.  (By about 50%.  It's now fast enough to run in Mac OS X 10.2, which before it was not fast enough for.)
    • The simulation initialization values (such as the LM mass) are configurable within the INI file
    • The degree character doesn't show up correctly on some target platforms, and has now been removed from the FDAI/IMU window.
    • Tcl "-smooth" option removed, to allow versions of Tcl/Tk prior to 8.4 to be used.
    • Now the simulation model for the Descent Engine is verified by using the Tsiolkovsky rocket equation:
      DeltaVelocity = Specific Impulse * ln(m0/m1), where m0 = Start Mass and m1 = End Mass
The simulation reaches the correct Delta Velocity of about 2400m/s (about 8000ft/s) after using the complete fuel.  The start values I'm using are obtained from the Lunar Module Wikipidia page and the pad load file.
2005-07-04
  • yaAGC:    Although channel 033 is an input channel, the CPU writes to it from time to time.  Bits 11-15 of the channel are latched inputs, and the act of writing (presumably, independent of the value) resets the latches to 1.  What yaAGC had been doing is to treat the channel as an output channel, which obviously is very different.  This is now fixed.  (Thanks to Markus Joachim and Mark Grant for pointing out the problem.)
  • LM_Simulator:   Now simulates the LM Weight -> Thrust -> Acceleration -> Velocity relationship.  The model does not yet take in consideration the effect of thrust reduction by increased velocity (Rocket Equation).  (Thanks, as usual, to Stephan Hotto.)
  • Colossus 3:   I've had small bits and pieces of Colossus 3 ("Artemis" build 072) in hand for a while, but it was so little that there was no point in mentioning it before.  It looks like much more of it is rolling in now, so I'm adding it to the development snapshot as I convert it to machine-readable form.  Artemis072 is, of course, the AGC flight software for the CM in Apollo 15-17.  (Thanks to D. Thrust for making this available!)  We are adding the core-rope image first (before the source code, that is), so that it will be possible to run the program long before seeing or assembling the source code.  So far, memory banks 2 and 3 are present in the core-rope image and have correct checksums.
2005-07-03
  • yaDSKY & libyaAGC:  Made the formatting of the downlink lists even more flexible, by providing the option of using user-defined functions.  Made use of these to correct a few fields in the downlink lists which have already been completed.  All LM downlink lists are now complete, if not necessarily error-free.  CM downlink lists are barely started.
  • LM_Simulator:
    • PIPA handling integrated. Display of Velocity data (Meter/Second or Feet/Second) within the FDAI.
      • By using the Attitude Simulation Window a velocity increase in Yaw direction (Main Thrust Axis) will be separated into the different PIPA (X,Y & Z) components (one pulse = 0.0585Meter/Second).
      • For example: If the IMU Z-Axis is parallel to the Yaw-Axis then the velocity increase goes directly into the Z-PIPA. To reduce the velocity the LM has to be rolled for 180° to bring the velocity vector in the oposite direction.
    • Some spelling corrected ("to -> too").
    • Socket timeout (from yesterday) removed.
    • A lot of algorithm optimization.
    • The FDAI recognizes now the GIMBAL LOCK.
      • Gimbal Lock reset is possible by "V36E" (AGC Reset) or the Crew Input "IMU Set to 0°"
2005-07-02
  • yaAGC:  My changes yesterday to fix fine-alignment had the side-effect of causing the alignment changes to look very jumpy on the FDAI ball.  The (relative) smoothness has now been put back in.  Also, the coarse-alignment is much more smooth-looking than it had been previously.  More importantly, the optics trunnion & shaft drive is now supported, by means of new fictitious output channels.
  • Stephan has sent a new version of LM_Simulator.  Here are the changes:
    • Workarounds added when we believed the fine-alignment problems were on the LM_Simulator side rather than the yaAGC side have been removed.  (Specifically, the angle-increment value is corrected, and the coordinate transformation has been deactivated.)
    • Drives the IMU to Zero when the "Zero IMU CDU" signal is activated. Now the IMU zeros after V36E (AGC reset) but there are cases where the AGC lefts the signal active. After using the crew button "Zero IMU..." the signal goes back to zero.
    • Drive the IMU only when "Coarse Align Enable of IMU" is activated. This is really an important change, because in the "Attitude Hold Mode" the AGC uses the counters to drive the error needles and the autopilot misalignment. If the IMU was driven in such cases, then the FDAI would jump uncontrollably over a small angle area.
    • Socket Timeout added. If there is a period longer than 2 seconds when no data appears on the socket, then the LM Simulator assumes that the AGC has been terminated. After showing an error message: "Lost connection to yaAGC" the program terminates itself.  (This is a slight problem when yaAGC is run in --debug mode.  We are looking at fixes for that case now.)
    • Attitude & Speed Control has been changed.  (You don't have the same precise level of control over roll, pitch, and yaw as before, but it's much easier to use.)
If I'm not mistaken, this means we're at a nice milestone:  the IMU simulation in LM_Simulator can now be regarded as functional.  (The next level needed will be to feed spacecraft accelerations and rotation into the IMU automatically rather than manually.)

2005-07-01
  • yaAGC:  Well, I was wrong, and there still were fixups that needed to be made in order to get fine-alignment to work.  That fix is made, but there is still a little fix that needs to be made in LM_Simulator to get it all finished.  (The  angles aren't scaled quite right yet.) 
  • yaDSKY & libyaAGC:  I've also done a lot more fixups related to the portability of the downlink-list parser.  The description of how to take advantage of the portability has been added to the developer page.  The LM Coast/Align downlink list is now parsed.
  • Well, we have a discussion group now.  Or at least, the software for a discussion group has been installed and appears to work.  I'll mess with it another day or two, and the let it loose on the world.  I hope that a lot of you---particularly software developers---will join and exchange ideas.
2005-06-30
  • Stephan has sent over a new version of LM_Simulator.  The changes are:
    • FDAI finalized (Z-Axis added)
    • A bug fix for counting.  [To keep the simulated angles equal to those of the AGC there is a need for both an external counter which stores the IMU angles in high resolution and a counter which counts in angle increments of (0.01Deg).  Previously, only the latter was used, leading to large angle misalignments after several attitude changes. Now, there is a synchronization between the counters, which enables a sufficient precision in angle handling.]
  • yaAGC:  Previously, there was no use made of the GYROCMD counter register in gyro torquing during fine-alignment.  Since the GYROCMD register is the central entity in this operation, that pretty much ruined it.  The upshot of this fix is that IMU fine-alignment should now work properly.
2005-06-29
Well, I now like yaDSKY's ability to display downlink lists so much that I've split off that ability from the "--test-uplink" command-line switch, and added it to a new "--test-downlink" command-line switch.  In fact, "--test-downlink" is used by default in the SimLuminary131 and SimColossus249 startup scripts.  Of course, the ability to completely display all downlink lists isn't quite available.  However, the erasable dump downlist is still available, and the AGS initialization/update downlist is complete.
2005-06-28
  • Rewrote a lot of the telemetry-downlink formatting code I added yesterday.  I realized that I could write it in a way that was much more flexible so that even though it is used in yaDSKY's "--test-uplink" mode, it could also be used without change in yaTelemetry or other apps, with mere replacement of a pointer to the function that does the actual output.  In other words, the code is now completely reusable, and independent of the output device.  Consequently, I feel much more enthusiastic about going ahead to do more work on it.
  • Stephan has sent over a new version of LM_Simulator.  Here's a summary of the changes, as I understand them:
    • There are now Roll, Pitch and Yaw commands in the attitude window, which translate into the associated IMU gimbal angle changes.  (Previously, there were X, Y, Z gimbal-angle commands that simply drove the gimbal angles without translation.)
    • There is a kind FDAI ball in the IMU window now, though Stephan points out that "with TCL/TK there is no chance to create a real FDAI ball." (Even so, in my humble opinion, it seems darned good.)
2005-06-27
  • In yaDSKY's "--test-uplink" mode, I now print out a little of the downlink lists in more human-friendly form, but there's just so much data that the effort of making it human-friendly---i.e., printing it with descriptive headings and units, and scaled properly---is enormous.  There are a couple of thousand data values in the complete collection of downlink lists (though, admittedly, with some overlap among the lists).  I don't think I'll do much more of it right now.  I have, however, organized the hooks for doing it into libyaAGC, so the effort isn't entirely wasted, and is potentially reusable by anyone who wants to complete the work.  I'd be more excited about doing it myself, if I knew what the displays on the downlink-telemetry consoles in mission-control were supposed to look like.
  • I have added a couple of new commands (LMSIM and CMSIM) to the yaAGC/yaDSKY INI files.  These commands tell the simulation whether it is supposed to be for an LM or a CM.  (Odd that this hasn't been needed until now, isn't it?)  The downlink lists for the LM and CM aren't distinguishable in some cases without this additional info.  (They would have been distinguishable in real life, because the telemetry downlink hardware external to the CPU would have added this identfying info, I think.)
2005-06-26
  • yaAGC:  The digital uplink has now been implemented.  I had to modify the description of it that I added to the developer page a few days ago, but not by much.
  • yaDSKY:  I've added a new command-line switch, "--test-uplink".  In this mode, yaDSKY emits uplink-data when keys are pressed instead of emitting keycodes to its usual CPU input channel 015.  This mode is very convenient for testing the digital uplink, since the uplink data consists of encoded DSKY keycodes anyhow.  I've noticed that yaAGC is very lazy in updating the DSKY display when receiving uplink data; indeed, it may or may not update the display.  However, in the absence of other data, I assume this is a normal property of the Luminary and Colossus flight software, rather than a bug in yaAGC.  This mode also prints messages when valid downlink data is detected, so I think it's fair to say that both the digital uplink and digital downlink are working properly now.  Note:  If you want to see something keen you can do with this, look at section 2.1.2 on p. 2-8 of the LM GSOP.  Enter V71E on the DSKY (in --test-uplink mode), and proceed from there.
2005-06-25
  • yaAGC:  I now properly handle the DOWNRUPT interrupt request.  The practical upshot of this is that the CPU is now emitting downlink telemetry and/or AEA initialization packets, whereas it was not doing so before.  You can see the downlink in LM_Simulator, but it's just raw data on i/o channels 034 and 035, and so isn't very informative as of yet.
  • I rationalized the startup scripts somewhat.  In particular, an LM_Simulator script is created during installation, and the other scripts (like SimLuminary131) call that script.  This shouldn't matter much to anybody but me, I guess, but it allows yaAGC's --debug switch to be used again with the scripts.  Scripts like SimLuminary131 can have up to three command-line arguments, the first of which is passed (in common) to yaDEDA and yaDSKY, the second one of which is passed to yaAGC, and the third one of which is passed to yaAGS.  Scripts like SimLuminary131-lite have a single optional command-line argument, which is passed directly to yaAGC.   The table below is probably a complete list of the useful ways you can use the command-line options with the scripts.  (Though not shown, the SimColossus249[-lite] scripts work the same way, but obviously without yaAGS and the DEDA.)  If you want to do something trickier, you should probably run the various programs directly rather than relying on the startup scripts.
SimLuminary131
Just run the simulation without options.  yaDSKY will be the DSKY simulation and yaDEDA the DEDA simulation.
SimLuminary131 --half-size
Same, but yaDSKY and yaDEDA will be half-sized.
SimLuminary131 "" --debug
Run the simulation with yaAGC in debug mode.
SimLuminary131 "" "" --debug
Run the simulation with yaAGS in debug mode.
SimLuminary131 --half-size --debug
Run the simulation with yaAGC in debug mode, and yaDSKY/yaDEDA half-sized.
SimLuminary131 --half-size "" --debug
Run the simulation with yaAGS in debug mode, and yaDSKY/yaDEDA half-sized.
SimLuminary131-lite
Just run yaAGC and LM_Simulator (without yaAGS and yaDEDA).  LM_Simulator provides the DSKY simulation.
SimLuminary131-lite --debug
Same, but with yaAGC in debug mode.

2005-06-24
yaAGS:  Finally have a sensible DVP instruction, I think.  (A rational person could still disagree with this assessment, I suppose, so you're still invited to examine the DVP code in aea_engine.c to offer your opinion.)  However, I've noticed some anomalous behavior that I didn't notice before, in that the DEDA will freeze up, or readouts will occur that I can't figure out any way to stop, but it doesn't seem to have anything particularly to do with the DVP instruction.  Typically, this will be readout of address 555, which begins spontaneously, and which I can't turn off.
2005-06-23
Have now worked out the details needed for the digital uplink, and have described them in a new "Fictitious I/O Channel" section on the developer page.  However, I haven't yet implemented it in yaAGC.  (No new new yaAGC features are needed for the digital downlink, though I admit I'm unclear yet on the mechanism used to transfer state vectors between the CMC and LGC.)
2005-06-19
  • Added the "lite" options and scripts, to allow building Virtual AGC without yaDSKY and yaDEDA, and running it instead with the DSKY Lite module from LM_Simulator.
  • More changes to LM_Simulator:
    • --port and --cfg command-line parameters added.
    • A fatal bug was fixed in the socket read routine which increases a counter until eternity in case of no input on the socket, leading to an array overflow for the data input array.
    • Furthermore, I've added the Alarm Codes out of the Luminary Listing because of the alarm simulation capabilities of LM Simulator .
    • FDAI / IMU color corrected
2005-06-17
  • The development snapshot now builds and works in Windows again.  This is thus the first opportunity to really use yaAGS, yaDEDA, and LM_Simulator on that platform.  It does build on Mac OS X, but LM_Simulator seems to run at super-slow speed, and even to slow down yaAGC/yaDEDA to the point where those programs don't work, so I'm not sure what's going on there.
  • LM_Simulator:  Well, Stephan has been a busy little bee.  Here is a list of changes:
  • Blocking behavior of the simulator due to missing data on the socket has been fixed
  • CPU load reduced
  • LM System Input: "IMU Operate with no Malfunction" is now active by starting the program
  • To allow a free configuration (e.g. on/off) of windows or different IP-Addresses to connect to yaAGC an INI-File has been added (lm_system_simulator.ini)
  • The window arrangement and content has been optimized
  • The IMU Coarse Align and IMU Fine Align is implemented, although the last one does not work correctly. (The counter is merely for very small angles quite proportional to the given angle)
  • New FDAI/IMU window to monitor the gimbal angles
  • "Attitude & Speed Control" window to simulate gimbal angle changes has been added
  • Tutorial updated
2005-06-16
yaAGC:  Implemented, I hope, the behavior of counter-registers CDUXCMD, CDUYCMD, CDUZCMD (and associated drive-enable bits in output channel 14) needed for continuing development of the IMU --- in this case, of IMU coarse alignment.  Modified the description on the developer page of the description of channel 14 needed to use this feature, as well as the description of the CDUxCMD registers in the assembly-language manual page.  (Thanks to Stephan Hotto and Markus Joachim for pointing out this problem and describing the fixes.)
2005-06-15
In yaAGS, I've implemented the DVP instruction according to an algorithm sent to me by Julian Webb.  (Thanks, Julian!)  I'm bound to say that there are a number of things that don't make sense about it to me, but it does manage to pass the self-test (which no algorithm I invented was able to do).  Anyone who feels competent to do so is invited to examine the DVP instruction in the function aea_engine of the source file aea_engine.c, and give me your insights on the matter.  Otherwise, though,  yaAGS now passes the built-in self-test (see, for example, p. 115 of Flight Program 8), and may therefore be cautiously considered as working.  Probably there are plenty of problems with it that will surface slowly in the coming months.

In case it wasn't clear from the comments above, the complete basic suite of Abort Guidance System software is now available and (hopefully) working, in Linux:
  • CPU emulator (yaAGS)
  • Data-entry and display emulation (yaDEDA)
  • Flight software source code and executables (Flight Program 6 and Flight Program 8)
  • Assembler (yaLEMAP)

2005-06-14
  • In yaAGS, fixed some problems with the LRS instruction, and continued fixing the DVP instruction.  The DVP instruction is better than it was before, but it's still not totally fixed.
  • The SimLuminary131 script now runs not only yaAGC, yaDSKY, and LM_Simulator, but now runs yaAGS and yaDEDA as well.  It's pretty impressive to see them all running at once.   I still haven't attempted to run LM_Simulator, yaAGS, or yaDEDA (or even to build them) in Windows or Mac OS X yet, so I'm referring only to Linux here.
  • Added a very small tutorial for yaAGS/yaDEDA to the "quick start" section of the home page.
2005-06-12
  • In yaAGS, fixed problems forming double-precision operands in general, and sign-generation problems with the LRS instruction.  Fixed the handling of overflow in instructions "LLS 0" and "ALS 0".  The DVP instruction is really messed up with negative divisors, and I have no clue as to what's going on with it.  However, yaAGS can now communicate with yaDEDA, and the CPU emulation works well enough that you can do things like looking at the results of the self test.  (CLR 4 1 2 READOUT, for anyone who's interested.  The displayed code, +30000, means a "logic error", such as a bad DVP instruction.)
  • In yaAGC, fixed the handling of the DINC unprogrammed sequence, so that POUT, MOUT, and ZOUT signals are output.  (Thanks to Stephan Hotto for pointing out the problem.)
  • Also, Stephan has provided a new LM_Simulator, with gyro-tracing functionality.
2005-06-11
  • In yaAGC, implemented a fictitious output channel 0177 (see the developer page) which can be used for simplifying implementation of emulated gyros.
  • In yaAGS, added the DISASSEMBLE, COUNTS, and PATTERN commands for debug-mode.  Fixed the TIX instruction, which was overwriting memory and causing the problem mentioned two days ago.  But now I find that there is a fundamental problem in the yaAGS/yaDEDA interaction through the socket interface; yaDEDA only transmits data to yaAGS upon a strobe from yaAGS, but there is not enough time between the strobe and the time the flight program checks the shift register for the data to be exchanged.  Resolving this will take some thought.
  • In the development snapshot, added a version of Stephan Hotto's LM_Simulator program which he has wrapped as a Windows executable (so that you don't have to install Tcl/Tk to make it work).
2005-06-09
Lots of work on yaAGS, but mainly in the form of improving debugging (fixing i/o-channel addresses, editing of memory locations, backtraces, etc.).  Somehow yaAGS executes an undefined instruction in displaying to the DEDA, but I haven't figured out yet how that happens.
2005-06-08
"Finished" coding yaAGS.  It doesn't work, of course.  I'll start figuring out why tomorrow.
2005-06-07
  • Various corrections to yaAGS.
  • Correction of DEDA shift-register bit-ordering in yaDEDA and yaAGC.
  • Stephan Hotto has sent us yet another update to LM_Simulator.  Here are the changes, as described by Stephan:
Fixes:
  • Unknown unprogrammed sequences as output of the AGC/AGS are now handled (hopefully ;-))
  • Improvement of the DSKY Lite by using real 7-Segment numbers
  • Remove of a trace (inserted for development) of an internal timer which would fill up the Log-Out-Window
  • Crew Button handling (AOT, Descent) corrected
  • DSKY PRO button is now working
  • Time printouts removed
  • DSKY Labeling and Number Size as well as separation lines corrected and added.
  • Most important, the program now merely recognizes AGC data packages with the following signature: 00... 01... 10... 11... So, the AGS packets shouldn't have a negative impact any longer.
RHC does not work yet because beside setting the associated input bit, a counter must be increased proportional to the stick angle.
2005-06-06
  • Stephan Hotto has sent us a new version of LM_Simulator.  Here's what he has to say about it:
Bug Fixes:
  • AGC Output has been completely revised. Now I'm using text labels which will show the different state of the signals.
  • LM System Signals and Crew Buttons corrected. I'm still unsure in some cases.
New Features:
  • DSKY LITE is a very simple (awful graphics) but full functioning DSKY. Due to your extensive description of the interface it was quite simple to implement.
  • IMU Simulation has been corrected and accelerated. The angles are now running between 0° and 360° as noted by the AGC.
  • Simple RHC and THC as well as AOT buttons added
  • Noun & Verbs and first steps of the Tutorial added.
The "DSKY LITE" is, I think, remarkably good, in spite of Stephan's badmouthing of the graphics.
2005-06-05
  • Corrected polarity and bit positioning of AGS "input discretes" on the developer page, in the yaDEDA program, and in "yaAGC --debug-deda".
  • yaAGS is coming along very well.  I'm now trying it in --debug mode, and fixing bugs in some of the instruction set.  Shouldn't be too much longer before it's ready to use with yaDEDA.
2005-06-04
  • Lots more work on yaAGS.  Getting close to being ready to try out.
  • Fixed up the GUI in yaDEDA so that it is consistent in sizing with yaDSKY.  (Before, I had stupidly made it bigger.)  Should now work in Mac OS X, though I haven't tried it yet.
2005-06-03
On the links page, updated the status of the integration of Virtual AGC with the Orbiter simulator again, after receiving some additional info from Markus Joachim.
2005-06-02
  • Removed the CVS subdirectories and some symbolic links from future development snapshots.  (Thanks to Markus Joachim for pointing them out to me.)
  • On the links page, updated the status of the integration of Virtual AGC with the Orbiter simulator.  (Hint:  It's going great, and there is now a Sourceforge project for it, again thanks to Markus Joachim.)
  • There's now a skeleton of a yaAGS program.  It doesn't do much yet other than to allow yaDEDA to connect to it, load the selected flight program, and keep accurate time, and execute a few types of instructions.  Lots of instructions are implemented, but they're all of a rather simple nature.  (But who knows if they're implemented correctly?  I haven't quite figured out yet how I'll be testing these things.)
  • Stephan Hotto's LM_Simulator program is now included in the installation when doing 'make install' (i.e., building from source).  The SimLuminary131 script runs LM_Simulator in addition to yaAGC/yaDSKY.  You need to have Tcl/Tk installed to take advantage of this, but if you don't nothing bad will happen.  Incidentally, Stephan has given me a list of a few problems he's found so far.  I won't bother to put these in the buglist quite yet; the LM_Simulator program is so new that it's in rapid flux.  After it has settled down some, then I'll start recording bugs for it.
Note:  This big bunch of changes isn't without cost.  This stuff likely won't build (or won't build completely) on Windows and Mac OS X.  I'll fix this up soon, but probably not until I'm happy with yaAGS.  Therefore, Windows and Mac OS X users will probably want to stick with the binary packages, use an earlier source package, or else just take your chances.
2005-05-31
  • On the developer page:  Added some yaAGS-specific functions to the API, and on a global basis made the applicability of the API's library functions (yaAGC vs. yaAGC, CPU vs. peripheral) much clearer.  Also, added a section on the yaAGS core-image file format.
  • On the yaOtherStuff page, corrected a couple of links (thanks to Fabrizio Bernardini).
  • On the download page, added some additional info about the Mac OS X binary tarball.
  • yaDEDA seems to be working, as near as I can understand its operation at present.  Of course, there's no yaAGS to operate it, but I added a command-line switch to yaAGC (--debug-deda) that seems to provide a pretty good test.
2005-05-30
  • On the yaOtherStuff page, I've added a "contributed code" section because the development snapshot now contains a nifty i/o-channel monitor (on it's way to becoming an IMU simulation) contributed by Stephan Hotto, called LM_Simulator.  It's a work in progress, but is quite useful as it stands.
  • The AEA/DEDA interaction is now covered in much more detail on the developer page.  In fact, there is an entire section devoted to it.
  • Scans of Delco's quick-reference cards for Apollo 15 Luminary 1E are now available on the links page, thanks to Fabrizio Bernardini.
  • yaDEDA is now mostly working.  With luck I can finish it up tomorrow.  yaAGS doesn't exist yet, but because the DEDA is smarter than the DSKY, you can actually use it and see a lot of what it does even without yaAGS.  (Whereas yaDSKY is completely useless without yaAGC.)  Refer to the yaAGS page for more detail.
2005-05-29
  • More noodling with the yaDEDA program ...
  • The yaAGS page has been pepped up with additional verbiage, such as:
    • More circumstantial evidence that the two missing pages of FP6 have been reconstructed correctly.  I thought the evidence was pretty good before, but it seems conclusive now.
    • A table of known versions of the AGS flight program.
    • ... and more.
2005-05-28
  • There is now a skeleton form of the yaDEDA program.  So far it really just shows what the GUI will be like, but it does have a working socket interface (in the sense that it can connect to a server), though it doesn't know what to do with any of the information it receives on the socket interface.  I haven't made the mods yet that would allow it to build in Windows, nor have I checked that it still builds in Mac OS X.
  • Also, there's some great news.  Thanks to Allan Klumpp, it appears that Luminary 1A 099 (Apollo 11) and Luminary 1D 209 (Apollo 15-17 we think) will soon be available.  Now, I don't know whether "soon" will be two weeks, two months or two years, as I don't yet have access to these materials.  But it's still great.  Yay, Allan!  (There are other people to thank for this as well, but I'll save some of my praises for when the listings are actually available.)  Any of you folks out there who have Luminary or Colossus listings you've been hoarding had better step forward soon if you want to get any karma points out of this deal!
2005-05-26
Allan Klumpp has told me that there is a descrepancy between the the software version quoted on the Luminary page for Apollo 15-17 vs. his personal recollections and in-hand documentation.  I've added notes to that effect, along with disclaimers on the Colossus and Luminary pages to indicate that I'm not certain how accurate the software configuration information is.
2005-05-24
On the yaAGS page, added a link to the complete LM/AGS Design Survey document at klabs.org, whereas only the block diagrams from that doc are available locally here on the Virtual AGC site.
2005-05-23
Minor corrections on developer and language-manual pages.  And a few additions to the faq page.
2005-05-21
Finished up the API documentation.  Probably still needs a little work, such as verifying the sample programs listed, but looks pretty good.
2005-05-18