icculus@1187
|
1 |
==============================================================================
|
icculus@1187
|
2 |
Using the Simple DirectMedia Layer with OpenBSD/wscons
|
icculus@1187
|
3 |
==============================================================================
|
icculus@1187
|
4 |
|
icculus@1187
|
5 |
The wscons SDL driver can be used to run SDL programs on OpenBSD
|
icculus@1187
|
6 |
without running X. So far, the driver only runs on the Sharp Zaurus,
|
icculus@1187
|
7 |
but the driver is written to be easily extended for other machines.
|
icculus@1187
|
8 |
The main missing pieces are blitting routines for anything but 16 bit
|
icculus@1187
|
9 |
displays, and keycode maps for other keyboards. Also, there is no
|
icculus@1187
|
10 |
support for hardware palettes.
|
icculus@1187
|
11 |
|
icculus@1187
|
12 |
There is currently no mouse support.
|
icculus@1187
|
13 |
|
icculus@1187
|
14 |
To compile SDL with support for wscons, use the
|
icculus@1187
|
15 |
"--enable-video-wscons" option when running configure. I used the
|
icculus@1187
|
16 |
following command line:
|
icculus@1187
|
17 |
|
icculus@1187
|
18 |
./configure --disable-oss --disable-ltdl --enable-pthread-sem \
|
icculus@1187
|
19 |
--disable-esd --disable-arts --disable-video-aalib \
|
icculus@1187
|
20 |
--enable-openbsdaudio --enable-video-wscons \
|
icculus@1187
|
21 |
--prefix=/usr/local --sysconfdir=/etc
|
icculus@1187
|
22 |
|
icculus@1187
|
23 |
|
icculus@1187
|
24 |
Setting the console device to use
|
icculus@1187
|
25 |
=================================
|
icculus@1187
|
26 |
|
icculus@1187
|
27 |
When starting an SDL program on a wscons console, the driver uses the
|
icculus@1187
|
28 |
current virtual terminal (usually /dev/ttyC0). To force the driver to
|
icculus@1187
|
29 |
use a specific terminal device, set the environment variable
|
icculus@1187
|
30 |
SDL_WSCONSDEV:
|
icculus@1187
|
31 |
|
icculus@1187
|
32 |
bash$ SDL_WSCONSDEV=/dev/ttyC1 ./some-sdl-program
|
icculus@1187
|
33 |
|
icculus@1187
|
34 |
This is especially useful when starting an SDL program from a remote
|
icculus@1187
|
35 |
login prompt (which is great for development). If you do this, and
|
icculus@1187
|
36 |
want to use keyboard input, you should avoid having some other program
|
icculus@1187
|
37 |
reading from the used virtual console (i.e., do not have a getty
|
icculus@1187
|
38 |
running).
|
icculus@1187
|
39 |
|
icculus@1187
|
40 |
|
icculus@1187
|
41 |
Rotating the display
|
icculus@1187
|
42 |
====================
|
icculus@1187
|
43 |
|
icculus@1187
|
44 |
The display can be rotated by the wscons SDL driver. This is useful
|
icculus@1187
|
45 |
for the Sharp Zaurus, since the display hardware is wired so that it
|
icculus@1187
|
46 |
is correctly rotated only when the display is folded into "PDA mode."
|
icculus@1187
|
47 |
When using the Zaurus in "normal," or "keyboard" mode, the hardware
|
icculus@1187
|
48 |
screen is rotated 90 degrees anti-clockwise.
|
icculus@1187
|
49 |
|
icculus@1187
|
50 |
To let the wscons SDL driver rotate the screen, set the environment
|
icculus@1187
|
51 |
variable SDL_VIDEO_WSCONS_ROTATION to "CW", "CCW", or "UD", for
|
icculus@1187
|
52 |
clockwise, counter clockwise, and upside-down rotation respectively.
|
icculus@1187
|
53 |
"CW" makes the screen appear correct on a Sharp Zaurus SL-C3100.
|
icculus@1187
|
54 |
|
icculus@1187
|
55 |
When using rotation in the driver, a "shadow" frame buffer is used to
|
icculus@1187
|
56 |
hold the intermediary display, before blitting it to the actual
|
icculus@1187
|
57 |
hardware frame buffer. This slows down performance a bit.
|
icculus@1187
|
58 |
|
icculus@1187
|
59 |
For completeness, the rotation "NONE" can be specified to use a shadow
|
icculus@1187
|
60 |
frame buffer without actually rotating. Unsetting
|
icculus@1187
|
61 |
SDL_VIDEO_WSCONS_ROTATION, or setting it to '' turns off the shadow
|
icculus@1187
|
62 |
frame buffer for maximum performance.
|
icculus@1187
|
63 |
|
icculus@1187
|
64 |
|
icculus@1187
|
65 |
Running MAME
|
icculus@1187
|
66 |
============
|
icculus@1187
|
67 |
|
icculus@1187
|
68 |
Since my main motivation for writing the driver was playing MAME on
|
icculus@1187
|
69 |
the Zaurus, I'll give a few hints:
|
icculus@1187
|
70 |
|
icculus@1187
|
71 |
XMame compiles just fine under OpenBSD.
|
icculus@1187
|
72 |
|
icculus@1187
|
73 |
I'm not sure this is strictly necessary, but set
|
icculus@1187
|
74 |
|
icculus@1187
|
75 |
MY_CPU = arm
|
icculus@1187
|
76 |
|
icculus@1187
|
77 |
in makefile.unix, and
|
icculus@1187
|
78 |
|
icculus@1187
|
79 |
CFLAGS.arm = -DLSB_FIRST -DALIGN_INTS -DALIGN_SHORTS
|
icculus@1187
|
80 |
|
icculus@1187
|
81 |
in src/unix/unix.max
|
icculus@1187
|
82 |
|
icculus@1187
|
83 |
to be sure.
|
icculus@1187
|
84 |
|
icculus@1187
|
85 |
The latest XMame (0.101 at this writing) is a very large program.
|
icculus@1187
|
86 |
Either tinker with the make files to compile a version without support
|
icculus@1187
|
87 |
for all drivers, or, get an older version of XMame. My recommendation
|
icculus@1187
|
88 |
would be 0.37b16.
|
icculus@1187
|
89 |
|
icculus@1187
|
90 |
When running MAME, DO NOT SET SDL_VIDEO_WSCONS_ROTATION! Performace
|
icculus@1187
|
91 |
is MUCH better without this, and it is COMPLETELY UNNECESSARY, since
|
icculus@1187
|
92 |
MAME can rotate the picture itself while drawing, and does so MUCH
|
icculus@1187
|
93 |
FASTER.
|
icculus@1187
|
94 |
|
icculus@1187
|
95 |
Use the Xmame command line option "-ror" to rotate the picture to the
|
icculus@1187
|
96 |
right.
|
icculus@1187
|
97 |
|
icculus@1187
|
98 |
|
icculus@1187
|
99 |
Acknowledgments
|
icculus@1187
|
100 |
===============
|
icculus@1187
|
101 |
|
icculus@1187
|
102 |
I studied the wsfb driver for XFree86/Xorg quite a bit before writing
|
icculus@1187
|
103 |
this, so there ought to be some similarities.
|
icculus@1187
|
104 |
|
icculus@1187
|
105 |
|
icculus@1187
|
106 |
--
|
icculus@1187
|
107 |
Staffan Ulfberg <staffan@ulfberg.se>
|