/[gxemul]/upstream/0.3.1/src/cpu_sparc.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /upstream/0.3.1/src/cpu_sparc.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (hide annotations)
Mon Oct 8 16:17:52 2007 UTC (16 years, 8 months ago) by dpavlin
File MIME type: text/plain
File size: 4664 byte(s)
0.3.1
1 dpavlin 2 /*
2     * Copyright (C) 2005 Anders Gavare. All rights reserved.
3     *
4     * Redistribution and use in source and binary forms, with or without
5     * modification, are permitted provided that the following conditions are met:
6     *
7     * 1. Redistributions of source code must retain the above copyright
8     * notice, this list of conditions and the following disclaimer.
9     * 2. Redistributions in binary form must reproduce the above copyright
10     * notice, this list of conditions and the following disclaimer in the
11     * documentation and/or other materials provided with the distribution.
12     * 3. The name of the author may not be used to endorse or promote products
13     * derived from this software without specific prior written permission.
14     *
15     * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16     * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18     * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19     * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20     * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21     * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23     * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24     * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25     * SUCH DAMAGE.
26     *
27     *
28     * $Id: cpu_sparc.c,v 1.8 2005/02/22 12:05:19 debug Exp $
29     *
30     * SPARC CPU emulation.
31     *
32     * TODO: This is just a dummy so far.
33     */
34    
35     #include <stdio.h>
36     #include <stdlib.h>
37     #include <string.h>
38     #include <ctype.h>
39    
40     #include "misc.h"
41    
42    
43     #ifndef ENABLE_SPARC
44    
45    
46     #include "cpu_sparc.h"
47    
48    
49     /*
50     * sparc_cpu_family_init():
51     *
52     * Bogus, when ENABLE_SPARC isn't defined.
53     */
54     int sparc_cpu_family_init(struct cpu_family *fp)
55     {
56     return 0;
57     }
58    
59    
60     #else /* ENABLE_SPARC */
61    
62    
63     #include "cpu.h"
64     #include "cpu_sparc.h"
65     #include "machine.h"
66     #include "memory.h"
67     #include "symbol.h"
68    
69    
70     extern volatile int single_step;
71     extern int old_show_trace_tree;
72     extern int old_instruction_trace;
73     extern int old_quiet_mode;
74     extern int quiet_mode;
75    
76    
77     /*
78     * sparc_cpu_new():
79     *
80     * Create a new SPARC cpu object.
81     */
82     struct cpu *sparc_cpu_new(struct memory *mem, struct machine *machine,
83     int cpu_id, char *cpu_type_name)
84     {
85     struct cpu *cpu;
86    
87     if (cpu_type_name == NULL || strcmp(cpu_type_name, "SPARCV9") != 0)
88     return NULL;
89    
90     cpu = malloc(sizeof(struct cpu));
91     if (cpu == NULL) {
92     fprintf(stderr, "out of memory\n");
93     exit(1);
94     }
95    
96     memset(cpu, 0, sizeof(struct cpu));
97     cpu->memory_rw = sparc_memory_rw;
98     cpu->name = cpu_type_name;
99     cpu->mem = mem;
100     cpu->machine = machine;
101     cpu->cpu_id = cpu_id;
102     cpu->byte_order = EMUL_BIG_ENDIAN;
103     cpu->bootstrap_cpu_flag = 0;
104     cpu->running = 0;
105    
106     /* Only show name and caches etc for CPU nr 0 (in SMP machines): */
107     if (cpu_id == 0) {
108     debug("%s", cpu->name);
109     }
110    
111     return cpu;
112     }
113    
114    
115     /*
116     * sparc_cpu_dumpinfo():
117     */
118     void sparc_cpu_dumpinfo(struct cpu *cpu)
119     {
120     debug("\n");
121    
122     /* TODO */
123     }
124    
125    
126     /*
127     * sparc_cpu_list_available_types():
128     *
129     * Print a list of available SPARC CPU types.
130     */
131     void sparc_cpu_list_available_types(void)
132     {
133     /* TODO */
134    
135     debug("SPARCV9\n");
136     }
137    
138    
139     /*
140     * sparc_cpu_register_match():
141     */
142     void sparc_cpu_register_match(struct machine *m, char *name,
143     int writeflag, uint64_t *valuep, int *match_register)
144     {
145     int cpunr = 0;
146    
147     /* CPU number: */
148    
149     /* TODO */
150    
151     /* Register name: */
152     if (strcasecmp(name, "pc") == 0) {
153     if (writeflag) {
154     m->cpus[cpunr]->pc = *valuep;
155     } else
156     *valuep = m->cpus[cpunr]->pc;
157     *match_register = 1;
158     }
159    
160     /* TODO: _LOTS_ of stuff. */
161     }
162    
163    
164     #define MEMORY_RW sparc_memory_rw
165     #define MEM_SPARC
166     #include "memory_rw.c"
167     #undef MEM_SPARC
168     #undef MEMORY_RW
169    
170    
171     /*
172     * sparc_cpu_family_init():
173     *
174     * Fill in the cpu_family struct for SPARC.
175     */
176     int sparc_cpu_family_init(struct cpu_family *fp)
177     {
178     fp->name = "SPARC";
179     fp->cpu_new = sparc_cpu_new;
180     fp->list_available_types = sparc_cpu_list_available_types;
181     fp->register_match = sparc_cpu_register_match;
182     /* fp->disassemble_instr = sparc_cpu_disassemble_instr; */
183     /* fp->register_dump = sparc_cpu_register_dump; */
184     /* fp->run = sparc_cpu_run; */
185     fp->dumpinfo = sparc_cpu_dumpinfo;
186     /* fp->show_full_statistics = sparc_cpu_show_full_statistics; */
187     /* fp->tlbdump = sparc_cpu_tlbdump; */
188     /* fp->interrupt = sparc_cpu_interrupt; */
189     /* fp->interrupt_ack = sparc_cpu_interrupt_ack; */
190     return 1;
191     }
192    
193     #endif /* ENABLE_SPARC */

  ViewVC Help
Powered by ViewVC 1.1.26