daily update
[deliverable/binutils-gdb.git] / sim / tic80 / interp.c
1 /* This file is part of the GDB simulators.
2
3 Copyright (C) 1997, Free Software Foundation
4 Condtributed by Cyngnus Solutions.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19
20 */
21
22
23
24 #include "sim-main.h"
25
26 #include "idecode.h"
27 #include "itable.h"
28
29 #ifdef HAVE_STRING_H
30 #include <string.h>
31 #else
32 #ifdef HAVE_STRINGS_H
33 #include <strings.h>
34 #endif
35 #endif
36
37
38 #if 0
39
40 void
41 engine_error (SIM_DESC sd,
42 sim_cpu *cpu,
43 instruction_address cia,
44 const char *fmt,
45 ...)
46 {
47 va_list ap;
48 va_start (ap, fmt);
49 sim_io_evprintf (sd, fmt, ap);
50 va_end (ap);
51
52 sim_halt (sd, cpu, NULL, cia, sim_stopped, SIGABRT);
53 }
54
55 void
56 engine_halt (SIM_DESC sd,
57 sim_cpu *cpu,
58 instruction_address cia,
59 enum sim_stop reason,
60 int siggnal)
61 {
62 if (!sd->halt_ok)
63 sim_io_error (sd, "engine_halt - bad longjmp");
64 sd->reason = reason;
65 sd->siggnal = siggnal;
66 sd->halt_ok = 0;
67 sd->restart_ok = 0;
68 if (cpu != NULL)
69 cpu->cia = cia;
70 longjmp (sd->path_to_halt, 1);
71 }
72
73 void
74 engine_restart (SIM_DESC sd,
75 sim_cpu *cpu,
76 instruction_address cia)
77 {
78 if (!sd->restart_ok)
79 sim_io_error (sd, "engine_restart - bad longjmp");
80 sd->restart_ok = 0;
81 cpu->cia = cia;
82 longjmp(sd->path_to_restart, 1);
83 }
84
85
86 void
87 engine_run_until_stop (SIM_DESC sd,
88 volatile int *keep_running)
89 {
90 if (!setjmp (sd->path_to_halt))
91 {
92 instruction_address cia;
93 sim_cpu *cpu = STATE_CPU (sd, 0);
94 sd->halt_ok = 1;
95 setjmp (sd->path_to_restart);
96 sd->restart_ok = 1;
97 cia = cpu->cia;
98 do
99 {
100 instruction_word insn = IMEM (cia);
101 cia = idecode_issue (sd, insn, cia);
102 }
103 while (*keep_running);
104 engine_halt (sd, cpu, cia, sim_stopped, SIM_SIGINT);
105 }
106 }
107
108
109 void
110 engine_step (SIM_DESC sd)
111 {
112 if (!setjmp (sd->path_to_halt))
113 {
114 instruction_address cia;
115 instruction_word insn;
116 sim_cpu *cpu = STATE_CPU (sd, 0);
117 sd->halt_ok = 1;
118 setjmp (sd->path_to_restart);
119 sd->restart_ok = 1;
120 cia = cpu->cia;
121 insn = IMEM (cia);
122 cia = idecode_issue (sd, insn, cia);
123 engine_halt (sd, cpu, cia, sim_stopped, SIM_SIGTRAP);
124 }
125 }
126
127 #endif
This page took 0.03155 seconds and 4 git commands to generate.