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,ff9Binary files differ new file mode 100644 index 0000000000..20d12bbca4 --- /dev/null +++ b/dists/riscos/!Sprites,ff9 diff --git a/dists/riscos/!Sprites11,ff9 b/dists/riscos/!Sprites11,ff9Binary files differ new file mode 100644 index 0000000000..3038943e87 --- /dev/null +++ b/dists/riscos/!Sprites11,ff9 | 
