Raw File
ADR.h
/****************************************************************************
 * ADR - MEMORY ADDRESS subsystem
 *
 * AUTHOR: John Pultorak
 * DATE: 9/22/01
 * FILE: ADR.h
 *
 * VERSIONS:
 *
 * DESCRIPTION:
 * Memory address for the Block 1 Apollo Guidance Computer prototype (AGC4).
 *
 * SOURCES:
 * Mostly based on information from "Logical Description for the Apollo
 * Guidance Computer (AGC4)", Albert Hopkins, Ramon Alonso, and Hugh
 * Blair-Smith, R-393, MIT Instrumentation Laboratory, 1963.
 *
 * NOTES:
 *
 *****************************************************************************
 */
#ifndef ADR_H
#define ADR_H
enum specialRegister
{ // octal addresses of special registers
  // Flip-Flop registers
  A_ADDR = 00,
  Q_ADDR = 01,
  Z_ADDR = 02,
  LP_ADDR = 03,
  IN0_ADDR = 04,
  IN1_ADDR = 05,
  IN2_ADDR = 06,
  IN3_ADDR = 07,
  OUT0_ADDR = 010,
  OUT1_ADDR = 011,
  OUT2_ADDR = 012,
  OUT3_ADDR = 013,
  OUT4_ADDR = 014,
  BANK_ADDR = 015,
  // No bits in these registers
  RELINT_ADDR = 016,
  INHINT_ADDR = 017,
  // In eraseable memory
  CYR_ADDR = 020,
  SR_ADDR = 021,
  CYL_ADDR = 022,
  SL_ADDR = 023,
  ZRUPT_ADDR = 024,
  BRUPT_ADDR = 025,
  ARUPT_ADDR = 026,
  QRUPT_ADDR = 027,
};
class regS : public reg
{
public:
  regS() :
      reg(12, "%04o")
  {
  }
};
class regBNK : public reg
{
public:
  regBNK() :
      reg(4, "%02o")
  {
  }
};
class ADR
{
  friend class MON;
  friend class MEM;
  friend class CLK;
  friend class CPM;
public:
  static void
  execWP_WS();
  static void
  execRP_RBK();
  static void
  execWP_WBK();
  static bool
  GTR_17(); // for MBF, CPM
  static bool
  GTR_27(); // for PAR
  static bool
  EQU_16(); // for CPM
  static bool
  EQU_17(); // for CPM
  static bool
  EQU_25(); // for SEQ
  static bool
  GTR_1777(); // for CPM
  static unsigned
  getEffectiveAddress();
private:
  static regS register_S; // address register
  static regBNK register_BNK; // bank register
  static unsigned
  bankDecoder();
  static unsigned conv_WBK[];
};
#endif
back to top