def update_kickstart_in_config_dict(cls, config_dict): print("update_kickstart_in_config") model = config_dict.setdefault( "amiga_model", cls.default_config["amiga_model"] ) kickstart_file = config_dict.setdefault("kickstart_file", "") if kickstart_file: config_dict["x_kickstart_file"] = config_dict["kickstart_file"] if kickstart_file == "internal": config_dict["x_kickstart_file_sha1"] = Amiga.INTERNAL_ROM_SHA1 else: # FIXME: set checksum pass else: checksums = Amiga.get_model_config(model)["kickstarts"] for checksum in checksums: path = fsgs.file.find_by_sha1(checksum) if path: config_dict["x_kickstart_file"] = path config_dict["x_kickstart_file_sha1"] = checksum break else: print("WARNING: no suitable kickstart file found") config_dict["x_kickstart_file"] = "" config_dict["x_kickstart_file_sha1"] = Amiga.INTERNAL_ROM_SHA1 if config_dict.setdefault("kickstart_ext_file", ""): config_dict["x_kickstart_ext_file"] = config_dict[ "kickstart_ext_file" ] # FIXME: set checksum else: checksums = Amiga.get_model_config(model)["ext_roms"] if len(checksums) == 0: config_dict["x_kickstart_ext_file"] = "" config_dict["x_kickstart_ext_file_sha1"] = "" else: for checksum in checksums: path = fsgs.file.find_by_sha1(checksum) if path: config_dict["x_kickstart_ext_file"] = path config_dict["x_kickstart_ext_file_sha1"] = checksum break else: # print("WARNING: no suitable kickstart ext file found") config_dict["x_kickstart_ext_file"] = "" config_dict["x_kickstart_ext_file_sha1"] = ""
def update(self): amiga = Amiga.get_model_config(self.model) for sha1 in amiga["kickstarts"]: if fsgs.file.find_by_sha1(sha1): self.icon.set_image(self.ok_image) return self.icon.set_image(self.na_image)
def update_kickstart_in_config_dict(cls, config_dict): print("update_kickstart_in_config") model = config_dict.setdefault("amiga_model", cls.default_config["amiga_model"]) kickstart_file = config_dict.setdefault("kickstart_file", "") if kickstart_file: config_dict["x_kickstart_file"] = config_dict["kickstart_file"] if kickstart_file == "internal": config_dict["x_kickstart_file_sha1"] = Amiga.INTERNAL_ROM_SHA1 else: # FIXME: set checksum pass else: checksums = Amiga.get_model_config(model)["kickstarts"] for checksum in checksums: path = fsgs.file.find_by_sha1(checksum) if path: config_dict["x_kickstart_file"] = path config_dict["x_kickstart_file_sha1"] = checksum break else: print("WARNING: no suitable kickstart file found") config_dict["x_kickstart_file"] = "" config_dict["x_kickstart_file_sha1"] = Amiga.INTERNAL_ROM_SHA1 if config_dict.setdefault("kickstart_ext_file", ""): config_dict["x_kickstart_ext_file"] = config_dict[ "kickstart_ext_file"] # FIXME: set checksum else: checksums = Amiga.get_model_config(model)["ext_roms"] if len(checksums) == 0: config_dict["x_kickstart_ext_file"] = "" config_dict["x_kickstart_ext_file_sha1"] = "" else: for checksum in checksums: path = fsgs.file.find_by_sha1(checksum) if path: config_dict["x_kickstart_ext_file"] = path config_dict["x_kickstart_ext_file_sha1"] = checksum break else: # print("WARNING: no suitable kickstart ext file found") config_dict["x_kickstart_ext_file"] = "" config_dict["x_kickstart_ext_file_sha1"] = ""
def update_media_type(self): if self.__platform in AMIGA_PLATFORMS: self.set_cd_mode(Amiga.is_cd_based(LauncherConfig)) elif self.__platform in [Platform.C64]: if self._c64_model == C64_MODEL_C64C_1541_II: self.set_mode(self.FLOPPY_MODE) else: self.set_mode(self.TAPE_MODE) elif self.__platform in [Platform.CPC]: if self._cpc_model == CPC_MODEL_464: self.set_mode(self.TAPE_MODE) else: self.set_mode(self.FLOPPY_MODE) elif self.__platform in [Platform.DOS]: self.set_mode(self.FLOPPY_MODE) elif self.__platform in [Platform.PSX]: self.set_mode(self.CD_MODE) elif self.__platform in [Platform.ST]: self.set_mode(self.FLOPPY_MODE) elif self.__platform in [Platform.ZXS]: if self._zxs_model == ZXS_MODEL_PLUS3: self.set_mode(self.FLOPPY_MODE) else: self.set_mode(self.TAPE_MODE) else: self.set_mode(self.CARTRIDGE_MODE) if self._main: if self.__platform == Platform.A7800: self.selectors[1].hide() self._a78_header_widget.show() self._command_widget.hide() self._ines_header_widget.hide() elif self.__platform in [Platform.CPC, Platform.DOS, Platform.ZXS]: self.selectors[1].hide() self._a78_header_widget.hide() self._command_widget.show() self._ines_header_widget.hide() elif self.__platform == Platform.NES: # if self.selectors[1].is_visible(): self.selectors[1].hide() self._a78_header_widget.hide() self._command_widget.hide() self._ines_header_widget.show() else: # if not self.selectors[1].is_visible(): self.selectors[1].show() self._command_widget.hide() self._a78_header_widget.hide() self._ines_header_widget.hide() self.layout.update()
def kickstart_startup_scan(cls): if cls._kickstart_scanned: return cls._kickstart_scanned = True print("kickstart_startup_scan") kickstarts_dir = FSGSDirectories.get_kickstarts_dir() if LauncherSettings.get( "kickstarts_dir_mtime" ) == cls.get_dir_mtime_str(kickstarts_dir): print("... mtime not changed") else: file_database = FileDatabase.get_instance() print("... database.find_local_roms") local_roms = file_database.find_local_roms() print("... walk kickstarts_dir") for dir_path, dir_names, file_names in os.walk(kickstarts_dir): for file_name in file_names: if not file_name.lower().endswith( ".rom" ) and not file_name.lower().endswith(".bin"): continue path = Paths.join(dir_path, file_name) if path in local_roms: local_roms[path] = None # already exists in database continue print("[startup] adding kickstart", path) ROMManager.add_rom_to_database(path, file_database) print(local_roms) for path, file_id in local_roms.items(): if file_id is not None: print("[startup] removing kickstart", path) file_database.delete_file(id=file_id) print("... commit") file_database.commit() LauncherSettings.set( "kickstarts_dir_mtime", cls.get_dir_mtime_str(kickstarts_dir) ) amiga = Amiga.get_model_config("A500") for sha1 in amiga["kickstarts"]: if fsgs.file.find_by_sha1(sha1=sha1): break else: file_database = FileDatabase.get_instance() cls.amiga_forever_kickstart_scan() file_database.commit()
def kickstart_startup_scan(cls): if cls._kickstart_scanned: return cls._kickstart_scanned = True print("kickstart_startup_scan") kickstarts_dir = FSGSDirectories.get_kickstarts_dir() if LauncherSettings.get("kickstarts_dir_mtime") == \ cls.get_dir_mtime_str(kickstarts_dir): print("... mtime not changed") else: file_database = FileDatabase.get_instance() print("... database.find_local_roms") local_roms = file_database.find_local_roms() print("... walk kickstarts_dir") for dir_path, dir_names, file_names in os.walk(kickstarts_dir): for file_name in file_names: if not file_name.lower().endswith(".rom") and not \ file_name.lower().endswith(".bin"): continue path = Paths.join(dir_path, file_name) if path in local_roms: local_roms[path] = None # already exists in database continue print("[startup] adding kickstart", path) ROMManager.add_rom_to_database(path, file_database) print(local_roms) for path, file_id in local_roms.items(): if file_id is not None: print("[startup] removing kickstart", path) file_database.delete_file(id=file_id) print("... commit") file_database.commit() LauncherSettings.set( "kickstarts_dir_mtime", cls.get_dir_mtime_str(kickstarts_dir)) amiga = Amiga.get_model_config("A500") for sha1 in amiga["kickstarts"]: if fsgs.file.find_by_sha1(sha1=sha1): break else: file_database = FileDatabase.get_instance() cls.amiga_forever_kickstart_scan() file_database.commit()
def on_sub_model_changed(self): print("ModelGroup.on_sub_model_change\n") if self.sub_model_updating: print("sub model list is currently updating") return index = self.sub_model_choice.get_index() # if index == 0: # # The default model (A500) can be specified with the empty string # model = "" # else: model = self.model_ids[self.model_choice.get_index()] sub_model = self.sub_model_ids[index] if sub_model: LauncherConfig.set("amiga_model", model + "/" + sub_model) else: LauncherConfig.set("amiga_model", model) if Amiga.is_cd_based(LauncherConfig): FloppyManager.clear_all() else: CDManager.clear_all()
def update_media_type(self): if self.__platform in AMIGA_PLATFORMS: self.set_cd_mode(Amiga.is_cd_based(LauncherConfig)) elif self.__platform in [Platform.ATARI]: self.set_mode(self.FLOPPY_MODE) elif self.__platform in [Platform.C64]: if self._c64_model == C64_MODEL_C64C_1541_II: self.set_mode(self.FLOPPY_MODE) else: self.set_mode(self.TAPE_MODE) elif self.__platform in [Platform.CPC]: self.set_mode(self.TAPE_MODE) elif self.__platform in [Platform.DOS]: self.set_mode(self.FLOPPY_MODE) elif self.__platform in [Platform.PSX]: self.set_mode(self.CD_MODE) elif self.__platform in [Platform.ZXS]: if self._zxs_model == ZXS_MODEL_PLUS3: self.set_mode(self.FLOPPY_MODE) else: self.set_mode(self.TAPE_MODE) else: self.set_mode(self.CARTRIDGE_MODE) if self._main: if self.__platform == Platform.A7800: self.selectors[1].hide() self._a78_header_widget.show() self._ines_header_widget.hide() elif self.__platform == Platform.NES: # if self.selectors[1].is_visible(): self.selectors[1].hide() self._a78_header_widget.hide() self._ines_header_widget.show() else: # if not self.selectors[1].is_visible(): self.selectors[1].show() self._a78_header_widget.hide() self._ines_header_widget.hide() self.layout.update()
def prepare(self): print("FSUAEAmigaDriver.prepare") if not self.options["joystick_port_0_mode"]: self.options["joystick_port_0_mode"] = "mouse" if not self.options["joystick_port_1_mode"]: if self.options["amiga_model"].startswith("CD32"): self.options["joystick_port_1_mode"] = "cd32 gamepad" else: self.options["joystick_port_1_mode"] = "joystick" if not self.options["joystick_port_2_mode"]: self.options["joystick_port_2_mode"] = "none" if not self.options["joystick_port_3_mode"]: self.options["joystick_port_3_mode"] = "none" from launcher.devicemanager import DeviceManager devices = DeviceManager.get_devices_for_ports(self.options) for port in range(4): key = "joystick_port_{0}".format(port) if not self.options[key]: # key not set, use calculated default value self.options[key] = devices[port].id for remove_key in [ "database_username", "database_password", "database_username", "database_email", "database_auth", "device_id", ]: if remove_key in self.options: del self.options[remove_key] # overwrite netplay config if self.options["__netplay_host"]: self.options["netplay_server"] = self.options["__netplay_host"] if self.options["__netplay_password"]: self.options["netplay_password"] = self.options[ "__netplay_password"] if self.options["__netplay_port"]: self.options["netplay_port"] = self.options["__netplay_port"] # copy actual kickstart options from x_ options self.options["kickstart_file"] = self.options["x_kickstart_file"] self.options["kickstart_ext_file"] = self.options[ "x_kickstart_ext_file"] if not self.options["kickstart_file"]: # Warning will have been shown on the status bar self.options["kickstart_file"] = "internal" # Copy default configuration values from model defaults. The main # purpose of this is to let the launch code know about implied defaults # so it can for example configure correct ROM files for expansions. model_config = Amiga.get_current_config(self.options) for key, value in model_config["defaults"].items(): if not self.options[key]: self.options[key] = value # make sure FS-UAE does not load other config files (Host.fs-uae) self.options["end_config"] = "1" # Make FS-UAE check that version matches (except for development) if VERSION != "9.8.7dummy": self.options[Option.EXPECT_VERSION] = VERSION if self.options["__netplay_game"]: print("\nfixing config for netplay game") for key in [x for x in config.keys() if x.startswith("uae_")]: print("* removing option", key) del self.options[key] # self.temp_dir = self.fsgc.temp_dir("amiga") # self.change_handler = GameChangeHandler(self.temp_dir) # self.firmware_dir = self.prepare_firmware("Amiga Firmware") # config = self.fsgc.config.copy() model = self.options[Option.AMIGA_MODEL] if model.startswith("CD32"): platform = "CD32" elif model == "CDTV": platform = "CDTV" else: platform = "Amiga" # name = Settings.get("config_name") # name = self.fsgc.game.name # uuid = Config.get("x_game_uuid") # uuid = None from fsgs.saves import SaveHandler # save_state_handler = SaveHandler(self.fsgc, self.get_name(), platform) save_state_handler = SaveHandler( self.fsgc, app.settings.get("config_name"), platform, options=self.options, ) print( "[INPUT] joystick_port_1", self.options["joystick_port_1"], "->", self.ports[0].device_id or "none", ) print( "[INPUT] joystick_port_0", self.options["joystick_port_0"], "->", self.ports[1].device_id or "none", ) # self.options["joystick_port_1"] = self.ports[0].device_id or "none" # self.options["joystick_port_0"] = self.ports[1].device_id or "none" self.launch_handler = LaunchHandler( self.fsgc, self.get_name(), self.options, save_state_handler, temp_dir=self.cwd.path, ) # self.change_handler.init(self.fsgc.get_game_state_dir(), # ignore=["*.uss", "*.sdf"]) # self.launch_handler.config["joystick_port_0"] = \ # self.inputs[1].device_id # self.launch_handler.config["joystick_port_1"] = \ # self.inputs[0].device_id if self.use_fullscreen(): self.launch_handler.config["fullscreen"] = "1" if not self.launch_handler.config.get("fullscreen_mode", ""): # Check if fullscreen mode is overridden by temporary setting. if Settings.instance()["__fullscreen_mode"]: self.launch_handler.config[ "fullscreen_mode"] = Settings.instance( )["__fullscreen_mode"] if Settings.instance()["__arcade"]: # Remove window border when launched from FS-UAE Arcade in # order to reduce flickering self.launch_handler.config["window_border"] = "0" # Set fade out duration to 500, if not already specified. if not self.launch_handler.config.get("fade_out_duration", ""): self.launch_handler.config["fade_out_duration"] = "500" else: self.launch_handler.config["fullscreen"] = "0" self.launch_handler.prepare() config = self.launch_handler.create_config() config_file = self.temp_file("config.fs-uae").path with open(config_file, "w", encoding="UTF-8") as f: for line in config: print(line) f.write(line + "\n") self.emulator.args.extend([config_file])
def prepare_config(cls, original_config): config = defaultdict(str) for key, value in LauncherSettings.items(): # We now show warnings on status bar instead # if key in LauncherConfig.config_keys: # print("... ignoring config key from settings:", key) # continue config[key] = value config["base_dir"] = FSGSDirectories.get_base_dir() for key, value in original_config.items(): if value: config[key] = value if not config["joystick_port_0_mode"]: config["joystick_port_0_mode"] = "mouse" if not config["joystick_port_1_mode"]: if config["amiga_model"].startswith("CD32"): config["joystick_port_1_mode"] = "cd32 gamepad" else: config["joystick_port_1_mode"] = "joystick" if not config["joystick_port_2_mode"]: config["joystick_port_2_mode"] = "none" if not config["joystick_port_3_mode"]: config["joystick_port_3_mode"] = "none" from .devicemanager import DeviceManager devices = DeviceManager.get_devices_for_ports(config) for port in range(4): key = "joystick_port_{0}".format(port) if not config.get(key): # key not set, use calculated default value config[key] = devices[port].id for remove_key in [ "database_username", "database_password", "database_username", "database_email", "database_auth", "device_id" ]: if remove_key in config: del config[remove_key] # overwrite netplay config if config.get("__netplay_host", ""): config["netplay_server"] = config["__netplay_host"] if config.get("__netplay_password", ""): config["netplay_password"] = config["__netplay_password"] if config.get("__netplay_port", ""): config["netplay_port"] = config["__netplay_port"] # copy actual kickstart options from x_ options config["kickstart_file"] = config["x_kickstart_file"] config["kickstart_ext_file"] = config["x_kickstart_ext_file"] if not config["kickstart_file"]: # Warning will have been shown on the status bar config["kickstart_file"] = "internal" # Copy default configuration values from model defaults. The main # purpose of this is to let the launch code know about implied defaults # so it can for example configure correct ROM files for expansions. model_config = Amiga.get_current_config(config) for key, value in model_config["defaults"].items(): if not config.get(key): config[key] = value # make sure FS-UAE does not load other config files (Host.fs-uae) config["end_config"] = "1" # Make FS-UAE check that version matches (except for development) if VERSION != "9.8.7dummy": config[Option.EXPECT_VERSION] = VERSION if config.get("__netplay_game", ""): print("\nfixing config for netplay game") for key in [x for x in config.keys() if x.startswith("uae_")]: print("* removing option", key) del config[key] return config
def start_local_game_amiga(cls): # make sure x_kickstart_file is initialized LauncherConfig.set_kickstart_from_model() # if not Config.get("x_kickstart_file"): # or not \ # # os.path.exists(Config.get("kickstart_file")): # fsui.show_error( # gettext("No kickstart found for this model. Use the 'Import " # "Kickstarts' function from the menu.")) # return cs = Amiga.get_model_config( LauncherConfig.get("amiga_model"))["ext_roms"] if len(cs) > 0: # extended kickstart ROM is needed if not LauncherConfig.get("x_kickstart_ext_file"): fsui.show_error( gettext("No extended kickstart found for this model. " "Try 'scan' function.")) return config = LauncherConfig.copy() prepared_config = cls.prepare_config(config) model = LauncherConfig.get("amiga_model") if model.startswith("CD32"): platform = "CD32" elif model == "CDTV": platform = "CDTV" else: platform = "Amiga" name = LauncherSettings.get("config_name") uuid = LauncherConfig.get("x_game_uuid") from fsgs.saves import SaveHandler save_state_handler = SaveHandler(fsgs, name, platform, uuid) from fsgs.amiga.launchhandler import LaunchHandler launch_handler = LaunchHandler(fsgs, name, prepared_config, save_state_handler) from .ui.launcherwindow import LauncherWindow task = AmigaLaunchTask(launch_handler) # dialog = LaunchDialog(MainWindow.instance, launch_handler) dialog = LaunchDialog(LauncherWindow.current(), gettext("Launching FS-UAE"), task) dialog.show() def on_show_license_information(license_text): unused(license_text) # FIXME: don't depend on wx here # noinspection PyUnresolvedReferences # import wx # license_dialog = wx.MessageDialog( # dialog, license_text, _("Terms of Use"), # wx.OK | wx.CANCEL | wx.CENTRE) # license_dialog.CenterOnParent() # result = license_dialog.ShowModal() # return result == wx.ID_OK # FIXME return True fsgs.file.on_show_license_information = on_show_license_information LauncherConfig.set("__running", "1") task.start()
def prepare_config(cls, original_config): config = StringDict(str) for key, value in LauncherSettings.items(): # We now show warnings on status bar instead # if key in LauncherConfig.config_keys: # print("... ignoring config key from settings:", key) # continue config[key] = value config["base_dir"] = FSGSDirectories.get_base_dir() for key, value in original_config.items(): if value: config[key] = value if not config["joystick_port_0_mode"]: config["joystick_port_0_mode"] = "mouse" if not config["joystick_port_1_mode"]: if config["amiga_model"].startswith("CD32"): config["joystick_port_1_mode"] = "cd32 gamepad" else: config["joystick_port_1_mode"] = "joystick" if not config["joystick_port_2_mode"]: config["joystick_port_2_mode"] = "none" if not config["joystick_port_3_mode"]: config["joystick_port_3_mode"] = "none" from .devicemanager import DeviceManager devices = DeviceManager.get_devices_for_ports(config) for port in range(4): key = "joystick_port_{0}".format(port) if not config.get(key): # key not set, use calculated default value config[key] = devices[port].id for remove_key in [ "database_username", "database_password", "database_username", "database_email", "database_auth", "device_id", ]: if remove_key in config: del config[remove_key] # overwrite netplay config if config.get("__netplay_host", ""): config["netplay_server"] = config["__netplay_host"] if config.get("__netplay_password", ""): config["netplay_password"] = config["__netplay_password"] if config.get("__netplay_port", ""): config["netplay_port"] = config["__netplay_port"] # copy actual kickstart options from x_ options config["kickstart_file"] = config["x_kickstart_file"] config["kickstart_ext_file"] = config["x_kickstart_ext_file"] if not config["kickstart_file"]: # Warning will have been shown on the status bar config["kickstart_file"] = "internal" # Copy default configuration values from model defaults. The main # purpose of this is to let the launch code know about implied defaults # so it can for example configure correct ROM files for expansions. model_config = Amiga.get_current_config(config) for key, value in model_config["defaults"].items(): if not config.get(key): config[key] = value # make sure FS-UAE does not load other config files (Host.fs-uae) config["end_config"] = "1" # Make FS-UAE check that version matches (except for development) if VERSION != "9.8.7dummy": config[Option.EXPECT_VERSION] = VERSION if config.get("__netplay_game", ""): print("\nfixing config for netplay game") for key in [x for x in config.keys() if x.startswith("uae_")]: print("* removing option", key) del config[key] return config
def start_local_game_amiga(cls): # make sure x_kickstart_file is initialized LauncherConfig.set_kickstart_from_model() # if not Config.get("x_kickstart_file"): # or not \ # # os.path.exists(Config.get("kickstart_file")): # fsui.show_error( # gettext("No kickstart found for this model. Use the 'Import " # "Kickstarts' function from the menu.")) # return cs = Amiga.get_model_config(LauncherConfig.get("amiga_model"))[ "ext_roms" ] if len(cs) > 0: # extended kickstart ROM is needed if not LauncherConfig.get("x_kickstart_ext_file"): fsui.show_error( gettext( "No extended kickstart found for this model. " "Try 'scan' function." ) ) return config = LauncherConfig.copy() prepared_config = cls.prepare_config(config) model = LauncherConfig.get("amiga_model") if model.startswith("CD32"): platform = "CD32" elif model == "CDTV": platform = "CDTV" else: platform = "Amiga" name = LauncherSettings.get("config_name") uuid = LauncherConfig.get("x_game_uuid") from fsgs.saves import SaveHandler save_state_handler = SaveHandler(fsgs, name, platform, uuid) from fsgs.amiga.launchhandler import LaunchHandler launch_handler = LaunchHandler( fsgs, name, prepared_config, save_state_handler ) from .ui.launcherwindow import LauncherWindow task = AmigaLaunchTask(launch_handler) # dialog = LaunchDialog(MainWindow.instance, launch_handler) dialog = LaunchDialog( LauncherWindow.current(), gettext("Launching FS-UAE"), task ) dialog.show() def on_show_license_information(license_text): unused(license_text) # FIXME: don't depend on wx here # noinspection PyUnresolvedReferences # import wx # license_dialog = wx.MessageDialog( # dialog, license_text, _("Terms of Use"), # wx.OK | wx.CANCEL | wx.CENTRE) # license_dialog.CenterOnParent() # result = license_dialog.ShowModal() # return result == wx.ID_OK # FIXME return True fsgs.file.on_show_license_information = on_show_license_information LauncherConfig.set("__running", "1") task.start()