diff options
author | Javier <dev.git@javispedro.com> | 2022-04-02 01:14:57 +0200 |
---|---|---|
committer | Javier <dev.git@javispedro.com> | 2022-04-02 01:14:57 +0200 |
commit | 3e39df4a4185f947d1af564aca265c0f6b51c9ec (patch) | |
tree | 453b4c1cb56cf029ebe96a02f91075912e64d0eb /dostsr.h | |
parent | a816d1a09b1045fb5c155ac73f3231fcf9d93180 (diff) | |
download | vbados-3e39df4a4185f947d1af564aca265c0f6b51c9ec.tar.gz vbados-3e39df4a4185f947d1af564aca265c0f6b51c9ec.zip |
implement graphic cursor for CGA modes, wheel mouse detection, int2f hooking, simplify w16 driver
Diffstat (limited to 'dostsr.h')
-rw-r--r-- | dostsr.h | 56 |
1 files changed, 50 insertions, 6 deletions
@@ -26,11 +26,16 @@ #include "vbox.h" #define USE_VIRTUALBOX 1 +#define USE_INT2F 1 +#define TRACE_EVENT 1 #define NUM_BUTTONS 3 -#define DRIVER_VERSION_MAJOR 8 -#define DRIVER_VERSION_MINOR 0x20 +#define GRAPHIC_CURSOR_WIDTH 16 +#define GRAPHIC_CURSOR_HEIGHT 16 + +#define REPORTED_VERSION_MAJOR 8 +#define REPORTED_VERSION_MINOR 0x20 struct point { int16_t x, y; @@ -40,32 +45,60 @@ typedef struct tsrdata { // TSR installation data /** Previous int33 ISR, storing it for uninstall. */ void (__interrupt __far *prev_int33_handler)(); +#if USE_INT2F + void (__interrupt __far *prev_int2f_handler)(); +#endif + /** Whether to enable & use wheel mouse. */ + bool usewheel; // Video settings + /** Current video mode. */ uint8_t screen_mode; + /** Active video page. */ uint8_t screen_page; - bool screen_text_mode; + /** Max (virtual) coordinates of full screen in the current mode. + * Used for rendering graphic cursor, mapping absolute coordinates, + * and initializing the default min/max window. */ struct point screen_max; + /** Some graphic modes have pixel doubling, so the virtual coordinates + * are double vs real framebuffer coordinates. */ + struct point screen_scale; + + // Detected mouse hardware + /** Whether the current mouse has a wheel (and support is enabled). */ + bool haswheel; // Current mouse settings + /** Mouse sensitivity/speed. */ struct point mickeysPerLine; // mickeys per 8 pixels + /** Mouse acceleration "double-speed threshold". */ uint16_t doubleSpeedThreshold; // mickeys + /** Current window min coordinates. */ struct point min; + /** Current window max coordinates. */ struct point max; + /** Current cursor visible counter. If >= 0, cursor should be shown. */ int16_t visible_count; + /** For text cursor, whether this is a software or hardware cursor. */ uint8_t cursor_text_type; + /** Masks for the text cursor. */ uint16_t cursor_text_and_mask, cursor_text_xor_mask; + /** Hotspot for the graphic cursor. */ struct point cursor_hotspot; - uint16_t cursor_graphic[16+16]; + /** Masks for the graphic cursor. */ + uint16_t cursor_graphic[GRAPHIC_CURSOR_HEIGHT*2]; // Current mouse status /** Current cursor position (in pixels). */ struct point pos; /** Current remainder of movement that does not yet translate to an entire pixel - * (8ths of pixel right now). */ + * (8ths of pixel). */ struct point pos_frac; /** Current delta movement (in mickeys) since the last report. */ struct point delta; + /** Current remainder of delta movement that does not yet translate to an entire mickey + * Usually only when mickeysPerLine is not a multiple of 8. */ + struct point delta_frac; /** Total mickeys moved in the last second. */ uint16_t total_motion; /** Ticks when the above value was last reset. */ @@ -78,14 +111,23 @@ typedef struct tsrdata { uint16_t count; } pressed, released; } button[NUM_BUTTONS]; + + // Cursor information /** Whether the cursor is currently displayed or not. */ bool cursor_visible; + /** The current position at which the cursor is displayed. */ struct point cursor_pos; + /** For text mode cursor, the character data that was displayed below the cursor. */ uint16_t cursor_prev_char; + /** For graphical mode cursor, contents of the screen that were displayed below + * the cursor before the cursor was drawn. */ + uint8_t cursor_prev_graphic[GRAPHIC_CURSOR_WIDTH * GRAPHIC_CURSOR_HEIGHT]; // Current handlers + /** Address of the event handler. */ void (__far *event_handler)(); - uint8_t event_mask; + /** Events for which we should call the event handler. */ + uint16_t event_mask; #if USE_VIRTUALBOX /** VirtualBox is available. */ @@ -103,6 +145,8 @@ typedef TSRDATA __far * LPTSRDATA; extern void __declspec(naked) __far int33_isr(void); +extern void __declspec(naked) __far int2f_isr(void); + extern LPTSRDATA __far get_tsr_data(bool installed); extern int resident_end; |