From 30544d590ed9a40a5d86b6a1332aa6ddc3801d28 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 30 Aug 2014 12:22:31 +0300 Subject: [PATCH] Autoconfig updates, tekmagic 2040/2060 CPU board added, expansion board config updates. --- cfgfile.cpp | 16 +++++-- cpuboard.cpp | 83 +++++++++++++++++++++++++++-------- custom.cpp | 10 +++-- expansion.cpp | 30 ++++++++----- filesys.cpp | 23 +++++----- include/cpuboard.h | 2 + include/ncr_scsi.h | 5 +++ include/options.h | 2 +- ncr_scsi.cpp | 73 +++++++++++++++--------------- od-win32/mman.cpp | 7 +-- od-win32/resources/resource.h | 2 - od-win32/resources/winuae.rc | 4 +- od-win32/win32gui.cpp | 21 +++------ rommgr.cpp | 6 ++- 14 files changed, 175 insertions(+), 109 deletions(-) diff --git a/cfgfile.cpp b/cfgfile.cpp index 49507171..4b6edb09 100644 --- a/cfgfile.cpp +++ b/cfgfile.cpp @@ -219,6 +219,7 @@ static const TCHAR *cpuboards[] = { _T("CyberStormPPC"), _T("BlizzardPPC"), _T("WarpEngineA4000"), + _T("TekMagic"), NULL }; static const TCHAR *ppc_implementations[] = { @@ -909,9 +910,6 @@ static void cfgfile_write_board_rom(struct zfile *f, struct multipath *mp, struc { TCHAR buf[256]; - _stprintf(buf, _T("scsi_%s"), name); - cfgfile_dwrite_bool (f, buf, br->enabled); - for (int i = 0; i < MAX_BOARD_ROMS; i++) { _stprintf(buf, _T("%s_rom_file"), name); if (i == 0 || br->roms[i].romfile[0]) @@ -3520,12 +3518,22 @@ invalid_fs: return 0; } +bool cfgfile_board_enabled(struct boardromconfig *br) +{ + for (int i = 0; i < MAX_BOARD_ROMS; i++) { + if (br->roms[i].romfile[0]) + return true; + } + return false; +} + static bool cfgfile_read_board_rom(const TCHAR *option, const TCHAR *value, struct multipath *mp, struct boardromconfig *br, const TCHAR *name, int mask) { TCHAR buf[256], buf2[MAX_DPATH]; + bool dummy; _stprintf(buf, _T("scsi_%s"), name); - if (cfgfile_yesno(option, value, buf, &br->enabled)) + if (cfgfile_yesno(option, value, buf, &dummy)) return true; for (int i = 0; i < MAX_BOARD_ROMS; i++) { diff --git a/cpuboard.cpp b/cpuboard.cpp index 510b315d..84ad3d5b 100644 --- a/cpuboard.cpp +++ b/cpuboard.cpp @@ -148,6 +148,7 @@ static struct zfile *flashrom_file; static int flash_unlocked; static int csmk2_flashaddressing; static bool blizzardmaprom_bank_mapped, blizzardmaprom2_bank_mapped; +static bool cpuboard_non_byte_ea; static int ppc_irq_pending; @@ -250,7 +251,10 @@ static bool is_blizzardppc(void) static bool is_ppc(void) { return currprefs.cpuboard_type == BOARD_BLIZZARDPPC || currprefs.cpuboard_type == BOARD_CSPPC; - +} +static bool is_tekmagic(void) +{ + return currprefs.cpuboard_type == BOARD_TEKMAGIC; } DECLARE_MEMORY_FUNCTIONS(blizzardio); @@ -574,22 +578,25 @@ static uae_u32 REGPARAM2 blizzardea_lget(uaecptr addr) #ifdef JIT special_mem |= S_READ; #endif - uae_u32 *m; - - addr &= blizzardea_bank.mask; - m = (uae_u32 *)(blizzardea_bank.baseaddr + addr); - return do_get_mem_long(m); + uae_u32 v = 0; + if (cpuboard_non_byte_ea) { + v = blizzardea_bget(addr + 3) << 0; + v |= blizzardea_bget(addr + 2) << 8; + v |= blizzardea_bget(addr + 1) << 16; + v |= blizzardea_bget(addr + 0) << 24; + } + return v; } static uae_u32 REGPARAM2 blizzardea_wget(uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif - uae_u16 *m, v; - - addr &= blizzardea_bank.mask; - m = (uae_u16 *)(blizzardea_bank.baseaddr + addr); - v = do_get_mem_word(m); + uae_u32 v = 0; + if (cpuboard_non_byte_ea) { + v = blizzardea_bget(addr + 1) << 0; + v |= blizzardea_bget(addr + 0) << 8; + } return v; } static uae_u32 REGPARAM2 blizzardea_bget(uaecptr addr) @@ -600,7 +607,10 @@ static uae_u32 REGPARAM2 blizzardea_bget(uaecptr addr) uae_u8 v; addr &= blizzardea_bank.mask; - if (is_blizzard2060() && addr >= BLIZZARD_2060_SCSI_OFFSET) { + if (is_tekmagic()) { + cpuboard_non_byte_ea = true; + v = cpuboard_ncr710_io_bget(addr); + } else if (is_blizzard2060() && addr >= BLIZZARD_2060_SCSI_OFFSET) { v = cpuboard_ncr9x_scsi_get(addr); } else if ((currprefs.cpuboard_type == BOARD_BLIZZARD_1230_IV_SCSI || currprefs.cpuboard_type == BOARD_BLIZZARD_1260_SCSI) && addr >= BLIZZARD_SCSI_KIT_SCSI_OFFSET) { v = cpuboard_ncr9x_scsi_get(addr); @@ -626,26 +636,39 @@ static uae_u32 REGPARAM2 blizzardea_bget(uaecptr addr) return v; } -static void REGPARAM2 blizzardea_lput(uaecptr addr, uae_u32 b) +static void REGPARAM2 blizzardea_lput(uaecptr addr, uae_u32 l) { #ifdef JIT special_mem |= S_WRITE; #endif + if (cpuboard_non_byte_ea) { + blizzardea_bput(addr + 3, l >> 0); + blizzardea_bput(addr + 2, l >> 8); + blizzardea_bput(addr + 1, l >> 16); + blizzardea_bput(addr + 0, l >> 24); + } } -static void REGPARAM2 blizzardea_wput(uaecptr addr, uae_u32 b) +static void REGPARAM2 blizzardea_wput(uaecptr addr, uae_u32 w) { #ifdef JIT special_mem |= S_WRITE; #endif + if (cpuboard_non_byte_ea) { + blizzardea_bput(addr + 1, w >> 0); + blizzardea_bput(addr + 0, w >> 8); + } } static void REGPARAM2 blizzardea_bput(uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif - addr &= blizzardea_bank.mask; - if (is_blizzard2060() && addr >= BLIZZARD_2060_SCSI_OFFSET) { + addr &= blizzardea_bank.mask; + if (is_tekmagic()) { + cpuboard_non_byte_ea = true; + cpuboard_ncr710_io_bput(addr, b); + } else if (is_blizzard2060() && addr >= BLIZZARD_2060_SCSI_OFFSET) { cpuboard_ncr9x_scsi_put(addr, b); } else if ((currprefs.cpuboard_type == BOARD_BLIZZARD_1230_IV_SCSI || currprefs.cpuboard_type == BOARD_BLIZZARD_1260_SCSI) && addr >= BLIZZARD_SCSI_KIT_SCSI_OFFSET) { cpuboard_ncr9x_scsi_put(addr, b); @@ -1189,6 +1212,10 @@ void cpuboard_map(void) if (currprefs.maprom) map_banks_nojitdirect(&blizzardmaprom_bank, (a3000hmem_bank.start + a3000hmem_bank.allocated - 524288) >> 16, 524288 >> 16, 0); } + if (is_tekmagic()) { + map_banks(&blizzardf0_bank, 0xf00000 >> 16, 131072 >> 16, 0); + map_banks(&blizzardea_bank, 0xf40000 >> 16, 65536 >> 16, 0); + } } void cpuboard_reset(bool hardreset) @@ -1209,6 +1236,7 @@ void cpuboard_reset(bool hardreset) io_reg[CSIII_REG_LOCK] = 0x01; } flash_unlocked = 0; + cpuboard_non_byte_ea = false; flash_free(flashrom); flashrom = NULL; @@ -1267,7 +1295,18 @@ void cpuboard_init(void) cpuboard_size = currprefs.cpuboardmem1_size; - if (is_blizzard() || is_blizzardppc()) { + if (is_tekmagic()) { + + blizzardf0_bank.start = 0x00f00000; + blizzardf0_bank.allocated = 131072; + blizzardf0_bank.mask = blizzardf0_bank.allocated - 1; + mapped_malloc(&blizzardf0_bank); + + blizzardea_bank.allocated = 65536; + blizzardea_bank.mask = blizzardea_bank.allocated - 1; + mapped_malloc(&blizzardea_bank); + + } else if (is_blizzard() || is_blizzardppc()) { blizzardram_bank.start = BLIZZARD_RAM_ALIAS_BASE; blizzardram_bank.allocated = cpuboard_size; blizzardram_bank.mask = blizzardram_bank.allocated - 1; @@ -1574,6 +1613,9 @@ addrbank *cpuboard_autoconfig_init(void) break; case BOARD_WARPENGINE_A4000: return &expamem_null; + case BOARD_TEKMAGIC: + roms[0] = 105; + break; case BOARD_CSMK1: roms[0] = currprefs.cpu_model == 68040 ? 95 : 101; isflashrom = true; @@ -1644,7 +1686,12 @@ addrbank *cpuboard_autoconfig_init(void) } protect_roms(false); - if (is_blizzard2060()) { + if (is_tekmagic()) { + earom_size = 65536; + f0rom_size = 131072; + zfile_fread(blizzardf0_bank.baseaddr, 1, f0rom_size, autoconfig_rom); + autoconf = false; + } else if (is_blizzard2060()) { f0rom_size = 65536; earom_size = 131072; // 2060 = 2x32k diff --git a/custom.cpp b/custom.cpp index f82b972a..a1bb0bf0 100644 --- a/custom.cpp +++ b/custom.cpp @@ -9173,8 +9173,10 @@ uae_u8 *restore_custom_extra (uae_u8 *src) currprefs.cs_a1000ram = changed_prefs.cs_a1000ram = RBB; currprefs.cs_slowmemisfast = changed_prefs.cs_slowmemisfast = RBB; - currprefs.a2091rom.enabled = changed_prefs.a2091rom.enabled = RBB; - currprefs.a4091rom.enabled = changed_prefs.a4091rom.enabled = RBB; + //currprefs.a2091rom.enabled = changed_prefs.a2091rom.enabled = RBB; + //currprefs.a4091rom.enabled = changed_prefs.a4091rom.enabled = RBB; + RBB; + RBB; currprefs.cs_cdtvscsi = changed_prefs.cs_cdtvscsi = RBB; currprefs.cs_pcmcia = changed_prefs.cs_pcmcia = RBB; @@ -9225,8 +9227,8 @@ uae_u8 *save_custom_extra (int *len, uae_u8 *dstptr) SB (currprefs.cs_a1000ram ? 1 : 0); SB (currprefs.cs_slowmemisfast ? 1 : 0); - SB (currprefs.a2091rom.enabled ? 1 : 0); - SB (currprefs.a4091rom.enabled ? 1 : 0); + SB (cfgfile_board_enabled(&currprefs.a2091rom) ? 1 : 0); + SB (cfgfile_board_enabled(&currprefs.a4091rom) ? 1 : 0); SB (currprefs.cs_cdtvscsi ? 1 : 0); SB (currprefs.cs_pcmcia ? 1 : 0); diff --git a/expansion.cpp b/expansion.cpp index f563d11b..0069624f 100644 --- a/expansion.cpp +++ b/expansion.cpp @@ -535,12 +535,16 @@ static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value) } expamem_board_pointer = expamem_z3_pointer; } - if (card_map[ecard]) + if (card_map[ecard]) { expamem_next((*card_map[ecard])(), NULL); + return; + } break; case 0x4c: - if (card_map[ecard]) + if (card_map[ecard]) { expamem_next (NULL, NULL); + return; + } break; } } @@ -565,8 +569,10 @@ static void REGPARAM2 expamem_bput (uaecptr addr, uae_u32 value) expamem_hi = value & 0xff; expamem_z2_pointer = (expamem_hi | (expamem_lo >> 4)) << 16; expamem_board_pointer = expamem_z2_pointer; - if (card_map[ecard]) + if (card_map[ecard]) { expamem_next((*card_map[ecard]) (), NULL); + return; + } } else { expamem_lo = value & 0xff; } @@ -578,8 +584,10 @@ static void REGPARAM2 expamem_bput (uaecptr addr, uae_u32 value) break; case 0x4c: - if (card_map[ecard]) + if (card_map[ecard]) { expamem_next(expamem_bank_current, NULL); + return; + } break; } @@ -995,9 +1003,9 @@ static addrbank *expamem_map_fastcard_2 (int boardnum) static addrbank *expamem_init_fastcard_2 (int boardnum) { - uae_u16 mid = (currprefs.a2091rom.enabled || currprefs.uae_hide) ? commodore : uae_id; - uae_u8 pid = (currprefs.a2091rom.enabled || currprefs.uae_hide) ? commodore_a2091_ram : (currprefs.maprom && !currprefs.cpuboard_type ? 1 : 81); - uae_u8 type = add_memory | zorroII | (currprefs.a2091rom.enabled && !boardnum ? chainedconfig : 0); + uae_u16 mid = (cfgfile_board_enabled(&currprefs.a2091rom) || currprefs.uae_hide) ? commodore : uae_id; + uae_u8 pid = (cfgfile_board_enabled(&currprefs.a2091rom) || currprefs.uae_hide) ? commodore_a2091_ram : (currprefs.maprom && !currprefs.cpuboard_type ? 1 : 81); + uae_u8 type = add_memory | zorroII | (cfgfile_board_enabled(&currprefs.a2091rom) && !boardnum ? chainedconfig : 0); int allocated = boardnum ? fastmem2_bank.allocated : fastmem_bank.allocated; expamem_init_clear (); @@ -1662,7 +1670,7 @@ void expamem_reset (void) } // immediately after Z2Fast so that they can be emulated as A590/A2091 with fast ram. #ifdef A2091 - if (currprefs.a2091rom.enabled) { + if (cfgfile_board_enabled(&currprefs.a2091rom)) { card_flags[cardno] = 0; card_name[cardno] = _T("A2091"); card_init[cardno] = expamem_init_a2091; @@ -1673,7 +1681,7 @@ void expamem_reset (void) } #endif #ifdef NCR - if (currprefs.oktagonrom.enabled) { + if (cfgfile_board_enabled(&currprefs.oktagonrom)) { card_name[cardno] = _T("Oktagon 2008"); card_init[cardno] = expamem_init_oktagon; card_map[cardno++] = NULL; @@ -1798,7 +1806,7 @@ void expamem_reset (void) } #endif #ifdef NCR - if (currprefs.a4091rom.enabled) { + if (cfgfile_board_enabled(&currprefs.a4091rom)) { card_flags[cardno] = 1; card_name[cardno] = _T("A4091"); card_init[cardno] = expamem_init_a4091; @@ -1808,7 +1816,7 @@ void expamem_reset (void) card_init[cardno] = expamem_init_a4091_2; card_map[cardno++] = NULL; } - if (currprefs.fastlanerom.enabled) { + if (cfgfile_board_enabled(&currprefs.fastlanerom)) { card_flags[cardno] = 1; card_name[cardno] = _T("Fastlane"); card_init[cardno] = expamem_init_fastlane; diff --git a/filesys.cpp b/filesys.cpp index 6bb9394e..6df34119 100644 --- a/filesys.cpp +++ b/filesys.cpp @@ -778,6 +778,9 @@ static bool add_cpuboard_scsi(int unit, struct uaedev_config_info *uci) if (currprefs.cpuboard_type == BOARD_WARPENGINE_A4000) { warpengine_add_scsi_unit(unit, uci); added = true; + } else if (currprefs.cpuboard_type == BOARD_TEKMAGIC) { + tekmagic_add_scsi_unit(unit, uci); + added = true; } else if (currprefs.cpuboard_type == BOARD_CSMK3 || currprefs.cpuboard_type == BOARD_CSPPC) { cyberstorm_add_scsi_unit(unit, uci); added = true; @@ -863,14 +866,14 @@ static void initialize_mountinfo (void) added = true; } else if (type == HD_CONTROLLER_TYPE_SCSI_A2091) { #ifdef A2091 - if (currprefs.a2091rom.enabled) { + if (cfgfile_board_enabled(&currprefs.a2091rom)) { a2091_add_scsi_unit (unit, uci, 0); added = true; } #endif } else if (type == HD_CONTROLLER_TYPE_SCSI_A2091_2) { #ifdef A2091 - if (currprefs.a2091rom.enabled) { + if (cfgfile_board_enabled(&currprefs.a2091rom)) { a2091_add_scsi_unit (unit, uci, 1); added = true; } @@ -884,42 +887,42 @@ static void initialize_mountinfo (void) #endif } else if (type == HD_CONTROLLER_TYPE_SCSI_A4091) { #ifdef NCR - if (currprefs.a4091rom.enabled) { + if (cfgfile_board_enabled(&currprefs.a4091rom)) { a4091_add_scsi_unit (unit, uci, 0); added = true; } #endif } else if (type == HD_CONTROLLER_TYPE_SCSI_A4091_2) { #ifdef NCR - if (currprefs.a4091rom.enabled) { + if (cfgfile_board_enabled(&currprefs.a4091rom)) { a4091_add_scsi_unit (unit, uci, 1); added = true; } #endif } else if (type == HD_CONTROLLER_TYPE_SCSI_FASTLANE) { #ifdef NCR - if (currprefs.fastlanerom.enabled) { + if (cfgfile_board_enabled(&currprefs.fastlanerom)) { fastlane_add_scsi_unit (unit, uci, 0); added = true; } #endif } else if (type == HD_CONTROLLER_TYPE_SCSI_FASTLANE_2) { #ifdef NCR - if (currprefs.fastlanerom.enabled) { + if (cfgfile_board_enabled(&currprefs.fastlanerom)) { fastlane_add_scsi_unit (unit, uci, 1); added = true; } #endif } else if (type == HD_CONTROLLER_TYPE_SCSI_OKTAGON) { #ifdef NCR - if (currprefs.oktagonrom.enabled) { + if (cfgfile_board_enabled(&currprefs.oktagonrom)) { oktagon_add_scsi_unit (unit, uci, 0); added = true; } #endif } else if (type == HD_CONTROLLER_TYPE_SCSI_OKTAGON_2) { #ifdef NCR - if (currprefs.oktagonrom.enabled) { + if (cfgfile_board_enabled(&currprefs.oktagonrom)) { oktagon_add_scsi_unit (unit, uci, 1); added = true; } @@ -953,12 +956,12 @@ static void initialize_mountinfo (void) a4000t_add_scsi_unit (unit, uci); added = true; #endif - } else if (currprefs.a2091rom.enabled) { + } else if (cfgfile_board_enabled(&currprefs.a2091rom)) { #ifdef A2091 a2091_add_scsi_unit (unit, uci, 0); added = true; #endif - } else if (currprefs.a4091rom.enabled) { + } else if (cfgfile_board_enabled(&currprefs.a4091rom)) { #ifdef NCR a4091_add_scsi_unit (unit, uci, 0); added = true; diff --git a/include/cpuboard.h b/include/cpuboard.h index 4cef2cd1..bdb87d7d 100644 --- a/include/cpuboard.h +++ b/include/cpuboard.h @@ -30,5 +30,7 @@ extern uae_u8 *REGPARAM3 cyberstorm_scsi_ram_xlate(uaecptr addr) REGPARAM; #define BOARD_CSPPC 9 #define BOARD_BLIZZARDPPC 10 #define BOARD_WARPENGINE_A4000 11 +#define BOARD_TEKMAGIC 12 + diff --git a/include/ncr_scsi.h b/include/ncr_scsi.h index c0566475..3dbe1a75 100644 --- a/include/ncr_scsi.h +++ b/include/ncr_scsi.h @@ -16,8 +16,13 @@ extern void ncr710_free(void); extern void ncr710_reset(void); extern void ncr_rethink(void); +void cpuboard_ncr710_io_bput(uaecptr addr, uae_u32 v); +uae_u32 cpuboard_ncr710_io_bget(uaecptr addr); + extern int a4000t_add_scsi_unit (int ch, struct uaedev_config_info *ci); extern int warpengine_add_scsi_unit(int ch, struct uaedev_config_info *ci); +extern int tekmagic_add_scsi_unit(int ch, struct uaedev_config_info *ci); extern int cyberstorm_add_scsi_unit(int ch, struct uaedev_config_info *ci); extern int blizzardppc_add_scsi_unit(int ch, struct uaedev_config_info *ci); extern int a4091_add_scsi_unit(int ch, struct uaedev_config_info *ci, int devnum); + diff --git a/include/options.h b/include/options.h index d66a00bf..89ce3df2 100644 --- a/include/options.h +++ b/include/options.h @@ -283,7 +283,6 @@ struct romconfig struct boardromconfig { struct romconfig roms[MAX_BOARD_ROMS]; - bool enabled; }; @@ -715,6 +714,7 @@ extern int cfgfile_configuration_change (int); extern void fixup_prefs_dimensions (struct uae_prefs *prefs); extern void fixup_prefs (struct uae_prefs *prefs); extern void fixup_cpu (struct uae_prefs *prefs); +extern bool cfgfile_board_enabled(struct boardromconfig *br); extern void check_prefs_changed_custom (void); extern void check_prefs_changed_cpu (void); diff --git a/ncr_scsi.cpp b/ncr_scsi.cpp index 5834656b..7a3a350f 100644 --- a/ncr_scsi.cpp +++ b/ncr_scsi.cpp @@ -76,6 +76,7 @@ static struct ncr_state ncr_a4091; static struct ncr_state ncr_a4091_2; static struct ncr_state ncr_a4000t; static struct ncr_state ncr_we; +static struct ncr_state ncr_cpuboard; static struct ncr_state ncr_cs; static struct ncr_state ncr_bppc; @@ -86,6 +87,7 @@ static struct ncr_state *ncrs[] = &ncr_a4091_2, &ncr_a4000t, &ncr_we, + &ncr_cpuboard, &ncr_bppc, NULL }; @@ -309,7 +311,7 @@ static uaecptr beswap(uaecptr addr) return (addr & ~3) | (3 - (addr & 3)); } -void ncr_io_bput(struct ncr_state *ncr, uaecptr addr, uae_u32 val) +static void ncr_io_bput(struct ncr_state *ncr, uaecptr addr, uae_u32 val) { if (addr >= CYBERSTORM_SCSI_RAM_OFFSET && ncr->ramsize) { cyberstorm_scsi_ram_put(addr, val); @@ -318,11 +320,15 @@ void ncr_io_bput(struct ncr_state *ncr, uaecptr addr, uae_u32 val) addr &= IO_MASK; lsi_mmio_write(ncr->devobject.lsistate, beswap(addr), val, 1); } -void ncr710_io_bput(struct ncr_state *ncr, uaecptr addr, uae_u32 val) +static void ncr710_io_bput(struct ncr_state *ncr, uaecptr addr, uae_u32 val) { addr &= IO_MASK; lsi710_mmio_write(ncr->devobject.lsistate, beswap(addr), val, 1); } +void cpuboard_ncr710_io_bput(uaecptr addr, uae_u32 v) +{ + ncr710_io_bput(&ncr_cpuboard, addr, v); +} static void ncr_bput2 (struct ncr_state *ncr, uaecptr addr, uae_u32 val) { @@ -336,18 +342,22 @@ static void ncr_bput2 (struct ncr_state *ncr, uaecptr addr, uae_u32 val) ncr710_io_bput(ncr, addr, val); } -uae_u32 ncr_io_bget(struct ncr_state *ncr, uaecptr addr) +static uae_u32 ncr_io_bget(struct ncr_state *ncr, uaecptr addr) { if (addr >= CYBERSTORM_SCSI_RAM_OFFSET && ncr->ramsize) return cyberstorm_scsi_ram_get(addr); addr &= IO_MASK; return lsi_mmio_read(ncr->devobject.lsistate, beswap(addr), 1); } -uae_u32 ncr710_io_bget(struct ncr_state *ncr, uaecptr addr) +static uae_u32 ncr710_io_bget(struct ncr_state *ncr, uaecptr addr) { addr &= IO_MASK; return lsi710_mmio_read(ncr->devobject.lsistate, beswap(addr), 1); } +uae_u32 cpuboard_ncr710_io_bget(uaecptr addr) +{ + return ncr710_io_bget(&ncr_cpuboard, addr); +} static uae_u32 ncr_bget2 (struct ncr_state *ncr, uaecptr addr) { @@ -448,7 +458,7 @@ static addrbank ncr_bank_a4091 = { ncr4_lget, ncr4_wget, ncr4_bget, ncr4_lput, ncr4_wput, ncr4_bput, default_xlate, default_check, NULL, NULL, _T("A4091"), - dummy_lgeti, dummy_wgeti, ABFLAG_IO + dummy_lgeti, dummy_wgeti, ABFLAG_IO | ABFLAG_SAFE }; DECLARE_MEMORY_FUNCTIONS(ncr42) @@ -457,7 +467,7 @@ static addrbank ncr_bank_a4091_2 = { ncr42_lget, ncr42_wget, ncr42_bget, ncr42_lput, ncr42_wput, ncr42_bput, default_xlate, default_check, NULL, NULL, _T("A4091 #2"), - dummy_lgeti, dummy_wgeti, ABFLAG_IO + dummy_lgeti, dummy_wgeti, ABFLAG_IO | ABFLAG_SAFE }; static void REGPARAM2 ncr_wput (struct ncr_state *ncr, uaecptr addr, uae_u32 w) @@ -806,7 +816,7 @@ addrbank *ncr710_a4091_autoconfig_init (int devnum) ncr->enabled = true; memset (ncr->acmemory, 0xff, sizeof ncr->acmemory); - ncr->rom_start = A4091_ROM_VECTOR; + ncr->rom_start = 0; ncr->rom_offset = A4091_ROM_OFFSET; ncr->rom_end = A4091_IO_OFFSET; ncr->io_start = A4091_IO_OFFSET; @@ -957,57 +967,44 @@ static int add_ncr_scsi_tape (struct ncr_state *ncr, int ch, const TCHAR *tape_d return ncr->scsid[ch] ? 1 : 0; } -int a4000t_add_scsi_unit (int ch, struct uaedev_config_info *ci) +static int ncr_add_scsi_unit(struct ncr_state *ncr, int ch, struct uaedev_config_info *ci) { if (ci->type == UAEDEV_CD) - return add_ncr_scsi_cd (&ncr_a4000t, ch, ci->device_emu_unit); + return add_ncr_scsi_cd (ncr, ch, ci->device_emu_unit); else if (ci->type == UAEDEV_TAPE) - return add_ncr_scsi_tape (&ncr_a4000t, ch, ci->rootdir, ci->readonly); + return add_ncr_scsi_tape (ncr, ch, ci->rootdir, ci->readonly); else - return add_ncr_scsi_hd (&ncr_a4000t, ch, NULL, ci, 1); + return add_ncr_scsi_hd (ncr, ch, NULL, ci, 1); +} + +int a4000t_add_scsi_unit (int ch, struct uaedev_config_info *ci) +{ + return ncr_add_scsi_unit(&ncr_a4000t, ch, ci); } int warpengine_add_scsi_unit (int ch, struct uaedev_config_info *ci) { - if (ci->type == UAEDEV_CD) - return add_ncr_scsi_cd (&ncr_we, ch, ci->device_emu_unit); - else if (ci->type == UAEDEV_TAPE) - return add_ncr_scsi_tape (&ncr_we, ch, ci->rootdir, ci->readonly); - else - return add_ncr_scsi_hd (&ncr_we, ch, NULL, ci, 1); + return ncr_add_scsi_unit(&ncr_we, ch, ci); +} + +int tekmagic_add_scsi_unit (int ch, struct uaedev_config_info *ci) +{ + return ncr_add_scsi_unit(&ncr_cpuboard, ch, ci); } int a4091_add_scsi_unit (int ch, struct uaedev_config_info *ci, int devnum) { - struct ncr_state *ncr = ncra4091[devnum]; - if (ci->type == UAEDEV_CD) - return add_ncr_scsi_cd (ncr, ch, ci->device_emu_unit); - else if (ci->type == UAEDEV_TAPE) - return add_ncr_scsi_tape (ncr, ch, ci->rootdir, ci->readonly); - else - return add_ncr_scsi_hd (ncr, ch, NULL, ci, 1); + return ncr_add_scsi_unit(ncra4091[devnum], ch, ci); } int cyberstorm_add_scsi_unit(int ch, struct uaedev_config_info *ci) { - if (ci->type == UAEDEV_CD) - return add_ncr_scsi_cd(&ncr_cs, ch, ci->device_emu_unit); - else if (ci->type == UAEDEV_TAPE) - return add_ncr_scsi_tape(&ncr_cs, ch, ci->rootdir, ci->readonly); - else - return add_ncr_scsi_hd(&ncr_cs, ch, NULL, ci, 1); + return ncr_add_scsi_unit(&ncr_cs, ch, ci); } int blizzardppc_add_scsi_unit(int ch, struct uaedev_config_info *ci) { - if (ci->type == UAEDEV_CD) - return add_ncr_scsi_cd(&ncr_bppc, ch, ci->device_emu_unit); - else if (ci->type == UAEDEV_TAPE) - return add_ncr_scsi_tape(&ncr_bppc, ch, ci->rootdir, ci->readonly); - else - return add_ncr_scsi_hd(&ncr_bppc, ch, NULL, ci, 1); + return ncr_add_scsi_unit(&ncr_bppc, ch, ci); } - #endif - diff --git a/od-win32/mman.cpp b/od-win32/mman.cpp index 7f4e6e05..a3678b1f 100644 --- a/od-win32/mman.cpp +++ b/od-win32/mman.cpp @@ -312,9 +312,9 @@ static int doinit_shm (void) if (changed_prefs.cpu_model >= 68020) size = 0x10000000; z3size = ((changed_prefs.z3fastmem_size + align) & ~align) + ((changed_prefs.z3fastmem2_size + align) & ~align) + ((changed_prefs.z3chipmem_size + align) & ~align); - if (currprefs.a4091rom.enabled) + if (cfgfile_board_enabled(&currprefs.a4091rom)) othersize += 2 * 16 * 1024 * 1024; - if (currprefs.fastlanerom.enabled) + if (cfgfile_board_enabled(&currprefs.fastlanerom)) othersize += 2 * 32 * 1024 * 1024; totalsize = size + z3size + z3rtgmem_size + othersize; while (totalsize > size64) { @@ -444,11 +444,12 @@ void free_shm (void) void mapped_free (addrbank *ab) { shmpiece *x = shm_start; + bool rtgmem = (ab->flags & ABFLAG_RTG) != 0; if (ab->baseaddr == NULL) return; - if (!currprefs.jit_direct_compatible_memory && ab->baseaddr != rtgmem_mapped_memory) { + if (!currprefs.jit_direct_compatible_memory && !rtgmem) { if (!(ab->flags & ABFLAG_NOALLOC)) { xfree(ab->baseaddr); ab->baseaddr = NULL; diff --git a/od-win32/resources/resource.h b/od-win32/resources/resource.h index 02a40f5b..a2790f7e 100644 --- a/od-win32/resources/resource.h +++ b/od-win32/resources/resource.h @@ -1090,9 +1090,7 @@ #define IDC_DBG_MISC 1765 #define IDC_DBG_CUSTOM 1766 #define IDC_DBG_MISCCPU 1767 -#define IDC_CS_A2091 1768 #define IDC_CS_DMAC2 1769 -#define IDC_CS_A4091 1770 #define IDC_CS_CDTVSCSI 1771 #define IDC_CS_CD32FMV 1771 #define IDC_CS_SCSIMODE 1772 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index b906fffe..0ba3a8b3 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -1116,8 +1116,6 @@ BEGIN CONTROL "Catweasel Z2 emulation [] Catweasel MK2 Zorro II card emulation. Physical Windows compatible Catweasel card and drivers required.",IDC_CATWEASEL, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,216,147,11 CONTROL "uaescsi.device",IDC_SCSIDEVICE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,229,147,11 - CONTROL "A590/A2091 WD33C93 SCSI",IDC_CS_A2091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,242,147,11 - CONTROL "A4091 NCR53C710 SCSI",IDC_CS_A4091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,255,151,11 CONTROL "Include host SCSI devices",IDC_CS_SCSIMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,271,147,11 GROUPBOX "Network",IDC_STATIC,181,197,213,86 CONTROL "bsdsocket.library [] bsdsocket network library emulation.",IDC_SOCKETS, @@ -1127,7 +1125,7 @@ BEGIN CONTROL "A2065 Z2 [] A2065 Ethernet Zorro II card emulation.",IDC_A2065, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,241,187,11 COMBOBOX IDC_NETDEVICE,202,256,178,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "CD32 Full Motion Video cartridge",IDC_CS_CD32FMV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,268,151,11 + CONTROL "CD32 Full Motion Video cartridge",IDC_CS_CD32FMV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,242,151,11 END IDD_INPUTMAP DIALOGEX 0, 0, 421, 341 diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index 2e52dc97..705bf541 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -1659,6 +1659,7 @@ static void show_rom_list (void) 90, -1, 94, -1, -1, // 1260 SCSI 92, -1, -1, // 2060 93, -1, -1, // Warp Engine + 105, -1, -1, // TekMagic 95, 101, -1, -1, // CS MK I 96, -1, -1, // CS MK II 97, -1, -1, // CS MK III @@ -1671,6 +1672,7 @@ static void show_rom_list (void) 52, 25, -1, -1, // ar 1 26, 27, 28, -1, -1, // ar 2 29, 30, -1, -1, // ar 3 + 47, -1, -1, // action replay 1200 0, 0, 0 }; @@ -1684,7 +1686,7 @@ static void show_rom_list (void) _T("Blizzard 1230-IV\0Blizzard 1260\0") _T("Blizzard 1230-IV/SCSI\0Blizzard 1260/SCSI\0") - _T("Blizzard 2060\0Warp Engine\0") + _T("Blizzard 2060\0Warp Engine\0TekMagic 2040/2060\0") _T("CyberStorm MK I\0CyberStorm MK II\0CyberStorm MK III\0") _T("Blizzard PPC\0CyberStorm PPC\0") @@ -7434,7 +7436,7 @@ static void setmax32bitram (HWND hDlg) rtgz3size = gfxboard_is_z3 (workprefs.rtgmem_type) ? workprefs.rtgmem_size : 0; size = ((workprefs.z3fastmem_size + sizealign) & ~sizealign) + ((workprefs.z3fastmem2_size + sizealign) & ~sizealign) + ((rtgz3size + sizealign) & ~sizealign); - if (currprefs.a4091rom.enabled) + if (cfgfile_board_enabled(&currprefs.a4091rom)) size += 2 * 16 * 1024 * 1024; if (changed_prefs.mbresmem_high_size == 128 * 1024 * 1024 && (size || workprefs.z3chipmem_size)) size += 16 * 1024 * 1024; @@ -7883,8 +7885,6 @@ static void enable_for_expansiondlg (HWND hDlg) } ew (hDlg, IDC_RTG_HWSPRITE, rtg3 && workprefs.gfx_api); ShowWindow (GetDlgItem(hDlg, IDC_CS_SCSIMODE), SW_HIDE); - ew (hDlg, IDC_CS_A2091, en); - ew (hDlg, IDC_CS_A4091, en); ew(hDlg, IDC_CS_CD32FMV, en); ew (hDlg, IDC_CS_SCSIMODE, FALSE); } @@ -7898,8 +7898,6 @@ static void values_to_expansiondlg (HWND hDlg) CheckDlgButton (hDlg, IDC_SCSIDEVICE, workprefs.scsi == 1); CheckDlgButton (hDlg, IDC_SANA2, workprefs.sana2); CheckDlgButton (hDlg, IDC_A2065, workprefs.a2065name[0] ? 1 : 0); - CheckDlgButton (hDlg, IDC_CS_A2091, workprefs.a2091rom.enabled); - CheckDlgButton(hDlg, IDC_CS_A4091, workprefs.a4091rom.enabled); CheckDlgButton(hDlg, IDC_CS_CD32FMV, workprefs.cs_cd32fmv); CheckDlgButton(hDlg, IDC_CS_SCSIMODE, workprefs.scsi == 2); SendDlgItemMessage (hDlg, IDC_RTG_BUFFERCNT, CB_SETCURSEL, workprefs.gfx_apmode[1].gfx_backbuffers == 0 ? 0 : workprefs.gfx_apmode[1].gfx_backbuffers - 1, 0); @@ -8067,12 +8065,6 @@ static INT_PTR CALLBACK ExpansionDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP case IDC_CATWEASEL: workprefs.catweasel = ischecked (hDlg, IDC_CATWEASEL) ? -1 : 0; break; - case IDC_CS_A2091: - workprefs.a2091rom.enabled = ischecked (hDlg, IDC_CS_A2091) ? 1 : 0; - break; - case IDC_CS_A4091: - workprefs.a4091rom.enabled = ischecked(hDlg, IDC_CS_A4091) ? 1 : 0; - break; case IDC_CS_CD32FMV: workprefs.cs_cd32fmv = ischecked(hDlg, IDC_CS_CD32FMV) ? 1 : 0; break; @@ -8246,7 +8238,8 @@ static INT_PTR CALLBACK MemoryDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARA SendDlgItemMessage(hDlg, IDC_CPUBOARD_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("CyberStorm MK III")); SendDlgItemMessage(hDlg, IDC_CPUBOARD_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("CyberStorm PPC")); SendDlgItemMessage(hDlg, IDC_CPUBOARD_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("Blizzard PPC")); - SendDlgItemMessage(hDlg, IDC_CPUBOARD_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("Warp Engine A4000")); + SendDlgItemMessage(hDlg, IDC_CPUBOARD_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("Warp Engine")); + SendDlgItemMessage(hDlg, IDC_CPUBOARD_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("Tek Magic")); case WM_USER: workprefs.fastmem_autoconfig = ischecked (hDlg, IDC_FASTMEMAUTOCONFIG); @@ -10537,7 +10530,7 @@ static INT_PTR CALLBACK CDDriveSettingsProc (HWND hDlg, UINT msg, WPARAM wParam, case WM_INITDIALOG: recursive++; if (current_cddlg.ci.controller_type == HD_CONTROLLER_TYPE_UAE) - current_cddlg.ci.controller_type = (workprefs.a2091rom.enabled || workprefs.a4091rom.enabled || workprefs.cs_cdtvscsi || (workprefs.cs_mbdmac & 3)) ? HD_CONTROLLER_TYPE_SCSI_AUTO : HD_CONTROLLER_TYPE_IDE_AUTO; + current_cddlg.ci.controller_type = (cfgfile_board_enabled(&workprefs.a2091rom) || cfgfile_board_enabled(&workprefs.a4091rom) || workprefs.cs_cdtvscsi || (workprefs.cs_mbdmac & 3)) ? HD_CONTROLLER_TYPE_SCSI_AUTO : HD_CONTROLLER_TYPE_IDE_AUTO; inithdcontroller(hDlg, current_cddlg.ci.controller_type, UAEDEV_CD); SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_cddlg.ci.controller_unit, 0); InitializeListView (hDlg); diff --git a/rommgr.cpp b/rommgr.cpp index 1341dc45..96649b81 100644 --- a/rommgr.cpp +++ b/rommgr.cpp @@ -93,7 +93,7 @@ struct romdata *getromdatabypath (const TCHAR *path) return NULL; } -#define NEXT_ROM_ID 104 +#define NEXT_ROM_ID 105 static struct romheader romheaders[] = { { _T("Freezer Cartridges"), 1 }, @@ -308,6 +308,10 @@ static struct romdata roms[] = { 0xbb0d2f6a, 0x56c441fa,0x37d19339,0x3081b2e8,0xceae823b,0xc7e97e49, NULL, _T("oktagon2008.rom") }, { _T("Warp Engine A4000 ROM"), 0, 0, 0, 0, _T("WARPENGINE\0WARPENGINEA4000\0"), 32768, 93, 0, 0, ROMTYPE_CPUBOARD, 0, 0, NULL, 0x4deb574a, 0x6e6c95ff,0xe8448391,0xd36c5b68,0xc9065cb0,0x702a7d27 }, + { _T("TekMagic 2040/2060 ROM"), 1, 0, 1, 0, _T("TEKMAGIC\0TEKMAGIC2040\0TEKMAGIC2060\0"), 65536, 105, 0, 0, ROMTYPE_CPUBOARD, 0, 0, NULL, + 0x9e9781d5, 0xf65b60d1,0x4300c50f,0x2ed17cf4,0x4dcfdef9,0x16697bc9, NULL, _T("tekmagic2060.rom") }, + ALTROMPN(105, 1, 1, 32768, ROMTYPE_ODD | ROMTYPE_8BIT, NULL, 0x888da4cf, 0x6ae85f3a, 0x65331ba4, 0xaaba67ae, 0x34763d70, 0x2bde0495) + ALTROMPN(105, 1, 2, 32768, ROMTYPE_EVEN | ROMTYPE_8BIT, NULL, 0xaf1f47db, 0x28d5bed0, 0xbc517d46, 0x500e8159, 0x723e0b64, 0x4733c26a) { _T("CyberStorm MK I 68040"), 0, 0, 0, 0, _T("CSMKI\0"), 32768, 95, 0, 0, ROMTYPE_CPUBOARD, 0, 0, NULL, 0, 0, 0, 0, 0, 0, NULL, _T("cyberstormmk1_040.rom") }, -- 2.47.3