From a9cbaa4a896f64d3c7f86ee06ab992dae291fbf0 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Thu, 1 Jan 2015 13:19:30 +0200 Subject: [PATCH] DKB and Fusion Forty accelerator board. --- cpuboard.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++++-- include/cpuboard.h | 3 +++ 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/cpuboard.cpp b/cpuboard.cpp index 8b4c59f7..e6b59e01 100644 --- a/cpuboard.cpp +++ b/cpuboard.cpp @@ -258,6 +258,14 @@ static bool is_a2630(void) { return currprefs.cpuboard_type == BOARD_A2630; } +static bool is_dkb(void) +{ + return currprefs.cpuboard_type == BOARD_DKB1200; +} +static bool is_fusionforty(void) +{ + return currprefs.cpuboard_type == BOARD_FUSIONFORTY; +} DECLARE_MEMORY_FUNCTIONS(blizzardio); static addrbank blizzardio_bank = { @@ -973,7 +981,9 @@ static void REGPARAM2 blizzardio_bput(uaecptr addr, uae_u32 v) #if CPUBOARD_IO_LOG > 1 write_log(_T("CS IO XBPUT %08x %02x PC=%08x\n"), addr, v & 0xff, M68K_GETPC); #endif - if (is_csmk2()) { + if (is_fusionforty()) { + ; + } else if (is_csmk2()) { csmk2_flashaddressing = addr & 3; if (addr == 0x880000e3 && v == 0x2a) { maprom_state = 1; @@ -1170,7 +1180,9 @@ static void REGPARAM2 blizzardio_wput(uaecptr addr, uae_u32 v) #ifdef JIT special_mem |= S_WRITE; #endif - if (is_blizzard()) { + if (is_fusionforty()) { + ; + } else if (is_blizzard()) { write_log(_T("CS IO WPUT %08x %04x\n"), addr, v); if((addr & 65535) == (BLIZZARD_BOARD_DISABLE & 65535)) { if (v != 0xcafe) @@ -1292,6 +1304,12 @@ void cpuboard_map(void) map_banks(&blizzardf0_bank, 0xf00000 >> 16, 131072 >> 16, 0); map_banks(&blizzardea_bank, 0xf40000 >> 16, 65536 >> 16, 0); } + if (is_fusionforty()) { + map_banks(&blizzardf0_bank, 0x00f40000 >> 16, 131072 >> 16, 0); + map_banks(&blizzardf0_bank, 0x05000000 >> 16, 131072 >> 16, 0); + map_banks(&blizzardio_bank, 0x021d0000 >> 16, 65536 >> 16, 0); + map_banks(&blizzardram_bank, blizzardram_bank.start >> 16, cpuboard_size >> 16, 0); + } } void cpuboard_reset(void) @@ -1385,6 +1403,20 @@ void cpuboard_init(void) blizzardea_bank.mask = blizzardea_bank.allocated - 1; mapped_malloc(&blizzardea_bank); + } else if (is_fusionforty()) { + + blizzardf0_bank.start = 0x00f40000; + blizzardf0_bank.allocated = 262144; + blizzardf0_bank.mask = blizzardf0_bank.allocated - 1; + mapped_malloc(&blizzardf0_bank); + + blizzardram_bank.start = 0x11000000; + blizzardram_bank.allocated = cpuboard_size; + blizzardram_bank.mask = blizzardram_bank.allocated - 1; + blizzardram_bank.startmask = 0x11000000; + blizzardram_bank.label = _T("fusionforty"); + mapped_malloc(&blizzardram_bank); + } else if (is_tekmagic()) { blizzardf0_bank.start = 0x00f00000; @@ -1601,6 +1633,8 @@ int cpuboard_memorytype(struct uae_prefs *p) case BOARD_CSPPC: case BOARD_WARPENGINE_A4000: case BOARD_TEKMAGIC: + case BOARD_FUSIONFORTY: + case BOARD_DKB1200: // ?? return BOARD_MEMORY_HIGHMEM; case BOARD_A2630: return BOARD_MEMORY_Z2; @@ -1783,6 +1817,8 @@ addrbank *cpuboard_autoconfig_init(void) break; case BOARD_WARPENGINE_A4000: return &expamem_null; + case BOARD_DKB1200: + return &expamem_null; case BOARD_TEKMAGIC: roms[0] = 104; break; @@ -1806,6 +1842,9 @@ addrbank *cpuboard_autoconfig_init(void) roms[0] = currprefs.cpu_model == 68040 ? 99 : 100; isflashrom = true; break; + case BOARD_FUSIONFORTY: + roms[0] = 113; + break; default: return &expamem_null; } @@ -1864,6 +1903,10 @@ addrbank *cpuboard_autoconfig_init(void) zfile_fread(blizzardf0_bank.baseaddr, 1, f0rom_size, autoconfig_rom); autoconf = false; autoconf_stop = true; + } else if (is_fusionforty()) { + f0rom_size = 262144; + zfile_fread(blizzardf0_bank.baseaddr, 1, 131072, autoconfig_rom); + autoconf = false; } else if (is_tekmagic()) { earom_size = 65536; f0rom_size = 131072; @@ -1973,6 +2016,10 @@ addrbank *cpuboard_autoconfig_init(void) map_banks(&blizzardf0_bank, 0xf80000 >> 16, f0rom_size >> 16, 0); if (!(a2630_io & 1)) map_banks(&blizzardf0_bank, 0x000000 >> 16, f0rom_size >> 16, 0); + } else if (is_fusionforty()) { + map_banks(&blizzardf0_bank, 0x00f40000 >> 16, f0rom_size >> 16, 0); + map_banks(&blizzardf0_bank, 0x05000000 >> 16, f0rom_size >> 16, 0); + map_banks(&blizzardf0_bank, 0x00000000 >> 16, f0rom_size >> 16, 0); } else { map_banks(&blizzardf0_bank, 0xf00000 >> 16, (f0rom_size > 262144 ? 262144 : f0rom_size) >> 16, 0); } diff --git a/include/cpuboard.h b/include/cpuboard.h index 0a7d650c..6779989e 100644 --- a/include/cpuboard.h +++ b/include/cpuboard.h @@ -42,6 +42,9 @@ extern uae_u8 *REGPARAM3 cyberstorm_scsi_ram_xlate(uaecptr addr) REGPARAM; #define BOARD_WARPENGINE_A4000 11 #define BOARD_TEKMAGIC 12 #define BOARD_A2630 13 +#define BOARD_DKB1200 14 +#define BOARD_FUSIONFORTY 15 + -- 2.47.3