From: Toni Wilen Date: Sat, 21 Nov 2020 12:39:13 +0000 (+0200) Subject: DMA capable GUI support, force 16-bit memory option. X-Git-Tag: 4900~251 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=6397170a33cf60cae21ef902c64c544d49a39b6b;p=francis%2Fwinuae.git DMA capable GUI support, force 16-bit memory option. --- diff --git a/cfgfile.cpp b/cfgfile.cpp index 2202a563..206825db 100644 --- a/cfgfile.cpp +++ b/cfgfile.cpp @@ -469,6 +469,15 @@ TCHAR *cfgfile_option_get(const TCHAR *s, const TCHAR *option) return cfgfile_option_find_it(s, option, true); } +bool cfgfile_option_get_bool(const TCHAR* s, const TCHAR* option) +{ + TCHAR *d = cfgfile_option_find_it(s, option, true); + bool ret = d && (!_tcsicmp(d, _T("true")) || !_tcsicmp(d, _T("1"))); + xfree(d); + return ret; +} + + static void trimwsa (char *s) { /* Delete trailing whitespace. */ @@ -1626,14 +1635,12 @@ static bool cfgfile_readramboard(const TCHAR *option, const TCHAR *value, const if (s) rb->product = (uae_u8)_tstol(s); xfree(s); - s = cfgfile_option_get(value, _T("no_reset_unmap")); - if (s) + if (cfgfile_option_get_bool(value, _T("no_reset_unmap"))) rb->no_reset_unmap = true; - xfree(s); - s = cfgfile_option_get(value, _T("nodma")); - if (s) + if (cfgfile_option_get_bool(value, _T("nodma"))) rb->nodma = true; - xfree(s); + if (cfgfile_option_get_bool(value, _T("force16bit"))) + rb->force16bit = true; s = cfgfile_option_get(value, _T("data")); if (s && _tcslen(s) >= 3 * 16 - 1) { rb->autoconfig_inuse = true; @@ -1756,6 +1763,12 @@ static void cfgfile_writeramboard(struct uae_prefs *prefs, struct zfile *f, cons _tcscpy(p, _T("nodma=true")); p += _tcslen(p); } + if (rb->force16bit) { + if (tmp2[0]) + *p++ = ','; + _tcscpy(p, _T("force16bit=true")); + p += _tcslen(p); + } if (rb->autoconfig_inuse) { uae_u8 *ac = rb->autoconfig; if (tmp2[0]) @@ -6099,7 +6112,7 @@ void cfgfile_compatibility_rtg(struct uae_prefs *p) for (int j = i; j < MAX_RTG_BOARDS; j++) { rtgs[j] = 1; if (gfxboard_get_romtype(&p->rtgboards[j]) == romtype) { - TCHAR *romname = NULL; + const TCHAR *romname = NULL; if (romtype == ROMTYPE_PICASSOIV) { romname = p->picassoivromfile; } else if (romtype == ROMTYPE_x86_VGA) { diff --git a/include/memory.h b/include/memory.h index 32b51526..dfdc25d5 100644 --- a/include/memory.h +++ b/include/memory.h @@ -527,8 +527,8 @@ extern void set_roms_modified (void); extern void reload_roms(void); extern bool read_kickstart_version(struct uae_prefs *p); extern void chipmem_setindirect(void); -extern void initramboard(addrbank * ab, struct ramboard* rb); -extern void loadboardfile(addrbank * ab, struct boardloadfile* lf); +extern void initramboard(addrbank *ab, struct ramboard *rb); +extern void loadboardfile(addrbank *ab, struct boardloadfile *lf); uae_u32 memory_get_long(uaecptr); uae_u32 memory_get_word(uaecptr); diff --git a/include/options.h b/include/options.h index b1374e12..474f6ee6 100644 --- a/include/options.h +++ b/include/options.h @@ -441,6 +441,7 @@ struct ramboard uae_u32 write_address; bool readonly; bool nodma; + bool force16bit; struct boardloadfile lf; }; struct expansion_params diff --git a/memory.cpp b/memory.cpp index 0af817b8..9ac77562 100644 --- a/memory.cpp +++ b/memory.cpp @@ -2376,6 +2376,20 @@ static void allocate_memory (void) cpuboard_init(); } +static void setmemorywidth(struct ramboard *mb, addrbank *ab) +{ + if (!ab || !ab->allocated_size) + return; + if (!mb->force16bit) + return; + for (int i = (ab->start >> 16); i < ((ab->start + ab->allocated_size) >> 16); i++) { + if (ce_banktype[i] == CE_MEMBANK_FAST32) + ce_banktype[i] = CE_MEMBANK_FAST16; + if (ce_banktype[i] == CE_MEMBANK_CHIP32) + ce_banktype[i] = CE_MEMBANK_CHIP16; + } +} + static void fill_ce_banks (void) { int i; @@ -2434,10 +2448,20 @@ static void fill_ce_banks (void) ce_banktype[i] = CE_MEMBANK_CHIP16; } + setmemorywidth(&currprefs.chipmem, &chipmem_bank); + setmemorywidth(&currprefs.bogomem, &bogomem_bank); + setmemorywidth(&currprefs.z3chipmem, &z3chipmem_bank); + setmemorywidth(&currprefs.mbresmem_low, &a3000lmem_bank); + for (int i = 0; i < MAX_RAM_BOARDS; i++) { + setmemorywidth(&currprefs.z3fastmem[i], &z3fastmem_bank[i]); + setmemorywidth(&currprefs.fastmem[i], &fastmem_bank[i]); + } + if (currprefs.address_space_24) { for (i = 1; i < 256; i++) memcpy(&ce_banktype[i * 256], &ce_banktype[0], 256); } + } static int overlay_state; @@ -3549,7 +3573,7 @@ static void REGPARAM2 empty_put(uaecptr addr, uae_u32 v) { } -void loadboardfile(addrbank* ab, struct boardloadfile* lf) +void loadboardfile(addrbank *ab, struct boardloadfile * lf) { if (!ab->baseaddr) return; @@ -3575,7 +3599,7 @@ void loadboardfile(addrbank* ab, struct boardloadfile* lf) } } -void initramboard(addrbank* ab, struct ramboard* rb) +void initramboard(addrbank *ab, struct ramboard *rb) { ab->flags &= ~ABFLAG_NODMA; if (rb->nodma) diff --git a/od-win32/resources/resource.h b/od-win32/resources/resource.h index 5492fb17..3396bafb 100644 --- a/od-win32/resources/resource.h +++ b/od-win32/resources/resource.h @@ -1244,6 +1244,7 @@ #define IDC_STATENAME 1811 #define IDC_FASTMEMDMA 1811 #define IDC_SAMPLER_STEREO 1812 +#define IDC_FASTMEMFORCE16 1812 #define IDC_LISTDIALOG_LIST 1813 #define IDC_LOGPATH 1814 #define IDC_MIDIROUTER 1815 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index 5267657a..900490ce 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -248,16 +248,17 @@ BEGIN EDITTEXT IDC_AUTOCONFIG_PRODUCT,196,194,45,13,ES_AUTOHSCROLL RTEXT "Autoconfig data",IDC_STATIC,11,214,57,15,SS_CENTERIMAGE EDITTEXT IDC_AUTOCONFIG_DATA,78,213,164,13,ES_AUTOHSCROLL - CONTROL "Edit Autoconfig data",IDC_FASTMEMAUTOCONFIGUSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,261,196,103,8 - CONTROL "Manual configuration",IDC_FASTMEMNOAUTOCONFIG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,261,208,103,8 + CONTROL "Edit Autoconfig data",IDC_FASTMEMAUTOCONFIGUSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,261,190,103,8 + CONTROL "Manual configuration",IDC_FASTMEMNOAUTOCONFIG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,261,201,103,8 RTEXT "Memory board",IDC_STATIC,15,235,53,15,SS_CENTERIMAGE COMBOBOX IDC_MEMORYBOARDSELECT,77,235,165,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Z3 mapping mode:",IDC_STATIC,263,234,115,15,SS_CENTERIMAGE + LTEXT "Z3 mapping mode:",IDC_STATIC,263,236,115,15,SS_CENTERIMAGE RTEXT "Address range",IDC_STATIC,10,256,57,15,SS_CENTERIMAGE EDITTEXT IDC_RAM_ADDRESS,77,256,79,13,ES_AUTOHSCROLL EDITTEXT IDC_RAM_ADDRESS2,164,256,79,13,ES_AUTOHSCROLL COMBOBOX IDC_Z3MAPPING,262,256,117,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "DMA Capable",IDC_FASTMEMDMA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,261,220,103,8 + CONTROL "DMA Capable",IDC_FASTMEMDMA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,261,213,103,8 + CONTROL "Force 16-bit",IDC_FASTMEMFORCE16,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,261,225,103,8 END IDD_CPU DIALOGEX 0, 0, 396, 316 @@ -1565,7 +1566,7 @@ BEGIN IDD_MEMORY, DIALOG BEGIN - BOTTOMMARGIN, 265 + BOTTOMMARGIN, 284 END IDD_CPU, DIALOG diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index adac2f58..dfdd8787 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -9337,7 +9337,7 @@ static int fastram_select; static uae_u32 *fastram_select_pointer; static const int *fastram_select_msi; static struct ramboard *fastram_select_ramboard; - +#define MAX_STANDARD_RAM_BOARDS 2 static void enable_for_memorydlg (HWND hDlg) { @@ -9360,14 +9360,15 @@ static void enable_for_memorydlg (HWND hDlg) ew (hDlg, IDC_Z3MAPPING, z3); ew (hDlg, IDC_FASTTEXT, true); - bool isfast = fastram_select < 2 * MAX_RAM_BOARDS && fastram_select_ramboard && fastram_select_ramboard->size; + bool isfast = fastram_select >= MAX_STANDARD_RAM_BOARDS && fastram_select < MAX_STANDARD_RAM_BOARDS + 2 * MAX_RAM_BOARDS && fastram_select_ramboard && fastram_select_ramboard->size; ew(hDlg, IDC_AUTOCONFIG_MANUFACTURER, isfast && !manual); ew(hDlg, IDC_AUTOCONFIG_PRODUCT, isfast && !manual); ew(hDlg, IDC_MEMORYBOARDSELECT, isfast); ew(hDlg, IDC_AUTOCONFIG_DATA, ac && size); ew(hDlg, IDC_FASTMEMAUTOCONFIGUSE, isfast); ew(hDlg, IDC_FASTMEMNOAUTOCONFIG, isfast); - ew(hDlg, IDC_FASTMEMDMA, isfast); + ew(hDlg, IDC_FASTMEMDMA, true); + ew(hDlg, IDC_FASTMEMFORCE16, true); ew(hDlg, IDC_MEMORYRAM, true); ew(hDlg, IDC_MEMORYMEM, true); ew(hDlg, IDC_RAM_ADDRESS, manual && size); @@ -9391,6 +9392,96 @@ static void setfastram_ramboard(HWND hDlg, int zram) } } +static int getmemsize(uae_u32 size, const int *msi) +{ + int mem_size = 0; + if (msi == msi_fast) { + switch (size) + { + case 0x00000000: mem_size = 0; break; + case 0x00010000: mem_size = 1; break; + case 0x00020000: mem_size = 2; break; + case 0x00040000: mem_size = 3; break; + case 0x00080000: mem_size = 4; break; + case 0x00100000: mem_size = 5; break; + case 0x00200000: mem_size = 6; break; + case 0x00400000: mem_size = 7; break; + case 0x00800000: mem_size = 8; break; + case 0x01000000: mem_size = 9; break; + } + } + else if (msi == msi_chip) { + switch (size) + { + case 0x00040000: mem_size = 0; break; + case 0x00080000: mem_size = 1; break; + case 0x00100000: mem_size = 2; break; + case 0x00180000: mem_size = 3; break; + case 0x00200000: mem_size = 4; break; + case 0x00400000: mem_size = 5; break; + case 0x00800000: mem_size = 6; break; + } + } + else if (msi == msi_bogo) { + switch (size) + { + case 0x00000000: mem_size = 0; break; + case 0x00080000: mem_size = 1; break; + case 0x00100000: mem_size = 2; break; + case 0x00180000: mem_size = 3; break; + case 0x001C0000: mem_size = 4; break; + } + } + else { + if (size < 0x00100000) + mem_size = 0; + else if (size < 0x00200000) + mem_size = 1; + else if (size < 0x00400000) + mem_size = 2; + else if (size < 0x00800000) + mem_size = 3; + else if (size < 0x01000000) + mem_size = 4; + else if (size < 0x02000000) + mem_size = 5; + else if (size < 0x04000000) + mem_size = 6; + else if (size < 0x08000000) + mem_size = 7; + else if (size < 0x10000000) + mem_size = 8; + else if (size < 0x20000000) + mem_size = 9; + else if (size < 0x40000000) + mem_size = 10; + else // 1GB + mem_size = 11; + } + return mem_size; +} + +static void addadvancedram(HWND hDlg, struct ramboard *rb, const TCHAR *name) +{ + const int* msi; + TCHAR tmp[200]; + _tcscpy(tmp, name); + if (rb == &workprefs.chipmem) { + msi = msi_chip; + } else if (rb == &workprefs.bogomem) { + msi = msi_bogo; + } else if (rb == &workprefs.z3chipmem) { + msi = msi_z3chip; + } else { + return; + } + if (rb->size) { + int mem_size = getmemsize(rb->size, msi); + _tcscat(tmp, _T(" ")); + _tcscat(tmp, memsize_names[msi[mem_size]]); + } + SendDlgItemMessage(hDlg, IDC_MEMORYSELECT, CB_ADDSTRING, 0, (LPARAM)tmp); +} static void setfastram_selectmenu(HWND hDlg, int mode) { @@ -9402,77 +9493,58 @@ static void setfastram_selectmenu(HWND hDlg, int mode) struct ramboard *fastram_select_ramboard_old = fastram_select_ramboard; fastram_select_ramboard = NULL; - if (fastram_select < MAX_RAM_BOARDS) { + if (fastram_select == 0) { + min = 0; + max = MAX_CHIP_MEM; + msi = msi_chip; + fastram_select_pointer = &workprefs.chipmem.size; + fastram_select_ramboard = &workprefs.chipmem; + } else if (fastram_select == 1) { + min = 0; + max = MAX_SLOW_MEM; + msi = msi_bogo; + fastram_select_pointer = &workprefs.bogomem.size; + fastram_select_ramboard = &workprefs.bogomem; + } else if (fastram_select < MAX_STANDARD_RAM_BOARDS + MAX_RAM_BOARDS) { msi = msi_fast; min = MIN_FAST_MEM; max = MAX_FAST_MEM; - fastram_select_ramboard = &workprefs.fastmem[fastram_select]; + fastram_select_ramboard = &workprefs.fastmem[fastram_select - MAX_STANDARD_RAM_BOARDS]; fastram_select_pointer = &fastram_select_ramboard->size; zram = 2; - } else if (fastram_select >= MAX_RAM_BOARDS && fastram_select < MAX_RAM_BOARDS * 2) { + } else if (fastram_select >= MAX_STANDARD_RAM_BOARDS + MAX_RAM_BOARDS && fastram_select < MAX_STANDARD_RAM_BOARDS + MAX_RAM_BOARDS * 2) { msi = msi_z3fast; min = MIN_Z3_MEM; max = MAX_Z3_MEM; - fastram_select_ramboard = &workprefs.z3fastmem[fastram_select - MAX_RAM_BOARDS]; + fastram_select_ramboard = &workprefs.z3fastmem[fastram_select - (MAX_RAM_BOARDS + MAX_STANDARD_RAM_BOARDS)]; fastram_select_pointer = &fastram_select_ramboard->size; zram = 3; - } else if (fastram_select == 2 * MAX_RAM_BOARDS) { + } else if (fastram_select == MAX_STANDARD_RAM_BOARDS + 2 * MAX_RAM_BOARDS) { min = 0; max = MAX_CB_MEM_128M; msi = msi_cpuboard; fastram_select_pointer = &workprefs.mbresmem_high.size; - } else if (fastram_select == 2 * MAX_RAM_BOARDS + 1) { + fastram_select_ramboard = &workprefs.mbresmem_high; + } else if (fastram_select == MAX_STANDARD_RAM_BOARDS + 2 * MAX_RAM_BOARDS + 1) { min = 0; max = MAX_CB_MEM_64M; msi = msi_cpuboard; fastram_select_pointer = &workprefs.mbresmem_low.size; + fastram_select_ramboard = &workprefs.mbresmem_low; + } else if (fastram_select == MAX_STANDARD_RAM_BOARDS + 2 * MAX_RAM_BOARDS + 2) { + min = 0; + max = MAX_Z3_CHIPMEM; + msi = msi_z3chip; + fastram_select_pointer = &workprefs.z3chipmem.size; + fastram_select_ramboard = &workprefs.z3chipmem; } else { return; } fastram_select_msi = msi; uae_u32 v = *fastram_select_pointer; - int mem_size = 0; - if (msi == msi_fast) { - switch (v) - { - case 0x00000000: mem_size = 0; break; - case 0x00010000: mem_size = 1; break; - case 0x00020000: mem_size = 2; break; - case 0x00040000: mem_size = 3; break; - case 0x00080000: mem_size = 4; break; - case 0x00100000: mem_size = 5; break; - case 0x00200000: mem_size = 6; break; - case 0x00400000: mem_size = 7; break; - case 0x00800000: mem_size = 8; break; - case 0x01000000: mem_size = 9; break; - } - } else { - if (v < 0x00100000) - mem_size = 0; - else if (v < 0x00200000) - mem_size = 1; - else if (v < 0x00400000) - mem_size = 2; - else if (v < 0x00800000) - mem_size = 3; - else if (v < 0x01000000) - mem_size = 4; - else if (v < 0x02000000) - mem_size = 5; - else if (v < 0x04000000) - mem_size = 6; - else if (v < 0x08000000) - mem_size = 7; - else if (v < 0x10000000) - mem_size = 8; - else if (v < 0x20000000) - mem_size = 9; - else if (v < 0x40000000) - mem_size = 10; - else // 1GB - mem_size = 11; - } + int mem_size = getmemsize(v, msi); + SendDlgItemMessage(hDlg, IDC_MEMORYMEM, TBM_SETRANGE, TRUE, MAKELONG(min, max)); SendDlgItemMessage(hDlg, IDC_MEMORYMEM, TBM_SETPOS, TRUE, mem_size); SetDlgItemText(hDlg, IDC_MEMORYRAM, memsize_names[msi[mem_size]]); @@ -9482,6 +9554,7 @@ static void setfastram_selectmenu(HWND hDlg, int mode) setchecked(hDlg, IDC_FASTMEMAUTOCONFIGUSE, rb && rb->autoconfig_inuse); setchecked(hDlg, IDC_FASTMEMNOAUTOCONFIG, rb && rb->manual_config); setchecked(hDlg, IDC_FASTMEMDMA, rb && rb->nodma == 0); + setchecked(hDlg, IDC_FASTMEMFORCE16, rb && rb->force16bit != 0); if (rb) { if (rb->manual_config) { if (rb->end_address <= rb->start_address || rb->start_address + rb->size < rb->end_address) @@ -9507,22 +9580,24 @@ static void setfastram_selectmenu(HWND hDlg, int mode) ew(hDlg, IDC_MEMORYBOARDSELECT, FALSE); } } - - struct autoconfig_info *aci = expansion_get_autoconfig_info(&workprefs, fastram_select < MAX_RAM_BOARDS ? ROMTYPE_RAMZ2 : ROMTYPE_RAMZ3, fastram_select % MAX_RAM_BOARDS); - if (!rb->autoconfig_inuse) { - if (aci) { - memcpy(rb->autoconfig, aci->autoconfig_bytes, sizeof rb->autoconfig); - } - if (rb->manufacturer) { - rb->autoconfig[1] = rb->product; - rb->autoconfig[4] = (rb->manufacturer >> 8) & 0xff; - rb->autoconfig[5] = rb->manufacturer & 0xff; - } else { - memset(rb->autoconfig, 0, sizeof rb->autoconfig); - aci = expansion_get_autoconfig_info(&workprefs, fastram_select < MAX_RAM_BOARDS ? ROMTYPE_RAMZ2 : ROMTYPE_RAMZ3, fastram_select % MAX_RAM_BOARDS); + struct autoconfig_info* aci = NULL; + if (fastram_select >= MAX_STANDARD_RAM_BOARDS && fastram_select < MAX_STANDARD_RAM_BOARDS + 2 * MAX_RAM_BOARDS) { + aci = expansion_get_autoconfig_info(&workprefs, fastram_select < MAX_STANDARD_RAM_BOARDS + MAX_RAM_BOARDS ? ROMTYPE_RAMZ2 : ROMTYPE_RAMZ3, fastram_select % MAX_RAM_BOARDS); + if (!rb->autoconfig_inuse) { if (aci) { memcpy(rb->autoconfig, aci->autoconfig_bytes, sizeof rb->autoconfig); } + if (rb->manufacturer) { + rb->autoconfig[1] = rb->product; + rb->autoconfig[4] = (rb->manufacturer >> 8) & 0xff; + rb->autoconfig[5] = rb->manufacturer & 0xff; + } else { + memset(rb->autoconfig, 0, sizeof rb->autoconfig); + aci = expansion_get_autoconfig_info(&workprefs, fastram_select < MAX_RAM_BOARDS ? ROMTYPE_RAMZ2 : ROMTYPE_RAMZ3, fastram_select% MAX_RAM_BOARDS); + if (aci) { + memcpy(rb->autoconfig, aci->autoconfig_bytes, sizeof rb->autoconfig); + } + } } } if (mode != 3) { @@ -9581,6 +9656,8 @@ static void setfastram_selectmenu(HWND hDlg, int mode) } SendDlgItemMessage(hDlg, IDC_MEMORYSELECT, CB_RESETCONTENT, 0, 0); + addadvancedram(hDlg, &workprefs.chipmem, _T("Chip RAM")); + addadvancedram(hDlg, &workprefs.bogomem, _T("Slow RAM")); for (int i = 0; i < MAX_RAM_BOARDS; i++) { struct autoconfig_info *aci = expansion_get_autoconfig_info(&workprefs, ROMTYPE_RAMZ2, i); _stprintf(tmp, _T("Z2 Fast Ram #%d"), i + 1); @@ -9606,16 +9683,11 @@ static void setfastram_selectmenu(HWND hDlg, int mode) } SendDlgItemMessage(hDlg, IDC_MEMORYSELECT, CB_ADDSTRING, 0, (LPARAM)tmp); } - _tcscpy(tmp, _T("Processor Slot Fast RAM")); - if (workprefs.mbresmem_high.size) - _stprintf(tmp + _tcslen(tmp), _T(" [%dM]"), workprefs.mbresmem_high.size / (1024 * 1024)); - SendDlgItemMessage(hDlg, IDC_MEMORYSELECT, CB_ADDSTRING, 0, (LPARAM)tmp); - _tcscpy(tmp, _T("Motherboard Fast RAM")); - if (workprefs.mbresmem_low.size) - _stprintf(tmp + _tcslen(tmp), _T(" [%dM]"), workprefs.mbresmem_low.size / (1024 * 1024)); - SendDlgItemMessage(hDlg, IDC_MEMORYSELECT, CB_ADDSTRING, 0, (LPARAM)tmp); + addadvancedram(hDlg, &workprefs.mbresmem_high, _T("Processor Slot Fast RAM")); + addadvancedram(hDlg, &workprefs.mbresmem_low, _T("Motherboard Fast RAM")); + addadvancedram(hDlg, &workprefs.z3chipmem, _T("32-bit Chip RAM")); } else { - if (fastram_select >= MAX_RAM_BOARDS) + if (fastram_select >= MAX_STANDARD_RAM_BOARDS + MAX_RAM_BOARDS) fastram_select = 0; } SendDlgItemMessage(hDlg, IDC_MEMORYSELECT, CB_SETCURSEL, fastram_select, 0); @@ -11554,6 +11626,14 @@ static INT_PTR CALLBACK MemoryDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARA rb->nodma = ischecked(hDlg, IDC_FASTMEMDMA) == 0; setfastram_selectmenu(hDlg, 0); } + break; + case IDC_FASTMEMFORCE16: + if (fastram_select_ramboard) { + struct ramboard* rb = fastram_select_ramboard; + rb->force16bit = ischecked(hDlg, IDC_FASTMEMFORCE16) != 0; + setfastram_selectmenu(hDlg, 0); + } + break; case IDC_FASTMEMAUTOCONFIGUSE: if (fastram_select_ramboard) { struct ramboard* rb = fastram_select_ramboard; @@ -11562,7 +11642,7 @@ static INT_PTR CALLBACK MemoryDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARA setfastram_selectmenu(hDlg, 0); } break; - case IDC_FASTMEMNOAUTOCONFIG: + case IDC_FASTMEMNOAUTOCONFIG: if (fastram_select_ramboard) { struct ramboard *rb = fastram_select_ramboard; rb->manual_config = ischecked(hDlg, IDC_FASTMEMNOAUTOCONFIG);