More clean-ups and mouse fixes.
This commit is contained in:
@@ -152,8 +152,6 @@ typedef struct amstrad_t {
|
||||
pc_timer_t send_delay_timer;
|
||||
|
||||
/* Mouse stuff. */
|
||||
uint8_t mousex;
|
||||
uint8_t mousey;
|
||||
int oldb;
|
||||
|
||||
/* Video stuff. */
|
||||
@@ -2012,9 +2010,9 @@ ms_write(uint16_t addr, UNUSED(uint8_t val), void *priv)
|
||||
amstrad_t *ams = (amstrad_t *) priv;
|
||||
|
||||
if ((addr == 0x78) || (addr == 0x79))
|
||||
ams->mousex = 0;
|
||||
mouse_clear_x();
|
||||
else
|
||||
ams->mousey = 0;
|
||||
mouse_clear_y();
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
@@ -2022,25 +2020,26 @@ ms_read(uint16_t addr, void *priv)
|
||||
{
|
||||
amstrad_t *ams = (amstrad_t *) priv;
|
||||
uint8_t ret;
|
||||
int delta = 0;
|
||||
|
||||
if ((addr == 0x78) || (addr == 0x79)) {
|
||||
ret = ams->mousex;
|
||||
ams->mousex = 0;
|
||||
mouse_subtract_x(&delta, NULL, -128, 127, 0);
|
||||
mouse_clear_x();
|
||||
} else {
|
||||
ret = ams->mousey;
|
||||
ams->mousey = 0;
|
||||
mouse_subtract_y(&delta, NULL, -128, 127, 1, 0);
|
||||
mouse_clear_y();
|
||||
}
|
||||
|
||||
ret = (uint8_t) (int8_t) delta;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
ms_poll(int x, int y, UNUSED(int z), int b, void *priv)
|
||||
ms_poll(void *priv)
|
||||
{
|
||||
amstrad_t *ams = (amstrad_t *) priv;
|
||||
|
||||
ams->mousex += x;
|
||||
ams->mousey -= y;
|
||||
int b = mouse_get_buttons_ex();
|
||||
|
||||
if ((b & 1) && !(ams->oldb & 1))
|
||||
keyboard_send(0x7e);
|
||||
|
||||
@@ -131,9 +131,8 @@ typedef struct m24_kbd_t {
|
||||
|
||||
/* Mouse stuff. */
|
||||
int mouse_mode;
|
||||
int x;
|
||||
int y;
|
||||
int b;
|
||||
|
||||
pc_timer_t send_delay_timer;
|
||||
} m24_kbd_t;
|
||||
|
||||
@@ -732,12 +731,14 @@ m24_kbd_reset(void *priv)
|
||||
}
|
||||
|
||||
static int
|
||||
ms_poll(int x, int y, UNUSED(int z), int b, void *priv)
|
||||
ms_poll(void *priv)
|
||||
{
|
||||
m24_kbd_t *m24_kbd = (m24_kbd_t *) priv;
|
||||
|
||||
m24_kbd->x += x;
|
||||
m24_kbd->y += y;
|
||||
int delta_x;
|
||||
int delta_y;
|
||||
int o_x;
|
||||
int o_y;
|
||||
int b = mouse_get_buttons_ex();
|
||||
|
||||
if (((key_queue_end - key_queue_start) & 0xf) > 14)
|
||||
return 0xff;
|
||||
@@ -770,53 +771,45 @@ ms_poll(int x, int y, UNUSED(int z), int b, void *priv)
|
||||
if (((key_queue_end - key_queue_start) & 0xf) > 12)
|
||||
return 0xff;
|
||||
|
||||
if (!m24_kbd->x && !m24_kbd->y)
|
||||
if (!mouse_moved())
|
||||
return 0xff;
|
||||
|
||||
m24_kbd->y = -m24_kbd->y;
|
||||
mouse_subtract_coords(&delta_x, &delta_y, &o_x, &o_y, -127, 127, 1, 0);
|
||||
|
||||
if (m24_kbd->x < -127)
|
||||
m24_kbd->x = -127;
|
||||
if (m24_kbd->x > 127)
|
||||
m24_kbd->x = 127;
|
||||
if (m24_kbd->x < -127)
|
||||
m24_kbd->x = 0x80 | ((-m24_kbd->x) & 0x7f);
|
||||
if ((delta_x == -127) && o_x)
|
||||
delta_x = 0x80 | ((-delta_x) & 0x7f);
|
||||
|
||||
if (m24_kbd->y < -127)
|
||||
m24_kbd->y = -127;
|
||||
if (m24_kbd->y > 127)
|
||||
m24_kbd->y = 127;
|
||||
if (m24_kbd->y < -127)
|
||||
m24_kbd->y = 0x80 | ((-m24_kbd->y) & 0x7f);
|
||||
if ((delta_y == -127) && o_y)
|
||||
delta_y = 0x80 | ((-delta_y) & 0x7f);
|
||||
|
||||
m24_kbd_adddata(0xfe);
|
||||
m24_kbd_adddata(m24_kbd->x);
|
||||
m24_kbd_adddata(m24_kbd->y);
|
||||
|
||||
m24_kbd->x = m24_kbd->y = 0;
|
||||
m24_kbd_adddata(delta_x);
|
||||
m24_kbd_adddata(delta_y);
|
||||
} else {
|
||||
while (m24_kbd->x < -4) {
|
||||
mouse_subtract_coords(&delta_x, &delta_y, &o_x, &o_y, -127, 127, 1, 0);
|
||||
|
||||
while (delta_x < -4) {
|
||||
if (((key_queue_end - key_queue_start) & 0xf) > 14)
|
||||
return 0xff;
|
||||
m24_kbd->x += 4;
|
||||
delta_x += 4;
|
||||
m24_kbd_adddata(m24_kbd->scan[3]);
|
||||
}
|
||||
while (m24_kbd->x > 4) {
|
||||
while (delta_x > 4) {
|
||||
if (((key_queue_end - key_queue_start) & 0xf) > 14)
|
||||
return 0xff;
|
||||
m24_kbd->x -= 4;
|
||||
delta_x -= 4;
|
||||
m24_kbd_adddata(m24_kbd->scan[4]);
|
||||
}
|
||||
while (m24_kbd->y < -4) {
|
||||
while (delta_y < -4) {
|
||||
if (((key_queue_end - key_queue_start) & 0xf) > 14)
|
||||
return 0xff;
|
||||
m24_kbd->y += 4;
|
||||
delta_y += 4;
|
||||
m24_kbd_adddata(m24_kbd->scan[5]);
|
||||
}
|
||||
while (m24_kbd->y > 4) {
|
||||
while (delta_y > 4) {
|
||||
if (((key_queue_end - key_queue_start) & 0xf) > 14)
|
||||
return 0xff;
|
||||
m24_kbd->y -= 4;
|
||||
delta_y -= 4;
|
||||
m24_kbd_adddata(m24_kbd->scan[6]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user