• Assembly 70.8%
  • XProc 13.6%
  • C 5.8%
  • Python 4.5%
  • Ballerina 1.5%
  • Other 3.6%
Find a file
Ron Burkey fd7be5d9be
Some checks failed
action.yml / Added `PRINT OFF` and `PRINT ON` feature to AP-101S assembler. (push) Failing after 0s
Added PRINT OFF and PRINT ON feature to AP-101S assembler.
2026-05-31 08:51:44 -05:00
.github/workflows CI: Windows: use only the preinstalled GCC 2025-11-12 15:30:08 -05:00
agcSoftwareDocumentation Fixed now-broken link to the GitHub version of the website. 2016-10-20 10:15:20 -05:00
Artemis071 Fixed a type (RANGER0 -> RANGERD) in ARTEMIS 71 and 72. 2021-10-06 18:21:22 -05:00
Artemis072 Remove leftover files that should be ignored 2026-04-22 21:42:39 +02:00
ASM101S Added PRINT OFF and PRINT ON feature to AP-101S assembler. 2026-05-31 08:51:44 -05:00
Aurora12 Remove leftover files that should be ignored 2026-04-22 21:42:39 +02:00
Aurora88 Add source reconstruction of Aurora 88 2023-07-12 22:07:29 -07:00
Borealis Followed up on the changes to the symbol-table sorting-order from 2021-04-21 18:49:18 -05:00
Colossus237 Remove leftover files that should be ignored 2026-04-22 21:42:39 +02:00
Colossus249 Remove leftover files that should be ignored 2026-04-22 21:42:39 +02:00
Comanche044 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
Comanche045 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
Comanche051 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
Comanche055 Remove leftover files that should be ignored 2026-04-22 21:42:39 +02:00
Comanche067 Add source reconstruction of Comanche 67 2024-05-13 21:23:37 -07:00
Comanche072 Comanche 72: Filled out reconstruction comments 2024-05-19 11:33:51 -07:00
Contributed Made a change in lm_simulator.tcl to make it compatible with Tcl/Tk v9. 2025-01-13 05:41:05 -06:00
ControlPulseSim Bunch of tweaks related to Solaris build process. 2016-11-22 11:01:21 -06:00
Corona261 Corona 261: Incorporate original names and comments from R-532 volume I 2025-05-03 18:44:01 -07:00
doc Removed sRGB profiles from all PNG files, because both FreeBSD and Mac 2016-11-20 19:25:26 -06:00
Docker There have been multiple adjustments to the documentation and behaviour 2026-04-06 13:52:35 -05:00
enet Remove leftover files that should be ignored 2026-04-22 21:42:39 +02:00
FP6 Remove leftover files that should be ignored 2026-04-22 21:42:39 +02:00
FP8 Remove leftover files that should be ignored 2026-04-22 21:42:39 +02:00
GeminiCatchUpandRendezvousProgram Throughout, replaced gcc by ${cc} and g++ by ${CC}. Those variables are 2016-11-21 15:02:36 -06:00
jWiz CMake: simplify 2025-11-10 09:08:51 -05:00
LM131R1 LM131: Added entry for program alarm 1466 in ASSEMBLY AND OPERATION INFORMATION 2022-10-28 19:39:48 -07:00
LMY99R0 Luminary 96/97/99: updated header comments and Main.annotation 2021-08-23 20:57:38 -07:00
LUM69R2 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
LUM99R2 Update README.md 2021-08-24 06:03:57 -05:00
Luminary069 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
Luminary096 Luminary 96/97/99: updated header comments and Main.annotation 2021-08-23 20:57:38 -07:00
Luminary097 Luminary 96/97/99: updated header comments and Main.annotation 2021-08-23 20:57:38 -07:00
Luminary098 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
Luminary099 Remove leftover files that should be ignored 2026-04-22 21:42:39 +02:00
Luminary116 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
Luminary130 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
Luminary131 Remove leftover files that should be ignored 2026-04-22 21:42:39 +02:00
Luminary163 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
Luminary173 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
Luminary178 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
Luminary210 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
Manche45R2 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
Manche72R3 Manche72R3: Add implementation of PCR-984 - Avoid Coarse Align during Saturn 2024-05-21 08:59:20 -07:00
MessageBox Eliminated "deprecation" warning messages from wxWidgets 3.1.x, related 2021-03-22 07:45:11 -05:00
piPeripheral Corrected DSPOCTWD in Comanche055 PINBALL. Slight changes to Sunrise 2025-06-26 06:53:31 -05:00
PTC-ADAPT-Self-Test-Program Updates to LVDC assembler: Closer adherence to original assembly-listing 2023-07-22 12:42:41 -05:00
Pultorak-Simulator-1.16 Branch "block1" (i.e., the Block I AGC and DSKY simulations) merged into 2016-11-08 10:07:12 -06:00
Retread44 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
Retread50 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
Rope-Module Dump Library Never ignore rope dump binaries 2026-04-22 21:42:39 +02:00
scenarios Incorporate new wxWidget based applications and prepared some makefiles for cross-platform and native builds. 2009-04-23 03:17:55 +00:00
scripts Updates to VirtualAGC GUI for simulation-status window sizing. Updates 2025-01-08 08:03:58 -06:00
Skylark048 Fixes per issue #1283. 2026-03-26 07:30:30 -05:00
Solarium055 Solarium 55: Corrected names of a couple of log sections 2023-06-19 12:03:16 -07:00
sterm Eliminated "deprecation" warning messages from wxWidgets 3.1.x, related 2021-03-22 07:45:11 -05:00
Sunburst37 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
Sunburst120 Remove leftover files that should be ignored 2026-04-22 21:42:39 +02:00
Sundance306ish Remove leftover files that should be ignored 2026-04-22 21:42:39 +02:00
SundanceXXX Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
SundialE Preliminary support in yaTelemetry/VirtualAGC for *all* AGC software 2025-04-29 09:28:52 -05:00
Sunrise45 Sunrise 45: Significant naming and comment improvements to Orbital Integration 2023-06-03 22:30:26 -07:00
Sunrise69 Add source reconstruction of Sunrise 69 2023-06-21 23:38:31 -07:00
SuperJob Added Apollo 4 mission to VirtualAGC GUI, on the grounds that it is 2017-03-27 10:43:55 -05:00
TicTacToe Updated TicTacToe program to the authors' latest version. 2025-01-13 14:54:27 -06:00
Tools cmake: compatible with MSVC compiler 2025-11-10 10:08:44 -05:00
TRIVIUM Human-readable symbol tables created by yaYUL while assembling AGC 2021-04-20 16:00:31 -05:00
TRIVIUM-repaired Human-readable symbol tables created by yaYUL while assembling AGC 2021-04-20 16:00:31 -05:00
Validation Remove leftover files that should be ignored 2026-04-22 21:42:39 +02:00
Validation-Block1 Branch "block1" (i.e., the Block I AGC and DSKY simulations) merged into 2016-11-08 10:07:12 -06:00
VirtualAGC Disabled file-existence check; I just can't make it work in Mac OS. 2025-04-30 06:47:27 -05:00
XCOM-I Resolved issue #1306 and side-problems I noticed during the process. 2026-05-17 14:53:11 -05:00
yaACA More Msys2 experimentation. 2024-12-20 13:45:51 -06:00
yaACA2 Various user-interface issues with yaACA, yaACA2, yaACA3, and jWiz dealt 2025-01-02 08:56:56 -06:00
yaACA3 yaACA3: SDL1, SDL2 compatible. add yaACA3 to CMake 2025-11-10 12:09:50 -05:00
yaAGC Fixed a typo in a comment related to issue #1284. 2026-03-30 06:01:04 -05:00
yaAGC-Block1-Pultorak More Msys2 experimentation 2024-12-21 14:28:44 -06:00
yaAGCb1 Added HAS_CLOCK_GETTIME compile-time constant. 2025-07-19 21:04:32 -05:00
yaAGS cmake: avoid duplicate source, use object lib 2025-11-10 11:40:33 -05:00
yaASM cmake: compatible with MSVC compiler 2025-11-10 10:08:44 -05:00
yaASM.py Added --help to yaASMflowchart2.py 2024-12-31 13:16:06 -06:00
yaDEDA More Msys2 experimentation. 2024-12-20 13:45:51 -06:00
yaDEDA2 Cmake: add yaDEDA2 2025-11-10 11:40:33 -05:00
yaDSKY Added a channel 163 bit for the TEMP light (since the light is connected to both CH11 bit 4 and CH30 bit 15) 2018-01-06 10:18:45 -08:00
yaDSKY2 CMake: simplify 2025-11-10 09:08:51 -05:00
yaDSKYb1 Changes to B1 DSKY styling. 2024-12-28 13:07:01 -06:00
yaLEMAP cmake: compatible with MSVC compiler 2025-11-10 10:08:44 -05:00
yaLVDC cmake: compatible with MSVC compiler 2025-11-10 10:08:44 -05:00
yaOBC CMake: add yaPanel 2025-11-10 10:38:27 -05:00
yaPanel CMake: add yaPanel 2025-11-10 10:38:27 -05:00
yaShuttle HAL/S-FC HAL tests: 'EXIT' to explicit label. 2026-05-21 08:27:59 -04:00
yaTelemetry Changes related to issue #1306. 2026-05-15 18:40:58 -05:00
yaUniverse cmake: avoid duplicate source, use object lib 2025-11-10 11:40:33 -05:00
yaUplinkBlock1 cmake:yaUplinkBLock1: Needs ncursesw 2025-11-10 09:08:09 -05:00
yaYUL yaYUL: refuse to overwrite user data with bugger-word infrastructure 2026-05-21 15:43:36 -07:00
YUL YUL: Fixed some more typos 2020-04-18 23:41:19 -07:00
Zerlina56 Issue 1143: Fix various symbol name and other minor typos 2021-05-30 13:55:00 -04:00
.gitignore Changes related to issue #1306. 2026-05-15 18:40:58 -05:00
.project Added Eclipse .project. 2025-01-22 09:32:45 -06:00
.travis.yml Only build the missions for now. 2016-08-19 11:35:13 +01:00
AgcHtmlNotice.txt Extended the <HTML> feature farther with <HTML "filename">, 2009-06-30 19:46:52 +00:00
Apollo32.png Initial load of sources 2008-05-29 00:39:44 +00:00
BuildBox.sh Took Onno's merge of his source tree back into the main branch, and 2009-04-28 02:29:19 +00:00
CMakeLists.txt yaACA3: SDL1, SDL2 compatible. add yaACA3 to CMake 2025-11-10 12:09:50 -05:00
CMakePresets.json ci: add windows MSVC 2025-11-10 10:38:27 -05:00
configure Added a primitive "make install" feature. 2016-11-22 14:02:41 -06:00
COPYING Initial load of sources 2008-05-29 00:39:44 +00:00
createCBP.sh Added script for creating .cbp files, as well as the (untested) file 2026-01-13 18:35:32 -06:00
Dockerfile Change Docker recipes to use my base image on hub.docker.com. 2016-09-11 18:17:03 +01:00
Dockerfile.dev Change Docker recipes to use my base image on hub.docker.com. 2016-09-11 18:17:03 +01:00
gitLogCleanup.awk Added gitLogCleanup.awk for making pretty git log messages in VM64 2025-01-13 17:22:47 -06:00
LICENSE.txt Added the simulation scripts from the latest 20090421 build. 2009-04-23 18:18:26 +00:00
Makefile Fixes per issue #1283. 2026-03-26 07:30:30 -05:00
Makefile.inc Documentation tweak associated with the fix for issue #1236. 2025-01-13 14:47:32 -06:00
Makefile.yaAGC Re-added default Makefile.yaAGC 2009-04-04 13:23:48 +00:00
nWayCompareAGC.sh Modified nWayCompareAGC.sh so that it can optionally use Difdef in place 2017-03-21 11:34:14 -05:00
README.md Update README.md with the docker deployment option 2026-04-04 13:07:19 -05:00
README.zh-CN.md Corrected (we'll see!) the Chinese README. 2026-04-20 05:05:36 -05:00
rebuildVirtualAGC.sh Fixes to VM rebuild script. 2025-01-03 18:10:26 -06:00
templateAGC-bottom.cbp First attempt at getting code::blocks based debugging of AGC code to 2016-11-16 10:08:57 -06:00
templateAGC-top.cbp Fixed a few bugs in my code::blocks project-generation code. 2016-11-16 12:41:01 -06:00
TODO.txt Added the simulation scripts from the latest 20090421 build. 2009-04-23 18:18:26 +00:00
transferListings.sh Changed the script transferListings.sh (used to update the gh-pages 2017-03-05 06:59:04 -06:00
updateVirtualAGC-VM64.sh Updates pertaining to VM updates. 2025-02-20 05:54:23 -06:00

Virtual Apollo Guidance Computer

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.

Virtual AGC can be deployed using Docker, which provides an easy way to run the simulators without installing dependencies on your host system. See the Docker deployment section below for more information.

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

Docker Deployment

Virtual AGC can be deployed using Docker, which provides an easy way to run the AGC simulator without installing dependencies on your host system. Docker deployments are available in the Docker subdirectory.

Quick Start

cd Docker
docker-compose up -d

Using Docker

docker build -t virtualagc .
docker run -d -p 6080:6080 -p 5900:5900 --name apollo11-demo virtualagc

Accessing the Interface

Once the container is running, access the VirtualAGC interface through:

  1. Web Browser (noVNC): http://localhost:6080/vnc.html
  2. Direct VNC: Connect your VNC client to localhost:5900

Ports

Port Service Description
6080 noVNC Web-based VNC interface (HTML5)
5900 VNC Direct VNC connection

Stopping the Container

# With Docker Compose
docker-compose down

# With Docker
docker stop apollo11-demo
docker rm apollo11-demo

Docker for Development

To use Docker for development, mounting your local source code into the container:

docker run -it --rm -v $(pwd):/src virtualagc /bin/bash

For more details, including troubleshooting and technical information, see the Docker deployment guide.

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.