1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 #if !defined(SIM_SCP_H_)
41 # define SIM_SCP_H_ 0
42
43
44
45 # define RU_RUN 0
46 # define RU_GO 1
47 # define RU_STEP 2
48 # define RU_NEXT 3
49 # define RU_CONT 4
50 # define RU_BOOT 5
51
52
53
54 # define EX_D 0
55 # define EX_E 1
56 # define EX_I 2
57
58
59
60 # define SSH_ST 0
61 # define SSH_SH 1
62 # define SSH_CL 2
63
64
65
66 # define CMD_OPT_SW 001
67 # define CMD_OPT_OF 002
68 # define CMD_OPT_SCH 004
69 # define CMD_OPT_DFT 010
70
71
72
73 t_stat reset_cmd (int32 flag, CONST char *ptr);
74 t_stat exdep_cmd (int32 flag, CONST char *ptr);
75 t_stat eval_cmd (int32 flag, CONST char *ptr);
76 t_stat load_cmd (int32 flag, CONST char *ptr);
77 t_stat run_cmd (int32 flag, CONST char *ptr);
78 void run_cmd_message (const char *unechod_cmdline, t_stat r);
79 t_stat attach_cmd (int32 flag, CONST char *ptr);
80 t_stat detach_cmd (int32 flag, CONST char *ptr);
81
82
83
84
85 t_stat exit_cmd (int32 flag, CONST char *ptr);
86 t_stat set_cmd (int32 flag, CONST char *ptr);
87 t_stat show_cmd (int32 flag, CONST char *ptr);
88 t_stat brk_cmd (int32 flag, CONST char *ptr);
89 t_stat do_cmd (int32 flag, CONST char *ptr);
90 t_stat goto_cmd (int32 flag, CONST char *ptr);
91 t_stat return_cmd (int32 flag, CONST char *ptr);
92 t_stat shift_cmd (int32 flag, CONST char *ptr);
93 t_stat call_cmd (int32 flag, CONST char *ptr);
94 t_stat on_cmd (int32 flag, CONST char *ptr);
95 t_stat noop_cmd (int32 flag, CONST char *ptr);
96 t_stat assert_cmd (int32 flag, CONST char *ptr);
97 t_stat send_cmd (int32 flag, CONST char *ptr);
98 t_stat expect_cmd (int32 flag, CONST char *ptr);
99 t_stat help_cmd (int32 flag, CONST char *ptr);
100 t_stat screenshot_cmd (int32 flag, CONST char *ptr);
101 t_stat spawn_cmd (int32 flag, CONST char *ptr);
102 t_stat echo_cmd (int32 flag, CONST char *ptr);
103
104
105 # if !defined (__GNUC__)
106 # define GCC_FMT_ATTR(n, m)
107 # endif
108
109 # if !defined(GCC_FMT_ATTR)
110 # define GCC_FMT_ATTR(n, m) __attribute__ ((format (__printf__, n, m)))
111 # endif
112
113
114 t_stat sim_process_event (void);
115 t_stat sim_activate (UNIT *uptr, int32 interval);
116 t_stat _sim_activate (UNIT *uptr, int32 interval);
117 t_stat sim_activate_abs (UNIT *uptr, int32 interval);
118 t_stat sim_activate_after (UNIT *uptr, uint32 usecs_walltime);
119 t_stat _sim_activate_after (UNIT *uptr, uint32 usecs_walltime);
120 t_stat sim_cancel (UNIT *uptr);
121 t_bool sim_is_active (UNIT *uptr);
122 int32 sim_activate_time (UNIT *uptr);
123 t_stat sim_run_boot_prep (int32 flag);
124 double sim_gtime (void);
125 uint32 sim_grtime (void);
126 int32 sim_qcount (void);
127 t_stat attach_unit (UNIT *uptr, CONST char *cptr);
128 t_stat detach_unit (UNIT *uptr);
129 t_stat assign_device (DEVICE *dptr, const char *cptr);
130 t_stat deassign_device (DEVICE *dptr);
131 t_stat reset_all (uint32 start_device);
132 t_stat reset_all_p (uint32 start_device);
133 const char *sim_dname (DEVICE *dptr);
134 const char *sim_uname (UNIT *dptr);
135 int sim_isspace (char c);
136 int sim_islower (char c);
137 int sim_isalpha (char c);
138 int sim_isprint (char c);
139 int sim_isdigit (char c);
140 int sim_isgraph (char c);
141 int sim_isalnum (char c);
142 CONST char *get_sim_opt (int32 opt, CONST char *cptr, t_stat *st);
143 const char *put_switches (char *buf, size_t bufsize, uint32 sw);
144 CONST char *get_glyph (const char *iptr, char *optr, char mchar);
145 CONST char *get_glyph_nc (const char *iptr, char *optr, char mchar);
146 CONST char *get_glyph_quoted (const char *iptr, char *optr, char mchar);
147 CONST char *get_glyph_cmd (const char *iptr, char *optr);
148 t_value get_uint (const char *cptr, uint32 radix, t_value max, t_stat *status);
149 CONST char *get_range (DEVICE *dptr, CONST char *cptr, t_addr *lo, t_addr *hi,
150 uint32 rdx, t_addr max, char term);
151 t_stat sim_decode_quoted_string (const char *iptr, uint8 *optr, uint32 *osize);
152 char *sim_encode_quoted_string (const uint8 *iptr, size_t size);
153 void fprint_buffer_string (FILE *st, const uint8 *buf, size_t size);
154 t_value strtotv (CONST char *cptr, CONST char **endptr, uint32 radix);
155 int Fprintf (FILE *f, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
156 t_stat fprint_val (FILE *stream, t_value val, uint32 rdx, uint32 wid, uint32 fmt);
157 t_stat sprint_val (char *buf, t_value val, uint32 rdx, size_t wid, uint32 fmt);
158 const char *sim_fmt_secs (double seconds);
159 const char *sprint_capac (DEVICE *dptr, UNIT *uptr);
160 char *read_line (char *cptr, int32 size, FILE *stream);
161 void fprint_reg_help (FILE *st, DEVICE *dptr);
162 void fprint_set_help (FILE *st, DEVICE *dptr);
163 void fprint_show_help (FILE *st, DEVICE *dptr);
164 CTAB *find_cmd (const char *gbuf);
165 DEVICE *find_dev (const char *ptr);
166 DEVICE *find_unit (const char *ptr, UNIT **uptr);
167 DEVICE *find_dev_from_unit (UNIT *uptr);
168 t_stat sim_register_internal_device (DEVICE *dptr);
169 void sim_sub_args (char *in_str, size_t in_str_size, char *do_arg[]);
170 REG *find_reg (CONST char *ptr, CONST char **optr, DEVICE *dptr);
171 CTAB *find_ctab (CTAB *tab, const char *gbuf);
172 C1TAB *find_c1tab (C1TAB *tab, const char *gbuf);
173 SHTAB *find_shtab (SHTAB *tab, const char *gbuf);
174 t_stat get_aval (t_addr addr, DEVICE *dptr, UNIT *uptr);
175 BRKTAB *sim_brk_fnd (t_addr loc);
176 uint32 sim_brk_test (t_addr bloc, uint32 btyp);
177 void sim_brk_clrspc (uint32 spc, uint32 btyp);
178 void sim_brk_npc (uint32 cnt);
179 void sim_brk_setact (const char *action);
180 const char *sim_brk_message(void);
181 t_stat sim_send_input (SEND *snd, uint8 *data, size_t size, uint32 after, uint32 delay);
182 t_stat sim_show_send_input (FILE *st, const SEND *snd);
183 t_bool sim_send_poll_data (SEND *snd, t_stat *stat);
184 t_stat sim_send_clear (SEND *snd);
185 t_stat sim_set_expect (EXPECT *exp, CONST char *cptr);
186 t_stat sim_set_noexpect (EXPECT *exp, const char *cptr);
187 t_stat sim_exp_set (EXPECT *exp, const char *match, int32 cnt, uint32 after, int32 switches, const char *act);
188 t_stat sim_exp_clr (EXPECT *exp, const char *match);
189 t_stat sim_exp_clrall (EXPECT *exp);
190 t_stat sim_exp_show (FILE *st, CONST EXPECT *exp, const char *match);
191 t_stat sim_exp_showall (FILE *st, const EXPECT *exp);
192 t_stat sim_exp_check (EXPECT *exp, uint8 data);
193 t_stat show_version (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, CONST char *cptr);
194 t_stat set_dev_debug (DEVICE *dptr, UNIT *uptr, int32 flag, CONST char *cptr);
195 t_stat show_dev_debug (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, CONST char *cptr);
196 const char *sim_error_text (t_stat stat);
197 t_stat sim_string_to_stat (const char *cptr, t_stat *cond);
198 void sim_printf (const char *fmt, ...) GCC_FMT_ATTR(1, 2);
199 t_stat sim_messagef (t_stat stat, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
200 void sim_data_trace(DEVICE *dptr, UNIT *uptr, const uint8 *data, const char *position, size_t len, const char *txt, uint32 reason);
201 void sim_debug_bits_hdr (uint32 dbits, DEVICE* dptr, const char *header,
202 BITFIELD* bitdefs, uint32 before, uint32 after, int terminate);
203 void sim_debug_bits (uint32 dbits, DEVICE* dptr, BITFIELD* bitdefs,
204 uint32 before, uint32 after, int terminate);
205 void _sim_debug (uint32 dbits, DEVICE* dptr, const char *fmt, ...) GCC_FMT_ATTR(3, 4);
206 # define sim_debug(dbits, dptr, ...) \
207 do { \
208 if ((sim_deb != NULL) && ((dptr != NULL) && ((dptr)->dctrl & dbits))) \
209 _sim_debug (dbits, dptr, __VA_ARGS__); \
210 } \
211 while (0)
212 void fprint_stopped_gen (FILE *st, t_stat v, REG *pc, DEVICE *dptr);
213 # define SCP_HELP_FLAT (1u << 31)
214 # define SCP_HELP_ONECMD (1u << 30)
215 # define SCP_HELP_ATTACH (1u << 29)
216 t_stat scp_help (FILE *st, DEVICE *dptr,
217 UNIT *uptr, int32 flag, const char *help, const char *cptr, ...);
218 t_stat scp_vhelp (FILE *st, DEVICE *dptr,
219 UNIT *uptr, int32 flag, const char *help, const char *cptr, va_list ap);
220 t_stat scp_helpFromFile (FILE *st, DEVICE *dptr,
221 UNIT *uptr, int32 flag, const char *help, const char *cptr, ...);
222 t_stat scp_vhelpFromFile (FILE *st, DEVICE *dptr,
223 UNIT *uptr, int32 flag, const char *help, const char *cptr, va_list ap);
224
225
226
227 extern DEVICE *sim_dflt_dev;
228 extern int32 sim_interval;
229 extern int32 sim_switches;
230 extern int32 sim_iglock;
231 extern int32 sim_nolock;
232 extern int32 sim_randompst;
233 extern int32 sim_quiet;
234 extern int32 sim_localopc;
235 extern int32 sim_randstate;
236 extern int32 sim_nostate;
237 extern int32 sim_step;
238 extern t_stat sim_last_cmd_stat;
239 extern FILE *sim_log;
240 extern FILEREF *sim_log_ref;
241 extern FILE *sim_deb;
242 extern FILEREF *sim_deb_ref;
243 extern int32 sim_deb_switches;
244 extern struct timespec sim_deb_basetime;
245 extern DEVICE **sim_internal_devices;
246 extern uint32 sim_internal_device_count;
247 extern UNIT *sim_clock_queue;
248 extern int32 sim_is_running;
249 extern t_bool sim_processing_event;
250 extern char *sim_prompt;
251 extern const char *sim_savename;
252 extern t_value *sim_eval;
253 extern volatile int32 stop_cpu;
254 extern uint32 sim_brk_types;
255 extern uint32 sim_brk_dflt;
256 extern uint32 sim_brk_summ;
257 extern uint32 sim_brk_match_type;
258 extern t_addr sim_brk_match_addr;
259 extern BRKTYPTAB *sim_brk_type_desc;
260 extern FILE *stdnul;
261 extern t_bool sim_asynch_enabled;
262
263
264
265 extern char sim_name[];
266 extern DEVICE *sim_devices[];
267 extern REG *sim_PC;
268 extern const char *sim_stop_messages[];
269 extern t_stat sim_instr (void);
270 extern int32 sim_emax;
271 extern t_stat fprint_sym (FILE *ofile, t_addr addr, t_value *val,
272 UNIT *uptr, int32 sw);
273 extern t_stat parse_sym (CONST char *cptr, t_addr addr, UNIT *uptr, t_value *val,
274 int32 sw);
275
276
277
278
279 extern void (*sim_vm_init) (void);
280 extern char *(*sim_vm_read) (char *ptr, int32 size, FILE *stream);
281 extern void (*sim_vm_post) (t_bool from_scp);
282 extern CTAB *sim_vm_cmd;
283 extern void (*sim_vm_sprint_addr) (char *buf, DEVICE *dptr, t_addr addr);
284 extern void (*sim_vm_fprint_addr) (FILE *st, DEVICE *dptr, t_addr addr);
285 extern t_addr (*sim_vm_parse_addr) (DEVICE *dptr, CONST char *cptr, CONST char **tptr);
286 extern t_bool (*sim_vm_fprint_stopped) (FILE *st, t_stat reason);
287 extern t_value (*sim_vm_pc_value) (void);
288 extern t_bool (*sim_vm_is_subroutine_call) (t_addr **ret_addrs);
289 extern const char *xstrerror_l(int errnum);
290
291 # define SIM_FRONTPANEL_VERSION 2
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315 typedef struct PANEL PANEL;
316
317 PANEL *
318 sim_panel_start_simulator (const char *sim_path,
319 const char *sim_config,
320 size_t device_panel_count);
321
322 PANEL *
323 sim_panel_start_simulator_debug (const char *sim_path,
324 const char *sim_config,
325 size_t device_panel_count,
326 const char *debug_file);
327
328
329
330
331
332
333
334
335
336
337 PANEL *
338 sim_panel_add_device_panel (PANEL *simulator_panel,
339 const char *device_name);
340
341
342
343
344
345
346
347
348
349 int
350 sim_panel_destroy (PANEL *panel);
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380 int
381 sim_panel_add_register (PANEL *panel,
382 const char *name,
383 const char *device_name,
384 size_t size,
385 void *addr);
386
387 int
388 sim_panel_add_register_array (PANEL *panel,
389 const char *name,
390 const char *device_name,
391 size_t element_count,
392 size_t size,
393 void *addr);
394
395 int
396 sim_panel_add_register_indirect (PANEL *panel,
397 const char *name,
398 const char *device_name,
399 size_t size,
400 void *addr);
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424 int
425 sim_panel_get_registers (PANEL *panel, unsigned long long *simulation_time);
426
427 typedef void (*PANEL_DISPLAY_PCALLBACK)(PANEL *panel,
428 unsigned long long simulation_time,
429 void *context);
430
431 int
432 sim_panel_set_display_callback (PANEL *panel,
433 PANEL_DISPLAY_PCALLBACK callback,
434 void *context,
435 int callbacks_per_second);
436
437
438
439
440
441
442
443
444
445
446
447
448
449 int
450 sim_panel_exec_halt (PANEL *panel);
451
452 int
453 sim_panel_exec_boot (PANEL *panel, const char *device);
454
455 int
456 sim_panel_exec_run (PANEL *panel);
457
458 int
459 sim_panel_exec_step (PANEL *panel);
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481 int
482 sim_panel_break_set (PANEL *panel, const char *condition);
483
484 int
485 sim_panel_break_clear (PANEL *panel, const char *condition);
486
487 int
488 sim_panel_break_output_set (PANEL *panel, const char *condition);
489
490 int
491 sim_panel_break_output_clear (PANEL *panel, const char *condition);
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519 int
520 sim_panel_gen_examine (PANEL *panel,
521 const char *name_or_addr,
522 size_t size,
523 void *value);
524
525
526
527
528
529
530
531
532
533
534
535 int
536 sim_panel_gen_deposit (PANEL *panel,
537 const char *name_or_addr,
538 size_t size,
539 const void *value);
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556 int
557 sim_panel_mem_examine (PANEL *panel,
558 size_t addr_size,
559 const void *addr,
560 size_t value_size,
561 void *value);
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578 int
579 sim_panel_mem_deposit (PANEL *panel,
580 size_t addr_size,
581 const void *addr,
582 size_t value_size,
583 const void *value);
584
585
586
587
588
589
590
591
592
593
594
595 int
596 sim_panel_set_register_value (PANEL *panel,
597 const char *name,
598 const char *value);
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620 int
621 sim_panel_mount (PANEL *panel,
622 const char *device,
623 const char *switches,
624 const char *path);
625
626
627
628
629
630
631
632 int
633 sim_panel_dismount (PANEL *panel,
634 const char *device);
635
636 typedef enum {
637 Halt,
638 Run,
639 Error
640
641
642 } OperationalState;
643
644 OperationalState
645 sim_panel_get_state (PANEL *panel);
646
647
648
649
650
651
652
653
654
655
656
657
658
659 const char *sim_panel_get_error (void);
660 void sim_panel_clear_error (void);
661
662
663
664
665
666
667
668
669
670
671 void
672 sim_panel_set_debug_file (PANEL *panel, const char *debug_file);
673
674 void
675 sim_panel_set_debug_mode (PANEL *panel, int debug_bits);
676
677 void
678 sim_panel_flush_debug (PANEL *panel);
679
680 #endif