Atari port cleanups from Patrice
--HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40306
This commit is contained in:
parent
94746b8b48
commit
8de550f702
12 changed files with 180 additions and 85 deletions
11
README.MiNT
11
README.MiNT
|
@ -59,9 +59,9 @@ Threads support (TOS)
|
||||||
- Driver combinations:
|
- Driver combinations:
|
||||||
Video Kbd Mouse Timer Jstick Joypads
|
Video Kbd Mouse Timer Jstick Joypads
|
||||||
xbios ikbd ikbd vbl ikbd hardware
|
xbios ikbd ikbd vbl ikbd hardware
|
||||||
xbios gemdos xbios vbl - hardware
|
xbios gemdos xbios vbl xbios hardware
|
||||||
xbios bios xbios vbl - hardware
|
xbios bios xbios vbl xbios hardware
|
||||||
gem gem gem vbl - hardware
|
gem gem gem vbl xbios hardware
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
V. Environment variables:
|
V. Environment variables:
|
||||||
|
@ -79,7 +79,8 @@ SDL_JOYSTICK_ATARI:
|
||||||
Use any of these strings in the environment variable to enable or
|
Use any of these strings in the environment variable to enable or
|
||||||
disable a joystick:
|
disable a joystick:
|
||||||
|
|
||||||
'ikbd-joy1-[on|off]' for IKBD joystick on port 1
|
'ikbd-joy1-[on|off]' for IKBD joystick on port 1 (hardware access)
|
||||||
|
'xbios-joy1-[on|off]' for IKBD joystick on port 1 (xbios access)
|
||||||
'porta-pad-[on|off]' for joypad on port A
|
'porta-pad-[on|off]' for joypad on port A
|
||||||
'porta-joy0-[on|off]' for joystick 0 on port A
|
'porta-joy0-[on|off]' for joystick 0 on port A
|
||||||
'porta-joy1-[on|off]' for joystick 1 on port A
|
'porta-joy1-[on|off]' for joystick 1 on port A
|
||||||
|
@ -92,6 +93,7 @@ SDL_JOYSTICK_ATARI:
|
||||||
|
|
||||||
Default configuration is:
|
Default configuration is:
|
||||||
'ikbd-joy1-on' (if IKBD events driver enabled)
|
'ikbd-joy1-on' (if IKBD events driver enabled)
|
||||||
|
'xbios-joy1-on' (if gemdos/bios/gem events driver enabled)
|
||||||
'porta-pad-on portb-pad-on' (if available on the machine)
|
'porta-pad-on portb-pad-on' (if available on the machine)
|
||||||
|
|
||||||
port[a|b]-[pad|joy?|lp|anpad]-* strings are mutually exclusives.
|
port[a|b]-[pad|joy?|lp|anpad]-* strings are mutually exclusives.
|
||||||
|
@ -99,7 +101,6 @@ SDL_JOYSTICK_ATARI:
|
||||||
a lightpen OR an analog paddle. You must disable joypad before
|
a lightpen OR an analog paddle. You must disable joypad before
|
||||||
setting another controller.
|
setting another controller.
|
||||||
|
|
||||||
IKBD joystick only available when the IKBD events driver is enabled.
|
|
||||||
The second joystick port on IKBD is used by the mouse, so not usable.
|
The second joystick port on IKBD is used by the mouse, so not usable.
|
||||||
|
|
||||||
Joypads are multibuttons controller (Atari Jaguar console-like).
|
Joypads are multibuttons controller (Atari Jaguar console-like).
|
||||||
|
|
|
@ -31,6 +31,7 @@ static char rcsid =
|
||||||
* Patrice Mandin
|
* Patrice Mandin
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
@ -43,12 +44,15 @@ static char rcsid =
|
||||||
#include "SDL_sysjoystick.h"
|
#include "SDL_sysjoystick.h"
|
||||||
#include "SDL_joystick_c.h"
|
#include "SDL_joystick_c.h"
|
||||||
|
|
||||||
#include "../video/ataricommon/SDL_ikbdinterrupt_s.h"
|
#include "SDL_ikbdinterrupt_s.h"
|
||||||
|
#include "SDL_xbiosevents_c.h"
|
||||||
|
#include "SDL_xbiosinterrupt_s.h"
|
||||||
|
|
||||||
/*--- Const ---*/
|
/*--- Const ---*/
|
||||||
|
|
||||||
/* We can have:
|
/* We can have:
|
||||||
1 joystick on IKBD port 1 (port 0 is used by mouse)
|
1 joystick on IKBD port 1, read via hardware I/O
|
||||||
|
or same joystick on IKBD port 1, read via xbios
|
||||||
2 joypads on ports A,B
|
2 joypads on ports A,B
|
||||||
or 4 joysticks on joypads ports A,B
|
or 4 joysticks on joypads ports A,B
|
||||||
or 1 lightpen on joypad port A
|
or 1 lightpen on joypad port A
|
||||||
|
@ -58,6 +62,7 @@ static char rcsid =
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
IKBD_JOY1=0,
|
IKBD_JOY1=0,
|
||||||
|
XBIOS_JOY1,
|
||||||
PORTA_PAD,
|
PORTA_PAD,
|
||||||
PORTB_PAD,
|
PORTB_PAD,
|
||||||
PORTA_JOY0,
|
PORTA_JOY0,
|
||||||
|
@ -116,6 +121,7 @@ typedef struct {
|
||||||
|
|
||||||
static atarijoy_t atarijoysticks[MAX_JOYSTICKS]={
|
static atarijoy_t atarijoysticks[MAX_JOYSTICKS]={
|
||||||
{SDL_FALSE,"IKBD joystick port 1",0},
|
{SDL_FALSE,"IKBD joystick port 1",0},
|
||||||
|
{SDL_FALSE,"Xbios joystick port 1",0},
|
||||||
{SDL_FALSE,"Joypad port A",0},
|
{SDL_FALSE,"Joypad port A",0},
|
||||||
{SDL_FALSE,"Joypad port B",0},
|
{SDL_FALSE,"Joypad port B",0},
|
||||||
{SDL_FALSE,"Joystick 0 port A",0},
|
{SDL_FALSE,"Joystick 0 port A",0},
|
||||||
|
@ -132,11 +138,11 @@ static atarijoy_t atarijoysticks[MAX_JOYSTICKS]={
|
||||||
};
|
};
|
||||||
|
|
||||||
static const int jp_buttons[JP_NUM_BUTTONS]={
|
static const int jp_buttons[JP_NUM_BUTTONS]={
|
||||||
JP_KPMULT, JP_KP7, JP_KP4, JP_KP1,
|
JP_FIRE0, JP_FIRE1, JP_FIRE2, JP_PAUSE,
|
||||||
JP_KP0, JP_KP8, JP_KP5, JP_KP2,
|
JP_OPTION, JP_KPMULT, JP_KPNUM, JP_KP0,
|
||||||
JP_KPNUM, JP_KP9, JP_KP6, JP_KP3,
|
JP_KP1, JP_KP2, JP_KP3, JP_KP4,
|
||||||
JP_PAUSE, JP_FIRE0, JP_FIRE1, JP_FIRE2,
|
JP_KP5, JP_KP6, JP_KP7, JP_KP8,
|
||||||
JP_OPTION
|
JP_KP9
|
||||||
};
|
};
|
||||||
|
|
||||||
static SDL_bool joypad_ports_enabled=SDL_FALSE;
|
static SDL_bool joypad_ports_enabled=SDL_FALSE;
|
||||||
|
@ -160,8 +166,6 @@ int SDL_SYS_JoystickInit(void)
|
||||||
int i;
|
int i;
|
||||||
unsigned long cookie_mch;
|
unsigned long cookie_mch;
|
||||||
const char *envr=getenv("SDL_JOYSTICK_ATARI");
|
const char *envr=getenv("SDL_JOYSTICK_ATARI");
|
||||||
const char *env_evt=getenv("SDL_ATARI_EVENTSDRIVER");
|
|
||||||
SDL_bool ikbd_enabled=SDL_FALSE;
|
|
||||||
|
|
||||||
#define TEST_JOY_ENABLED(env,idstring,num) \
|
#define TEST_JOY_ENABLED(env,idstring,num) \
|
||||||
if (strstr(env,idstring"-off")) { \
|
if (strstr(env,idstring"-off")) { \
|
||||||
|
@ -179,28 +183,23 @@ int SDL_SYS_JoystickInit(void)
|
||||||
/* Enable some default joysticks */
|
/* Enable some default joysticks */
|
||||||
if ((cookie_mch == MCH_ST<<16) || ((cookie_mch>>16) == MCH_STE) ||
|
if ((cookie_mch == MCH_ST<<16) || ((cookie_mch>>16) == MCH_STE) ||
|
||||||
(cookie_mch == MCH_TT<<16) || (cookie_mch == MCH_F30<<16)) {
|
(cookie_mch == MCH_TT<<16) || (cookie_mch == MCH_F30<<16)) {
|
||||||
ikbd_enabled=SDL_TRUE;
|
atarijoysticks[IKBD_JOY1].enabled=(SDL_AtariIkbd_enabled!=0);
|
||||||
if (env_evt) {
|
|
||||||
if (!strcmp(env_evt,"ikbd")) {
|
|
||||||
ikbd_enabled=SDL_FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
atarijoysticks[IKBD_JOY1].enabled=ikbd_enabled;
|
|
||||||
}
|
}
|
||||||
if ((cookie_mch == MCH_STE<<16) || (cookie_mch == MCH_F30<<16)) {
|
if ((cookie_mch == MCH_STE<<16) || (cookie_mch == MCH_F30<<16)) {
|
||||||
atarijoysticks[PORTA_PAD].enabled=SDL_TRUE;
|
atarijoysticks[PORTA_PAD].enabled=SDL_TRUE;
|
||||||
atarijoysticks[PORTB_PAD].enabled=SDL_TRUE;
|
atarijoysticks[PORTB_PAD].enabled=SDL_TRUE;
|
||||||
}
|
}
|
||||||
|
if (!atarijoysticks[IKBD_JOY1].enabled) {
|
||||||
|
atarijoysticks[XBIOS_JOY1].enabled=(SDL_AtariXbios_enabled!=0);
|
||||||
|
}
|
||||||
|
|
||||||
/* Read environment for joysticks to enable */
|
/* Read environment for joysticks to enable */
|
||||||
if (envr) {
|
if (envr) {
|
||||||
/* IKBD on any Atari, maybe clones */
|
/* IKBD on any Atari, maybe clones */
|
||||||
if ((cookie_mch == MCH_ST<<16) || ((cookie_mch>>16) == MCH_STE) ||
|
if ((cookie_mch == MCH_ST<<16) || ((cookie_mch>>16) == MCH_STE) ||
|
||||||
(cookie_mch == MCH_TT<<16) || (cookie_mch == MCH_F30<<16)) {
|
(cookie_mch == MCH_TT<<16) || (cookie_mch == MCH_F30<<16)) {
|
||||||
if (env_evt) {
|
if (SDL_AtariIkbd_enabled!=0) {
|
||||||
if (strcmp(env_evt,"ikbd")) {
|
TEST_JOY_ENABLED(envr, "ikbd-joy1", IKBD_JOY1);
|
||||||
TEST_JOY_ENABLED(envr, "ikbd-joy1", IKBD_JOY1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Joypads ports only on STE and Falcon */
|
/* Joypads ports only on STE and Falcon */
|
||||||
|
@ -226,6 +225,12 @@ int SDL_SYS_JoystickInit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!atarijoysticks[IKBD_JOY1].enabled) {
|
||||||
|
if (SDL_AtariXbios_enabled!=0) {
|
||||||
|
TEST_JOY_ENABLED(envr, "xbios-joy1", XBIOS_JOY1);
|
||||||
|
}
|
||||||
|
}
|
||||||
#if 0
|
#if 0
|
||||||
/* Parallel port on any Atari, maybe clones */
|
/* Parallel port on any Atari, maybe clones */
|
||||||
if ((cookie_mch == MCH_ST<<16) || ((cookie_mch>>16) == MCH_STE) ||
|
if ((cookie_mch == MCH_ST<<16) || ((cookie_mch>>16) == MCH_STE) ||
|
||||||
|
@ -262,13 +267,15 @@ static int GetEnabledAtariJoystick(int index)
|
||||||
/* Return the nth'index' enabled atari joystick */
|
/* Return the nth'index' enabled atari joystick */
|
||||||
j=0;
|
j=0;
|
||||||
for (i=0;i<MAX_JOYSTICKS;i++) {
|
for (i=0;i<MAX_JOYSTICKS;i++) {
|
||||||
if (atarijoysticks[i].enabled) {
|
if (!atarijoysticks[i].enabled) {
|
||||||
if (j==index) {
|
continue;
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (j==index) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
++j;
|
||||||
}
|
}
|
||||||
if (i==MAX_JOYSTICKS)
|
if (i==MAX_JOYSTICKS)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -328,8 +335,17 @@ void SDL_SYS_JoystickUpdate(SDL_Joystick *joystick)
|
||||||
|
|
||||||
switch (numjoystick) {
|
switch (numjoystick) {
|
||||||
case IKBD_JOY1:
|
case IKBD_JOY1:
|
||||||
|
case XBIOS_JOY1:
|
||||||
{
|
{
|
||||||
curstate = SDL_AtariIkbd_joystick & 0xff;
|
curstate = 0;
|
||||||
|
|
||||||
|
if (numjoystick==IKBD_JOY1) {
|
||||||
|
curstate = SDL_AtariIkbd_joystick & 0xff;
|
||||||
|
}
|
||||||
|
if (numjoystick==XBIOS_JOY1) {
|
||||||
|
curstate = SDL_AtariXbios_joystick & 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
if (curstate != prevstate) {
|
if (curstate != prevstate) {
|
||||||
/* X axis */
|
/* X axis */
|
||||||
if ((curstate & (IKBD_JOY_LEFT|IKBD_JOY_RIGHT)) != (prevstate & (IKBD_JOY_LEFT|IKBD_JOY_RIGHT))) {
|
if ((curstate & (IKBD_JOY_LEFT|IKBD_JOY_RIGHT)) != (prevstate & (IKBD_JOY_LEFT|IKBD_JOY_RIGHT))) {
|
||||||
|
@ -359,7 +375,7 @@ void SDL_SYS_JoystickUpdate(SDL_Joystick *joystick)
|
||||||
SDL_PrivateJoystickButton(joystick,0,SDL_RELEASED);
|
SDL_PrivateJoystickButton(joystick,0,SDL_RELEASED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
atarijoysticks[IKBD_JOY1].prevstate = curstate;
|
atarijoysticks[numjoystick].prevstate = curstate;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PORTA_PAD:
|
case PORTA_PAD:
|
||||||
|
|
|
@ -25,7 +25,7 @@ ATARICOMMON_SRCS = \
|
||||||
SDL_ikbdevents_c.h \
|
SDL_ikbdevents_c.h \
|
||||||
SDL_ikbdinterrupt.S \
|
SDL_ikbdinterrupt.S \
|
||||||
SDL_ikbdinterrupt_s.h \
|
SDL_ikbdinterrupt_s.h \
|
||||||
SDL_xbiosmouseevents.c \
|
SDL_xbiosevents.c \
|
||||||
SDL_xbiosmouseevents_c.h \
|
SDL_xbiosevents_c.h \
|
||||||
SDL_xbiosmouseinterrupt.S \
|
SDL_xbiosinterrupt.S \
|
||||||
SDL_xbiosmouseinterrupt_s.h
|
SDL_xbiosinterrupt_s.h
|
||||||
|
|
|
@ -41,7 +41,7 @@ static char rcsid =
|
||||||
#include "SDL_events_c.h"
|
#include "SDL_events_c.h"
|
||||||
|
|
||||||
#include "SDL_atarikeys.h"
|
#include "SDL_atarikeys.h"
|
||||||
#include "SDL_xbiosmouseevents_c.h"
|
#include "SDL_xbiosevents_c.h"
|
||||||
|
|
||||||
/* To save state of keyboard */
|
/* To save state of keyboard */
|
||||||
#define ATARIBIOS_MAXKEYS 128
|
#define ATARIBIOS_MAXKEYS 128
|
||||||
|
@ -104,7 +104,7 @@ void AtariBios_InitOSKeymap(_THIS)
|
||||||
keymap[SCANCODE_LEFTALT] = SDLK_LALT;
|
keymap[SCANCODE_LEFTALT] = SDLK_LALT;
|
||||||
keymap[SCANCODE_CAPSLOCK] = SDLK_CAPSLOCK;
|
keymap[SCANCODE_CAPSLOCK] = SDLK_CAPSLOCK;
|
||||||
|
|
||||||
AtariXbios_InstallMouseVector();
|
SDL_AtariXbios_InstallVectors(ATARI_XBIOS_MOUSEEVENTS|ATARI_XBIOS_JOYSTICKEVENTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AtariBios_PumpEvents(_THIS)
|
void AtariBios_PumpEvents(_THIS)
|
||||||
|
@ -142,7 +142,7 @@ void AtariBios_PumpEvents(_THIS)
|
||||||
SDL_PrivateKeyboard(SDL_RELEASED, TranslateKey(i, bios_currentascii[i], &keysym));
|
SDL_PrivateKeyboard(SDL_RELEASED, TranslateKey(i, bios_currentascii[i], &keysym));
|
||||||
}
|
}
|
||||||
|
|
||||||
AtariXbios_PostMouseEvents(this);
|
SDL_AtariXbios_PostMouseEvents(this);
|
||||||
|
|
||||||
/* Will be previous table */
|
/* Will be previous table */
|
||||||
memcpy(bios_previouskeyboard, bios_currentkeyboard, ATARIBIOS_MAXKEYS);
|
memcpy(bios_previouskeyboard, bios_currentkeyboard, ATARIBIOS_MAXKEYS);
|
||||||
|
@ -183,5 +183,5 @@ static SDL_keysym *TranslateKey(int scancode, int asciicode, SDL_keysym *keysym)
|
||||||
|
|
||||||
void AtariBios_ShutdownEvents(void)
|
void AtariBios_ShutdownEvents(void)
|
||||||
{
|
{
|
||||||
AtariXbios_RestoreMouseVector();
|
SDL_AtariXbios_RestoreVectors();
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ static char rcsid =
|
||||||
#include "SDL_events_c.h"
|
#include "SDL_events_c.h"
|
||||||
|
|
||||||
#include "SDL_atarikeys.h"
|
#include "SDL_atarikeys.h"
|
||||||
#include "SDL_xbiosmouseevents_c.h"
|
#include "SDL_xbiosevents_c.h"
|
||||||
|
|
||||||
/* To save state of keyboard */
|
/* To save state of keyboard */
|
||||||
#define ATARIBIOS_MAXKEYS 128
|
#define ATARIBIOS_MAXKEYS 128
|
||||||
|
@ -109,7 +109,7 @@ void AtariGemdos_InitOSKeymap(_THIS)
|
||||||
keymap[SCANCODE_LEFTALT] = SDLK_LALT;
|
keymap[SCANCODE_LEFTALT] = SDLK_LALT;
|
||||||
keymap[SCANCODE_CAPSLOCK] = SDLK_CAPSLOCK;
|
keymap[SCANCODE_CAPSLOCK] = SDLK_CAPSLOCK;
|
||||||
|
|
||||||
AtariXbios_InstallMouseVector();
|
SDL_AtariXbios_InstallVectors(ATARI_XBIOS_MOUSEEVENTS|ATARI_XBIOS_JOYSTICKEVENTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AtariGemdos_PumpEvents(_THIS)
|
void AtariGemdos_PumpEvents(_THIS)
|
||||||
|
@ -147,7 +147,7 @@ void AtariGemdos_PumpEvents(_THIS)
|
||||||
SDL_PrivateKeyboard(SDL_RELEASED, TranslateKey(i, gemdos_currentascii[i], &keysym));
|
SDL_PrivateKeyboard(SDL_RELEASED, TranslateKey(i, gemdos_currentascii[i], &keysym));
|
||||||
}
|
}
|
||||||
|
|
||||||
AtariXbios_PostMouseEvents(this);
|
SDL_AtariXbios_PostMouseEvents(this);
|
||||||
|
|
||||||
/* Will be previous table */
|
/* Will be previous table */
|
||||||
memcpy(gemdos_previouskeyboard, gemdos_currentkeyboard, ATARIBIOS_MAXKEYS);
|
memcpy(gemdos_previouskeyboard, gemdos_currentkeyboard, ATARIBIOS_MAXKEYS);
|
||||||
|
@ -188,5 +188,5 @@ static SDL_keysym *TranslateKey(int scancode, int asciicode, SDL_keysym *keysym)
|
||||||
|
|
||||||
void AtariGemdos_ShutdownEvents(void)
|
void AtariGemdos_ShutdownEvents(void)
|
||||||
{
|
{
|
||||||
AtariXbios_RestoreMouseVector();
|
SDL_AtariXbios_RestoreVectors();
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,8 @@ static char rcsid =
|
||||||
.globl _SDL_AtariIkbd_mousey
|
.globl _SDL_AtariIkbd_mousey
|
||||||
.globl _SDL_AtariIkbd_joystick
|
.globl _SDL_AtariIkbd_joystick
|
||||||
|
|
||||||
|
.globl _SDL_AtariIkbd_enabled
|
||||||
|
|
||||||
/*--- Install our IKBD vector ---*/
|
/*--- Install our IKBD vector ---*/
|
||||||
|
|
||||||
_SDL_AtariIkbdInstall:
|
_SDL_AtariIkbdInstall:
|
||||||
|
@ -72,6 +74,8 @@ _SDL_AtariIkbdInstall:
|
||||||
|
|
||||||
| Interrupts done
|
| Interrupts done
|
||||||
|
|
||||||
|
movew #0xffff,_SDL_AtariIkbd_enabled
|
||||||
|
|
||||||
moveml sp@+,d0-d1/a0-a1
|
moveml sp@+,d0-d1/a0-a1
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
@ -208,6 +212,9 @@ ikbd_joystick:
|
||||||
.data
|
.data
|
||||||
|
|
||||||
.even
|
.even
|
||||||
|
_SDL_AtariIkbd_enabled:
|
||||||
|
.word 0
|
||||||
|
.even
|
||||||
.comm _SDL_AtariIkbd_keyboard,128
|
.comm _SDL_AtariIkbd_keyboard,128
|
||||||
.even
|
.even
|
||||||
.comm _SDL_AtariIkbd_mousex,2*1
|
.comm _SDL_AtariIkbd_mousex,2*1
|
||||||
|
|
|
@ -38,13 +38,25 @@ static char rcsid =
|
||||||
|
|
||||||
#include "SDL_types.h"
|
#include "SDL_types.h"
|
||||||
|
|
||||||
|
/* Const */
|
||||||
|
|
||||||
|
#define IKBD_JOY_UP (1<<0)
|
||||||
|
#define IKBD_JOY_DOWN (1<<1)
|
||||||
|
#define IKBD_JOY_LEFT (1<<2)
|
||||||
|
#define IKBD_JOY_RIGHT (1<<3)
|
||||||
|
#define IKBD_JOY_FIRE (1<<7)
|
||||||
|
|
||||||
/* Variables */
|
/* Variables */
|
||||||
|
|
||||||
extern Uint8 SDL_AtariIkbd_keyboard[128]; /* Keyboard table */
|
extern Uint8 SDL_AtariIkbd_keyboard[128]; /* Keyboard table */
|
||||||
extern Uint16 SDL_AtariIkbd_mouseb; /* buttons */
|
extern Uint16 SDL_AtariIkbd_mouseb; /* Mouse on port 0, buttons */
|
||||||
extern Sint16 SDL_AtariIkbd_mousex; /* X relative motion */
|
extern Sint16 SDL_AtariIkbd_mousex; /* Mouse X relative motion */
|
||||||
extern Sint16 SDL_AtariIkbd_mousey; /* Y relative motion */
|
extern Sint16 SDL_AtariIkbd_mousey; /* Mouse Y relative motion */
|
||||||
|
extern Uint16 SDL_AtariIkbd_joystick; /* Joystick on port 1 */
|
||||||
|
|
||||||
|
extern Uint16 SDL_AtariIkbd_enabled; /* For joystick driver to know
|
||||||
|
if this is usable */
|
||||||
|
|
||||||
/* Functions */
|
/* Functions */
|
||||||
|
|
||||||
extern void SDL_AtariIkbdInstall(void);
|
extern void SDL_AtariIkbdInstall(void);
|
||||||
|
|
|
@ -26,7 +26,7 @@ static char rcsid =
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* IKBD 6301 mouse vector
|
* XBIOS mouse & joystick vectors
|
||||||
*
|
*
|
||||||
* Patrice Mandin
|
* Patrice Mandin
|
||||||
*/
|
*/
|
||||||
|
@ -36,19 +36,28 @@ static char rcsid =
|
||||||
#include <mint/osbind.h>
|
#include <mint/osbind.h>
|
||||||
|
|
||||||
#include "SDL_events_c.h"
|
#include "SDL_events_c.h"
|
||||||
#include "SDL_xbiosmouseinterrupt_s.h"
|
#include "SDL_xbiosevents_c.h"
|
||||||
|
#include "SDL_xbiosinterrupt_s.h"
|
||||||
static _KBDVECS *kbdvecs; /* Pointer to access vectors */
|
|
||||||
static _KBDVECS sys_kbdvecs; /* Backup of system vectors */
|
|
||||||
|
|
||||||
/* Variables */
|
/* Variables */
|
||||||
|
|
||||||
|
int SDL_AtariXbios_enabled=0;
|
||||||
|
|
||||||
|
static _KBDVECS *kbdvecs; /* Pointer to access vectors */
|
||||||
|
static _KBDVECS sys_kbdvecs; /* Backup of system vectors */
|
||||||
static Uint16 atari_prevmouseb; /* buttons */
|
static Uint16 atari_prevmouseb; /* buttons */
|
||||||
|
|
||||||
void AtariXbios_InstallMouseVector(void)
|
void SDL_AtariXbios_InstallVectors(int vectors_mask)
|
||||||
{
|
{
|
||||||
void *oldpile;
|
void *oldpile;
|
||||||
|
|
||||||
|
/* Clear variables */
|
||||||
|
SDL_AtariXbios_mouseb =
|
||||||
|
SDL_AtariXbios_mousex =
|
||||||
|
SDL_AtariXbios_mousey =
|
||||||
|
SDL_AtariXbios_joystick =
|
||||||
|
atari_prevmouseb = 0;
|
||||||
|
|
||||||
/* Read IKBD vectors base */
|
/* Read IKBD vectors base */
|
||||||
kbdvecs=Kbdvbase();
|
kbdvecs=Kbdvbase();
|
||||||
|
|
||||||
|
@ -59,17 +68,19 @@ void AtariXbios_InstallMouseVector(void)
|
||||||
memcpy(&sys_kbdvecs, kbdvecs, sizeof(_KBDVECS));
|
memcpy(&sys_kbdvecs, kbdvecs, sizeof(_KBDVECS));
|
||||||
|
|
||||||
/* Install our vector */
|
/* Install our vector */
|
||||||
SDL_AtariXbiosMouseInstall(kbdvecs,SDL_AtariXbiosMouseVector);
|
SDL_AtariXbios_Install(
|
||||||
|
kbdvecs,
|
||||||
|
(vectors_mask & ATARI_XBIOS_MOUSEEVENTS) ? SDL_AtariXbios_MouseVector : NULL,
|
||||||
|
(vectors_mask & ATARI_XBIOS_JOYSTICKEVENTS) ? SDL_AtariXbios_JoystickVector : NULL
|
||||||
|
);
|
||||||
|
|
||||||
/* Back to user mode */
|
/* Back to user mode */
|
||||||
Super(oldpile);
|
Super(oldpile);
|
||||||
|
|
||||||
/* Clear variables */
|
SDL_AtariXbios_enabled=1;
|
||||||
SDL_AtariXbios_mouseb = SDL_AtariXbios_mousex = SDL_AtariXbios_mousey = 0;
|
|
||||||
atari_prevmouseb = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AtariXbios_RestoreMouseVector(void)
|
void SDL_AtariXbios_RestoreVectors(void)
|
||||||
{
|
{
|
||||||
void *oldpile;
|
void *oldpile;
|
||||||
|
|
||||||
|
@ -77,7 +88,7 @@ void AtariXbios_RestoreMouseVector(void)
|
||||||
oldpile=(void *)Super(NULL);
|
oldpile=(void *)Super(NULL);
|
||||||
|
|
||||||
/* Reinstall system vector */
|
/* Reinstall system vector */
|
||||||
SDL_AtariXbiosMouseInstall(kbdvecs,sys_kbdvecs.mousevec);
|
SDL_AtariXbios_Install(kbdvecs,sys_kbdvecs.mousevec,sys_kbdvecs.joyvec);
|
||||||
|
|
||||||
/* Back to user mode */
|
/* Back to user mode */
|
||||||
Super(oldpile);
|
Super(oldpile);
|
||||||
|
@ -97,7 +108,7 @@ static int atari_GetButton(int button)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AtariXbios_PostMouseEvents(_THIS)
|
void SDL_AtariXbios_PostMouseEvents(_THIS)
|
||||||
{
|
{
|
||||||
/* Mouse motion ? */
|
/* Mouse motion ? */
|
||||||
if (SDL_AtariXbios_mousex || SDL_AtariXbios_mousey) {
|
if (SDL_AtariXbios_mousex || SDL_AtariXbios_mousey) {
|
|
@ -26,21 +26,26 @@ static char rcsid =
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* IKBD 6301 mouse vector
|
* Xbios mouse & joystick vectors
|
||||||
*
|
*
|
||||||
* Patrice Mandin
|
* Patrice Mandin
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SDL_XBIOSMOUSEEVENTS_H_
|
#ifndef _SDL_ATARI_XBIOSEVENTS_H_
|
||||||
#define _SDL_XBIOSMOUSEEVENTS_H_
|
#define _SDL_ATARI_XBIOSEVENTS_H_
|
||||||
|
|
||||||
#include "SDL_sysvideo.h"
|
#include "SDL_sysvideo.h"
|
||||||
|
|
||||||
/* Hidden "this" pointer for the video functions */
|
/* Hidden "this" pointer for the video functions */
|
||||||
#define _THIS SDL_VideoDevice *this
|
#define _THIS SDL_VideoDevice *this
|
||||||
|
|
||||||
extern void AtariXbios_InstallMouseVector(void);
|
#define ATARI_XBIOS_MOUSEEVENTS (1<<0)
|
||||||
extern void AtariXbios_RestoreMouseVector(void);
|
#define ATARI_XBIOS_JOYSTICKEVENTS (1<<1)
|
||||||
extern void AtariXbios_PostMouseEvents(_THIS);
|
|
||||||
|
|
||||||
#endif /* _SDL_XBIOSMOUSEEVENTS_H_ */
|
extern int SDL_AtariXbios_enabled;
|
||||||
|
|
||||||
|
extern void SDL_AtariXbios_InstallVectors(int vectors_mask);
|
||||||
|
extern void SDL_AtariXbios_RestoreVectors(void);
|
||||||
|
extern void SDL_AtariXbios_PostMouseEvents(_THIS);
|
||||||
|
|
||||||
|
#endif /* _SDL_XBIOSEVENTS_H_ */
|
|
@ -26,37 +26,46 @@ static char rcsid =
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* IKBD 6301 mouse vector
|
* XBIOS mouse & joystick vectors
|
||||||
*
|
*
|
||||||
* Patrice Mandin
|
* Patrice Mandin
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
.globl _SDL_AtariXbiosMouseInstall
|
.globl _SDL_AtariXbios_Install
|
||||||
.globl _SDL_AtariXbiosMouseVector
|
.globl _SDL_AtariXbios_MouseVector
|
||||||
|
.globl _SDL_AtariXbios_JoystickVector
|
||||||
|
|
||||||
.globl _SDL_AtariXbios_mouseb
|
.globl _SDL_AtariXbios_mouseb
|
||||||
.globl _SDL_AtariXbios_mousex
|
.globl _SDL_AtariXbios_mousex
|
||||||
.globl _SDL_AtariXbios_mousey
|
.globl _SDL_AtariXbios_mousey
|
||||||
|
.globl _SDL_AtariXbios_joystick
|
||||||
|
|
||||||
/*--- Vector installer ---*/
|
/*--- Vector installer ---*/
|
||||||
|
|
||||||
_SDL_AtariXbiosMouseInstall:
|
_SDL_AtariXbios_Install:
|
||||||
movel sp@(4),a0
|
movel sp@(4),a0
|
||||||
movel sp@(8),a1
|
|
||||||
|
|
||||||
/* Stop interrupts */
|
/* Stop interrupts */
|
||||||
|
|
||||||
movew #0x2700,sr
|
movew #0x2700,sr
|
||||||
|
|
||||||
/* Save old vector */
|
/* Save old mouse vector, set our routine */
|
||||||
|
|
||||||
movel a0@(16),oldvector
|
movel sp@(8),d0
|
||||||
|
beqs no_new_mouse_vector
|
||||||
|
movel a0@(16),oldmousevector
|
||||||
|
movel d0,a0@(16)
|
||||||
|
no_new_mouse_vector:
|
||||||
|
|
||||||
/* Set our routine */
|
/* Save old joystick vector, set our routine */
|
||||||
|
|
||||||
movel a1,a0@(16)
|
movel sp@(12),d0
|
||||||
|
beqs no_new_joystick_vector
|
||||||
|
movel a0@(24),oldjoystickvector
|
||||||
|
movel d0,a0@(24)
|
||||||
|
no_new_joystick_vector:
|
||||||
|
|
||||||
/* Restart interrupts */
|
/* Restart interrupts */
|
||||||
|
|
||||||
|
@ -70,8 +79,8 @@ _SDL_AtariXbiosMouseInstall:
|
||||||
.even
|
.even
|
||||||
.ascii "XBRA"
|
.ascii "XBRA"
|
||||||
.ascii "LSDL"
|
.ascii "LSDL"
|
||||||
.comm oldvector,4*1
|
.comm oldmousevector,4*1
|
||||||
_SDL_AtariXbiosMouseVector:
|
_SDL_AtariXbios_MouseVector:
|
||||||
moveml d0/a1,sp@-
|
moveml d0/a1,sp@-
|
||||||
|
|
||||||
/* Mouse buttons */
|
/* Mouse buttons */
|
||||||
|
@ -90,7 +99,7 @@ _SDL_AtariXbiosMouseVector:
|
||||||
addw d0,_SDL_AtariXbios_mousey
|
addw d0,_SDL_AtariXbios_mousey
|
||||||
|
|
||||||
/* Jump through old vector */
|
/* Jump through old vector */
|
||||||
movel oldvector,a1
|
movel oldmousevector,a1
|
||||||
jsr (a1)
|
jsr (a1)
|
||||||
|
|
||||||
moveml sp@+,d0/a1
|
moveml sp@+,d0/a1
|
||||||
|
@ -104,3 +113,29 @@ _SDL_AtariXbiosMouseVector:
|
||||||
.even
|
.even
|
||||||
.comm _SDL_AtariXbios_mouseb,2*1
|
.comm _SDL_AtariXbios_mouseb,2*1
|
||||||
|
|
||||||
|
/*--- Our joystick vector ---*/
|
||||||
|
|
||||||
|
.text
|
||||||
|
.even
|
||||||
|
.ascii "XBRA"
|
||||||
|
.ascii "LSDL"
|
||||||
|
.comm oldjoystickvector,4*1
|
||||||
|
_SDL_AtariXbios_JoystickVector:
|
||||||
|
moveml d0/a1,sp@-
|
||||||
|
|
||||||
|
/* New joystick state */
|
||||||
|
moveb a0@(1),d0
|
||||||
|
andw #0x8f,d0
|
||||||
|
movew d0,_SDL_AtariXbios_joystick
|
||||||
|
|
||||||
|
/* Jump through old vector */
|
||||||
|
movel oldjoystickvector,a1
|
||||||
|
jsr (a1)
|
||||||
|
|
||||||
|
moveml sp@+,d0/a1
|
||||||
|
rts
|
||||||
|
|
||||||
|
.data
|
||||||
|
.even
|
||||||
|
.comm _SDL_AtariXbios_joystick,2*1
|
||||||
|
|
|
@ -31,8 +31,8 @@ static char rcsid =
|
||||||
* Patrice Mandin
|
* Patrice Mandin
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SDL_XBIOSMOUSEEVENTS_S_H_
|
#ifndef _SDL_XBIOSINTERRUPT_S_H_
|
||||||
#define _SDL_XBIOSMOUSEEVENTS_S_H_
|
#define _SDL_XBIOSINTERRUPT_S_H_
|
||||||
|
|
||||||
#include <mint/osbind.h>
|
#include <mint/osbind.h>
|
||||||
|
|
||||||
|
@ -43,10 +43,12 @@ static char rcsid =
|
||||||
extern Uint16 SDL_AtariXbios_mouseb; /* buttons */
|
extern Uint16 SDL_AtariXbios_mouseb; /* buttons */
|
||||||
extern Sint16 SDL_AtariXbios_mousex; /* X relative motion */
|
extern Sint16 SDL_AtariXbios_mousex; /* X relative motion */
|
||||||
extern Sint16 SDL_AtariXbios_mousey; /* Y relative motion */
|
extern Sint16 SDL_AtariXbios_mousey; /* Y relative motion */
|
||||||
|
extern Uint16 SDL_AtariXbios_joystick; /* Joystick */
|
||||||
|
|
||||||
/* Functions */
|
/* Functions */
|
||||||
|
|
||||||
extern void SDL_AtariXbiosMouseInstall(_KBDVECS *kbdvecs,void *newvector);
|
extern void SDL_AtariXbios_Install(_KBDVECS *kbdvecs,void *newmousevector,void *newjoystickvector);
|
||||||
extern void SDL_AtariXbiosMouseVector(void *buf);
|
extern void SDL_AtariXbios_MouseVector(void *buf);
|
||||||
|
extern void SDL_AtariXbios_JoystickVector(void *buf);
|
||||||
|
|
||||||
#endif /* _SDL_XBIOSMOUSEEVENTS_S_H_ */
|
#endif /* _SDL_XBIOSINTERRUPT_S_H_ */
|
|
@ -60,6 +60,7 @@ static char rcsid =
|
||||||
#include "SDL_gemevents_c.h"
|
#include "SDL_gemevents_c.h"
|
||||||
#include "SDL_gemmouse_c.h"
|
#include "SDL_gemmouse_c.h"
|
||||||
#include "SDL_gemwm_c.h"
|
#include "SDL_gemwm_c.h"
|
||||||
|
#include "SDL_xbiosevents_c.h"
|
||||||
|
|
||||||
/* Defines */
|
/* Defines */
|
||||||
|
|
||||||
|
@ -176,6 +177,9 @@ static SDL_VideoDevice *GEM_CreateDevice(int devindex)
|
||||||
device->WarpWMCursor = GEM_WarpWMCursor;
|
device->WarpWMCursor = GEM_WarpWMCursor;
|
||||||
device->CheckMouseMode = GEM_CheckMouseMode;
|
device->CheckMouseMode = GEM_CheckMouseMode;
|
||||||
|
|
||||||
|
/* Joystick */
|
||||||
|
SDL_AtariXbios_InstallVectors(ATARI_XBIOS_JOYSTICKEVENTS);
|
||||||
|
|
||||||
device->free = GEM_DeleteDevice;
|
device->free = GEM_DeleteDevice;
|
||||||
|
|
||||||
return device;
|
return device;
|
||||||
|
@ -937,6 +941,8 @@ static int GEM_ToggleFullScreen(_THIS, int on)
|
||||||
*/
|
*/
|
||||||
void GEM_VideoQuit(_THIS)
|
void GEM_VideoQuit(_THIS)
|
||||||
{
|
{
|
||||||
|
SDL_AtariXbios_RestoreVectors();
|
||||||
|
|
||||||
GEM_FreeBuffers(this);
|
GEM_FreeBuffers(this);
|
||||||
|
|
||||||
if (GEM_locked) {
|
if (GEM_locked) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue