--- previous/src/ioMem.c 2018/04/24 19:25:10 1.1.1.1 +++ previous/src/ioMem.c 2018/04/24 19:25:38 1.1.1.2 @@ -12,6 +12,7 @@ const char IoMem_fileid[] = "Hatari ioMe #include "configuration.h" #include "ioMem.h" #include "ioMemTables.h" +#include "memorySnapShot.h" #include "m68000.h" #include "sysdeps.h" @@ -113,7 +114,7 @@ uae_u32 IoMem_bget(uaecptr addr) if ((addr & IO_SEG_MASK) >= IO_SIZE) { /* invalid memory addressing --> bus error */ - M68000_BusError(addr, 1); + M68000_BusError(addr, BUS_ERROR_READ); return -1; } @@ -127,7 +128,7 @@ uae_u32 IoMem_bget(uaecptr addr) /* Check if we read from a bus-error region */ if (nBusErrorAccesses == 1) { - M68000_BusError(addr, 1); + M68000_BusError(addr, BUS_ERROR_READ); return -1; } @@ -152,7 +153,7 @@ uae_u32 IoMem_wget(uaecptr addr) if ((addr & IO_SEG_MASK) >= IO_SIZE) { /* invalid memory addressing --> bus error */ - M68000_BusError(addr, 1); + M68000_BusError(addr, BUS_ERROR_READ); return -1; } @@ -173,7 +174,7 @@ uae_u32 IoMem_wget(uaecptr addr) /* Check if we completely read from a bus-error region */ if (nBusErrorAccesses == 2) { - M68000_BusError(addr, 1); + M68000_BusError(addr, BUS_ERROR_READ); return -1; } @@ -198,7 +199,7 @@ uae_u32 IoMem_lget(uaecptr addr) if ((addr & IO_SEG_MASK) >= IO_SIZE) { /* invalid memory addressing --> bus error */ - M68000_BusError(addr, 1); + M68000_BusError(addr, BUS_ERROR_READ); return -1; } @@ -231,7 +232,7 @@ uae_u32 IoMem_lget(uaecptr addr) /* Check if we completely read from a bus-error region */ if (nBusErrorAccesses == 4) { - M68000_BusError(addr, 1); + M68000_BusError(addr, BUS_ERROR_READ); return -1; } @@ -255,7 +256,7 @@ void IoMem_bput(uaecptr addr, uae_u32 va if ((addr & IO_SEG_MASK) >= IO_SIZE) { /* invalid memory addressing --> bus error */ - M68000_BusError(addr, 0); + M68000_BusError(addr, BUS_ERROR_WRITE); return; } @@ -271,7 +272,7 @@ void IoMem_bput(uaecptr addr, uae_u32 va /* Check if we wrote to a bus-error region */ if (nBusErrorAccesses == 1) { - M68000_BusError(addr, 0); + M68000_BusError(addr, BUS_ERROR_WRITE); } } @@ -290,7 +291,7 @@ void IoMem_wput(uaecptr addr, uae_u32 va if ((addr & IO_SEG_MASK) >= IO_SIZE) { /* invalid memory addressing --> bus error */ - M68000_BusError(addr, 0); + M68000_BusError(addr, BUS_ERROR_WRITE); return; } @@ -313,7 +314,7 @@ void IoMem_wput(uaecptr addr, uae_u32 va /* Check if we wrote to a bus-error region */ if (nBusErrorAccesses == 2) { - M68000_BusError(addr, 0); + M68000_BusError(addr, BUS_ERROR_WRITE); } } @@ -331,7 +332,7 @@ void IoMem_lput(uaecptr addr, uae_u32 va if ((addr & IO_SEG_MASK) >= IO_SIZE) { /* invalid memory addressing --> bus error */ - M68000_BusError(addr, 0); + M68000_BusError(addr, BUS_ERROR_WRITE); return; } @@ -366,7 +367,7 @@ void IoMem_lput(uaecptr addr, uae_u32 va /* Check if we wrote to a bus-error region */ if (nBusErrorAccesses == 4) { - M68000_BusError(addr, 0); + M68000_BusError(addr, BUS_ERROR_WRITE); } } @@ -436,6 +437,26 @@ void IoMem_VoidRead(void) } /*-------------------------------------------------------------------------*/ +/** + * This is the same function as IoMem_VoidRead, but for IO registers that + * return 0x00 instead of 0xff when read (this is the case for some video + * registers on STE, Falcon, ...) + */ +void IoMem_VoidRead_00(void) +{ + Uint32 a; + + /* handler is probably called only once, so we have to take care of the neighbour "void IO registers" */ + for (a = IoAccessBaseAddress; a < IoAccessBaseAddress + nIoMemAccessSize; a++) + { + if (pInterceptReadTable[a - 0xff8000] == IoMem_VoidRead_00) + { + IoMem[a] = 0x00; + } + } +} + +/*-------------------------------------------------------------------------*/ /** * This is the write handler for the IO memory locations without an assigned * IO register and which also do not generate a bus error. We simply ignore