--- hatari/src/includes/ikbd.h 2019/04/01 07:09:43 1.1.1.2 +++ hatari/src/includes/ikbd.h 2019/04/09 08:59:25 1.1.1.13 @@ -1,68 +1,66 @@ /* - Hatari -*/ - -#include /* Needed for SDLK_LAST */ + 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. +*/ -/* Keyboard Command */ -typedef struct { - unsigned char Command; - unsigned char NumParameters; - void *pCallFunction; -} IKBD_COMMAND_PARAMS; +#ifndef HATARI_IKBD_H +#define HATARI_IKBD_H /* Keyboard processor details */ -typedef struct { - int X,Y; /* Relative position of mouse */ - int PrevX,PrevY; /* Previous position */ -} REL_MOUSE; typedef struct { int X,Y; /* Position of mouse */ int MaxX,MaxY; /* Max limits of mouse */ - unsigned char PrevReadAbsMouseButtons; /* Previous button mask for 'IKBD_Cmd_ReadAbsMousePos' */ + Uint8 PrevReadAbsMouseButtons; /* Previous button mask for 'IKBD_Cmd_ReadAbsMousePos' */ } ABS_MOUSE; typedef struct { - int DeltaX,DeltaY; /* XY mouse position delta after scale according to resoution */ + 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 */ - unsigned char KeyCodeDeltaX,KeyCodeDeltaY; /* Delta X,Y for mouse keycode mode */ + Uint8 KeyCodeDeltaX,KeyCodeDeltaY; /* Delta X,Y for mouse keycode mode */ int YAxis; /* Y-Axis direction */ - unsigned char Action; /* Bit 0-Report abs position of press, Bit 1-Report abs on release */ + Uint8 Action; /* Bit 0-Report abs position of press, Bit 1-Report abs on release */ } MOUSE; typedef struct { - unsigned char JoyData[2]; /* Joystick details */ - unsigned char PrevJoyData[2]; /* Previous joystick details, used to check for 'IKBD_SelAutoJoysticks' */ + Uint8 JoyData[2]; /* Joystick details */ + Uint8 PrevJoyData[2]; /* Previous joystick details, used to check for 'IKBD_SendAutoJoysticks' */ } JOY; typedef struct { - REL_MOUSE Rel; ABS_MOUSE Abs; MOUSE Mouse; JOY Joy; int MouseMode; /* AUTOMODE_xxxx */ int JoystickMode; /* AUTOMODE_xxxx */ - BOOL bReset; /* Set to TRUE is keyboard 'RESET' and now active */ } 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 { - unsigned char KeyStates[SDLK_LAST]; /* State of PC's keys, TRUE is down */ - unsigned char Buffer[SIZE_KEYBOARD_BUFFER]; /* Keyboard buffer */ - int BufferHead,BufferTail; /* Pointers into above buffer */ - unsigned char InputBuffer[SIZE_KEYBOARDINPUT_BUFFER]; /* Buffer for data send from CPU to keyboard processor (commands) */ - int nBytesInInputBuffer; /* Number of command bytes in above buffer */ + 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; + unsigned 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 */ @@ -71,61 +69,32 @@ typedef struct { #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_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 0x40 +#define ACIA_STATUS_REGISTER__OVERRUN_ERROR 0x20 #define ACIA_STATUS_REGISTER__INTERRUPT_REQUEST 0x80 -extern unsigned char ACIAControlRegister; -extern unsigned char ACIAStatusRegister; -extern unsigned char ACIAByte; - extern KEYBOARD_PROCESSOR KeyboardProcessor; extern KEYBOARD Keyboard; -extern void IKBD_Reset(BOOL bCold); -extern void IKBD_MemorySnapShot_Capture(BOOL bSave); -extern void IKBD_SendAutoKeyboardCommands(); +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); -extern void IKBD_Cmd_NullFunction(void); -extern void IKBD_Cmd_Reset(void); -extern void IKBD_Cmd_MouseAction(void); -extern void IKBD_Cmd_RelMouseMode(void); -extern void IKBD_Cmd_AbsMouseMode(void); -extern void IKBD_Cmd_MouseCursorKeycodes(void); -extern void IKBD_Cmd_SetMouseThreshold(void); -extern void IKBD_Cmd_SetMouseScale(void); -extern void IKBD_Cmd_ReadAbsMousePos(void); -extern void IKBD_Cmd_SetInternalMousePos(void); -extern void IKBD_Cmd_SetYAxisDown(void); -extern void IKBD_Cmd_SetYAxisUp(void); -extern void IKBD_Cmd_StartKeyboardTransfer(void); -extern void IKBD_Cmd_TurnMouseOff(void); -extern void IKBD_Cmd_StopKeyboardTransfer(void); -extern void IKBD_Cmd_ReturnJoystickAuto(void); -extern void IKBD_Cmd_StopJoystick(void); -extern void IKBD_Cmd_ReturnJoystick(void); -extern void IKBD_Cmd_SetJoystickDuration(void); -extern void IKBD_Cmd_SetJoystickFireDuration(void); -extern void IKBD_Cmd_SetCursorForJoystick(void); -extern void IKBD_Cmd_DisableJoysticks(void); -extern void IKBD_Cmd_SetClock(void); -extern void IKBD_Cmd_ReadClock(void); -extern void IKBD_Cmd_LoadMemory(void); -extern void IKBD_Cmd_ReadMemory(void); -extern void IKBD_Cmd_Execute(void); - -extern void IKBD_SendByteToKeyboardProcessor(unsigned short bl); -extern unsigned short IKBD_GetByteFromACIA(void); -extern void IKBD_InterruptHandler_ACIA(void); -extern void IKBD_SendByteToACIA(void); -extern void IKBD_AddKeyToKeyboardBuffer(unsigned char Data); -extern void IKBD_PressSTKey(unsigned char ScanCode,BOOL bPress); +#endif /* HATARI_IKBD_H */