Giter Club home page Giter Club logo

virtualagc's Introduction

Virtual Apollo Guidance Computer

Build status

Travis CI (Linux)
travis-image

The Apollo spacecraft used for lunar missions in the late 1960's and early 1970's was really two different spacecraft, the Command Module (CM) and the Lunar Module (LM). The CM was used to get the three astronauts to the moon, and back again. The LM was used to land two of the astronauts on the moon while the third astronaut remained in the CM, in orbit around the moon.

Each of the spacecraft needed to be able to navigate through space, with or without the assistance of the astronauts, and therefore needed to have a "guidance system". The guidance system was developed by MIT's Instrumentation Lab, now an independent company known as the Charles Stark Draper Laboratory.

An important part of the guidance system was the Apollo Guidance Computer—or just "AGC" for short. On any given Apollo mission, there were two AGCs, one for the Command Module, and one for the Lunar Module. The two AGCs were identical and interchangeable, but they ran different software because the tasks the spacecraft had to perform were different. Moreover, the software run by the AGC evolved over time, so that the AGC software used in later missions like Apollo 17 differed somewhat from that of earlier missions like Apollo 8.

Considered just as a computer, the AGC was severely underpowered by modern standards.

Other Repository Branches

Since you are looking at this README file, you are in the "master" branch of the repository, which contains source-code transcriptions of the original Project Apollo software for the Apollo Guidance Computer (AGC) and Abort Guidance System (AGS), as well as our software for emulating the AGC, AGS, and some of their peripheral devices (such as the display-keyboard unit, or DSKY).

Other branches of the repository often contain very different files. Here are some of the more-significant branches which differ in that way from the master branch:

  • gh-pages: HTML files and imagery for the main Virtual AGC Project website. Contains the complete website, exclusive of the large library of scanned supplementary documentation and drawings.
  • mechanical: 2D CAD files and 3D models in DXF and STEP formats, intended to replicate the original AGC/DSKY mechanical design.
  • scenarios: Pad loads or other setup for mission scenarios.
  • schematics: CAD transcriptions in KiCad format of the original AGC/DSKY electrical design.
  • wiki: Wiki files associated with the repository.

AGC Specifications

  • 2048 words of RAM. A "word" was 15 bits of data—therefore just under 2 bytes (16 bits) of data—and so the total RAM was just 3840 bytes.
  • 36,864 words of read-only memory, equivalent to 69,120 bytes.
  • Maximum of about 85,000 CPU instructions executed per second.
  • Dimensions: 24.250"×12.433"×5.974" (61.595cm×31.580cm×15.174cm).
  • Weight: 70.1 pounds (31.8kg).
  • Power supply: 2.5A of current at 28V DC
  • Real DSKY.

It is occasionally quipped—with perhaps greater wit than insight—that the AGC was more like a calculator than a computer. But to say this is to grossly underestimate the AGC's sophistication. For example, the AGC was multi-tasking, so that it could seemingly run multiple programs simultaneously.

Another important part of the guidance system was the Display/Keyboard unit—or just "DSKY" for short. The AGC by itself was simply a box with electrical connections, without any built-in way for the astronaut to access it. The DSKY provided the astronaut with an interface by which to access the AGC.

The Lunar Module had a single DSKY, positioned between the two astronauts where it could be operated by either of them. The Command Module actually had two DSKYs. One of the CM's DSKYs was only the main control panel, while the other was positioned near the optical equipment used to mark the positions of stars or other landmarks.

DSKY Specifications

  • Dimensions: 8.124"×8.000×6.91" (21.635cm×20.320cm×17.551cm)
  • Weight: 17.8 pounds (8.1kg)

Perhaps the most important part of the guidance system was the Inertial Measurement Unit—or just "IMU" for short. The IMU continuously kept track of the acceleration and rotation of the spacecraft, and reported this information back to the AGC. By mathematically processing this data, the AGC could know on a moment-by-moment basis the orientation and position of the spacecraft.

What this project is for

This repository is associated with the website of the Virtual AGC project, which provides a virtual machine which simulates the AGC, the DSKY, and some other portions of the guidance system. In other words, if the virtual machine—which we call yaAGC—is given the same software which was originally run by the real AGCs, and is fed the same input signals encountered by the real AGCs during Apollo missions, then it will respond in the same way as the real AGCs did.

The Virtual AGC software is open source code so that it can be studied or modified. The repository contains the actual assembly-language source code for the AGC, for as many missions as we've been able to acquire, along with software for processing that AGC code. Principal tools are an assembler (to create executable code from the source code) and a CPU simulator (to run the executable code), as well as simulated peripherals (such as the DSKY). Similar source code and tools are provided for the very-different abort computer that resided in the Lunar Module. Finally, any supplemental software material we have been able to find or create for the Saturn rocket's Launch Vehicle Digital Computer or for the Gemini on-board computer (OBC) are provided, though these materials are minimal at present.

Virtual AGC is a computer model of the AGC. It does not try to mimic the superficial behavioral characteristics of the AGC, but rather to model the AGC's inner workings. The result is a computer model of the AGC which is itself capable of executing the original Apollo software on (for example) a desktop PC. In computer terms, Virtual AGC is an emulator. Virtual AGC also provides an emulated Abort Guidance System (AGS) and (in the planning stages) an emulated LVDC. Virtual AGC is a catch-all term that comprises all of these.

The current version of the Virtual AGC software has been designed to work in Linux, in Windows XP/Vista/7, and in Mac OS X 10.3 or later (but 10.5 or later is best). It also works in at least some versions of FreeBSD. However, since I personally work in Linux, I have the most confidence in the Linux version.

You can read about this project in more detail here: http://www.ibiblio.org/apollo/index.html

What this project is not for

Virtual AGC is not a flight simulator, nor a lunar-lander simulator, nor even a behavioral simulation of the Apollo Lunar Module (LM) or Command-Module (CM) control panels. (In other words, if you expect a realistic LM control panel to suddenly appear on your computer screen, you'll be disappointed.) Virtual AGC could be used, however, as a component of such a simulation, and developers of such software are encouraged to do so. Indeed, some developers already have! See the FAQ for more information: http://www.ibiblio.org/apollo/faq.html

Requirements

Caution: The requirements in this README may not be fully up-to-date vs the official ones listed on the Virtual AGC website. You are advised to consult the website.

  • Tcl/Tk is required for all platforms.

Linux

  • Requires Fedora Core 4 or later.
  • Requires Ubuntu 7.04 or later.
  • Requires SuSE 10.1 or later.
  • Known to work on Raspbian (Raspberry Pi) 2016-05-27.
  • et, presumably, cetera.
  • 32 and 64-bit systems have been tested successfully.
  • The X-Window system, xterm, and gtk+ libraries must be installed.
  • You will need the normal gcc C/C++ compiler toolchain, as well as developer packages ("dev" or "devel") for wxWidgets, ncurses and SDL.

On Fedora 22 or later you may encounter that the wxWidgets doesn't have the wx-config but the wx-config-3.0 utility as well as the wxrc-3.0 versus wxrc. Just create a symbolic link for wx-config and wxrc respectively

Windows

  • Requires XP or later. 32-bit systems have been tested successfully.
  • Vista and Windows 7 may need workarounds. For example, on the Windows platform it is expected that the Tcl/Tk installation program will create a file called wish.exe but on Windows Vista the installation program creates a file called wish85.exe. This prevents certain features of Virtual AGC from working. The workaround is to duplicate the file c:\tcl\bin\wish85.exe and call the duplicate c:\tcl\bin\wish.exe.
  • Windows 98 or prior are known not to work. Windows 2000 has not been tested.
  • You will need the MinGW compiler with the options selected - if offered - of including g++ compiler and make.
  • You will also need the Msys environment, wxWidgets 2.8.9 or above, POSIX Threads for Windows, GNU readline for Windows and the regular-expression library from MinGW called libgnurx.

Mac OS X:

  • Requires 10.4 and later for Intel or PowerPC
  • 10.2 or prior are known not to work.

FreeBSD:

  • Requires FreeBSD 7.2 or later.
  • Requires PC-BSD 7.1 or later.
  • You will need to install wxWidgets 2.8.9, GNU readline 6.0 into /usr/local.
  • libSDL must be installed

OpenSolaris

  • Requires OpenSolaris 0811.
  • The code is only confirmed to partially work on this platform.
  • You will need SUNWgnome-common-devel, SUNWGtk, SUNWxorg-headers, FSWxorg-headers, SUNWncurses, SUNWtcl, SUNWtk and SUNWlibsdl
  • You will also need GNU readline 6.0, wxWidgets 2.8.9 (with configure --disable-shared), Allegro 4.2.2 (with "configure --enable-shared=no --enable-static=yes") and to put /usr/local/bin and/or /usr/local/bin/wx-config linked into your PATH.

WebAssembly

  • wasi-sdk version 16 provides a WebAssembly toolchain (consisting of the compiler clang from the LLVM project, and the C/C++ standard library wasi-libc that can compile to WASI system calls).

More information at http://www.ibiblio.org/apollo/download.html#Build

Building the Virtual AGC software

Caution: The instructions in this README may not be fully up-to-date vs the official ones listed on the Virtual AGC website. You are advised to consult the website.

Linux

These instructions relate specifically to building from source as of 2016-08-07 on 64-bit Linux Mint 17.3. I'm sorry to have to make them so specific, but hopefully they are easily adapted to other Linux environments. Alternate build instructions (for example, for Raspberry Pi) may be found at http://www.ibiblio.org/apollo/download.html.

You will probably have to install a variety of packages which aren't normally installed. I found that I had to install the following, which were all available from the standard software repositories (in Linux Mint, anyway):

  • libsdl1.2-dev
  • libncurses5-dev
  • liballegro4.4-dev or liballegro4-dev
  • g++
  • libgtk2.0-dev
  • libwxgtk2.8-dev

To build, simply cd into the directory containing the source and do:

make

Note:

  • Do not configure and do not make install. While there is a configure script provided, it is presently used only for setting up builds of a couple of now-obsoleted programs, and it does not matter whether you run it or not nor whether it succeeds or fails. If the build does not complete because of a difference when comparing the bin files then you can rebuild with make -k to keep going. This however might mask other issues.

  • Do not parallelise make, i.e. do not run make -j$(nproc). This will prevent copying of files to correct places.

The build results can be found at VirtualAGC/temp/lVirtualAGC/, which contain the binaries and required resources in the correct paths. The VirtualAGC binary can be run at VirtualAGC/temp/lVirtualAGC/bin/VirtualAGC.

To match the default setup of the installer program execute the following:

mv VirtualAGC/temp/lVirtualAGC ~/VirtualAGC

You can make a desktop icon called Virtual AGC that links to VirtualAGC/bin/VirtualAGC. The image normally used for the desktop icon is found at VirtualAGC/bin/ApolloPatch2.png.

If you try to use the ACA simulation (joystick) and it doesn't work you can find some information on configuring it here: http://www.ibiblio.org/apollo/yaTelemetry.html#Joystick_configuration_for_use_with_the

Windows

Run Msys to bring up a command shell and enter your home directory.

Install the SDL library with this command:

make install-sdl prefix=/usr/local

All software needed to build Virtual AGC will be installed under /usr/local, so eventually it will be populated with sub-directories such as /usr/local/bin, /usr/local/include, /usr/local/lib, and so on. The Virtual AGC makefiles are hard-coded to assume these installation locations. Note, the Virtual AGC binaries you are going to create are not installed under /usr/local.

At present, Virtual AGC binary packages are always built with wxWidgets 2.8.9, so 2.8.9 is a safe choice. Unpack the tarball in your home directory, 'cd' into the directory this creates, and then do ./configure, make, and make install. The configure step will accept various command-line options that select unicode vs. ansi, static linking vs. dynamic linking, etc., but the default options seem to work fine.

Install POSIX Threads for Windows ("pthreads"). You can do this by unpacking the source tarball, 'cd' into the directory it creates, then run the command make clean GC-inlined. This creates various files that you should copy into /usr/local as follows: copy \*.dll into /usr/local/bin; copy \*.h into /usr/local/include; copy the single libpthread\*.a file created into /usr/local/lib and rename it libpthread.a.

Install GNU readline for Windows. You should find zipfiles of both binaries and developer files are available for download. They should both be downloaded and unpacked into /usr/local. (I.e., each zipfile contains directories like bin/, include/, lib/, and so on, and we want these to be merged into /usr/local/bin/, /usr/local/include/, etc.)

Install a regular-expression library. The MinGW project has a "contributed" regex library ("libgnurx") that you can use. Download both the bin and dev tarballs and unpack them into /usr/local.

If all of this was done correctly you can build the Virtual AGC as follows:

Unpack the development tarball in your home directory:

tar -xjvf yaAGC-dev-YYYYMMDD.tar.bz2

Build it:

make -C yaAGC WIN32=yes

On Windows 7 (but not on XP) it is also necessary to copy c:\MinGW\bin\mingwm10.dll to yaAGC/VirtualAGC/temp/lVirtualAGC/Resources/.

This will create a directory yaAGC/VirtualAGC/temp/lVirtualAGC/ which is the "installation directory". This directory is relocatable and need to remain within the Msys environment so you can move it wherever you like. Regardless you really need to create a desktop icon in order to run the program. The desktop icon should point to lVirtualAGC\bin\VirtualAGC.exe as the executable, and should use a "starting directory" of lVirtualAGC\Resources. The graphic normally used for the desktop icon is ApolloPatch2.jpg in the lVirtualAGC\Resources directory.

Mac OS X

From the command line unpack the development-snapshot tarball as follows:

tar --bzip2 -xf yaAGC-dev-YYYYMMDD.tar.bz2

Get the Terminator application's dmg file: https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/jessies/terminator-26.159.6816.zip

Open the Terminator dmg file and drag the Terminator application to the working directory in which you created yaAGC/ above.

From a command line in that working directory, make a tarball from Terminator.app:

tar -cjvf Terminator.app.tar.bz2 Terminator.app

Once you have the tarball, you can delete the Terminator app and its dmg file.

From the working directory (not from within the yaAGC/ directory) build Virtual AGC:

make -C yaAGC MACOSX=yes

In the folder yaAGC/VirtualAGC/temp/ you will now find the VirtualAGC application.

Drag the VirtualAGC application from yaAGC/VirtualAGC/temp/ to the desktop.

FreeBSD

From the command line unpack the development-snapshot tarball as follows: tar --bzip2 -xf yaAGC-dev-YYYYMMDD.tar.bz2

After unpacking there will be a new directory called yaAGC. To build the program:

gmake FREEBSD=yes

Do not configure and do not gmake install.

You will find that this has created a directory yaAGC/VirtualAGC/temp/lVirtualAGC/.

To match the default setup of the installer program execute the following:

mv yaAGC/VirtualAGC/temp/lVirtualAGC ~/VirtualAGC

You can make a desktop icon called Virtual AGC that links to /VirtualAGC/bin/VirtualAGC. The image normally used for the desktop icon is found at /VirtualAGC/bin/ApolloPatch2.png.

If you try to use the ACA simulation (joystick) and it doesn't work you can find some information on configuring it here: http://www.ibiblio.org/apollo/yaTelemetry.html#Joystick_configuration_for_use_with_the

Solaris

Unpack the Virtual AGC snapshot tarball:

tar --bzip2 -xf yaAGC-dev-YYYYMMDD.tar.bz2

Open the yaAGC/ directory and build:

make SOLARIS=yes

Do not configure and do not gmake install.

You'll find that this has created a directory yaAGC/VirtualAGC/temp/lVirtualAGC/.

To match the default setup of the installer program execute the following:

mv yaAGC/VirtualAGC/temp/lVirtualAGC ~/VirtualAGC

You can make a desktop icon called Virtual AGC that links to /VirtualAGC/bin/VirtualAGC. The image normally used for the desktop icon is found at /VirtualAGC/bin/ApolloPatch2.png.

Unfortunately the ACA simulation (joystick) programs do not work in this environment.

WebAssembly

The Virtual AGC build scripts assume that wasi-sdk is installed at the filesystem location /opt/wasi-sdk. You can customize this path by setting the environment variable WASI_SDK_PATH to /path/to/wasi-sdk when running make.

For all WebAssembly builds, set the environment variable WASI to yes when running make.

Currently, only the following Virtual AGC components can be compiled for the WebAssembly target:

yaAGC

If you have any leftover build artifacts in the yaAGC directory, run make clean in it.

To build, simply cd into the root directory and do:

WASI=yes make yaAGC

This will produce yaAGC.wasm (roughly 32 kB). You could use tools like wasm-opt (from the binaryen package) and wasm-strip (from the wabt package) to optimize the code and reduce its size.

To additionally get a text representation of the generated WebAssembly code, you could use the tool wasm2wat (from the wabt package).

Endnotes

This Readme was created from information contained in the main project website here: http://www.ibiblio.org/apollo/index.html

The project website was created by Ronald Burkey. The first version of this Readme was compiled by Shane Coughlan.

virtualagc's People

Contributors

bassosimone avatar captainswag101 avatar cashelcomputers avatar cloudynetwork avatar ehdorrii avatar erentar avatar f0n avatar hhirsch avatar irvankrantzler avatar jamierocks avatar jimlawton avatar kociak1984 avatar michaelfranzl avatar nadalle avatar navistartronic avatar niklasva avatar ohommes avatar piturnah avatar quincylarson avatar rburkey avatar rburkey2005 avatar schwarzy1 avatar scivision avatar shanecoughlan avatar shirriff avatar smithery1 avatar thewonderidiot avatar thomaspaulin avatar thymonl avatar wopian avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

virtualagc's Issues

Add support for the (un)display command

To enhance the command line debugging experience the display command should
be supported. This will enable printing of registers and variables and will
allow for a configuration similar to the original proprietary debug
interface that printed the register values.

Original issue reported on code.google.com by [email protected] on 25 Jun 2008 at 11:31

Add the gdb disassembly (disas) command support

Add the disassemble command and its alias disas. Support the default no arg
support, the single argument and the range dump support.

Example:

(agc) disas                                  
Dump of assembler code from 0x25f9 to 0x2602:
0x25f9 <STARTSUB+2>:    CA      4672         
0x25fa <STARTSUB+3>:    TS      0026         
0x25fb <STARTSUB+4>:    AD      7715         
0x25fc <STARTSUB+5>:    TS      0027         
0x25fd <STARTSUB+6>:    AD      7716         
0x25fe <STARTSUB+7>:    TS      0030         
0x25ff <STARTSB2+0>:    CA      3163         
0x2600 <STARTSB2+1>:    EXTEND               
0x2601 <STARTSB2+2>:    WAND    011          
End of assembler dump.                       


Original issue reported on code.google.com by [email protected] on 2 Jul 2009 at 9:59

Floating point exception in yaAGC.

Hello, I'm zxMarce, and I have a problem I think you may help me overcome.
I installed VirtualAGC version 20100220 under GNU Ubuntu Linux 12.04.1 in my 
home folder. I made two installs on two different machines, one is a physical 
laptop (2GB RAM), the other is a VirtualBox virtual machine (768MB RAM).

Both GUIs fail with the same symptoms: No matter the modules/modes chosen, when 
the Run button is clicked, the selected support modules (DSKY, Status, 
Telemetry, etc) start up and appear for 3-5 seconds and then everything shuts 
down and I get the main Virtual AGC screen back to select other emulation 
parameters.

When resorting to the terminal, it seems yaAGC has a problem. In order to see 
if the Luminary binaries are to be blamed I tried running with both binaries 
supplied (099 and 131) and even a fake, non-existing version 999 (not even the 
directory for Luminary 999 exists in my environment).

I get the following "Floating point exception (core dumped)", on all three 
Luminary versions I tried (virtual machine tests shown, physical laptop throws 
the same exceptions):

user@vmachine:~/VirtualAGC/Resources$ ../bin/yaAGC 
--core="source/Luminary131/Luminary131.bin" --port=19797 --cfg=LM.ini
Apollo Guidance Computer simulation, ver. 20100220, built Feb 20 2010 11:03:52
Copyright (C) 2003-2009 Ronald S. Burkey, Onno Hommes.
yaAGC is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Refer to http://www.ibiblio.org/apollo/index.html for additional information.
Floating point exception (core dumped)

user@vmachine:~/VirtualAGC/Resources$ ../bin/yaAGC 
--core="source/Luminary099/Luminary099.bin" --port=19797 --cfg=LM.ini
Apollo Guidance Computer simulation, ver. 20100220, built Feb 20 2010 11:03:52
Copyright (C) 2003-2009 Ronald S. Burkey, Onno Hommes.
yaAGC is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Refer to http://www.ibiblio.org/apollo/index.html for additional information.
Floating point exception (core dumped)

user@vmachine:~/VirtualAGC/Resources$ ../bin/yaAGC 
--core="source/Luminary999/Luminary999.bin" --port=19797 --cfg=LM.ini
Apollo Guidance Computer simulation, ver. 20100220, built Feb 20 2010 11:03:52
Copyright (C) 2003-2009 Ronald S. Burkey, Onno Hommes.
yaAGC is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Refer to http://www.ibiblio.org/apollo/index.html for additional information.
Floating point exception (core dumped)

The command line for yaAGC was shamelessly "borrowed" from the 'simulate' 
script in 'VirtualAGC/Resources'.
If you need anything else besides the above supplied data, please don't 
hesitate to ask me. I think this is a great program.

TIA,
zxMarce.

Original issue reported on code.google.com by [email protected] on 2 Oct 2012 at 11:27

Replace "files" command with "info sources"

The equivalent of the classic "files" command in gdb is the "info sources"
command. Normally the gdb command does not support pattern matching like
"files" does however since the feature exists in the classic interface the
info sources should be extended with this same capability; This means that
a command like: "info sources time" will return all the sources for which
symbols are read that have "time" in their file name.

Original issue reported on code.google.com by [email protected] on 15 Apr 2009 at 3:06

Use "classic" yaAGC nodebug behavior when --core switch is used

Although the --core switch is also used by gdb usually one would pass the
core (i.e. resume image just as the second argument) For that reason we
should stick with the --core to pass the agc ropes-images and use this as a
detection to determine that the agc is to be started in classic run mode
and not debug as is desired in gdb compatibility.


Original issue reported on code.google.com by [email protected] on 4 Apr 2009 at 1:18

Transcribe INPUT/OUTPUT CHANNELS (p.26)

Transcribe the scans for the INPUT OUTPUT CHANNELS log section into its source file. This section constitutes page 26.

This section has a was eventually merged into Luminary 099's ERASABLE ASSIGNMENTS section.
It's only 12 lines long, and most can probably be taken from the Luminary file.

Reduced quality scans can be found here. The original quality scans are available at the Internet Archive page for Aurora. Note that in both cases, the page numbers specified on this ticket are those printed on the original pages, not those in the filenames. The numbers will be close, though, so you should be able to find them pretty quickly. The start of the log section should be fairly obvious.

Add the option --directory=DIR to allow AGC sources to be in other locations

It would be nice to have the command line option --directory=DIR for yaAGC
to allow the sources to be located in a different place. This will allow
the original sources to be managed in a user specified way and still enable
debugging with the sources.

After this change, the yaCode contained directories can be packaged and
released separately from the binary build (e.g.
virtualagc-luminary-131-20090301.tar.bz2)


Original issue reported on code.google.com by [email protected] on 31 Mar 2009 at 2:46

Program alarm error from LGC during descent and ascent.

There is still a program alarm happening during descent and also ascent. It's a 401 and doesn't seem to do any harm and other than the 1210 alarm it also doesn't lock you out of the DSKY. Here the alarm data:

V05 N08
R1: 3757
R2: 60066

No attitude in gimbal lock is commanded at all, so a 401 alarm really shouldn't happen. This seems more like a Virtual AGC problem than the 1210 alarm #50 , which was pretty much 99% a NASSP problem.

Transcribe FRESH START AND RESTART (pp. 151-159)

Transcribe the scans for the FRESH START AND RESTART log section into its source file. This section ranges from pages 151 to 159.

This section has a corresponding log section in Luminary 099. There's overlap, but also a lot of differences. I recommend starting with the Luminary code, but a lot will need to be changed.

Reduced quality scans can be found here. The original quality scans are available at the Internet Archive page for Aurora. Note that in both cases, the page numbers specified on this ticket are those printed on the original pages, not those in the filenames. The numbers will be close, though, so you should be able to find them pretty quickly. The start of the log section should be fairly obvious.

Transcribe ASSEMBLY AND OPERATION INFORMATION (pp. 1-6)

Transcribe the scans for the ASSEMBLY AND OPERATION INFORMATION log section into its source file. This section ranges from pages 1 to 6.

This section has a corresponding log section in Luminary 099. There's overlap, but it all looks slightly different, so many lines will at least need small changes (OCTAL->OCT, etc.) I recommend starting with that file as a baseline.

Reduced quality scans can be found here. The original quality scans are available at the Internet Archive page for Aurora. Note that in both cases, the page numbers specified on this ticket are those printed on the original pages, not those in the filenames. The numbers will be close, though, so you should be able to find them pretty quickly. The start of the log section should be fairly obvious.

LGC Program Alarms

(On behalf of @indy91) There's a 1210 alarm when the LGC is first looking for landing radar data (probably) and the DSKY blanks about once per guidance cycle. Late in P63 the frequency of the DSKY blanks increases. Then in early P64 it first doesn't have new program alarms (probably while the LGC waits for the LR to move to position 2) and then enough program alarms and DSKY blanks that you barely get to see the registers. This happens in all landing programs, P64-P67.

Add info variables and info functions with REGEXP

To replace the classic sym-dump function add the gdb commands:
info variables
info functions

and additionally info constants to be able to replace the sym-dump command.
Each of these new commands shall support the REGEXP based filtering to
reduce the output result.

Original issue reported on code.google.com by [email protected] on 16 Apr 2009 at 4:39

Use label name instead of file name for the function name

Use label name instead of file name for the function name. This means that
when creating the "stack" frame that the name of the frame is not the file
name is is currently the case.

So instead of:

#0 0x1234 filename () ...

you will get

#0 0x1234 LABEL ()...

This will provide better insight into the code.

Original issue reported on code.google.com by [email protected] on 19 Dec 2008 at 5:13

Add support for info stack

Since the gdb commands where and bt and backtrace are already supported you
may as well add the info stack alias to the same implementation.

Original issue reported on code.google.com by [email protected] on 20 Jun 2008 at 3:18

Display actual source line when not using --fullname like gdb and not the disassembly

(Re)introduce the display of the next source line to be executed when 
stepping through code (just like gdb) when not using --fullname. The current 
implementation shows the actual assembly without labels even. So in the 
default mode it feels a little you are debugging without symbols but you are 
not it is just the display of the inner stack frame is awkward and not gdb 
style.

Original issue reported on code.google.com by [email protected] on 28 May 2009 at 1:44

Reorganize code to only support GDB/MI debugging

Currently the code supports both the R. Burkey proprietary debuggin
capabilities and the GDB/MI capabilities. To improve readability and future
maintenance it would be nice to only support GDB/MI. In addition some code
can be re-factored so that main does not play such a big role in the
debugging part.

Original issue reported on code.google.com by [email protected] on 25 Jun 2008 at 11:49

Transcribe LIST PROCESSING INTERPRETER (pp. 34-122)

Transcribe the scans for the LIST PROCESSING INTERPRETER log section into its source file. This section ranges from pages 34 to 122.

This section is an older version of the INTERPRETER log section in Luminary 099. There's likely to be a lot of overlap, but the two have different memory models so there are probably some sizeable differences. I still recommend starting with the Luminary code.

Reduced quality scans can be found here. The original quality scans are available at the Internet Archive page for Aurora. Note that in both cases, the page numbers specified on this ticket are those printed on the original pages, not those in the filenames. The numbers will be close, though, so you should be able to find them pretty quickly. The start of the log section should be fairly obvious.

Add floating point printing for precision numbers in AGC

Allow both print and output to support the /f format specifier to display floating point numbers for precision numbers.

The default scalar for floating-point will be of type 'B' See AGC listings.

So p/f VARIABLE will print a floating point value scaled to 1/2**14.
This will give you a single precision number using the default scalar. Use set scalar to alter the default scalar.

To extend and allow you to specify scalar type I will use p/f:

Examples:
p/f:D to get a number of DP DEGREES(90) so scaled to 360/2**28)

To monitor time in 1/100 of a second you can use:
p/f:K

Possible incorrect TIME6 behavior.

This is related to NASSP for Orbiter.

We've been testing LM powered descent operations, and have been getting consistent 1103 alarms (unused CCS branch, causing a P00DOO) during DAP usage. The V05N08 display pinpoints the problematic CCS in the T6RUPT handler routines (fixed bank 017, address 02032), and comparing the AGC assembly listing information with the C code for handling timers, it seems possible to me that the TIME6 counter is improperly handled.

According to code comments for the Luminary 99 assembly code (page 1403), it stipulates that TIME6 should at all times be greater than +0, triggering the interrupt after it is loaded with -0, 67777 indicating counter disabled. Otherwise,� the CCS instruction transfers control to the abort handler, causing the 1103.
screenshot 79
screenshot 80

EDIT: I originally thought it was based on an increasing counter/PINC, but I did not know about the 1+(-1)=-0 detail of the adder. Thanks to thewonderidiot for clearing that up.

Confusion over address spaces in yaAGC command-line debugger.

Here are several related issues having to do with command-line debugging
and the different address spaces of the AGC CPU.  I'm not sure if they're
bugs so much as confusing points.

1.  It's not obvious how to select which address space is being used in
(for example) an 'x' command.  The help system does not describe how to
select different address spaces, as far as I can tell.

2.  The output of the 'x' command shows different data when I use addresses
which (in my mind) *may* be in different address spaces, but the addresses
it prints are always the same.

3.  Is there some way to use addresses as opposed to symbols with the
'print' command?

Original issue reported on code.google.com by [email protected] on 5 Apr 2009 at 3:04

Transcribe WAITLIST (pp. 139-147)

Transcribe the scans for the WAITLIST log section into its source file. This section ranges from pages 139 to 147.

This section has a corresponding log section in Luminary 099. The two have decent overlap. I recommend starting with the Luminary code, and looking for differences in the Aurora scans.

Reduced quality scans can be found here. The original quality scans are available at the Internet Archive page for Aurora. Note that in both cases, the page numbers specified on this ticket are those printed on the original pages, not those in the filenames. The numbers will be close, though, so you should be able to find them pretty quickly. The start of the log section should be fairly obvious.

Add support for gdb command line options

Add support for gdb command line options will allow for better integration 
with 3rd party debug GUI's.

launching the emulator could take a binary directly as the default input 
instead of using the --core option in the current version.

It should be possible to launch the tool like:

yaAGC Colossu249.bin

to start debugging. And use an option like --nodebug to launch just the 
simulation without debugging.



Original issue reported on code.google.com by [email protected] on 21 Dec 2008 at 4:52

Add support for info threads

Since the AGC emulator supports running 10 interrupts it can while
preapting the main thread of execution show the interrupt execution as a
separate thread. It would also be nice to signify which interrupt execution
is running using symbolic names for example in the info part of the thread
data to show if it is the timer4 , keyboard1 interrupt etc. The thread id's
can match the internal interrupt id.  


Original issue reported on code.google.com by [email protected] on 20 Jun 2008 at 3:16

Probably incorrect behavior of yaAGC Block II "editing registers"

Because of problems I've encountered writing the Block I AGC simulator, I believe that the current behavior of the "editing registers" (CYR, SR, CYL, SL) is incorrect in yaAGC, and specifically incorrect in terms of trying to use them for multiple-precision shifting operations.

As currently implemented in yaAGC, they are logically 15-bit registers with the following behavior. Assuming that you are trying to write the 15-bit pattern D15 D14 .... D1 into them, you'd get:

  • CYR: D1 D15 D14 ... D2
  • SR: D15 D15 D14 ... D2
  • CYL: D14 ... D1 D15
  • SL: D14 ... D1 0

Notice, however, that this behavior would make them quite difficult to use for multiple-precision operations, because there's no way to propagate the bit that shifts out of a word into the word of the next higher or lower precision without a significant number of additional logical operations.

In Block I, these registers are explicitly 16-bit (see table 3-2 on p. 3-3 of document R-393), and if SG D15 ... D1 is loaded into them, where SG is the sign bit (in the A register it would be bit 16) they'd behave like this:

  • CYR: D1 X SG D14 D13 ... D2
  • SR: SG X SG D14 D13 ... D2
  • CYL: D14 X D13 ... D1 SG
  • SL: SG X D13 ... D1 SG

where X="don't care". In other words, D15 plays no role, either in writing to the register or reading from it, and the physical SG bit logically acts something like D15. Moreover, because the SG bit in the A register is treated differently from other bits (in that it participates in conveying overflow information), there is the possibility of propagating it from one word to the next in a multi-precision shift operation.

I think. But I haven't quite worked out the details in Block 1 yet (in that I can't quite figure out where SG is actually coming from in every instruction, nor can I figure out yet what is actually written to the X bit). So I can't "fix" it in Block II until I first figure it out in Block I, which is proving to be a challenge.

Whether or not this is related to issue #50 or not, I don't know.

Add support for set confirm on/off

Enable confirmation support to get confirmation requests for example when
exiting while debugging or when run is used again while already in a run
state. 

Original issue reported on code.google.com by [email protected] on 25 Jun 2008 at 11:34

Overwriting of prompt in yaAGC debug mode

When running yaAGC in debug mode and giving it debugging commands from the
command line, if you backspace over the command (say, to correct typing
errors) it allows you to backspace over the prompt as well, so that the
prompt disappears.  This happened for me using the svn source from
20090404, on Ubuntu 8.04 64-bit.



Original issue reported on code.google.com by [email protected] on 5 Apr 2009 at 2:57

Transcribe EXECUTIVE (pp. 126-138)

Transcribe the scans for the EXECUTIVE log section into its source file. This section ranges from pages 126 to 138.

This section has a corresponding log section in Luminary 099. The two seem very similar. I recommend starting with the Luminary code, and looking for differences in the Aurora scans.

Reduced quality scans can be found here. The original quality scans are available at the Internet Archive page for Aurora. Note that in both cases, the page numbers specified on this ticket are those printed on the original pages, not those in the filenames. The numbers will be close, though, so you should be able to find them pretty quickly. The start of the log section should be fairly obvious.

Transcribe INTERRUPT LEAD INS (pp. 27-28)

Transcribe the scans for the INTERRUPT LEAD INS log section into its source file. This section ranges from pages 27 to 28.

This section has a corresponding log section in Luminary 099.
They appear pretty similar. I recommend starting with the Luminary code, and looking for differences with the Aurora scans.

Reduced quality scans can be found here. The original quality scans are available at the Internet Archive page for Aurora. Note that in both cases, the page numbers specified on this ticket are those printed on the original pages, not those in the filenames. The numbers will be close, though, so you should be able to find them pretty quickly. The start of the log section should be fairly obvious.

Bug in yaYUL --html

In the colorized syntax-highlighted HTML produced for AGC assembly listings by using the "--html" switch in yaYUL, the decorative HTML headers optionally added to these files sometimes causes assembly itself to fail. Out of all the existing AGC source files, this occurs in exactly four cases: the AGC source files

  • Luminary099/LUNAR_LANDING_GUIDANCE_EQUATIONS.agc
  • Luminary099/KALCMANU_STEERING.agc
  • Luminary131/LUNAR_LANDING_GUIDANCE_EQUATIONS.agc
  • Luminary131/KALCMANU_STEERING.agc

In these four cases, the initial lines of the files, which add the decoration, namely

FILE="Main.annotation"

must be removed, or else assembly fails. The lines have been removed at present, but the problem should be fixed, and I'm at a complete loss as to why it's happening.

Propagate yaAGC and yaAGS changes from diff of dev-20070422 and dev-20090415 into SVN

Update the SVN sources with the changes made by RSB and released on 
20090331. Since this source tree started with the 20070422 release the 
differences of these two releases shall be used to update yaAGC and yaAGS. 
Ron will take care of yaDSKY and the other GUI code with his new wxWidget 
implementation.

I made this issue of type defect because the new 2009 release has some bug 
fixes.


Original issue reported on code.google.com by [email protected] on 7 Apr 2009 at 10:08

Inconsistent cycle count

Experimenting with AGC API I've bumped into a strange phenomenon. Running the 
agc_engine() step by step, and printing the registers before calling the 
function, I got the following result:
PendDelay:0 A:0 L:0 Z: 4000 BB:0
PendDelay:0 A:0 L:0 Z: 4001 BB:0
PendDelay:1 A:0 L:0 Z: 4001 BB:0
PendDelay:0 A:0 L:0 Z: 4001 BB:0
PendDelay:0 A:12063 L:0 Z: 4002 BB:0
PendDelay:1 A:12063 L:0 Z: 4002 BB:0
PendDelay:0 A:12063 L:0 Z: 4002 BB:0
PendDelay:0 A:0 L:0 Z: 4003 BB:12003
PendDelay:0 A:0 L:0 Z: 2563 BB:12003

The ROM image was Artemis072, so the instructions are the following:

INHINT                                         
CAF      GOBB                                  
XCH      BBANK 
TCF      GOPROG
...

The INHINT and TCF consumes 1 machine cycle correctly, but the XCH and CAF 
consumes 3 machine cycles which contradicts to the language manual. It says 
that both of these two instructions needs 2 MCT to finish. I changed line 
agc_engince.c:1891   
    State->PendDelay = i; 
to
    State->PendDelay = i-1;
with the intention to decrease the machine cycle by 1 for every multi-MCT 
instuctions. This modification doesn't have any bad effect on the scheduled 
processes, I checked V16N36 and it worked correctly.

Original issue reported on code.google.com by [email protected] on 16 Nov 2010 at 10:43

Transcribe ERASABLE ASSIGNMENTS (pp. 7-25)

Transcribe the scans for the ERASABLE ASSIGNMENTS log section into its source file. This section ranges from pages 7 to 25.

This section has a corresponding log section in Luminary 099. There's likely to be a lot of overlap in the actual erasable assignments, although it appears there's a lot less comments around (including partial comments like "TEMPORARY STORAGE POO" instead of "TEMPORARY STORAGE POOL"). I recommend starting with the contents of this file and looking for differences in the Aurora scans.

Reduced quality scans can be found here. The original quality scans are available at the Internet Archive page for Aurora. Note that in both cases, the page numbers specified on this ticket are those printed on the original pages, not those in the filenames. The numbers will be close, though, so you should be able to find them pretty quickly. The start of the log section should be fairly obvious.

Transcribe INTER-BANK COMMUNICATION (pp. 29-33)

Transcribe the scans for the INTER-BANK COMMUNICATION log section into its source file. This section ranges from pages 29 to 33.

This section has a corresponding log section in Luminary 099. There is some overlap, although they are reasonably different. I recommend starting from the Luminary code, although a lot of new stuff will have to be written as well.

Reduced quality scans can be found here. The original quality scans are available at the Internet Archive page for Aurora. Note that in both cases, the page numbers specified on this ticket are those printed on the original pages, not those in the filenames. The numbers will be close, though, so you should be able to find them pretty quickly. The start of the log section should be fairly obvious.

agc_engine_init return value wrong

What steps will reproduce the problem?
1. Call the function:
int res = agc_engine_init(&state, "filethatdoesnotexist", NULL, 0);

2. res should be 1, according to:
http://www.ibiblio.org/apollo/developer.html#AGC_CPU-Engine_API

3. BUT: res is equal 0 (value is overwritten in agc_engine_init.c:210  (see 
also line 193 for ROM-file-load assignment)

What version of the product are you using? On what operating system?
Last change in header: 03/30/09 RSB Added the Downlink variable to the core 
dumps.

yaAGC-dev-20100220.tar.bz2
(same as subversion rev 609)

Also found in:
https://code.google.com/p/virtualagc/source/browse/trunk/yaAGC/agc_engine_init.c

Original issue reported on code.google.com by [email protected] on 24 Sep 2014 at 8:18

Transcribe PHASE TABLE MAINTENANCE (pp. 148-150)

Transcribe the scans for the PHASE TABLE MAINTENANCE log section into its source file. This section ranges from pages 148 to 150.

This section has a corresponding log section in Luminary 099. Aurora's section is way shorter, and looks rather different. I still recommend starting with Luminary's code, but a lot will need to change.

Reduced quality scans can be found here. The original quality scans are available at the Internet Archive page for Aurora. Note that in both cases, the page numbers specified on this ticket are those printed on the original pages, not those in the filenames. The numbers will be close, though, so you should be able to find them pretty quickly. The start of the log section should be fairly obvious.

Luminary Autopilot bug

when doing a v49 maneuver with a pitch angle greater than 180 deg
(v49E, V25E,+00000E,+33000E,+00000E,PRO,PRO) for example

the autopilot is executing the correct maneuver but will not maintain the attitude correctly

it slowly drifts toward zero pitch attitude (very slowly, several minutes)

telemetry is showing that variable CDUYD value is decreasing slowly towards zero instead of not moving.

code not working is in P-AXIS_RCS_AUTOPILOT
1STOTWOS CCS A
AD ONE
TC Q
CS A
TC Q

this function, instead of storing the CDUYD variable without changing it , is substracting one from the variable before returning to the caller

it seems there is an implementation problem in the MSU operand when calculating on CDU counters greater than 16384

Unable to establish socket connections under Mac OS X Lion

What steps will reproduce the problem?

1. Start VirtualAGC.app (prebuilt binary) on Mac OS X Lion
2. Attempt to run any simulation
3. Applications will start (e.g. yaDSKY2, yaAGC, yaTelemetry), however, nothing 
actually connects to yaAGC

What is the expected output? What do you see instead?

I expect that the DSKY will initialize to P00 and to see telemetry data.  The 
DSKY remains blank, no verb/noun commands are recognized, and no telemetry is 
received.  I performed an 'lsof' on yaAGC and port 19797 does not appear to be 
open.  I turned off the Mac OS firewall with no change in results.  I also 
attempted to start the application as root (sudo open VirtualAGC.app), same 
results.  I disabled IPv6 just in case that was a potential cause, no change.

What version of the product are you using? On what operating system?

ActiveTCL 8.5, prebuilt VirtualAGC binary from the Virtual AGC Download page, 
Mac OS X 10.7 Lion.

Please provide any additional information below.

I'm not sure why the application will not open (or is not allowed to open) 
these ports.  They are above 1024 so there shouldn't be an issue.

Original issue reported on code.google.com by [email protected] on 3 Jan 2012 at 1:52

transcription typo in comment

http://code.google.com/p/virtualagc/source/browse/trunk/Luminary099/LUNAR_LANDIN
G_GUIDANCE_EQUATIONS.s?r=258#1243

says "USING NETON'S METHOD"

That looked wrong, but code of this era is notable for specialized
shortcuts, so I looked for the source images - based on the comments, image
822:
http://www.ibiblio.org/apollo/ScansForConversion/Luminary099/0822.jpg

says "USING NEWTON'S METHOD" (line R1064.)

Original issue reported on code.google.com by [email protected] on 21 Jul 2009 at 4:02

Segmentation fault when examining memory in debug mode

1. Start Virtual AGC in debug mode:
yaAGC --core=Colossus249.bin --cfg=CM.ini --debug
2. Try to examine register A with command "x A". The yaAGC immediately quits 
with segmentation fault. "x 0" or "x L" or "x 1" also result in segfault.

I've built my yaAGC from source yaAGC-dev-20100220.tar.bz2, op.system is 
Debian/Lenny

Seem to me the reason for this behaviour is an unhandled nullification of a 
string variable at agc_gdbmi.c:1709  
   if ((s = strstr(s,"/")))
which ends up in a segmentation fault at agc_gdbmi.c:1716, where the variable 
"s" is referred.

Original issue reported on code.google.com by [email protected] on 17 Oct 2010 at 2:37

MS Vista Failed to install Virtual AGC

What steps will reproduce the problem?

1. Download file VirtualAGC-setup.exe
2. Run VirtualAGC-setup.exe


What is the expected output? What do you see instead?
Please find attached image.

What version of the product are you using? On what operating system?
The latest, I'm hope. Operation system: Windows Vista

Please provide any additional information below.


Original issue reported on code.google.com by [email protected] on 7 Aug 2009 at 4:04

Attachments:

Transcribe SINGLE PRECISION SUBROUTINES (pp. 123-125)

Transcribe the scans for the SINGLE PRECISION SUBROUTINES log section into its source file. This section ranges from pages 123 to 125.

This section has a corresponding log section in Luminary 099. It looks like Aurora has more functions defined here than Luminary does. I recommend starting with the Luminary code.

Reduced quality scans can be found here. The original quality scans are available at the Internet Archive page for Aurora. Note that in both cases, the page numbers specified on this ticket are those printed on the original pages, not those in the filenames. The numbers will be close, though, so you should be able to find them pretty quickly. The start of the log section should be fairly obvious.

Transcribe T4RUPT PROGRAM (pp. 160-188)

Transcribe the scans for the T4RUPT PROGRAM log section into its source file. This section ranges from pages 160 to 188.

This section has a corresponding log section in Luminary 099. There appears to be considerable overlap. I recommend starting with the Luminary code, and looking for differences with the Aurora scans.

Reduced quality scans can be found here. The original quality scans are available at the Internet Archive page for Aurora. Note that in both cases, the page numbers specified on this ticket are those printed on the original pages, not those in the filenames. The numbers will be close, though, so you should be able to find them pretty quickly. The start of the log section should be fairly obvious.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.