Updates to mouse.c (fixing a bug) and mouse_bus.c (fixing several) - done together with 86Box.
Updated pc.c to remove the no-longer-needed mouse_init() function. Added 100MHz and 200MHz 386 processors for debugging (and faster compiles in the Linux guest.)
This commit is contained in:
@@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* Define all known processor types.
|
* Define all known processor types.
|
||||||
*
|
*
|
||||||
* Version: @(#)cpu_table.c 1.0.8 2019/04/12
|
* Version: @(#)cpu_table.c 1.0.9 2019/05/09
|
||||||
*
|
*
|
||||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
@@ -53,7 +53,7 @@ const CPU cpus_8088[] = {
|
|||||||
{ "8088/10", CPU_8088, 10000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1 },
|
{ "8088/10", CPU_8088, 10000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1 },
|
||||||
{ "8088/12", CPU_8088, 12000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1 },
|
{ "8088/12", CPU_8088, 12000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1 },
|
||||||
{ "8088/16", CPU_8088, 16000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1 },
|
{ "8088/16", CPU_8088, 16000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1 },
|
||||||
#ifdef _DEBUG
|
#if defined(WALTJE) && defined(_DEBUG)
|
||||||
{ "286/6", CPU_286, 6000000, 1, 0, 0, 0, 0, 0, 2,2,2,2, 1 },
|
{ "286/6", CPU_286, 6000000, 1, 0, 0, 0, 0, 0, 2,2,2,2, 1 },
|
||||||
#endif
|
#endif
|
||||||
{ NULL }
|
{ NULL }
|
||||||
@@ -101,6 +101,9 @@ const CPU cpus_286[] = {
|
|||||||
{ "286/16", CPU_286, 16000000, 1, 0, 0, 0, 0, 0, 3,3,3,3, 2 },
|
{ "286/16", CPU_286, 16000000, 1, 0, 0, 0, 0, 0, 3,3,3,3, 2 },
|
||||||
{ "286/20", CPU_286, 20000000, 1, 0, 0, 0, 0, 0, 4,4,4,4, 3 },
|
{ "286/20", CPU_286, 20000000, 1, 0, 0, 0, 0, 0, 4,4,4,4, 3 },
|
||||||
{ "286/25", CPU_286, 25000000, 1, 0, 0, 0, 0, 0, 4,4,4,4, 3 },
|
{ "286/25", CPU_286, 25000000, 1, 0, 0, 0, 0, 0, 4,4,4,4, 3 },
|
||||||
|
#if defined(WALTJE) && defined(_DEBUG)
|
||||||
|
{ "286/100", CPU_286, 100000000, 1, 0, 0, 0, 0, 0, 4,4,4,4, 3 },
|
||||||
|
#endif
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -121,6 +124,10 @@ const CPU cpus_i386DX[] = {
|
|||||||
{ "i386DX/25", CPU_386DX, 25000000, 1, 0, 0x0308, 0, 0, 0, 4,4,3,3, 3 },
|
{ "i386DX/25", CPU_386DX, 25000000, 1, 0, 0x0308, 0, 0, 0, 4,4,3,3, 3 },
|
||||||
{ "i386DX/33", CPU_386DX, 33333333, 1, 0, 0x0308, 0, 0, 0, 6,6,3,3, 4 },
|
{ "i386DX/33", CPU_386DX, 33333333, 1, 0, 0x0308, 0, 0, 0, 6,6,3,3, 4 },
|
||||||
{ "i386DX/40", CPU_386DX, 40000000, 1, 0, 0x0308, 0, 0, 0, 7,7,3,3, 5 },
|
{ "i386DX/40", CPU_386DX, 40000000, 1, 0, 0x0308, 0, 0, 0, 7,7,3,3, 5 },
|
||||||
|
#if defined(WALTJE) && defined(_DEBUG)
|
||||||
|
{ "i386DX/100", CPU_386DX, 100000000, 1, 0, 0x0308, 0, 0, 0, 7,7,3,3, 5 },
|
||||||
|
{ "i386DX/200", CPU_386DX, 200000000, 1, 0, 0x0308, 0, 0, 0, 7,7,3,3, 5 },
|
||||||
|
#endif
|
||||||
{ "RapidCAD/25", CPU_RAPIDCAD, 25000000, 1, 0, 0x0430, 0, 0, 0, 4,4,3,3, 3 },
|
{ "RapidCAD/25", CPU_RAPIDCAD, 25000000, 1, 0, 0x0430, 0, 0, 0, 4,4,3,3, 3 },
|
||||||
{ "RapidCAD/33", CPU_RAPIDCAD, 33333333, 1, 0, 0x0430, 0, 0, 0, 6,6,3,3, 4 },
|
{ "RapidCAD/33", CPU_RAPIDCAD, 33333333, 1, 0, 0x0430, 0, 0, 0, 6,6,3,3, 4 },
|
||||||
{ "RapidCAD/40", CPU_RAPIDCAD, 40000000, 1, 0, 0x0430, 0, 0, 0, 7,7,3,3, 5 },
|
{ "RapidCAD/40", CPU_RAPIDCAD, 40000000, 1, 0, 0x0430, 0, 0, 0, 7,7,3,3, 5 },
|
||||||
@@ -142,6 +149,10 @@ const CPU cpus_Am386DX[] = {
|
|||||||
{ "Am386DX/25", CPU_386DX, 25000000, 1, 0, 0x0308, 0, 0, 0, 4,4,3,3, 3 },
|
{ "Am386DX/25", CPU_386DX, 25000000, 1, 0, 0x0308, 0, 0, 0, 4,4,3,3, 3 },
|
||||||
{ "Am386DX/33", CPU_386DX, 33333333, 1, 0, 0x0308, 0, 0, 0, 6,6,3,3, 4 },
|
{ "Am386DX/33", CPU_386DX, 33333333, 1, 0, 0x0308, 0, 0, 0, 6,6,3,3, 4 },
|
||||||
{ "Am386DX/40", CPU_386DX, 40000000, 1, 0, 0x0308, 0, 0, 0, 7,7,3,3, 5 },
|
{ "Am386DX/40", CPU_386DX, 40000000, 1, 0, 0x0308, 0, 0, 0, 7,7,3,3, 5 },
|
||||||
|
#if defined(WALTJE) && defined(_DEBUG)
|
||||||
|
{ "Am386DX/100", CPU_386DX, 100000000, 1, 0, 0x0308, 0, 0, 0, 7,7,3,3, 5 },
|
||||||
|
{ "Am386DX/200", CPU_386DX, 200000000, 1, 0, 0x0308, 0, 0, 0, 7,7,3,3, 5 },
|
||||||
|
#endif
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,7 @@
|
|||||||
*
|
*
|
||||||
* Common driver module for MOUSE devices.
|
* Common driver module for MOUSE devices.
|
||||||
*
|
*
|
||||||
* TODO: Add the Genius bus- and serial mouse.
|
* Version: @(#)mouse.c 1.0.20 2019/05/09
|
||||||
*
|
|
||||||
* Version: @(#)mouse.c 1.0.19 2019/05/03
|
|
||||||
*
|
*
|
||||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
@@ -80,9 +78,6 @@ static const struct {
|
|||||||
|
|
||||||
{ "logibus", &mouse_logibus_device },
|
{ "logibus", &mouse_logibus_device },
|
||||||
{ "msbus", &mouse_msinport_device },
|
{ "msbus", &mouse_msinport_device },
|
||||||
#if 0
|
|
||||||
{ "genibus", &mouse_genibus_device },
|
|
||||||
#endif
|
|
||||||
{ "mssystems", &mouse_mssystems_device },
|
{ "mssystems", &mouse_mssystems_device },
|
||||||
{ "msserial", &mouse_msserial_device },
|
{ "msserial", &mouse_msserial_device },
|
||||||
{ "ltserial", &mouse_ltserial_device },
|
{ "ltserial", &mouse_ltserial_device },
|
||||||
@@ -115,22 +110,14 @@ mouse_log(int level, const char *fmt, ...)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Initialize the mouse module. */
|
|
||||||
void
|
|
||||||
mouse_init(void)
|
|
||||||
{
|
|
||||||
/* Initialize local data. */
|
|
||||||
mouse_x = mouse_y = mouse_z = 0;
|
|
||||||
mouse_buttons = 0x00;
|
|
||||||
|
|
||||||
mouse_close();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
mouse_close(void)
|
mouse_close(void)
|
||||||
{
|
{
|
||||||
mouse_nbut = 0;
|
mouse_nbut = 0;
|
||||||
|
|
||||||
|
mouse_x = mouse_y = mouse_z = 0;
|
||||||
|
mouse_buttons = 0x00;
|
||||||
|
|
||||||
mouse_priv = NULL;
|
mouse_priv = NULL;
|
||||||
mouse_func = NULL;
|
mouse_func = NULL;
|
||||||
}
|
}
|
||||||
@@ -148,10 +135,15 @@ mouse_reset(void)
|
|||||||
/* Clear local data. */
|
/* Clear local data. */
|
||||||
mouse_x = mouse_y = mouse_z = 0;
|
mouse_x = mouse_y = mouse_z = 0;
|
||||||
mouse_buttons = 0x00;
|
mouse_buttons = 0x00;
|
||||||
|
mouse_priv = NULL;
|
||||||
|
mouse_func = NULL;
|
||||||
|
|
||||||
/* Initialize the mouse device. */
|
/* Initialize the mouse device. */
|
||||||
if (devices[config.mouse_type].device != NULL)
|
if (devices[config.mouse_type].device != NULL) {
|
||||||
mouse_priv = device_add(devices[config.mouse_type].device);
|
mouse_priv = device_add(devices[config.mouse_type].device);
|
||||||
|
mouse_func = (int (*)(int,int,int,int,void *))
|
||||||
|
devices[config.mouse_type].device->ms_poll;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* Definitions for the mouse driver.
|
* Definitions for the mouse driver.
|
||||||
*
|
*
|
||||||
* Version: @(#)mouse.h 1.0.11 2019/04/23
|
* Version: @(#)mouse.h 1.0.12 2019/05/09
|
||||||
*
|
*
|
||||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
@@ -54,17 +54,11 @@
|
|||||||
#define MOUSE_INTERNAL 1 /* machine has internal mouse */
|
#define MOUSE_INTERNAL 1 /* machine has internal mouse */
|
||||||
#define MOUSE_LOGIBUS 2 /* Logitech/ATI Bus Mouse */
|
#define MOUSE_LOGIBUS 2 /* Logitech/ATI Bus Mouse */
|
||||||
#define MOUSE_INPORT 3 /* Microsoft InPort Mouse */
|
#define MOUSE_INPORT 3 /* Microsoft InPort Mouse */
|
||||||
#if 0
|
#define MOUSE_MSYSTEMS 4 /* Mouse Systems mouse */
|
||||||
# define MOUSE_GENIBUS 4 /* Genius Bus Mouse */
|
#define MOUSE_MICROSOFT 5 /* Microsoft Serial Mouse */
|
||||||
# define MOUSE_NEXT 5
|
#define MOUSE_LOGITECH 6 /* Logitech Serial Mouse */
|
||||||
#else
|
#define MOUSE_MSWHEEL 7 /* Serial Wheel Mouse */
|
||||||
# define MOUSE_NEXT 4
|
#define MOUSE_PS2 8 /* PS/2 series Bus Mouse */
|
||||||
#endif
|
|
||||||
#define MOUSE_MSYSTEMS MOUSE_NEXT+0 /* Mouse Systems mouse */
|
|
||||||
#define MOUSE_MICROSOFT MOUSE_NEXT+1 /* Microsoft Serial Mouse */
|
|
||||||
#define MOUSE_LOGITECH MOUSE_NEXT+2 /* Logitech Serial Mouse */
|
|
||||||
#define MOUSE_MSWHEEL MOUSE_NEXT+3 /* Serial Wheel Mouse */
|
|
||||||
#define MOUSE_PS2 MOUSE_NEXT+4 /* PS/2 series Bus Mouse */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -83,9 +77,6 @@ extern const device_t mouse_logibus_device;
|
|||||||
extern const device_t mouse_logibus_onboard_device;
|
extern const device_t mouse_logibus_onboard_device;
|
||||||
extern const device_t mouse_msinport_device;
|
extern const device_t mouse_msinport_device;
|
||||||
extern const device_t mouse_msinport_onboard_device;
|
extern const device_t mouse_msinport_onboard_device;
|
||||||
#if 0
|
|
||||||
extern const device_t mouse_genibus_device;
|
|
||||||
#endif
|
|
||||||
extern const device_t mouse_mssystems_device;
|
extern const device_t mouse_mssystems_device;
|
||||||
extern const device_t mouse_msserial_device;
|
extern const device_t mouse_msserial_device;
|
||||||
extern const device_t mouse_ltserial_device;
|
extern const device_t mouse_ltserial_device;
|
||||||
@@ -93,23 +84,23 @@ extern const device_t mouse_mswhserial_device;
|
|||||||
extern const device_t mouse_ps2_device;
|
extern const device_t mouse_ps2_device;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void mouse_log(int level, const char *fmt, ...);
|
extern void mouse_log(int level, const char *fmt, ...);
|
||||||
extern void mouse_init(void);
|
extern void mouse_init(void);
|
||||||
extern void mouse_close(void);
|
extern void mouse_close(void);
|
||||||
extern void mouse_reset(void);
|
extern void mouse_reset(void);
|
||||||
extern void mouse_set_buttons(int buttons);
|
extern void mouse_set_buttons(int buttons);
|
||||||
extern void mouse_process(void);
|
extern void mouse_process(void);
|
||||||
extern void mouse_set_poll(int (*f)(int,int,int,int,void *), void *);
|
extern void mouse_set_poll(int (*f)(int,int,int,int,void*), void*);
|
||||||
extern void mouse_poll(void);
|
extern void mouse_poll(void);
|
||||||
|
|
||||||
extern void mouse_bus_set_irq(void *priv, int irq);
|
extern void mouse_bus_set_irq(void *priv, int irq);
|
||||||
|
|
||||||
extern const char *mouse_get_name(int mouse);
|
extern const char *mouse_get_name(int mouse);
|
||||||
extern const char *mouse_get_internal_name(int mouse);
|
extern const char *mouse_get_internal_name(int mouse);
|
||||||
extern int mouse_get_from_internal_name(const char *s);
|
extern int mouse_get_from_internal_name(const char *s);
|
||||||
extern int mouse_has_config(int mouse);
|
extern int mouse_has_config(int mouse);
|
||||||
extern int mouse_get_type(int mouse);
|
extern int mouse_get_type(int mouse);
|
||||||
extern int mouse_get_buttons(void);
|
extern int mouse_get_buttons(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,20 +46,22 @@
|
|||||||
* Microsoft Windows 3.10.026
|
* Microsoft Windows 3.10.026
|
||||||
* Microsoft Windows NT 3.1
|
* Microsoft Windows NT 3.1
|
||||||
* Microsoft Windows 95
|
* Microsoft Windows 95
|
||||||
|
* Linux kernel 1.2.13-ELF
|
||||||
*
|
*
|
||||||
* InPort verified with:
|
* InPort verified with:
|
||||||
* Logitech LMouse.com 6.12
|
* Logitech LMouse.com 6.12
|
||||||
* Logitech LMouse.com 6.41
|
* Logitech LMouse.com 6.41
|
||||||
* Microsoft Windows NT 3.1
|
* Microsoft Windows NT 3.1
|
||||||
* Microsoft Windows 98 SE
|
* Microsoft Windows 98 SE
|
||||||
|
* Linux kernel 1.2.13-ELF
|
||||||
*
|
*
|
||||||
* Version: @(#)mouse_bus.c 1.1.9 2019/04/27
|
* Version: @(#)mouse_bus.c 1.1.10 2019/05/09
|
||||||
*
|
*
|
||||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
*
|
*
|
||||||
* Copyright 2017-2019 Fred N. van Kempen.
|
* Copyright 2017-2019 Fred N. van Kempen.
|
||||||
* Copyright 2017,2018 Miran Grca.
|
* Copyright 2017,2019 Miran Grca.
|
||||||
* Copyright 200?-2018 Bochs.
|
* Copyright 200?-2018 Bochs.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with
|
* Redistribution and use in source and binary forms, with
|
||||||
@@ -108,53 +110,47 @@
|
|||||||
#include "mouse.h"
|
#include "mouse.h"
|
||||||
|
|
||||||
|
|
||||||
#define IRQ_MASK ((1 << 5) >> dev->irq)
|
#define IRQ_MASK ((1 << 5) >> dev->irq)
|
||||||
|
|
||||||
/* MS Inport Bus Mouse Adapter */
|
/* Microsoft Inport Bus Mouse Adapter. */
|
||||||
#define INP_PORT_CONTROL 0
|
#define INP_PORT_CONTROL 0
|
||||||
#define INP_PORT_DATA 1
|
# define INP_CTRL_READ_BUTTONS 0x00
|
||||||
#define INP_PORT_SIGNATURE 2
|
# define INP_CTRL_READ_X 0x01
|
||||||
#define INP_PORT_CONFIG 3
|
# define INP_CTRL_READ_Y 0x02
|
||||||
|
# define INP_CTRL_COMMAND 0x07
|
||||||
|
# define INP_CTRL_RAISE_IRQ 0x16
|
||||||
|
# define INP_ENABLE_DATA_IRQ 0x08
|
||||||
|
# define INP_ENABLE_TIMER_IRQ 0x10
|
||||||
|
# define INP_HOLD_COUNTER 0x20
|
||||||
|
# define INP_CTRL_RESET 0x80
|
||||||
|
|
||||||
#define INP_CTRL_READ_BUTTONS 0x00
|
#define INP_PORT_DATA 1
|
||||||
#define INP_CTRL_READ_X 0x01
|
|
||||||
#define INP_CTRL_READ_Y 0x02
|
|
||||||
#define INP_CTRL_COMMAND 0x07
|
|
||||||
#define INP_CTRL_RAISE_IRQ 0x16
|
|
||||||
#define INP_CTRL_RESET 0x80
|
|
||||||
|
|
||||||
#define INP_HOLD_COUNTER (1 << 5)
|
#define INP_PORT_SIGNATURE 2
|
||||||
#define INP_ENABLE_TIMER_IRQ (1 << 4)
|
|
||||||
#define INP_ENABLE_DATA_IRQ (1 << 3)
|
|
||||||
#define INP_PERIOD_MASK 0x07
|
|
||||||
|
|
||||||
/* MS/Logictech Standard Bus Mouse Adapter */
|
#define INP_PERIOD_MASK 0x07
|
||||||
#define BUSM_PORT_DATA 0
|
|
||||||
#define BUSM_PORT_SIGNATURE 1
|
|
||||||
#define BUSM_PORT_CONTROL 2
|
|
||||||
#define BUSM_PORT_CONFIG 3
|
|
||||||
|
|
||||||
#define HOLD_COUNTER (1 << 7)
|
|
||||||
#define READ_X (0 << 6)
|
|
||||||
#define READ_Y (1 << 6)
|
|
||||||
#define READ_LOW (0 << 5)
|
|
||||||
#define READ_HIGH (1 << 5)
|
|
||||||
#define DISABLE_IRQ (1 << 4)
|
|
||||||
|
|
||||||
#define DEVICE_ACTIVE (1 << 7)
|
/* Logitech/Microsoft Standard Bus Mouse Adapter. */
|
||||||
|
#define BUSM_PORT_DATA 0
|
||||||
|
|
||||||
#define READ_X_LOW (READ_X | READ_LOW)
|
#define BUSM_PORT_SIGNATURE 1
|
||||||
#define READ_X_HIGH (READ_X | READ_HIGH)
|
|
||||||
#define READ_Y_LOW (READ_Y | READ_LOW)
|
|
||||||
#define READ_Y_HIGH (READ_Y | READ_HIGH)
|
|
||||||
|
|
||||||
#define FLAG_INPORT (1 << 0)
|
#define BUSM_PORT_CONTROL 2
|
||||||
#define FLAG_ENABLED (1 << 1)
|
# define CTRL_DISABLE_IRQ (1 << 4)
|
||||||
#define FLAG_HOLD (1 << 2)
|
# define CTRL_READ_LOW (0 << 5)
|
||||||
#define FLAG_TIMER_INT (1 << 3)
|
# define CTRL_READ_HIGH (1 << 5)
|
||||||
#define FLAG_DATA_INT (1 << 4)
|
# define CTRL_READ_X (0 << 6)
|
||||||
|
# define CTRL_READ_Y (1 << 6)
|
||||||
|
# define CTRL_HOLD_COUNTER (1 << 7)
|
||||||
|
|
||||||
static const double periods[4] = { 30.0, 50.0, 100.0, 200.0 };
|
# define CTRL_READ_X_LOW (CTRL_READ_X | CTRL_READ_LOW)
|
||||||
|
# define CTRL_READ_X_HIGH (CTRL_READ_X | CTRL_READ_HIGH)
|
||||||
|
# define CTRL_READ_Y_LOW (CTRL_READ_Y | CTRL_READ_LOW)
|
||||||
|
# define CTRL_READ_Y_HIGH (CTRL_READ_Y | CTRL_READ_HIGH)
|
||||||
|
|
||||||
|
#define BUSM_PORT_CONFIG 3
|
||||||
|
# define CONF_DEVICE_ACTIVE 0x80
|
||||||
|
|
||||||
|
|
||||||
/* Our mouse device. */
|
/* Our mouse device. */
|
||||||
@@ -165,24 +161,32 @@ typedef struct mouse {
|
|||||||
int8_t irq,
|
int8_t irq,
|
||||||
bn;
|
bn;
|
||||||
uint8_t flags;
|
uint8_t flags;
|
||||||
|
# define FLAG_INPORT 0x01
|
||||||
|
# define FLAG_ENABLED 0x02
|
||||||
|
# define FLAG_HOLD 0x04
|
||||||
|
# define FLAG_TIMER_INT 0x08
|
||||||
|
# define FLAG_DATA_INT 0x10
|
||||||
|
|
||||||
int delayed_dx, delayed_dy,
|
int8_t curr_x, curr_y;
|
||||||
|
uint8_t curr_b,
|
||||||
buttons,
|
buttons,
|
||||||
buttons_last,
|
buttons_last;
|
||||||
|
|
||||||
curr_x, curr_y,
|
|
||||||
curr_b;
|
|
||||||
|
|
||||||
uint8_t ctrl, conf, sig,
|
uint8_t ctrl, conf, sig,
|
||||||
cmd, toggle;
|
cmd, toggle;
|
||||||
|
|
||||||
double period;
|
int delayed_dx,
|
||||||
|
delayed_dy;
|
||||||
|
|
||||||
int64_t timer_enabled;
|
double period;
|
||||||
int64_t timer;
|
int64_t timer,
|
||||||
|
timer_enabled;
|
||||||
} mouse_t;
|
} mouse_t;
|
||||||
|
|
||||||
|
|
||||||
|
static const double periods[4] = { 30.0, 50.0, 100.0, 200.0 };
|
||||||
|
|
||||||
|
|
||||||
/* Handle a READ operation from one of the Logitech registers. */
|
/* Handle a READ operation from one of the Logitech registers. */
|
||||||
static uint8_t
|
static uint8_t
|
||||||
lt_read(uint16_t port, void *priv)
|
lt_read(uint16_t port, void *priv)
|
||||||
@@ -198,20 +202,24 @@ lt_read(uint16_t port, void *priv)
|
|||||||
* to change this a bit.
|
* to change this a bit.
|
||||||
*/
|
*/
|
||||||
switch (dev->ctrl & 0x60) {
|
switch (dev->ctrl & 0x60) {
|
||||||
case READ_X_LOW:
|
case CTRL_READ_X_LOW:
|
||||||
ret = dev->curr_x & 0x0f;
|
ret = dev->curr_x & 0x0f;
|
||||||
|
dev->curr_x &= 0xf0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case READ_X_HIGH:
|
case CTRL_READ_X_HIGH:
|
||||||
ret = (dev->curr_x >> 4) & 0x0f;
|
ret = (dev->curr_x >> 4) & 0x0f;
|
||||||
|
dev->curr_x &= 0x0f;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case READ_Y_LOW:
|
case CTRL_READ_Y_LOW:
|
||||||
ret = dev->curr_y & 0x0f;
|
ret = dev->curr_y & 0x0f;
|
||||||
|
dev->curr_y &= 0xf0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case READ_Y_HIGH:
|
case CTRL_READ_Y_HIGH:
|
||||||
ret = (dev->curr_y >> 4) & 0x0f;
|
ret = (dev->curr_y >> 4) & 0x0f;
|
||||||
|
dev->curr_y &= 0x0f;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -274,19 +282,18 @@ lt_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
|
|
||||||
case BUSM_PORT_CONTROL:
|
case BUSM_PORT_CONTROL:
|
||||||
dev->ctrl = val | 0x0f;
|
dev->ctrl = val | 0x0f;
|
||||||
if (! (val & DISABLE_IRQ))
|
if (! (val & CTRL_DISABLE_IRQ))
|
||||||
dev->flags |= FLAG_TIMER_INT;
|
dev->flags |= FLAG_TIMER_INT;
|
||||||
else
|
else
|
||||||
dev->flags &= ~FLAG_TIMER_INT;
|
dev->flags &= ~FLAG_TIMER_INT;
|
||||||
|
|
||||||
if (val & HOLD_COUNTER)
|
if (val & CTRL_HOLD_COUNTER)
|
||||||
dev->flags |= FLAG_HOLD;
|
dev->flags |= FLAG_HOLD;
|
||||||
else
|
else
|
||||||
dev->flags &= ~FLAG_HOLD;
|
dev->flags &= ~FLAG_HOLD;
|
||||||
|
|
||||||
if (dev->irq != -1)
|
if (dev->irq != -1)
|
||||||
picintc(1 << dev->irq);
|
picintc(1 << dev->irq);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BUSM_PORT_CONFIG:
|
case BUSM_PORT_CONFIG:
|
||||||
@@ -324,12 +331,11 @@ lt_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
* The only difference is - port C upper and port B go from
|
* The only difference is - port C upper and port B go from
|
||||||
* input to output.
|
* input to output.
|
||||||
*/
|
*/
|
||||||
dev->conf = val;
|
if (val & CONF_DEVICE_ACTIVE) {
|
||||||
if (val & DEVICE_ACTIVE) {
|
|
||||||
/* Mode set/reset - enable this */
|
/* Mode set/reset - enable this */
|
||||||
dev->conf = val;
|
dev->conf = val;
|
||||||
dev->flags |= (FLAG_ENABLED | FLAG_TIMER_INT);
|
dev->flags |= (FLAG_ENABLED | FLAG_TIMER_INT);
|
||||||
dev->ctrl = 0x0F & ~IRQ_MASK;
|
dev->ctrl = 0x0f & ~IRQ_MASK;
|
||||||
} else {
|
} else {
|
||||||
/* Single-bit set/reset */
|
/* Single-bit set/reset */
|
||||||
bit = 1 << ((val >> 1) & 0x07); /* Bits 3-1 specify the target bit */
|
bit = 1 << ((val >> 1) & 0x07); /* Bits 3-1 specify the target bit */
|
||||||
@@ -358,15 +364,17 @@ ms_read(uint16_t port, void *priv)
|
|||||||
case INP_PORT_DATA:
|
case INP_PORT_DATA:
|
||||||
switch (dev->cmd) {
|
switch (dev->cmd) {
|
||||||
case INP_CTRL_READ_BUTTONS:
|
case INP_CTRL_READ_BUTTONS:
|
||||||
ret = dev->curr_b | 0x80;
|
ret = dev->curr_b;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case INP_CTRL_READ_X:
|
case INP_CTRL_READ_X:
|
||||||
ret = dev->curr_x;
|
ret = dev->curr_x;
|
||||||
|
dev->curr_x = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case INP_CTRL_READ_Y:
|
case INP_CTRL_READ_Y:
|
||||||
ret = dev->curr_y;
|
ret = dev->curr_y;
|
||||||
|
dev->curr_y = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case INP_CTRL_COMMAND:
|
case INP_CTRL_COMMAND:
|
||||||
@@ -382,13 +390,9 @@ ms_read(uint16_t port, void *priv)
|
|||||||
if (dev->toggle)
|
if (dev->toggle)
|
||||||
ret = 0x12;
|
ret = 0x12;
|
||||||
else
|
else
|
||||||
ret = 0xDE;
|
ret = 0xde;
|
||||||
dev->toggle ^= 1;
|
dev->toggle ^= 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case INP_PORT_CONFIG:
|
|
||||||
ERRLOG("MOUSE: READ from port %04x\n", port);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGLOG(2, "MOUSE: read(%04x) = %02x\n", port, ret);
|
DBGLOG(2, "MOUSE: read(%04x) = %02x\n", port, ret);
|
||||||
@@ -428,21 +432,22 @@ ms_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
case INP_PORT_DATA:
|
case INP_PORT_DATA:
|
||||||
if (dev->irq != -1)
|
if (dev->irq != -1)
|
||||||
picintc(1 << dev->irq);
|
picintc(1 << dev->irq);
|
||||||
|
|
||||||
switch (dev->cmd) {
|
switch (dev->cmd) {
|
||||||
case INP_CTRL_COMMAND:
|
case INP_CTRL_COMMAND:
|
||||||
if (val & INP_HOLD_COUNTER)
|
if (val & INP_HOLD_COUNTER)
|
||||||
dev->flags |= FLAG_HOLD;
|
dev->flags |= FLAG_HOLD;
|
||||||
else
|
else
|
||||||
dev->flags &= ~FLAG_HOLD;
|
dev->flags &= ~FLAG_HOLD;
|
||||||
|
|
||||||
if (val & INP_ENABLE_TIMER_IRQ)
|
if (val & INP_ENABLE_TIMER_IRQ)
|
||||||
dev->flags |= FLAG_TIMER_INT;
|
dev->flags |= FLAG_TIMER_INT;
|
||||||
else
|
else
|
||||||
dev->flags &= ~FLAG_TIMER_INT;
|
dev->flags &= ~FLAG_TIMER_INT;
|
||||||
|
|
||||||
if (val & INP_ENABLE_DATA_IRQ)
|
if (val & INP_ENABLE_DATA_IRQ)
|
||||||
dev->flags |= FLAG_DATA_INT;
|
dev->flags |= FLAG_DATA_INT;
|
||||||
else
|
else
|
||||||
dev->flags &= ~FLAG_DATA_INT;
|
dev->flags &= ~FLAG_DATA_INT;
|
||||||
|
|
||||||
switch (val & INP_PERIOD_MASK) {
|
switch (val & INP_PERIOD_MASK) {
|
||||||
@@ -457,9 +462,9 @@ ms_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
case 3:
|
case 3:
|
||||||
case 4:
|
case 4:
|
||||||
dev->period = 1000000.0 / periods[(val & INP_PERIOD_MASK) - 1];
|
dev->period = 1000000.0 / periods[(val & INP_PERIOD_MASK) - 1];
|
||||||
dev->timer = ((int64_t) dev->period) * TIMER_USEC;
|
dev->timer = (int64_t)(dev->period * TIMER_USEC);
|
||||||
dev->timer_enabled = (val & INP_ENABLE_TIMER_IRQ) ? 1LL : 0LL;
|
dev->timer_enabled = (val & INP_ENABLE_TIMER_IRQ) ? 1LL : 0LL;
|
||||||
DBGLOG(1, "MOUSE timer is now %sabled at period %i\n", (val & INP_ENABLE_TIMER_IRQ) ? "en" : "dis", (int32_t) dev->period);
|
DBGLOG(1, "MOUSE timer is now %sabled at period %i\n", (val & INP_ENABLE_TIMER_IRQ) ? "en" : "dis", (int32_t)dev->period);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
@@ -483,7 +488,6 @@ ms_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case INP_PORT_SIGNATURE:
|
case INP_PORT_SIGNATURE:
|
||||||
case INP_PORT_CONFIG:
|
|
||||||
ERRLOG("MOUSE: WRITE %02x to port %04x\n", val, port);
|
ERRLOG("MOUSE: WRITE %02x to port %04x\n", val, port);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -502,6 +506,7 @@ bm_poll(int x, int y, int z, int b, void *priv)
|
|||||||
|
|
||||||
/* Has its state changed? */
|
/* Has its state changed? */
|
||||||
if (!x && !y && !((b ^ dev->buttons_last) & 0x07)) {
|
if (!x && !y && !((b ^ dev->buttons_last) & 0x07)) {
|
||||||
|
/* No, so clear the 'status changed' bits that are also in there. */
|
||||||
dev->buttons_last = b;
|
dev->buttons_last = b;
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
@@ -529,10 +534,10 @@ bm_poll(int x, int y, int z, int b, void *priv)
|
|||||||
dev->buttons_last = b;
|
dev->buttons_last = b;
|
||||||
|
|
||||||
/* Clamp x and y to between -128 and 127 (int8_t range). */
|
/* Clamp x and y to between -128 and 127 (int8_t range). */
|
||||||
if (x > 127) x = 127;
|
if (x > 127) x = 127;
|
||||||
if (x < -128) x = -128;
|
if (x < -128) x = -128;
|
||||||
if (y > 127) y = 127;
|
if (y > 127) y = 127;
|
||||||
if (y < -128) y = -128;
|
if (y < -128) y = -128;
|
||||||
|
|
||||||
if (dev->timer_enabled) {
|
if (dev->timer_enabled) {
|
||||||
/* Update delayed coordinates. */
|
/* Update delayed coordinates. */
|
||||||
@@ -541,9 +546,8 @@ bm_poll(int x, int y, int z, int b, void *priv)
|
|||||||
} else {
|
} else {
|
||||||
/* If the counters are not frozen, update them. */
|
/* If the counters are not frozen, update them. */
|
||||||
if (! (dev->flags & FLAG_HOLD)) {
|
if (! (dev->flags & FLAG_HOLD)) {
|
||||||
dev->curr_x = (int8_t) x;
|
dev->curr_x = (int8_t)x;
|
||||||
dev->curr_y = (int8_t) y;
|
dev->curr_y = (int8_t)y;
|
||||||
|
|
||||||
dev->curr_b = dev->buttons;
|
dev->curr_b = dev->buttons;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -560,43 +564,65 @@ bm_poll(int x, int y, int z, int b, void *priv)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The timer calls us on every tick if the mouse is in
|
* Called at the configured period (InPort mouse) or at
|
||||||
* timer mode (InPort mouse is so configured, MS/Logitech
|
* 45 times per second (MS/Logitech Bus mouse).
|
||||||
* Bus mouse always).
|
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
bm_update_data(mouse_t *dev)
|
bm_timer(void *priv)
|
||||||
{
|
{
|
||||||
|
mouse_t *dev = (mouse_t *)priv;
|
||||||
int delta_x, delta_y;
|
int delta_x, delta_y;
|
||||||
int xor;
|
int xor;
|
||||||
|
|
||||||
/* Update the deltas and the delays. */
|
DBGLOG(1, "MOUSE: Timer Tick (flags=%08x)\n", dev->flags);
|
||||||
if (dev->delayed_dx > 127) {
|
|
||||||
delta_x = 127;
|
/*
|
||||||
dev->delayed_dx -= 127;
|
* The period is configured either via emulator settings
|
||||||
} else if (dev->delayed_dx < -128) {
|
* (for MS/Logitech Bus mouse) or via software (for
|
||||||
delta_x = -128;
|
* InPort mouse).
|
||||||
dev->delayed_dx += 128;
|
*/
|
||||||
} else {
|
dev->timer += ((int64_t) dev->period) * TIMER_USEC;
|
||||||
delta_x = dev->delayed_dx;
|
|
||||||
dev->delayed_dx = 0;
|
if (dev->flags & FLAG_TIMER_INT) {
|
||||||
|
picint(1 << dev->irq);
|
||||||
|
DBGLOG(1, "MOUSE: Timer Interrupt fired\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev->delayed_dy > 127) {
|
/*
|
||||||
delta_y = 127;
|
* Update the counters and deltas if the mouse is in timed mode.
|
||||||
dev->delayed_dy -= 127;
|
*
|
||||||
} else if (dev->delayed_dy < -128) {
|
* If the counters are not frozen, update them.
|
||||||
delta_y = -128;
|
*/
|
||||||
dev->delayed_dy += 128;
|
|
||||||
} else {
|
|
||||||
delta_y = dev->delayed_dy;
|
|
||||||
dev->delayed_dy = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If the counters are not frozen, update them. */
|
|
||||||
if (! (dev->flags & FLAG_HOLD)) {
|
if (! (dev->flags & FLAG_HOLD)) {
|
||||||
dev->curr_x = (uint8_t) delta_x;
|
/* Grab as much 'delta data' as the guest will take (int8_t max.) */
|
||||||
dev->curr_y = (uint8_t) delta_y;
|
if (dev->delayed_dx > 127) {
|
||||||
|
delta_x = 127;
|
||||||
|
dev->delayed_dx -= 127;
|
||||||
|
} else if (dev->delayed_dx < -128) {
|
||||||
|
delta_x = -128;
|
||||||
|
dev->delayed_dx += 128;
|
||||||
|
} else {
|
||||||
|
delta_x = dev->delayed_dx;
|
||||||
|
dev->delayed_dx = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dev->delayed_dy > 127) {
|
||||||
|
delta_y = 127;
|
||||||
|
dev->delayed_dy -= 127;
|
||||||
|
} else if (dev->delayed_dy < -128) {
|
||||||
|
delta_y = -128;
|
||||||
|
dev->delayed_dy += 128;
|
||||||
|
} else {
|
||||||
|
delta_y = dev->delayed_dy;
|
||||||
|
dev->delayed_dy = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make this chunk of data available to the guest. */
|
||||||
|
dev->curr_x = (int8_t)delta_x;
|
||||||
|
dev->curr_y = (int8_t)delta_y;
|
||||||
|
} else {
|
||||||
|
/* Frozen, so, no deltas to give. */
|
||||||
|
delta_x = delta_y = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev->flags & FLAG_INPORT) {
|
if (dev->flags & FLAG_INPORT) {
|
||||||
@@ -619,33 +645,6 @@ bm_update_data(mouse_t *dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Called at the configured period (InPort mouse) or at
|
|
||||||
* 45 times per second (MS/Logitech Bus mouse).
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
bm_timer(void *priv)
|
|
||||||
{
|
|
||||||
mouse_t *dev = (mouse_t *)priv;
|
|
||||||
|
|
||||||
DBGLOG(1, "MOUSE: Timer Tick (flags=%08x)\n", dev->flags);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The period is configured either via emulator settings
|
|
||||||
* (for MS/Logitech Bus mouse) or via software (for
|
|
||||||
* InPort mouse).
|
|
||||||
*/
|
|
||||||
dev->timer += ((int64_t) dev->period) * TIMER_USEC;
|
|
||||||
|
|
||||||
if (dev->flags & FLAG_TIMER_INT) {
|
|
||||||
picint(1 << dev->irq);
|
|
||||||
DBGLOG(1, "MOUSE: Timer Interrupt fired\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
bm_update_data(dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Release all resources held by the device. */
|
/* Release all resources held by the device. */
|
||||||
static void
|
static void
|
||||||
bm_close(void *priv)
|
bm_close(void *priv)
|
||||||
@@ -670,7 +669,6 @@ bm_init(const device_t *info, UNUSED(void *parent))
|
|||||||
|
|
||||||
switch(info->local) {
|
switch(info->local) {
|
||||||
case 0: /* original Logitech controller */
|
case 0: /* original Logitech controller */
|
||||||
dev->flags = 0;
|
|
||||||
dev->base = device_get_config_hex16("base");
|
dev->base = device_get_config_hex16("base");
|
||||||
dev->irq = device_get_config_int("irq");
|
dev->irq = device_get_config_int("irq");
|
||||||
break;
|
break;
|
||||||
@@ -721,7 +719,7 @@ bm_init(const device_t *info, UNUSED(void *parent))
|
|||||||
dev->timer = 0LL;
|
dev->timer = 0LL;
|
||||||
dev->timer_enabled = 0LL;
|
dev->timer_enabled = 0LL;
|
||||||
|
|
||||||
io_sethandler(dev->base, 4,
|
io_sethandler(dev->base, 3,
|
||||||
ms_read,NULL,NULL, ms_write,NULL,NULL, dev);
|
ms_read,NULL,NULL, ms_write,NULL,NULL, dev);
|
||||||
} else {
|
} else {
|
||||||
dev->ctrl = 0x0f; /* the control port value */
|
dev->ctrl = 0x0f; /* the control port value */
|
||||||
@@ -735,7 +733,8 @@ bm_init(const device_t *info, UNUSED(void *parent))
|
|||||||
|
|
||||||
dev->timer = ((int64_t) dev->period) * TIMER_USEC;
|
dev->timer = ((int64_t) dev->period) * TIMER_USEC;
|
||||||
dev->timer_enabled = 1LL;
|
dev->timer_enabled = 1LL;
|
||||||
}
|
} else
|
||||||
|
dev->flags |= FLAG_DATA_INT;
|
||||||
|
|
||||||
io_sethandler(dev->base, 4,
|
io_sethandler(dev->base, 4,
|
||||||
lt_read,NULL,NULL, lt_write,NULL,NULL, dev);
|
lt_read,NULL,NULL, lt_write,NULL,NULL, dev);
|
||||||
@@ -752,19 +751,19 @@ bm_init(const device_t *info, UNUSED(void *parent))
|
|||||||
|
|
||||||
static const device_config_t lt_config[] = {
|
static const device_config_t lt_config[] = {
|
||||||
{
|
{
|
||||||
"base", "Address", CONFIG_HEX16, "", 0x23c,
|
"base", "Address", CONFIG_HEX16, "", 0x023c,
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
"230H", 0x230
|
"230H", 0x0230
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"234H", 0x234
|
"234H", 0x0234
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"238H", 0x238
|
"238H", 0x0238
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"23CH", 0x23c
|
"23CH", 0x023c
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
NULL
|
NULL
|
||||||
@@ -772,7 +771,8 @@ static const device_config_t lt_config[] = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"irq", "IRQ", CONFIG_SELECTION, "", 5, {
|
"irq", "IRQ", CONFIG_SELECTION, "", 5,
|
||||||
|
{
|
||||||
{
|
{
|
||||||
"IRQ 2", 2
|
"IRQ 2", 2
|
||||||
},
|
},
|
||||||
@@ -791,7 +791,8 @@ static const device_config_t lt_config[] = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"hz", "Hz", CONFIG_SELECTION, "", 45, {
|
"hz", "Hz", CONFIG_SELECTION, "", 45,
|
||||||
|
{
|
||||||
{
|
{
|
||||||
"Original Mode", 0
|
"Original Mode", 0
|
||||||
},
|
},
|
||||||
@@ -810,7 +811,8 @@ static const device_config_t lt_config[] = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buttons", "Buttons", CONFIG_SELECTION, "", 2, {
|
"buttons", "Buttons", CONFIG_SELECTION, "", 2,
|
||||||
|
{
|
||||||
{
|
{
|
||||||
"Two", 2
|
"Two", 2
|
||||||
},
|
},
|
||||||
@@ -830,19 +832,19 @@ static const device_config_t lt_config[] = {
|
|||||||
|
|
||||||
static const device_config_t ms_config[] = {
|
static const device_config_t ms_config[] = {
|
||||||
{
|
{
|
||||||
"base", "Address", CONFIG_HEX16, "", 0x23c,
|
"base", "Address", CONFIG_HEX16, "", 0x023c,
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
"230H", 0x230
|
"230H", 0x0230
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"234H", 0x234
|
"234H", 0x0234
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"238H", 0x238
|
"238H", 0x0238
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"23CH", 0x23c
|
"23CH", 0x023c
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
NULL
|
NULL
|
||||||
@@ -850,7 +852,8 @@ static const device_config_t ms_config[] = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"irq", "IRQ", CONFIG_SELECTION, "", 5, {
|
"irq", "IRQ", CONFIG_SELECTION, "", 5,
|
||||||
|
{
|
||||||
{
|
{
|
||||||
"IRQ 2", 2
|
"IRQ 2", 2
|
||||||
},
|
},
|
||||||
@@ -869,7 +872,8 @@ static const device_config_t ms_config[] = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buttons", "Buttons", CONFIG_SELECTION, "", 2, {
|
"buttons", "Buttons", CONFIG_SELECTION, "", 2,
|
||||||
|
{
|
||||||
{
|
{
|
||||||
"Two", 2
|
"Two", 2
|
||||||
},
|
},
|
||||||
@@ -922,7 +926,7 @@ const device_t mouse_msinport_device = {
|
|||||||
|
|
||||||
const device_t mouse_msinport_onboard_device = {
|
const device_t mouse_msinport_onboard_device = {
|
||||||
"Microsoft InPort Mouse (Internal)",
|
"Microsoft InPort Mouse (Internal)",
|
||||||
DEVICE_ISA,
|
0,
|
||||||
11,
|
11,
|
||||||
NULL,
|
NULL,
|
||||||
bm_init, bm_close, NULL,
|
bm_init, bm_close, NULL,
|
||||||
|
|||||||
3
src/pc.c
3
src/pc.c
@@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* Main emulator module where most things are controlled.
|
* Main emulator module where most things are controlled.
|
||||||
*
|
*
|
||||||
* Version: @(#)pc.c 1.0.75 2019/05/05
|
* Version: @(#)pc.c 1.0.76 2019/05/09
|
||||||
*
|
*
|
||||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
@@ -676,7 +676,6 @@ usage:
|
|||||||
* clear all the global configuration data now.
|
* clear all the global configuration data now.
|
||||||
*/
|
*/
|
||||||
config_init(&config);
|
config_init(&config);
|
||||||
mouse_init();
|
|
||||||
hdd_init();
|
hdd_init();
|
||||||
cdrom_global_init();
|
cdrom_global_init();
|
||||||
zip_global_init();
|
zip_global_init();
|
||||||
|
|||||||
Reference in New Issue
Block a user