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 const char* appname;
266 extern char sim_name[];
267 extern DEVICE *sim_devices[];
268 extern REG *sim_PC;
269 extern const char *sim_stop_messages[];
270 extern t_stat sim_instr (void);
271 extern int32 sim_emax;
272 extern t_stat fprint_sym (FILE *ofile, t_addr addr, t_value *val,
273 UNIT *uptr, int32 sw);
274 extern t_stat parse_sym (CONST char *cptr, t_addr addr, UNIT *uptr, t_value *val,
275 int32 sw);
276
277
278
279
280 extern void (*sim_vm_init) (void);
281 extern char *(*sim_vm_read) (char *ptr, int32 size, FILE *stream);
282 extern void (*sim_vm_post) (t_bool from_scp);
283 extern CTAB *sim_vm_cmd;
284 extern void (*sim_vm_sprint_addr) (char *buf, DEVICE *dptr, t_addr addr);
285 extern void (*sim_vm_fprint_addr) (FILE *st, DEVICE *dptr, t_addr addr);
286 extern t_addr (*sim_vm_parse_addr) (DEVICE *dptr, CONST char *cptr, CONST char **tptr);
287 extern t_bool (*sim_vm_fprint_stopped) (FILE *st, t_stat reason);
288 extern t_value (*sim_vm_pc_value) (void);
289 extern t_bool (*sim_vm_is_subroutine_call) (t_addr **ret_addrs);
290 extern const char *xstrerror_l(int errnum);
291
292 # define SIM_FRONTPANEL_VERSION 2
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316 typedef struct PANEL PANEL;
317
318 PANEL *
319 sim_panel_start_simulator (const char *sim_path,
320 const char *sim_config,
321 size_t device_panel_count);
322
323 PANEL *
324 sim_panel_start_simulator_debug (const char *sim_path,
325 const char *sim_config,
326 size_t device_panel_count,
327 const char *debug_file);
328
329
330
331
332
333
334
335
336
337
338 PANEL *
339 sim_panel_add_device_panel (PANEL *simulator_panel,
340 const char *device_name);
341
342
343
344
345
346
347
348
349
350 int
351 sim_panel_destroy (PANEL *panel);
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
381 int
382 sim_panel_add_register (PANEL *panel,
383 const char *name,
384 const char *device_name,
385 size_t size,
386 void *addr);
387
388 int
389 sim_panel_add_register_array (PANEL *panel,
390 const char *name,
391 const char *device_name,
392 size_t element_count,
393 size_t size,
394 void *addr);
395
396 int
397 sim_panel_add_register_indirect (PANEL *panel,
398 const char *name,
399 const char *device_name,
400 size_t size,
401 void *addr);
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425 int
426 sim_panel_get_registers (PANEL *panel, unsigned long long *simulation_time);
427
428 typedef void (*PANEL_DISPLAY_PCALLBACK)(PANEL *panel,
429 unsigned long long simulation_time,
430 void *context);
431
432 int
433 sim_panel_set_display_callback (PANEL *panel,
434 PANEL_DISPLAY_PCALLBACK callback,
435 void *context,
436 int callbacks_per_second);
437
438
439
440
441
442
443
444
445
446
447
448
449
450 int
451 sim_panel_exec_halt (PANEL *panel);
452
453 int
454 sim_panel_exec_boot (PANEL *panel, const char *device);
455
456 int
457 sim_panel_exec_run (PANEL *panel);
458
459 int
460 sim_panel_exec_step (PANEL *panel);
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482 int
483 sim_panel_break_set (PANEL *panel, const char *condition);
484
485 int
486 sim_panel_break_clear (PANEL *panel, const char *condition);
487
488 int
489 sim_panel_break_output_set (PANEL *panel, const char *condition);
490
491 int
492 sim_panel_break_output_clear (PANEL *panel, const char *condition);
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
520 int
521 sim_panel_gen_examine (PANEL *panel,
522 const char *name_or_addr,
523 size_t size,
524 void *value);
525
526
527
528
529
530
531
532
533
534
535
536 int
537 sim_panel_gen_deposit (PANEL *panel,
538 const char *name_or_addr,
539 size_t size,
540 const void *value);
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557 int
558 sim_panel_mem_examine (PANEL *panel,
559 size_t addr_size,
560 const void *addr,
561 size_t value_size,
562 void *value);
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579 int
580 sim_panel_mem_deposit (PANEL *panel,
581 size_t addr_size,
582 const void *addr,
583 size_t value_size,
584 const void *value);
585
586
587
588
589
590
591
592
593
594
595
596 int
597 sim_panel_set_register_value (PANEL *panel,
598 const char *name,
599 const char *value);
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621 int
622 sim_panel_mount (PANEL *panel,
623 const char *device,
624 const char *switches,
625 const char *path);
626
627
628
629
630
631
632
633 int
634 sim_panel_dismount (PANEL *panel,
635 const char *device);
636
637 typedef enum {
638 Halt,
639 Run,
640 Error
641
642
643 } OperationalState;
644
645 OperationalState
646 sim_panel_get_state (PANEL *panel);
647
648
649
650
651
652
653
654
655
656
657
658
659
660 const char *sim_panel_get_error (void);
661 void sim_panel_clear_error (void);
662
663
664
665
666
667
668
669
670
671
672 void
673 sim_panel_set_debug_file (PANEL *panel, const char *debug_file);
674
675 void
676 sim_panel_set_debug_mode (PANEL *panel, int debug_bits);
677
678 void
679 sim_panel_flush_debug (PANEL *panel);
680
681 #endif