Link para a Parte 1Nesta parte, veremos como o AGC é organizado da perspectiva de um programador. A lista de referências e fontes é apresentada no final da primeira parte do artigo. O material desta parte é baseado no material do livro [1].

Representação de números em memória da AGC
O AGC usa palavras de 15 bits, com um sinal em 15º lugar. Há também uma descarga de paridade, que é gravada e controlada pelo hardware e é completamente transparente para o software, com cada operação de leitura e gravação na memória.

Os números inteiros são apresentados no formato de "adição 1". É o seguinte:
Os números não negativos de 0 a 16383 são apresentados na forma de códigos de 000 000 000 000 000 a 011 111 111 111 111 respectivamente.
Os números negativos são formados pela inversão de números positivos, ou seja, -1 é representado como 111 111 111 111 111 e até -16383, representado pelo código binário 100.000.000.000.000.
As operações aritméticas são executadas da seguinte maneira:
2: 000 000 000 000 010 -5: 111 111 111 111 010 111 111 111 111 100 (= -3)
Adicionar dois números negativos é um pouco mais complicado.
Se adicionarmos de acordo com as regras usuais, nada funcionará:
-2: 111 111 111 111 101 -5: 111 111 111 111 010 111 111 111 110 111 (= -8)
No entanto, você pode perceber que a adição dos bits mais significativos gera um bit de transporte. Só precisamos adicionar o carry para obter o resultado correto:
-2: 111 111 111 111 101 -5: 111 111 111 111 010 111 111 111 110 111 (= -8) Carry 1 111 111 111 111 000 (= -7)
Você também pode observar que o zero positivo e o negativo são possíveis neste sistema, o que cria dificuldades adicionais para os programadores, por exemplo, ao comparar o resultado de uma operação com zero.
O excesso de bateria durante operações aritméticas também pode ser monitorado, o que será discutido abaixo.
O ACG suporta apenas aritmética inteira e não pode executar operações com números reais no hardware, mas pode fazê-lo no software. O AGC usa uma representação decimal binária de números de 28 bits (9 casas decimais), que ocupa duas células de memória, 14 bits cada. Dígitos de sinal também são usados, e a palavra baixa e a palavra alta podem ter um sinal diferente! Ou seja, pode haver um número representado como, por exemplo, +5 * 10000 + -5 * 100 = 49500. Estranho, mas possível.
As distâncias e velocidades dos cálculos são apresentadas no sistema métrico, mas os dados para a tripulação são exibidos no sistema de medidas em inglês (pés, etc.).
Formato de instruçãoModelo de memória
Na parte anterior, já foi mencionado que a memória do computador é dividida em 2 Kslov de RAM e 36 K de palavras ROM. Como a instrução leva apenas 12 bits para o valor do endereço, é utilizado o princípio de dividir a memória em bancos. Um registro especial é usado para indicar o banco atual.
Para alternar para um novo banco de memória, é usado o comando "Transferir para novo banco" (TNB), que executa o seguinte:
- Copia o registro bancário atual ("Banco") para o registro "Banco salvo"
- Copia um endereço de 12 bits do local da memória após o comando TNB para o registro "Endereço de retorno"
- Carregamos o novo endereço do banco no registro do banco e carregamos o deslocamento indicado pela instrução TNB no contador de instruções.
Registros
Registros do AGC mapeados para o espaço de endereço. Eles ocupam as primeiras 48 palavras da memória física.
A bateria ocupa o endereço 0
8 .
A bateria é usada na maioria das operações aritméticas e lógicas (OR, AND, etc.). Embora o AGC opere com palavras de 15 bits, a bateria tem capacidade para 16 bits, pois armazena uma descarga de excesso. Quando os dados são carregados na bateria, eles caem nos bits inferiores, com o bit 14 contendo o sinal do número. Depois de executar a operação aritmética, se o estouro não ocorreu, o bit 15 simplesmente conterá uma cópia do sinal, e esse bit é invisível para o programador. Chamamos esses dígitos de sinal como S1 e S2, respectivamente. Se ocorrer um estouro, S1 e S2 não serão iguais. Embora o bit S2 permaneça invisível para o programador, no AGC existem duas maneiras de definir o estado de estouro.
Em primeiro lugar, quando ocorre um estouro, as interrupções são desativadas automaticamente. Um manipulador de interrupção, se ocorrer neste momento, pode redefinir esse bit, o que seria muito indesejável. Interrupções são permitidas apenas quando o sinalizador de estouro é limpo. O sinalizador é redefinido apenas quando a bateria está limpa ou quando um novo valor é carregado. Para verificar o sinalizador de sobrecarga, o comando Transfer to Storage (TS) pode ser usado, que salva o valor da bateria na memória somente se não houver sobrecarga e se houver uma sobrecarga para cima ou para baixo, o valor na bateria é substituído por +1 ou -1 em conformidade. O comando TS também pula a próxima instrução do programa caso ocorra um estouro. Supõe-se que o programador escreva o código que processa o estouro e o coloque através de um comando do TS, e imediatamente após o TS insira um salto na instrução após o manipulador do estouro.
Registo L - Endereço 00001
8O registro L também é chamado de "acumulador de baixa ordem" e visa expandir o intervalo de números com os quais as operações são executadas. Também pode ser usado para armazenamento temporário de variáveis.
Registo Q - Endereço 00002
8O registro Q destina-se a armazenar o endereço de retorno. O registro Q contém um endereço de 12 bits que, junto com o banco de memória atual, fornece o endereço de retorno completo da sub-rotina.
Registro EBANK (Banco de armazenamento apagável) - Endereço 00003
8A RAM (também chamada de “memória apagável” no AGC) contém 2048 palavras, divididas em 8 bancos de 256 palavras cada. O endereço do banco de RAM é de 3 bits e está contido no registro EBANK.
Registro FBAN K (Banco de armazenamento fixo) - Endereço 00004
8A ROM possui bancos de 1024 palavras e contém 36 bancos. O registro do FBANK possui 5 bits e permite endereçar 32 bancos.
Bit de extensão fixa (Superbank Bit)
Usado para endereçar a última ROM 4Kslov.
Registro BBANK (
registro de ambos os bancos) - Endereço 00006
8Ao transferir o controle para outro programa, os registros FBANK e EBANK devem ser alterados ao mesmo tempo. O registro BBANK contém os dois endereços - números bancários de RAM e ROM. Escrever nele atualiza automaticamente os registros FBANK e EBANK.
Registro Z (O contador de programa) - 00005
8O registrador Z é o contador de programa, ou seja, determina o endereço do comando atualmente em execução. Tem uma capacidade de 12 bits.
Zero Register (Uma fonte de zeros) - Endereço 00007
8Contém a constante 0.
Registros de manipulador de interrupção - endereço 00008
8 - 00012
8Os registros ZRUPT, BRUPT, ARUPT, LRUPT, QRUPT e BANKRUPT estão respectivamente localizados nesses endereços.
Registradores ZRUPT e BRUPT - salva automaticamente o conteúdo do registro Z (contador de instruções) e do registro B (registro interno, que contém o endereço do comando que será executado a seguir).
Os registros ARUPT, LRUPT, QRUPT e BANKRUPT são usados para economizar a bateria e os registros L, Q e BB. Esses registros devem ser salvos manualmente e restaurados manualmente até que a instrução RESUME seja executada, o que serve para retornar da interrupção.
Durante o processamento da interrupção, o AGC desativa as interrupções até que a instrução RESUME seja executada. Portanto, o manipulador de interrupção sozinho não pode ser interrompido.
Anteriormente, foi mencionado que a bateria tem capacidade para 16 bits, e o bit mais significativo é usado para detectar estouro e não está disponível programaticamente. No entanto, o registro ARUPT, que armazena a bateria durante a interrupção, possui 15 bits. Cada vez que ocorre uma condição de estouro, as interrupções são desativadas até que o sinalizador de estouro seja limpo.
Os registros ARUPT, LRUPT, QRUPT e BANKRUPT não podem ser usados fora do manipulador de interrupções. Fisicamente, eles permanecem acessíveis, mas do ponto de vista do programa principal, seu estado muda em pontos arbitrários no tempo.
Editando registros - endereços 00020
8 - 00023
8Os três primeiros registros são registros de turno: Ciclo à direita, Turno à direita, Ciclo à esquerda, ou seja, um deslocamento cíclico para a direita, um deslocamento para a direita e um deslocamento cíclico para a esquerda. O sistema de instruções AGC não possui operações de turno e, para deslocar um número em um bit, ele deve ser gravado em um desses registradores e depois contado. Cada gravação é alterada em um bit.
O registro EDOP (EDit Interpretive OPcode) é o quarto dos registros de edição.
Os comandos do intérprete, que serão discutidos abaixo, são armazenados em duas em uma palavra e ocupam 7 bits cada. Uma operação AND com uma máscara é suficiente para ler o comando de ordem baixa, mas a ordem alta exigirá um turno de 7 bits. O registro EDOP executa esse deslocamento em uma operação.
A edição de registros não pode ser usada em manipuladores de interrupção, e aqui está o porquê. Registros regulares devem ser salvos no início do manipulador e restaurados ao sair dele. Mas os registros de edição executam operações nos dados ao gravá-los, e isso levará ao funcionamento incorreto do programa interrompido.
Temporizadores e relógios
Relógio em tempo real
O AGC não usa horário, dias, meses e ano do calendário. Em vez disso, a contagem regressiva é do ponto "zero", que começa algumas horas antes do início. O relógio é exibido em duas palavras na memória, nos endereços 00024
8 (T2), 00025
8 (T1). A palavra T1 é incrementada a cada 10 ms, a palavra T2 é aproximadamente a cada 164 segundos, quando a palavra T1 está cheia.
Temporizadores
00026
8 (T3) Lista de espera - incrementa a cada 10 ms., Deslocado em relação a T4RUPT em 5 ms
00027
8 (T4) T4RUPT - incrementa a cada 10 ms.
00030 Piloto automático
8 (T5) - incrementa a cada 100 ms.
00031 Relógio de alta resolução com
8 (T6) - incrementa a cada 1/1600 s = 0,625 ms.
O primeiro timer, T3, é necessário para que a lista de tarefas funcione (lista de espera). A lista de espera é uma lista de tarefas muito curtas, cada uma delas demorando um pouco, e pode ser executada diretamente no manipulador de interrupções. A lista contém até sete tarefas, cada uma das quais inicia em um determinado intervalo. O tempo de execução da tarefa é estritamente limitado a 4 ms. Durante esse período, o computador consegue concluir cerca de 160 instruções.
O timer T4 executa tarefas periódicas críticas que variam de 20 a 120 ms, incluindo troca de dados com o DSKY, comutadores de votação nos painéis de controle do navio e outras tarefas.
Unidade de Medição Inercial IMU (Unidade de Medição Inercial)
O IMU é uma plataforma estabilizada giroscopicamente com acelerômetros, que serve para determinar a posição e as acelerações da nave no espaço.

Não descreveremos aqui o princípio de operação do giroscópio, apenas observamos que a posição dos eixos do giroscópio é medida pela CDU (Coupling Data Unit). Este dispositivo gera pulsos quando os giroscópios giram, produzindo 32768 pulsos por rotação, o que corresponde a uma resolução de 39,55 segundos de arco por pulso.
A CDU também transmite ao AGC a posição dos eixos do sextante e o radar de aproximação. Como o sextante está apenas no módulo de comando e o radar está apenas no módulo lunar, eles usam a mesma porta AGC.
A IMU também possui três acelerômetros de pêndulo (Acelerômetros Pendulares de Integração Pulsados, PIPA). Mas há uma ligeira sutileza. Apesar de o módulo lunar e o módulo de comando terem a mesma IMU, suas faixas de medição de velocidade são diferentes. A faixa de velocidade IMU do módulo de comando é de 0 a 11000 m / s, e para o módulo lunar - até 1700 m / s. A resolução IMU do módulo de comando é de 5,85 cm / s, para o módulo lunar - 1 cm / s.
Contadores CDUS (X, Y, Z, OPTIS, OPTT) e PIPAS (X, Y, Z)
A transferência de dados da CDU para o AGC é a seguinte: os pulsos dos sensores podem aumentar e diminuir os contadores. O número no balcão tem um sinal indicando a direção do movimento. Os contadores estão localizados em endereços específicos na memória e podem ser lidos programaticamente. Um total de 8 contadores é usado, seis dos quais exibem velocidades e ângulos e dois são usados para exibir a posição angular do sextante no módulo de comando ou o radar de aproximação no módulo lunar.
Gerenciamento de dispositivos através de contadores
A CDU trabalhava em ambas as direções, por exemplo, não só podia determinar a posição do radar de proximidade, mas também podia ler o conteúdo do registro da memória do computador e aplicar tensão aos motores de acionamento do radar até que o radar fosse instalado no ângulo necessário.
Outras interfaces de computador
O módulo lunar possui uma alça (Attitude Controller Assembly, ACA) cuja posição pode ser lida programaticamente. Cada eixo deste controlador enviou valores para as variáveis P_RHCCTR, Q_RHCCTR e R_RHCCTR.
Controlador ACA
Aparência do Controlador ACAControlador ACA instalado apenas no módulo lunar
INLINK (Canal de Transmissão de Telemetria)
O dispositivo INLINK fornece comunicação bidirecional com a Terra e serve para transmitir informações telemétricas e receber dados do centro de controle de vôo. Os astronautas podem inserir os dados necessários para o vôo através do DSKY, mas esse processo é lento e cheio de erros. Através do registro INLINK, os dados podem ser inseridos diretamente da Terra no computador.
Gerenciamento do motor
Durante o processo de aterrissagem do módulo lunar, o AGC calcula continuamente os valores necessários da força de tração e envia sinais de controle aos motores. Durante os 12 minutos de duração do pouso, o motor queima cerca de metade do combustível e o programa deve levar em consideração a redução de massa. O impulso do motor varia de 92,5%, o que equivale a 46.700 N, até 10% do impulso total. Mas o empuxo acima de 65% causa desgaste severo na câmara de combustão e no bico, portanto, o programa AGC deve minimizar o tempo em que o motor está nesse modo.
O computador está conectado aos motores da plataforma de aterrissagem por meio do DECA (Descent Engine Control Assembly). O gerenciamento ocorre através do registro THRUST. A equipe pode ajustar manualmente o valor do empuxo por meio do Thrust / Translational Hand Controller (TTHC).
Controlador de empuxo / translação manual (TTHC).
Controlador de empuxo / translação manual (TTHC). AparênciaO identificador do controlador está conectado diretamente ao DECA, o computador não vê os valores inseridos manualmente.
Dispositivos analógicos
Os indicadores analógicos, ALTM (displays analógicos: altímetro e medidores de taxa), também são usados para indicar a altitude e a taxa de mudança de altura que o AGC controla através do registro ALTM. Os indicadores analógicos são feitos na forma de escalas verticais (tapemeters).
Indicadores de altura e velocidade verticalBancos de endereçamento e memória
Como já mencionado, o AGC possui dois tipos de memória, RAM, também chamada de "memória apagável", e ROM (memória fixa). A capacidade da memória é 38 Kslov, o que não permite endereçar toda a memória diretamente, já que o comprimento do endereço na palavra de comando é 12 bits.
Para separar a memória em bancos, são utilizados os registros EBANK e FBANK, que especificam o banco de RAM e ROM, respectivamente. Isso expande o espaço de endereço de 32Kwords e, para expandir ainda mais o espaço de endereço da ROM, é usado o Bit de Extensão Fixa, que permite o acesso a 36Kwords.
Bancos de RAM
A RAM possui um volume de 2K palavras e é dividida em 8 bancos de 256 palavras.
Descriptografia de endereço de RAMPara endereçar uma palavra em um banco de RAM, são necessários 8 bits. São necessários mais dois bits para determinar o tipo de banco: não comutável (não comutado) ou comutável (comutado). Os bits 9 e 10 na figura acima são responsáveis por isso (observe que os bits são numerados de 1). Se esses bits contiverem 00, 01 e 10, o registro EBANK não será utilizado, se 11 for utilizado, o conteúdo do EBANK será combinado com o endereço de 8 bits registrado na palavra de comando, conforme mostrado na figura abaixo. Se o registro EBANK não for usado, os três primeiros bancos de memória serão chamados, chamados de termo um pouco enganador "Apagável Fixo". Para acessar a RAM, os bits 11 e 12 devem ser definidos como 0.
Descriptografia do endereço de RAM usando o registro EBANKROM
Para acessar a ROM, uma abordagem semelhante é usada. Os bits 11 e 12 da palavra de controle determinam quais bancos são usados; se esses bits contêm 00, a RAM é usada, como mostrado na seção anterior; se 10 ou 11, todos os 12 bits são usados como um endereço na ROM; o registro FBANK não é usado; se 01, o endereço que consiste nos 10 bits inferiores da palavra de controle e o conteúdo do registro FBANK é usado.
Descriptografia do endereço ROM
Descriptografia do endereço ROM usando o registro FBANKBancos comuns
Um subproduto importante do esquema de separação de memória para bancos é a capacidade de conectar bancos de ROM e RAM ao mesmo espaço de endereço e usar a RAM sem precisar alternar os registros dos bancos. A figura explica como esse esquema funciona.
O esquema de uso de RAM e ROM no mesmo espaço de endereçoMemória além de 32 palavras
Para acessar a memória acima de 32 palavras, o bit de extensão da ROM, Fixed Extension Bit, é usado como o Superbank Bit. O bit do super banco está localizado no bit 7 do canal 7. de entrada / saída. O canal 7 difere de outros canais, pois suporta leitura e gravação. Obviamente, o bit de expansão da ROM deve ser salvo durante o manuseio de interrupções e ao alternar tarefas.
Transferência de controle entre bancos
Observe a ordem na qual os registros FBANK, Z e BB estão localizados na memória inferior. Parece, por que não combiná-los em uma palavra? Mas isso é feito de propósito para criar um mecanismo de transferência de controle. Ao mudar para outro banco, os novos valores devem ser definidos como FBANK e EBANK ou BBANK. No entanto, isso levanta um problema. Suponha, por exemplo, que o programa seja executado no endereço 01033
8 no banco da ROM 07 e você precise ir para o endereço 02371
8 no banco da ROM 13. Se você alterar o registro Z, ele transfere o controle para o endereço 02371
8 no banco atual, do qual não precisamos. Se trocarmos o banco atual primeiro, uma situação semelhante surgirá. A troca simultânea do registro Z e do banco de memória é necessária. Para fazer isso, use a instrução DXCH, que lê a bateria e registra L, e troca seu conteúdo com dois locais consecutivos na memória. Assim, é possível trocar a bateria e registrar L com um par de FBANK, Z ou com um par de Z, BB. Essas opções são codificadas por dois mnemônicos: Troca de controle de transferência dupla nos bancos (DTCB) e Troca de controle de transferência dupla no banco fixo (DTCF). O comando DTCB não apenas permite que você vá para outro endereço, mas também altera o banco de RAM, e o comando DTCF transfere o controle, deixando o banco de RAM igual. O retorno da função é o seguinte. Os valores iniciais de Z e BBANK (ou FBANK) são gravados no acumulador e no registrador L. A função chamada deve salvar esses valores e, em seguida, fazer a operação inversa trocando os valores com os registradores de bancos e Z.
Algumas desvantagens da arquitetura AGC
A maioria das arquiteturas de computadores possui um ponteiro de pilha e / ou registros de índice (pelo menos um). Mas não na AGC. O suporte ao ponteiro de pilha exigiria hardware adicional. Não há registros de índice que permitam organizar o acesso às estruturas de dados no endereço (ponteiro + deslocamento), mas há um comando INDEX que elimina a necessidade desse registro.
Além disso, embora não haja registros de índice de hardware, eles são emulados pela máquina virtual Interpreter, que será discutida abaixo.Um dos recursos do AGC é o uso de um sistema operacional multithread em tempo real. Para que esse sistema funcione, como regra, é necessário um mecanismo para bloquear dados compartilhados (mutexes). Mas no AGC não existe esse mecanismo, portanto os desenvolvedores de software devem verificar cuidadosamente todos os casos de acesso compartilhado aos dados de vários processos, a fim de excluir a possibilidade de acesso simultâneo a esses dados.Interrupções
4000 8 Inicialização Oendereço de partida após energizar o AGC4004 8 T6RUPTTIME6 atinge 0. O temporizador é usado pelo piloto automático.4010 8 T5RUPTTIME5 atingiu o estouro. O temporizador é usado pelo piloto automático.4014 8 T3RUPTTIME3 atingiu o estouro. Usado pelo planejador de tarefas WAITLIST.4020 8 T4RUPTTIME4 atingiu o estouro. Digitalização e atualização e exibição DSKY4024 8 KEYRUPT1botão é pressionado DSKY. O código da chave do DSKY principal está disponível no canal 154030 8 KEYRUPT2Pressione o segundo botão DSKY. A tecla de navegação DSKY está disponível no canal 16 (somente módulo de comando)4034 8Dados UPRUPT no registro INLINKUsado para DSKY4040 8 DOWNRUPTO registro Downlink contém dados. Usado para telemetria AGC4044 8 RADARUPTDados no registro RNRAD. Dados de radar de aproximação4050 8 RUPT10LM P64Sistema de comando
O código de operação, ou Código de Pedido, em termos desse tempo, é codificado com três bits, ou seja, apenas oito opcodes são possíveis, o que claramente não é suficiente para um sistema de comando desenvolvido. No entanto, os desenvolvedores encontraram uma saída. Alguns códigos são expandidos com um campo adicional de dois bits, Q-Code.O código de operação 000 corresponde a um grande número de operações especiais, os códigos de operação 011, 100 e 111 correspondem a uma operação cada.Os códigos de operação restantes 001, 010, 101 e 110 usam códigos Q.
Formato de comando QOutros truques também foram usados para expandir o número de possíveis códigos de operação. Algumas instruções não podem funcionar com a RAM e a especificação da RAM como um endereço pode levar a um resultado indefinido, mas esses códigos de operação com endereços de operando na RAM foram usados para operações completamente diferentes. Por exemplo, o comando de controle de transferência TC (controle de transferência) não pode transferir o controle para a RAM, mas se o endereço apontar para RAM, esse código de operação corresponderá ao comando Habilitar Interrupções.Quando esses opcodes não foram suficientes, a seguinte abordagem foi usada. Se fizermos uma transição com o comando TC para o endereço 00006 8 , de fato, nenhuma transição ocorrerá, ao invés daquela que segue o comando TC 00006 8o código de operação é interpretado como pertencendo a um conjunto de instruções completamente diferente. Obviamente, essas instruções requerem mais tempo para serem executadas, porque o processador deve ler e decodificar os dois opcodes, mas esse problema é atenuado pela cuidadosa distribuição de instruções entre os dois conjuntos de instruções. Os comandos usados com freqüência são incluídos no conjunto de instruções principal e os demais no estendido.Instruções Básicas
No total, o AGC contém 41 equipes. As equipes são divididas em 6 grupos:- Lógica aritmética
- Transferência de controle
- Movimentação de dados
- Modificação de instruções
- Instruções de E / S
- Diversos
No entanto, não descreveremos todas as equipes da AGC aqui. Os interessados podem consultar o livro [1].Comunicação com o mundo exterior: subsistema entrada-saída
O AGC não possui discos rígidos ou unidades de fita e toda a comunicação com o mundo externo se resume à configuração e leitura de bits nas portas de entrada / saída. Os periféricos AGC incluem a plataforma inercial, os motores, o radar, o DSKY e os comutadores do painel de controle. A troca de dados em alta velocidade não é necessária e a velocidade da troca não é um fator limitante significativo.Para entrada e saída são os chamados canais. Escrever e ler um canal é semelhante a escrever e ler uma célula de RAM, mas, diferentemente da RAM, a maioria dos canais é unidirecional. Também existem portas de contagem, que são usadas para ler as posições dos eixos da IMU, radar e sextante. Os pulsos dos sensores de ângulo aumentam e diminuem os contadores, que podem ser lidos pelo AGC.
Periféricos AGCAs instruções de E / S referem-se ao conjunto de instruções estendidas e requerem o comando EXTEND antes do código de operação. Os comandos de E / S têm um código de operação 000, seguido por um PCode de três bits. Valores diferentes de PCode são usados apenas para testes de solo; por padrão, o PCode é zero. Os 9 bits restantes da palavra de controle são o número do canal. Assim, o AGC pode endereçar até 512 canais, mas apenas 16 são utilizados na prática. A maioria dos dispositivos periféricos é conectada não com uma palavra completa de 15 bits, mas com um bit separado em uma palavra, ou seja, são necessárias operações lógicas de E / S AND, OR e OU exclusivo. Tais operações podem ser combinadas em uma única operação com uma operação de E / S. As instruções WOR (Gravação com OU), WAND (Gravação com AND), ROR (Leitura e OR) e RXOR (Leitura e XOR) são para esse fim.As instruções de E / S usam uma bateria para ler e salvar dados. Mas também há um registrador L (acumulador de baixa ordem), que pode ser mapeado para uma porta, e tudo o que é lido e gravado nela automaticamente será direcionado para a porta. Isso permite que você use as operações lógicas usuais AND, OR e XOR para trabalhar com a porta.Mas nem todas as operações de E / S requerem leitura ou gravação apenas um bit. Por exemplo, o DSKY envia códigos de chave de 5 bits. Pressionar um botão no DSKY gera uma interrupção KEYRUPT, o código é colocado no canal de entrada.Outro exemplo em que é necessário transferir uma grande quantidade de dados pela porta são as interfaces de uplink e downlink, que fornecem comunicação com a Terra a uma velocidade de 51 kbps ou 1900 bps (selecionado manualmente pela tripulação).De software
O software AGC é baseado no sistema operacional Executive em tempo real e na máquina virtual Interpreter. Nós os consideraremos em detalhes na próxima parte.