36 #include <sys/types.h> 68 fatal(
"[ %s: write %i byte%s from 0x%x:",
69 d->
name, (
int)len, len==1?
"":
"s", (
int)relative_addr);
70 for (
size_t i=0; i<len; i++)
85 fatal(
"[ %s: read %i byte%s from 0x%x:",
86 d->
name, (
int)len, len==1?
"":
"s", (
int)relative_addr);
87 for (
size_t i=0; i<len; i++)
97 memcpy(&d->
data[relative_addr],
data, len);
106 memcpy(
data, &d->
data[relative_addr], len);
109 fatal(
"[ %s: read %i byte%s from 0x%x:",
110 d->
name, (
int)len, len==1?
"":
"s", (
int)relative_addr);
111 for (
size_t i=0; i<len; i++)
119 fatal(
"dev_ram_access(): unknown mode %i\n", d->
mode);
141 memset(d, 0,
sizeof(
struct ram_data));
143 d->
name = strdup((name == NULL) ?
"ram" : name);
146 mode &= ~DEV_RAM_MIGHT_POINT_TO_DEVICES;
151 mode &= ~DEV_RAM_TRACE_ALL_ACCESSES;
168 d->
name = (string(d->
name) +
" [mirror]").c_str();
191 d->
data = (
unsigned char *) mmap(NULL, length,
192 PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
193 if (d->
data == NULL) {
195 memset(d->
data, 0, length);
210 fatal(
"dev_ram_access(): %s: unknown mode %i\n", d->
name, d->
mode);
void fatal(const char *fmt,...)
#define DEV_RAM_TRACE_ALL_ACCESSES
#define CHECK_ALLOCATION(ptr)
int(* memory_rw)(struct cpu *cpu, struct memory *mem, uint64_t vaddr, unsigned char *data, size_t len, int writeflag, int cache_flags)
#define DM_READS_HAVE_NO_SIDE_EFFECTS
void dev_ram_init(struct machine *machine, uint64_t baseaddr, uint64_t length, int mode, uint64_t otheraddress, const char *name)
#define DM_DYNTRANS_WRITE_OK
int dev_ram_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *)
#define DEV_RAM_MIGHT_POINT_TO_DEVICES
void memory_device_register(struct memory *mem, const char *, uint64_t baseaddr, uint64_t len, int(*f)(struct cpu *, struct memory *, uint64_t, unsigned char *, size_t, int, void *), void *extra, int flags, unsigned char *dyntrans_data)
void(* invalidate_code_translation)(struct cpu *, uint64_t paddr, int flags)