diff -Naur gxemul-0.4.1.orig/src/cpus/cpu_mips.c gxemul-0.4.1/src/cpus/cpu_mips.c --- gxemul-0.4.1.orig/src/cpus/cpu_mips.c Thu Aug 3 16:35:35 2006 +++ gxemul-0.4.1/src/cpus/cpu_mips.c Fri Aug 4 22:06:59 2006 @@ -2025,7 +2025,7 @@ } } - if (exc_model != EXC3K && reg[COP0_STATUS] & STATUS_EXL) { + if (0 && (exc_model != EXC3K && reg[COP0_STATUS] & STATUS_EXL)) { /* * Don't set EPC if STATUS_EXL is set, for R4000 and up. * This actually happens when running IRIX and Ultrix, when diff -Naur gxemul-0.4.1.orig/src/devices/bus_pci.c gxemul-0.4.1/src/devices/bus_pci.c --- gxemul-0.4.1.orig/src/devices/bus_pci.c Thu Aug 3 16:35:35 2006 +++ gxemul-0.4.1/src/devices/bus_pci.c Mon Aug 14 15:38:30 2006 @@ -762,7 +762,7 @@ /* Possibly not correct: */ PCI_SET_DATA(PCI_CLASS_REG, PCI_CLASS_CODE(PCI_CLASS_MASS_STORAGE, - PCI_SUBCLASS_MASS_STORAGE_IDE, 0x00) + 0x01); + PCI_SUBCLASS_MASS_STORAGE_IDE, 0x80) + 0x01); /* PIIX_IDETIM (see NetBSD's pciide_piix_reg.h) */ /* channel 0 and 1 enabled as IDE */ diff -Naur gxemul-0.4.1.orig/src/devices/dev_wdc.c gxemul-0.4.1/src/devices/dev_wdc.c --- gxemul-0.4.1.orig/src/devices/dev_wdc.c Thu Aug 3 16:35:35 2006 +++ gxemul-0.4.1/src/devices/dev_wdc.c Mon Aug 14 13:21:27 2006 @@ -242,16 +242,16 @@ d->identify_struct[2 * 53 + 1] = 0x02; /* 57-58: current capacity in sectors */ - d->identify_struct[2 * 57 + 0] = ((total_size / 512) >> 24) % 255; - d->identify_struct[2 * 57 + 1] = ((total_size / 512) >> 16) % 255; - d->identify_struct[2 * 58 + 0] = ((total_size / 512) >> 8) % 255; - d->identify_struct[2 * 58 + 1] = (total_size / 512) & 255; + d->identify_struct[2 * 58 + 0] = ((total_size / 512) >> 24) % 255; + d->identify_struct[2 * 58 + 1] = ((total_size / 512) >> 16) % 255; + d->identify_struct[2 * 57 + 0] = ((total_size / 512) >> 8) % 255; + d->identify_struct[2 * 57 + 1] = (total_size / 512) & 255; /* 60-61: total nr of addressable sectors */ - d->identify_struct[2 * 60 + 0] = ((total_size / 512) >> 24) % 255; - d->identify_struct[2 * 60 + 1] = ((total_size / 512) >> 16) % 255; - d->identify_struct[2 * 61 + 0] = ((total_size / 512) >> 8) % 255; - d->identify_struct[2 * 61 + 1] = (total_size / 512) & 255; + d->identify_struct[2 * 61 + 0] = ((total_size / 512) >> 24) % 255; + d->identify_struct[2 * 61 + 1] = ((total_size / 512) >> 16) % 255; + d->identify_struct[2 * 60 + 0] = ((total_size / 512) >> 8) % 255; + d->identify_struct[2 * 60 + 1] = (total_size / 512) & 255; /* 64: Advanced PIO mode support. 0x02 = mode4, 0x01 = mode3 */ d->identify_struct[2 * 64 + 0] = 0x00; @@ -788,7 +788,7 @@ odata = d->error; debug("[ wdc: read from ERROR: 0x%02x ]\n", (int)odata); /* TODO: is the error value cleared on read? */ - d->error = 0; + /* d->error = 0; */ } else { d->precomp = idata; debug("[ wdc: write to PRECOMP: 0x%02x ]\n",(int)idata); @@ -931,6 +931,7 @@ d->irq_nr = devinit->irq_nr; d->addr_mult = devinit->addr_mult; d->data_debug = 1; + d->error = 1; d->inbuf = zeroed_alloc(WDC_INBUF_SIZE);