]> git.sur5r.net Git - cc65/commitdiff
New joystick API
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 20 Dec 2002 21:02:35 +0000 (21:02 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 20 Dec 2002 21:02:35 +0000 (21:02 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1798 b7a2c559-68d2-44c3-8de9-860c34a00d81

asminc/joy-error.inc [new file with mode: 0644]
asminc/joy-kernel.inc [new file with mode: 0644]
include/joystick.h
include/joystick/joy-kernel.h [new file with mode: 0644]

diff --git a/asminc/joy-error.inc b/asminc/joy-error.inc
new file mode 100644 (file)
index 0000000..5c13386
--- /dev/null
@@ -0,0 +1,44 @@
+;/*****************************************************************************/
+;/*                                                                           */
+;/*                              joy-error.inc                                */
+;/*                                                                           */
+;/*                         Joystick error codes                              */
+;/*                                                                           */
+;/*                                                                           */
+;/*                                                                           */
+;/* (C) 2002      Ullrich von Bassewitz                                       */
+;/*               Wacholderweg 14                                             */
+;/*               D-70597 Stuttgart                                           */
+;/* EMail:        uz@musoftware.de                                            */
+;/*                                                                           */
+;/*                                                                           */
+;/* 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
+JOY_ERR_OK              = 0       ; No error
+JOY_ERR_NO_DRIVER       = 1       ; No driver available
+JOY_ERR_CANNOT_LOAD     = 2       ; Error loading driver
+JOY_ERR_INV_DRIVER      = 3       ; Invalid driver
+JOY_ERR_NO_DEVICE       = 4       ; Device (hardware) not found
+
+
+
diff --git a/asminc/joy-kernel.inc b/asminc/joy-kernel.inc
new file mode 100644 (file)
index 0000000..f108ed1
--- /dev/null
@@ -0,0 +1,76 @@
+;/*****************************************************************************/
+;/*                                                                           */
+;/*                              joy-kernel.inc                               */
+;/*                                                                           */
+;/*                    Internally used joystick functions                     */
+;/*                                                                           */
+;/*                                                                           */
+;/*                                                                           */
+;/* (C) 2002      Ullrich von Bassewitz                                       */
+;/*               Wacholderweg 14                                             */
+;/*               D-70597 Stuttgart                                           */
+;/* EMail:        uz@musoftware.de                                            */
+;/*                                                                           */
+;/*                                                                           */
+;/* 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.                                                          */
+;/*                                                                           */
+;/*****************************************************************************/
+
+
+
+
+
+
+;------------------------------------------------------------------------------
+; Driver header stuff
+
+JOY_HDR_ID              = 0                     ; $6A, $6F, $79 ("joy")
+JOY_HDR_VERSION         = 3                     ; Interface version
+
+JOY_MASKS               = 4                     ; Joystick state mask array
+JOY_MASK_COUNT          = 8                     ; Size of the array
+
+JOY_HDR_JUMPTAB         = 12
+JOY_HDR_INSTALL         = JOY_HDR_JUMPTAB+0     ; INSTALL routine
+JOY_HDR_DEINSTALL       = JOY_HDR_JUMPTAB+2     ; DEINSTALL routine
+JOY_HDR_COUNT           = JOY_HDR_JUMPTAB+4     ; COUNT routine
+JOY_HDR_READ            = JOY_HDR_JUMPTAB+6     ; READ routine
+
+JOY_HDR_JUMPCOUNT       = 4                     ; Number of jump vectors
+
+;------------------------------------------------------------------------------
+; Variables
+
+               .global _joy_drv                        ; Pointer to driver
+
+;------------------------------------------------------------------------------
+; Driver entry points
+
+        .global joy_install
+        .global joy_deinstall
+        .global joy_count
+        .global joy_read
+
+;------------------------------------------------------------------------------
+; ASM functions
+
+               .global _joy_install
+               .global _joy_deinstall
+               .global _joy_count
+               .global _joy_read
+
index 4258c58f0e93342d100a2a78668718288de5a4b5..2668238420ad204acf760f67b4439e643f77a795 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2001 Ullrich von Bassewitz                                       */
+/* (C) 1998-2002 Ullrich von Bassewitz                                       */
 /*               Wacholderweg 14                                             */
 /*               D-70597 Stuttgart                                           */
 /* EMail:        uz@musoftware.de                                            */
 
 
 
-/* Define __JOYSTICK__ for systems that support a joystick */
-#if defined(__ATARI__) || defined(__C16__) || defined(__C64__) || defined(__C128__) || defined(__PLUS4__) || defined(__CBM510__) || defined(__VIC20__)
-#  define __JOYSTICK__
-#else
-#  error The target system does not support a joystick!
-# endif
+/*****************************************************************************/
+/*                                  Definitions                              */
+/*****************************************************************************/
+
+
 
-/* Argument for the function */
+/* Error codes */
+#define JOY_ERR_OK              0       /* No error */
+#define JOY_ERR_NO_DRIVER       1       /* No driver available */
+#define JOY_ERR_CANNOT_LOAD     2       /* Error loading driver */
+#define JOY_ERR_INV_DRIVER      3       /* Invalid driver */
+#define JOY_ERR_NO_DEVICE       4       /* Device (hardware) not found */
+
+/* Argument for the joy_read function */
 #define JOY_1          0
 #define JOY_2          1
 
+/* The following codes are *indices* into the joy_masks array */
+#define JOY_UP          0
+#define JOY_DOWN        1
+#define JOY_LEFT        2
+#define JOY_RIGHT       3
+#define JOY_FIRE        4
+
+/* Array of masks used to check the return value of joy_read for a state */
+extern const unsigned char joy_masks[8];
+
+
+
 /* Result codes of the function. The actual code is a bitwise or
  * of one or more of the following values.
  */
+#if 0
 #if defined(__VIC20__)
 #  define JOY_UP        0x02
 #  define JOY_DOWN      0x04
 #  define JOY_RIGHT    0x08
 #  define JOY_FIRE     0x10
 #endif
+#endif
+
+
+
+/*****************************************************************************/
+/*                                Functions                                 */
+/*****************************************************************************/
+
+
+
+unsigned char __fastcall__ joy_load_driver (const char* driver);
+/* Load a joystick driver and return an error code */
 
+unsigned char __fastcall__ joy_unload (void);
+/* Unload the currently loaded driver. */
 
+unsigned char __fastcall__ joy_count (void);
+/* Return the number of joysticks supported by the driver */
 
-unsigned __fastcall__ readjoy (unsigned char joy);
-/* Read the joystick. The argument is one of JOY_1/JOY2 */
+unsigned char __fastcall__ joy_read (unsigned char joystick);
+/* Read a particular joystick */
 
 
 
diff --git a/include/joystick/joy-kernel.h b/include/joystick/joy-kernel.h
new file mode 100644 (file)
index 0000000..f30f798
--- /dev/null
@@ -0,0 +1,94 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                               joy-kernel.h                                */
+/*                                                                           */
+/*                    Internally used joystick functions                     */
+/*                                                                           */
+/*                                                                           */
+/*                                                                           */
+/* (C) 2002      Ullrich von Bassewitz                                       */
+/*               Wacholderweg 14                                             */
+/*               D-70597 Stuttgart                                           */
+/* EMail:        uz@musoftware.de                                            */
+/*                                                                           */
+/*                                                                           */
+/* 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.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+
+#ifndef _JOY_KERNEL_H
+#define _JOY_KERNEL_H
+
+
+
+/*****************************************************************************/
+/*                                   Data                                    */
+/*****************************************************************************/
+
+
+
+/* A structure that describes the header of a joystick driver loaded into
+ * memory.
+ */
+typedef struct {
+
+    /* Driver header */
+    char                id[3];          /* Contains 0x65, 0x6d, 0x64 ("emd") */
+    unsigned char       version;        /* Interface version */
+
+    /* Bitmasks for the joystick states. See joystick.h for indices */
+    unsigned char       masks[8];
+
+    /* Jump vectors. Note that these are not C callable */
+    void*               install;        /* INSTALL routine */
+    void*               deinstall;      /* DEINSTALL routine */
+    void*               count;          /* COUNT routine */
+    void*               read;           /* READ routine */
+
+} joy_drv_header;
+
+
+
+/* EM kernel variables */
+extern joy_drv_header*         joy_drv;        /* Pointer to driver */
+
+
+
+
+/*****************************************************************************/
+/*                                Functions                                 */
+/*****************************************************************************/
+
+
+
+unsigned char __fastcall__ joy_install (void* driver);
+/* Install the driver once it is loaded, return an error code. */
+
+void __fastcall__ joy_deinstall (void);
+/* Deinstall the driver before unloading it */
+
+
+
+/* End of joy-kernel.h */
+#endif
+
+
+
+