]> git.sur5r.net Git - cc65/blob - asminc/mouse-kernel.inc
Merge remote-tracking branch 'upstream/master'
[cc65] / asminc / mouse-kernel.inc
1 ;/*****************************************************************************/
2 ;/*                                                                           */
3 ;/*                            mouse-kernel.inc                               */
4 ;/*                                                                           */
5 ;/*                                Mouse API                                  */
6 ;/*                                                                           */
7 ;/*                                                                           */
8 ;/*                                                                           */
9 ;/* (C) 2003-2009, Ullrich von Bassewitz                                      */
10 ;/*                Roemerstrasse 52                                           */
11 ;/*                D-70794 Filderstadt                                        */
12 ;/* EMail:         uz@cc65.org                                                */
13 ;/*                                                                           */
14 ;/*                                                                           */
15 ;/*                                                                           */
16 ;/*                                                                           */
17 ;/* This software is provided 'as-is', without any expressed or implied       */
18 ;/* warranty.  In no event will the authors be held liable for any damages    */
19 ;/* arising from the use of this software.                                    */
20 ;/*                                                                           */
21 ;/* Permission is granted to anyone to use this software for any purpose,     */
22 ;/* including commercial applications, and to alter it and redistribute it    */
23 ;/* freely, subject to the following restrictions:                            */
24 ;/*                                                                           */
25 ;/* 1. The origin of this software must not be misrepresented; you must not   */
26 ;/*    claim that you wrote the original software. If you use this software   */
27 ;/*    in a product, an acknowledgment in the product documentation would be  */
28 ;/*    appreciated but is not required.                                       */
29 ;/* 2. Altered source versions must be plainly marked as such, and must not   */
30 ;/*    be misrepresented as being the original software.                      */
31 ;/* 3. This notice may not be removed or altered from any source              */
32 ;/*    distribution.                                                          */
33 ;/*                                                                           */
34 ;/*****************************************************************************/
35
36
37
38
39 ;------------------------------------------------------------------------------
40 ; Error codes
41
42 .enum
43         MOUSE_ERR_OK                    ; No error
44         MOUSE_ERR_NO_DRIVER             ; No driver available
45         MOUSE_ERR_CANNOT_LOAD           ; Error loading driver
46         MOUSE_ERR_INV_DRIVER            ; Invalid driver
47         MOUSE_ERR_NO_DEVICE             ; Mouse hardware not found
48         MOUSE_ERR_INV_IOCTL             ; Invalid ioctl code
49
50         MOUSE_ERR_COUNT                 ; Special: Number of error codes
51 .endenum
52
53 ;------------------------------------------------------------------------------
54 ; The driver header
55
56 .struct MOUSE_HDR
57         ID              .byte   3       ; Contains 0x6D, 0x6F, 0x75 ("mou")
58         VERSION         .byte   1       ; Interface version
59         LIBREF          .addr           ; Library reference
60         JUMPTAB         .struct
61             INSTALL     .addr
62             UNINSTALL   .addr
63             HIDE        .addr
64             SHOW        .addr
65             SETBOX      .addr
66             GETBOX      .addr
67             MOVE        .addr
68             BUTTONS     .addr
69             POS         .addr
70             INFO        .addr
71             IOCTL       .addr
72             IRQ         .addr
73         .endstruct
74         FLAGS           .byte           ; Mouse driver flags
75         CALLBACKS .struct               ; Jump instructions
76                         .byte           ; JMP opcode
77             CHIDE       .addr           ; Jump address
78                         .byte
79             CSHOW       .addr
80                         .byte
81             CMOVEX      .addr
82                         .byte
83             CMOVEY      .addr
84         .endstruct
85 .endstruct
86
87 ;------------------------------------------------------------------------------
88 ; The mouse callback structure
89
90 .struct MOUSE_CALLBACKS
91         HIDE    .addr                   ; Hide the mouse cursor
92         SHOW    .addr                   ; Show the mouse cursor
93         MOVEX   .addr                   ; Move the mouse cursor
94         MOVEY   .addr                   ; Dito for Y
95 .endstruct
96
97 ;------------------------------------------------------------------------------
98 ; The mouse API version, stored in MOUSE_HDR::VERSION
99
100 MOUSE_API_VERSION       = $04
101
102 ;------------------------------------------------------------------------------
103 ; Bitmapped mouse driver flags, stored in MOUSE_HDR::FLAGS.
104 ; Note: If neither of MOUSE_FLAG_XXX_IRQ is set, no interrupts are supplied
105 ; to the driver. If one of the bits is set, the interrupt vector MUST be
106 ; valid.
107 ; Beware: Some of the bits are tested using the BIT instruction, so do not
108 ; change the values without checking the code!
109
110 MOUSE_FLAG_EARLY_IRQ    = $40           ; Enable IRQ *before* calling INSTALL
111 MOUSE_FLAG_LATE_IRQ     = $80           ; Enable IRQ *after* calling INSTALL
112
113 ;------------------------------------------------------------------------------
114 ; Mouse button definitions
115
116 MOUSE_BTN_LEFT          = $10
117 MOUSE_BTN_RIGHT         = $01
118
119 ;------------------------------------------------------------------------------
120 ; Structures used to return data from the mouse driver
121
122 .struct MOUSE_POS
123         XCOORD  .word
124         YCOORD  .word
125 .endstruct
126
127 .struct MOUSE_INFO
128         POS     .tag    MOUSE_POS
129         BUTTONS .byte
130 .endstruct
131
132 .struct MOUSE_BOX
133         MINX    .word
134         MINY    .word
135         MAXX    .word
136         MAXY    .word
137 .endstruct
138
139 ;------------------------------------------------------------------------------
140 ; Variables
141
142         .global _mouse_drv              ; Pointer to driver
143         .global _mouse_hidden           ; Counter, 0 = mouse is visible
144
145 ;------------------------------------------------------------------------------
146 ; C callable functions
147
148         .global _mouse_load_driver
149         .global _mouse_unload
150         .global _mouse_install
151         .global _mouse_uninstall
152         .global _mouse_geterrormsg
153         .global _mouse_hide
154         .global _mouse_show
155         .global _mouse_setbox
156         .global _mouse_getbox
157         .global _mouse_move
158         .global _mouse_buttons
159         .global _mouse_pos
160         .global _mouse_info
161         .global _mouse_ioctl
162
163         .global _mouse_clear_ptr
164
165 ;------------------------------------------------------------------------------
166 ; Driver entry points (asm callable)
167
168         .global mouse_install
169         .global mouse_uninstall
170         .global mouse_hide
171         .global mouse_show
172         .global mouse_setbox                     
173         .global mouse_getbox
174         .global mouse_move
175         .global mouse_buttons
176         .global mouse_pos
177         .global mouse_info
178         .global mouse_ioctl
179
180