--- trunk/src/devices/dev_pccmos.c 2007/10/08 16:19:11 18 +++ trunk/src/devices/dev_pccmos.c 2007/10/08 16:19:23 20 @@ -25,7 +25,7 @@ * SUCH DAMAGE. * * - * $Id: dev_pccmos.c,v 1.8 2005/10/26 14:37:04 debug Exp $ + * $Id: dev_pccmos.c,v 1.15 2005/11/21 22:27:18 debug Exp $ * * PC CMOS/RTC device. * @@ -66,6 +66,7 @@ struct pccmos_data *d = (struct pccmos_data *) extra; uint64_t idata = 0, odata = 0; unsigned char b = 0; + int r = 1; if (writeflag == MEM_WRITE) b = idata = memory_readmax64(cpu, data, len); @@ -79,7 +80,7 @@ if (writeflag == MEM_WRITE) { d->select = idata; if (idata <= 0x0d) { - cpu->memory_rw(cpu, cpu->mem, + r = cpu->memory_rw(cpu, cpu->mem, PCCMOS_MC146818_FAKE_ADDR, &b, 1, MEM_WRITE, PHYSICAL); } @@ -88,11 +89,11 @@ } else { if (d->select <= 0x0d) { if (writeflag == MEM_WRITE) { - cpu->memory_rw(cpu, cpu->mem, + r = cpu->memory_rw(cpu, cpu->mem, PCCMOS_MC146818_FAKE_ADDR + 1, &b, 1, MEM_WRITE, PHYSICAL); } else { - cpu->memory_rw(cpu, cpu->mem, + r = cpu->memory_rw(cpu, cpu->mem, PCCMOS_MC146818_FAKE_ADDR + 1, &b, 1, MEM_READ, PHYSICAL); odata = b; @@ -105,6 +106,9 @@ } } + if (r == 0) + fatal("[ pccmos: memory_rw() error! ]\n"); + if (writeflag == MEM_READ) memory_writemax64(cpu, data, len, odata); @@ -131,14 +135,28 @@ */ switch (devinit->machine->machine_type) { case MACHINE_CATS: + case MACHINE_NETWINDER: irq_nr = 32 + 8; type = MC146818_CATS; d->ram[0x48] = 20; /* century */ len = DEV_PCCMOS_LENGTH * 2; break; + case MACHINE_ALGOR: + irq_nr = 8 + 8; + type = MC146818_ALGOR; + break; + case MACHINE_EVBMIPS: + /* Malta etc. */ + irq_nr = 8 + 8; + type = MC146818_ALGOR; + break; case MACHINE_X86: irq_nr = 16; /* "No" irq */ break; + case MACHINE_BEBOX: + case MACHINE_PREP: + irq_nr = 32 + 8; + break; default:fatal("devinit_pccmos(): unimplemented machine type" " %i\n", devinit->machine->machine_type); exit(1); @@ -146,7 +164,7 @@ memory_device_register(devinit->machine->memory, devinit->name, devinit->addr, len, dev_pccmos_access, (void *)d, - MEM_DEFAULT, NULL); + DM_DEFAULT, NULL); dev_mc146818_init(devinit->machine, devinit->machine->memory, PCCMOS_MC146818_FAKE_ADDR, irq_nr, type, 1);