nuclear@1: #include "mouse.h" nuclear@1: #include "inttypes.h" nuclear@1: nuclear@1: #define INTR 0x33 nuclear@1: nuclear@1: #define QUERY 0 nuclear@1: #define SHOW 1 nuclear@1: #define HIDE 2 nuclear@1: #define READ 3 nuclear@1: #define WRITE 4 nuclear@7: #define PIXRATE 0xf nuclear@1: nuclear@1: #define XLIM 7 nuclear@1: #define YLIM 8 nuclear@1: nuclear@1: int have_mouse(void) nuclear@1: { nuclear@7: uint16_t res = 0; nuclear@7: _asm { nuclear@7: mov eax, QUERY nuclear@7: int INTR nuclear@7: mov res, ax nuclear@7: } nuclear@7: return res; nuclear@1: } nuclear@1: nuclear@1: void show_mouse(int show) nuclear@1: { nuclear@7: uint16_t cmd = show ? SHOW : HIDE; nuclear@7: _asm { nuclear@7: mov ax, cmd nuclear@7: int INTR nuclear@7: } nuclear@1: } nuclear@1: nuclear@1: int read_mouse(int *xp, int *yp) nuclear@1: { nuclear@7: uint16_t x, y, state; nuclear@7: _asm { nuclear@7: mov eax, READ nuclear@7: int INTR nuclear@7: mov state, bx nuclear@7: mov x, cx nuclear@7: mov y, dx nuclear@7: } nuclear@1: nuclear@7: if(xp) *xp = x; nuclear@7: if(yp) *yp = y; nuclear@7: return state; nuclear@1: } nuclear@1: nuclear@1: void set_mouse(int x, int y) nuclear@1: { nuclear@7: _asm { nuclear@7: mov eax, WRITE nuclear@7: mov ecx, x nuclear@7: mov edx, y nuclear@7: int INTR nuclear@7: } nuclear@1: } nuclear@1: nuclear@1: void set_mouse_limits(int xmin, int ymin, int xmax, int ymax) nuclear@1: { nuclear@7: _asm { nuclear@7: mov eax, XLIM nuclear@7: mov ecx, xmin nuclear@7: mov edx, xmax nuclear@7: int INTR nuclear@7: mov eax, YLIM nuclear@7: mov ecx, ymin nuclear@7: mov edx, ymax nuclear@7: int INTR nuclear@7: } nuclear@7: } nuclear@1: nuclear@7: void set_mouse_rate(int xrate, int yrate) nuclear@7: { nuclear@7: _asm { nuclear@7: mov ax, PIXRATE nuclear@7: mov ecx, xrate nuclear@7: mov edx, yrate nuclear@7: int INTR nuclear@7: } nuclear@1: } nuclear@7: nuclear@7: void set_mouse_mode(enum mouse_mode mode) nuclear@7: { nuclear@7: if(mode == MOUSE_GFX) { nuclear@7: set_mouse_rate(1, 1); nuclear@7: } else { nuclear@7: set_mouse_rate(8, 16); nuclear@7: } nuclear@7: }