home *** CD-ROM | disk | FTP | other *** search
- Greetings,
-
- Here's the source code for an Intel joystick driver I ported over from
- Linux. This driver allows you to create /dev/js[01] devices and
- then open/read from the devices for Joystick input. It only works
- on Intel hardware with a standard joystick. This driver was written
- and tested on an Intel Nextstep 3.3 system.
-
- I've had no formal training on writing device drivers, so use this
- code at your own risk. Most packages people make available say this,
- but as this is a device driver, this is a lot more risky than
- most packages. This driver runs at kernel level, and could easily
- destroy all data on any accessible IO device. It's possible (although
- unlikely) it could even damage your hardware.
-
- In addition to that, I've done very little hardware/assembly-level
- programming for Intel systems, and that which I did was all based
- on 8088 chips several years ago. What can I say? I'm an Apple II
- hacker, and my primary purpose in creating this was to get joystick
- support into the Apple II emulator :)
-
- I haven't had time to work on this project for awhile now, so I've
- decided to just make the source code available. Please feel free to
- improve it and post newer versions.
-
- I've tried to clean it up a bit today. I've rewritten some
- of the Makefiles and performed minimal testing. It still appears
- to work. I'm 99% certain the project should compile and work on
- other systems.
-
- The project actually consists of three areas:
- - The original linux joystick driver project,
- - An Intel generic-unix-like device driver (works),
- - and the start of a DriverKit device driver.
-
- I made almost no progress on writing a DriverKit driver, so there's
- probably little of value in that area.
-
- I'm not completely certain the linux code is unmodified.
- I could only find a file-by-file web page from which to
- download it, and I don't appear to have backed up that
- source. In fact, I'm pretty sure that I commented out the
- following line and added the other one. I also don't
- appear to have recorded where I got the original code.
- Try searching for linux joystick.
-
- // #define JOYSTICK_MAJOR 15
- #define JOYSTICK_MAJOR 113
-
- This driver installs as major device 32. This conflicts with the
- BPF (berkeley packet filter) device [distributed with ppp, but
- generally unused], but I was unsuccessful in my attempts to get
- any other device number to work. I have no idea why this was the
- case. It doesn't appear to be anything in the joystick driver code
- as the original code didn't even use 32. I got 32 from BPF. Since
- I do automatically load ppp when I boot, maybe something in ppp or
- bpf performs some missing initialization for using device 32.
-
- Using this driver has occasionally caused my clock to jump forward
- several minutes. I'm not familiar enough with Intel hardware to
- know why this happens. Probably either due to wrong handling of
- interrupts or due to conflicts with the timer that the joystick
- uses.
-
- Along those same lines, the code for CLI_STI (interrupts) is mostly
- guesswork. Heck, most of the code was guesswork derived from
- various other driver source code. However, I don't have a good
- feeling for the interrupt stuff. It seems to work both with and
- without the cli/sti calls. I can't remember, but I think I also
- tried spl calls at one point.
-
- I have done no or almost-no testing on joystick ioctl options.
- They may not work at all.
-
- I no longer remember what joystick_loadable does. The project seems to work
- equally well without it. By default, it's not installed.
- I've renamed the only copy of it I've found (from an old production
- directory to joystick_loadable.dist).
-
- I have successfully used this driver with a couple of test programs
- (included) as well as with a modified version of the a2 apple
- emulator (not included) to play some old Apple games.
-
- I'll try to find the time to upload the a2 emulator later.
- Joystick code is #ifdef'd with JOYSTICK_SUPPORT.
-
- Please feel free to contact me if you have any questions/comments.
- I'd really like to see this project become more usable.
-
- Things that really need done:
- - convert to DriverKit
-
- or
-
- - clean up interrupt code
- - chose (and get working) different major device number
- - make this "non-hacker" useable.
- - merge this into the windowserver so that joystick events
- are created rather than reading the devices in loops.
- - (try to keep it as compatible with linux driver as possible)
- - make setting absolute path to LIBDIR in Makefile unnecessary
- - make setting absolute major device in Makefile unnecessary
-
- To build this driver,
- cd joystick/joystick.next
- edit Makefile to set absolute path for LIBDIR. This points
- to the "production copy" of the driver. This copy is
- never modified except during "make install." Make clean
- won't delete this copy. Eventually, you'd probably
- want to put this production copy in /usr/local/etc
- or somewhere similar.
- edit Makefile and joystick_kernel.h to change major device number if
- necessary. See above caveats.
- make
-
- To install the driver (does not install/build test programs)
- make install
-
- To use the driver (this must be done as root)
- make install_driver # creates device files/loads driver
- make deinstall_driver # deletes device files/unloads driver
-
- It's probably safe to leave the /dev/js* entries around if you want.
-
- -Mike Kienenberger
- mkienenb@alaska.net
- November 3, 1997
-