ControlRegisters

Struct ControlRegisters 

Source
pub struct ControlRegisters {
    pub diagnostic_only: CurrentInstructionDiagnostics,
    pub n: Instruction,
    pub n_sym: Option<SymbolicInstruction>,
    pub p: Address,
    pub q: Address,
    pub k: Option<SequenceNumber>,
    spr: Address,
    pub index_regs: [Signed18Bit; 64],
    f_memory: [SystemConfiguration; 32],
    flags: SequenceFlags,
    current_sequence_is_runnable: bool,
    prev_hold: bool,
}
Expand description

Registers from various elements of the TX-2.

This includes both programmer-accessible registers (Index registers for example) and non-programmer accessible registers (such as the N register).

Fields§

§diagnostic_only: CurrentInstructionDiagnostics§n: Instruction

Contents of the simulated N register.

§n_sym: Option<SymbolicInstruction>§p: Address

The P register is the program counter for the current sequence.

§q: Address

Contents of the simulaterd Q register.

§k: Option<SequenceNumber>

The k register (User Guide section 4-3.1) holds the current sequence number (User Guide section 5-24). k is Option<SequenceNumber> in order to allow the (emulated) control unit to recognise a CODABO button as indicating a need to change sequence from the control unit’s initial state to sequence 0.

This likely doesn’t reflect the actual operation of the TX-2 very well, and better understanding of the real operation of the machine will likely change this.

I think that perhaps section 12-2.6.2 of Volume 2 of the technical manual may explain how the real TX-2 avoided this problem, but I don’t think I understand what that section says. The text is:

“”“12-2.6.2 XPS FLIP-FLOP LOGIC. This flip-floop inhibits the X Memory strobe pulse into X when the register selected has the same address or the current program counter, is not register 0, and this is the first reference to this register since the last sequence change. In this case all the cores of the register are clearered and only “junk” (with a 50-50 chance of a bad parity) would be strobed into X. If XPS¹, then a clear pulse is substituted for the strobe pulse.

The flip-flop is set whenever a sequence change occurs, and is cleared the first time thereafter that the program counter register is referenced during a PK cycle (if ever). See Fig 12-8.“”“

§spr: Address

Start Point Register

§index_regs: [Signed18Bit; 64]

Index registers.

Index register 0 is the Toggle Start point. Index registers 40-77 are program counters for the sequences.

The index registers form an 18-bit ring (as stated in the description of the AUX instruction) and are described on page 3-68 of the User Handbook (section 3-3.1) as being signed integers.

§f_memory: [SystemConfiguration; 32]

the F memory

§flags: SequenceFlags

The flags; these indicate which sequences are runnable.

§current_sequence_is_runnable: bool§prev_hold: bool

prev_hold is set when the instruction we most previously executed had the “hold” bit set.

Implementations§

Trait Implementations§

Source§

impl Debug for ControlRegisters

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl DiagnosticFetcher for &ControlRegisters

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<Src, Scheme> ApproxFrom<Src, Scheme> for Src
where Scheme: ApproxScheme,

§

type Err = NoError

The error type produced by a failed conversion.
§

fn approx_from(src: Src) -> Result<Src, <Src as ApproxFrom<Src, Scheme>>::Err>

Convert the given value into an approximately equivalent representation.
§

impl<Dst, Src, Scheme> ApproxInto<Dst, Scheme> for Src
where Dst: ApproxFrom<Src, Scheme>, Scheme: ApproxScheme,

§

type Err = <Dst as ApproxFrom<Src, Scheme>>::Err

The error type produced by a failed conversion.
§

fn approx_into(self) -> Result<Dst, <Src as ApproxInto<Dst, Scheme>>::Err>

Convert the subject into an approximately equivalent representation.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T, Dst> ConvAsUtil<Dst> for T

§

fn approx(self) -> Result<Dst, Self::Err>
where Self: Sized + ApproxInto<Dst>,

Approximate the subject with the default scheme.
§

fn approx_by<Scheme>(self) -> Result<Dst, Self::Err>
where Self: Sized + ApproxInto<Dst, Scheme>, Scheme: ApproxScheme,

Approximate the subject with a specific scheme.
§

impl<T> ConvUtil for T

§

fn approx_as<Dst>(self) -> Result<Dst, Self::Err>
where Self: Sized + ApproxInto<Dst>,

Approximate the subject to a given type with the default scheme.
§

fn approx_as_by<Dst, Scheme>(self) -> Result<Dst, Self::Err>
where Self: Sized + ApproxInto<Dst, Scheme>, Scheme: ApproxScheme,

Approximate the subject to a given type with a specific scheme.
§

fn into_as<Dst>(self) -> Dst
where Self: Sized + Into<Dst>,

Convert the subject to a given type.
§

fn try_as<Dst>(self) -> Result<Dst, Self::Err>
where Self: Sized + TryInto<Dst>,

Attempt to convert the subject to a given type.
§

fn value_as<Dst>(self) -> Result<Dst, Self::Err>
where Self: Sized + ValueInto<Dst>,

Attempt a value conversion of the subject to a given type.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<Src> TryFrom<Src> for Src

§

type Err = NoError

The error type produced by a failed conversion.
§

fn try_from(src: Src) -> Result<Src, <Src as TryFrom<Src>>::Err>

Convert the given value into the subject type.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<Src, Dst> TryInto<Dst> for Src
where Dst: TryFrom<Src>,

§

type Err = <Dst as TryFrom<Src>>::Err

The error type produced by a failed conversion.
§

fn try_into(self) -> Result<Dst, <Src as TryInto<Dst>>::Err>

Convert the subject into the destination type.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<Src> ValueFrom<Src> for Src

§

type Err = NoError

The error type produced by a failed conversion.
§

fn value_from(src: Src) -> Result<Src, <Src as ValueFrom<Src>>::Err>

Convert the given value into an exactly equivalent representation.
§

impl<Src, Dst> ValueInto<Dst> for Src
where Dst: ValueFrom<Src>,

§

type Err = <Dst as ValueFrom<Src>>::Err

The error type produced by a failed conversion.
§

fn value_into(self) -> Result<Dst, <Src as ValueInto<Dst>>::Err>

Convert the subject into an exactly equivalent representation.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more