GE-115 Emulator
An Emulator of the General Electrics GE-115 computer
msl-commands.c
Go to the documentation of this file.
1 #include "ge.h"
2 #include "log.h"
3 #include "bit.h"
4 #include "signals.h"
5 
6 #ifndef MSL_COMMANDS_INCLUDED_BY_MSL_STATES
7 # error This file should be include by msl-states.c and not compiled directly
8 #endif
9 
10 #define CC { ge_log(LOG_ERR, "implement command %s\n", __FUNCTION__); }
11 
12 /* Commands To Load The Registers */
13 /* ------------------------------ */
14 
15 static void CO00(struct ge* ge) { ge->rPO = NI_knot(ge); }
16 static void CO01(struct ge* ge) { ge->rV1 = NI_knot(ge); }
17 static void CO02(struct ge* ge) { ge->rV2 = NI_knot(ge); }
18 static void CO03(struct ge* ge) { ge->rV3 = NI_knot(ge); }
19 static void CO04(struct ge* ge) { ge->rV4 = NI_knot(ge); }
20 
21 static void CI00(struct ge* ge) { CO00(ge); }
22 static void CI01(struct ge* ge) { CO01(ge); }
23 static void CI02(struct ge* ge) { CO02(ge); }
24 static void CI03(struct ge* ge) { CO03(ge); }
25 static void CI04(struct ge* ge) { CO04(ge); }
26 static void CI05(struct ge* ge) { ge->rL1 = NI_knot(ge); }
27 static void CI06(struct ge* ge) { ge->rL2 = NI_knot(ge) & 0x00ff; }
28 static void CI07(struct ge* ge) { ge->rL3 = NI_knot(ge); }
29 static void CI08(struct ge* ge) { ge->rFO = (NI_knot(ge) & 0x00ff); }
30 static void CI09(struct ge* ge) { ge->rRI = (NI_knot(ge) & 0xff00) >> 8; }
31 
32 /* NO Knot Selection Commands */
33 /* -------------------------- */
34 
35 static void CO10(struct ge* ge) { ge->kNO.cmd = KNOT_PO_IN_NO; }
36 static void CO11(struct ge* ge) { ge->kNO.cmd = KNOT_V1_IN_NO; }
37 static void CO12(struct ge* ge) { ge->kNO.cmd = KNOT_V2_IN_NO; }
38 static void CO13(struct ge* ge) { ge->kNO.cmd = KNOT_V3_IN_NO; }
39 static void CO14(struct ge* ge) { ge->kNO.cmd = KNOT_V4_IN_NO; }
40 static void CO16(struct ge* ge) { ge->kNO.cmd = KNOT_L2_IN_NO; }
41 static void CO18(struct ge *ge) { ge->kNO.forcings = KNOT_FORCING_NO_21; }
42 
43 static void CI11(struct ge* ge) { CO11(ge); }
44 static void CI12(struct ge* ge) { CO12(ge); }
45 static void CI15(struct ge* ge) { ge->kNO.cmd = KNOT_L1_IN_NO; }
46 static void CI16(struct ge* ge) { CO16(ge); }
47 static void CI17(struct ge* ge) { ge->kNO.cmd = KNOT_L3_IN_NO; }
48 static void CI19(struct ge* ge) { ge->kNO.force_mode = KNOT_FORCING_NO_43; }
49 static void CI20(struct ge* ge) { ge->kNO.cmd = KNOT_AM_IN_NO; }
50 static void CI21(struct ge* ge) { ge->kNO.cmd = KNOT_RI_IN_NO_43; }
51 
52 
53 /* VO, BO, RO Loading Commands */
54 /* --------------------------- */
55 
56 static void CO30(struct ge* ge) { ge->memory_command = MC_READ; }
57 static void CO31(struct ge* ge) { ge->memory_command = MC_WRITE; }
58 static void CO35(struct ge* ge) { /* "reset int. error"? (cpu fo. 105) */ }
59 
60 static void CI32(struct ge* ge) {
61  ge->rRO = NO_knot(ge) >> 8;
63 }
64 
65 static void CI33(struct ge* ge) {
66  ge->rRO = NO_knot(ge) & 0x00ff;
68 }
69 
70 static void CI34(struct ge* ge) {
71  ge->rRO = NE_knot(ge);
72 }
73 
74 static void CI38(struct ge *ge)
75 {
76  /* Enable set of aver & alto (cpu fo. 105) */
77  ge->AVER = verified_condition(ge);
78 
79  /* (One) possible (ALTO) set condition (is): the ACOV or ACON
80  * switches are insterted, an the related condition is verified
81  * (cpu fo. 98) */
82  if (ge->AVER && ge->console_switches.ACOV)
83  ge->ALTO = 1;
84 
85  if (!ge->AVER && ge->console_switches.ACON)
86  ge->ALTO = 1;
87 }
88 
89 static void CI39(struct ge *ge)
90 {
91  /* Reset AVER, it also resets the FF AINI and PUC1 (cpu fo. 105) */
92  ge->AVER = 0;
93  ge->AINI = 0;
94  ge->PIC1 = 0;
95 
96  /* intermediate fo. 10 B6 */
97  ge->RASI = 0;
98 
99  if (!PUC1(ge))
100  ge->RC00 = 1;
101 }
102 
103 /* Count And Arithmetical Unit Commands */
104 /* ------------------------------------ */
105 
106 static void CO40(struct ge* ge) { ge->counting_network.cmds.decresing = 1; };
107 static void CO41(struct ge* ge) { ge->counting_network.cmds.from_zero = 1; };
108 static void CO48(struct ge* ge)
109 {
110  /* most probably incorrect, "set urpe/urpu" (cpu fo. 106) */
111  ge->URPE = 1;
112  ge->URPU = 1;
113 }
114 
115 static void CO49(struct ge* ge) {
116  /* most probably incorrect, "reset urpe/urpu" (cpu fo. 106) */
117  ge->URPE = 0;
118  ge->URPU = 0;
119 };
120 
121 static void CI40(struct ge *ge) { CO40(ge); }
122 static void CI41(struct ge *ge) { CO41(ge); }
123 
124 
125 /* NI Knot Selection Commands */
126 /* -------------------------- */
127 
128 static void CI60(struct ge *ge) { ge->kNI.ni4 = NS_RO2; }
129 static void CI61(struct ge *ge) { ge->kNI.ni3 = NS_RO2; }
130 static void CI62(struct ge *ge) { ge->kNI.ni2 = NS_RO2; }
131 static void CI63(struct ge *ge) { ge->kNI.ni1 = NS_RO2; }
132 static void CI64(struct ge *ge) { ge->kNI.ni4 = NS_RO1; }
133 static void CI65(struct ge *ge) { ge->kNI.ni3 = NS_RO1; }
134 static void CI66(struct ge *ge) { ge->kNI.ni2 = NS_RO1; }
135 static void CI67(struct ge *ge) { ge->kNI.ni1 = NS_RO1; }
136 static void CI68(struct ge *ge) { ge->kNI.ni4 = NS_UA2; ge->kNI.ni3 = NS_UA1; }
137 static void CI69(struct ge *ge) { ge->kNI.ni2 = NS_UA2; ge->kNI.ni1 = NS_UA1; }
138 
139 /* Commands To Set And Reset FF Of Condition */
140 /* ----------------------------------------- */
141 
142 static void CI70(struct ge* ge) { SET_BIT(ge->ffFI, 0); }
143 static void CI71(struct ge* ge) { SET_BIT(ge->ffFI, 1); }
144 static void CI72(struct ge* ge) { SET_BIT(ge->ffFI, 2); }
145 static void CI73(struct ge* ge) { SET_BIT(ge->ffFI, 3); }
146 static void CI74(struct ge* ge) { SET_BIT(ge->ffFI, 4); }
147 static void CI75(struct ge* ge) { SET_BIT(ge->ffFI, 5); }
148 static void CI76(struct ge* ge) { SET_BIT(ge->ffFI, 6); }
149 static void CI77(struct ge* ge) { ge->ADIR = 1; }
150 static void CI78(struct ge* ge) { ge->ADIR = 0; }
151 static void CI80(struct ge* ge) { RESET_BIT(ge->ffFI, 0); }
152 static void CI81(struct ge* ge) { RESET_BIT(ge->ffFI, 1); }
153 static void CI82(struct ge* ge) { RESET_BIT(ge->ffFI, 2); }
154 static void CI83(struct ge* ge) { RESET_BIT(ge->ffFI, 3); }
155 static void CI84(struct ge* ge) { RESET_BIT(ge->ffFI, 4); }
156 static void CI85(struct ge* ge) { RESET_BIT(ge->ffFI, 5); }
157 static void CI86(struct ge* ge) { RESET_BIT(ge->ffFI, 6); }
158 
159 static void CI87(struct ge* ge) {
160  ge->ALAM = 1;
161  ge->PODI = 1; /* should PODI be set here? */
162 }
163 
164 static void CI88(struct ge* ge) {
165  ge->ALAM = 0;
166  ge->PODI = 0; /* should PODI be set here? */
167 }
168 
169 static void CI89(struct ge* ge) { ge->ALTO = 1; }
170 
171 /* Commands To Force In NO Knot */
172 /* ---------------------------- */
173 
174 static void CO90(struct ge *ge) { SET_BIT(ge->kNO.forcings, 0); }
175 static void CO91(struct ge *ge) { SET_BIT(ge->kNO.forcings, 1); }
176 static void CO92(struct ge *ge) { SET_BIT(ge->kNO.forcings, 2); }
177 static void CO93(struct ge *ge) { SET_BIT(ge->kNO.forcings, 3); }
178 static void CO94(struct ge *ge) { SET_BIT(ge->kNO.forcings, 4); }
179 static void CO95(struct ge *ge) { SET_BIT(ge->kNO.forcings, 5); }
180 static void CO96(struct ge *ge) { SET_BIT(ge->kNO.forcings, 6); }
181 static void CO97(struct ge *ge) { SET_BIT(ge->kNO.forcings, 7); }
182 
183 /* Commands For External Operations */
184 /* -------------------------------- */
185 
186 static void CE00(struct ge* ge) {
187  /* is PIPO needed?! (intermediate fo. 10 A1*/
188  ge_log(LOG_PERI, "RA <- %x\n", ge->rRO);
189  ge->rRA = ge->rRO;
190 }
191 
192 static void CE01(struct ge* ge) {
193  /* is PIPO needed?! (intermediate fo. 10 A1*/
194  ge_log(LOG_PERI, "RE <- %x\n", ge->rRO);
195  ge->rRE = ge->rRO;
196 }
197 
198 static void CE02(struct ge* ge) {
199  /* admits AEBE: */
200  /* UNIV 1.2µs --> RATE1 nand PC131 --> AEBE */
201  /* AEBE is a control signal sent to ST3 and ST4 */
202 
203  /* Unconditionally set by command CE02 (cpu fo. 235) */
204  ge->PIC1 = 1;
205 
206  /* Latch PB flip flops (intermediate diagram fo. 9 D 1,2,3) */
207  ge->PB06 = BIT(ge->rL1, 6);
208  ge->PB07 = BIT(ge->rL1, 7);
209 
210  /* In case of initial load / TPER, L2 here should be the Z character of
211  * the instructions. It encodes the channel to be used for the transfer.
212  *
213  * If bit 0 of L2 is 0, channel is either 1 or 3,
214  * if bit 0 of L2 is 1, channel is 2.
215  *
216  * (cpu fo. 73)
217  */
218  if (BIT(ge->rL2, 0))
219  ge->PB26 = BIT(ge->rL1, 6);
220 
221  if (PC031(ge)) {
222  ge->PB36 = BIT(ge->rL1, 6);
223  ge->PB37 = BIT(ge->rL1, 7);
224  }
225 
226  /* parity check ignored */
227 }
228 
229 static void CE03(struct ge *ge) {
230  /* reset IO */
231  uint8_t CE031 = 1;
232  uint8_t TO191 = ge->current_clock == TO19;
233  uint8_t TO651 = ge->current_clock == TO65;
234  uint8_t RECIA = !(CE031 && PC011(ge));
235  uint8_t RECI1 = !RECIA;
236 
237  ge_log(LOG_PERI, "RESET I/U (CE03)\n");
238 
239  if (TO651 && RECI1) {
240  ge->RIG1 = 0;
241  ge_log(LOG_PERI, "RESETTING RIG1 (CE03)\n", ge->RIG1);
242  } else {
243  ge_log(LOG_PERI, "NOT RESETTING RIG1 (CE03)\n");
244  }
245 
246  if (TO191) {
247  ge->RACI = 0;
248  ge_log(LOG_PERI, "RESETTING RACI (CE03)\n");
249  } else {
250  ge_log(LOG_PERI, "NOT RESETTING RACI (CE03)\n");
251  }
252 
253  /* maybe more? */
254 }
255 
256 static void CE05(struct ge* ge) {
257  ge_log(LOG_PERI, "TODO: enable selection external error\n");
258 }
259 
260 static void CE06(struct ge *ge) {
261  /* enable set error 1 */
262 }
263 
264 static void CE07(struct ge *ge) {
265  /* set io for can 1, 2 or 3 */
266  uint8_t TO191 = ge->current_clock == TO19;
267 
268  if (TO191 && PC011(ge)) {
269  ge->RASI = 1;
270  ge_log(LOG_PERI, "SET RASI (CE07)\n");
271  } else {
272  ge_log(LOG_PERI, "NOT SETTING RASI (CE07)\n");
273  }
274 
275  if (TU00A(ge)) {
276  ge_log(LOG_PERI, "TU00A! %d\n", TU00A(ge));
277  }
278 }
279 
280 static void CE08(struct ge *ge) {
281  /* set VICU */
282  uint8_t TO191 = ge->current_clock == TO19;
283 
284  ge_log(LOG_PERI, "SET VICU (CE08)\n");
285 
286  if (TO191 && ge->RETO) {
287  ge->RAVI = 1;
288  ge_log(LOG_PERI, "SET RAVI (CE08)\n");
289  } else {
290  ge_log(LOG_PERI, "NOT SETTING RAVI (CE08)\n");
291  }
292 
293  if (ge->RAVI && RB111(ge)) {
294  ge->RACI = 1;
295  ge_log(LOG_PERI, "SET RACI (CE08)\n");
296  } else {
297  ge_log(LOG_PERI, "NOT SETTING RACI (CE08)\n");
298  }
299 }
300 
301 static void CE09(struct ge *ge) {
302  /* character request */
303 
304  /* emits TU101: */
305  /* UNIV 1.2µs --> RT111 */
306 
307  uint8_t RT111 = 1;
308 
309  /* intermediate fo 14 D3 */
310  uint8_t TU03A = !(RT111 && PC121(ge));
311  uint8_t TU03 = !TU03A;
312 
313  if (TU03)
315 }
316 
317 static void CE10(struct ge *ge) {
318  /* send command */
319 
320  /* emits TU201: UNIV 1.2µs --> RT121 */
321  ge->RT121 = 1;
322 
323  /* UNIV seems a delay line to synchronise the hardware, let's
324  * ignore the exact timings. */
326 }
327 
328 static void CE11(struct ge* ge) {
329  ge->RT131 = 1;
330 
331  /* UNIV seems a delay line to synchronise the hardware, let's
332  * ignore the exact timings. */
333 
334  /* ad hoc logic, this should be conditioned by TU30C and TU30D
335  * (intermediate fo 14, B4 B5) to send the command only to the
336  * specified units, but the signals don't fully work here */
337 
338  if (PC131(ge))
340 
341  if (PC141(ge))
343 }
344 
345 static void CE18(struct ge *ge) {
346  /* enable reset RIAP */
347  ge_log(LOG_PERI, "RESET RIAP\n");
348 
349  uint8_t TO801 = ge->current_clock == TO80;
350 
351  if (TO801 && RIUC(ge)) {
352  ge->RC00 = 0;
353  ge_log(LOG_PERI, "RESETING RC00 (CE18)\n");
354  } else {
355  ge_log(LOG_PERI, "NOT RESETING RC00 (CE18)\n");
356  }
357 
358  if (TO801 && RESI(ge)) {
359  ge->RC01 = 0;
360  ge_log(LOG_PERI, "RESETING RC01 (CE18)\n");
361  } else {
362  ge_log(LOG_PERI, "NOT RESETING RC01 (CE18)\n");
363  }
364 
365  if (TO801 && RES2(ge)) {
366  ge->RC02 = 0;
367  ge_log(LOG_PERI, "RESETING RC02 (CE18)\n");
368  } else {
369  ge_log(LOG_PERI, "NOT RESETING RC02 (CE18)\n");
370  }
371 
372  if (TO801 && RES3(ge)) {
373  ge->RC03 = 0;
374  ge_log(LOG_PERI, "RESETING RC03 (CE18)\n");
375  } else {
376  ge_log(LOG_PERI, "NOT RESETING RC03 (CE18)\n");
377  }
378 }
379 
380 static void CE19(struct ge *ge) {
381  /* reset selection can 3 */
382 }
383 
384 
385 /* Future States Commands */
386 /* ---------------------- */
387 
388 /* Set S0 */
389 static void CU00(struct ge* ge) { SET_BIT(ge->future_state, 0); }
390 static void CU01(struct ge* ge) { SET_BIT(ge->future_state, 1); }
391 static void CU02(struct ge* ge) { SET_BIT(ge->future_state, 2); }
392 static void CU03(struct ge* ge) { SET_BIT(ge->future_state, 3); }
393 static void CU04(struct ge* ge) { SET_BIT(ge->future_state, 4); }
394 static void CU05(struct ge* ge) { SET_BIT(ge->future_state, 5); }
395 static void CU06(struct ge* ge) { SET_BIT(ge->future_state, 6); }
396 static void CU07(struct ge* ge) { SET_BIT(ge->future_state, 7); }
397 
398 /* Reset S0 */
399 static void CU10(struct ge* ge) { RESET_BIT(ge->future_state, 0); }
400 static void CU11(struct ge* ge) { RESET_BIT(ge->future_state, 1); }
401 static void CU12(struct ge* ge) { RESET_BIT(ge->future_state, 2); }
402 static void CU13(struct ge* ge) { RESET_BIT(ge->future_state, 3); }
403 static void CU14(struct ge* ge) { RESET_BIT(ge->future_state, 4); }
404 static void CU15(struct ge* ge) { RESET_BIT(ge->future_state, 5); }
405 static void CU16(struct ge* ge) { RESET_BIT(ge->future_state, 6); }
406 static void CU17(struct ge* ge) { RESET_BIT(ge->future_state, 7); }
407 
408 static void CU20(struct ge *ge) {
409  ge->rSO = ge->rSI = ge->future_state;
410  ge_log(LOG_FUTURE, "forcing state with CU20: %2x\n", ge->future_state);
411 }
Bit manipulation helpers.
#define BIT(V, X)
Definition: bit.h:9
#define SET_BIT(R, X)
Definition: bit.h:10
#define RESET_BIT(R, X)
Definition: bit.h:11
@ NS_RO1
Definition: ge.h:77
@ NS_UA1
Definition: ge.h:80
@ NS_UA2
Definition: ge.h:79
@ NS_RO2
Definition: ge.h:78
static uint16_t NI_knot(struct ge *ge)
NI Knot.
Definition: signals.h:263
static uint16_t NO_knot(struct ge *ge)
Knot driven by P0, V1, V2, V4, L1, R1, V3 and L3.
Definition: signals.h:165
static uint16_t NE_knot(struct ge *ge)
NE Knot.
Definition: signals.h:678
void ge_log(ge_log_type type, const char *format,...)
Log message.
Definition: log.c:31
@ LOG_FUTURE
Future state network debug.
Definition: log.h:24
@ LOG_PERI
Peripherals IO.
Definition: log.h:27
static void CI73(struct ge *ge)
Definition: msl-commands.c:145
static void CE08(struct ge *ge)
Definition: msl-commands.c:280
static void CI02(struct ge *ge)
Definition: msl-commands.c:23
static void CI08(struct ge *ge)
Definition: msl-commands.c:29
static void CE01(struct ge *ge)
Definition: msl-commands.c:192
static void CU05(struct ge *ge)
Definition: msl-commands.c:394
static void CI63(struct ge *ge)
Definition: msl-commands.c:131
static void CI39(struct ge *ge)
Definition: msl-commands.c:89
static void CO49(struct ge *ge)
Definition: msl-commands.c:115
static void CO04(struct ge *ge)
Definition: msl-commands.c:19
static void CE11(struct ge *ge)
Definition: msl-commands.c:328
static void CO14(struct ge *ge)
Definition: msl-commands.c:39
static void CE18(struct ge *ge)
Definition: msl-commands.c:345
static void CI21(struct ge *ge)
Definition: msl-commands.c:50
static void CI20(struct ge *ge)
Definition: msl-commands.c:49
static void CO00(struct ge *ge)
Definition: msl-commands.c:15
static void CU12(struct ge *ge)
Definition: msl-commands.c:401
static void CI66(struct ge *ge)
Definition: msl-commands.c:134
static void CI19(struct ge *ge)
Definition: msl-commands.c:48
static void CE10(struct ge *ge)
Definition: msl-commands.c:317
static void CI74(struct ge *ge)
Definition: msl-commands.c:146
static void CI17(struct ge *ge)
Definition: msl-commands.c:47
static void CU00(struct ge *ge)
Definition: msl-commands.c:389
static void CO35(struct ge *ge)
Definition: msl-commands.c:58
static void CI15(struct ge *ge)
Definition: msl-commands.c:45
static void CU06(struct ge *ge)
Definition: msl-commands.c:395
static void CE03(struct ge *ge)
Definition: msl-commands.c:229
static void CI70(struct ge *ge)
Definition: msl-commands.c:142
static void CU07(struct ge *ge)
Definition: msl-commands.c:396
static void CE00(struct ge *ge)
Definition: msl-commands.c:186
static void CO01(struct ge *ge)
Definition: msl-commands.c:16
static void CI11(struct ge *ge)
Definition: msl-commands.c:43
static void CU02(struct ge *ge)
Definition: msl-commands.c:391
static void CI06(struct ge *ge)
Definition: msl-commands.c:27
static void CI32(struct ge *ge)
Definition: msl-commands.c:60
static void CI65(struct ge *ge)
Definition: msl-commands.c:133
static void CO03(struct ge *ge)
Definition: msl-commands.c:18
static void CI75(struct ge *ge)
Definition: msl-commands.c:147
static void CU13(struct ge *ge)
Definition: msl-commands.c:402
static void CE07(struct ge *ge)
Definition: msl-commands.c:264
static void CI80(struct ge *ge)
Definition: msl-commands.c:151
static void CI07(struct ge *ge)
Definition: msl-commands.c:28
static void CI81(struct ge *ge)
Definition: msl-commands.c:152
static void CU17(struct ge *ge)
Definition: msl-commands.c:406
static void CO96(struct ge *ge)
Definition: msl-commands.c:180
static void CI60(struct ge *ge)
Definition: msl-commands.c:128
static void CI86(struct ge *ge)
Definition: msl-commands.c:157
static void CE06(struct ge *ge)
Definition: msl-commands.c:260
static void CO94(struct ge *ge)
Definition: msl-commands.c:178
static void CU20(struct ge *ge)
Definition: msl-commands.c:408
static void CO48(struct ge *ge)
Definition: msl-commands.c:108
static void CI64(struct ge *ge)
Definition: msl-commands.c:132
static void CI68(struct ge *ge)
Definition: msl-commands.c:136
static void CO91(struct ge *ge)
Definition: msl-commands.c:175
static void CI05(struct ge *ge)
Definition: msl-commands.c:26
static void CI82(struct ge *ge)
Definition: msl-commands.c:153
static void CE09(struct ge *ge)
Definition: msl-commands.c:301
static void CI84(struct ge *ge)
Definition: msl-commands.c:155
static void CI72(struct ge *ge)
Definition: msl-commands.c:144
static void CU01(struct ge *ge)
Definition: msl-commands.c:390
static void CO90(struct ge *ge)
Definition: msl-commands.c:174
static void CE02(struct ge *ge)
Definition: msl-commands.c:198
static void CI04(struct ge *ge)
Definition: msl-commands.c:25
static void CI88(struct ge *ge)
Definition: msl-commands.c:164
static void CI83(struct ge *ge)
Definition: msl-commands.c:154
static void CI41(struct ge *ge)
Definition: msl-commands.c:122
static void CO18(struct ge *ge)
Definition: msl-commands.c:41
static void CO40(struct ge *ge)
Definition: msl-commands.c:106
static void CI09(struct ge *ge)
Definition: msl-commands.c:30
static void CI89(struct ge *ge)
Definition: msl-commands.c:169
static void CU10(struct ge *ge)
Definition: msl-commands.c:399
static void CI62(struct ge *ge)
Definition: msl-commands.c:130
static void CI38(struct ge *ge)
Definition: msl-commands.c:74
static void CI69(struct ge *ge)
Definition: msl-commands.c:137
static void CI03(struct ge *ge)
Definition: msl-commands.c:24
static void CI77(struct ge *ge)
Definition: msl-commands.c:149
static void CU14(struct ge *ge)
Definition: msl-commands.c:403
static void CO11(struct ge *ge)
Definition: msl-commands.c:36
static void CU16(struct ge *ge)
Definition: msl-commands.c:405
static void CO12(struct ge *ge)
Definition: msl-commands.c:37
static void CI87(struct ge *ge)
Definition: msl-commands.c:159
static void CI85(struct ge *ge)
Definition: msl-commands.c:156
static void CO97(struct ge *ge)
Definition: msl-commands.c:181
static void CO30(struct ge *ge)
Definition: msl-commands.c:56
static void CI67(struct ge *ge)
Definition: msl-commands.c:135
static void CO16(struct ge *ge)
Definition: msl-commands.c:40
static void CI40(struct ge *ge)
Definition: msl-commands.c:121
static void CI00(struct ge *ge)
Definition: msl-commands.c:21
static void CI33(struct ge *ge)
Definition: msl-commands.c:65
static void CO41(struct ge *ge)
Definition: msl-commands.c:107
static void CO92(struct ge *ge)
Definition: msl-commands.c:176
static void CO13(struct ge *ge)
Definition: msl-commands.c:38
static void CI61(struct ge *ge)
Definition: msl-commands.c:129
static void CO10(struct ge *ge)
Definition: msl-commands.c:35
static void CO31(struct ge *ge)
Definition: msl-commands.c:57
static void CE05(struct ge *ge)
Definition: msl-commands.c:256
static void CU11(struct ge *ge)
Definition: msl-commands.c:400
static void CU03(struct ge *ge)
Definition: msl-commands.c:392
static void CE19(struct ge *ge)
Definition: msl-commands.c:380
static void CO93(struct ge *ge)
Definition: msl-commands.c:177
static void CI76(struct ge *ge)
Definition: msl-commands.c:148
static void CO95(struct ge *ge)
Definition: msl-commands.c:179
static void CI34(struct ge *ge)
Definition: msl-commands.c:70
static void CI16(struct ge *ge)
Definition: msl-commands.c:46
static void CI12(struct ge *ge)
Definition: msl-commands.c:44
static void CI78(struct ge *ge)
Definition: msl-commands.c:150
static void CI71(struct ge *ge)
Definition: msl-commands.c:143
static void CO02(struct ge *ge)
Definition: msl-commands.c:17
static void CU15(struct ge *ge)
Definition: msl-commands.c:404
static void CU04(struct ge *ge)
Definition: msl-commands.c:393
static void CI01(struct ge *ge)
Definition: msl-commands.c:22
void reader_send_tu10(struct ge *ge)
Definition: reader.c:62
void connector_send_tu00(struct ge *ge, struct ge_connector *conn)
Definition: reader.c:156
void reader_send_tu00(struct ge *ge)
Definition: reader.c:21
Signals.
uint16_t ACON
Stops on jump condition not verified.
Definition: console.h:113
uint16_t ACOV
Stops on jump condition verified.
Definition: console.h:105
uint8_t from_zero
Definition: ge.h:44
uint8_t decresing
Definition: ge.h:45
struct ge_counting_network::cmds cmds
enum knot_ni_source ni4
Definition: ge.h:87
enum knot_ni_source ni2
Definition: ge.h:85
enum knot_ni_source ni1
Definition: ge.h:84
enum knot_ni_source ni3
Definition: ge.h:86
uint8_t forcings
Definition: ge.h:50
enum ge_knot_no::@1 cmd
enum ge_knot_no::@0 force_mode
The entire state of the emulated system, including registers, memory, peripherals and timings.
Definition: ge.h:94
uint8_t ALAM
Operator Call.
Definition: ge.h:308
uint8_t RT121
Definition: ge.h:499
uint8_t rRA
Definition: ge.h:221
uint8_t PB37
Definition: ge.h:342
uint8_t rRE
Definition: ge.h:220
uint8_t AINI
Program Loading.
Definition: ge.h:254
struct ge_connector ST4
The I/O interface for the ST4 connector.
Definition: ge.h:545
uint8_t ALTO
Stops internal cycles.
Definition: ge.h:269
uint16_t rPO
Program addresser.
Definition: ge.h:111
uint8_t PIC1
Selection Channel 1.
Definition: ge.h:360
uint8_t future_state
Future state.
Definition: ge.h:508
uint8_t PODI
Slow delay line.
Definition: ge.h:277
uint16_t rV1
Addresser for the first operand.
Definition: ge.h:113
uint8_t rSO
Main sequencer.
Definition: ge.h:196
uint16_t rRO
Multipurpose 8+1 bit register.
Definition: ge.h:147
struct ge_counting_network counting_network
Definition: ge.h:530
struct ge_console_switches console_switches
The current state of the console switches.
Definition: ge.h:518
struct ge_connector ST3
The I/O interface for the ST3 connector.
Definition: ge.h:540
uint8_t rL2
Auxiliary register.
Definition: ge.h:131
uint8_t ffFI
Special conditions register 1.
Definition: ge.h:229
uint8_t RC00
Asynchronous CPU Cycle Request.
Definition: ge.h:407
uint8_t rRI
Photoprint register 8-bit register used to store the photodisc codes.
Definition: ge.h:122
uint8_t PB06
Unconditionally stores L106.
Definition: ge.h:338
uint8_t RC01
Asynchronous Channel 1 Cycle Request.
Definition: ge.h:420
struct ge_knot_ni kNI
Knot driven by counting network, or by the UA to store the result of the operation.
Definition: ge.h:140
uint8_t AVER
Jump Condition Verified.
Definition: ge.h:319
uint8_t RAVI
VICU Support.
Definition: ge.h:497
uint8_t RACI
Rejected Command.
Definition: ge.h:494
uint8_t RT131
Definition: ge.h:500
uint16_t rV4
Addresser for external instructions using channel 2.
Definition: ge.h:116
uint8_t RASI
Channel 1 in transfer.
Definition: ge.h:367
uint16_t rL1
Length of the operand.
Definition: ge.h:130
uint16_t rV2
Addresser for the second operand.
Definition: ge.h:114
uint8_t RC02
Asynchronous Channel 2 Cycle Request.
Definition: ge.h:435
uint8_t ADIR
Disable Step By Step.
Definition: ge.h:327
uint8_t RIG1
End from controller 1.
Definition: ge.h:489
uint8_t rSI
Peripheral unit sequencer.
Definition: ge.h:210
uint8_t URPU
Definition: ge.h:388
uint8_t RC03
Asynchronous Channel 3 Cycle Request.
Definition: ge.h:450
enum clock current_clock
Definition: ge.h:96
enum ge::@2 memory_command
uint8_t PB26
Stores L106 if channel 2 is selected.
Definition: ge.h:340
uint16_t rL3
Length of operands involving channel 3.
Definition: ge.h:132
uint8_t PB07
Unconditionally stores L106.
Definition: ge.h:339
uint8_t RETO
Definition: ge.h:245
uint8_t URPE
Definition: ge.h:387
uint16_t rV3
Addresser for external instructions using channel 3.
Definition: ge.h:115
uint8_t TO50_did_CI32_or_CI33
Workaround for pulse TO50.
Definition: ge.h:560
uint8_t PB36
Definition: ge.h:341
struct ge_knot_no kNO
Definition: ge.h:134
uint8_t rFO
Current function code.
Definition: ge.h:171