summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Pomarede <npomarede@corp.free.fr>2020-09-21 12:27:11 (GMT)
committerNicolas Pomarede <npomarede@corp.free.fr>2020-09-21 12:27:11 (GMT)
commit872220ab26d0e8f11f018f5740a8ac96753acac7 (patch)
tree1546211cf3e2519cb063833c606a8a974327db6f
parent4488530492cf17e9f421557a28fbe2a6772913cf (diff)
downloadhatari-872220ab26d0e8f11f018f5740a8ac96753acac7.zip
hatari-872220ab26d0e8f11f018f5740a8ac96753acac7.tar.gz
IDE memory region should only be initialized for Falcon, else it should be a bus error region
-rw-r--r--src/cpu/memory.c26
-rw-r--r--src/cpu/memory.h1
2 files changed, 21 insertions, 6 deletions
diff --git a/src/cpu/memory.c b/src/cpu/memory.c
index 213cf7d..b0d022c 100644
--- a/src/cpu/memory.c
+++ b/src/cpu/memory.c
@@ -1504,6 +1504,15 @@ bool memory_region_bus_error ( uaecptr addr )
{
return mem_banks[bankindex(addr)] == &BusErrMem_bank;
}
+
+/*
+ * Check if an address points to the IO memory region
+ * Returns true if it's the case
+ */
+bool memory_region_iomem ( uaecptr addr )
+{
+ return mem_banks[bankindex(addr)] == &IOmem_bank;
+}
#endif
@@ -1769,12 +1778,17 @@ void memory_init(uae_u32 NewSTMemSize, uae_u32 NewTTMemSize, uae_u32 NewRomMemSt
IOmem_bank.start = IOmem_start;
init_bank ( &IOmem_bank , IOmem_size );
- /* IDE controller memory region: */
- map_banks_ce(&IdeMem_bank, IdeMem_start >> 16, 0x1, 0, CE_MEMBANK_CHIP16, CE_MEMBANK_NOT_CACHABLE); /* IDE controller on the Falcon */
- IdeMem_bank.baseaddr = IdeMemory;
- IdeMem_bank.mask = IdeMem_mask;
- IdeMem_bank.start = IdeMem_start ;
- init_bank ( &IdeMem_bank , IdeMem_size );
+ /* IDE controller memory region at 0xF00000 (only for Falcon, else it's a bus error region) */
+ if ( Config_IsMachineFalcon() )
+ {
+ map_banks_ce(&IdeMem_bank, IdeMem_start >> 16, 0x1, 0, CE_MEMBANK_CHIP16, CE_MEMBANK_NOT_CACHABLE); /* IDE controller on the Falcon */
+ IdeMem_bank.baseaddr = IdeMemory;
+ IdeMem_bank.mask = IdeMem_mask;
+ IdeMem_bank.start = IdeMem_start ;
+ init_bank ( &IdeMem_bank , IdeMem_size );
+ }
+ else
+ map_banks_ce(&BusErrMem_bank, IdeMem_start >> 16, 0x1, 0, CE_MEMBANK_CHIP16, CE_MEMBANK_NOT_CACHABLE);
/* Illegal memory regions cause a bus error on the ST: */
map_banks_ce(&BusErrMem_bank, 0xF10000 >> 16, 0x9, 0, CE_MEMBANK_CHIP16, CE_MEMBANK_NOT_CACHABLE);
diff --git a/src/cpu/memory.h b/src/cpu/memory.h
index db330db..c117a01 100644
--- a/src/cpu/memory.h
+++ b/src/cpu/memory.h
@@ -510,6 +510,7 @@ extern addrbank *get_mem_bank_real(uaecptr);
#ifdef WINUAE_FOR_HATARI
extern bool memory_region_bus_error ( uaecptr addr );
+extern bool memory_region_iomem ( uaecptr addr );
extern void memory_map_Standard_RAM ( Uint32 MMU_Bank0_Size , Uint32 MMU_Bank1_Size );
#endif
extern void memory_init(uae_u32 NewSTMemSize, uae_u32 NewTTMemSize, uae_u32 NewRomMemStart);