nuclear@0: #include "mouse.h" nuclear@21: #include "inttypes.h" nuclear@0: nuclear@0: #define INTR 0x33 nuclear@0: nuclear@0: #define QUERY 0 nuclear@0: #define SHOW 1 nuclear@0: #define HIDE 2 nuclear@0: #define READ 3 nuclear@0: #define WRITE 4 nuclear@0: nuclear@0: #define XLIM 7 nuclear@0: #define YLIM 8 nuclear@0: nuclear@0: int have_mouse(void) nuclear@0: { nuclear@21: int16_t res; nuclear@21: __asm { nuclear@0: mov ax, QUERY nuclear@0: int INTR nuclear@0: mov res, ax nuclear@0: } nuclear@0: return res; nuclear@0: } nuclear@0: nuclear@0: void show_mouse(int show) nuclear@0: { nuclear@21: int16_t cmd = show ? SHOW : HIDE; nuclear@21: __asm { nuclear@0: mov ax, cmd nuclear@0: int INTR nuclear@0: } nuclear@0: } nuclear@0: nuclear@0: int read_mouse(int *xp, int *yp) nuclear@0: { nuclear@21: int16_t x, y, bn; nuclear@0: nuclear@21: __asm { nuclear@0: mov ax, READ nuclear@0: int INTR nuclear@0: mov bn, bx nuclear@0: mov x, cx nuclear@0: mov y, dx nuclear@0: /* XXX some sort of div by 8 in the original code ? */ nuclear@0: } nuclear@0: nuclear@0: if(xp) *xp = x; nuclear@0: if(yp) *yp = y; nuclear@0: return bn; nuclear@0: } nuclear@0: nuclear@0: void set_mouse(int x, int y) nuclear@0: { nuclear@21: __asm { nuclear@0: mov ax, WRITE nuclear@21: mov ecx, x nuclear@21: mov edx, y nuclear@0: int INTR nuclear@0: } nuclear@0: } nuclear@0: nuclear@0: void set_mouse_limits(int xmin, int ymin, int xmax, int ymax) nuclear@0: { nuclear@21: __asm { nuclear@0: mov ax, XLIM nuclear@21: mov ecx, xmin nuclear@21: mov edx, xmax nuclear@0: int INTR nuclear@0: mov ax, YLIM nuclear@21: mov ecx, ymin nuclear@21: mov edx, ymax nuclear@0: int INTR nuclear@0: } nuclear@0: }