Readme for RISC OS port of SDL
==============================

This document last updated on 2nd Februrary 2006

This is a RISC OS port of the Simple Direct Media Layer (SDL) by Alan Buckley with contributions from Peter Naulls.

Details of the SDL can be found at http://www.libsdl.org.

The source code including the RISC OS version can be obtained from:

http://www.libsdl.org.

Pre built libraries and many games and applications compiled for RISC OS using this library can be downloaded from The Unix Porting Project at http://www.riscos.info/unix/.

This is released under the LGPL see the file COPYING for details.


Compiling applications under RISC OS
====================================

Add -ISDL: for the C compiler flags if you include the files in the SDL directory. e.g. #include "SDL/SDL.h"
Add -ISDL:SDL for the C compiler flags if you include the files directly. e.g. #include "SDL/SDL.h"

Add -LSDL: -lSDL to the link stage of compilation.

For example, to compile the testbitmap.c sample you could use:

gcc -ISDL:SDL -LSDL: -lSDL testbitmap.c -otestbitmap


RISC OS port of SDL runtime information
=======================================

Runtime requirements
--------------------

This library currently needs a minimum of RISC OS 3.6. The source code for the library (and a lot of the programs built with it) also need long file names.

To use the audio you also need 16 bit sound and to have installed the DigitalRender module by Andreas Dehmel version 0.51 available from his
web site: http://home.t-online.de/~zarquon
This is loaded when needed by UnixLib.

Note: As most programs ported from other OSes use high resolution graphics and a memory back buffer a machine with a StrongARM processor and 1 or 2MB of VRAM (or a better machine) is recomended.


RISC OS runtime parameters
--------------------------

Several environmental variables have been defined to make porting programs easier (i.e. By setting these variable you do not need to have source code differences between OSes).

They are all defined on an application basis.

The <appname> used below is found as follows:
1. Use the name of the program unless it is !RunImage
2. Check the folder specification for the folder !RunImage is run from. If it is a folder name use that name, otherwise if it is an environmental variable of the form <XXX$Dir> use the value of XXX.

The variables are:

SDL$<appname>$TaskName

The name of the task for RISC OS. If omitted then <appname> is used for the task name,

SDL$<appname>$BackBuffer

Set to 1 to use a system memory back buffer for the screen in full screen mode. Some programs on other systems assume their is always a back buffer even though the SDL specification specifies this is not the case. The current RISC OS implementation uses direct writes to the screen if a hardware fullscreen is requested.

Set to 2 to use an ARM code full word copy. This is faster than the standard back buffer, but uses aligned words only so it is possible (but unlikely) for it to corrupt the screen for 8bpp and 16bpp modes.

Set to 3 to use a RISC OS sprite as the back buffer. This is usually the slowest for most SDL applications, however it may be useful in the future as Sprite acceleration is added to various hardware that runs RISC OS.

SDL$<appname>$CloseAction - set the action for the close icon. Again as programs don't match the specification you can set this to 0 to remove the close icon from the main window for applications where this does not affect the program.


RISC OS SDL port API notes
==========================

Current level of implementation
-------------------------------

The following list is an overview of how much of the SDL is implemented. The areas match the main areas of the SDL.

video - Mostly done. Doesn't cover gamma, YUV-overlay or OpenGL.
Window Manager - Mostly done. SetIcon/IconifyWindow not implemented.
Events - Mostly done. Resize and some joystick events missing.
Joystick - Currently assumes a single joystick with 4 buttons.
Audio - Done
Threads - Done
Timers - Done

Thread support can be removed by defining DISABLE_THREADS and recompiling the library.

SDL API notes
-------------

This section contains additional notes on some specific commands.

SDL_SetVideoMode
  On RISC OS a fullscreen mode directly accesses the screen. This can be modified by the environmental variable (SDL$<appname>$BackBuffer) or by using the SDL_SWSURFACE flag to write to an offscreen buffer that is updated using SDL_UpdateRects.
  Open GL is not supported so SDL_OPENGL and SDL_OPENGLBLIT flags fail.
  SDL_RESIZEABLE and SDL_NOFRAME flags are not supported.

SDL_SetColors
  In a wimp mode the screen colours are not changed for a hardware palette instead the RISC OS sprite colour mapping is used to get the best matching colours.

SDL_CreateCursor
   Inverted colour is not supported.

SDL_WM_ToggleFullScreen
   Currently this won't work if the application starts up in Fullscreen mode.
   Toggling to fullscreen will only work if the monitor is set up to support the exact screen size requested.

SDL_EnableUNICODE
   Unicode translation used here is only really accurate for 7 bit characters.

SDL_NumJoysticks/JoystickName etc.
   Hardcoded to expect only 1 joystick with 4 buttons if the Joystick module is loaded.

SDL_GetTicks
   Timer used has only a centisecond accuracy. This applies to other time related functions.
   
SDL_Delay
   Modified to poll keyboard/mouse during the delay on the event thread.


Notes on current implementation
-------------------------------

Keyboard and mouse are polled so if too long a time is spent between a call to SDL_PumpEvents, functions that use it, or SDL_Delay events can be missed.
