struct VMemory {Show 15 fields
a_register: Unsigned36Bit,
b_register: Unsigned36Bit,
c_register: Unsigned36Bit,
d_register: Unsigned36Bit,
e_register: Unsigned36Bit,
m_register_metabit: bool,
unimplemented_shaft_encoder: MemoryWord,
unimplemented_external_input_register: MemoryWord,
rtc: MemoryWord,
rtc_start: Duration,
codabo_start_point: [Unsigned36Bit; 8],
plugboard: [Unsigned36Bit; 32],
permit_unknown_reads: bool,
sacrificial_word_for_unknown_reads: MemoryWord,
sacrificial_metabit: bool,
}
Expand description
The TX-2’s V-memory.
§Metabits
Arithmetic registers have no meta bit. Accesses which attempt to read the meta bit of registers A, B, , D, E actually return the meta bit in the M register. This is briefly described on page 5-23 of the User Handbook.
It says,
The data reference metabit (
M⁴˙¹⁰
) can be detected only when set (just asN⁴˙¹⁰
above). Note that it can be changed without a memory reference for it serves as the metabit of the A, B, C, D, and E registers. (i.e.,MKC₄.₁₀ A
orMKC₄.₁₀ B
will change bit 4.10 of M).“
V memory in general does behave as if it has a meta bit. For example, there is a push-button on the console that acts as the value of the meta bit of the shaft encoder register.
Fields§
§a_register: Unsigned36Bit
§b_register: Unsigned36Bit
§c_register: Unsigned36Bit
§d_register: Unsigned36Bit
§e_register: Unsigned36Bit
§m_register_metabit: bool
§unimplemented_shaft_encoder: MemoryWord
§unimplemented_external_input_register: MemoryWord
§rtc: MemoryWord
§rtc_start: Duration
§codabo_start_point: [Unsigned36Bit; 8]
§plugboard: [Unsigned36Bit; 32]
§permit_unknown_reads: bool
Writes to unknown locations are required to be ignored, but
reads have to return a value. If permit_unknown
_reads is
set, a special value is returned. If not, a QSAL alarm will
be raised (though that alarm may in turn be suppressed).
sacrificial_word_for_unknown_reads: MemoryWord
§sacrificial_metabit: bool
Implementations§
Source§impl VMemory
impl VMemory
fn new(ctx: &Context) -> VMemory
fn get_a_register(&self) -> Unsigned36Bit
fn get_b_register(&self) -> Unsigned36Bit
fn get_c_register(&self) -> Unsigned36Bit
fn get_d_register(&self) -> Unsigned36Bit
fn get_e_register(&self) -> Unsigned36Bit
fn set_a_register(&mut self, value: Unsigned36Bit)
fn set_b_register(&mut self, value: Unsigned36Bit)
fn set_c_register(&mut self, value: Unsigned36Bit)
fn set_d_register(&mut self, value: Unsigned36Bit)
fn set_e_register(&mut self, value: Unsigned36Bit)
Sourcefn read_access<'a>(
&'a mut self,
ctx: &Context,
addr: &Address,
) -> Result<MemoryReadRef<'a>, MemoryOpFailure>
fn read_access<'a>( &'a mut self, ctx: &Context, addr: &Address, ) -> Result<MemoryReadRef<'a>, MemoryOpFailure>
Perform a memory read.
Sourcefn write_access<'a>(
&'a mut self,
_ctx: &Context,
addr: &Address,
) -> Result<Option<MemoryWriteRef<'a>>, MemoryOpFailure>
fn write_access<'a>( &'a mut self, _ctx: &Context, addr: &Address, ) -> Result<Option<MemoryWriteRef<'a>>, MemoryOpFailure>
Perform a memory write. Return a mutable reference to the
memory word being accessed or, if this is an attempt to write
to a read-only location, return None
.