25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: cpu_transputer.c,v 1.4 2006/07/23 14:37:34 debug Exp $ |
* $Id: cpu_transputer.c,v 1.5 2006/09/19 10:50:08 debug Exp $ |
29 |
* |
* |
30 |
* INMOS transputer CPU emulation. |
* INMOS transputer CPU emulation. |
31 |
*/ |
*/ |
39 |
#include "machine.h" |
#include "machine.h" |
40 |
#include "memory.h" |
#include "memory.h" |
41 |
#include "misc.h" |
#include "misc.h" |
42 |
|
#include "settings.h" |
43 |
#include "symbol.h" |
#include "symbol.h" |
44 |
|
|
45 |
#define DYNTRANS_32 |
#define DYNTRANS_32 |
100 |
|
|
101 |
cpu->cd.transputer.wptr = machine->physical_ram_in_mb * 1048576 - 2048; |
cpu->cd.transputer.wptr = machine->physical_ram_in_mb * 1048576 - 2048; |
102 |
|
|
103 |
|
CPU_SETTINGS_ADD_REGISTER64("ip", cpu->pc); |
104 |
|
CPU_SETTINGS_ADD_REGISTER32("a", cpu->cd.transputer.a); |
105 |
|
CPU_SETTINGS_ADD_REGISTER32("b", cpu->cd.transputer.b); |
106 |
|
CPU_SETTINGS_ADD_REGISTER32("c", cpu->cd.transputer.c); |
107 |
|
CPU_SETTINGS_ADD_REGISTER32("oreg", cpu->cd.transputer.oreg); |
108 |
|
CPU_SETTINGS_ADD_REGISTER32("wptr", cpu->cd.transputer.wptr); |
109 |
|
|
110 |
return 1; |
return 1; |
111 |
} |
} |
112 |
|
|
172 |
} |
} |
173 |
|
|
174 |
|
|
|
/* |
|
|
* transputer_cpu_register_match(): |
|
|
*/ |
|
|
void transputer_cpu_register_match(struct machine *m, char *name, |
|
|
int writeflag, uint64_t *valuep, int *match_register) |
|
|
{ |
|
|
int cpunr = 0; |
|
|
|
|
|
/* CPU number: */ |
|
|
/* TODO */ |
|
|
|
|
|
/* Register name: */ |
|
|
if (strcasecmp(name, "pc") == 0) { |
|
|
if (writeflag) { |
|
|
m->cpus[cpunr]->pc = *valuep; |
|
|
} else |
|
|
*valuep = m->cpus[cpunr]->pc; |
|
|
*match_register = 1; |
|
|
} |
|
|
|
|
|
if (strcasecmp(name, "a") == 0) { |
|
|
if (writeflag) { |
|
|
m->cpus[cpunr]->cd.transputer.a = *valuep; |
|
|
} else |
|
|
*valuep = m->cpus[cpunr]->cd.transputer.a; |
|
|
*match_register = 1; |
|
|
} |
|
|
|
|
|
if (strcasecmp(name, "b") == 0) { |
|
|
if (writeflag) { |
|
|
m->cpus[cpunr]->cd.transputer.b = *valuep; |
|
|
} else |
|
|
*valuep = m->cpus[cpunr]->cd.transputer.b; |
|
|
*match_register = 1; |
|
|
} |
|
|
|
|
|
if (strcasecmp(name, "c") == 0) { |
|
|
if (writeflag) { |
|
|
m->cpus[cpunr]->cd.transputer.c = *valuep; |
|
|
} else |
|
|
*valuep = m->cpus[cpunr]->cd.transputer.c; |
|
|
*match_register = 1; |
|
|
} |
|
|
|
|
|
if (strcasecmp(name, "wptr") == 0) { |
|
|
if (writeflag) { |
|
|
m->cpus[cpunr]->cd.transputer.wptr = *valuep; |
|
|
} else |
|
|
*valuep = m->cpus[cpunr]->cd.transputer.wptr; |
|
|
*match_register = 1; |
|
|
} |
|
|
|
|
|
if (strcasecmp(name, "oreg") == 0) { |
|
|
if (writeflag) { |
|
|
m->cpus[cpunr]->cd.transputer.oreg = *valuep; |
|
|
} else |
|
|
*valuep = m->cpus[cpunr]->cd.transputer.oreg; |
|
|
*match_register = 1; |
|
|
} |
|
|
|
|
|
/* TODO: Front and back pointers, etc. */ |
|
|
} |
|
|
|
|
|
|
|
175 |
/* |
/* |
176 |
* transputer_cpu_tlbdump(): |
* transputer_cpu_tlbdump(): |
177 |
* |
* |