mirror of
https://github.com/ogoguel/activegs-ios.git
synced 2025-01-04 22:32:12 +00:00
187 lines
4.1 KiB
C++
187 lines
4.1 KiB
C++
/*
|
|
ActiveGS, Copyright 2004-2016 Olivier Goguel, https://github.com/ogoguel/ActiveGS
|
|
Based on Kegs, Copyright 2004 Kent Dickey, https://kegs.sourceforge.net
|
|
This code is covered by the GNU GPL licence
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
const char rcsid_adb_h[] = "@(#)$KmKId: adb.h,v 1.11 2004-10-13 23:30:33-04 kentd Exp $";
|
|
|
|
#include "defc.h"
|
|
|
|
enum {
|
|
ADB_IDLE = 0,
|
|
ADB_IN_CMD,
|
|
ADB_SENDING_DATA,
|
|
};
|
|
|
|
#define ADB_C027_MOUSE_DATA 0x80
|
|
#define ADB_C027_MOUSE_INT 0x40
|
|
#define ADB_C027_DATA_VALID 0x20
|
|
#define ADB_C027_DATA_INT 0x10
|
|
#define ADB_C027_KBD_VALID 0x08
|
|
#define ADB_C027_KBD_INT 0x04
|
|
#define ADB_C027_MOUSE_COORD 0x02
|
|
#define ADB_C027_CMD_FULL 0x01
|
|
|
|
#define ADB_C027_NEG_MASK ( ~ ( \
|
|
ADB_C027_MOUSE_DATA | ADB_C027_DATA_VALID | \
|
|
ADB_C027_KBD_VALID | ADB_C027_MOUSE_COORD | \
|
|
ADB_C027_CMD_FULL))
|
|
|
|
|
|
#ifdef _WIN32
|
|
#pragma pack(push,PRAGMA_PACK_SIZE)
|
|
#endif
|
|
|
|
|
|
STRUCT(Mouse_fifo)
|
|
{
|
|
_ALIGNED(8) double dcycs;
|
|
int x;
|
|
int y;
|
|
int buttons;
|
|
}
|
|
XCODE_PRAGMA_PACK
|
|
;
|
|
|
|
enum warpmode
|
|
{
|
|
WARP_NONE = 0,
|
|
WARP_POINTER,
|
|
WARP_TOUCHSCREEN
|
|
};
|
|
|
|
|
|
class s_adb : public serialized
|
|
{
|
|
public:
|
|
int fullscreen ;
|
|
int halt_on_all_c027;
|
|
word32 g_adb_repeat_delay;
|
|
word32 g_adb_repeat_rate;
|
|
word32 g_adb_repeat_info;
|
|
word32 g_adb_char_set ;
|
|
word32 g_adb_layout_lang;
|
|
|
|
word32 g_adb_interrupt_byte;
|
|
int g_adb_state;
|
|
|
|
word32 g_adb_cmd ;
|
|
int g_adb_cmd_len;
|
|
int g_adb_cmd_so_far ;
|
|
word32 g_adb_cmd_data[16];
|
|
|
|
#define MAX_ADB_DATA_PEND 16
|
|
|
|
word32 g_adb_data[MAX_ADB_DATA_PEND];
|
|
int g_adb_data_pending;
|
|
|
|
word32 g_c027_val;
|
|
word32 g_c025_val;
|
|
|
|
byte adb_memory[256];
|
|
|
|
word32 g_adb_mode ; /* mode set via set_modes, clear_modes */
|
|
|
|
enum warpmode g_warp_pointer;
|
|
int g_hide_pointer;
|
|
int g_unhide_pointer;
|
|
|
|
int g_mouse_a2_x ;
|
|
int g_mouse_a2_y ;
|
|
int g_mouse_a2_button ;
|
|
int g_mouse_fifo_pos ;
|
|
int g_mouse_raw_x ;
|
|
int g_mouse_raw_y;
|
|
|
|
#define ADB_MOUSE_FIFO 8
|
|
|
|
Mouse_fifo g_mouse_fifo[ADB_MOUSE_FIFO] ;
|
|
|
|
int g_mouse_warp_x ;
|
|
int g_mouse_warp_y ;
|
|
|
|
int g_adb_mouse_valid_data ;
|
|
int g_adb_mouse_coord ;
|
|
|
|
#define MAX_KBD_BUF 8
|
|
|
|
int g_key_down ;
|
|
int g_hard_key_down ;
|
|
int g_a2code_down ;
|
|
int g_kbd_read_no_update ;
|
|
int g_kbd_chars_buffered ;
|
|
int g_kbd_buf[MAX_KBD_BUF];
|
|
|
|
word32 g_adb_repeat_vbl ;
|
|
|
|
int g_kbd_dev_addr; /* ADB physical kbd addr */
|
|
int g_mouse_dev_addr ; /* ADB physical mouse addr */
|
|
|
|
int g_kbd_ctl_addr; /* ADB microcontroller's kbd addr */
|
|
int g_mouse_ctl_addr; /* ADB ucontroller's mouse addr*/
|
|
/* above are ucontroller's VIEW of where mouse/kbd */
|
|
/* are...if they are moved, mouse/keyboard funcs */
|
|
/* should stop (c025, c000, c024, etc). */
|
|
|
|
word32 g_virtual_key_up[4]; /* bitmask of all possible 128 a2codes */
|
|
/* indicates which keys are up=1 by bit */
|
|
|
|
int g_keypad_key_is_down[10] ;/* List from 0-9 of which keypad */
|
|
/* keys are currently pressed */
|
|
|
|
#define MAX_ADB_KBD_REG3 16
|
|
|
|
int g_kbd_reg0_pos;
|
|
int g_kbd_reg0_data[MAX_ADB_KBD_REG3];
|
|
int g_kbd_reg3_16bit ; /* also set in adb_reset()! */
|
|
|
|
|
|
int g_adb_init;
|
|
word32 g_last_c027_read; // OG to monitor if mouse is being used!
|
|
|
|
int g_simulate_space; // OG Mouse button can simulate space key
|
|
int g_need_to_decrement_fifo;
|
|
|
|
s_adb()
|
|
{
|
|
init();
|
|
}
|
|
void init()
|
|
{
|
|
INIT_SERIALIZED();
|
|
|
|
g_adb_repeat_delay = 45;
|
|
g_adb_repeat_rate = 3;
|
|
g_adb_repeat_info = 0x23;
|
|
g_adb_state = ADB_IDLE;
|
|
|
|
g_adb_cmd = (word32)-1;
|
|
g_kbd_dev_addr = 2; /* ADB physical kbd addr */
|
|
g_mouse_dev_addr = 3; /* ADB physical mouse addr */
|
|
|
|
g_kbd_ctl_addr = 2; /* ADB microcontroller's kbd addr */
|
|
g_mouse_ctl_addr = 3; /* ADB ucontroller's mouse addr*/
|
|
/* above are ucontroller's VIEW of where mouse/kbd */
|
|
/* are...if they are moved, mouse/keyboard funcs */
|
|
/* should stop (c025, c000, c024, etc). */
|
|
|
|
g_kbd_reg3_16bit = 0x602; /* also set in adb_reset()! */
|
|
g_simulate_space = 1; // OG Mouse button can simulate space key
|
|
g_warp_pointer = WARP_NONE;
|
|
}
|
|
|
|
DEFAULT_SERIALIZE_IN_OUT ;
|
|
|
|
}
|
|
XCODE_PRAGMA_PACK
|
|
;
|
|
|
|
#ifdef _WIN32
|
|
#pragma pack(pop)
|
|
#endif
|
|
|
|
extern s_adb g_adb;
|