# HG changeset patch # User Sam Lantinga # Date 1141269860 0 # Node ID 1e8582152d44c7da4fc343ac7d65c494002cfb46 # Parent bf8db2d92be118024aafdf8bd83493fa036a2748 Date: Wed, 01 Mar 2006 10:14:31 +0000 From: "alan buckley" Subject: Re: Updating SDL for RISC OS I've attached a zip file with three diffs to get SDL to build on RISC OS. configure.in.diff and makedeps.sh.diff have been modified so that they can build the assembler file in video/riscos. You may want to double check these as I don't know a lot about unix shell programming. (I've tested them cross-compiling on cygwin). sdlsysthread.diff is the changes required to SDL_systhread.c for RISC OS. As you suspected with these changes in place you can delete the RISC OS specific threading code in thread/riscos. I've also renamed SDL_riscosASM.s to SDL_riscosASM.S, but I'm never quite sure how to rename files in CVS, so if you could to this it would be appreciated. diff -r bf8db2d92be1 -r 1e8582152d44 build-scripts/makedep.sh --- a/build-scripts/makedep.sh Thu Mar 02 03:18:21 2006 +0000 +++ b/build-scripts/makedep.sh Thu Mar 02 03:24:20 2006 +0000 @@ -69,6 +69,12 @@ __EOF__ ;; + S) cat >>${output}.new <<__EOF__ + + \$(LIBTOOL) --mode=compile \$(CC) -c $src -o \$@ + +__EOF__ + ;; *) echo "Unknown file extension: $ext";; esac echo "" >>${output}.new diff -r bf8db2d92be1 -r 1e8582152d44 configure.in --- a/configure.in Thu Mar 02 03:18:21 2006 +0000 +++ b/configure.in Thu Mar 02 03:24:20 2006 +0000 @@ -2325,6 +2325,7 @@ if test x$enable_video = xyes; then AC_DEFINE(SDL_VIDEO_DRIVER_RISCOS) SOURCES="$SOURCES $srcdir/src/video/riscos/*.c" + SOURCES="$SOURCES $srcdir/src/video/riscos/*.S" have_video=yes fi # Set up files for the joystick library @@ -2388,6 +2389,7 @@ OBJECTS=`echo $OBJECTS | sed 's,[[^ ]]*/\([[^ ]]*\)\.cc,$(objects)/\1.lo,g'` OBJECTS=`echo $OBJECTS | sed 's,[[^ ]]*/\([[^ ]]*\)\.m,$(objects)/\1.lo,g'` OBJECTS=`echo $OBJECTS | sed 's,[[^ ]]*/\([[^ ]]*\)\.c,$(objects)/\1.lo,g'` +OBJECTS=`echo $OBJECTS | sed 's,[[^ ]]*/\([[^ ]]*\)\.S,$(objects)/\1.lo,g'` SDLMAIN_OBJECTS=`echo $SDLMAIN_SOURCES | sed 's,[[^ ]]*/\([[^ ]]*\)\.cc,$(objects)/\1.o,g'` SDLMAIN_OBJECTS=`echo $SDLMAIN_OBJECTS | sed 's,[[^ ]]*/\([[^ ]]*\)\.m,$(objects)/\1.o,g'` diff -r bf8db2d92be1 -r 1e8582152d44 src/thread/pthread/SDL_systhread.c --- a/src/thread/pthread/SDL_systhread.c Thu Mar 02 03:18:21 2006 +0000 +++ b/src/thread/pthread/SDL_systhread.c Thu Mar 02 03:24:20 2006 +0000 @@ -34,6 +34,13 @@ SIGVTALRM, SIGPROF, 0 }; +#ifdef __RISCOS__ +/* RISC OS needs to know the main thread for + * it's timer and event processing. */ +int riscos_using_threads = 0; +Uint32 riscos_main_thread = 0; /* Thread running events */ +#endif + static void *RunThread(void *data) { @@ -58,6 +65,14 @@ SDL_SetError("Not enough resources to create thread"); return(-1); } + +#ifdef __RISCOS__ + if (riscos_using_threads == 0) { + riscos_using_threads = 1; + riscos_main_thread = SDL_ThreadID(); + } +#endif + return(0); } diff -r bf8db2d92be1 -r 1e8582152d44 src/video/riscos/SDL_riscosASM.S --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/video/riscos/SDL_riscosASM.S Thu Mar 02 03:24:20 2006 +0000 @@ -0,0 +1,116 @@ +; +; SDL - Simple DirectMedia Layer +; Copyright (C) 1997-2004 Sam Lantinga +; +; This library is free software; you can redistribute it and/or +; modify it under the terms of the GNU Library General Public +; License as published by the Free Software Foundation; either +; version 2 of the License, or (at your option) any later version. +; +; This library 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 +; Library General Public License for more details. +; +; You should have received a copy of the GNU Library General Public +; License along with this library; if not, write to the Free +; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +; +; Sam Lantinga +; slouken@libsdl.org +; +; Assembler routines for RISC OS display +; + + AREA |C$$CODE| + + EXPORT |RISCOS_Put32| + +; Display 32bpp to 32bpp, 1:1 +; +; Code provided by Adrain Lees +; +; entry a1 -> destination +; a2 = dest width in pixels +; a3 = dest line length in bytes +; a4 = dest height in scanlines +; arg5 -> source +; arg6 = byte offset from end of source line to start of next + +Arg5 * 10*4 +Arg6 * Arg5+4 + +RISCOS_Put32 ROUT + STMFD sp!,{a2,v1-v6,sl,fp,lr} + LDR ip,[sp,#Arg5] + MOV lr,a1 + B ucp64lp + +00 ;tail strip of 1-15 pixels + + LDR v1,[ip],#4 +01 SUBS a2,a2,#1 + STR v1,[lr],#4 + LDRHI v1,[ip],#4 + BHI %01 + B %02 + +ucp64end ADDS a2,a2,#16 + BNE %00 + +02 SUBS a4,a4,#1 ;height-- + LDRHI v1,[sp,#Arg6] + LDRHI a2,[sp] ;reload width + BLS %03 + + ;move to start of next scanline + + ADD lr,a1,a3 + ADD a1,a1,a3 + ADD ip,ip,v1 + +ucp64lp SUBS a2,a2,#16 + BLO ucp64end + + PLD [ip,#64] + + LDR v1,[ip],#4 + LDR v2,[ip],#4 + LDR v3,[ip],#4 + LDR v4,[ip],#4 + LDR v5,[ip],#4 + LDR v6,[ip],#4 + LDR sl,[ip],#4 + LDR fp,[ip],#4 + STR v1,[lr],#4 + STR v2,[lr],#4 + STR v3,[lr],#4 + STR v4,[lr],#4 + STR v5,[lr],#4 + STR v6,[lr],#4 + STR sl,[lr],#4 + STR fp,[lr],#4 + + PLD [ip,#64] + + LDR v1,[ip],#4 + LDR v2,[ip],#4 + LDR v3,[ip],#4 + LDR v4,[ip],#4 + LDR v5,[ip],#4 + LDR v6,[ip],#4 + LDR sl,[ip],#4 + LDR fp,[ip],#4 + STR v1,[lr],#4 + STR v2,[lr],#4 + STR v3,[lr],#4 + STR v4,[lr],#4 + STR v5,[lr],#4 + STR v6,[lr],#4 + STR sl,[lr],#4 + STR fp,[lr],#4 + + B ucp64lp + +03 LDMFD sp!,{a2,v1-v6,sl,fp,pc} + diff -r bf8db2d92be1 -r 1e8582152d44 src/video/riscos/SDL_riscosASM.s --- a/src/video/riscos/SDL_riscosASM.s Thu Mar 02 03:18:21 2006 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,116 +0,0 @@ -; -; SDL - Simple DirectMedia Layer -; Copyright (C) 1997-2004 Sam Lantinga -; -; This library is free software; you can redistribute it and/or -; modify it under the terms of the GNU Library General Public -; License as published by the Free Software Foundation; either -; version 2 of the License, or (at your option) any later version. -; -; This library 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 -; Library General Public License for more details. -; -; You should have received a copy of the GNU Library General Public -; License along with this library; if not, write to the Free -; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -; -; Sam Lantinga -; slouken@libsdl.org -; -; Assembler routines for RISC OS display -; - - AREA |C$$CODE| - - EXPORT |RISCOS_Put32| - -; Display 32bpp to 32bpp, 1:1 -; -; Code provided by Adrain Lees -; -; entry a1 -> destination -; a2 = dest width in pixels -; a3 = dest line length in bytes -; a4 = dest height in scanlines -; arg5 -> source -; arg6 = byte offset from end of source line to start of next - -Arg5 * 10*4 -Arg6 * Arg5+4 - -RISCOS_Put32 ROUT - STMFD sp!,{a2,v1-v6,sl,fp,lr} - LDR ip,[sp,#Arg5] - MOV lr,a1 - B ucp64lp - -00 ;tail strip of 1-15 pixels - - LDR v1,[ip],#4 -01 SUBS a2,a2,#1 - STR v1,[lr],#4 - LDRHI v1,[ip],#4 - BHI %01 - B %02 - -ucp64end ADDS a2,a2,#16 - BNE %00 - -02 SUBS a4,a4,#1 ;height-- - LDRHI v1,[sp,#Arg6] - LDRHI a2,[sp] ;reload width - BLS %03 - - ;move to start of next scanline - - ADD lr,a1,a3 - ADD a1,a1,a3 - ADD ip,ip,v1 - -ucp64lp SUBS a2,a2,#16 - BLO ucp64end - - PLD [ip,#64] - - LDR v1,[ip],#4 - LDR v2,[ip],#4 - LDR v3,[ip],#4 - LDR v4,[ip],#4 - LDR v5,[ip],#4 - LDR v6,[ip],#4 - LDR sl,[ip],#4 - LDR fp,[ip],#4 - STR v1,[lr],#4 - STR v2,[lr],#4 - STR v3,[lr],#4 - STR v4,[lr],#4 - STR v5,[lr],#4 - STR v6,[lr],#4 - STR sl,[lr],#4 - STR fp,[lr],#4 - - PLD [ip,#64] - - LDR v1,[ip],#4 - LDR v2,[ip],#4 - LDR v3,[ip],#4 - LDR v4,[ip],#4 - LDR v5,[ip],#4 - LDR v6,[ip],#4 - LDR sl,[ip],#4 - LDR fp,[ip],#4 - STR v1,[lr],#4 - STR v2,[lr],#4 - STR v3,[lr],#4 - STR v4,[lr],#4 - STR v5,[lr],#4 - STR v6,[lr],#4 - STR sl,[lr],#4 - STR fp,[lr],#4 - - B ucp64lp - -03 LDMFD sp!,{a2,v1-v6,sl,fp,pc} -