17#define SIG( name ) static inline uint8_t name (struct ge *ge)
26SIG(RESIA) {
return !RESI1(
ge); }
31SIG(RIUCA) {
return !(RIA01(
ge) && RESIA(
ge) && RIA2A(
ge) && RIA3A(
ge)); }
34SIG(RES01) {
return !(RESIA(
ge) ); }
75SIG(verified_condition) {
78 uint8_t M7 =
BIT(M, 7);
79 uint8_t M6 =
BIT(M, 6);
80 uint8_t M5 =
BIT(M, 5);
81 uint8_t M4 =
BIT(M, 4);
88 ((M7 && !FA4 && !FA5) ||
89 (M6 && !FA4 && FA5) ||
90 (M5 && FA4 && !FA5) ||
91 (M4 && FA4 && FA5))) ||
202 case KNOT_RI_IN_NO_43:
208 case KNOT_FORCING_NONE:
210 case KNOT_FORCING_NO_21:
213 case KNOT_FORCING_NO_43:
242 if (RES0(
ge) || (RIUC(
ge) && AF32(
ge)))
248 if (RES0(
ge) || RES3(
ge))
251 if (RIUC(
ge) && !AF32(
ge))
262 return (cn & 0x000f) >> 0;
264 return (cn & 0x00f0) >> 4;
266 return (cn & 0x0f00) >> 8;
268 return (cn & 0xf000) >> 12;
270 return (
ge->
rRO & 0x0f) >> 0;
272 return (
ge->
rRO & 0xf0) >> 4;
307 return ((ni4 << 12) |
368SIG(DI79A) {
return !(DI151(
ge) && DI021(
ge)); }
371SIG(DI84A) {
return !(DI011(
ge) && DI291(
ge)); }
372SIG(DI85A) {
return !(DI291(
ge) && DI031(
ge)); }
375SIG(DI91A) {
return !(DI031(
ge) && DI211(
ge)); }
376SIG(DI931) {
return !(DI21A(
ge) && DI29A(
ge) && DI21A(
ge) && DI15A(
ge)); }
379SIG(DI95A) {
return !(DI931(
ge) && DI031(
ge)); }
380SIG(DI971) {
return !(DI29A(
ge) && DI25A(
ge) && DI24A(
ge) && DI29A(
ge)); }
386SIG(DO021) {
return !(DO02A(
ge) && DO02A(
ge)); }
393SIG(DE00A) {
return 0; !(DO011(
ge) && DI062(
ge)); }
395SIG(DE07A) {
return !(DO071(
ge) && DI062(
ge)); }
397SIG(DE231) {
return !(DE23A(
ge) && DE23A(
ge)); }
399SIG(DA25A) {
return !(DI111(
ge) && DO021(
ge)); }
405SIG(DU201) {
return !(DU18A(
ge) && DU19A(
ge)); }
408SIG(EC70A) {
return !(AF51(
ge) && DI572(
ge)); }
412SIG(ED91A) {
return !(DE231(
ge) && DU201(
ge)); }
509SIG(PB11A) {
return !(FINA1(
ge) && PC111(
ge)); }
510SIG(PB13A) {
return !(TE303(
ge) && PC131(
ge)); }
511SIG(PB14A) {
return !(TE304(
ge) && PC141(
ge)); }
516SIG(RB101) {
return !(AITEA(
ge) && PB11A(
ge) && PB13A(
ge) && PB14A(
ge)); }
519SIG(RB01A) {
return !(RT121(
ge) && RB101(
ge)); }
520SIG(RB111) {
return !(RB12A(
ge) && RB01A(
ge)); }
522SIG(PF12A) {
return !(FINI1(
ge) && PC121(
ge)); }
523SIG(PF13A) {
return !(FINE3(
ge) && PC131(
ge)); }
524SIG(PF14A) {
return !(FINE4(
ge) && PC141(
ge)); }
525SIG(RF101) {
return !(PF12A(
ge) && PF13A(
ge) && PF14A(
ge)); }
548SIG(PELEA) {
return !(LU081(
ge) && LUPO1(
ge)); }
549SIG(RELO1) {
return !(PELEA(
ge) && RUF1A(
ge)); }
550SIG(PAM4A) {
return !(RELO1(
ge) && RASI1(
ge) && PC121(
ge)); }
551SIG(PM11A) {
return !(FUSE1(
ge) && PC111(
ge)); }
552SIG(PM13A) {
return !(MARE3(
ge) && PC131(
ge)); }
553SIG(PM14A) {
return !(MARE4(
ge) && PC141(
ge)); }
554SIG(RM101) {
return !(PM11A(
ge) && PM13A(
ge) && PM14A(
ge)); }
555SIG(PAM1A) {
return !(RASI1(
ge) && RM101(
ge)); }
556SIG(RS011) {
return !(PAM4A(
ge) && PAM1A(
ge)); }
557SIG(PIM1A) {
return !(TO501(
ge) || RS011(
ge) || RB111(
ge) || RUF11(
ge)); }
560SIG(PUC11) {
return !(PIC1A(
ge) && PIM1A(
ge)); }
601SIG(PC11A) {
return !(PUC11(
ge) && PB071(
ge) && PB061(
ge)); }
602SIG(PC12A) {
return !(PUC11(
ge) && PB071(
ge) && PB06A(
ge)); }
603SIG(PC13A) {
return !(PUC11(
ge) && PB07A(
ge) && PB06A(
ge)); }
604SIG(PC14A) {
return !(PUC11(
ge) && PB07A(
ge) && PB061(
ge)); }
605SIG(PC21A) {
return !(PUC21(
ge) && PB261(
ge)); }
606SIG(PC22A) {
return !(PUC21(
ge) && PB26A(
ge)); }
607SIG(PC31A) {
return !(PUC31(
ge) && PB371(
ge) && PB361(
ge)); }
608SIG(PC32A) {
return !(PUC31(
ge) && PB371(
ge) && PB36A(
ge)); }
609SIG(PC33A) {
return !(PUC31(
ge) && PB37A(
ge) && PB36A(
ge)); }
610SIG(PC34A) {
return !(PUC31(
ge) && PB37A(
ge) && PB361(
ge)); }
612SIG(SEPEI) {
return !(PC11A(
ge) && PC21A(
ge) && PC31A(
ge)); }
613SIG(PU002) {
return !(PC12A(
ge) && PC22A(
ge) && PC32A(
ge)); }
614SIG(PU003) {
return !(PC13A(
ge) && PC33A(
ge)); }
615SIG(PU004) {
return !(PC14A(
ge) && PC34A(
ge)); }
623SIG(PUB01) {
return !(PUB01_d1(
ge) && PUB01_d2(
ge) && PUB01_d3(
ge) && PUB01_d4(
ge)); }
640SIG(DU89A) {
return !(DU871(
ge) && DU881(
ge) && PC011(
ge) && DU881(
ge)); }
646SIG(DU92) {
return !(DU90A(
ge) && DU91A(
ge)); }
666SIG(DU98) {
return !(DU89A(
ge) && PC03A(
ge)); }
669SIG(TU00A) {
return !(RT121(
ge) && RUF1A(
ge) && PC121(
ge));}
681SIG(PTA3A) {
return !(TE103(
ge) && TE203(
ge)); }
684SIG(PTA4A) {
return !(TE104(
ge) && TE204(
ge)); }
687SIG(PA11A) {
return !(FU091(
ge) && PC111(
ge)); }
688SIG(PA12A) {
return !(LU081(
ge) && PC121(
ge)); }
689SIG(PA13A) {
return !(PTA31(
ge) && PC131(
ge)); }
690SIG(PA14A) {
return !(PTA41(
ge) && PC141(
ge)); }
691SIG(RA101) {
return !(PA11A(
ge) && PA12A(
ge) && PA13A(
ge) && PA13A(
ge) && PA14A(
ge)); }
717SIG(PIB1A) {
return !(RET21(
ge) && PC211(
ge)); }
720SIG(PB12A) {
return !(RESI1(
ge) && PC121(
ge)); }
721SIG(PB22A) {
return !(RET21(
ge) && PC221(
ge)); }
722SIG(PB32A) {
return !(RES31(
ge) && PC321(
ge)); }
723SIG(PIB21) {
return !(PB12A(
ge) && PB22A(
ge) && PB32A(
ge)); }
725SIG(RB13A) {
return !(RESI1(
ge) && PC131(
ge)); }
726SIG(RB33A) {
return !(RES31(
ge) && PC331(
ge)); }
727SIG(PIB31) {
return !(RB13A(
ge) && RB33A(
ge)); }
729SIG(RB14A) {
return !(RESI1(
ge) && PC141(
ge)); }
730SIG(RB34A) {
return !(RES31(
ge) && PC341(
ge)); }
731SIG(PIB41) {
return !(RB14A(
ge) && RB34A(
ge)); }
743 const char *where =
"";
745 uint8_t count = PIB11(
ge) + PIB21(
ge) + PIB31(
ge) + PIB41(
ge);
771 ge_log(
LOG_PERI,
"READING FROM NE KNOT %s --> %03x\n", where, ret);
785#define NAOR(a, b, c, d) !(a || b || c || d)
801SIG(AEBEC) {
return !(RATE1(
ge) && PC131(
ge)); }
804SIG(PV13A) {
return !(RAVI1(
ge) && PC131(
ge)); }
805SIG(VICU3) {
return !(FINUC(
ge) && PV13A(
ge)); }
Bit manipulation helpers.
static uint16_t NI_knot(struct ge *ge)
NI Knot.
static uint8_t NI_source(struct ge *ge, enum knot_ni_source source)
static uint16_t NO_knot(struct ge *ge)
Knot driven by P0, V1, V2, V4, L1, R1, V3 and L3.
static uint8_t NA_knot(struct ge *ge)
Knot driven by SO or SI.
static uint16_t NE_knot(struct ge *ge)
NE Knot.
void ge_log(ge_log_type type, const char *format,...)
Log message.
@ LOG_PERI
Peripherals IO.
uint8_t reader_get_LUPO1(struct ge *ge)
uint8_t connector_get_TE30(struct ge_connector *conn)
uint8_t reader_get_LU08(struct ge *ge)
uint8_t connector_get_MARE(struct ge_connector *conn)
uint8_t reader_get_FINI1(struct ge *ge)
uint8_t connector_get_TE10(struct ge_connector *conn)
uint8_t connector_get_TE20(struct ge_connector *conn)
uint8_t connector_get_FINE(struct ge_connector *conn)
static uint16_t ge_counting_network_output(struct ge *ge)
uint16_t SITE
Don't wait for external unit availability.
struct ge_counting_network::cmds cmds
enum ge_knot_no::@1 force_mode
The entire state of the emulated system, including registers, memory, peripherals and timings.
uint8_t AINI
Program Loading.
struct ge_integrated_reader integrated_reader
The I/O interface for the integrated reader (RI)
uint8_t JS2
Console jump condition 2.
struct ge_connector ST4
The I/O interface for the ST4 connector.
uint8_t ffFA
Special conditions register 2.
uint16_t rPO
Program addresser.
uint8_t PIC1
Selection Channel 1.
enum ge_console_rotary register_selector
The current state of the console register rotary switch.
uint8_t RIA0
Synchronous CPU Cycle Request.
uint8_t RIA2
Synchronous Channel 2 Cycle Request.
uint16_t rV1
Addresser for the first operand.
uint8_t rSO
Main sequencer.
uint16_t rRO
Multipurpose 8+1 bit register.
struct ge_counting_network counting_network
struct ge_console_switches console_switches
The current state of the console switches.
struct ge_connector ST3
The I/O interface for the ST3 connector.
uint8_t RIA3
Synchronous Channel 3 Cycle Request.
uint8_t PUC3
Channel 3 in transfer.
uint8_t rL2
Auxiliary register.
uint8_t PUC2
Channel 2 in transfer.
uint8_t rRI
Photoprint register 8-bit register used to store the photodisc codes.
uint16_t rBO
Default operator.
uint8_t PB06
Unconditionally stores L106.
struct ge_knot_ni kNI
Knot driven by counting network, or by the UA to store the result of the operation.
uint8_t RACI
Rejected Command.
uint16_t rV4
Addresser for external instructions using channel 2.
uint8_t RASI
Channel 1 in transfer.
uint16_t rL1
Length of the operand.
uint8_t rSA
Future state configuration.
uint16_t rV2
Addresser for the second operand.
uint8_t RESI
Synchronous Channel 1 Cycle Request.
uint8_t RIG1
End from controller 1.
uint8_t rSI
Peripheral unit sequencer.
uint8_t PB26
Stores L106 if channel 2 is selected.
uint16_t rL3
Length of operands involving channel 3.
uint8_t PB07
Unconditionally stores L106.
uint16_t rV3
Addresser for external instructions using channel 3.
uint8_t rFO
Current function code.
uint8_t JS1
Console jump condition 1.