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.
--- 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
--- 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'`
--- 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);
}
--- /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}
+
--- 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}
-