diff --git a/src/cfgfile.cpp b/src/cfgfile.cpp index 548075d3..4c37e833 100644 --- a/src/cfgfile.cpp +++ b/src/cfgfile.cpp @@ -30,6 +30,7 @@ #include "blkdev.h" #include "calc.h" #include "gfxboard.h" +#include "native2amiga_api.h" #define cfgfile_warning write_log #define cfgfile_warning_obsolete write_log @@ -1085,9 +1086,9 @@ static void write_filesys_config (struct uae_prefs *p, struct zfile *f) } else if (ct >= HD_CONTROLLER_TYPE_IDE_EXPANSION_FIRST && ct <= HD_CONTROLLER_TYPE_IDE_LAST) { _stprintf(hdcs, _T("ide%d_%s"), ci->controller_unit, expansionroms[ct - HD_CONTROLLER_TYPE_IDE_EXPANSION_FIRST].name); romtype = expansionroms[ct - HD_CONTROLLER_TYPE_IDE_EXPANSION_FIRST].romtype; - //} else if (ct >= HD_CONTROLLER_TYPE_CUSTOM_FIRST && ct <= HD_CONTROLLER_TYPE_CUSTOM_LAST) { - // _stprintf(hdcs, _T("custom%d_%s"), ci->controller_unit, expansionroms[ct - HD_CONTROLLER_TYPE_CUSTOM_FIRST].name); - // romtype = expansionroms[ct - HD_CONTROLLER_TYPE_CUSTOM_FIRST].romtype; + } else if (ct >= HD_CONTROLLER_TYPE_CUSTOM_FIRST && ct <= HD_CONTROLLER_TYPE_CUSTOM_LAST) { + _stprintf(hdcs, _T("custom%d_%s"), ci->controller_unit, expansionroms[ct - HD_CONTROLLER_TYPE_CUSTOM_FIRST].name); + romtype = expansionroms[ct - HD_CONTROLLER_TYPE_CUSTOM_FIRST].romtype; } else if (ct == HD_CONTROLLER_TYPE_SCSI_AUTO) { _stprintf(hdcs, _T("scsi%d"), ci->controller_unit); } else if (ct == HD_CONTROLLER_TYPE_IDE_AUTO) { @@ -1260,7 +1261,6 @@ static void write_resolution(struct zfile* f, const TCHAR* ws, const TCHAR* hs, cfgfile_write(f, hs, _T("%d"), wh->height); } -#ifndef AMIBERRY static int cfgfile_read_rom_settings(const struct expansionboardsettings *ebs, const TCHAR *buf, TCHAR *configtext) { int settings = 0; @@ -1321,31 +1321,32 @@ static int cfgfile_read_rom_settings(const struct expansionboardsettings *ebs, c return settings; } -static void cfgfile_write_rom_settings(const struct expansionboardsettings *ebs, TCHAR *buf, int settings, const TCHAR *settingstring) +static void cfgfile_write_rom_settings(const struct expansionboardsettings* ebs, TCHAR* buf, int settings, const TCHAR* settingstring) { int bitcnt = 0; int sstr = 0; for (int j = 0; ebs[j].name; j++) { - const struct expansionboardsettings *eb = &ebs[j]; + const struct expansionboardsettings* eb = &ebs[j]; bitcnt += eb->bitshift; if (eb->type == EXPANSIONBOARD_STRING) { if (settingstring) { TCHAR tmp[MAX_DPATH]; - const TCHAR *p = settingstring; + const TCHAR* p = settingstring; for (int i = 0; i < sstr; i++) { p += _tcslen(p) + 1; } if (buf[0]) _tcscat(buf, _T(",")); - TCHAR *cs = cfgfile_escape_min(p); + TCHAR* cs = cfgfile_escape_min(p); _stprintf(tmp, _T("%s=%s"), eb->configname, cs); _tcscat(buf, tmp); xfree(cs); sstr++; } - } else if (eb->type == EXPANSIONBOARD_MULTI) { + } + else if (eb->type == EXPANSIONBOARD_MULTI) { int itemcnt = -1; - const TCHAR *p = eb->configname; + const TCHAR* p = eb->configname; while (p[0]) { itemcnt++; p += _tcslen(p) + 1; @@ -1373,7 +1374,8 @@ static void cfgfile_write_rom_settings(const struct expansionboardsettings *ebs, _tcscat(buf, _T(",")); _tcscat(buf, p); bitcnt += bits; - } else { + } + else { int value = settings; if (eb->invert) value ^= 0x7fffffff; @@ -1386,14 +1388,13 @@ static void cfgfile_write_rom_settings(const struct expansionboardsettings *ebs, } } } -#endif static bool is_custom_romboard(struct boardromconfig *br) { return ((br->device_type & ROMTYPE_MASK) == ROMTYPE_UAEBOARDZ2 || (br->device_type & ROMTYPE_MASK) == ROMTYPE_UAEBOARDZ3); } -static void cfgfile_write_board_rom(struct uae_prefs *prefs, struct zfile *f, struct multipath *mp, struct boardromconfig *br) +static void cfgfile_write_board_rom(struct uae_prefs* prefs, struct zfile* f, struct multipath* mp, struct boardromconfig* br) { TCHAR buf[MAX_DPATH]; TCHAR name[256]; @@ -1405,26 +1406,25 @@ static void cfgfile_write_board_rom(struct uae_prefs *prefs, struct zfile *f, st if (!ert) return; for (int i = 0; i < MAX_BOARD_ROMS; i++) { - struct romconfig *rc = &br->roms[i]; + struct romconfig* rc = &br->roms[i]; if (br->device_num == 0) _tcscpy(name, ert->name); else _stprintf(name, _T("%s-%d"), ert->name, br->device_num + 1); if (i == 0 || _tcslen(br->roms[i].romfile)) { _stprintf(buf, _T("%s%s_rom_file"), name, i ? _T("_ext") : _T("")); - cfgfile_write_rom (f, mp, br->roms[i].romfile, buf); + cfgfile_write_rom(f, mp, br->roms[i].romfile, buf); if (rc->romident[0]) { _stprintf(buf, _T("%s%s_rom"), name, i ? _T("_ext") : _T("")); - cfgfile_dwrite_str (f, buf, rc->romident); + cfgfile_dwrite_str(f, buf, rc->romident); } -#ifndef AMIBERRY if (rc->autoboot_disabled || rc->inserted || ert->subtypes || ert->settings || ert->id_jumper || br->device_order > 0 || is_custom_romboard(br)) { - TCHAR buf2[256], *p; + TCHAR buf2[256], * p; buf2[0] = 0; p = buf2; _stprintf(buf, _T("%s%s_rom_options"), name, i ? _T("_ext") : _T("")); if (ert->subtypes) { - const struct expansionsubromtype *srt = ert->subtypes; + const struct expansionsubromtype* srt = ert->subtypes; int k = rc->subtype; while (k && srt[1].name) { srt++; @@ -1435,7 +1435,7 @@ static void cfgfile_write_board_rom(struct uae_prefs *prefs, struct zfile *f, st if (br->device_order > 0 && prefs->autoconfig_custom_sort) { if (buf2[0]) _tcscat(buf2, _T(",")); - TCHAR *p2 = buf2 + _tcslen(buf2); + TCHAR* p2 = buf2 + _tcslen(buf2); _stprintf(p2, _T("order=%d"), br->device_order); } if (rc->autoboot_disabled) { @@ -1443,10 +1443,42 @@ static void cfgfile_write_board_rom(struct uae_prefs *prefs, struct zfile *f, st _tcscat(buf2, _T(",")); _tcscat(buf2, _T("autoboot_disabled=true")); } + if (rc->inserted) { + if (buf2[0]) + _tcscat(buf2, _T(",")); + _tcscat(buf2, _T("inserted=true")); + } + if (ert->id_jumper) { + TCHAR tmp[256]; + _stprintf(tmp, _T("id=%d"), rc->device_id); + if (buf2[0]) + _tcscat(buf2, _T(",")); + _tcscat(buf2, tmp); + } + if ((rc->device_settings || rc->configtext[0]) && ert->settings) { + cfgfile_write_rom_settings(ert->settings, buf2, rc->device_settings, rc->configtext); + } + if (is_custom_romboard(br)) { + if (rc->manufacturer) { + if (buf2[0]) + _tcscat(buf2, _T(",")); + TCHAR* p2 = buf2 + _tcslen(buf2); + _stprintf(p2, _T("mid=%u,pid=%u"), rc->manufacturer, rc->product); + } + if (rc->autoconfig[0]) { + uae_u8* ac = rc->autoconfig; + if (buf2[0]) + _tcscat(buf2, _T(",")); + TCHAR* p2 = buf2 + _tcslen(buf2); + _stprintf(p2, _T("data=%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x"), + ac[0], ac[1], ac[2], ac[3], ac[4], ac[5], ac[6], ac[7], + ac[8], ac[9], ac[10], ac[11], ac[12], ac[13], ac[14], ac[15]); + } + } if (buf2[0]) cfgfile_dwrite_str(f, buf, buf2); } -#endif + if (rc->board_ram_size) { _stprintf(buf, _T("%s%s_mem_size"), name, i ? _T("_ext") : _T("")); cfgfile_write(f, buf, _T("%d"), rc->board_ram_size / 0x40000); @@ -1956,9 +1988,7 @@ void cfgfile_save_options(struct zfile* f, struct uae_prefs* p, int type) #endif cfgfile_dwrite_str(f, _T("absolute_mouse"), abspointers[p->input_tablet]); - write_inputdevice_config(p, f); - cfgfile_write_str(f, _T("kbd_lang"), (p->keyboard_lang == KBD_LANG_DE ? _T("de") : p->keyboard_lang == KBD_LANG_DK @@ -1995,9 +2025,9 @@ void cfgfile_save_options(struct zfile* f, struct uae_prefs* p, int type) if (p->romextident[0]) cfgfile_write_str(f, _T("kickstart_ext_rom="), p->romextident); - for (int i = 0; i < MAX_EXPANSION_BOARDS; i++) + for (auto& i : p->expansionboard) { - cfgfile_write_board_rom(p, f, &p->path_rom, &p->expansionboard[i]); + cfgfile_write_board_rom(p, f, &p->path_rom, &i); } cfgfile_write_str(f, _T("flash_file"), p->flashfile); @@ -2061,6 +2091,7 @@ void cfgfile_save_options(struct zfile* f, struct uae_prefs* p, int type) cfgfile_dwrite_str(f, _T("filesys_inject_icons_tool"), p->filesys_inject_icons_tool); #endif cfgfile_dwrite_bool(f, _T("harddrive_write_protect"), p->harddrive_read_only); + cfgfile_write_str(f, _T("scsi"), scsimode[p->scsi]); cfg_write(_T("; "), f); cfg_write(_T("; *** CD / CD32"), f); @@ -2135,7 +2166,7 @@ void cfgfile_save_options(struct zfile* f, struct uae_prefs* p, int type) cfgfile_dwrite_bool(f, _T("z3_autoconfig"), p->cs_z3autoconfig); cfgfile_dwrite_str(f, _T("z3mapping"), z3mapping[p->z3_mapping_mode]); - for (int i = 0; i < MAX_RAM_BOARDS; i++) + for (i = 0; i < MAX_RAM_BOARDS; i++) { if (p->fastmem[i].size < 0x100000 && p->fastmem[i].size) { @@ -2157,7 +2188,7 @@ void cfgfile_save_options(struct zfile* f, struct uae_prefs* p, int type) } cfgfile_write(f, _T("a3000mem_size"), _T("%d"), p->mbresmem_low_size / 0x100000); cfgfile_write(f, _T("mbresmem_size"), _T("%d"), p->mbresmem_high_size / 0x100000); - for (int i = 0; i < MAX_RAM_BOARDS; i++) + for (i = 0; i < MAX_RAM_BOARDS; i++) { if (i == 0 || p->z3fastmem[i].size) { @@ -2174,9 +2205,9 @@ void cfgfile_save_options(struct zfile* f, struct uae_prefs* p, int type) cfgfile_write_bool(f, _T("gfxcard_hardware_vblank"), p->rtg_hardwareinterrupt); cfgfile_write_bool(f, _T("gfxcard_hardware_sprite"), p->rtg_hardwaresprite); cfgfile_write_bool(f, _T("gfxcard_multithread"), p->rtg_multithread); - for (int i = 0; i < MAX_RTG_BOARDS; i++) + for (i = 0; i < MAX_RTG_BOARDS; i++) { - struct rtgboardconfig* rbc = &p->rtgboards[i]; + auto* rbc = &p->rtgboards[i]; if (rbc->rtgmem_size) { if (i > 0) @@ -2222,9 +2253,9 @@ void cfgfile_save_options(struct zfile* f, struct uae_prefs* p, int type) if (p->chipset_refreshrate > 0) cfgfile_write(f, _T("chipset_refreshrate"), _T("%f"), p->chipset_refreshrate); - for (int i = 0; i < MAX_CHIPSET_REFRESH_TOTAL; i++) + for (i = 0; i < MAX_CHIPSET_REFRESH_TOTAL; i++) { - struct chipset_refresh* cr = &p->cr[i]; + auto* cr = &p->cr[i]; if (!cr->inuse) continue; cr->index = i; @@ -2232,7 +2263,7 @@ void cfgfile_save_options(struct zfile* f, struct uae_prefs* p, int type) _tcscpy(tmp, _T("0")); else _stprintf(tmp, _T("%f"), cr->rate); - TCHAR* s = tmp + _tcslen(tmp); + auto* s = tmp + _tcslen(tmp); if (cr->label[0] > 0 && i < MAX_CHIPSET_REFRESH) s += _stprintf(s, _T(",t=%s"), cr->label); if (cr->horiz > 0) @@ -2329,16 +2360,13 @@ void cfgfile_save_options(struct zfile* f, struct uae_prefs* p, int type) cfgfile_write_bool(f, _T("bsdsocket_emu"), p->socket_emu); cfgfile_dwrite_str(f, _T("boot_rom_uae"), uaebootrom[p->boot_rom]); cfgfile_dwrite_str(f, _T("uaeboard"), uaeboard[p->uaeboard]); + cfgfile_dwrite_bool(f, _T("magic_mouse"), (p->input_mouse_untrap& MOUSEUNTRAP_MAGIC) != 0); #ifdef AMIBERRY cfg_write(_T("; "), f); cfg_write(_T("; *** WHDLoad Booter. Options"), f); cfg_write(_T("; "), f); - //cfgfile_dwrite_bool , cfgfile_dwrite , cfgfile_dwrite_str - // i think these ^^ will only write if there is a variable to be written - // which we will want, after testing. - cfgfile_write_str(f, _T("whdload_slave"), p->whdbootprefs.slave); cfgfile_write_bool(f, _T("whdload_showsplash"), p->whdbootprefs.showsplash); cfgfile_write_bool(f, _T("whdload_buttonwait"), p->whdbootprefs.buttonwait); @@ -3103,6 +3131,14 @@ static int cfgfile_parse_host(struct uae_prefs* p, TCHAR* option, TCHAR* value) || cfgfile_strval(option, value, _T("absolute_mouse"), &p->input_tablet, abspointers, 0)) return 1; + if (cfgfile_yesno(option, value, _T("magic_mouse"), &vb)) { + if (vb) + p->input_mouse_untrap |= MOUSEUNTRAP_MAGIC; + else + p->input_mouse_untrap &= ~MOUSEUNTRAP_MAGIC; + return 1; + } + if (_tcscmp(option, _T("gfx_width_windowed")) == 0) { return 1; @@ -3568,7 +3604,27 @@ struct uaedev_config_data* add_filesys_config(struct uae_prefs* p, int index, st return nullptr; } } - + for (;;) { + if (ci->type == UAEDEV_CD) { + if (ci->controller_type >= HD_CONTROLLER_TYPE_IDE_FIRST && ci->controller_type <= HD_CONTROLLER_TYPE_IDE_LAST) + break; + if (ci->controller_type >= HD_CONTROLLER_TYPE_SCSI_FIRST && ci->controller_type <= HD_CONTROLLER_TYPE_SCSI_LAST) + break; + } + else if (ci->type == UAEDEV_TAPE) { + if (ci->controller_type == HD_CONTROLLER_TYPE_UAE) + break; + if (ci->controller_type >= HD_CONTROLLER_TYPE_IDE_FIRST && ci->controller_type <= HD_CONTROLLER_TYPE_IDE_LAST) + break; + if (ci->controller_type >= HD_CONTROLLER_TYPE_SCSI_FIRST && ci->controller_type <= HD_CONTROLLER_TYPE_SCSI_LAST) + break; + } + else { + break; + } + return NULL; + } + if (index < 0) { if (ci->controller_type != HD_CONTROLLER_TYPE_UAE) @@ -3621,6 +3677,12 @@ struct uaedev_config_data* add_filesys_config(struct uae_prefs* p, int index, st } } } + if (ci->type == UAEDEV_CD) { + for (i = 0; i < p->mountitems; i++) { + if (p->mountconfig[i].ci.type == ci->type) + return NULL; + } + } uci = getuci(p); uci->configoffset = -1; uci->unitnum = -1; @@ -3635,7 +3697,7 @@ struct uaedev_config_data* add_filesys_config(struct uae_prefs* p, int index, st memcpy(&uci->ci, ci, sizeof (struct uaedev_config_info)); validatedevicename(uci->ci.devname, nullptr); validatevolumename(uci->ci.volname, nullptr); - if (!uci->ci.devname[0]) + if (!uci->ci.devname[0] && ci->type != UAEDEV_CD && ci->type != UAEDEV_TAPE) { TCHAR base[32]; TCHAR base2[32]; @@ -3745,9 +3807,15 @@ static void get_filesys_controller(const TCHAR* hdc, int* type, int* typenum, in { if ((expansionroms[j].romtype & ROMTYPE_MASK) == hdcontrollers[i].romtype) { - hdcv = hdcv == HD_CONTROLLER_TYPE_IDE_AUTO - ? j + HD_CONTROLLER_TYPE_IDE_EXPANSION_FIRST - : j + HD_CONTROLLER_TYPE_SCSI_EXPANSION_FIRST; + if (hdcv == HD_CONTROLLER_TYPE_IDE_AUTO) { + hdcv = j + HD_CONTROLLER_TYPE_IDE_EXPANSION_FIRST; + } + else if (hdcv == HD_CONTROLLER_TYPE_SCSI_AUTO) { + hdcv = j + HD_CONTROLLER_TYPE_SCSI_EXPANSION_FIRST; + } + else { + hdcv = j + HD_CONTROLLER_TYPE_CUSTOM_FIRST; + } break; } } @@ -3772,14 +3840,15 @@ static void get_filesys_controller(const TCHAR* hdc, int* type, int* typenum, in const struct expansionromtype* ert = &expansionroms[i]; if (_tcslen(ert->name) == len && !_tcsnicmp(ext, ert->name, len)) { - if (hdcv == HD_CONTROLLER_TYPE_IDE_AUTO) - { + if (hdcv == HD_CONTROLLER_TYPE_IDE_AUTO) { hdcv = HD_CONTROLLER_TYPE_IDE_EXPANSION_FIRST + i; } - else - { + else if (hdcv == HD_CONTROLLER_TYPE_SCSI_AUTO) { hdcv = HD_CONTROLLER_TYPE_SCSI_EXPANSION_FIRST + i; } + else { + hdcv = HD_CONTROLLER_TYPE_CUSTOM_FIRST + i; + } break; } } @@ -4011,7 +4080,20 @@ static int cfgfile_parse_newfilesys(struct uae_prefs* p, int nr, int type, TCHAR else if (cfgfile_option_find(tmpp2, _T("ATA1"))) uci.unit_feature_level = HD_LEVEL_ATA_1; } - uci.type = UAEDEV_HDF; + if (type == 2) { + uci.device_emu_unit = unit; + uci.blocksize = 2048; + uci.readonly = true; + uci.type = UAEDEV_CD; + } + else if (type == 3) { + uci.device_emu_unit = unit; + uci.blocksize = 512; + uci.type = UAEDEV_TAPE; + } + else { + uci.type = UAEDEV_HDF; + } } else { @@ -4303,18 +4385,66 @@ static bool cfgfile_read_board_rom(struct uae_prefs *p, const TCHAR *option, con if (cfgfile_string(option, value, buf, buf2, sizeof buf2 / sizeof (TCHAR))) { brc = get_device_rom(p, ert->romtype, j, &idx); - if (brc) - { + if (brc) { TCHAR* p; - if (cfgfile_option_bool(buf2, _T("autoboot_disabled")) == 1) - { + if (cfgfile_option_bool(buf2, _T("autoboot_disabled")) == 1) { brc->roms[idx].autoboot_disabled = true; } + if (cfgfile_option_bool(buf2, _T("inserted")) == 1) { + brc->roms[idx].inserted = true; + } p = cfgfile_option_get(buf2, _T("order")); - if (p) - { + if (p) { brc->device_order = _tstol(p); } + xfree(p); + if (ert->settings) { + brc->roms[idx].device_settings = cfgfile_read_rom_settings(ert->settings, buf2, brc->roms[idx].configtext); + } + if (ert->id_jumper) { + p = cfgfile_option_get(buf2, _T("id")); + if (p) { + brc->roms[idx].device_id = _tstol(p); + xfree(p); + } + } + if (ert->subtypes) { + const struct expansionsubromtype* srt = ert->subtypes; + TCHAR tmp[MAX_DPATH]; + p = tmp; + *p = 0; + while (srt->name) { + _tcscpy(p, srt->configname); + p += _tcslen(p) + 1; + p[0] = 0; + srt++; + } + int v = cfgfile_option_select(buf2, _T("subtype"), tmp); + if (v >= 0) + brc->roms[idx].subtype = v; + } + p = cfgfile_option_get(buf2, _T("mid")); + if (p) { + brc->roms[idx].manufacturer = _tstol(p); + xfree(p); + } + p = cfgfile_option_get(buf2, _T("pid")); + if (p) { + brc->roms[idx].product = _tstol(p); + xfree(p); + } + p = cfgfile_option_get(buf2, _T("data")); + if (p && _tcslen(p) >= 3 * 16 - 1) { + for (int i = 0; i < sizeof brc->roms[idx].autoconfig; i++) { + TCHAR* s2 = &p[i * 3]; + if (i + 1 < sizeof brc->roms[idx].autoconfig && s2[2] != '.') + break; + TCHAR* endptr; + p[2] = 0; + brc->roms[idx].autoconfig[i] = (uae_u8)_tcstol(s2, &endptr, 16); + } + } + xfree(p); } return true; } @@ -4353,6 +4483,8 @@ static void addbcromtype(struct uae_prefs* p, int romtype, bool add, const TCHAR static int cfgfile_parse_hardware(struct uae_prefs* p, const TCHAR* option, TCHAR* value) { int tmpval, dummyint, i; + uae_u32 utmpval; + bool dummybool; TCHAR tmpbuf[CONFIG_BLEN]; if (cfgfile_yesno(option, value, _T("immediate_blits"), &p->immediate_blits) @@ -4387,6 +4519,8 @@ static int cfgfile_parse_hardware(struct uae_prefs* p, const TCHAR* option, TCHA || cfgfile_yesno(option, value, _T("keyboard_connected"), &p->keyboard_connected) || cfgfile_yesno(option, value, _T("lightpen_crosshair"), &p->lightpen_crosshair) + || cfgfile_yesno(option, value, _T("kickshifter"), &p->kickshifter) + || cfgfile_yesno(option, value, _T("ks_write_enabled"), &p->rom_readwrite) || cfgfile_yesno(option, value, _T("ntsc"), &p->ntscmode) || cfgfile_yesno(option, value, _T("cpu_compatible"), &p->cpu_compatible) || cfgfile_yesno(option, value, _T("cpu_24bit_addressing"), &p->address_space_24) @@ -4421,6 +4555,7 @@ static int cfgfile_parse_hardware(struct uae_prefs* p, const TCHAR* option, TCHA if (cfgfile_strval(option, value, _T("rtc"), &p->cs_rtc, rtctype, 0) || cfgfile_strval(option, value, _T("ciaatod"), &p->cs_ciaatod, ciaatodmode, 0) + || cfgfile_strval(option, value, _T("scsi"), &p->scsi, scsimode, 0) || cfgfile_strval(option, value, _T("collision_level"), &p->collision_level, collmode, 0) || cfgfile_strval(option, value, _T("waiting_blits"), &p->waiting_blits, waitblits, 0) || cfgfile_strval(option, value, _T("floppy_auto_extended_adf"), &p->floppy_auto_ext2, autoext2, 0) @@ -4438,6 +4573,7 @@ static int cfgfile_parse_hardware(struct uae_prefs* p, const TCHAR* option, TCHA if (cfgfile_path (option, value, _T("kickstart_rom_file"), p->romfile, sizeof p->romfile / sizeof (TCHAR), &p->path_rom) || cfgfile_path (option, value, _T("kickstart_ext_rom_file"), p->romextfile, sizeof p->romextfile / sizeof (TCHAR), &p->path_rom) + || cfgfile_path(option, value, _T("kickstart_ext_rom_file2"), p->romextfile2, sizeof p->romextfile2 / sizeof(TCHAR), &p->path_rom) || cfgfile_rom(option, value, _T("kickstart_rom_file_id"), p->romfile, sizeof p->romfile / sizeof(TCHAR)) || cfgfile_rom (option, value, _T("kickstart_ext_rom_file_id"), p->romextfile, sizeof p->romextfile / sizeof (TCHAR)) || cfgfile_string (option, value, _T("flash_file"), p->flashfile, sizeof p->flashfile / sizeof (TCHAR)) @@ -4461,11 +4597,11 @@ static int cfgfile_parse_hardware(struct uae_prefs* p, const TCHAR* option, TCHA return 1; } - //if (cfgfile_intval(option, value, _T("cdtvramcard"), &utmpval, 1)) { - // if (utmpval) - // addbcromtype(p, ROMTYPE_CDTVSRAM, true, NULL, 0); - // return 1; - //} + if (cfgfile_intval(option, value, _T("cdtvramcard"), &utmpval, 1)) { + if (utmpval) + addbcromtype(p, ROMTYPE_CDTVSRAM, true, NULL, 0); + return 1; + } if (cfgfile_yesno(option, value, _T("scsi_cdtv"), &tmpval)) { if (tmpval) @@ -4485,6 +4621,20 @@ static int cfgfile_parse_hardware(struct uae_prefs* p, const TCHAR* option, TCHA addbcromtype(p, ROMTYPE_MB_IDE, true, nullptr, 0); return 1; } + if (cfgfile_yesno(option, value, _T("scsi_a3000"), &dummybool)) { + if (dummybool) { + addbcromtype(p, ROMTYPE_SCSI_A3000, true, NULL, 0); + p->cs_mbdmac = 1; + } + return 1; + } + if (cfgfile_yesno(option, value, _T("scsi_a4000t"), &dummybool)) { + if (dummybool) { + addbcromtype(p, ROMTYPE_SCSI_A4000T, true, NULL, 0); + p->cs_mbdmac = 2; + } + return 1; + } if (cfgfile_yesno(option, value, _T("cd32fmv"), &p->cs_cd32fmv)) { if (p->cs_cd32fmv) @@ -4851,7 +5001,6 @@ static void calcformula(struct uae_prefs* prefs, TCHAR* in) } TCHAR store = in[i]; in[i] = 0; - //write_log (_T("'%s'\n"), start); if (!getconfigstoreline(start, configvalue)) return; _tcscpy(p, configvalue); @@ -5620,7 +5769,26 @@ int parse_cmdline_option(struct uae_prefs* p, TCHAR c, const TCHAR* arg) else if (0 == _tcsicmp(arg, _T("es"))) p->keyboard_lang = KBD_LANG_ES; break; + //case 'O': parse_gfx_specs(p, arg); break; + case 'd': + if (_tcschr(arg, 'S') != NULL || _tcschr(arg, 's')) { + write_log(_T(" Serial on demand.\n")); + p->serial_demand = 1; + } + if (_tcschr(arg, 'P') != NULL || _tcschr(arg, 'p')) { + write_log(_T(" Parallel on demand.\n")); + p->parallel_demand = 1; + } + break; + + case 'H': + p->color_mode = _tstoi(arg); + if (p->color_mode < 0) { + write_log(_T("Bad color mode selected. Using default.\n")); + p->color_mode = 0; + } + break; default: write_log (_T("Unknown option `-%c'!\n"), c); break; @@ -5815,6 +5983,47 @@ end: return err; } +static int execcmdline(struct uae_prefs* prefs, int argv, TCHAR** argc, TCHAR* out, int outsize, bool confonly) +{ + int ret = 0; + bool changed = false; + for (int i = 0; i < argv; i++) { + if (i + 2 <= argv) { + if (!confonly) { + if (!_tcsicmp(argc[i], _T("shellexec"))) { + uae_ShellExecute(argc[i + 1]); + } + //else if (!_tcsicmp(argc[i], _T("dbg"))) { + // debug_parser(argc[i + 1], out, outsize); + //} + else if (!inputdevice_uaelib(argc[i], argc[i + 1])) { + if (!cfgfile_parse_uaelib_option(prefs, argc[i], argc[i + 1], 0)) { + if (!cfgfile_parse_option(prefs, argc[i], argc[i + 1], 0)) { + ret = 5; + break; + } + } + changed = true; + } + } + else { + if (!cfgfile_parse_option(prefs, argc[i], argc[i + 1], 0)) { + ret = 5; + break; + } + changed = true; + } + i++; + } + } + if (changed) { + inputdevice_fix_prefs(prefs, false); + set_config_changed(); + set_special(SPCFLAG_MODE_CHANGE); + } + return 0; +} + uae_u32 cfgfile_modify(uae_u32 index, const TCHAR* parms, uae_u32 size, TCHAR* out, uae_u32 outsize) { TCHAR* p; @@ -5879,27 +6088,7 @@ uae_u32 cfgfile_modify(uae_u32 index, const TCHAR* parms, uae_u32 size, TCHAR* o goto end; } - for (i = 0; i < argv; i++) - { - if (i + 2 <= argv) - { - if (!inputdevice_uaelib(argc[i], argc[i + 1])) - { - if (!cfgfile_parse_uaelib_option(&changed_prefs, argc[i], argc[i + 1], 0)) - { - if (!cfgfile_parse_option(&changed_prefs, argc[i], argc[i + 1], 0)) - { - err = 5; - break; - } - } - } - inputdevice_fix_prefs(&changed_prefs, false); - set_config_changed(); - set_special(SPCFLAG_MODE_CHANGE); - i++; - } - } + err = execcmdline(&changed_prefs, argv, argc, out, outsize, false); end: for (i = 0; i < argv; i++) xfree (argc[i]);