47 #define DEV_KN02_LENGTH 0x1000 51 uint8_t
csr[
sizeof(uint32_t)];
89 uint64_t idata = 0, odata = 0;
94 switch (relative_addr) {
97 odata = d->
csr[0] + (d->
csr[1] << 8) +
98 (d->
csr[2] << 16) + (d->
csr[3] << 24);
110 int old_assert = (d->
csr[0] & d->
csr[2])? 1 : 0;
114 d->
csr[1] = (idata >> 8) & 255;
115 d->
csr[2] = (idata >> 16) & 255;
118 new_assert = (d->
csr[0] & d->
csr[2])? 1 : 0;
119 if (new_assert != old_assert) {
132 debug(
"[ kn02: read from 0x%08lx ]\n",
133 (
long)relative_addr);
135 debug(
"[ kn02: write to 0x%08lx: 0x%08x ]\n",
136 (
long)relative_addr, (
int)idata);
160 for (i=0; i<8; i++) {
163 snprintf(tmpstr,
sizeof(tmpstr),
"%s.kn02.%i",
165 memset(&templ, 0,
sizeof(templ));
180 d->
csr[1] = csr >> 8;
181 d->
csr[2] = csr >> 16;
182 d->
csr[3] = csr >> 24;
uint64_t memory_readmax64(struct cpu *cpu, unsigned char *buf, int len)
void(* interrupt_assert)(struct interrupt *)
void interrupt_handler_register(struct interrupt *templ)
uint8_t csr[sizeof(uint32_t)]
void(* interrupt_deassert)(struct interrupt *)
uint8_t filler[DEV_KN02_LENGTH - sizeof(uint32_t)]
#define CHECK_ALLOCATION(ptr)
void kn02_interrupt_deassert(struct interrupt *interrupt)
#define INTERRUPT_ASSERT(istruct)
#define INTERRUPT_CONNECT(name, istruct)
void memory_writemax64(struct cpu *cpu, unsigned char *buf, int len, uint64_t data)
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)
addr & if(addr >=0x24 &&page !=NULL)
void kn02_interrupt_assert(struct interrupt *interrupt)
#define INTERRUPT_DEASSERT(istruct)