From 8fdad9cc5eb8c68f7e27382af7be73818a9bc958 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 1 Aug 2015 11:59:06 +0300 Subject: [PATCH] 3200b6 --- expansion.cpp | 152 +++++++++++++++++++++++++++-------- include/autoconf.h | 2 + include/rommgr.h | 6 ++ moduleripper.cpp | 38 ++++++--- od-win32/resources/winuae.rc | 3 +- od-win32/win32.cpp | 18 +++++ od-win32/win32.h | 4 +- od-win32/win32gui.cpp | 145 +++++++++++++++++++++------------ od-win32/winuaechangelog.txt | 51 ++++++++++++ prowizard/misc/misc.c | 2 +- 10 files changed, 320 insertions(+), 101 deletions(-) diff --git a/expansion.cpp b/expansion.cpp index fb55953b..8104d917 100644 --- a/expansion.cpp +++ b/expansion.cpp @@ -311,9 +311,9 @@ static void expamem_init_clear (void) /* autoconfig area is "non-existing" after last device */ static void expamem_init_clear_zero (void) { - map_banks (&dummy_bank, 0xe8, 1, 0); + map_banks(&dummy_bank, 0xe8, 1, 0); if (!currprefs.address_space_24) - map_banks (&dummy_bank, 0xff000000 >> 16, 1, 0); + map_banks(&dummy_bank, 0xff000000 >> 16, 1, 0); } static void expamem_init_clear2 (void) @@ -620,7 +620,7 @@ static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value) if (expamem_type() == zorroIII) { uaecptr addr; expamem_hi = value & 0xff00; - addr = (expamem_hi | (expamem_lo >> 4)) << 16;; + addr = (expamem_hi | (expamem_lo >> 4)) << 16; if (!expamem_z3hack(&currprefs)) { expamem_z3_pointer = addr; } else { @@ -945,7 +945,7 @@ static addrbank catweasel_bank = { static addrbank *expamem_map_catweasel (void) { catweasel_start = expamem_z2_pointer; - map_banks_z2 (&catweasel_bank, catweasel_start >> 16, 1); + map_banks_z2(&catweasel_bank, catweasel_start >> 16, 1); return &catweasel_bank; } @@ -1109,7 +1109,7 @@ static addrbank *expamem_map_fastcard_2 (int boardnum) uae_u32 size = ab->allocated; ab->start = start; if (ab->start) { - map_banks_z2 (ab, ab->start >> 16, size >> 16); + map_banks_z2(ab, ab->start >> 16, size >> 16); } return ab; } @@ -1294,7 +1294,7 @@ static addrbank *expamem_map_filesys (void) } filesys_start = expamem_z2_pointer; - map_banks_z2 (&filesys_bank, filesys_start >> 16, 1); + map_banks_z2(&filesys_bank, filesys_start >> 16, 1); /* 68k code needs to know this. */ a = here (); org (rtarea_base + RTAREA_FSBOARD); @@ -1368,12 +1368,12 @@ static addrbank * expamem_map_z3fastmem_2 (addrbank *bank, uaecptr *startp, uae_ if (expamem_z3hack(&currprefs)) { if (z3fs && start != z3fs) { write_log (_T("WARNING: Z3MEM mapping changed from $%08x to $%08x\n"), start, z3fs); - map_banks (&dummy_bank, start >> 16, size >> 16, allocated); + map_banks(&dummy_bank, start >> 16, size >> 16, allocated); *startp = z3fs; - map_banks (bank, start >> 16, size >> 16, allocated); + map_banks_z3(bank, start >> 16, size >> 16); } } else { - map_banks (bank, z3fs >> 16, size >> 16, allocated); + map_banks_z3(bank, z3fs >> 16, size >> 16); start = z3fs; *startp = z3fs; } @@ -1408,7 +1408,7 @@ static addrbank *expamem_init_z3fastmem_2(int boardnum, addrbank *bank, uae_u32 expamem_init_clear (); fastmem_autoconfig(boardnum, 3, add_memory | zorroIII | code, 1, allocated); - map_banks (bank, start >> 16, size >> 16, allocated); + map_banks_z3(bank, start >> 16, size >> 16); return NULL; } static addrbank *expamem_init_z3fastmem (int devnum) @@ -1428,14 +1428,14 @@ static addrbank *expamem_init_z3fastmem2(int devnum) static addrbank *expamem_map_gfxcard_z3 (void) { gfxmem_bank.start = expamem_z3_pointer; - map_banks (&gfxmem_bank, gfxmem_bank.start >> 16, gfxmem_bank.allocated >> 16, gfxmem_bank.allocated); + map_banks_z3(&gfxmem_bank, gfxmem_bank.start >> 16, gfxmem_bank.allocated >> 16); return &gfxmem_bank; } static addrbank *expamem_map_gfxcard_z2 (void) { gfxmem_bank.start = expamem_z2_pointer; - map_banks_z2 (&gfxmem_bank, gfxmem_bank.start >> 16, gfxmem_bank.allocated >> 16); + map_banks_z2(&gfxmem_bank, gfxmem_bank.start >> 16, gfxmem_bank.allocated >> 16); return &gfxmem_bank; } @@ -1661,33 +1661,33 @@ static void allocate_expamem (void) // old statefile compatibility support fastmem_bank.start = 0x00200000; } - map_banks (&fastmem_bank, fastmem_bank.start >> 16, currprefs.fastmem_size >> 16, + map_banks(&fastmem_bank, fastmem_bank.start >> 16, currprefs.fastmem_size >> 16, fastmem_bank.allocated); } if (fastmem2_bank.allocated > 0) { restore_ram (fast2_filepos, fastmem2_bank.baseaddr); - map_banks (&fastmem2_bank, fastmem2_bank.start >> 16, currprefs.fastmem2_size >> 16, + map_banks(&fastmem2_bank, fastmem2_bank.start >> 16, currprefs.fastmem2_size >> 16, fastmem2_bank.allocated); } if (z3fastmem_bank.allocated > 0) { restore_ram (z3_filepos, z3fastmem_bank.baseaddr); - map_banks (&z3fastmem_bank, z3fastmem_bank.start >> 16, currprefs.z3fastmem_size >> 16, + map_banks(&z3fastmem_bank, z3fastmem_bank.start >> 16, currprefs.z3fastmem_size >> 16, z3fastmem_bank.allocated); } if (z3fastmem2_bank.allocated > 0) { restore_ram (z3_filepos2, z3fastmem2_bank.baseaddr); - map_banks (&z3fastmem2_bank, z3fastmem2_bank.start >> 16, currprefs.z3fastmem2_size >> 16, + map_banks(&z3fastmem2_bank, z3fastmem2_bank.start >> 16, currprefs.z3fastmem2_size >> 16, z3fastmem2_bank.allocated); } if (z3chipmem_bank.allocated > 0) { restore_ram (z3_fileposchip, z3chipmem_bank.baseaddr); - map_banks (&z3chipmem_bank, z3chipmem_bank.start >> 16, currprefs.z3chipmem_size >> 16, + map_banks(&z3chipmem_bank, z3chipmem_bank.start >> 16, currprefs.z3chipmem_size >> 16, z3chipmem_bank.allocated); } #ifdef PICASSO96 if (gfxmem_bank.allocated > 0 && gfxmem_bank.start > 0) { restore_ram (p96_filepos, gfxmem_bank.baseaddr); - map_banks (&gfxmem_bank, gfxmem_bank.start >> 16, currprefs.rtgmem_size >> 16, + map_banks(&gfxmem_bank, gfxmem_bank.start >> 16, currprefs.rtgmem_size >> 16, gfxmem_bank.allocated); } #endif @@ -1895,7 +1895,7 @@ void expamem_reset (void) } else { if (fastmem_bank.baseaddr) { fastmem_bank.name = _T("Fast memory (non-autoconfig)"); - map_banks (&fastmem_bank, 0x00200000 >> 16, fastmem_bank.allocated >> 16, 0); + map_banks(&fastmem_bank, 0x00200000 >> 16, fastmem_bank.allocated >> 16, 0); } if (fastmem2_bank.baseaddr != NULL) { fastmem2_bank.name = _T("Fast memory 2 (non-autoconfig)"); @@ -2011,18 +2011,18 @@ void expamem_reset (void) cards[cardno].initnum = expamem_init_z3fastmem; cards[cardno++].map = expamem_map_z3fastmem; if (expamem_z3hack(&currprefs)) - map_banks (&z3fastmem_bank, z3fastmem_bank.start >> 16, currprefs.z3fastmem_size >> 16, z3fastmem_bank.allocated); + map_banks_z3(&z3fastmem_bank, z3fastmem_bank.start >> 16, currprefs.z3fastmem_size >> 16); if (z3fastmem2_bank.baseaddr != NULL) { cards[cardno].flags = 2 | 1; cards[cardno].name = _T("Z3Fast2"); cards[cardno].initnum = expamem_init_z3fastmem2; cards[cardno++].map = expamem_map_z3fastmem2; if (expamem_z3hack(&currprefs)) - map_banks (&z3fastmem2_bank, z3fastmem2_bank.start >> 16, currprefs.z3fastmem2_size >> 16, z3fastmem2_bank.allocated); + map_banks_z3(&z3fastmem2_bank, z3fastmem2_bank.start >> 16, currprefs.z3fastmem2_size >> 16); } } if (z3chipmem_bank.baseaddr != NULL) - map_banks (&z3chipmem_bank, z3chipmem_bank.start >> 16, currprefs.z3chipmem_size >> 16, z3chipmem_bank.allocated); + map_banks_z3(&z3chipmem_bank, z3chipmem_bank.start >> 16, currprefs.z3chipmem_size >> 16); #ifdef PICASSO96 if (currprefs.rtgmem_type == GFXBOARD_UAE_Z3 && gfxmem_bank.baseaddr != NULL) { cards[cardno].flags = 4 | 1; @@ -2510,7 +2510,7 @@ static const struct expansionboardsettings x86_bridge_sidecar_settings[] = { }, { // 10-11 - _T("Address sector (SW2:3-4)\0A0000-AFFFF\0A0000-AFFFF\0D0000-DFFFF\0E0000-EFFFF\0"), + _T("Address sector (SW2:3-4)\0A0000-AFFFF (1)\0A0000-AFFFF (2)\0D0000-DFFFF\0E0000-EFFFF\0"), _T("memory\0sector_a0000_1\0sector_a0000_2\0sector_d0000\0sector_e0000\0"), true }, @@ -2583,6 +2583,49 @@ static const struct expansionboardsettings adscsi2000_settings[] = { NULL } }; +static const struct expansionboardsettings warpengine_settings[] = { + { + _T("Jumper H"), + _T("jumper_h") + }, + { + _T("Jumper J"), + _T("jumper_j") + }, + { + _T("Jumper K"), + _T("jumper_k") + }, + { + NULL + } +}; +static const struct expansionboardsettings a4091_settings[] = { + { + _T("Fast Bus"), + _T("fastbus"), + }, + { + _T("Delayed autoboot"), + _T("delayedautoboot") + }, + { + _T("Syncronous mode"), + _T("syncmode") + }, + { + _T("Termination"), + _T("term") + }, + { + _T("LUN"), + _T("lun") + }, + { + NULL + } +}; + const struct expansionromtype expansionroms[] = { { @@ -2668,13 +2711,13 @@ const struct expansionromtype expansionroms[] = { _T("a2090a"), _T("A2090a"), _T("Commodore"), a2090_init, NULL, a2090_add_scsi_unit, ROMTYPE_A2090 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, - true, EXPANSIONTYPE_SCSI + true, EXPANSIONTYPE_SCSI | EXPANSIONTYPE_CUSTOM_SECONDARY }, { _T("a2091"), _T("A590/A2091"), _T("Commodore"), a2091_init, NULL, a2091_add_scsi_unit, ROMTYPE_A2091 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, a2091_sub, 1, - true, EXPANSIONTYPE_SCSI, + true, EXPANSIONTYPE_SCSI | EXPANSIONTYPE_CUSTOM_SECONDARY, 0, 0, 0, true, NULL }, { @@ -2683,7 +2726,7 @@ const struct expansionromtype expansionroms[] = { NULL, 0, false, EXPANSIONTYPE_SCSI, 0, 0, 0, false, NULL, - true + true, a4091_settings }, { _T("dataflyerscsiplus"), _T("DataFlyer SCSI+"), _T("Expansion Systems"), @@ -2870,9 +2913,37 @@ const struct expansionromtype expansionroms[] = { _T("amax"), _T("AMAX ROM dongle"), _T("ReadySoft"), NULL, 0, NULL, NULL, NULL, ROMTYPE_AMAX | ROMTYPE_NONE, 0, 0, 0, false }, + +#if 0 + { + _T("x86_xt_hd"), _T("x86 XT"), _T("x86"), + x86_xt_hd_init, NULL, x86_add_xt_hd_unit, ROMTYPE_X86_HD | ROMTYPE_NONE, 0, 0, BOARD_NONAUTOCONFIG, true, + NULL, 0, + false, EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_SCSI + }, +#endif + { + _T("x86_at_hd_1"), _T("x86 AT IDE Primary"), _T("x86"), + x86_at_hd_init_1, NULL, x86_add_at_hd_unit_1, ROMTYPE_X86_AT_HD1 | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG, true, + NULL, 0, + false, EXPANSIONTYPE_IDE + }, + { + _T("x86_at_hd_2"), _T("x86 AT IDE Secondary"), _T("x86"), + x86_at_hd_init_2, NULL, x86_add_at_hd_unit_2, ROMTYPE_X86_AT_HD2 | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG, true, + NULL, 0, + false, EXPANSIONTYPE_IDE + }, + { + _T("x86_at_hd_xt"), _T("x86 XTIDE Universal BIOS HD"), _T("x86"), + x86_at_hd_init_xt, NULL, x86_add_at_hd_unit_xt, ROMTYPE_X86_XT_IDE | ROMTYPE_NONE, 0, 0, BOARD_NONAUTOCONFIG, true, + NULL, 0, + false, EXPANSIONTYPE_IDE + }, + { _T("a1060"), _T("A1060 Sidecar"), _T("Commodore"), - a1060_init, NULL, NULL, ROMTYPE_A1060 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, + a1060_init, NULL, NULL, ROMTYPE_A1060 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_X86_BRIDGE, 0, 0, 0, false, NULL, @@ -2881,7 +2952,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("a2088"), _T("A2088"), _T("Commodore"), - a2088xt_init, NULL, NULL, ROMTYPE_A2088 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, + a2088xt_init, NULL, NULL, ROMTYPE_A2088 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_X86_BRIDGE, 0, 0, 0, false, NULL, @@ -2890,7 +2961,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("a2088t"), _T("A2088T"), _T("Commodore"), - a2088t_init, NULL, NULL, ROMTYPE_A2088T | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, + a2088t_init, NULL, NULL, ROMTYPE_A2088T | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_X86_BRIDGE, 0, 0, 0, false, NULL, @@ -2899,7 +2970,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("a2286"), _T("A2286"), _T("Commodore"), - a2286_init, NULL, NULL, ROMTYPE_A2286 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, + a2286_init, NULL, NULL, ROMTYPE_A2286 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_X86_BRIDGE, 0, 0, 0, false, NULL, @@ -2908,13 +2979,29 @@ const struct expansionromtype expansionroms[] = { }, { _T("a2386"), _T("A2386SX"), _T("Commodore"), - a2386_init, NULL, NULL, ROMTYPE_A2386 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, + a2386_init, NULL, NULL, ROMTYPE_A2386 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_X86_BRIDGE, 0, 0, 0, false, NULL, false, x86at_bridge_settings }, + + // only here for rom selection + { + _T("picassoiv"), _T("Picasso IV"), _T("Village Tronic"), + NULL, NULL, NULL, ROMTYPE_PICASSOIV | ROMTYPE_NONE, 0, 0, BOARD_NONAUTOCONFIG, true, + NULL, 0, + false, EXPANSIONTYPE_RTG, + }, + { + _T("x86_vga"), _T("x86 VGA"), _T("x86"), + NULL, NULL, NULL, ROMTYPE_x86_VGA | ROMTYPE_NONE, 0, 0, BOARD_NONAUTOCONFIG, true, + NULL, 0, + false, EXPANSIONTYPE_RTG, + }, + + { NULL } @@ -3077,7 +3164,8 @@ static const struct cpuboardsubtype warpengine_sub[] = { BOARD_MEMORY_HIGHMEM, 128 * 1024 * 1024, 0x01000000, - ncr710_warpengine_autoconfig_init, NULL, BOARD_AUTOCONFIG_Z3, 1 + ncr710_warpengine_autoconfig_init, NULL, BOARD_AUTOCONFIG_Z3, 1, + warpengine_settings }, { NULL diff --git a/include/autoconf.h b/include/autoconf.h index b647d809..feae86c8 100644 --- a/include/autoconf.h +++ b/include/autoconf.h @@ -116,6 +116,8 @@ typedef void(*DEVICE_MEMORY_CALLBACK)(struct romconfig*, uae_u8*, int); #define EXPANSIONTYPE_PCI_BRIDGE 64 #define EXPANSIONTYPE_PARALLEL_ADAPTER 128 #define EXPANSIONTYPE_X86_BRIDGE 256 +#define EXPANSIONTYPE_CUSTOM_SECONDARY 512 +#define EXPANSIONTYPE_RTG 1024 struct expansionboardsettings { const TCHAR *name; diff --git a/include/rommgr.h b/include/rommgr.h index 0cfb364d..d2d0767b 100644 --- a/include/rommgr.h +++ b/include/rommgr.h @@ -91,6 +91,12 @@ extern int decode_cloanto_rom_do (uae_u8 *mem, int size, int real_size); #define ROMTYPE_A2286 0x0010002d #define ROMTYPE_A2386 0x0010002e #define ROMTYPE_OMTIADAPTER 0x0010002f +#define ROMTYPE_X86_HD 0x00100030 +#define ROMTYPE_X86_AT_HD1 0x00100031 +#define ROMTYPE_X86_AT_HD2 0x00100032 +#define ROMTYPE_X86_XT_IDE 0x00100033 +#define ROMTYPE_PICASSOIV 0x00100034 +#define ROMTYPE_x86_VGA 0x00100035 #define ROMTYPE_NOT 0x00800000 #define ROMTYPE_QUAD 0x01000000 diff --git a/moduleripper.cpp b/moduleripper.cpp index 57d85e51..50014d99 100644 --- a/moduleripper.cpp +++ b/moduleripper.cpp @@ -102,18 +102,13 @@ static void namesplit(TCHAR *s) memmove(s, s + l, (_tcslen(s + l) + 1) * sizeof (TCHAR)); } -extern "C" -{ - -FILE *moduleripper_fopen (const char *aname, const char *amode) +static void moduleripper_filename(const char *aname, TCHAR *out, bool fullpath) { - TCHAR tmp2[MAX_DPATH]; TCHAR tmp[MAX_DPATH]; TCHAR img[MAX_DPATH]; - TCHAR *name, *mode; - FILE *f; + TCHAR *name; - fetch_ripperpath (tmp, sizeof tmp / sizeof (TCHAR)); + fetch_ripperpath(tmp, sizeof tmp / sizeof(TCHAR)); img[0] = 0; if (currprefs.floppyslots[0].dfxtype >= 0) @@ -125,18 +120,34 @@ FILE *moduleripper_fopen (const char *aname, const char *amode) _tcscat(img, _T("_")); } - name = au (aname); + name = au(aname); + if (!fullpath) + tmp[0] = 0; + _stprintf(out, _T("%s%s%s"), tmp, img, name); + xfree(name); +} + +extern "C" +{ + +FILE *moduleripper_fopen (const char *aname, const char *amode) +{ + TCHAR outname[MAX_DPATH]; + TCHAR *mode; + FILE *f; + + moduleripper_filename(aname, outname, true); + mode = au (amode); - _stprintf (tmp2, _T("%s%s%s"), tmp, img, name); - f = _tfopen (tmp2, mode); + f = _tfopen (outname, mode); xfree (mode); - xfree (name); return f; } FILE *moduleripper2_fopen (const char *name, const char *mode, const char *aid, int addr, int size) { TCHAR msg[MAX_DPATH], msg2[MAX_DPATH]; + TCHAR outname[MAX_DPATH]; TCHAR *id; int ret; @@ -144,8 +155,9 @@ FILE *moduleripper2_fopen (const char *name, const char *mode, const char *aid, return NULL; got++; translate_message (NUMSG_MODRIP_SAVE, msg); + moduleripper_filename(name, outname, false); id = au (aid); - _stprintf (msg2, msg, id, addr, size); + _stprintf (msg2, msg, id, addr, size, outname); ret = gui_message_multibutton (2, msg2); xfree (id); if (ret < 0) diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index 55b9496e..09ca06ab 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -1575,7 +1575,6 @@ BEGIN IDD_EXPANSION2, DIALOG BEGIN - BOTTOMMARGIN, 302 END END #endif // APSTUDIO_INVOKED @@ -1839,7 +1838,7 @@ BEGIN IDS_NUMSG_NOEXTROM "No extended ROM found." IDS_NUMSG_MODRIP_NOTFOUND "No music modules or packed data found." IDS_NUMSG_MODRIP_FINISHED "Scan finished." - IDS_NUMSG_MODRIP_SAVE "Module/packed data found\n%s\nStart address %08.8X, Size %d bytes\nWould you like to save it?" + IDS_NUMSG_MODRIP_SAVE "Module/packed data found\n%s\nStart address %08.8X, Size %d bytes\n'%s'\nWould you like to save it?" IDS_NUMSG_KS68020 "The selected system ROM requires a 68020 with 32-bit addressing or 68030 or higher CPU." IDS_NUMSG_ROMNEED "One of the following system ROMs is required:\n\n%s\n\nCheck the System ROM path in the Paths panel and click Rescan ROMs." IDS_NUMSG_STATEHD "WARNING: Current configuration is not fully compatible with state saves.\nThis message will not appear again." diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index 5d022dd3..7860fd4e 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -3445,6 +3445,8 @@ static struct midiportinfo *getmidiport (struct midiportinfo **mi, int devid) return NULL; } +extern int scsiromselected; + void target_save_options (struct zfile *f, struct uae_prefs *p) { struct midiportinfo *midp; @@ -3542,6 +3544,8 @@ void target_save_options (struct zfile *f, struct uae_prefs *p) cfgfile_target_dwrite (f, _T("extraframewait"), _T("%d"), extraframewait); cfgfile_target_dwrite (f, _T("framelatency"), _T("%d"), forcedframelatency); + if (scsiromselected > 0) + cfgfile_target_write(f, _T("expansion_gui_page"), expansionroms[scsiromselected].name); } void target_restart (void) @@ -3629,6 +3633,20 @@ int target_parse_option (struct uae_prefs *p, const TCHAR *option, const TCHAR * || cfgfile_intval (option, value, _T("framelatency"), &forcedframelatency, 1) || cfgfile_intval (option, value, _T("cpu_idle"), &p->cpu_idle, 1)); + + if (cfgfile_string(option, value, _T("expansion_gui_page"), tmpbuf, sizeof tmpbuf / sizeof(TCHAR))) { + TCHAR *p = _tcschr(tmpbuf, ','); + if (p != NULL) + *p = 0; + for (int i = 0; expansionroms[i].name; i++) { + if (!_tcsicmp(tmpbuf, expansionroms[i].name)) { + scsiromselected = i; + break; + } + } + return 1; + } + if (cfgfile_yesno (option, value, _T("rtg_match_depth"), &p->win32_rtgmatchdepth)) return 1; if (cfgfile_yesno (option, value, _T("rtg_scale_small"), &tbool)) { diff --git a/od-win32/win32.h b/od-win32/win32.h index 102c9f0a..bb9a00da 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -20,12 +20,12 @@ #define LANG_DLL_FULL_VERSION_MATCH 1 #if WINUAEPUBLICBETA -#define WINUAEBETA _T("5") +#define WINUAEBETA _T("6") #else #define WINUAEBETA _T("") #endif -#define WINUAEDATE MAKEBD(2015, 7, 27) +#define WINUAEDATE MAKEBD(2015, 8, 1) //#define WINUAEEXTRA _T("AmiKit Preview") //#define WINUAEEXTRA _T("Amiga Forever Edition") diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index 834a7014..59207ab9 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -180,7 +180,7 @@ static void addaspectratios (HWND hDlg, int id) } } -static int scsiromselected = 0; +int scsiromselected = 0; static int scsiromselectednum = 0; static int scsiromselectedcatnum = 0; @@ -3388,6 +3388,7 @@ static void writeconfigcache (const TCHAR *path) TCHAR cachepath[MAX_DPATH]; TCHAR path2[MAX_DPATH]; FILETIME t; + ULARGE_INTEGER ul; SYSTEMTIME st; if (!configurationcache) @@ -3403,7 +3404,9 @@ static void writeconfigcache (const TCHAR *path) SystemTimeToFileTime (&st, &t); fwrite (configcachever, _tcslen (configcachever), sizeof (TCHAR), zcache); fwrite (&lf, 1, sizeof (TCHAR), zcache); - _stprintf (path2, _T("3\n4\n7\n%I64u\n;\n"), t); + ul.HighPart = t.dwHighDateTime; + ul.LowPart = t.dwLowDateTime; + _stprintf (path2, _T("3\n4\n7\n%I64u\n;\n"), ul.QuadPart); fwrite (path2, _tcslen (path2), sizeof (TCHAR), zcache); GetFullPathName (path, sizeof path2 / sizeof (TCHAR), path2, NULL); for (i = 0; i < configstoresize; i++) { @@ -8276,54 +8279,52 @@ static void expansion_net (HWND hDlg) SendDlgItemMessage (hDlg, IDC_NETDEVICE, CB_SETCURSEL, 0, 0); } -static const int scsiromselectedmask[] = { EXPANSIONTYPE_SCSI, EXPANSIONTYPE_IDE, EXPANSIONTYPE_SASI, EXPANSIONTYPE_CUSTOM, EXPANSIONTYPE_PCI_BRIDGE, EXPANSIONTYPE_X86_BRIDGE }; -static void init_expansion2(HWND hDlg) +static const int scsiromselectedmask[] = { EXPANSIONTYPE_SCSI, EXPANSIONTYPE_IDE, EXPANSIONTYPE_SASI, EXPANSIONTYPE_CUSTOM, EXPANSIONTYPE_PCI_BRIDGE, EXPANSIONTYPE_X86_BRIDGE, EXPANSIONTYPE_RTG }; +static void init_expansion2(HWND hDlg, bool init) { static int first = -1; + bool last = false; - SendDlgItemMessage(hDlg, IDC_SCSIROMSELECTCAT, CB_SETCURSEL, scsiromselectedcatnum, 0); - - SendDlgItemMessage(hDlg, IDC_SCSIROMSELECT, CB_RESETCONTENT, 0, 0); - scsiromselect_table[0] = -1; - for (int i = 0; expansionroms[i].name; i++) { - TCHAR name[256]; - if (expansionroms[i].romtype & ROMTYPE_CPUBOARD) - continue; - if (!(expansionroms[i].deviceflags & scsiromselectedmask[scsiromselectedcatnum])) - continue; - if (scsiromselectedcatnum == 0 && (expansionroms[i].deviceflags & (EXPANSIONTYPE_SASI | EXPANSIONTYPE_CUSTOM))) - continue; - name[0] = 0; - int cnt = 0; - for (int j = 0; j < MAX_DUPLICATE_EXPANSION_BOARDS; j++) { - if (cfgfile_board_enabled(&workprefs, expansionroms[i].romtype, j)) { - cnt++; + for (;;) { + bool matched = false; + SendDlgItemMessage(hDlg, IDC_SCSIROMSELECT, CB_RESETCONTENT, 0, 0); + scsiromselect_table[0] = -1; + for (int i = 0; expansionroms[i].name; i++) { + TCHAR name[256]; + if (expansionroms[i].romtype & ROMTYPE_CPUBOARD) + continue; + if (!(expansionroms[i].deviceflags & scsiromselectedmask[scsiromselectedcatnum])) + continue; + if (scsiromselectedcatnum == 0 && (expansionroms[i].deviceflags & (EXPANSIONTYPE_SASI | EXPANSIONTYPE_CUSTOM))) + continue; + name[0] = 0; + int cnt = 0; + for (int j = 0; j < MAX_DUPLICATE_EXPANSION_BOARDS; j++) { + if (cfgfile_board_enabled(&workprefs, expansionroms[i].romtype, j)) { + cnt++; + } } + if (i == scsiromselected) + matched = true; + if (cnt > 0) { + if (first < 0) + first = i; + } + if (cnt == 1) + _tcscat(name, _T("* ")); + else if (cnt > 1) + _stprintf(name + _tcslen(name), _T("[%d] "), cnt); + _tcscat(name, expansionroms[i].friendlyname); + if (expansionroms[i].friendlymanufacturer) { + _tcscat(name, _T(" (")); + _tcscat(name, expansionroms[i].friendlymanufacturer); + _tcscat(name, _T(")")); + } + gui_add_string(scsiromselect_table, hDlg, IDC_SCSIROMSELECT, i, name); } - if (cnt > 0) { - if (first < 0) - first = i; - } - if (cnt == 1) - _tcscat(name, _T("* ")); - else if (cnt > 1) - _stprintf(name + _tcslen(name), _T("[%d] "), cnt); - _tcscat(name, expansionroms[i].friendlyname); - if (expansionroms[i].friendlymanufacturer) { - _tcscat(name, _T(" (")); - _tcscat(name, expansionroms[i].friendlymanufacturer); - _tcscat(name, _T(")")); - } - gui_add_string(scsiromselect_table, hDlg, IDC_SCSIROMSELECT, i, name); - } - SendDlgItemMessage(hDlg, IDC_SCSIROMSELECTNUM, CB_RESETCONTENT, 0, 0); - for (int i = 0; i < MAX_DUPLICATE_EXPANSION_BOARDS; i++) { - TCHAR tmp[10]; - _stprintf(tmp, _T("%d"), i + 1); - SendDlgItemMessage(hDlg, IDC_SCSIROMSELECTNUM, CB_ADDSTRING, 0, (LPARAM) tmp); - } - if (scsiromselected <= 0) { + if (scsiromselected > 0 && matched) + break; int found = -1; for (int i = 0; expansionroms[i].name; i++) { int romtype = expansionroms[i].romtype; @@ -8342,14 +8343,30 @@ static void init_expansion2(HWND hDlg) } if (scsiromselected < 0 && found < 0) found = first; - if (found >= 0) { + if (found > 0) { scsiromselected = found; + break; + } + if (last || !init) + break; + scsiromselectedcatnum++; + if (scsiromselectedcatnum > 5) { + last = true; + scsiromselectedcatnum = 0; + scsiromselected = 0; } } + SendDlgItemMessage(hDlg, IDC_SCSIROMSELECTNUM, CB_RESETCONTENT, 0, 0); + for (int i = 0; i < MAX_DUPLICATE_EXPANSION_BOARDS; i++) { + TCHAR tmp[10]; + _stprintf(tmp, _T("%d"), i + 1); + SendDlgItemMessage(hDlg, IDC_SCSIROMSELECTNUM, CB_ADDSTRING, 0, (LPARAM)tmp); + } + if (scsiromselected > 0) gui_set_string_cursor(scsiromselect_table, hDlg, IDC_SCSIROMSELECT, scsiromselected); - + SendDlgItemMessage(hDlg, IDC_SCSIROMSELECTCAT, CB_SETCURSEL, scsiromselectedcatnum, 0); SendDlgItemMessage(hDlg, IDC_SCSIROMSELECTNUM, CB_SETCURSEL, scsiromselectednum, 0); SendDlgItemMessage(hDlg, IDC_SCSIROMID, CB_RESETCONTENT, 0, 0); @@ -8444,7 +8461,7 @@ static void values_from_expansion2dlg(HWND hDlg) clear_device_rom(&workprefs, expansionroms[scsiromselected].romtype, scsiromselectednum); } if (changed) { - init_expansion2(hDlg); + init_expansion2(hDlg, false); values_to_expansion2dlg_sub(hDlg); } @@ -8679,6 +8696,27 @@ static void updatecpuboardsubtypes(HWND hDlg) #endif } +static void set_expansion_rtg_rom(void) +{ + int idx; + uae_u32 romtype = gfxboard_get_romtype(workprefs.rtgmem_type); + if (romtype) { + struct boardromconfig *bc = get_device_rom_new(&workprefs, romtype, 0, &idx); + if (bc && bc->roms[idx].romfile[0] == 0) { + _tcscpy(bc->roms[idx].romfile, _T(":NOROM")); + } + } + for (int i = 0; expansionroms[i].name; i++) { + const struct expansionromtype *ert = &expansionroms[i]; + if (ert->deviceflags & EXPANSIONTYPE_RTG) { + if ((ert->romtype & ROMTYPE_MASK) != (romtype & ROMTYPE_MASK)) { + clear_device_rom(&workprefs, ert->romtype, 0); + } + } + } +} + + static void expansion2filebuttons(HWND hDlg, WPARAM wParam, TCHAR *path) { switch (LOWORD(wParam)) @@ -8740,11 +8778,12 @@ static INT_PTR CALLBACK Expansion2DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LP SendDlgItemMessage(hDlg, IDC_SCSIROMSELECTCAT, CB_ADDSTRING, 0, (LPARAM)_T("Custom Controllers")); SendDlgItemMessage(hDlg, IDC_SCSIROMSELECTCAT, CB_ADDSTRING, 0, (LPARAM)_T("PCI Bridgeboards")); SendDlgItemMessage(hDlg, IDC_SCSIROMSELECTCAT, CB_ADDSTRING, 0, (LPARAM)_T("x86 Bridgeboards")); + SendDlgItemMessage(hDlg, IDC_SCSIROMSELECTCAT, CB_ADDSTRING, 0, (LPARAM)_T("RTG boards")); reset_expansionrom_gui(hDlg, &expansion_gui_item, IDC_EXPANSIONBOARDITEMSELECTOR, IDC_EXPANSIONBOARDSELECTOR, IDC_EXPANSIONBOARDCHECKBOX); reset_expansionrom_gui(hDlg, &accelerator_gui_item, IDC_ACCELERATORBOARDITEMSELECTOR, IDC_ACCELERATORBOARDSELECTOR, IDC_ACCELERATORBOARDCHECKBOX); hide(hDlg, IDC_SCSIROMSELECTED, 1); expansion_net(hDlg); - init_expansion2(hDlg); + init_expansion2(hDlg, true); updatecpuboardsubtypes(hDlg); setcpuboardmemsize(hDlg); recursive--; @@ -8865,7 +8904,7 @@ static INT_PTR CALLBACK Expansion2DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LP if (val != CB_ERR) { scsiromselectedcatnum = val; scsiromselected = 0; - init_expansion2(hDlg); + init_expansion2(hDlg, false); values_to_expansion2_expansion_roms(hDlg, NULL); values_to_expansion2_expansion_settings(hDlg); values_to_expansion2dlg_sub(hDlg); @@ -9265,6 +9304,7 @@ static INT_PTR CALLBACK ExpansionDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP if (workprefs.rtgmem_size == 0) workprefs.rtgmem_size = 4096 * 1024; } + set_expansion_rtg_rom(); enable_for_expansiondlg (hDlg); } break; @@ -11466,10 +11506,13 @@ static void inithdcontroller (HWND hDlg, int ctype, int ctype_unit, int devtype) SendDlgItemMessage (hDlg, IDC_HDF_FEATURE_LEVEL, CB_ADDSTRING, 0, (LPARAM)_T("ATA-2+")); SendDlgItemMessage (hDlg, IDC_HDF_FEATURE_LEVEL, CB_ADDSTRING, 0, (LPARAM)_T("ATA-2+ Strict")); } else if (ctype >= HD_CONTROLLER_TYPE_SCSI_FIRST && ctype <= HD_CONTROLLER_TYPE_SCSI_LAST) { + const struct expansionromtype *ert = get_unit_expansion_rom(ctype); SendDlgItemMessage (hDlg, IDC_HDF_FEATURE_LEVEL, CB_ADDSTRING, 0, (LPARAM)_T("SCSI-1")); SendDlgItemMessage(hDlg, IDC_HDF_FEATURE_LEVEL, CB_ADDSTRING, 0, (LPARAM)_T("SCSI-2")); - SendDlgItemMessage(hDlg, IDC_HDF_FEATURE_LEVEL, CB_ADDSTRING, 0, (LPARAM)_T("SASI")); - SendDlgItemMessage(hDlg, IDC_HDF_FEATURE_LEVEL, CB_ADDSTRING, 0, (LPARAM)_T("SASI CHS")); + if (ert && (ert->deviceflags & (EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_CUSTOM_SECONDARY))) { + SendDlgItemMessage(hDlg, IDC_HDF_FEATURE_LEVEL, CB_ADDSTRING, 0, (LPARAM)_T("SASI")); + SendDlgItemMessage(hDlg, IDC_HDF_FEATURE_LEVEL, CB_ADDSTRING, 0, (LPARAM)_T("SASI CHS")); + } } } diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 985336e9..9be49bd6 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,4 +1,55 @@ +- Bridgeboard floppy drive motor and click sound supported. +- x86 CPU status string was visible even when bridgeboard was not active. +- Added software readable A4091 DIP switches and Warp Engine SCSI jumpers to GUI. Note that default + jumper state for Warp Engine is "No autoboot", you need to set all 3 jumpers to re-enable previous + autoboot configuration. +- Even more Z2 and Z3 board address validation, do not map the board if OS attempts to map it over any + existing mapped space. Some Z2/Z3 boards didn't use validating memory bank map routines. +- A590 XT drive emulation uses now generic "custom" HD emulation like all recently added MFM/RLL + controllers. Automatic geometry fixing removed, it can cause problems. +- Fixed A590 XT random bug that tried to start DMA transfer middle of command phase in some situations. +- Remember last open Expansion panel expansion device, saved to config file. +- A2286 "The Real Time Clock has not been initialized." message is gone. +- A2386SX CMOS RAM size fixed, but BIOS still complains about invalid configuration and setup screen + shows incorrect extended RAM size. (Why? Early boot phase extended RAM size counter is correct.) + Floppy drive access also seems to stall for 5s+ regularly and then work normally again. +- Added x86 bridgeboard AT IDE drive emulation. Selection under IDE controllers. Only A2286 and A2386SX + have BIOS support for AT IDE. At least fdisk and formatting confirmed working. +- Added IDE commands 0x40 and 0x41 (READ VERIFY SECTOR(S)), BIOS code uses it during formatting. +- Added support for XTIDE Universal BIOS (https://code.google.com/p/xtideuniversalbios/) See notes. +- Added supprtt for IDE emulation 8-bit data port width. (XT mode XTIDE Universal BIOS) +- Only show SASI harddrive types if selected controller uses SASI-like commands. +- Cirrus Logic hardware emulation text modes used graphics mode resolution when selecting host screen + size. Larger than 8 pixel font width text mode was too narrow. +- Added x86 VGA board emulation (uses already existing Cirrus Logic emulation). + +x86 bridgeboard VGA notes: +- Does not autoswitch, use END+F9 to switch between screens. +- Empty Amiga-side Janus PC window must still be open to enable keyboard input. +- It is not possible (at least not yet) to have Amiga RTG board enabled at the same time. +- VGA uses A0000-BFFFF, make sure bridgeboard "Address Sector" does not conflict. (Bad + memories are starting to return from PC DOS era...) + +RTG ROM configuration notes: +- Expansion panel has new "RTG board" category that currently lists 2 boards that need rom image, + Picasso IV and x86 bridgeboard VGA ISA card. +- This selection is currently a special case: selected ROM gets automatically removed when RTG board + is changed, always use RTG panel first to select the board, then Expansion panel to set the ROM. +- If Picasso IV ROM is not selected ("ROM disabled"): old rom loading method is used. In other words, + you can ignore whole RTG ROM configuration if you are never going to use x86 bridgeboard VGA card. +- Probably any old ISA Cirrus Logic GD542x VGA ROM can be used, for example + http://www.vgamuseum.info/index.php/component/k2/item/131-cirrus-logic-cl-gd5420 + or http://www.nongnu.org/vgabios/ seems to work. + +XTIDE Universal BIOS notes: +- BIOS is loaded at 0xEC000 to guarantee it becoming last BIOS extension, it is required to make it + work properly if there are other extensions (Janus handler/library). Make sure bridgeboard + "Address sector" is not conflicting (D0000-DFFFF works fine, for some reason no BIOS checks A0000 + to AFFFF region but it is documented as existing option in hardware). +- Uses Universal BIOS defaults (IO address base 0x300, no interrupt). +- A1060 and A2088 confirmed working. + Beta 5: - Added OMTI-Adapter HD controller, same as ALF1 but different hardware base address. diff --git a/prowizard/misc/misc.c b/prowizard/misc/misc.c index f93e5278..cc674e65 100644 --- a/prowizard/misc/misc.c +++ b/prowizard/misc/misc.c @@ -509,7 +509,7 @@ void fillPTKtable (Uchar poss[37][2]) } #ifndef _WIN64 -int htonl(int v) +unsigned int htonl(unsigned int v) { return ((v >> 24) & 0x000000ff) | ((v >> 8) & 0x0000ff00) | ((v << 8) & 0x00ff0000) | ((v << 24) & 0xff000000); } -- 2.47.3