#include "sim-main.h"
#include "idecode.h"
-
-#include <signal.h>
+#include "itable.h"
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#endif
-void
-engine_init (SIM_DESC sd)
-{
- memset (&STATE_CPU (sd, 0)->reg, 0, sizeof STATE_CPU (sd, 0)->reg);
- memset (&STATE_CPU (sd, 0)->cia, 0, sizeof STATE_CPU (sd, 0)->cia);
- CPU_STATE (STATE_CPU (sd, 0)) = sd;
-}
-
-/* Mechanisms for stopping/restarting the simulation */
+#if 0
void
engine_error (SIM_DESC sd,
sim_io_evprintf (sd, fmt, ap);
va_end (ap);
- if (sd->halt_ok)
- {
- sim_io_eprintf (sd, "\n");
- engine_halt (sd, cpu, cia, sim_signalled, SIGABRT);
- }
- else
- sim_io_error (sd, " - aborting simulation");
+ sim_halt (sd, cpu, NULL, cia, sim_stopped, SIGABRT);
}
void
cia = cpu->cia;
do
{
- if (cia.ip == -1)
- {
- /* anulled instruction */
- cia.ip = cia.dp;
- cia.dp = cia.dp + sizeof (instruction_word);
- }
- else
- {
- instruction_word insn = IMEM (cia.ip);
- cia = idecode_issue (sd, insn, cia);
- }
+ instruction_word insn = IMEM (cia);
+ cia = idecode_issue (sd, insn, cia);
}
while (*keep_running);
- engine_halt (sd, cpu, cia, sim_stopped, SIGINT);
+ engine_halt (sd, cpu, cia, sim_stopped, SIM_SIGINT);
}
}
+
+
+void
+engine_step (SIM_DESC sd)
+{
+ if (!setjmp (sd->path_to_halt))
+ {
+ instruction_address cia;
+ instruction_word insn;
+ sim_cpu *cpu = STATE_CPU (sd, 0);
+ sd->halt_ok = 1;
+ setjmp (sd->path_to_restart);
+ sd->restart_ok = 1;
+ cia = cpu->cia;
+ insn = IMEM (cia);
+ cia = idecode_issue (sd, insn, cia);
+ engine_halt (sd, cpu, cia, sim_stopped, SIM_SIGTRAP);
+ }
+}
+
+#endif