mirror of
https://github.com/Wiimpathy/HatariWii.git
synced 2024-06-02 16:48:43 +02:00
101 lines
3.6 KiB
C
101 lines
3.6 KiB
C
/*
|
|
Hatari - ikbd.h
|
|
|
|
This file is distributed under the GNU General Public License, version 2
|
|
or at your option any later version. Read the file gpl.txt for details.
|
|
*/
|
|
|
|
#ifndef HATARI_IKBD_H
|
|
#define HATARI_IKBD_H
|
|
|
|
/* Keyboard processor details */
|
|
|
|
typedef struct {
|
|
int X,Y; /* Position of mouse */
|
|
int MaxX,MaxY; /* Max limits of mouse */
|
|
Uint8 PrevReadAbsMouseButtons; /* Previous button mask for 'IKBD_Cmd_ReadAbsMousePos' */
|
|
} ABS_MOUSE;
|
|
|
|
typedef struct {
|
|
int dx, dy; /* Mouse delta to be added */
|
|
int DeltaX,DeltaY; /* Final XY mouse position delta */
|
|
int XScale,YScale; /* Scale of mouse */
|
|
int XThreshold,YThreshold; /* Threshold */
|
|
Uint8 KeyCodeDeltaX,KeyCodeDeltaY; /* Delta X,Y for mouse keycode mode */
|
|
int YAxis; /* Y-Axis direction */
|
|
Uint8 Action; /* Bit 0-Report abs position of press, Bit 1-Report abs on release */
|
|
} MOUSE;
|
|
|
|
typedef struct {
|
|
Uint8 JoyData[2]; /* Joystick details */
|
|
Uint8 PrevJoyData[2]; /* Previous joystick details, used to check for 'IKBD_SendAutoJoysticks' */
|
|
} JOY;
|
|
|
|
typedef struct {
|
|
ABS_MOUSE Abs;
|
|
MOUSE Mouse;
|
|
JOY Joy;
|
|
int MouseMode; /* AUTOMODE_xxxx */
|
|
int JoystickMode; /* AUTOMODE_xxxx */
|
|
} KEYBOARD_PROCESSOR;
|
|
|
|
/* Keyboard state */
|
|
#define KBD_MAX_SCANCODE 0x72
|
|
#define SIZE_KEYBOARD_BUFFER 1024 /* Allow this many bytes to be stored in buffer (waiting to send to ACIA) */
|
|
#define KEYBOARD_BUFFER_MASK (SIZE_KEYBOARD_BUFFER-1)
|
|
#define SIZE_KEYBOARDINPUT_BUFFER 8
|
|
typedef struct {
|
|
Uint8 KeyStates[KBD_MAX_SCANCODE + 1]; /* State of ST keys, TRUE is down */
|
|
|
|
Uint8 Buffer[SIZE_KEYBOARD_BUFFER]; /* Keyboard output buffer */
|
|
int BufferHead,BufferTail; /* Pointers into above buffer */
|
|
int NbBytesInOutputBuffer; /* Number of bytes in output buffer */
|
|
bool PauseOutput; /* If true, don't send bytes anymore (see command 0x13) */
|
|
|
|
Uint8 InputBuffer[SIZE_KEYBOARDINPUT_BUFFER]; /* Buffer for data send from CPU to keyboard processor (commands) */
|
|
int nBytesInInputBuffer; /* Number of command bytes in above buffer */
|
|
|
|
int bLButtonDown,bRButtonDown; /* Mouse states in emulation system, BUTTON_xxxx */
|
|
int bOldLButtonDown,bOldRButtonDown;
|
|
int LButtonDblClk,RButtonDblClk;
|
|
int LButtonHistory,RButtonHistory;
|
|
|
|
int AutoSendCycles; /* Number of cpu cycles to call INTERRUPT_IKBD_AUTOSEND */
|
|
} KEYBOARD;
|
|
|
|
/* Button states, a bit mask so can mimick joystick/right mouse button duplication */
|
|
#define BUTTON_NULL 0x00 /* Button states, so can OR together mouse/joystick buttons */
|
|
#define BUTTON_MOUSE 0x01
|
|
#define BUTTON_JOYSTICK 0x02
|
|
|
|
/* Mouse/Joystick modes */
|
|
#define AUTOMODE_OFF 0
|
|
#define AUTOMODE_MOUSEREL 1
|
|
#define AUTOMODE_MOUSEABS 2
|
|
#define AUTOMODE_MOUSECURSOR 3
|
|
#define AUTOMODE_JOYSTICK 4
|
|
#define AUTOMODE_JOYSTICK_MONITORING 5
|
|
|
|
/* 0xfffc00 (read status from ACIA) */
|
|
#define ACIA_STATUS_REGISTER__RX_BUFFER_FULL 0x01
|
|
#define ACIA_STATUS_REGISTER__TX_BUFFER_EMPTY 0x02
|
|
#define ACIA_STATUS_REGISTER__OVERRUN_ERROR 0x20
|
|
#define ACIA_STATUS_REGISTER__INTERRUPT_REQUEST 0x80
|
|
|
|
extern KEYBOARD_PROCESSOR KeyboardProcessor;
|
|
extern KEYBOARD Keyboard;
|
|
|
|
extern void IKBD_Init ( void );
|
|
extern void IKBD_Reset(bool bCold);
|
|
extern void IKBD_MemorySnapShot_Capture(bool bSave);
|
|
|
|
extern void IKBD_InterruptHandler_ResetTimer(void);
|
|
extern void IKBD_InterruptHandler_AutoSend(void);
|
|
|
|
extern void IKBD_UpdateClockOnVBL ( void );
|
|
|
|
|
|
extern void IKBD_PressSTKey(Uint8 ScanCode, bool bPress);
|
|
|
|
#endif /* HATARI_IKBD_H */
|