GE-115 Emulator
An Emulator of the General Electrics GE-115 computer
Data Structures | Public Types | Data Fields
ge Struct Reference

The entire state of the emulated system, including registers, memory, peripherals and timings. More...

#include <ge.h>

Data Structures

struct  ge_integrated_printer
 Integrated printer / console typewriter (channel 2) — pragmatic model. More...
 

Public Types

enum  { MC_NONE , MC_READ , MC_WRITE }
 

Data Fields

enum clock current_clock
 
uint8_t halted
 
uint8_t powered
 
struct pulse_eventon_pulse [END_OF_STATUS]
 
uint16_t rPO
 Program addresser.
 
uint16_t instr_pc
 Instruction-start PC (display aid, not a real register).
 
uint16_t rV1
 Addresser for the first operand.
 
uint16_t rV2
 Addresser for the second operand.
 
uint16_t rV3
 Addresser for external instructions using channel 3.
 
uint16_t rV4
 Addresser for external instructions using channel 2.
 
uint16_t cr_cache [8]
 Change/segment-register CACHE used for modified-address resolution.
 
uint8_t rRI
 Photoprint register 8-bit register used to store the photodisc codes.
 
uint16_t rL1
 Length of the operand.
 
uint8_t rL2
 Auxiliary register.
 
uint16_t rL3
 Length of operands involving channel 3.
 
struct ge_knot_no kNO
 
struct ge_knot_ni kNI
 Knot driven by counting network, or by the UA to store the result of the operation.
 
uint16_t rRO
 Multipurpose 8+1 bit register.
 
uint16_t rVO
 Default memory addresser.
 
uint16_t rBO
 Default operator.
 
uint8_t rFO
 Current function code.
 
uint8_t rSO
 Main sequencer.
 
uint8_t rSI
 Peripheral unit sequencer.
 
uint8_t rSA
 Future state configuration.
 
uint8_t rRE
 
uint8_t rRA
 
uint8_t ffFI
 Special conditions register 1.
 
uint8_t ffFA
 Special conditions register 2.
 
uint8_t RETO:1
 
uint8_t RET2:1
 
uint8_t AINI:1
 Program Loading.
 
uint8_t ALOI:1
 Load connector selection.
 
uint8_t ALTO:1
 Stops internal cycles.
 
uint8_t PODI:1
 Slow delay line.
 
uint8_t ACIC:1
 Recycle delay line.
 
uint8_t ALAM:1
 Operator Call.
 
uint8_t AVER:1
 Jump Condition Verified.
 
uint8_t SA00:1
 First-vs-second operand flag for address modification.
 
uint8_t ADIR:1
 Disable Step By Step.
 
uint8_t RINT:1
 
uint8_t JS1:1
 Console jump condition 1.
 
uint8_t JS2:1
 Console jump condition 2.
 
uint8_t JE:1
 JE/AVER jump instruction exectuted.
 
uint8_t INTE:1
 Interruption present.
 
uint8_t PB06:1
 Unconditionally stores L106.
 
uint8_t PB07:1
 Unconditionally stores L106.
 
uint8_t PB26:1
 Stores L106 if channel 2 is selected.
 
uint8_t PB36:1
 
uint8_t PB37:1
 
uint8_t PIC1:1
 Selection Channel 1.
 
uint8_t RASI:1
 Channel 1 in transfer.
 
uint8_t PUC2:1
 Channel 2 in transfer.
 
uint8_t PUC3:1
 Channel 3 in transfer.
 
uint8_t PEC1:1
 
uint8_t PEC1_pending:1
 
uint8_t RUF1:1
 
uint8_t URPE:1
 
uint8_t URPU:1
 
uint8_t RC00:1
 Asynchronous CPU Cycle Request.
 
uint8_t RC01:1
 Asynchronous Channel 1 Cycle Request.
 
uint8_t RC02:1
 Asynchronous Channel 2 Cycle Request.
 
uint8_t RC03:1
 Asynchronous Channel 3 Cycle Request.
 
uint8_t RIA0:1
 Synchronous CPU Cycle Request.
 
uint8_t RESI:1
 Synchronous Channel 1 Cycle Request.
 
uint8_t RIA2:1
 Synchronous Channel 2 Cycle Request.
 
uint8_t RIA3:1
 Synchronous Channel 3 Cycle Request.
 
uint8_t RECE:1
 Selection Check Byte.
 
uint8_t RIG1:1
 End from controller 1.
 
uint8_t RIG3:1
 
uint8_t RACI:1
 Rejected Command.
 
uint8_t RAVI:1
 VICU Support.
 
uint8_t RT121:1
 
uint8_t RT131:1
 
uint8_t future_state
 Future state.
 
enum ge_console_rotary register_selector
 The current state of the console register rotary switch.
 
struct ge_console_switches console_switches
 The current state of the console switches.
 
uint8_t step_by_step:1
 Step by step execution.
 
enum ge:: { ... }  memory_command
 
uint8_t mem [MEM_SIZE]
 The memory of the emulated system.
 
uint8_t mem_parity [MEM_SIZE]
 Stored odd-parity bit (1 bit per location) written alongside mem[].
 
uint8_t mem_written [MEM_SIZE]
 1 once a location has been written; prevents false MEM CHECK on cleared memory
 
uint32_t mem_size
 Installed memory size; 0 is treated as MEM_SIZE (full address space)
 
uint8_t mem_check
 Parity fault flag: set when a READ finds a parity mismatch on a previously-written location.
 
uint8_t inv_add
 Invalid-address fault flag: set when rVO >= installed memory size.
 
uint8_t inject_chan1_status
 Channel-1 peripheral status override for error injection.
 
struct ge_counting_network counting_network
 
struct ge_integrated_reader integrated_reader
 The I/O interface for the integrated reader (RI)
 
struct ge::ge_integrated_printer integrated_printer
 
struct ge_connector ST3
 The I/O interface for the ST3 connector.
 
struct ge_connector ST4
 The I/O interface for the ST4 connector.
 
struct ge_channel channel2
 Integrated channel 2 (CAN2) line bundle — shared by the integrated reader (input), the printer/typewriter (output), and the keyboard.
 
struct ge_periperi
 
void * std_core
 Shared core for Standard-GE-100 controllers on connectors 3/4 (disk/tape).
 
uint8_t TO50_did_CI32_or_CI33:1
 Workaround for pulse TO50.
 

Detailed Description

The entire state of the emulated system, including registers, memory, peripherals and timings.

Definition at line 96 of file ge.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
MC_NONE 
MC_READ 
MC_WRITE 

Definition at line 560 of file ge.h.

Field Documentation

◆ ACIC

uint8_t ACIC

Recycle delay line.

Initially is set by "CLEAR", after that it is reset cyclicly. The reset pulse is TO10, the normal setting pulse is TO90 if a LOLL instruction has not been performed, in this case it is set by TI05, with a delay of about 130ns. (cpu fo. 96).

NOTE: documentation differs at cpu fo. 99 that states:

The ACIC1 FF is reset by the TO10 pulse and it is set by the TO901 with the condition PODIB == 1.

PODI is the FF which stores the LOLL diagnostic instruction performance causing an increase of the cycle of about 130 ns.

In fact, if PODIB == 0 the recycling occurs with the pulse TI05 instead of TO90.

Definition at line 322 of file ge.h.

◆ ADIR

uint8_t ADIR

Disable Step By Step.

Set with CI77 by the INS instruction, reset with CI78 issued by ENS, or with "CLEAR" (cpu fo. 97).

Definition at line 362 of file ge.h.

◆ AINI

uint8_t AINI

Program Loading.

Set by pressing the "LOAD" button of the console, and it is reset by pressing "CLEAR", or with the command CI39 (in the alpha phase of the E0 state).

Definition at line 278 of file ge.h.

◆ ALAM

uint8_t ALAM

Operator Call.

It commands the switching on of the "Operator call" lamp. It is set with CI87 issued by the LON and LOLL instructions. It is reset with CI88 issued by the LOFF instruction, or by pressing the "CLEAR" button (cpu fo. 96).

Definition at line 332 of file ge.h.

◆ ALOI

uint8_t ALOI

Load connector selection.

Set by toggling the bistable switch "LOAD 1"/"LOAD 2" button of the console.

Definition at line 285 of file ge.h.

◆ ALTO

uint8_t ALTO

Stops internal cycles.

If set, stops the performance of the internal processing cycles, without stopping the timing generation (cpu fo. 98).

Definition at line 293 of file ge.h.

◆ AVER

uint8_t AVER

Jump Condition Verified.

Reset in the E0 status of the alpha phase, together with AINI, with the CI39 command (cpu fo. 96).

Set in the E6 status of the alpha phase of the jump instructions (CI38) if signal DC16 (verified condition) is present (cpu fo. 96).

Definition at line 343 of file ge.h.

◆ channel2

struct ge_channel channel2

Integrated channel 2 (CAN2) line bundle — shared by the integrated reader (input), the printer/typewriter (output), and the keyboard.

Generalises the integrated_reader/connector lines; see channel.h. Phase 3 wires the rSI transfer micro-states to these lines; until then it is scaffolding and the legacy integrated_reader/integrated_printer paths remain authoritative.

Definition at line 645 of file ge.h.

◆ console_switches

struct ge_console_switches console_switches

The current state of the console switches.

Definition at line 556 of file ge.h.

◆ counting_network

struct ge_counting_network counting_network

Definition at line 590 of file ge.h.

◆ cr_cache

uint16_t cr_cache[8]

Change/segment-register CACHE used for modified-address resolution.

The eight change registers are hardware-cached: addressing (EXEC_INDEX -> cr_base) reads this cache, which is updated only by the register instructions (LR/LA/AMR/SMR/JRT, via cr_wr16) and by ge_seed_segment_bases — NOT by general memory writes. This mirrors real hardware: a destructive memory test that writes the change-register shadow RAM at mem[240+2N] (0xF0-0xFF) as part of testing the 0-8K region does NOT corrupt live addressing (the CPU keeps using the cached registers), so the test's own save/restore logic can run. mem[240+2N] remains the shadow RAM the register instructions read/write and that the test exercises.

Definition at line 140 of file ge.h.

◆ current_clock

enum clock current_clock

Definition at line 98 of file ge.h.

◆ ffFA

uint8_t ffFA

Special conditions register 2.

7 Flip-Flops containing special conditions which occur during the performance of an instruction. Loaded from ffFI in T010.

Faults (from pp. 139-141)

Definition at line 263 of file ge.h.

◆ ffFI

uint8_t ffFI

Special conditions register 1.

7 Flip-Flops containing special conditions which occur during the performance of an instruction. Unloaded in ffFA in T010

Definition at line 253 of file ge.h.

◆ future_state

uint8_t future_state

Future state.

Ad-hoc logic, at the end of the cycle contains the result of the future state network.

Definition at line 546 of file ge.h.

◆ halted

uint8_t halted

Definition at line 99 of file ge.h.

◆ inject_chan1_status

uint8_t inject_chan1_status

Channel-1 peripheral status override for error injection.

0 = report the default "operation OK" status (0x40); non-zero = report this status byte instead, so a test/harness can inject a peripheral error/abnormal condition (e.g. 0x42 sets RO1 -> the EPER "examine" decode sees an error). Read by CE_chan1_status (msl-commands.c).

Definition at line 588 of file ge.h.

◆ instr_pc

uint16_t instr_pc

Instruction-start PC (display aid, not a real register).

Latched in the alpha fetch (state e2/e3) to the address of the opcode being executed, so UI disassembly can highlight the current instruction without drifting onto operands or the next line as rPO advances mid-instruction.

Definition at line 121 of file ge.h.

◆ INTE

uint8_t INTE

Interruption present.

Definition at line 369 of file ge.h.

◆ integrated_printer

struct ge::ge_integrated_printer integrated_printer

◆ integrated_reader

struct ge_integrated_reader integrated_reader

The I/O interface for the integrated reader (RI)

Definition at line 595 of file ge.h.

◆ inv_add

uint8_t inv_add

Invalid-address fault flag: set when rVO >= installed memory size.

Definition at line 581 of file ge.h.

◆ JE

uint8_t JE

JE/AVER jump instruction exectuted.

Definition at line 368 of file ge.h.

◆ JS1

uint8_t JS1

Console jump condition 1.

Definition at line 366 of file ge.h.

◆ JS2

uint8_t JS2

Console jump condition 2.

Definition at line 367 of file ge.h.

◆ kNI

struct ge_knot_ni kNI

Knot driven by counting network, or by the UA to store the result of the operation.

UA may store MSB or LSB depending on the operation.

Definition at line 164 of file ge.h.

◆ kNO

struct ge_knot_no kNO

Definition at line 158 of file ge.h.

◆ mem

uint8_t mem[MEM_SIZE]

The memory of the emulated system.

Definition at line 566 of file ge.h.

◆ mem_check

uint8_t mem_check

Parity fault flag: set when a READ finds a parity mismatch on a previously-written location.

Definition at line 578 of file ge.h.

◆ mem_parity

uint8_t mem_parity[MEM_SIZE]

Stored odd-parity bit (1 bit per location) written alongside mem[].

Definition at line 569 of file ge.h.

◆ mem_size

uint32_t mem_size

Installed memory size; 0 is treated as MEM_SIZE (full address space)

Definition at line 575 of file ge.h.

◆ mem_written

uint8_t mem_written[MEM_SIZE]

1 once a location has been written; prevents false MEM CHECK on cleared memory

Definition at line 572 of file ge.h.

◆ []

enum { ... } memory_command

◆ on_pulse

struct pulse_event* on_pulse[END_OF_STATUS]

Definition at line 105 of file ge.h.

◆ PB06

uint8_t PB06

Unconditionally stores L106.

Definition at line 373 of file ge.h.

◆ PB07

uint8_t PB07

Unconditionally stores L106.

Definition at line 374 of file ge.h.

◆ PB26

uint8_t PB26

Stores L106 if channel 2 is selected.

Definition at line 375 of file ge.h.

◆ PB36

uint8_t PB36

Definition at line 376 of file ge.h.

◆ PB37

uint8_t PB37

Definition at line 377 of file ge.h.

◆ PEC1

uint8_t PEC1

Definition at line 420 of file ge.h.

◆ PEC1_pending

uint8_t PEC1_pending

Definition at line 421 of file ge.h.

◆ peri

struct ge_peri* peri

Definition at line 647 of file ge.h.

◆ PIC1

uint8_t PIC1

Selection Channel 1.

Used during the general B phase for command forwarding or condition examination. Unconditionally set by command CE02 which enables the channel selection even if the interested channels are 2 or 3. When a character transfer in output has been initiated with channel 1, signal PAP4A resets PUC1 at the start of the transfer phase, when the first transfer is done from RO into RA (CE00), unless signal PAR21 had already performed that reset earlier in the status-B0 path. The CPU text explicitly says PAR21 is generated by command CI391. (cpu fo. 235, 237).

Note: the above GE docs refers to PUC2, however in intermediate block diagram fo. 10, it's shown the real flipflop is PIC1, and PUC2 is derived combinatorially from it.

Definition at line 397 of file ge.h.

◆ PODI

uint8_t PODI

Slow delay line.

Increases the delay line cycle by about 130ns. It is set together with ALAM by the LOLL diagnostic instruction (cpu fo. 96).

Definition at line 301 of file ge.h.

◆ powered

uint8_t powered

Definition at line 100 of file ge.h.

◆ PUC2

uint8_t PUC2

Channel 2 in transfer.

(cpu fo. 236)

Definition at line 411 of file ge.h.

◆ PUC3

uint8_t PUC3

Channel 3 in transfer.

(cpu fo. 236)

Definition at line 418 of file ge.h.

◆ RACI

uint8_t RACI

Rejected Command.

Definition at line 532 of file ge.h.

◆ RASI

uint8_t RASI

Channel 1 in transfer.

(cpu fo. 236)

Definition at line 404 of file ge.h.

◆ RAVI

uint8_t RAVI

VICU Support.

Definition at line 535 of file ge.h.

◆ rBO

uint16_t rBO

Default operator.

16-bit register automatically loaded from NO, used to drive the UA (aka ALU) and used to visualize the content of other registers on the operating panel of the console

Definition at line 188 of file ge.h.

◆ RC00

uint8_t RC00

Asynchronous CPU Cycle Request.

It is reset with CE18 (enable RIAP) while a cycle is performed for the CPU (RIUC=1). The CPU is thus waiting for the external triggers of the command received. It is set by the clear signal (CAGUF=0) with the signal of command received by the peripheral unit (RBII1=1) with the insertion of the SITE key which frees the waitings (RAITI=1) and finally with the disselection of channel 1 (PU16 = 0) (cpu fo. 114).

Definition at line 445 of file ge.h.

◆ RC01

uint8_t RC01

Asynchronous Channel 1 Cycle Request.

It is set with the OR of the channel 1 request triggers (RAI01) if the executing instruction is not over (RIVEF=1). Also, when the SITE key is inserted during a during a transfer of channel 1 (RAISI2=1). It is reset during a cycle of channel 1 with CE18 (enable RIAP), or at the end of a transfer on channel 1 (cpu fo. 114)

Definition at line 458 of file ge.h.

◆ RC02

uint8_t RC02

Asynchronous Channel 2 Cycle Request.

It is set with the trigger LU08 from the integrated reader, or when the SITE key is inserted (RAITI1=1) during the transfers on channel 2.

Request from printer do not act on RC02, but are derived from it with an OR (RIMZA).

It is reset during a cycle of channel 2 with CE18 (enable RIAP), or at the end of a transfer on channel 2 (cpu fo. 114).

Definition at line 473 of file ge.h.

◆ RC03

uint8_t RC03

Asynchronous Channel 3 Cycle Request.

It is set with the OR of the cycle request triggers relative to channel 3 (RA301=1) if the executing instruction is not over (RIVAF=1) and additional performances of the GE-130 are enabled (FUL4F=1).

It is reset during a cycle of channel 3 with CE18 (enable RIAP), also, it is reset when the SITE key is inserted (RAITI=1) during a data transfer on channel 3 (RES36=1), or at the end of transfer on channel 3 (PIC32=0) (cpu fo. 114).

Definition at line 488 of file ge.h.

◆ RECE

uint8_t RECE

Selection Check Byte.

Definition at line 524 of file ge.h.

◆ register_selector

enum ge_console_rotary register_selector

The current state of the console register rotary switch.

Definition at line 551 of file ge.h.

◆ RESI

uint8_t RESI

Synchronous Channel 1 Cycle Request.

Transfered from RC01 at pulse TO00 (cpu fo. 114).

Definition at line 507 of file ge.h.

◆ RET2

uint8_t RET2

Definition at line 270 of file ge.h.

◆ RETO

uint8_t RETO

Definition at line 269 of file ge.h.

◆ rFO

uint8_t rFO

Current function code.

8-bit register storing the function code of the instruction being executed.

Definition at line 195 of file ge.h.

◆ RIA0

uint8_t RIA0

Synchronous CPU Cycle Request.

Is conditioned by the signals ALTOF and RAM02.

When the FF ALTOF is reset, the cycle requests from the CPU are not serverd, therefore the internal calculation is stopped. This counter consists of the FF RAMO and RAMI and counts with the pulse TO10.

Definition at line 500 of file ge.h.

◆ RIA2

uint8_t RIA2

Synchronous Channel 2 Cycle Request.

Transfered from RC02 at pulse TO00 (cpu fo. 114).

Definition at line 514 of file ge.h.

◆ RIA3

uint8_t RIA3

Synchronous Channel 3 Cycle Request.

Transfered from RC03 at pulse TO00 (cpu fo. 114).

Definition at line 521 of file ge.h.

◆ RIG1

uint8_t RIG1

End from controller 1.

Definition at line 527 of file ge.h.

◆ RIG3

uint8_t RIG3

Definition at line 529 of file ge.h.

◆ RINT

uint8_t RINT

Definition at line 364 of file ge.h.

◆ rL1

uint16_t rL1

Length of the operand.

16-bit used to store the length of the operands or for information in transit.

Definition at line 154 of file ge.h.

◆ rL2

uint8_t rL2

Auxiliary register.

Definition at line 155 of file ge.h.

◆ rL3

uint16_t rL3

Length of operands involving channel 3.

Definition at line 156 of file ge.h.

◆ rPO

uint16_t rPO

Program addresser.

The register used to scan the positions of the memory in which the program instructions are recorded. (p.118).

Definition at line 113 of file ge.h.

◆ rRA

uint8_t rRA

Definition at line 245 of file ge.h.

◆ rRE

uint8_t rRE

Definition at line 244 of file ge.h.

◆ rRI

uint8_t rRI

Photoprint register 8-bit register used to store the photodisc codes.

Definition at line 146 of file ge.h.

◆ rRO

uint16_t rRO

Multipurpose 8+1 bit register.

Stores the read signal from memory (e.g. the result of transfer command MEM).

Definition at line 171 of file ge.h.

◆ rSA

uint8_t rSA

Future state configuration.

Register that drives the MLS and the logic to generate future status configuration

Definition at line 242 of file ge.h.

◆ rSI

uint8_t rSI

Peripheral unit sequencer.

4-bit sequencer used for data xechange with peripheral units through channel 2.

Drives the NA knot when the cycle has been attributed to channel 2.

Loaded with the first 4 bits of the future status network

  • after the execution of a channel 2 cycle
  • when forcing a status in SI using CU20 (DC status of general beta phase)

Definition at line 234 of file ge.h.

◆ rSO

uint8_t rSO

Main sequencer.

Drives the NA knot when the cycle has been attributed to the CPU or channel 1.

It is used to establish the sequence for:

  • alpha phase for all internal and external instructions
  • beta phase of internal instructions
  • organisation phase (general beta) of external instructions
  • program loading

Loaded from the future status network when signal SOC01 is activated, provided the RICI key is not active, in the following cases:

  • the FF ARES has been set thru "CLEAR". This causes the machine to execute the status 00, and setting of SO07 using CU07, this will set the configuration of SO to 80.
  • the rotary switch is in forcing of SO. When a cycle is attributed to the CPU pressing "START", the AM00-07 keys are forced in SO.
  • at the end of a cycle attributed to the CPU, when the rotary switch is in normal position, the future status network is stored in SO. (cpu fo. 127)

Definition at line 220 of file ge.h.

◆ RT121

uint8_t RT121

Definition at line 537 of file ge.h.

◆ RT131

uint8_t RT131

Definition at line 538 of file ge.h.

◆ RUF1

uint8_t RUF1

Definition at line 423 of file ge.h.

◆ rV1

uint16_t rV1

Addresser for the first operand.

Definition at line 123 of file ge.h.

◆ rV2

uint16_t rV2

Addresser for the second operand.

Definition at line 124 of file ge.h.

◆ rV3

uint16_t rV3

Addresser for external instructions using channel 3.

Definition at line 125 of file ge.h.

◆ rV4

uint16_t rV4

Addresser for external instructions using channel 2.

Definition at line 126 of file ge.h.

◆ rVO

uint16_t rVO

Default memory addresser.

16-bit register which is loaded in TO20 from NO, used to address memory for read and write operations.

Definition at line 179 of file ge.h.

◆ SA00

uint8_t SA00

First-vs-second operand flag for address modification.

Sequencer flag (the flow chart's <SA00> diamond, dwg 14023130) that distinguishes the FIRST operand (write the resolved effective address back to V1) from the SECOND operand (V2 only) during the modified-address indexing micro-cycle (states ED|EC -> EF|EE). Set when entering the index pass for operand 1, cleared for operand 2.

Definition at line 354 of file ge.h.

◆ ST3

struct ge_connector ST3

The I/O interface for the ST3 connector.

Definition at line 631 of file ge.h.

◆ ST4

struct ge_connector ST4

The I/O interface for the ST4 connector.

Definition at line 636 of file ge.h.

◆ std_core

void* std_core

Shared core for Standard-GE-100 controllers on connectors 3/4 (disk/tape).

Owned by connector34.c; NULL until connector34_init(). Opaque here to avoid a header dependency — see connector34.h.

Definition at line 654 of file ge.h.

◆ step_by_step

uint8_t step_by_step

Step by step execution.

Todo:
replace with signal name

Definition at line 558 of file ge.h.

◆ TO50_did_CI32_or_CI33

uint8_t TO50_did_CI32_or_CI33

Workaround for pulse TO50.

Currently we first run the common machine logic, then the MSL states. However in certain cases (e.g. display state 00) the common TO50 implementation is conditioned on the activation of the MSL TO50... So, until we figure out a better way of factoring the MSL, let's store here the conditions for the common machine TO50, and delay its excecution to a fake TO50-1 clock pulse.

Definition at line 667 of file ge.h.

◆ URPE

uint8_t URPE

Definition at line 425 of file ge.h.

◆ URPU

uint8_t URPU

Definition at line 426 of file ge.h.