| ============================================================================== |
| 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> |