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
CDROM - Not implemented.
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.
