Skip to content
Permalink
Browse files

To: sdl@libsdl.org

From: Staffan Ulfberg <staffan@ulfberg.se>
Date: 19 Nov 2005 01:00:48 +0100
Subject: [SDL] New driver for OpenBSD/wscons

Hello,

I've written an SDL driver for OpenBSD/wscons (console mode, somewhat
resembling the functionality of the svga driver for Linux).  I use it
for playing MAME on my Sharp Zaurus.  The alternative is to play under
X, which is slower.

I asked how to submit the driver a few days ago, and posted a link to
the patch in a follow-up, so maybe it was missed?

Anyway, the patch is on the web at:

http://multivac.fatburen.org/SDL-wscons.patch

Comments?

Staffan
  • Loading branch information
icculus committed Nov 22, 2005
1 parent bff0b45 commit df2b13dc061041609230583cc35639029c03f611
@@ -0,0 +1,107 @@
==============================================================================
Using the Simple DirectMedia Layer with OpenBSD/wscons
==============================================================================

The wscons SDL driver can be used to run SDL programs on OpenBSD
without running X. So far, the driver only runs on the Sharp Zaurus,
but the driver is written to be easily extended for other machines.
The main missing pieces are blitting routines for anything but 16 bit
displays, and keycode maps for other keyboards. Also, there is no
support for hardware palettes.

There is currently no mouse support.

To compile SDL with support for wscons, use the
"--enable-video-wscons" option when running configure. I used the
following command line:

./configure --disable-oss --disable-ltdl --enable-pthread-sem \
--disable-esd --disable-arts --disable-video-aalib \
--enable-openbsdaudio --enable-video-wscons \
--prefix=/usr/local --sysconfdir=/etc


Setting the console device to use
=================================

When starting an SDL program on a wscons console, the driver uses the
current virtual terminal (usually /dev/ttyC0). To force the driver to
use a specific terminal device, set the environment variable
SDL_WSCONSDEV:

bash$ SDL_WSCONSDEV=/dev/ttyC1 ./some-sdl-program

This is especially useful when starting an SDL program from a remote
login prompt (which is great for development). If you do this, and
want to use keyboard input, you should avoid having some other program
reading from the used virtual console (i.e., do not have a getty
running).


Rotating the display
====================

The display can be rotated by the wscons SDL driver. This is useful
for the Sharp Zaurus, since the display hardware is wired so that it
is correctly rotated only when the display is folded into "PDA mode."
When using the Zaurus in "normal," or "keyboard" mode, the hardware
screen is rotated 90 degrees anti-clockwise.

To let the wscons SDL driver rotate the screen, set the environment
variable SDL_VIDEO_WSCONS_ROTATION to "CW", "CCW", or "UD", for
clockwise, counter clockwise, and upside-down rotation respectively.
"CW" makes the screen appear correct on a Sharp Zaurus SL-C3100.

When using rotation in the driver, a "shadow" frame buffer is used to
hold the intermediary display, before blitting it to the actual
hardware frame buffer. This slows down performance a bit.

For completeness, the rotation "NONE" can be specified to use a shadow
frame buffer without actually rotating. Unsetting
SDL_VIDEO_WSCONS_ROTATION, or setting it to '' turns off the shadow
frame buffer for maximum performance.


Running MAME
============

Since my main motivation for writing the driver was playing MAME on
the Zaurus, I'll give a few hints:

XMame compiles just fine under OpenBSD.

I'm not sure this is strictly necessary, but set

MY_CPU = arm

in makefile.unix, and

CFLAGS.arm = -DLSB_FIRST -DALIGN_INTS -DALIGN_SHORTS

in src/unix/unix.max

to be sure.

The latest XMame (0.101 at this writing) is a very large program.
Either tinker with the make files to compile a version without support
for all drivers, or, get an older version of XMame. My recommendation
would be 0.37b16.

When running MAME, DO NOT SET SDL_VIDEO_WSCONS_ROTATION! Performace
is MUCH better without this, and it is COMPLETELY UNNECESSARY, since
MAME can rotate the picture itself while drawing, and does so MUCH
FASTER.

Use the Xmame command line option "-ror" to rotate the picture to the
right.


Acknowledgments
===============

I studied the wsfb driver for XFree86/Xorg quite a bit before writing
this, so there ought to be some similarities.


--
Staffan Ulfberg <staffan@ulfberg.se>
@@ -1645,6 +1645,37 @@ CheckQtopia()
fi
}

dnl Set up the wscons video driver if enabled
CheckWscons()
{
AC_ARG_ENABLE(video-wscons,
[ --enable-video-wscons use wscons video driver [default=no]],
, enable_video_wscons=no)
if test x$enable_video = xyes -a x$enable_video_wscons = xyes; then
AC_MSG_CHECKING(for wscons support)
video_wscons=no
AC_LANG_C
AC_TRY_COMPILE([
#include <sys/time.h>
#include <dev/wscons/wsconsio.h>
],[
],[
video_wscons=yes
])
AC_MSG_RESULT($video_wscons)
if test x$video_wscons = xyes; then
CFLAGS="$CFLAGS -DENABLE_WSCONS"
VIDEO_SUBDIRS="$VIDEO_SUBDIRS wscons"
VIDEO_DRIVERS="$VIDEO_DRIVERS wscons/libvideo_wscons.la"
else
AC_MSG_ERROR([
*** Failed to find wscons includes.])
fi
AC_LANG_C
fi
}


dnl Set up the PicoGUI video driver if enabled
CheckPicoGUI()
{
@@ -2210,6 +2241,7 @@ case "$target" in
CheckNAS
CheckX11
CheckAAlib
CheckWscons
CheckOpenGL
CheckPTHREAD
CheckSIGACTION
@@ -3088,6 +3120,7 @@ src/video/photon/Makefile
src/video/picogui/Makefile
src/video/ps2gs/Makefile
src/video/qtopia/Makefile
src/video/wscons/Makefile
src/video/quartz/Makefile
src/video/riscos/Makefile
src/video/svga/Makefile
@@ -9,7 +9,7 @@ DIST_SUBDIRS = dummy x11 dga nanox fbcon directfb vgl svga ggi aalib \
wincommon windib windx5 \
maccommon macdsp macrom riscos quartz \
bwindow ps2gs photon cybergfx epoc picogui \
ataricommon xbios gem dc qtopia XFree86
ataricommon xbios gem dc qtopia XFree86 wscons

DRIVERS = @VIDEO_DRIVERS@

@@ -411,6 +411,9 @@ extern VideoBootStrap GEM_bootstrap;
#ifdef ENABLE_QTOPIA
extern VideoBootStrap Qtopia_bootstrap;
#endif
#ifdef ENABLE_WSCONS
extern VideoBootStrap WSCONS_bootstrap;
#endif
#ifdef ENABLE_PICOGUI
extern VideoBootStrap PG_bootstrap;
#endif
@@ -63,6 +63,9 @@ static VideoBootStrap *bootstrap[] = {
#ifdef ENABLE_QTOPIA
&Qtopia_bootstrap,
#endif
#ifdef ENABLE_WSCONS
&WSCONS_bootstrap,
#endif
#ifdef ENABLE_FBCON
&FBCON_bootstrap,
#endif
@@ -0,0 +1,14 @@
## Makefile.am for SDL using the wscons video driver

noinst_LTLIBRARIES = libvideo_wscons.la
libvideo_wscons_la_SOURCES = $(WSCONS_SRCS)

# The SDL wscons video driver sources
WSCONS_SRCS = \
SDL_wsconsvideo.h \
SDL_wsconsevents.c \
SDL_wsconsevents_c.h \
SDL_wsconsmouse.c \
SDL_wsconsmouse_c.h \
SDL_wsconsvideo.c

0 comments on commit df2b13d

Please sign in to comment.