mirror of
https://github.com/libretro/hatari.git
synced 2026-11-09 17:24:15 -10:00
PythonUI: Support for Hatari v2.0 option changes
- no RTC option, instead there's new ModelType option that includes MegaST/E (which has RTC) - WinUAE & oldUAE support different set of CPUs - Keep ST resolution option is valid only with SDL1 builds
This commit is contained in:
1 parent
7feb7e72b2
commit
a6b53512dc
3 files changed
+72
-29
No files matched your search
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# Classes for the Hatari UI dialogs
|
||||
#
|
||||
# Copyright (C) 2008-2015 by Eero Tamminen
|
||||
# Copyright (C) 2008-2016 by Eero Tamminen
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -954,14 +954,11 @@ class MachineDialog(HatariUIDialog):
|
||||
|
||||
vbox = gtk.VBox()
|
||||
self.compatible = gtk.CheckButton("Compatible CPU")
|
||||
self.rtc = gtk.CheckButton("Real-time clock")
|
||||
self.timerd = gtk.CheckButton("Patch Timer-D")
|
||||
self.compatible.set_tooltip_text("Needed for overscan and other timing sensitive things to work correctly")
|
||||
self.rtc.set_tooltip_text("Some rare games and demos don't work with this")
|
||||
self.timerd.set_tooltip_text("Improves ST/STE emulation performance, but some rare demos/games don't work with this")
|
||||
vbox.add(self.compatible)
|
||||
vbox.add(self.timerd)
|
||||
vbox.add(self.rtc)
|
||||
table_add_widget_row(table, row, "Misc.:", vbox, fullspan)
|
||||
row += 1
|
||||
|
||||
@@ -988,7 +985,6 @@ class MachineDialog(HatariUIDialog):
|
||||
self.tos.set_filename(tos)
|
||||
self.compatible.set_active(config.get_compatible())
|
||||
self.timerd.set_active(config.get_timerd())
|
||||
self.rtc.set_active(config.get_rtc())
|
||||
|
||||
def _get_active_radio(self, radios):
|
||||
idx = 0
|
||||
@@ -1009,7 +1005,6 @@ class MachineDialog(HatariUIDialog):
|
||||
config.set_tos(self.tos.get_filename())
|
||||
config.set_compatible(self.compatible.get_active())
|
||||
config.set_timerd(self.timerd.get_active())
|
||||
config.set_rtc(self.rtc.get_active())
|
||||
config.flush_updates()
|
||||
|
||||
def run(self, config):
|
||||
|
||||
+63
-23
@@ -3,7 +3,7 @@
|
||||
# Classes for Hatari emulator instance and mapping its congfiguration
|
||||
# variables with its command line option.
|
||||
#
|
||||
# Copyright (C) 2008-2015 by Eero Tamminen
|
||||
# Copyright (C) 2008-2016 by Eero Tamminen
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -60,6 +60,20 @@ class Hatari:
|
||||
pass
|
||||
return error
|
||||
|
||||
def is_winuae(self):
|
||||
"check whether Hatari has WinUAE CPU core (=more features) or oldUAE one"
|
||||
result = False
|
||||
pipe = os.popen(self.hataribin + " -h")
|
||||
for line in pipe.readlines():
|
||||
if line.find("--mmu") >= 0:
|
||||
result = True
|
||||
break
|
||||
try:
|
||||
pipe.close()
|
||||
except IOError:
|
||||
pass
|
||||
return result
|
||||
|
||||
def save_config(self):
|
||||
os.popen(self.hataribin + " --saveconfig")
|
||||
|
||||
@@ -267,6 +281,8 @@ class HatariConfigMapping(ConfigStore):
|
||||
"printout": ("[Printer]", "szPrintToFileName", "Printer output"),
|
||||
"soundout": ("[Sound]", "szYMCaptureFileName", "Sound output")
|
||||
}
|
||||
has_modeltype = True # from v2.0 onwards
|
||||
has_keepstres = True # only with SDL1
|
||||
"access methods to Hatari configuration file variables and command line options"
|
||||
def __init__(self, hatari):
|
||||
confdirs = [".config/hatari", ".hatari"]
|
||||
@@ -279,6 +295,11 @@ class HatariConfigMapping(ConfigStore):
|
||||
self._desktop_w = 0
|
||||
self._desktop_h = 0
|
||||
self._options = []
|
||||
self._winuae = hatari.is_winuae()
|
||||
# initialize has_* attribs for things that may not be anymore
|
||||
# valid on Hatari config file and/or command line
|
||||
self.get_machine()
|
||||
self.get_desktop_st()
|
||||
|
||||
def validate(self):
|
||||
"exception is thrown if the loaded configuration isn't compatible"
|
||||
@@ -358,23 +379,45 @@ class HatariConfigMapping(ConfigStore):
|
||||
|
||||
# ------------ machine ---------------
|
||||
def get_machine_types(self):
|
||||
return ("ST", "STE", "TT", "Falcon")
|
||||
if self.has_modeltype:
|
||||
return ("ST", "MegaST", "STE", "MegaSTE", "TT", "Falcon")
|
||||
else:
|
||||
return ("ST", "STE", "TT", "Falcon")
|
||||
|
||||
def get_machine(self):
|
||||
return self.get("[System]", "nMachineType")
|
||||
try:
|
||||
return self.get("[System]", "nModelType")
|
||||
except KeyError:
|
||||
self.has_modeltype = False
|
||||
return self.get("[System]", "nMachineType")
|
||||
|
||||
def has_accurate_winsize(self):
|
||||
if self.has_modeltype:
|
||||
return (self.get_machine() < 4)
|
||||
else:
|
||||
return (self.get_machine() < 2)
|
||||
|
||||
def set_machine(self, value):
|
||||
self.set("[System]", "nMachineType", value)
|
||||
self._change_option("--machine %s" % ("st", "ste", "tt", "falcon")[value])
|
||||
if self.has_modeltype:
|
||||
self.set("[System]", "nModelType", value)
|
||||
self._change_option("--machine %s" % ("st", "megast", "ste", "megaste", "tt", "falcon")[value])
|
||||
else:
|
||||
self.set("[System]", "nMachineType", value)
|
||||
self._change_option("--machine %s" % ("st", "ste", "tt", "falcon")[value])
|
||||
|
||||
# ------------ CPU level ---------------
|
||||
def get_cpulevel_types(self):
|
||||
return ("68000", "68010", "68020", "68EC030+FPU", "68040")
|
||||
if self._winuae:
|
||||
return ("68000", "68010", "68020", "68E030", "68040", "68060")
|
||||
else:
|
||||
return ("68000", "68010", "68020", "68EC030+FPU", "68040")
|
||||
|
||||
def get_cpulevel(self):
|
||||
return self.get("[System]", "nCpuLevel")
|
||||
|
||||
def set_cpulevel(self, value):
|
||||
if value == 5: # WinUAE 060
|
||||
value = 6
|
||||
self.set("[System]", "nCpuLevel", value)
|
||||
self._change_option("--cpulevel %d" % value)
|
||||
|
||||
@@ -423,14 +466,6 @@ class HatariConfigMapping(ConfigStore):
|
||||
self.set("[System]", "bPatchTimerD", value)
|
||||
self._change_option("--timer-d %s" % str(value))
|
||||
|
||||
# ------------ RTC ---------------
|
||||
def get_rtc(self):
|
||||
return self.get("[System]", "bRealTimeClock")
|
||||
|
||||
def set_rtc(self, value):
|
||||
self.set("[System]", "bRealTimeClock", value)
|
||||
self._change_option("--rtc %s" % str(value))
|
||||
|
||||
# ------------ fastforward ---------------
|
||||
def get_fastforward(self):
|
||||
return self.get("[System]", "bFastForward")
|
||||
@@ -756,18 +791,23 @@ class HatariConfigMapping(ConfigStore):
|
||||
# --------- keep desktop res -----------
|
||||
def get_desktop(self):
|
||||
return self.get("[Screen]", "bKeepResolution")
|
||||
|
||||
|
||||
def set_desktop(self, value):
|
||||
self.set("[Screen]", "bKeepResolution", value)
|
||||
self._change_option("--desktop %s" % str(value))
|
||||
|
||||
# --------- keep desktop res - st ------
|
||||
def get_desktop_st(self):
|
||||
return self.get("[Screen]", "bKeepResolutionST")
|
||||
|
||||
try:
|
||||
return self.get("[Screen]", "bKeepResolutionST")
|
||||
except KeyError:
|
||||
self.has_keepstres = False
|
||||
return False
|
||||
|
||||
def set_desktop_st(self, value):
|
||||
self.set("[Screen]", "bKeepResolutionST", value)
|
||||
self._change_option("--desktop-st %s" % str(value))
|
||||
if self.has_keepstres:
|
||||
self.set("[Screen]", "bKeepResolutionST", value)
|
||||
self._change_option("--desktop-st %s" % str(value))
|
||||
|
||||
# ------------ force max ---------------
|
||||
def get_force_max(self):
|
||||
@@ -863,11 +903,11 @@ class HatariConfigMapping(ConfigStore):
|
||||
return (width, height)
|
||||
|
||||
# window sizes for other than ST & STE can differ
|
||||
if self.get("[System]", "nMachineType") not in (0, 1):
|
||||
print("WARNING: neither ST nor STE machine, window size inaccurate!")
|
||||
videl = True
|
||||
else:
|
||||
if self.has_accurate_winsize():
|
||||
videl = False
|
||||
else:
|
||||
print("WARNING: With Videl, window size is unknown -> may be inaccurate!")
|
||||
videl = True
|
||||
|
||||
# mono monitor?
|
||||
if self.get_monitor() == 0:
|
||||
|
||||
@@ -2,6 +2,14 @@
|
||||
User visible changes in Hatari (Python Gtk) UI
|
||||
----------------------------------------------
|
||||
|
||||
2016-12 (Hatari v2.0 fixes):
|
||||
- Add support for new nModelType config option (with MegaST/STE
|
||||
options), but still support also old nMachineType option
|
||||
- Hatari doesn't anymore support separate RTC option, remove
|
||||
- Support for keeping ST resolution option is enabled based on
|
||||
config file content (it's supported only by Hatari SDL1 builds)
|
||||
- Initial WinUAE vs. OldUAE CPU core support
|
||||
|
||||
2015-05:
|
||||
- Add support for --gemdos-drive, --ttram option features
|
||||
and new tracepoints
|
||||
|
||||
Reference in new issue
Block a user