From f508ca26343418097d828289fa0aa6f8acf47867 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Sat, 9 Mar 2019 12:22:33 -0330 Subject: [PATCH] First pass at porting R77-specific changes to mainline. - more work is required here, since I'm unable to test on a real R77 yet - changes will also be required in the manually generated config.mak --- configure | 27 ++++++++---- src/common/MediaFactory.hxx | 21 ++++++++-- src/unix/r77/OSystemR77.cxx | 26 ++++++++++++ src/unix/r77/OSystemR77.hxx | 67 +++++++++++++++++++++++++++++ src/unix/r77/SettingsR77.cxx | 81 ++++++++++++++++++++++++++++++++++++ src/unix/r77/SettingsR77.hxx | 49 ++++++++++++++++++++++ src/unix/r77/module.mk | 11 +++++ 7 files changed, 271 insertions(+), 11 deletions(-) create mode 100644 src/unix/r77/OSystemR77.cxx create mode 100644 src/unix/r77/OSystemR77.hxx create mode 100644 src/unix/r77/SettingsR77.cxx create mode 100644 src/unix/r77/SettingsR77.hxx create mode 100644 src/unix/r77/module.mk diff --git a/configure b/configure index 482bf888b..26198160c 100755 --- a/configure +++ b/configure @@ -205,8 +205,8 @@ Optional Features: --disable-static --enable-profile build binary with profiling info [disabled] --disable-profile - --enable-debug build with debugging symbols [disabled] - --disable-debug + --enable-debug build with debugging symbols [disabled] + --disable-debug --force-builtin-libpng force use of built-in libpng library [auto] Optional Libraries: @@ -297,10 +297,8 @@ case $_host in # _host_os=amigaos # _host_cpu=ppc # ;; -gp2x) - _host_os=gp2x - _host_cpu=arm - _host_prefix=arm-open2x-linux +retron77) + _host_os=retron77 ;; mingw32-cross) _host_os=mingw32msvc @@ -357,7 +355,7 @@ if test -n "$CXX"; then echo $CXX else if test -n "$_host"; then - compilers="$_host_prefix-g++ $_host_prefix-c++ $_host_cpu-$_host_os-g++ $_host_cpu-$_host_os-c++" + compilers="$_host_prefix-g++ $_host_prefix-c++ $_host_cpu-$_host_os-g++ $_host_cpu-$_host_os-c++ g++ c++" else compilers="g++ c++" fi @@ -514,6 +512,12 @@ fi if test -n "$_host"; then # Cross-compiling mode - add your target here if needed case "$_host" in + retron77) + echo "Compiling for $_host, disabling windowed mode, debugger and cheats." + _build_windowed=no + _build_debugger=no + _build_cheats=no + ;; mingw32-cross) echo "Cross-compiling for Windows using MinGW." DEFINES="$DEFINES -DWIN32" @@ -550,6 +554,10 @@ else DEFINES="$DEFINES -DWIN32" _host_os=win32 ;; + os2*) + DEFINES="$DEFINES -DUNIX -DOS2" + _host_os=unix + ;; cygwin*) DEFINES="$DEFINES -mno-cygwin -DWIN32" LIBS="$LIBS -mno-cygwin -lmingw32 -lwinmm" @@ -734,6 +742,11 @@ case $_host_os in MODULES="$MODULES $SRC/unix" INCLUDES="$INCLUDES -I$SRC/unix" ;; + retron77) + DEFINES="$DEFINES -DBSPF_UNIX -DRETRON77" + MODULES="$MODULES $SRC/unix $SRC/unix/r77" + INCLUDES="$INCLUDES -I$SRC/unix -I$SRC/unix/r77" + ;; win32) DEFINES="$DEFINES -DBSPF_WINDOWS" MODULES="$MODULES $SRC/windows" diff --git a/src/common/MediaFactory.hxx b/src/common/MediaFactory.hxx index 057c0df51..b100ac40a 100644 --- a/src/common/MediaFactory.hxx +++ b/src/common/MediaFactory.hxx @@ -26,8 +26,13 @@ #include "SerialPort.hxx" #if defined(BSPF_UNIX) #include "SerialPortUNIX.hxx" - #include "SettingsUNIX.hxx" - #include "OSystemUNIX.hxx" + #if defined(RETRON77) + #include "SettingsR77.hxx" + #include "OSystemR77.hxx" + #else + #include "SettingsUNIX.hxx" + #include "OSystemUNIX.hxx" + #endif #elif defined(BSPF_WINDOWS) #include "SerialPortWINDOWS.hxx" #include "SettingsWINDOWS.hxx" @@ -70,7 +75,11 @@ class MediaFactory static unique_ptr createOSystem() { #if defined(BSPF_UNIX) - return make_unique(); + #if defined(RETRON77) + return make_unique(); + #else + return make_unique(); + #endif #elif defined(BSPF_WINDOWS) return make_unique(); #elif defined(BSPF_MACOS) @@ -83,7 +92,11 @@ class MediaFactory static unique_ptr createSettings() { #if defined(BSPF_UNIX) - return make_unique(); + #if defined(RETRON77) + return make_unique(); + #else + return make_unique(); + #endif #elif defined(BSPF_WINDOWS) return make_unique(); #elif defined(BSPF_MACOS) diff --git a/src/unix/r77/OSystemR77.cxx b/src/unix/r77/OSystemR77.cxx new file mode 100644 index 000000000..cea966d00 --- /dev/null +++ b/src/unix/r77/OSystemR77.cxx @@ -0,0 +1,26 @@ +//============================================================================ +// +// SSSS tt lll lll +// SS SS tt ll ll +// SS tttttt eeee ll ll aaaa +// SSSS tt ee ee ll ll aa +// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" +// SS SS tt ee ll ll aa aa +// SSSS ttt eeeee llll llll aaaaa +// +// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony +// and the Stella Team +// +// See the file "License.txt" for information on usage and redistribution of +// this file, and for a DISCLAIMER OF ALL WARRANTIES. +//============================================================================ + +#include "OSystemR77.hxx" + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void OSystemR77::getBaseDirAndConfig(string& basedir, string& cfgfile, + string& savedir, string& loaddir, bool, const string&) +{ + basedir = savedir = loaddir = "/mnt/stella"; + cfgfile = "/mnt/stella/stellarc"; +} diff --git a/src/unix/r77/OSystemR77.hxx b/src/unix/r77/OSystemR77.hxx new file mode 100644 index 000000000..1c9838bd4 --- /dev/null +++ b/src/unix/r77/OSystemR77.hxx @@ -0,0 +1,67 @@ +//============================================================================ +// +// SSSS tt lll lll +// SS SS tt ll ll +// SS tttttt eeee ll ll aaaa +// SSSS tt ee ee ll ll aa +// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" +// SS SS tt ee ll ll aa aa +// SSSS ttt eeeee llll llll aaaaa +// +// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony +// and the Stella Team +// +// See the file "License.txt" for information on usage and redistribution of +// this file, and for a DISCLAIMER OF ALL WARRANTIES. +//============================================================================ + +#ifndef OSYSTEM_R77_HXX +#define OSYSTEM_R77_HXX + +#include "OSystem.hxx" + +/** + This class defines an OSystem object for the Retron77 system. + The Retron77 system is based on an embedded Linux platform. + + It is responsible for completely implementing getBaseDirAndConfig(), + to set the base directory, config file location, and various other + save/load locations. + + @author Stephen Anthony +*/ +class OSystemR77 : public OSystem +{ + public: + OSystemR77() = default; + virtual ~OSystemR77() = default; + + /** + Determine the base directory and main configuration file from the + derived class. It can also use hints, as described below. + + @param basedir The base directory for all configuration files + @param cfgfile The fully qualified pathname of the config file + (including the base directory) + @param savedir The default directory to save various other files + @param loaddir The default directory to load various other files + @param useappdir A hint that the base dir should be set to the + app directory; not all ports can do this, so + they are free to ignore it + @param usedir A hint that the base dir should be set to this + parameter; not all ports can do this, so + they are free to ignore it + */ + void getBaseDirAndConfig(string& basedir, string& cfgfile, + string& savedir, string& loaddir, + bool useappdir, const string& usedir) override; + + private: + // Following constructors and assignment operators not supported + OSystemR77(const OSystemR77&) = delete; + OSystemR77(OSystemR77&&) = delete; + OSystemR77& operator=(const OSystemR77&) = delete; + OSystemR77& operator=(OSystemR77&&) = delete; +}; + +#endif diff --git a/src/unix/r77/SettingsR77.cxx b/src/unix/r77/SettingsR77.cxx new file mode 100644 index 000000000..74b3a11a0 --- /dev/null +++ b/src/unix/r77/SettingsR77.cxx @@ -0,0 +1,81 @@ +//============================================================================ +// +// SSSS tt lll lll +// SS SS tt ll ll +// SS tttttt eeee ll ll aaaa +// SSSS tt ee ee ll ll aa +// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" +// SS SS tt ee ll ll aa aa +// SSSS ttt eeeee llll llll aaaaa +// +// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony +// and the Stella Team +// +// See the file "License.txt" for information on usage and redistribution of +// this file, and for a DISCLAIMER OF ALL WARRANTIES. +//============================================================================ + +#include + +#include "SettingsR77.hxx" + +/** + The Retron77 system is a locked-down, set piece of hardware. + No configuration of Stella is possible, since the UI isn't exposed. + So we hardcode the specific settings here. +*/ + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +SettingsR77::SettingsR77() + : Settings() +{ + setPermanent("video", "opengles2"); + setPermanent("vsync", "true"); + + setPermanent("tia.zoom", "3"); + + // TODO - use new argument that differentiates between fullscreen and + // fullscreen without aspect correction + // Re-add ability to use a specific fullscreen resolution + setPermanent("fullscreen", "false"); // start in 16:9 mode by default + setPermanent("fullres", "1280x720"); + + setPermanent("romdir", "/mnt/games"); + setPermanent("snapsavedir", "/mnt/stella/snapshots"); + setPermanent("snaploaddir", "/mnt/stella/snapshots"); + + setPermanent("launcherres", "1280x720"); + setPermanent("launcherfont", "large"); + setPermanent("romviewer", "2"); + setPermanent("exitlauncher", "true"); + + setPermanent("dev.settings", "false"); + setPermanent("plr.timemachine", false); + + // FIXME - these are out of date, since the # of events has changed since 3.x + setPermanent("keymap", "116:40:0:0:0:0:0:0:0:98:95:0:0:0:15:0:0:0:0:0:94:0:0:0:0:0:0:0:99:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:62:0:63:64:55:41:42:43:16:17:23:24:53:54:0:61:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:96:0:0:0:97:47:0:52:49:46:22:20:19:56:21:59:60:0:0:57:58:44:0:48:0:0:0:45:51:18:50:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:11:12:14:13:0:0:0:0:0:9:10:3:4:5:6:7:8:91:89:90:92:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:115:0:0:0:0:110:0:0:0:0:0:0:0:0:0:0:0:0:0:114:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:102:103:109:108:0:106:107:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0"); + setPermanent("joymap", "116^i2c_controller|2 27 27 31 31 0 0 0 0|8 28 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0|0^i2c_controller 2|2 35 35 39 39 0 0 0 0|8 36 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0|0"); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +bool SettingsR77::saveConfigFile(const string& cfgfile) const +{ + // Almost no settings can be changed, so we completely disable saving + // most of them. This may also fix reported issues of the config file + // becoming corrupt. + // + // There is currently only one setting that can be changed - 'fullscreen' + // It determines whether to use 4:3 or 16:9 mode + + ofstream out(cfgfile); + if(!out || !out.is_open()) + return false; + + out << "fullscreen = " << getString("fullscreen") << endl; + + out.flush(); + out.close(); +// FIXME system("/bin/fsync /mnt/stella/stellarc&"); + + return true; +} diff --git a/src/unix/r77/SettingsR77.hxx b/src/unix/r77/SettingsR77.hxx new file mode 100644 index 000000000..d1d5d513e --- /dev/null +++ b/src/unix/r77/SettingsR77.hxx @@ -0,0 +1,49 @@ +//============================================================================ +// +// SSSS tt lll lll +// SS SS tt ll ll +// SS tttttt eeee ll ll aaaa +// SSSS tt ee ee ll ll aa +// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" +// SS SS tt ee ll ll aa aa +// SSSS ttt eeeee llll llll aaaaa +// +// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony +// and the Stella Team +// +// See the file "License.txt" for information on usage and redistribution of +// this file, and for a DISCLAIMER OF ALL WARRANTIES. +//============================================================================ + +#ifndef SETTINGS_R77_HXX +#define SETTINGS_R77_HXX + +#include "Settings.hxx" + +/** + This class is used for the Retron77 system specific settings. + The Retron77 system is based on an embedded Linux platform. + + @author Stephen Anthony +*/ +class SettingsR77 : public Settings +{ + public: + /** + Create a new UNIX settings object + */ + explicit SettingsR77(); + virtual ~SettingsR77() = default; + + protected: + bool saveConfigFile(const string& cfgfile) const; + + private: + // Following constructors and assignment operators not supported + SettingsR77(const SettingsR77&) = delete; + SettingsR77(SettingsR77&&) = delete; + SettingsR77& operator=(const SettingsR77&) = delete; + SettingsR77& operator=(SettingsR77&&) = delete; +}; + +#endif diff --git a/src/unix/r77/module.mk b/src/unix/r77/module.mk new file mode 100644 index 000000000..821c26c91 --- /dev/null +++ b/src/unix/r77/module.mk @@ -0,0 +1,11 @@ +MODULE := src/unix/r77 + +MODULE_OBJS := \ + src/unix/r77/OSystemR77.o \ + src/unix/r77/SettingsR77.o + +MODULE_DIRS += \ + src/unix/r77 + +# Include common rules +include $(srcdir)/common.rules