GE-115 Emulator
An Emulator of the General Electrics GE-115 computer
msl-states.c
Go to the documentation of this file.
1 #include <stdint.h>
2 #include "bit.h"
3 #include "msl-timings.h"
4 #include "signals.h"
5 
6 #define MSL_COMMANDS_INCLUDED_BY_MSL_STATES
7 #include "msl-commands.c"
8 #undef MSL_COMMANDS_INCLUDED_BY_MSL_STATES
9 
10 #ifndef MSL_STATES_INCLUDED_BY_MSL_TIMINGS
11 # error This file should be include by msl-timings.c and not compiled directly
12 #endif
13 
14 /* Common Conditions */
15 /* ----------------- */
16 
17 static uint8_t not_RO00(struct ge *ge) { return !BIT(ge->rRO, 0); }
18 static uint8_t not_RO01(struct ge *ge) { return !BIT(ge->rRO, 1); }
19 static uint8_t not_RO02(struct ge *ge) { return !BIT(ge->rRO, 2); }
20 static uint8_t not_RO03(struct ge *ge) { return !BIT(ge->rRO, 3); }
21 static uint8_t not_RO04(struct ge *ge) { return !BIT(ge->rRO, 4); }
22 static uint8_t not_RO05(struct ge *ge) { return !BIT(ge->rRO, 5); }
23 static uint8_t not_RO06(struct ge *ge) { return !BIT(ge->rRO, 6); }
24 static uint8_t not_RO07(struct ge *ge) { return !BIT(ge->rRO, 7); }
25 
26 /* Initialitiation */
27 /* --------------- */
28 
29 // to state E2+E3 if !AINI
30 // C8 if AINI
31 
32 static uint8_t AINI(struct ge *ge) { return ge->AINI; }
33 static uint8_t not_AINI(struct ge *ge) { return !AINI(ge); }
34 
35 /* TODO: "jumpers" configuration.
36  *
37  * This is the configuration without any "configuration" jumper connector
38  * in backplane position E04.
39  * It is possible to change the configuration by plugging either a PONT2N
40  * or PONT2P in that slot, for this available configurations:
41  *
42  * E04 || FUL2 | FUL3 || Connectors for loading
43  * -------++------+------++-------------------------
44  * EMPTY || 1 | 1 || 2 and 3
45  * PONT2N || 1 | 0 || 2 and 4
46  * PONT2P || 0 | 1 || 4 and 3
47  *
48  * (detailed ch. 002)
49  *
50  * NOTE: test for the initial load assume FUL2 = FUL3 = 1.
51  */
52 SIG(FUL2) { return 1; }
53 SIG(FUL3) { return 1; }
54 
55 static uint8_t state_80_TO30_CO96(struct ge *ge) {
56  return (ge->ALOI && !FUL2(ge)) || (!ge->ALOI && !FUL3(ge));
57 }
58 
59 static uint8_t state_80_TO30_CO97(struct ge *ge) {
60  return ge->ALOI && FUL2(ge);
61 }
62 
63 static const struct msl_timing_chart state_80[] = {
64  { TO30, CI19, 0, DI28A0 },
65  { TO30, CO96, state_80_TO30_CO96 },
66  { TO30, CO97, state_80_TO30_CO97 },
67  { TO40, CO00, 0 },
68  { TO40, CO02, 0 },
69  { TO50, CI32, 0, DI28A0 },
70  { TO70, CI62, 0 },
71  { TO70, CI67, 0, DI28B0 },
72  { TI05, CI05, 0, DI28B0 },
73  { TI05, CI08, 0 },
74  { TI06, CI76, 0 },
75  { TI06, CI80, 0 },
76  { TI06, CI81, 0 },
77  { TI06, CI82, 0 },
78  { TI06, CU01, not_AINI },
79  { TI06, CU03, AINI },
80  { TI06, CU05, not_AINI },
81  { TI06, CU06, 0 },
82  { END_OF_STATUS, 0, 0 }
83 };
84 
85 // Alpha phase
86 
87 // (to state F0 if RINT & !FA06
88 // E0 if !RINT | FA06)
89 
90 static uint8_t state_E2_E3_TO80_CI89(struct ge *ge) {
91  /* (deltaRO = HLT + ASIN(ATOC+!ADIR)) */
92  return ge->rRO == HLT_OPCODE;
93 }
94 
95 static uint8_t state_E2_E3_TI06_CI82(struct ge *ge) {
96  return ge->rRO == PER_OPCODE;
97 }
98 
99 static uint8_t state_E2_E3_TI06_CU04(struct ge *ge) {
100  return ge->RINT && !BIT(ge->ffFA, 6);
101 }
102 
103 static const struct msl_timing_chart state_E2_E3[] = {
104  { TO10, CO10, 0 },
105  { TO10, CO41, 0, DI12A0 },
106  { TO25, CO30, 0, DI12A0 },
107  { TO40, CO02, 0, DI18B0 },
108  { TO70, CI67, 0, DI12A0 },
109  { TO70, CI62, 0, DI12A0 },
110  { TO80, CI89, state_E2_E3_TO80_CI89 },
111  { TI05, CI08, 0 },
112  { TI06, CI80, 0 },
113  { TI06, CI82, state_E2_E3_TI06_CI82 },
114  { TI06, CI83, 0 },
115  { TI06, CU04, state_E2_E3_TI06_CU04 },
116  { TI06, CU10, 0 },
117  { TI06, CU11, 0, DI18A0 },
118  { END_OF_STATUS, 0, 0 }
119 };
120 
121 // to state E4 if FO06 | FO07
122 // 64+65 if !(FO06 | FO07)
123 
124 static uint8_t state_E0_TI06_CU17(struct ge *ge) {
125  return !(BIT(ge->rFO, 6) || BIT(ge->rFO, 7));
126 }
127 
128 static const struct msl_timing_chart state_E0[] = {
129  { TO10, CO12, 0, DI17A0 },
130  { TO10, CO41, 0, DI12A0 },
131  { TO25, CO30, 0, DI12A0 },
132  { TO40, CO00, 0, DI17A0 },
133  { TO70, CI67, 0, DI12A0 },
134  { TO70, CI62, 0, DI12A0 },
135  { TO80, CI39, 0 },
136  { TI05, CI05, 0, DI17A0 },
137  { TI06, CU02, 0 },
138  { TI06, CU17, state_E0_TI06_CU17 },
139  { END_OF_STATUS, 0, 0 }
140 };
141 
142 // to state E6
143 
144 static uint8_t state_E4_TO70_CI60(struct ge *ge) { return 0; }
145 
146 static const struct msl_timing_chart state_E4[] = {
147  { TO10, CO10, 0, DI60A0 },
148  { TO10, CO41, 0, DI60A0 },
149  { TO25, CO30, 0, DI12A0 },
150  { TO40, CO00, 0, DI60A0 },
151  { TO70, CI67, 0, DI12A0 },
152  { TO70, CI62, 0, DI12A0 },
153  { TO70, CI65, 0, DI19A0 },
154  { TO70, CI60, state_E4_TO70_CI60 },
155  { TI05, CI02, 0 },
156  { TI06, CI06, 0 },
157  { TI06, CU01, 0, DI60A0 },
158  { END_OF_STATUS, 0, 0 }
159 };
160 
161 // to state E5 if !L207 & (FO07 & FO06)
162 // ED+EC if L207
163 // 64+65 if !L207 & (!FO07 | !FO06)
164 
165 static uint8_t state_E6_TO80_CI38(struct ge *ge) { /* DO01? */ return 0; }
166 static uint8_t state_E6_TI06_CU03(struct ge *ge) { return BIT(ge->rL2, 7); }
167 
168 static uint8_t state_E6_TI06_CU17(struct ge *ge) {
169  return (!BIT(ge->rL2, 7) &&
170  (!BIT(ge->rFO, 7) || !BIT(ge->rFO, 6)));
171 }
172 
173 static const struct msl_timing_chart state_E6[] = {
174  { TO10, CO10, 0, DI60A0 },
175  { TO10, CO41, 0, DI60A0 },
176  { TO25, CO30, 0, DI12A0 },
177  { TO30, CI12, 0 },
178  { TO40, CO00, 0, DI60A0 },
179  { TO70, CI67, 0, DI12A0 },
180  { TO70, CI62, 0, DI12A0 },
181  { TO80, CI38, state_E6_TO80_CI38 },
182  { TI05, CI01, 0 },
183  { TI05, CI02, 0 },
184  { TI06, CU00, 0, DI20A0 },
185  { TI06, CU03, state_E6_TI06_CU03, EC56A0 },
186 
187  /* in the manual this is CU10, but it maybe a mistake.. there's no way to reach
188  * the alpha states if we don't reset this bit 1 instead of bit 0 */
189  { TI06, CU11, 0 },
190 
191  { TI06, CU17, state_E6_TI06_CU17 },
192  { END_OF_STATUS, 0, 0 }
193 };
194 
195 // to state E7
196 
197 static const struct msl_timing_chart state_E5[] = {
198  { TO10, CO10, 0, DI60A0 },
199  { TO10, CO41, 0, DI60A0 },
200  { TO25, CO30, 0, DI12A0 },
201  { TO40, CO00, 0, DI60A0 },
202  { TO70, CI67, 0, DI12A0 },
203  { TO70, CI62, 0, DI12A0 },
204  { TO70, CI65, 0, DI19A0 },
205  { TO70, CI60, not_RO07 },
206  { TI05, CI02, 0 },
207  { TI06, CI06, 0 },
208  { TI06, CU01, 0, DI60A0 },
209  { END_OF_STATUS, 0, 0 }
210 };
211 
212 // to state 64+65 if !L207
213 // ED+EC if L207
214 
215 static uint8_t state_E7_TO80_CI38(struct ge *ge) { return 1; /* DO01 ?!? */ }
216 static uint8_t state_E7_TI06_CU03(struct ge *ge) { return BIT(ge->rL2, 7); }
217 
218 static uint8_t state_E7_TI06_CU17(struct ge *ge) {
219  return BIT(ge->rL2, 7) && (BIT(ge->rFO, 7) || BIT(ge->rFO, 6));
220 }
221 
222 static const struct msl_timing_chart state_E7[] = {
223  { TO10, CO10, 0, DI60A0 },
224  { TO10, CO41, 0, DI60A0 },
225  { TO25, CO30, 0, DI12A0 },
226  { TO30, CI12, 0 },
227  { TO40, CO00, 0, DI60A0 },
228  { TO70, CI67, 0, DI12A0 },
229  { TO70, CI62, 0 },
230  { TO80, CI38, state_E7_TO80_CI38 },
231  { TI05, CI02, 0 },
232  { TI06, CU00, 0, DI20A0 },
233  { TI06, CU03, 0, EC56A0 },
234  { TI06, CU10, 0 },
235  { TI06, CU17, state_E7_TI06_CU17 },
236  { END_OF_STATUS, 0, 0 }
237 };
238 
239 /* Beta Phase */
240 /* ---------- */
241 
242 static uint8_t jc_js1_js2_jie(struct ge *ge) {
243  return ((ge->rFO == JC_OPCODE) ||
244  (ge->rFO == JS1_OPCODE && ge->rL1 == JS1_2NDCHAR) ||
245  (ge->rFO == JS2_OPCODE && ge->rL1 == JS2_2NDCHAR) ||
246  (ge->rFO == JIE_OPCODE && ge->rL1 == JIE_2NDCHAR));
247 }
248 
249 static uint8_t lon_loll(struct ge *ge) {
250  return ((ge->rFO == LON_OPCODE && ge->rL1 == LON_2NDCHAR) ||
251  (ge->rFO == LOLL_OPCODE && ge->rL1 == LOLL_OPCODE));
252 }
253 
254 static uint8_t ins(struct ge *ge) {
255  return ge->rFO == INS_OPCODE && ge->rL1 == INS_2NDCHAR;
256 }
257 
258 static uint8_t jie(struct ge *ge) {
259  return ge->rFO == JIE_OPCODE && ge->rL1 == JIE_2NDCHAR;
260 }
261 
262 static uint8_t ens(struct ge *ge) {
263  return ge->rFO == ENS_OPCODE && ge->rL1 == ENS_2NDCHAR;
264 }
265 
266 static uint8_t loff(struct ge *ge) {
267  return ge->rFO == LOFF_OPCODE && ge->rL1 == LOFF_2NDCHAR;
268 }
269 
270 static uint8_t jc_js1_js2_jie_condition_verified(struct ge *ge) {
271  return ge->AVER && jc_js1_js2_jie(ge);
272 }
273 
274 static uint8_t nop(struct ge *ge) {
275  return ge->rFO == NOP2_OPCODE;
276 }
277 
279  return jc_js1_js2_jie(ge) || lon_loll(ge) || loff(ge) || ins(ge) || ens(ge) || nop(ge);
280 }
281 
282 /* PER - PERI: conditions from fo. 46 */
283 
284 static uint8_t per_peri(struct ge *ge) {
285  return ((ge->rFO == PER_OPCODE) ||
286  (ge->rFO == PERI_OPCODE));
287 }
288 
289 static uint8_t per_peri_TO25_CO30(struct ge *ge) {
290  return per_peri(ge) && !BIT(ge->rFO, 1);
291 }
292 
293 static const struct msl_timing_chart state_64_65[] = {
294  { TO10, CO10, jc_js1_js2_jie },
295  { TO10, CO18, per_peri },
296  { TO10, CO95, per_peri, DE07A0 },
297  { TO10, CO96, per_peri, DE07A0 },
298  { TO10, CO97, per_peri, DE07A0 },
299  { TO20, CI87, lon_loll },
300  { TO20, CI77, ins },
301  { TO25, CO30, per_peri_TO25_CO30, DE08A0 },
302  { TO30, CI12, jc_js1_js2_jie },
303  { TO40, CO01, jc_js1_js2_jie },
304  { TO60, CO35, jie },
306  { TO70, CI78, ens },
307  { TO70, CI62, per_peri, DE07A0 },
308  { TO70, CI67, per_peri, DE07A0 },
309  { TO89, CI88, loff },
310  { TI05, CI05, per_peri_TO25_CO30, DE08A0 },
313  { TI06, CU10, 0 },
314  { TI06, CU07, DE00A0 },
315  { TI06, CU12, 0 },
316  { TI06, CU15, per_peri },
317  { TI06, CU03, per_peri },
318  { END_OF_STATUS, 0, 0 },
319 };
320 
321 /* Display */
322 /* ------- */
323 
324 static uint8_t state_00_TO10_CO10(struct ge *ge) { return AF32(ge) || AF42(ge); }
325 static uint8_t state_00_TO10_CO11(struct ge *ge) { return AF31(ge) || AF41(ge) || AF51(ge); }
326 static uint8_t state_00_TO30_CI15(struct ge *ge) { return !AF20(ge) && !AF40(ge); }
327 static uint8_t state_00_TO50_CI33(struct ge *ge) { return !AF20(ge) && !AF21(ge) && !AF40(ge); }
328 
329 static const struct msl_timing_chart state_00[] = {
330  { TO10, CO10, state_00_TO10_CO10 }, /* RS_NORM or RS_PO */
331  { TO10, CO11, state_00_TO10_CO11 }, /* RS_V1 or RS_V1_SCR or RS_V1_LETT */
332  { TO10, CO12, AF50 }, /* RS_V2 */
333  { TO10, CO13, AF30 }, /* RS_V3 */
334  { TO10, CO14, AF10 }, /* RS_V4 */
335  { TO30, CI15, state_00_TO30_CI15 }, /* not RS_L3 and not RS_R1_L2 */
336  { TO30, CI17, AF20 }, /* RES_L3 */
337  { TO30, CI21, AF40 }, /* RS_R1_R2 */
338  { TO30, CI16, AF40 }, /* RS_V1_SCR */
339  { TO50, CI33, state_00_TO50_CI33 }, /* not RS_L3 and not RS_L1 and not RS_R1_L2 */
340  { TI06, CU07, 0 },
341  { END_OF_STATUS, 0, 0 }
342 };
343 
344 /* Forcing */
345 /* ------- */
346 
347 static uint8_t AF52_not_RO00(struct ge *ge) { return AF52(ge) && not_RO00(ge); }
348 static uint8_t AF52_not_RO01(struct ge *ge) { return AF52(ge) && not_RO01(ge); }
349 static uint8_t AF52_not_RO02(struct ge *ge) { return AF52(ge) && not_RO02(ge); }
350 static uint8_t AF52_not_RO03(struct ge *ge) { return AF52(ge) && not_RO03(ge); }
351 static uint8_t AF52_not_RO04(struct ge *ge) { return AF52(ge) && not_RO04(ge); }
352 static uint8_t AF52_not_RO05(struct ge *ge) { return AF52(ge) && not_RO05(ge); }
353 static uint8_t AF52_not_RO06(struct ge *ge) { return AF52(ge) && not_RO06(ge); }
354 static uint8_t AF52_not_RO07(struct ge *ge) { return AF52(ge) && not_RO07(ge); }
355 
356 static const struct msl_timing_chart state_08[] = {
357  { TO10, CO11, AF41, EC69A0 }, /* fo. 18 */
358  { TO10, CO11, AF51 },
359  { TO10, CO41, 0 },
360  { TO25, CO30, AF51 },
361  { TO25, CO31, AF41 },
362  { TO30, CI20, 0 },
363  { TO40, CO01, AF41, EC69A0 },
364  { TO40, CO01, AF51 },
365  { TO50, CO48, AF52 },
366  /* NO -> BO */
367  { TO50, CI33, AF41 },
368  { TO50, CI33, AF43 },
369  { TO64, CO49, AF52_not_RO07 },
370  { TO70, CI62, AF51, EC70A0 },
371  { TO70, CI67, AF51 }, /* fo. 19 */
372  { TI05, CI04, AF10 },
373  { TI05, CI02, AF50 },
374  { TI05, CI05, AF21 },
375  { TI05, CI05, AF51 },
376  { TI05, CI01, AF31 },
377  { TI05, CI00, AF42 },
378  { TI05, CI08, AF53 },
379  { TI06, CI07, AF20 },
380  { TI06, CI03, AF30 },
381  { TI06, CI06, AF40 },
382  { TI06, CI09, AF40 },
383  { TI06, CI70, AF52 },
384  { TI06, CI71, AF52 },
385  { TI06, CI72, AF52 },
386  { TI06, CI73, AF52 }, /* fo. 20 */
387  { TI06, CI74, AF52 },
388  { TI06, CI75, AF52 },
389  { TI06, CI76, AF52 },
390  { TI06, CI80, AF52_not_RO00 },
391  { TI06, CI81, AF52_not_RO01 },
392  { TI06, CI82, AF52_not_RO02 },
393  { TI06, CI83, AF52_not_RO03 },
394  { TI06, CI84, AF52_not_RO04 },
395  { TI06, CI85, AF52_not_RO05 },
396  { TI06, CI86, AF52_not_RO06 },
397  { TI06, CU00, 0 },
398  { TI06, CU01, 0, DI57B0 },
399  { TI06, CU02, 0 },
400  { TI06, CU03, 0, DI57B0 },
401  { TI06, CU04, 0, DI57B0 },
402  { TI06, CU05, 0 },
403  { TI06, CU06, 0 },
404  { TI06, CU07, 0, DI57A0 },
405  { TI06, CU10, not_RO00 }, /* fo. 21 */
406  { TI06, CU11, not_RO01 },
407  { TI06, CU12, not_RO02 },
408  { TI06, CU13, not_RO03 },
409  { TI06, CU14, not_RO04 },
410  { TI06, CU15, not_RO05 },
411  { TI06, CU16, not_RO06 },
412  { TI06, CU17, not_RO07 },
413  { END_OF_STATUS, 0, 0 }
414 };
415 
416 /* PER - PERI */
417 /* ---------- */
418 
419 static uint8_t state_c8_TI06_CI85(struct ge *ge) {
420  /* !(selected_connector_busy || selected_channel_busy) */
421  return !(PUB01(ge) || DU92(ge));
422 }
423 
424 static const struct msl_timing_chart state_c8[] = {
425  { TO10, CO12, 0, DI97A0 },
426  { TO10, CO41, 0, DI97A0},
427  { TO25, CO30, not_AINI, ED70A0},
428  { TO40, CO02, 0, DI97A0 },
429  { TO70, CI62, 0, DI25A0 },
430  { TO70, CI67, 0, DI25A0 },
431  { TI06, CI06, 0 },
432  { TI06, CI75, 0, DI25A0 },
433  { TI06, CI84, 0, DI25A0 },
434  { TI06, CI85, state_c8_TI06_CI85 },
435  { TI06, CU04, 0 },
436  { END_OF_STATUS, 0, 0 },
437 };
438 
439 static uint8_t state_d8_TO19_CE02(struct ge *ge) {
440  return !BIT(ge->ffFA, 5) && !BIT(ge->ffFA, 4);
441 }
442 
443 static uint8_t state_d8_TO40_CO00(struct ge *ge) {
444  return BIT(ge->ffFA, 5) && !DU93(ge);
445 }
446 
447 static const struct msl_timing_chart state_d8[] = {
448  { TO10, CO10, 0 },
449  { TO10, CO40, 0, DI21A0 }, // NOTE: both commands have same conditions ?!
450  { TO10, CO41, 0, DI21A0 }, // NOTE: it's like this in timing charts.
451  { TO19, CE02, state_d8_TO19_CE02 },
452  { TO30, CI15, 0, DI21A0 },
453  { TO40, CO00, state_d8_TO40_CO00 },
454  { TO50, CI33, 0, DI21A0 },
455  { TO50 /* PIPO */, CE01, 0 },
456  { TI06, CU00, 0, DI93A0},
457  { END_OF_STATUS, 0, 0 },
458 };
459 
460 static uint8_t state_d9_TO40_CO00(struct ge *ge) {
461  return BIT(ge->ffFA, 5) && !DU93(ge);
462 }
463 
464 static const struct msl_timing_chart state_d9[] = {
465  { TO10, CO10, 0 },
466  { TO10, CO40, 0, DI21A0 },
467  { TO10, CO41, 0, DI21A0},
468  { TO30, CI15, 0, DI21A0 },
469  { TO40, CO00, state_d9_TO40_CO00 },
470  { TO50, CI33, 0, DI21A0},
471  { TI06, CU00, 0, DI93A0},
472  { TI06, CU01, 0, DI94A0},
473  { TI06, CU10, 0 },
474  { END_OF_STATUS, 0, 0 },
475 };
476 
477 static const struct msl_timing_chart state_da[] = {
478  { TO10, CO10, 0 },
479  { TO10, CO40, 0, DI21A0 },
480  { TO10, CO41, 0, DI21A0 },
481  { TO30, CI15, 0, DI21A0 },
482  { TO40, CO00, state_d9_TO40_CO00 },
483  { TO50, CI33, 0, DI21A0 },
484  { TI06, CU00, 0, DI93A0 },
485  { END_OF_STATUS, 0, 0 },
486 };
487 
488 static const struct msl_timing_chart state_db[] = {
489  { TO10, CO10, 0 },
490  { TO10, CO40, 0, DI21A0 },
491  { TO10, CO41, 0, DI21A0 },
492  { TO30, CI15, 0, DI21A0 },
493  { TO40, CO00, state_d9_TO40_CO00 },
494  { TO50, CI33, 0, DI21A0 },
495  { TI06, CI74, 0, DI91A0 },
496  { TI06, CU00, 0, DI93A0 },
497  { TI06, CU10, 0 },
498  { TI06, CU01, 0, DI94A0 },
499  { TI06, CU11, 0, DI95A0 },
500  { TI06, CU12, 0 },
501  { TI06, CU02, state_d8_TO19_CE02 },
502  { END_OF_STATUS, 0, 0 },
503 };
504 
505 /* needs to be 1 for the per preliminary phase to continue */
506 SIG(PCOV) { return 1; }
507 
508 static uint8_t state_dc_TI06_CI70(struct ge *ge) {
509  return !PCOV(ge) && !BIT(ge->rL2, 2) && !AITE(ge);
510 }
511 
512 static uint8_t state_dc_TI06_CU20(struct ge *ge) {
513  return BIT(ge->rL2, 0) && !BIT(ge->ffFA, 5);
514 }
515 
516 static const struct msl_timing_chart state_dc[] = {
517  { TO10, CO13, 0 },
518  { TO30, CI19, 0 },
519  { TO30, CO90, 0 },
520  { TO40, CO01, 0 },
521  { TO50, CI32, 0, DI22A0 },
522  { TI06, CI70, state_dc_TI06_CI70 },
523  { TI06, CU14, 0, DI22A0 },
524  { TI06, CU20, state_dc_TI06_CU20 },
525  { END_OF_STATUS, 0, 0 },
526 };
527 
528 static uint8_t state_cc_TO50_CE00(struct ge *ge) {
529  return !ge->PUC3;
530 }
531 
532 
533 static uint8_t state_cc_TI06_CU13(struct ge *ge) {
534  return (PCOV(ge) && DU96(ge) && !DU95(ge)) || BIT(ge->ffFA, 0);
535 }
536 
537 static uint8_t state_cc_TI06_CU05(struct ge *ge) {
538  return BIT(ge->ffFA, 5) || (!BIT(ge->ffFA, 0) && DU96(ge));
539 }
540 
541 static uint8_t state_cc_TI06_CU04(struct ge *ge) {
542  return !BIT(ge->ffFA, 5) && BIT(ge->ffFA, 0);
543 }
544 
545 static uint8_t state_cc_TI06_CI75(struct ge *ge) {
546  return (PCOV(ge) && DU96(ge) && !DU95(ge)) || BIT(ge->ffFA, 0);
547 }
548 
549 static uint8_t state_cc_TI06_CU01(struct ge *ge) {
550  return BIT(ge->ffFA, 5) || !BIT(ge->ffFA, 9) ;
551 }
552 
553 static const struct msl_timing_chart state_cc[] = {
554  { TO10, CO12, 0, DI97A0 },
555  { TO10, CO41, 0, DI97A0 },
556  { TO25, CO30, not_AINI, ED70A0 },
557  { TO30, CI19, 0, DI24A0 },
558  { TO30, CO96, 0 },
559  { TO40, CO02, DI97A0 },
560  { TO50, CI32, AINI, 0 },
561  { TO50, CE01, 0 },
562  { TO50, CE00, state_cc_TO50_CE00 },
563  /* TODO: CI75 seems conditioned also on the type of peri operation (e.g. TPER/SPER ecc) */
564  { TI06, CI75, state_cc_TI06_CI75 },
565  { TI06, CU13, state_cc_TI06_CU13 },
566  { TI06, CU12, 0 },
567  { TI06, CU05, state_cc_TI06_CU05 },
568  { TI06, CU04, state_cc_TI06_CU04 },
569  { TI06, CU01, state_cc_TI06_CU01 },
570  { END_OF_STATUS, 0, 0 },
571 };
572 
573 /* TPER - CPER */
574 /* ----------- */
575 
576 SIG(L207) { return BIT(ge->rL2, 7); }
577 SIG(not_L207) { return !L207(ge); }
578 
579 static uint8_t state_ca_TO80_CE18(struct ge *ge) {
580  return L207(ge) && (!BIT(ge->rL1, 7) || BIT(ge->rL1, 6) || !BIT(ge->rL1, 0));
581 }
582 
583 static const struct msl_timing_chart state_ca[] = {
584  { TO19, CE08, L207 },
585  { TO65, CE03, 0 },
586  { TO80, CE18, state_ca_TO80_CE18 },
587  { TI06, CU16, not_L207 },
588  { TI06, CU05, 0 },
589  { TI06, CU13, L207 },
590  { TI06, CU11, not_L207 },
591  { TI10, CE10, L207 },
592  { END_OF_STATUS, 0, 0 },
593 };
594 
595 static const struct msl_timing_chart state_a8[] = {
596  { TO10, CO12, 0, DI97A0 },
597  { TO10, CO41, 0, DI97A0 },
598  { TO25, CO30, not_AINI, ED70A0 },
599  { TO30, CI19, 0, DI29A0 },
600  { TO40, CO02, 0, DI97A0 },
601  { TO70, CI60, 0, DI86A0 },
602  { TO70, CI65, 0, DI86A0 },
603  { TI05, CI05, 0, DI87A0 },
604  { TI06, CU00, 0, DI93A0 },
605  { END_OF_STATUS, 0, 0 },
606 };
607 
608 static const struct msl_timing_chart state_a9[] = {
609  { TO10, CO12, 0, DI97A0 },
610  { TO10, CO41, 0, DI97A0 },
611  { TO25, CO30, not_AINI, ED70A0 },
612  { TO30, CI19, 0, DI29A0 },
613  { TO30, CI15, 0, DI84A0 },
614  { TO30, CO97, AINI },
615  { TO40, CO02, 0, DI97A0 },
616  { TO50, CI32, AINI, ED75A0 },
617  { TO70, CI62, 0, ED79A0 },
618  { TO70, CI67, 0, ED79A0 },
619  { TI05, CI05, 0, DI87A0 },
620  { TI06, CI07, PC031 },
621  { TI06, CU00, 0, DI93A0},
622  { TI06, CU10, 0 },
623  { TI06, CU01, DI94A0 },
624  { END_OF_STATUS, 0, 0 },
625 };
626 
627 static const struct msl_timing_chart state_aa[] = {
628  { TO10, CO12, 0, DI97A0 },
629  { TO10, CO41, 0, DI97A0 },
630  { TO25, CO30, not_AINI, ED70A0 },
631  { TO30, CI19, 0, DI29A0 },
632  { TO40, CO02, 0, DI97A0 },
633  { TO70, CI60, 0, DI86A0 },
634  { TO70, CI65, 0, DI86A0 },
635  { TI05, CI01, 0 },
636  { TI06, CU00, 0, DI93A0},
637  { END_OF_STATUS, 0, 0 },
638 };
639 
640 static uint8_t state_ab_TO70_CI62(struct ge *ge) { return !(PC111(ge) && PC211(ge)); }
641 
642 static uint8_t state_ab_TO80_CE18(struct ge *ge) {
643  /* this equation is different in the timing charts documentation (fo. 58),
644  * and in the cpu PDS documentation (fo. 218) it seems the PDS is the right
645  * one. */
646  return !(PC121(ge) || PC111(ge) || PC211(ge));
647 }
648 
649 static uint8_t state_ab_TI05_CI04(struct ge *ge) { return BIT(ge->rL2, 0); }
650 static uint8_t state_ab_TI05_CI03(struct ge *ge) { return PC031(ge); }
651 
652 static const struct msl_timing_chart state_ab[] = {
653  { TO10, CO12, 0, DI97A0 },
654  { TO10, CO41, 0, DI97A0 },
655  { TO19, CE07, 0 }, /* no clock in documentation! */
656  { TO19, CE08, 0 },
657  { TO25, CO30, not_AINI, ED70A0 },
658  { TO30, CI19, 0, DI29A0 },
659  { TO30, CI11, 0 },
660  { TO40, CO02, 0, DI97A0 },
661  { TO70, CI62, state_ab_TO70_CI62, ED79A0 },
662  { TO70, CI67, state_ab_TO70_CI62, ED79A0 },
663  { TO80, CE18, state_ab_TO80_CE18 },
664  { TI05, CI01, 0 },
665  { TI05, CI04, state_ab_TI05_CI04 },
666  { TI05, CI03, state_ab_TI05_CI03 },
667  { TI06, CU00, 0, DI93A0},
668  { TI06, CU10, 0 },
669  { TI06, CU01, 0, DI94A0},
670  { TI06, CU11, 0, DI95A0},
671  { TI06, CU04, 0, DI85A0},
672  { TI10, CE10, 0 },
673  { END_OF_STATUS, 0, 0 },
674 };
675 
676 
677 static uint8_t state_b8_TI06_CI72(struct ge *ge) { return BIT(ge->rL2, 0) && BIT(ge->rL2, 3); }
678 static uint8_t DU97_or_DU98(struct ge *ge) { return DU97(ge) || DU98(ge); }
679 static uint8_t state_b8_TI10_CE09(struct ge *ge) { return !BIT(ge->ffFA, 0) && !BIT(ge->rL2, 3) && !ge->RACI; }
680 
681 static const struct msl_timing_chart state_b8[] = {
682  { TI06, CI72, state_b8_TI06_CI72 },
683  { TI06, CI70, 0 },
684  { TI06, CU01, DU97_or_DU98 },
685  { TI06, CU13, DU97 },
686  { TI06, CU14, DU97_or_DU98 },
687  { TI06, CU06, DU97_or_DU98 },
688  { TI10, CE09, state_b8_TI10_CE09 },
689  { END_OF_STATUS, 0, 0 },
690 };
691 
692 SIG(L204) { return BIT(ge->rL2, 4); }
693 SIG(L205) { return BIT(ge->rL2, 5); }
694 SIG(L206) { return BIT(ge->rL2, 6); }
695 
696 
697 SIG(FA01) { return BIT(ge->ffFA, 1); }
698 SIG(not_FA01) { return !FA01(ge); }
699 
700 static const struct msl_timing_chart state_b1[] = {
701  { TO10, CO11 },
702  { TO10, CO41 },
703  { TO10, CO40, L205 },
704  { TO25, CO31, FA01 },
705  { TO30, CI15, not_FA01 },
706  { TO30, CI12, FA01 },
707  { TO30, CI41 },
708  { TO40, CO01, FA01 },
709  { TO50, CI33, FA01 },
710  { TO80, CE18 },
711  { TI05, CI05, not_FA01 },
712  { TI06, CI71 },
713  { TI06, CI81, FA01 },
714  { TI06, CU03 },
715  { TI06, CU10 },
716  { END_OF_STATUS },
717 };
718 
719 
720 SIG(RIG1) { return ge->RIG1; }
721 SIG(RIG3) { return ge->RIG3; }
722 
723 SIG(RENIA) { return 1; } // TODO
724 SIG(RILIA) { return 1; } // TODO
725 
726 SIG(RIG1A) { return !ge->RIG1; }
727 SIG(RIVE1) { return !(RIG1A(ge) && RENIA(ge) && RILIA(ge)); }
729 SIG(RIVE) { return RIVE1(ge); }
730 
731 SIG(not_L206) { return !L206(ge); }
732 
733 static uint8_t state_b9_TO25_CO31(struct ge *ge) { return !BIT(ge->ffFA, 1) && !BIT(ge->rL2, 6); }
734 static uint8_t state_b9_TO30_CI12(struct ge *ge) { return !L204(ge) && !L206(ge); }
735 
736 /* the original timingchart and the flow chart disagree, RIG1 is spelt "AIGI" in
737  * the timings, but RIG1 in the flow, also timings use L206 and flow use L205... */
738 static uint8_t state_b9_TO40_CO01(struct ge *ge) { return (L204(ge) || (!BIT(ge->ffFA, 1) && RIG1(ge))) && !L206(ge); }
739 
740 static uint8_t state_b9_TO70_CI67(struct ge *ge) { return BIT(ge->ffFA, 1) && !L206(ge); }
741 static uint8_t state_b9_TO70_CI66(struct ge *ge) { return !BIT(ge->ffFA, 1) && !L204(ge) && !L206(ge); }
742 static uint8_t state_b9_TO80_CE05(struct ge *ge) { return !PC121(ge) && !L206(ge); }
743 static uint8_t state_b9_TI06_CU13(struct ge *ge) { return !L204(ge) && !L206(ge); }
744 static uint8_t state_b9_TI10_CE09(struct ge *ge) { return !RIVE(ge) && !PC121(ge) && !L206(ge); }
745 
746 static const struct msl_timing_chart state_b9[] = {
747  { TO10, CO11 },
748  { TO10, CO41 },
749  { TO10, CO40, L205 },
750  { TO25, CO31, state_b9_TO25_CO31 },
751  { TO30, CI15, L204 },
752  { TO30, CI41, L204 },
753  { TO30, CI40, L204 },
754  { TO30, CI12, state_b9_TO30_CI12 },
755  { TO40, CO01, state_b9_TO40_CO01 },
756  { TO50, CI34, not_L206 },
757  { TO70, CI67, state_b9_TO70_CI67 },
758  { TO70, CI66, state_b9_TO70_CI66 },
759  { TO80, CE18, L204 },
760  { TO80, CE05, state_b9_TO80_CE05 },
761  { TO65, CE11, not_L206 },
762  { TI05, CI05, L204 },
763  { TI05, CI02, not_L206 },
764  { TI06, CU13, state_b9_TI06_CU13 },
765  { TI10, CE09, state_b9_TI10_CE09 },
766  { END_OF_STATUS },
767 };
768 
769 static uint8_t L206_or_PC01(struct ge *ge) { return BIT(ge->rL2, 7) || PC011(ge); }
770 
771 static const struct msl_timing_chart state_ea[] = {
772  { TO10, CO18, 0 },
773  { TO10, CO97, 0, DI11A0 },
774  { TO10, CO96, 0, DI11A0 },
775  { TO10, CO95, 0, DI11A0 },
776  { TO10, CO94, 0 },
777  { TO10, CO93, 0, DI11A0 },
778  { TO10, CO92, 0, DI11A0 },
779  { TO10, CO91, 0 },
780  { TO10, CO90, 0, DI11A0 },
781  { TO10, CO40, 0, DI11A0 },
782  { TO10, CO41, 0, DI11A0 },
783  { TO25, CO31, L206_or_PC01 },
784  { TO30, CI11, 0 },
785  { TO40, CO02, 0, DI11A0 },
786  { TO50, CI33, 0, DI83A0 },
787  { TI06, CU00, 0 },
788  { END_OF_STATUS, 0, 0 },
789 };
790 
791 
792 static uint8_t state_eb_TI06_CI75(struct ge *ge) {
793  return ((RIG3(ge) && BIT(ge->rL2, 7)) ||
794  (RIG1(ge) && PC011(ge) && !ge->RACI));
795 }
796 
797 static uint8_t state_eb_TI06_CE19(struct ge *ge) { return 0; }
798 
799 static const struct msl_timing_chart state_eb[] = {
800  { TO10, CO12, 0, DA25A0 },
801  { TO10, CO97, 0, DI11A0 },
802  { TO10, CO96, 0, DI11A0 },
803  { TO10, CO95, 0, DI11A0 },
804  { TO10, CO94, 0 },
805  { TO10, CO93, 0, DI11A0 },
806  { TO10, CO92, 0, DI11A0 },
807  { TO10, CO91, 0 },
808  { TO10, CO90, 0, DI11A0 },
809  { TO10, CO04, 0, DI11A0 },
810  { TO10, CO41, 0, DI11A0 },
811  { TO25, CO31, L206_or_PC01 },
812  { TO30, CI11, 0 },
813  { TO40, CO02, 0, DI11A0 },
814  { TO50, CI32, 0, DI82A0 },
815  { TO50, CE06, L207 },
816  { TI06, CI75, state_eb_TI06_CI75, ED91A0 },
817  { TI06, CE19, state_eb_TI06_CE19 },
818  { TI06, CU00, 0 },
819  { TI06, CU13, 0, DI82A0 },
820  { END_OF_STATUS, 0, 0 },
821 };
Bit manipulation helpers.
#define BIT(V, X)
Definition: bit.h:9
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 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 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 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 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 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 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
static uint8_t state_E2_E3_TI06_CI82(struct ge *ge)
Definition: msl-states.c:95
static uint8_t jc_js1_js2_jie_lon_loll_loff_ins_ens_nop(struct ge *ge)
Definition: msl-states.c:278
static uint8_t AF52_not_RO07(struct ge *ge)
Definition: msl-states.c:354
static uint8_t state_E7_TI06_CU17(struct ge *ge)
Definition: msl-states.c:218
static uint8_t not_RO06(struct ge *ge)
Definition: msl-states.c:23
static uint8_t state_ab_TI05_CI04(struct ge *ge)
Definition: msl-states.c:649
static uint8_t state_00_TO50_CI33(struct ge *ge)
Definition: msl-states.c:327
static uint8_t state_cc_TI06_CU04(struct ge *ge)
Definition: msl-states.c:541
static uint8_t state_b9_TO40_CO01(struct ge *ge)
Definition: msl-states.c:738
static uint8_t state_dc_TI06_CI70(struct ge *ge)
Definition: msl-states.c:508
static const struct msl_timing_chart state_E7[]
Definition: msl-states.c:222
static const struct msl_timing_chart state_cc[]
Definition: msl-states.c:553
static const struct msl_timing_chart state_db[]
Definition: msl-states.c:488
static uint8_t state_80_TO30_CO97(struct ge *ge)
Definition: msl-states.c:59
static const struct msl_timing_chart state_80[]
Definition: msl-states.c:63
static uint8_t state_00_TO30_CI15(struct ge *ge)
Definition: msl-states.c:326
static uint8_t ins(struct ge *ge)
Definition: msl-states.c:254
static const struct msl_timing_chart state_d8[]
Definition: msl-states.c:447
static uint8_t L206_or_PC01(struct ge *ge)
Definition: msl-states.c:769
static uint8_t state_ca_TO80_CE18(struct ge *ge)
Definition: msl-states.c:579
static uint8_t state_c8_TI06_CI85(struct ge *ge)
Definition: msl-states.c:419
static const struct msl_timing_chart state_E2_E3[]
Definition: msl-states.c:103
static uint8_t state_b8_TI06_CI72(struct ge *ge)
Definition: msl-states.c:677
static uint8_t lon_loll(struct ge *ge)
Definition: msl-states.c:249
static uint8_t state_b9_TO70_CI66(struct ge *ge)
Definition: msl-states.c:741
static uint8_t state_E4_TO70_CI60(struct ge *ge)
Definition: msl-states.c:144
static uint8_t not_RO03(struct ge *ge)
Definition: msl-states.c:20
static uint8_t state_eb_TI06_CE19(struct ge *ge)
Definition: msl-states.c:797
static uint8_t AF52_not_RO00(struct ge *ge)
Definition: msl-states.c:347
static const struct msl_timing_chart state_ea[]
Definition: msl-states.c:771
static uint8_t not_RO00(struct ge *ge)
Definition: msl-states.c:17
static const struct msl_timing_chart state_E6[]
Definition: msl-states.c:173
static uint8_t state_b9_TO30_CI12(struct ge *ge)
Definition: msl-states.c:734
static uint8_t state_b9_TO80_CE05(struct ge *ge)
Definition: msl-states.c:742
static uint8_t state_eb_TI06_CI75(struct ge *ge)
Definition: msl-states.c:792
static uint8_t state_cc_TI06_CI75(struct ge *ge)
Definition: msl-states.c:545
static uint8_t AF52_not_RO05(struct ge *ge)
Definition: msl-states.c:352
static const struct msl_timing_chart state_c8[]
Definition: msl-states.c:424
static const struct msl_timing_chart state_ca[]
Definition: msl-states.c:583
static uint8_t state_E0_TI06_CU17(struct ge *ge)
Definition: msl-states.c:124
static uint8_t state_dc_TI06_CU20(struct ge *ge)
Definition: msl-states.c:512
static uint8_t state_b8_TI10_CE09(struct ge *ge)
Definition: msl-states.c:679
static const struct msl_timing_chart state_08[]
Definition: msl-states.c:356
static uint8_t state_E6_TO80_CI38(struct ge *ge)
Definition: msl-states.c:165
static const struct msl_timing_chart state_da[]
Definition: msl-states.c:477
static uint8_t state_cc_TI06_CU05(struct ge *ge)
Definition: msl-states.c:537
static const struct msl_timing_chart state_aa[]
Definition: msl-states.c:627
static uint8_t loff(struct ge *ge)
Definition: msl-states.c:266
static const struct msl_timing_chart state_E5[]
Definition: msl-states.c:197
static uint8_t not_RO01(struct ge *ge)
Definition: msl-states.c:18
static const struct msl_timing_chart state_E0[]
Definition: msl-states.c:128
static uint8_t not_RO07(struct ge *ge)
Definition: msl-states.c:24
static const struct msl_timing_chart state_d9[]
Definition: msl-states.c:464
static const struct msl_timing_chart state_ab[]
Definition: msl-states.c:652
static uint8_t state_d9_TO40_CO00(struct ge *ge)
Definition: msl-states.c:460
static uint8_t not_RO05(struct ge *ge)
Definition: msl-states.c:22
static uint8_t state_E6_TI06_CU17(struct ge *ge)
Definition: msl-states.c:168
static uint8_t state_b9_TI06_CU13(struct ge *ge)
Definition: msl-states.c:743
static const struct msl_timing_chart state_a9[]
Definition: msl-states.c:608
static uint8_t jc_js1_js2_jie_condition_verified(struct ge *ge)
Definition: msl-states.c:270
static uint8_t state_ab_TO80_CE18(struct ge *ge)
Definition: msl-states.c:642
static uint8_t DU97_or_DU98(struct ge *ge)
Definition: msl-states.c:678
static uint8_t AINI(struct ge *ge)
Definition: msl-states.c:32
static uint8_t state_cc_TI06_CU01(struct ge *ge)
Definition: msl-states.c:549
static uint8_t per_peri(struct ge *ge)
Definition: msl-states.c:284
static uint8_t state_d8_TO40_CO00(struct ge *ge)
Definition: msl-states.c:443
static uint8_t state_ab_TI05_CI03(struct ge *ge)
Definition: msl-states.c:650
static uint8_t jie(struct ge *ge)
Definition: msl-states.c:258
static uint8_t state_b9_TI10_CE09(struct ge *ge)
Definition: msl-states.c:744
static uint8_t state_b9_TO25_CO31(struct ge *ge)
Definition: msl-states.c:733
static uint8_t state_00_TO10_CO11(struct ge *ge)
Definition: msl-states.c:325
static uint8_t state_80_TO30_CO96(struct ge *ge)
Definition: msl-states.c:55
static uint8_t state_E7_TI06_CU03(struct ge *ge)
Definition: msl-states.c:216
static uint8_t state_E2_E3_TI06_CU04(struct ge *ge)
Definition: msl-states.c:99
static uint8_t state_ab_TO70_CI62(struct ge *ge)
Definition: msl-states.c:640
static uint8_t AF52_not_RO06(struct ge *ge)
Definition: msl-states.c:353
static uint8_t state_00_TO10_CO10(struct ge *ge)
Definition: msl-states.c:324
static uint8_t jc_js1_js2_jie(struct ge *ge)
Definition: msl-states.c:242
SIG(FUL2)
Definition: msl-states.c:52
static uint8_t per_peri_TO25_CO30(struct ge *ge)
Definition: msl-states.c:289
static uint8_t state_E2_E3_TO80_CI89(struct ge *ge)
Definition: msl-states.c:90
static uint8_t AF52_not_RO01(struct ge *ge)
Definition: msl-states.c:348
static uint8_t state_cc_TI06_CU13(struct ge *ge)
Definition: msl-states.c:533
static uint8_t AF52_not_RO02(struct ge *ge)
Definition: msl-states.c:349
static uint8_t not_RO04(struct ge *ge)
Definition: msl-states.c:21
static uint8_t state_d8_TO19_CE02(struct ge *ge)
Definition: msl-states.c:439
static const struct msl_timing_chart state_E4[]
Definition: msl-states.c:146
static uint8_t AF52_not_RO04(struct ge *ge)
Definition: msl-states.c:351
static uint8_t state_E7_TO80_CI38(struct ge *ge)
Definition: msl-states.c:215
static uint8_t state_E6_TI06_CU03(struct ge *ge)
Definition: msl-states.c:166
static const struct msl_timing_chart state_64_65[]
Definition: msl-states.c:293
static const struct msl_timing_chart state_00[]
Definition: msl-states.c:329
static const struct msl_timing_chart state_b8[]
Definition: msl-states.c:681
static uint8_t nop(struct ge *ge)
Definition: msl-states.c:274
static const struct msl_timing_chart state_a8[]
Definition: msl-states.c:595
static uint8_t ens(struct ge *ge)
Definition: msl-states.c:262
static uint8_t not_RO02(struct ge *ge)
Definition: msl-states.c:19
static uint8_t not_AINI(struct ge *ge)
Definition: msl-states.c:33
static const struct msl_timing_chart state_b9[]
Definition: msl-states.c:746
static uint8_t state_b9_TO70_CI67(struct ge *ge)
Definition: msl-states.c:740
static const struct msl_timing_chart state_dc[]
Definition: msl-states.c:516
static const struct msl_timing_chart state_b1[]
Definition: msl-states.c:700
static const struct msl_timing_chart state_eb[]
Definition: msl-states.c:799
static uint8_t AF52_not_RO03(struct ge *ge)
Definition: msl-states.c:350
static uint8_t state_cc_TO50_CE00(struct ge *ge)
Definition: msl-states.c:528
#define LON_OPCODE
Definition: opcodes.h:18
#define LOFF_OPCODE
Definition: opcodes.h:15
#define ENS_OPCODE
Definition: opcodes.h:9
#define LOFF_2NDCHAR
Definition: opcodes.h:16
#define PERI_OPCODE
Definition: opcodes.h:47
#define LON_2NDCHAR
Definition: opcodes.h:19
#define JS1_2NDCHAR
Definition: opcodes.h:36
#define INS_OPCODE
Definition: opcodes.h:12
#define INS_2NDCHAR
Definition: opcodes.h:13
#define HLT_OPCODE
Definition: opcodes.h:25
#define JIE_OPCODE
Definition: opcodes.h:29
#define JC_OPCODE
Definition: opcodes.h:39
#define PER_OPCODE
Definition: opcodes.h:49
#define JS2_OPCODE
Definition: opcodes.h:32
#define NOP2_OPCODE
Definition: opcodes.h:24
#define LOLL_OPCODE
Definition: opcodes.h:21
#define JS1_OPCODE
Definition: opcodes.h:35
#define ENS_2NDCHAR
Definition: opcodes.h:10
#define JS2_2NDCHAR
Definition: opcodes.h:33
#define JIE_2NDCHAR
Definition: opcodes.h:30
Signals.
The entire state of the emulated system, including registers, memory, peripherals and timings.
Definition: ge.h:94
uint8_t RINT
Definition: ge.h:329
uint8_t ALOI
Load connector selection.
Definition: ge.h:261
uint8_t AINI
Program Loading.
Definition: ge.h:254
uint8_t ffFA
Special conditions register 2.
Definition: ge.h:239
uint16_t rRO
Multipurpose 8+1 bit register.
Definition: ge.h:147
uint8_t PUC3
Channel 3 in transfer.
Definition: ge.h:381
uint8_t rL2
Auxiliary register.
Definition: ge.h:131
uint8_t AVER
Jump Condition Verified.
Definition: ge.h:319
uint8_t RACI
Rejected Command.
Definition: ge.h:494
uint16_t rL1
Length of the operand.
Definition: ge.h:130
uint8_t RIG1
End from controller 1.
Definition: ge.h:489
uint8_t RIG3
Definition: ge.h:491
uint8_t rFO
Current function code.
Definition: ge.h:171
Timing chart row.
Definition: msl-timings.h:15