Raw File
SCL.cpp
/****************************************************************************
 * SCL - SCALER subsystem
 *
 * AUTHOR: John Pultorak
 * DATE: 9/22/01
 * FILE: SCL.cpp
 *
 * NOTES: see header file.
 *
 *****************************************************************************
 */
#include "SCL.h"
#include "CTR.h"
#include "MON.h"
regSCL SCL::register_SCL;
regF17 SCL::register_F17;
regF13 SCL::register_F13;
regF10 SCL::register_F10;
enum oneShotType
{ // **inferred; not defined in orignal R393 AGC4 spec.
  WAIT_FOR_TRIGGER = 0, OUTPUT_PULSE = 1, // LSB (bit 1) is the output bit for the one-shot
  WAIT_FOR_RESET = 2
};
void
SCL::doexecWP_F17()
{
  int bit = SCL::register_SCL.readField(17, 17);
  switch (register_F17.read())
    {
  case WAIT_FOR_TRIGGER:
    if (bit == 1)
      register_F17.write(OUTPUT_PULSE);
    break;
  case OUTPUT_PULSE:
    register_F17.write(WAIT_FOR_RESET);
    break;
  case WAIT_FOR_RESET:
    if (bit == 0)
      register_F17.write(WAIT_FOR_TRIGGER);
    break;
  default:
    ;
    }
}
void
SCL::doexecWP_F13()
{
  int bit = SCL::register_SCL.readField(13, 13);
  switch (register_F13.read())
    {
  case WAIT_FOR_TRIGGER:
    if (bit == 1)
      register_F13.write(OUTPUT_PULSE);
    break;
  case OUTPUT_PULSE:
    register_F13.write(WAIT_FOR_RESET);
    break;
  case WAIT_FOR_RESET:
    if (bit == 0)
      register_F13.write(WAIT_FOR_TRIGGER);
    break;
  default:
    ;
    }
}
void
SCL::doexecWP_F10()
{
  int bit = SCL::register_SCL.readField(10, 10);
  switch (register_F10.read())
    {
  case WAIT_FOR_TRIGGER:
    if (bit == 1)
      register_F10.write(OUTPUT_PULSE);
    break;
  case OUTPUT_PULSE:
    register_F10.write(WAIT_FOR_RESET);
    CTR::pcUp[TIME1] = 1;
    CTR::pcUp[TIME3] = 1;
    CTR::pcUp[TIME4] = 1;
    break;
  case WAIT_FOR_RESET:
    if (bit == 0)
      register_F10.write(WAIT_FOR_TRIGGER);
    break;
  default:
    ;
    }
}
unsigned
SCL::F17x()
{
  return register_F17.readField(1, 1);
}
unsigned
SCL::F13x()
{
  return register_F13.readField(1, 1);
}
unsigned
SCL::F10x()
{
  return register_F10.readField(1, 1);
}
void
SCL::doexecWP_SCL()
{
  if (MON::SCL_ENAB) // if the scaler is enabled
    {
      //write((read() + 1) % outmask());
      register_SCL.write((register_SCL.read() + 1));
    }
}
back to top