# HG changeset patch
# User Eero Tamminen <oak@helsinkinet.fi>
# Date 1482449178 -7200
# Node ID d1668fda4200fcaf79c67ca2eb32a7023227cab4
# Parent 7b3bcc42bc811241b0579d71bca0256b63f0e17c
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
diff -r 7b3bcc42bc81 -r d1668fda4200 python-ui/dialogs.py
--- a/python-ui/dialogs.py Fri Dec 23 00:57:01 2016 +0200
+++ b/python-ui/dialogs.py Fri Dec 23 01:26:18 2016 +0200
@@ -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 @@
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 @@
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 @@
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):
diff -r 7b3bcc42bc81 -r d1668fda4200 python-ui/hatari.py
--- a/python-ui/hatari.py Fri Dec 23 00:57:01 2016 +0200
+++ b/python-ui/hatari.py Fri Dec 23 01:26:18 2016 +0200
@@ -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 @@
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 @@
"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 @@
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 @@
# ------------ 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 @@
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 @@
# --------- 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 @@
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!")
+ if self.has_accurate_winsize():
+ videl = False
+ else:
+ print("WARNING: With Videl, window size is unknown -> may be inaccurate!")
videl = True
- else:
- videl = False
# mono monitor?
if self.get_monitor() == 0:
diff -r 7b3bcc42bc81 -r d1668fda4200 python-ui/release-notes.txt
--- a/python-ui/release-notes.txt Fri Dec 23 00:57:01 2016 +0200
+++ b/python-ui/release-notes.txt Fri Dec 23 01:26:18 2016 +0200
@@ -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