mirror of
https://github.com/cc65/cc65.git
synced 2024-10-01 00:57:11 +00:00
4065cb1983
The Apple2 doesn't have sprites so the Apple2 mouse callbacks place a special character on the text screen to indicate the mouse position. In order to support the necessary character removing and redrawing the Apple2 mouse driver called the Apple2 mouse callbacks in an "unusual way". So far so (sort of) good. However the upcoming Atari mouse driver aims to support both "sprite-type" mouse callbacks as well as "text-char-type" mouse callbacks. Therefore the interface between mouse drivers and callbacks needs to be extended to allow the mouse callbacks to hide their different types from the mouse driver. The nature of this change can be seen best by looking at the Apple2 file modifications. The CBM drivers and callbacks (at least the current ones) don't benefit from this change.
185 lines
7.5 KiB
PHP
185 lines
7.5 KiB
PHP
;/*****************************************************************************/
|
|
;/* */
|
|
;/* mouse-kernel.inc */
|
|
;/* */
|
|
;/* Mouse API */
|
|
;/* */
|
|
;/* */
|
|
;/* */
|
|
;/* (C) 2003-2009, Ullrich von Bassewitz */
|
|
;/* Roemerstrasse 52 */
|
|
;/* D-70794 Filderstadt */
|
|
;/* EMail: uz@cc65.org */
|
|
;/* */
|
|
;/* */
|
|
;/* */
|
|
;/* */
|
|
;/* This software is provided 'as-is', without any expressed or implied */
|
|
;/* warranty. In no event will the authors be held liable for any damages */
|
|
;/* arising from the use of this software. */
|
|
;/* */
|
|
;/* Permission is granted to anyone to use this software for any purpose, */
|
|
;/* including commercial applications, and to alter it and redistribute it */
|
|
;/* freely, subject to the following restrictions: */
|
|
;/* */
|
|
;/* 1. The origin of this software must not be misrepresented; you must not */
|
|
;/* claim that you wrote the original software. If you use this software */
|
|
;/* in a product, an acknowledgment in the product documentation would be */
|
|
;/* appreciated but is not required. */
|
|
;/* 2. Altered source versions must be plainly marked as such, and must not */
|
|
;/* be misrepresented as being the original software. */
|
|
;/* 3. This notice may not be removed or altered from any source */
|
|
;/* distribution. */
|
|
;/* */
|
|
;/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Error codes
|
|
|
|
.enum
|
|
MOUSE_ERR_OK ; No error
|
|
MOUSE_ERR_NO_DRIVER ; No driver available
|
|
MOUSE_ERR_CANNOT_LOAD ; Error loading driver
|
|
MOUSE_ERR_INV_DRIVER ; Invalid driver
|
|
MOUSE_ERR_NO_DEVICE ; Mouse hardware not found
|
|
MOUSE_ERR_INV_IOCTL ; Invalid ioctl code
|
|
|
|
MOUSE_ERR_COUNT ; Special: Number of error codes
|
|
.endenum
|
|
|
|
;------------------------------------------------------------------------------
|
|
; The driver header
|
|
|
|
.struct MOUSE_HDR
|
|
ID .byte 3 ; Contains 0x6D, 0x6F, 0x75 ("mou")
|
|
VERSION .byte 1 ; Interface version
|
|
LIBREF .addr ; Library reference
|
|
JUMPTAB .struct
|
|
INSTALL .addr
|
|
UNINSTALL .addr
|
|
HIDE .addr
|
|
SHOW .addr
|
|
SETBOX .addr
|
|
GETBOX .addr
|
|
MOVE .addr
|
|
BUTTONS .addr
|
|
POS .addr
|
|
INFO .addr
|
|
IOCTL .addr
|
|
IRQ .addr
|
|
.endstruct
|
|
FLAGS .byte ; Mouse driver flags
|
|
CALLBACKS .struct ; Jump instructions
|
|
.byte ; JMP opcode
|
|
CHIDE .addr ; Jump address
|
|
.byte
|
|
CSHOW .addr
|
|
.byte
|
|
CDRAW .addr
|
|
.byte
|
|
CMOVE .addr
|
|
.byte
|
|
CMOVEX .addr
|
|
.byte
|
|
CMOVEY .addr
|
|
.endstruct
|
|
.endstruct
|
|
|
|
;------------------------------------------------------------------------------
|
|
; The mouse callback structure
|
|
|
|
.struct MOUSE_CALLBACKS
|
|
HIDE .addr ; Hide the mouse cursor
|
|
SHOW .addr ; Show the mouse cursor
|
|
DRAW .addr ; Draw the mouse cursor
|
|
MOVE .addr ; Prepare to move the mouse cursor
|
|
MOVEX .addr ; Move the mouse cursor to X coord
|
|
MOVEY .addr ; Move the mouse cursor to Y coord
|
|
.endstruct
|
|
|
|
;------------------------------------------------------------------------------
|
|
; The mouse API version, stored in MOUSE_HDR::VERSION
|
|
|
|
MOUSE_API_VERSION = $05
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Bitmapped mouse driver flags, stored in MOUSE_HDR::FLAGS.
|
|
; Note: If neither of MOUSE_FLAG_XXX_IRQ is set, no interrupts are supplied
|
|
; to the driver. If one of the bits is set, the interrupt vector MUST be
|
|
; valid.
|
|
; Beware: Some of the bits are tested using the BIT instruction, so do not
|
|
; change the values without checking the code!
|
|
|
|
MOUSE_FLAG_EARLY_IRQ = $40 ; Enable IRQ *before* calling INSTALL
|
|
MOUSE_FLAG_LATE_IRQ = $80 ; Enable IRQ *after* calling INSTALL
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Mouse button definitions
|
|
|
|
MOUSE_BTN_LEFT = $10
|
|
MOUSE_BTN_RIGHT = $01
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Structures used to return data from the mouse driver
|
|
|
|
.struct MOUSE_POS
|
|
XCOORD .word
|
|
YCOORD .word
|
|
.endstruct
|
|
|
|
.struct MOUSE_INFO
|
|
POS .tag MOUSE_POS
|
|
BUTTONS .byte
|
|
.endstruct
|
|
|
|
.struct MOUSE_BOX
|
|
MINX .word
|
|
MINY .word
|
|
MAXX .word
|
|
MAXY .word
|
|
.endstruct
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Variables
|
|
|
|
.global _mouse_drv ; Pointer to driver
|
|
.global _mouse_hidden ; Counter, 0 = mouse is visible
|
|
|
|
;------------------------------------------------------------------------------
|
|
; C callable functions
|
|
|
|
.global _mouse_load_driver
|
|
.global _mouse_unload
|
|
.global _mouse_install
|
|
.global _mouse_uninstall
|
|
.global _mouse_geterrormsg
|
|
.global _mouse_hide
|
|
.global _mouse_show
|
|
.global _mouse_setbox
|
|
.global _mouse_getbox
|
|
.global _mouse_move
|
|
.global _mouse_buttons
|
|
.global _mouse_pos
|
|
.global _mouse_info
|
|
.global _mouse_ioctl
|
|
|
|
.global _mouse_clear_ptr
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Driver entry points (asm callable)
|
|
|
|
.global mouse_install
|
|
.global mouse_uninstall
|
|
.global mouse_hide
|
|
.global mouse_show
|
|
.global mouse_setbox
|
|
.global mouse_getbox
|
|
.global mouse_move
|
|
.global mouse_buttons
|
|
.global mouse_pos
|
|
.global mouse_info
|
|
.global mouse_ioctl
|