diff options
author | cameron | 2017-04-28 00:24:57 +0100 |
---|---|---|
committer | Eugene Sandulenko | 2017-09-03 10:40:07 +0200 |
commit | a11985c46d5eab5c61a1034005858286e6f3da3b (patch) | |
tree | d2daa5367251541a6198880b33905acf556a3005 | |
parent | ba84efe4975812c07788f1c973cc82e46b8316aa (diff) | |
download | scummvm-rg350-a11985c46d5eab5c61a1034005858286e6f3da3b.tar.gz scummvm-rg350-a11985c46d5eab5c61a1034005858286e6f3da3b.tar.bz2 scummvm-rg350-a11985c46d5eab5c61a1034005858286e6f3da3b.zip |
RISCOS: Add RISC OS support
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | backends/platform/sdl/module.mk | 6 | ||||
-rw-r--r-- | backends/platform/sdl/posix/posix-main.cpp | 2 | ||||
-rw-r--r-- | backends/platform/sdl/riscos/riscos-main.cpp | 53 | ||||
-rw-r--r-- | backends/platform/sdl/riscos/riscos.cpp | 106 | ||||
-rw-r--r-- | backends/platform/sdl/riscos/riscos.h | 52 | ||||
-rw-r--r-- | backends/platform/sdl/riscos/riscos.mk | 20 | ||||
-rwxr-xr-x | configure | 38 | ||||
-rw-r--r-- | dists/riscos/!Boot,feb | 8 | ||||
-rw-r--r-- | dists/riscos/!Help,feb | 1 | ||||
-rw-r--r-- | dists/riscos/!Run,feb | 13 | ||||
-rw-r--r-- | dists/riscos/!Sprites,ff9 | bin | 0 -> 7324 bytes | |||
-rw-r--r-- | dists/riscos/!Sprites11,ff9 | bin | 0 -> 11132 bytes |
13 files changed, 294 insertions, 6 deletions
diff --git a/.gitignore b/.gitignore index 1c2edd7ace..8981b94acb 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ lib*.a /MT32_PCM.ROM /ScummVM.app /scummvm.docktileplugin +/\!ScummVM /scummvm-ps3.pkg /*.ipk /.project diff --git a/backends/platform/sdl/module.mk b/backends/platform/sdl/module.mk index 7fde04037f..bb11aaae97 100644 --- a/backends/platform/sdl/module.mk +++ b/backends/platform/sdl/module.mk @@ -31,6 +31,12 @@ MODULE_OBJS += \ amigaos/amigaos.o endif +ifdef RISCOS +MODULE_OBJS += \ + riscos/riscos-main.o \ + riscos/riscos.o +endif + ifdef PLAYSTATION3 MODULE_OBJS += \ ps3/ps3-main.o \ diff --git a/backends/platform/sdl/posix/posix-main.cpp b/backends/platform/sdl/posix/posix-main.cpp index 92354b273e..e378c37849 100644 --- a/backends/platform/sdl/posix/posix-main.cpp +++ b/backends/platform/sdl/posix/posix-main.cpp @@ -22,7 +22,7 @@ #include "common/scummsys.h" -#if defined(POSIX) && !defined(MACOSX) && !defined(SAMSUNGTV) && !defined(MAEMO) && !defined(WEBOS) && !defined(LINUXMOTO) && !defined(GPH_DEVICE) && !defined(GP2X) && !defined(DINGUX) && !defined(OPENPANDORA) && !defined(PLAYSTATION3) && !defined(PSP2) && !defined(ANDROIDSDL) +#if defined(POSIX) && !defined(MACOSX) && !defined(SAMSUNGTV) && !defined(MAEMO) && !defined(WEBOS) && !defined(LINUXMOTO) && !defined(GPH_DEVICE) && !defined(GP2X) && !defined(DINGUX) && !defined(OPENPANDORA) && !defined(PLAYSTATION3) && !defined(PSP2) && !defined(ANDROIDSDL) && !defined(RISCOS) #include "backends/platform/sdl/posix/posix.h" #include "backends/plugins/sdl/sdl-provider.h" diff --git a/backends/platform/sdl/riscos/riscos-main.cpp b/backends/platform/sdl/riscos/riscos-main.cpp new file mode 100644 index 0000000000..2ff8294c1a --- /dev/null +++ b/backends/platform/sdl/riscos/riscos-main.cpp @@ -0,0 +1,53 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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 the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/scummsys.h" + +#if defined(RISCOS) + +#include "backends/platform/sdl/riscos/riscos.h" +#include "backends/plugins/sdl/sdl-provider.h" +#include "base/main.h" + +int main(int argc, char *argv[]) { + + // Create our OSystem instance + g_system = new OSystem_RISCOS(); + assert(g_system); + + // Pre initialize the backend + ((OSystem_RISCOS *)g_system)->init(); + +#ifdef DYNAMIC_MODULES + PluginManager::instance().addPluginProvider(new SDLPluginProvider()); +#endif + + // Invoke the actual ScummVM main entry point + int res = scummvm_main(argc, argv); + + // Free OSystem + delete (OSystem_RISCOS *)g_system; + + return res; +} + +#endif diff --git a/backends/platform/sdl/riscos/riscos.cpp b/backends/platform/sdl/riscos/riscos.cpp new file mode 100644 index 0000000000..2c761d0f4c --- /dev/null +++ b/backends/platform/sdl/riscos/riscos.cpp @@ -0,0 +1,106 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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 the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#define FORBIDDEN_SYMBOL_EXCEPTION_unistd_h + +#include "common/scummsys.h" + +#ifdef RISCOS + +#include "backends/platform/sdl/riscos/riscos.h" +#include "backends/saves/default/default-saves.h" +#include "backends/fs/posix/posix-fs-factory.h" +#include "backends/fs/posix/posix-fs.h" + +#include <kernel.h> +#include <swis.h> + +#ifndef URI_Dispatch +#define URI_Dispatch 0x4e381 +#endif + +void OSystem_RISCOS::init() { + // Initialze File System Factory + _fsFactory = new POSIXFilesystemFactory(); + + // Invoke parent implementation of this method + OSystem_SDL::init(); +} + +void OSystem_RISCOS::initBackend() { + // Create the savefile manager + if (_savefileManager == 0) { + Common::String savePath = "/<Choices$Write>/ScummVM/Saves"; + if (Posix::assureDirectoryExists(savePath)) + _savefileManager = new DefaultSaveFileManager(savePath); + } + + // Invoke parent implementation of this method + OSystem_SDL::initBackend(); +} + +bool OSystem_RISCOS::hasFeature(Feature f) { + if (f == kFeatureOpenUrl) + return true; + + return OSystem_SDL::hasFeature(f); +} + +bool OSystem_RISCOS::openUrl(const Common::String &url) { + int flags; + if (_swix(URI_Dispatch, _INR(0,2)|_OUT(0), 0, url.c_str(), 0, &flags) != NULL) { + warning("openUrl() (RISCOS) failed to open URL"); + return false; + } + if ((flags & 1) == 1) { + warning("openUrl() (RISCOS) failed to open URL"); + return false; + } + return true; +} + +Common::String OSystem_RISCOS::getDefaultConfigFileName() { + return "/<Choices$Write>/ScummVM/scummvm.ini"; +} + +Common::WriteStream *OSystem_RISCOS::createLogFile() { + // Start out by resetting _logFilePath, so that in case + // of a failure, we know that no log file is open. + _logFilePath.clear(); + + Common::String logFile = "/<Choices$Write>/ScummVM/Logs"; + + if (!Posix::assureDirectoryExists(logFile)) { + return 0; + } + + logFile += "/scummvm.log"; + + Common::FSNode file(logFile); + Common::WriteStream *stream = file.createWriteStream(); + if (stream) + _logFilePath = logFile; + return stream; +} + +#endif +
diff --git a/backends/platform/sdl/riscos/riscos.h b/backends/platform/sdl/riscos/riscos.h new file mode 100644 index 0000000000..fb23a3e6e3 --- /dev/null +++ b/backends/platform/sdl/riscos/riscos.h @@ -0,0 +1,52 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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 the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PLATFORM_SDL_RISCOS_H +#define PLATFORM_SDL_RISCOS_H + +#include "backends/platform/sdl/sdl.h" + +class OSystem_RISCOS : public OSystem_SDL { +public: + virtual void init(); + virtual void initBackend(); + + virtual bool hasFeature(Feature f); + + virtual bool openUrl(const Common::String &url); + +protected: + /** + * The path of the currently open log file, if any. + * + * @note This is currently a string and not an FSNode for simplicity; + * e.g. we don't need to include fs.h here, and currently the + * only use of this value is to use it to open the log file in an + * editor; for that, we need it only as a string anyway. + */ + Common::String _logFilePath; + + virtual Common::String getDefaultConfigFileName(); + virtual Common::WriteStream *createLogFile(); +}; + +#endif diff --git a/backends/platform/sdl/riscos/riscos.mk b/backends/platform/sdl/riscos/riscos.mk new file mode 100644 index 0000000000..4b631016b7 --- /dev/null +++ b/backends/platform/sdl/riscos/riscos.mk @@ -0,0 +1,20 @@ +# Special target to create an RISC OS snapshot installation +riscosdist: $(EXECUTABLE) + mkdir -p !ScummVM + elf2aif $(EXECUTABLE) !ScummVM/$(EXECUTABLE),ff8 + cp ${srcdir}/dists/riscos/!Boot,feb !ScummVM/!Boot,feb + cp ${srcdir}/dists/riscos/!Run,feb !ScummVM/!Run,feb + cp ${srcdir}/dists/riscos/!Sprites,ff9 !ScummVM/!Sprites,ff9 + cp ${srcdir}/dists/riscos/!Sprites11,ff9 !ScummVM/!Sprites11,ff9 + mkdir -p !ScummVM/data + cp $(DIST_FILES_THEMES) !ScummVM/data/ +ifdef DIST_FILES_ENGINEDATA + cp $(DIST_FILES_ENGINEDATA) !ScummVM/data/ +endif +ifdef DYNAMIC_MODULES + mkdir -p !ScummVM/plugins + cp $(PLUGINS) !ScummVM/plugins/ +endif + mkdir -p !ScummVM/docs + cp ${srcdir}/dists/riscos/!Help,feb !ScummVM/!Help,feb + cp $(DIST_FILES_DOCS) !ScummVM/docs
\ No newline at end of file @@ -488,7 +488,7 @@ find_libcurlconfig() { # get_system_exe_extension() { case $1 in - arm-riscos) + arm-*riscos) _exeext=",ff8" ;; 3ds | dreamcast | ds | gamecube | n64 | ps2 | psp | wii) @@ -1427,9 +1427,12 @@ androidsdl-x86_64) _host_cpu=x86_64 _host_alias=x86_64-linux-android ;; -arm-riscos) +arm-*riscos) _host_os=riscos _host_cpu=arm + datarootdir='/\<ScummVM\$$Dir\>' + datadir='${datarootdir}/data' + docdir='${datarootdir}/docs' ;; raspberrypi) _host_os=linux @@ -2712,6 +2715,20 @@ case $_host_os in append_var CXXFLAGS "-D_PSP_FW_VERSION=150" add_line_to_config_mk 'PSP = 1' ;; + riscos) + append_var DEFINES "-DRISCOS" + add_line_to_config_mk 'RISCOS = 1' + append_var LDFLAGS "-L$GCCSDK_INSTALL_ENV/lib" + append_var CXXFLAGS "-I$GCCSDK_INSTALL_ENV/include" + _sdlpath=$GCCSDK_INSTALL_ENV/bin + _freetypepath=$GCCSDK_INSTALL_ENV/bin + _libcurlpath=$GCCSDK_INSTALL_ENV/bin + append_var CXXFLAGS "-march=armv4" + append_var CXXFLAGS "-mtune=xscale" + append_var LDFLAGS "-static" + _optimization_level=-O3 + _port_mk="backends/platform/sdl/riscos/riscos.mk" + ;; solaris*) append_var DEFINES "-DSOLARIS" append_var DEFINES "-DSYSTEM_NOT_SUPPORTING_D_TYPE" @@ -2819,8 +2836,16 @@ if test -n "$_host"; then ;; arm-linux|arm*-linux-gnueabi|arm-*-linux) ;; - arm-riscos|linupy) - append_var DEFINES "-DLINUPY" + arm-*riscos) + _seq_midi=no + _timidity=no + _opengl_mode=none + _build_hq_scalers=no + # toolchain binaries prefixed by host + _ranlib=$_host-ranlib + _strip=$_host-strip + _ar="$_host-ar cru" + _as="$_host-as" ;; bfin*) ;; @@ -3013,6 +3038,9 @@ if test -n "$_host"; then _seq_midi=no _timidity=no ;; + linupy) + append_var DEFINES "-DLINUPY" + ;; m68k-atari-mint) append_var DEFINES "-DSYSTEM_NOT_SUPPORTING_D_TYPE" _ranlib=m68k-atari-mint-ranlib @@ -3577,7 +3605,7 @@ case $_host_os in amigaos* | cygwin* | dreamcast | ds | gamecube | mingw* | n64 | ps2 | ps3 | psp2 | psp | wii | wince) _posix=no ;; - 3ds | android | androidsdl | beos* | bsd* | darwin* | freebsd* | gnu* | gph-linux | haiku* | hpux* | iphone | ios7 | irix*| k*bsd*-gnu* | linux* | maemo | mint* | netbsd* | openbsd* | solaris* | sunos* | uclinux* | webos) + 3ds | android | androidsdl | beos* | bsd* | darwin* | freebsd* | gnu* | gph-linux | haiku* | hpux* | iphone | ios7 | irix*| k*bsd*-gnu* | linux* | maemo | mint* | netbsd* | openbsd* | riscos | solaris* | sunos* | uclinux* | webos) _posix=yes ;; os2-emx*) diff --git a/dists/riscos/!Boot,feb b/dists/riscos/!Boot,feb new file mode 100644 index 0000000000..b286b449fa --- /dev/null +++ b/dists/riscos/!Boot,feb @@ -0,0 +1,8 @@ +Set ScummVM$Dir <Obey$Dir> +IconSprites <ScummVM$Dir>.!Sprites + +Set ScummVM$Title "ScummVM" +Set ScummVM$Description "Play certain classic graphical point-and-click adventure games" +Set ScummVM$Publisher "ScummVM Developers" +Set ScummVM$Web "http://www.scummvm.org/" +Set ScummVM$Version "1.10.0git" diff --git a/dists/riscos/!Help,feb b/dists/riscos/!Help,feb new file mode 100644 index 0000000000..fca98bc69d --- /dev/null +++ b/dists/riscos/!Help,feb @@ -0,0 +1 @@ +Filer_Opendir <Obey$Dir>.docs diff --git a/dists/riscos/!Run,feb b/dists/riscos/!Run,feb new file mode 100644 index 0000000000..6c38b4b658 --- /dev/null +++ b/dists/riscos/!Run,feb @@ -0,0 +1,13 @@ +Run <Obey$Dir>.!Boot + +RMEnsure SharedUnixLibrary 1.14 RMLoad System:Modules.SharedULib +RMEnsure SharedUnixLibrary 1.14 Error ScummVM requires SharedUnixLibrary 1.14 or later. This can be downloaded from https://www.riscos.info/packages/LibraryDetails.html#SharedUnixLibrary + +RMEnsure DigitalRenderer 0.56 RMLoad System:Modules.DRenderer +RMEnsure DigitalRenderer 0.56 Error ScummVM requires DigitalRenderer 0.56 or later. This can be downloaded from https://www.riscos.info/packages/LibraryDetails.html#DRenderer + +Set ScummVM$stdout ><Choices$Write>.ScummVM.stdout 2><Choices$Write>.ScummVM.stderr +If "<Wimp$State>"="commands" Then Unset ScummVM$stdout Else CDir <Choices$Write>.ScummVM + +WimpSlot -min 8192K +Do Run <ScummVM$Dir>.scummvm %*0 <ScummVM$stdout> diff --git a/dists/riscos/!Sprites,ff9 b/dists/riscos/!Sprites,ff9 Binary files differnew file mode 100644 index 0000000000..20d12bbca4 --- /dev/null +++ b/dists/riscos/!Sprites,ff9 diff --git a/dists/riscos/!Sprites11,ff9 b/dists/riscos/!Sprites11,ff9 Binary files differnew file mode 100644 index 0000000000..3038943e87 --- /dev/null +++ b/dists/riscos/!Sprites11,ff9 |