]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Autoconfig updates, tekmagic 2040/2060 CPU board added, expansion board config updates.
authorToni Wilen <twilen@winuae.net>
Sat, 30 Aug 2014 09:22:31 +0000 (12:22 +0300)
committerToni Wilen <twilen@winuae.net>
Sat, 30 Aug 2014 09:22:31 +0000 (12:22 +0300)
14 files changed:
cfgfile.cpp
cpuboard.cpp
custom.cpp
expansion.cpp
filesys.cpp
include/cpuboard.h
include/ncr_scsi.h
include/options.h
ncr_scsi.cpp
od-win32/mman.cpp
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/win32gui.cpp
rommgr.cpp

index 49507171fc6a6a0a5e341e68e205ace188e897f2..4b6edb09f085cc683e099c331487d7c1b16abca3 100644 (file)
@@ -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++) {
 
index 510b315df8247a6458a5770cd4492e7dc666fee5..84ad3d5bad75a097e20e6bb9e1d28e6a4b172238 100644 (file)
@@ -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
index f82b972a72df01e2fd286b0420e100bcef0b771f..a1bb0bf067362710584a1991c7a28f635e5395db 100644 (file)
@@ -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);
index f563d11bcfac92a6c4d86814083388c8ad2336d6..0069624fd270283391334b00cdb4ff63a30548eb 100644 (file)
@@ -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;
index 6bb9394eeb43d020ab605c7baa974cc4caf18a73..6df34119b0666fb3a75f7e4fc7900f5e3f6145cc 100644 (file)
@@ -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;
index 4cef2cd17bfeaede5c1d73ea451a684d6ac9d539..bdb87d7d8b28c59b7e36c7aad8415bf8aa3afbb6 100644 (file)
@@ -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
+
 
 
index c056647507f41b115799d96bcb8341b58bda7019..3dbe1a754f9ed76d7a7b9368b74f379900cd66ea 100644 (file)
@@ -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);
+
index d66a00bf2d8ff123dcc18c970318e0e974e77da3..89ce3df2af74d758eb487d154e289d80933d3739 100644 (file)
@@ -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);
index 5834656bcc47c27ae05520b26bc6ae791111dcba..7a3a350ff930719d0cf75d22272b2f282abad9fb 100644 (file)
@@ -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
-
index 7f4e6e050767b24aeab945134e5121864438ce43..a3678b1f342418da4e123824267f9b42d3211270 100644 (file)
@@ -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;
index 02a40f5b7f10ec666169a7ddd532c1ffb0dd2aa2..a2790f7eacf5f328cedaeb766e73151de405cc09 100644 (file)
 #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
index b906fffeb50afb3a2167ebddd6d22a23965ed2e9..0ba3a8b3df0741a537939f9746e8be8d5c0697ca 100644 (file)
@@ -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
index 2e52dc97072d7cb4fef8fdb5edd82831199755ef..705bf541270194762c70b3dd98fe6217fd765812 100644 (file)
@@ -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);
index 1341dc458ad32895614e75d8145bff346141b79e..96649b813fa9cddf8f99f99290f354b8c406f487 100644 (file)
@@ -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") },