diff -Naur spediv_v0.2a/divide.c spediv_v0.2b/divide.c --- spediv_v0.2a/divide.c 2005-07-19 13:13:59.000000000 +0200 +++ spediv_v0.2b/divide.c 2005-09-02 11:11:53.000000000 +0200 @@ -524,6 +524,7 @@ DISK.identify[117] = (size >> 24); DISK.in_port_BF &= (STATUS_CLR_BSY & STATUS_CLR_DF & STATUS_CLR_DRQ & STATUS_CLR_ERR); + DISK.in_port_BF |= STATUS_SET_DRDY; break; case 0xA1: // identify drive (ATAPI) @@ -667,7 +668,17 @@ } -void divide_mapper(int addr) { +void divide_premap(int addr) { + // "fetch state" + // mapper logic, see divIDE documentation for more info + + // check for divide memory connecting betadisk entry points + if ((addr & 0xff00) == 0x3d00) + divide_automap = 1; + divide_mapper(); +} + +void divide_postmap(int addr) { // "M1 state" // mapper logic, see divIDE documentation for more info @@ -683,7 +694,10 @@ if ((addr & 0xfff8) == 0x1ff8) { divide_automap = 0; } + divide_mapper(); +} +void divide_mapper() { // if CONMEM is set, connect EEPROM (read only if JP2 is closed) and selected RAM bank (read/write) if (divide_conmem) { // map eeprom+ram if ((divide_memstate != 1) || divide_bank_changed) { diff -Naur spediv_v0.2a/divide.h spediv_v0.2b/divide.h --- spediv_v0.2a/divide.h 2005-07-19 19:36:15.000000000 +0200 +++ spediv_v0.2b/divide.h 2005-07-25 11:23:12.000000000 +0200 @@ -28,7 +28,9 @@ void divide_attach_drive(int drive, char *path); void divide_detach_drive(int drive); -void divide_mapper(int addr); +void divide_premap(int addr); +void divide_postmap(int addr); +void divide_mapper(); void divide_put_mem(int addr, byte *ptr, byte val); void divide_port_out(int portl, byte data); diff -Naur spediv_v0.2a/z80_step.c spediv_v0.2b/z80_step.c --- spediv_v0.2a/z80_step.c 2005-07-08 22:25:06.000000000 +0200 +++ spediv_v0.2b/z80_step.c 2005-07-25 11:23:28.000000000 +0200 @@ -169,9 +169,12 @@ #ifdef DEBUG_Z80 debug_z80(); #endif +#ifdef HAVE_DIVIDE + divide_premap(PC); +#endif nextop = *PCP; #ifdef HAVE_DIVIDE - divide_mapper(PC); + divide_postmap(PC); #endif PC++;