OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [sim/] [tic80/] [interp.c] - Blame information for rev 1771

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 578 markom
/*  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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.