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 #ifndef 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 # if !defined(GCC_FMT_ATTR)
109 # define GCC_FMT_ATTR(n, m) __attribute__ ((format (__printf__, n, m)))
110 # endif
111
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, uint32 size);
153 void fprint_buffer_string (FILE *st, const uint8 *buf, uint32 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, uint32 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, ...) do { if ((sim_deb != NULL) && ((dptr != NULL) && ((dptr)->dctrl & dbits))) _sim_debug (dbits, dptr, __VA_ARGS__);} while (0)
207 void fprint_stopped_gen (FILE *st, t_stat v, REG *pc, DEVICE *dptr);
208 # define SCP_HELP_FLAT (1u << 31)
209 # define SCP_HELP_ONECMD (1u << 30)
210 # define SCP_HELP_ATTACH (1u << 29)
211 t_stat scp_help (FILE *st, DEVICE *dptr,
212 UNIT *uptr, int32 flag, const char *help, const char *cptr, ...);
213 t_stat scp_vhelp (FILE *st, DEVICE *dptr,
214 UNIT *uptr, int32 flag, const char *help, const char *cptr, va_list ap);
215 t_stat scp_helpFromFile (FILE *st, DEVICE *dptr,
216 UNIT *uptr, int32 flag, const char *help, const char *cptr, ...);
217 t_stat scp_vhelpFromFile (FILE *st, DEVICE *dptr,
218 UNIT *uptr, int32 flag, const char *help, const char *cptr, va_list ap);
219
220
221
222 extern DEVICE *sim_dflt_dev;
223 extern int32 sim_interval;
224 extern int32 sim_switches;
225 extern int32 sim_iglock;
226 extern int32 sim_nolock;
227 extern int32 sim_randompst;
228 extern int32 sim_quiet;
229 extern int32 sim_localopc;
230 extern int32 sim_randstate;
231 extern int32 sim_nostate;
232 extern int32 sim_step;
233 extern t_stat sim_last_cmd_stat;
234 extern FILE *sim_log;
235 extern FILEREF *sim_log_ref;
236 extern FILE *sim_deb;
237 extern FILEREF *sim_deb_ref;
238 extern int32 sim_deb_switches;
239 extern struct timespec sim_deb_basetime;
240 extern DEVICE **sim_internal_devices;
241 extern uint32 sim_internal_device_count;
242 extern UNIT *sim_clock_queue;
243 extern int32 sim_is_running;
244 extern t_bool sim_processing_event;
245 extern char *sim_prompt;
246 extern const char *sim_savename;
247 extern t_value *sim_eval;
248 extern volatile int32 stop_cpu;
249 extern uint32 sim_brk_types;
250 extern uint32 sim_brk_dflt;
251 extern uint32 sim_brk_summ;
252 extern uint32 sim_brk_match_type;
253 extern t_addr sim_brk_match_addr;
254 extern BRKTYPTAB *sim_brk_type_desc;
255 extern FILE *stdnul;
256 extern t_bool sim_asynch_enabled;
257
258
259
260 extern char sim_name[];
261 extern DEVICE *sim_devices[];
262 extern REG *sim_PC;
263 extern const char *sim_stop_messages[];
264 extern t_stat sim_instr (void);
265 extern int32 sim_emax;
266 extern t_stat fprint_sym (FILE *ofile, t_addr addr, t_value *val,
267 UNIT *uptr, int32 sw);
268 extern t_stat parse_sym (CONST char *cptr, t_addr addr, UNIT *uptr, t_value *val,
269 int32 sw);
270
271
272
273
274 extern void (*sim_vm_init) (void);
275 extern char *(*sim_vm_read) (char *ptr, int32 size, FILE *stream);
276 extern void (*sim_vm_post) (t_bool from_scp);
277 extern CTAB *sim_vm_cmd;
278 extern void (*sim_vm_sprint_addr) (char *buf, DEVICE *dptr, t_addr addr);
279 extern void (*sim_vm_fprint_addr) (FILE *st, DEVICE *dptr, t_addr addr);
280 extern t_addr (*sim_vm_parse_addr) (DEVICE *dptr, CONST char *cptr, CONST char **tptr);
281 extern t_bool (*sim_vm_fprint_stopped) (FILE *st, t_stat reason);
282 extern t_value (*sim_vm_pc_value) (void);
283 extern t_bool (*sim_vm_is_subroutine_call) (t_addr **ret_addrs);
284
285 # define SIM_FRONTPANEL_VERSION 2
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309 typedef struct PANEL PANEL;
310
311 PANEL *
312 sim_panel_start_simulator (const char *sim_path,
313 const char *sim_config,
314 size_t device_panel_count);
315
316 PANEL *
317 sim_panel_start_simulator_debug (const char *sim_path,
318 const char *sim_config,
319 size_t device_panel_count,
320 const char *debug_file);
321
322
323
324
325
326
327
328
329
330
331 PANEL *
332 sim_panel_add_device_panel (PANEL *simulator_panel,
333 const char *device_name);
334
335
336
337
338
339
340
341
342
343 int
344 sim_panel_destroy (PANEL *panel);
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374 int
375 sim_panel_add_register (PANEL *panel,
376 const char *name,
377 const char *device_name,
378 size_t size,
379 void *addr);
380
381 int
382 sim_panel_add_register_array (PANEL *panel,
383 const char *name,
384 const char *device_name,
385 size_t element_count,
386 size_t size,
387 void *addr);
388
389 int
390 sim_panel_add_register_indirect (PANEL *panel,
391 const char *name,
392 const char *device_name,
393 size_t size,
394 void *addr);
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418 int
419 sim_panel_get_registers (PANEL *panel, unsigned long long *simulation_time);
420
421 typedef void (*PANEL_DISPLAY_PCALLBACK)(PANEL *panel,
422 unsigned long long simulation_time,
423 void *context);
424
425 int
426 sim_panel_set_display_callback (PANEL *panel,
427 PANEL_DISPLAY_PCALLBACK callback,
428 void *context,
429 int callbacks_per_second);
430
431
432
433
434
435
436
437
438
439
440
441
442
443 int
444 sim_panel_exec_halt (PANEL *panel);
445
446 int
447 sim_panel_exec_boot (PANEL *panel, const char *device);
448
449 int
450 sim_panel_exec_run (PANEL *panel);
451
452 int
453 sim_panel_exec_step (PANEL *panel);
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475 int
476 sim_panel_break_set (PANEL *panel, const char *condition);
477
478 int
479 sim_panel_break_clear (PANEL *panel, const char *condition);
480
481 int
482 sim_panel_break_output_set (PANEL *panel, const char *condition);
483
484 int
485 sim_panel_break_output_clear (PANEL *panel, const char *condition);
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513 int
514 sim_panel_gen_examine (PANEL *panel,
515 const char *name_or_addr,
516 size_t size,
517 void *value);
518
519
520
521
522
523
524
525
526
527
528
529 int
530 sim_panel_gen_deposit (PANEL *panel,
531 const char *name_or_addr,
532 size_t size,
533 const void *value);
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550 int
551 sim_panel_mem_examine (PANEL *panel,
552 size_t addr_size,
553 const void *addr,
554 size_t value_size,
555 void *value);
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572 int
573 sim_panel_mem_deposit (PANEL *panel,
574 size_t addr_size,
575 const void *addr,
576 size_t value_size,
577 const void *value);
578
579
580
581
582
583
584
585
586
587
588
589 int
590 sim_panel_set_register_value (PANEL *panel,
591 const char *name,
592 const char *value);
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614 int
615 sim_panel_mount (PANEL *panel,
616 const char *device,
617 const char *switches,
618 const char *path);
619
620
621
622
623
624
625
626 int
627 sim_panel_dismount (PANEL *panel,
628 const char *device);
629
630 typedef enum {
631 Halt,
632 Run,
633 Error
634
635
636 } OperationalState;
637
638 OperationalState
639 sim_panel_get_state (PANEL *panel);
640
641
642
643
644
645
646
647
648
649
650
651
652
653 const char *sim_panel_get_error (void);
654 void sim_panel_clear_error (void);
655
656
657
658
659
660
661
662
663
664
665 void
666 sim_panel_set_debug_file (PANEL *panel, const char *debug_file);
667
668 void
669 sim_panel_set_debug_mode (PANEL *panel, int debug_bits);
670
671 void
672 sim_panel_flush_debug (PANEL *panel);
673
674 #endif