/* 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)
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 {
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;
}
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;
}
}
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);
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;
}
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)
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;
}
// 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
} 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)");
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;
},
{
// 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
},
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[] = {
{
_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
},
{
NULL, 0,
false, EXPANSIONTYPE_SCSI,
0, 0, 0, false, NULL,
- true
+ true, a4091_settings
},
{
_T("dataflyerscsiplus"), _T("DataFlyer SCSI+"), _T("Expansion Systems"),
_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,
},
{
_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,
},
{
_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,
},
{
_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,
},
{
_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
}
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
#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;
#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
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)
_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;
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)
IDD_EXPANSION2, DIALOG
BEGIN
- BOTTOMMARGIN, 302
END
END
#endif // APSTUDIO_INVOKED
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."
return NULL;
}
+extern int scsiromselected;
+
void target_save_options (struct zfile *f, struct uae_prefs *p)
{
struct midiportinfo *midp;
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)
|| 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)) {
#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")
}
}
-static int scsiromselected = 0;
+int scsiromselected = 0;
static int scsiromselectednum = 0;
static int scsiromselectedcatnum = 0;
TCHAR cachepath[MAX_DPATH];
TCHAR path2[MAX_DPATH];
FILETIME t;
+ ULARGE_INTEGER ul;
SYSTEMTIME st;
if (!configurationcache)
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++) {
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;
}
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);
clear_device_rom(&workprefs, expansionroms[scsiromselected].romtype, scsiromselectednum);
}
if (changed) {
- init_expansion2(hDlg);
+ init_expansion2(hDlg, false);
values_to_expansion2dlg_sub(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))
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--;
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);
if (workprefs.rtgmem_size == 0)
workprefs.rtgmem_size = 4096 * 1024;
}
+ set_expansion_rtg_rom();
enable_for_expansiondlg (hDlg);
}
break;
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"));
+ }
}
}
+- 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.
}
#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);
}