[img] BBC Mice and Mouse Drivers
MDFS::Info.Comp.BBC.Mouse Search

Mice
suitable for BBCs [61K]A quadrature mouse (such as an Archimedes mouse) can be plugged into the BBC user port. It should be wired up as shown below. You can simply put a 20pin IDE head on the end of the mouse cable, but it is useful to put a 9-pin D socket (female, no pins) on mice using the standard Amiga pinouts, or Master Compact pinouts. I prefer to use Amiga pinouts as mice are easier to come by already wired up with an Amiga plug on the end. Note that Atari mice have exactly the same pinout as the Amiga mouse, except that pins 1 and 4 are swapped with each other. Some mice come with a switch to do this.
  +5v  1 |  2  CB1 - Xaxis               / |                      / |
       3 |  4  CB2 - Yaxis              / 1| Yaxis               / 1| Xdir
   0v  5 |  6  D0  - Xdir         Left |6  |               Left |6  |
       7 |  8  D1                      |  2| Xaxis              |  2| Right
       9 | 10  D2  - YDir          +5v |7  |                +5v |7  |
      11 | 12  D3                      |  3| Ydir               |  3| Middle
      13 | 14  D4                   0v |8  |                 0v |8  |
      15 | 16  D5  - Left              |  4| Xdir               |  4| Ydir
      17 | 18  D6  - Middle      Right |9  |              Yaxis |9  |
      19 | 20  D7  - Right              \ 5| Middle              \ 5| Xaxis
     USER PORT                           \ |                      \ |
                                  AMIGA MOUSE PORT        COMPACT MOUSE PORT
Mouse
adapter leads [57K]A short adapter with a 20-pin IDC header and a 9-pin D plug (male, pins) makes the user port accessible for plugging in the mouse and lets mice be interchangeable between Compacts and non-Compacts.

Mouse Driver

Mouse.zip contains a *MOUSE command which provides a mouse driver, and a relocatable sideways ROM that provides a *MOUSE command.

DFS224+Mse and DFS229+Mse are DFS ROM images for the Master and Master Compact that include a mouse driver in the spare ROM space using ROMMouse.src.

Once the mouse driver has been turned on with *MOUSE ON, then the mouse position and button state can be read using OSBYTE or OSWORD. The OSBYTE routines are accessible using the INKEY and ADVAL calls.

ADVAL(7) Osbyte &80,&07,&00 Mouse X position
ADVAL(8) Osbyte &80,&08,&00 Mouse Y position
ADVAL(9) Osbyte &80,&09,&00 Mouse buttons %rml, set if pressed
INKEY-10 Osbyte &81,&F6,&FF Mouse left button
INKEY-11 Osbyte &82,&F5,&FF Mouse middle button
INKEY-12 Osbyte &82,&F4,&FF Mouse right button

The mouse driver also responds to the AMX OSWORD 64 call. On exit:

XY+0, XY+1Mouse X position
XY+2, XY+3Mouse Y position
XY+4 Text X position
XY+5 Text Y position
XY+6 Mouse buttons b7=R, b6=M, b5=L, clear if button pressed

MouseTest is a short BASIC program that tests the mouse calls and displays their return values.

Mouse programming

MouseLib is a BASIC library providing a handful of mouse interface routines:

DEFPROCMouse_Init initialises mouse variables mx%,my%,bl%,bm% and br%.
DEFPROCMouse_UntilAction waits until the mouse changes state, by being moved or a button being pressed, or until a keyboard key is pressed.
DEFPROCMouse_Readreads the mouse state into mx%,my%,bl%,bm% and br%, being the mouse x and y position, and the button left, middle and right state.
DEFPROCPointer_Init initialises a simple pointer.
DEFPROCPointer_Drawdraws a pointer at the current graphics position.
DEFPROCPointer_UntilAction waits until the mouse buttons change state or a keyboard key is pressed, drawing a pointer at the mouse position while waiting.

using the Mouse library a main program just needs to start by calling PROCMouse_Init and use PROCPointer_UntilAction in the main loop.


Best viewed with Any Browser Valid HTML 4.0! Hosted by Force9 Internet - Authored by J.G.Harston
Last update: 09-Jan-2006