]> git.sur5r.net Git - cc65/commitdiff
Removed joy_masks array.
authorOliver Schmidt <ol.sc@web.de>
Sat, 19 Aug 2017 17:11:28 +0000 (19:11 +0200)
committerOliver Schmidt <ol.sc@web.de>
Sat, 19 Aug 2017 17:11:28 +0000 (19:11 +0200)
So far the joy_masks array allowed several joystick drivers for a single target to each have different joy_read return values. However this meant that every call to joy_read implied an additional joy_masks lookup to post-process the return value.

Given that almost all targets only come with a single joystick driver this seems an inappropriate overhead. Therefore now the target header files contain constants matching the return value of the joy_read of the joystick driver(s) on that target.

If there indeed are several joystick drivers for a single target they must agree on a common return value for joy_read. In some cases this was alredy the case as there's a "natural" return value for joy_read. However a few joystick drivers need to be adjusted. This may cause some overhead inside the driver. But that is for sure smaller than the overhead introduced by the joy_masks lookup before.

!!! ToDo !!!

The following three joystick drivers become broken with this commit and need to be adjusted:
- atrmj8.s
- c64-numpad.s
- vic20-stdjoy.s

44 files changed:
asminc/joy-kernel.inc
include/apple2.h
include/atari.h
include/atari5200.h
include/atmos.h
include/c128.h
include/c64.h
include/cbm.h
include/cbm264.h
include/cbm510.h
include/creativision.h
include/em/em-kernel.h
include/gamate.h
include/geos.h
include/joystick.h
include/joystick/joy-kernel.h
include/lynx.h
include/nes.h
include/pce.h
include/pet.h
include/vic20.h
libsrc/apple2/joy/a2.stdjoy.s
libsrc/atari/joy/atrstd.s
libsrc/atari5200/joy/atr5200std.s
libsrc/atmos/joy/atmos-pase.s
libsrc/c128/joy/c128-ptvjoy.s
libsrc/c128/joy/c128-stdjoy.s
libsrc/c64/joy/c64-hitjoy.s
libsrc/c64/joy/c64-ptvjoy.s
libsrc/c64/joy/c64-stdjoy.s
libsrc/cbm510/joy/cbm510-std.s
libsrc/creativision/joy/creativision-stdjoy.s
libsrc/gamate/joy/gamate-stdjoy.s
libsrc/geos-cbm/joy/geos-stdjoy.s
libsrc/joystick/joy-kernel.s
libsrc/lynx/joy/lynx-stdjoy.s
libsrc/nes/joy/nes-stdjoy.s
libsrc/pce/joy/pce-stdjoy.s
libsrc/pet/joy/pet-ptvjoy.s
libsrc/pet/joy/pet-stdjoy.s
libsrc/plus4/joy/plus4-stdjoy.s
libsrc/vic20/joy/vic20-ptvjoy.s
testcode/lib/joy-test.c
testcode/lib/pce/conio.c

index 4fe5572cf0b843c9d4a6e05bd63db59216bd3004..ba969da1d36618510cbeb414eb87a1e6b4ba30d0 100644 (file)
@@ -43,7 +43,6 @@
         ID      .byte   3       ; $6A, $6F, $79 ("joy")
         VERSION .byte   1       ; Interface version
         LIBREF  .addr           ; Library reference
-        MASKS   .byte   8       ; Joystick state mask array
         JUMPTAB .struct
             INSTALL     .addr   ; INSTALL routine
             UNINSTALL   .addr   ; UNINSTALL routine
index e730236936e58836ccf193907a06fbd975384992..421b5db6c9caa4a44886dc9a6399493480d44f5a 100644 (file)
 #define CH_RTEE      '+'
 #define CH_CROSS     '+'
 
+/* Masks for joy_read */
+#define JOY_UP_MASK     0x10
+#define JOY_DOWN_MASK   0x20
+#define JOY_LEFT_MASK   0x04
+#define JOY_RIGHT_MASK  0x08
+#define JOY_BTN_1_MASK  0x40
+#define JOY_BTN_2_MASK  0x80
+
 /* Return codes for get_ostype */
 #define APPLE_UNKNOWN  0x00
 #define APPLE_II       0x10  /* Apple ][                    */
index fa99fca20d719e1676d725349b73ed20437c3635..ca4b2ef267bbcffb1a12184589be4af82b707a67 100644 (file)
 #define TGI_COLOR_LIGHTBLUE     COLOR_LIGHTBLUE
 #define TGI_COLOR_GRAY3         COLOR_GRAY3
 
+/* Masks for joy_read */
+#define JOY_UP_MASK     0x01
+#define JOY_DOWN_MASK   0x02
+#define JOY_LEFT_MASK   0x04
+#define JOY_RIGHT_MASK  0x08
+#define JOY_BTN_1_MASK  0x10
+
 /* color register functions */
 extern void __fastcall__ _setcolor     (unsigned char color_reg, unsigned char hue, unsigned char luminace);
 extern void __fastcall__ _setcolor_low (unsigned char color_reg, unsigned char color_value);
@@ -346,4 +353,4 @@ struct __iocb {
 #define IOCB_FORMAT      0xFE  /* format */
 
 /* End of atari.h */
-#endif /* #ifndef _ATARI_H */
+#endif
index 4bd5bc0fd7421fa0031e18219e7691f094d16043..12c2bb349a570c1b15fb3fb2b8b0261fedf065a6 100644 (file)
@@ -87,6 +87,13 @@ extern void atr5200std_joy[];        /* referred to by joy_static_stddrv[] */
 #define COLOR_LIGHTBLUE         _gtia_mkcolor(HUE_BLUE,6)
 #define COLOR_GRAY3             _gtia_mkcolor(HUE_GREY,5)
 
+/* Masks for joy_read */
+#define JOY_UP_MASK     0x01
+#define JOY_DOWN_MASK   0x02
+#define JOY_LEFT_MASK   0x04
+#define JOY_RIGHT_MASK  0x08
+#define JOY_BTN_1_MASK  0x10
+
 /* get_tv return values */
 #define AT_NTSC     0
 #define AT_PAL      1
@@ -104,4 +111,4 @@ extern void atr5200std_joy[];        /* referred to by joy_static_stddrv[] */
 #define ANTIC (*(struct __antic*)0xD400)
 
 /* End of atari5200.h */
-#endif /* #ifndef _ATARI5200_H */
+#endif
index 72388c9748e2c948a431bcb141d3e221b2cd7fef..c642f9e2a6469bc40406ef13c7baaa6f259ab3c8 100644 (file)
 
 
 
+/* Masks for joy_read */
+#define JOY_UP_MASK     0x10
+#define JOY_DOWN_MASK   0x08
+#define JOY_LEFT_MASK   0x01
+#define JOY_RIGHT_MASK  0x02
+#define JOY_BTN_1_MASK  0x20
+
+
+
 /* No support for dynamically loadable drivers */
 #define DYN_DRV         0
 
index 565fbc9ce71c42e63a7a01ee0f57837a9f64cc49..356140d41b9c7362abfed850f20d638b4c254e1b 100644 (file)
 #define TGI_COLOR_LIGHTBLUE     COLOR_LIGHTBLUE
 #define TGI_COLOR_GRAY3         COLOR_GRAY3
 
+/* Masks for joy_read */
+#define JOY_UP_MASK             0x01
+#define JOY_DOWN_MASK           0x02
+#define JOY_LEFT_MASK           0x04
+#define JOY_RIGHT_MASK          0x08
+#define JOY_BTN_1_MASK          0x10
+
 /* Video mode defines */
 #define VIDEOMODE_40x25         0x00
 #define VIDEOMODE_80x25         0x80
index adf3840b93a0a9c0f35dc6b240d991b6fd129839..eb10600d6b6cbfd8a7cb152f37a243771aa78509 100644 (file)
 #define TGI_COLOR_LIGHTBLUE     COLOR_LIGHTBLUE
 #define TGI_COLOR_GRAY3         COLOR_GRAY3
 
+/* Masks for joy_read */
+#define JOY_UP_MASK             0x01
+#define JOY_DOWN_MASK           0x02
+#define JOY_LEFT_MASK           0x04
+#define JOY_RIGHT_MASK          0x08
+#define JOY_BTN_1_MASK          0x10
+
 /* Define hardware */
 #include <_vic2.h>
 #define VIC     (*(struct __vic2*)0xD000)
index 27e82f9f3b303eb17e527fd3be77ddfb22b68e08..129b0295bdc7a85cc3cb49de0ef4c3f3777eecea 100644 (file)
 
 
 
-/* Expanding upon joystick.h */
-#define JOY_FIRE_IDX            4
-
-#define JOY_FIRE(v)             ((v) & joy_masks[JOY_FIRE_IDX])
+#define JOY_FIRE_MASK   JOY_BTN_1_MASK
+#define JOY_FIRE(v)     ((v) & JOY_FIRE_MASK)
 
 
 
index ff7468d307253668c329cb3f4b86fc3d5908c9a4..46fa64050c3893dcd051b48537e3ece3c9d7e731 100644 (file)
 #define COLOR_LIGHTBLUE         (BCOLOR_LIGHTBLUE | CATTR_LUMA7)
 #define COLOR_GRAY3             (BCOLOR_WHITE | CATTR_LUMA5)
 
+
+
+/* Masks for joy_read */
+#define JOY_UP_MASK             0x01
+#define JOY_DOWN_MASK           0x02
+#define JOY_LEFT_MASK           0x04
+#define JOY_RIGHT_MASK          0x08
+#define JOY_BTN_1_MASK          0x80
+
+
+
 /* Define hardware */
 #include <_ted.h>
 #define TED             (*(struct __ted*)0xFF00)
index 25ea0754039287a1f4cb5b2c4334cba0c20c7fc1..3d6ccd209e7b5ce6ace65331b0f937c1b67a54c9 100644 (file)
 #define COLOR_LIGHTBLUE         0x0E
 #define COLOR_GRAY3             0x0F
 
+/* Masks for joy_read */
+#define JOY_UP_MASK             0x01
+#define JOY_DOWN_MASK           0x02
+#define JOY_LEFT_MASK           0x04
+#define JOY_RIGHT_MASK          0x08
+#define JOY_BTN_1_MASK          0x10
+
 /* Define hardware */
 #include <_vic2.h>
 #define VIC     (*(struct __vic2*)0xD800)
index 5cc99b7affb04ce8fd5f92ca448ee26f29a4e3f0..a97109029279a41928736af21ca6709ccec3c5f2 100644 (file)
 #define CH_LLCORNER 37
 #define CH_LRCORNER 38
 
+/* Masks for joy_read */
+#define JOY_UP_MASK     0x10
+#define JOY_DOWN_MASK   0x04
+#define JOY_LEFT_MASK   0x20
+#define JOY_RIGHT_MASK  0x08
+#define JOY_BTN_1_MASK  0x01
+#define JOY_BTN_2_MASK  0x02
+
 /* no support for dynamically loadable drivers */
 #define DYN_DRV 0
 
index e5df803216164be83aee5608462080a5625c3dfe..a1ce9a2530dabc3c7038695539c8fd800b0aead8 100644 (file)
@@ -52,6 +52,7 @@ typedef struct {
     /* Driver header */
     char                id[3];          /* Contains 0x65, 0x6d, 0x64 ("emd") */
     unsigned char       version;        /* Interface version */
+    void*                               /* Library reference */
 
     /* Jump vectors. Note that these are not C callable */
     void*               install;        /* INSTALL routine */
index 7355ede84da6d8eb679653fe6b855baa29662d0d..0af21623d102664028703034e82831cf62ca96a9 100644 (file)
 /* No support for dynamically loadable drivers */
 #define DYN_DRV         0
 
-/* Expanding upon joystick.h */
-#define JOY_BTN_A_IDX           4
-#define JOY_BTN_B_IDX           5
-#define JOY_START_IDX           6
-#define JOY_SELECT_IDX          7
-
-#define JOY_BTN_A(v)            ((v) & joy_masks[JOY_BTN_A_IDX])
-#define JOY_BTN_B(v)            ((v) & joy_masks[JOY_BTN_B_IDX])
-#define JOY_START(v)            ((v) & joy_masks[JOY_START_IDX])
-#define JOY_SELECT(v)           ((v) & joy_masks[JOY_SELECT_IDX])
+/* Masks for joy_read */
+#define JOY_UP_MASK     0x01
+#define JOY_DOWN_MASK   0x02
+#define JOY_LEFT_MASK   0x04
+#define JOY_RIGHT_MASK  0x08
+#define JOY_BTN_1_MASK  0x10
+#define JOY_BTN_2_MASK  0x20
+#define JOY_BTN_3_MASK  0x40
+#define JOY_BTN_4_MASK  0x80
+
+#define JOY_BTN_A_MASK  JOY_BTN_1_MASK
+#define JOY_BTN_B_MASk  JOY_BTN_2_MASK
+#define JOY_START_MASK  JOY_BTN_3_MASK
+#define JOY_SELECT_MASK JOY_BTN_4_MASK
+
+#define JOY_BTN_A(v)    ((v) & JOY_BTN_A_MASK)
+#define JOY_BTN_B(v)    ((v) & JOY_BTN_B_MASK)
+#define JOY_START(v)    ((v) & JOY_START_MASK)
+#define JOY_SELECT(v)   ((v) & JOY_SELECT_MASK)
 
 /* The addresses of the static drivers */
 extern void gamate_stdjoy_joy[];   /* Referred to by joy_static_stddrv[] */
index 65b85cd595631199136b967ae8913f6f0c8fc8eb..ae356d679923655ca823cf7501816d47eb44b5a1 100644 (file)
 #define TGI_COLOR_LIGHTBLUE     COLOR_LIGHTBLUE
 #define TGI_COLOR_GRAY3         COLOR_GRAY3
 
+#define JOY_UP_MASK             0x01
+#define JOY_DOWN_MASK           0x02
+#define JOY_LEFT_MASK           0x04
+#define JOY_RIGHT_MASK          0x08
+#define JOY_BTN_1_MASK          0x10
+
 
 /* End of geos.h */
 #endif
index 27c4af81a6a96a42b2544c6cb42ba53cf8cf1774..26f339fe4f392227accca399d7f35ee8d424a881 100644 (file)
 #define JOY_1                   0
 #define JOY_2                   1
 
-/* The following codes are *indices* into the joy_masks array */
-#define JOY_UP_IDX              0
-#define JOY_DOWN_IDX            1
-#define JOY_LEFT_IDX            2
-#define JOY_RIGHT_IDX           3
-#define JOY_BTN_1_IDX           4       /* Universally available */
-#define JOY_BTN_2_IDX           5       /* Second button if available */
-#define JOY_BTN_3_IDX           6       /* Third button if available  */
-#define JOY_BTN_4_IDX           7       /* Fourth button if available */
-
-/* Array of masks used to check the return value of joy_read for a state */
-extern const unsigned char joy_masks[8];
-
 /* Macros that evaluate the return code of joy_read */
-#define JOY_UP(v)               ((v) & joy_masks[JOY_UP_IDX])
-#define JOY_DOWN(v)             ((v) & joy_masks[JOY_DOWN_IDX])
-#define JOY_LEFT(v)             ((v) & joy_masks[JOY_LEFT_IDX])
-#define JOY_RIGHT(v)            ((v) & joy_masks[JOY_RIGHT_IDX])
-#define JOY_BTN_1(v)            ((v) & joy_masks[JOY_BTN_1_IDX])
-#define JOY_BTN_2(v)            ((v) & joy_masks[JOY_BTN_2_IDX])
-#define JOY_BTN_3(v)            ((v) & joy_masks[JOY_BTN_3_IDX])
-#define JOY_BTN_4(v)            ((v) & joy_masks[JOY_BTN_4_IDX])
+#define JOY_UP(v)               ((v) & JOY_UP_MASK)
+#define JOY_DOWN(v)             ((v) & JOY_DOWN_MASK)
+#define JOY_LEFT(v)             ((v) & JOY_LEFT_MASK)
+#define JOY_RIGHT(v)            ((v) & JOY_RIGHT_MASK)
+#define JOY_BTN_1(v)            ((v) & JOY_BTN_1_MASK)      /* Universally available */
+#define JOY_BTN_2(v)            ((v) & JOY_BTN_2_MASK)      /* Second button if available */
+#define JOY_BTN_3(v)            ((v) & JOY_BTN_3_MASK)      /* Third button if available  */
+#define JOY_BTN_4(v)            ((v) & JOY_BTN_4_MASK)      /* Fourth button if available */
 
 /* The name of the standard joystick driver for a platform */
 extern const char joy_stddrv[];
index bb571de3d9b7ecdc06c1b1af6fdb23ad84f0c958..cec2633ab8279dca8a38cef1273c7de3f42fe948 100644 (file)
@@ -52,9 +52,7 @@ typedef struct {
     /* Driver header */
     char                id[3];          /* Contains 0x6a, 0x6f, 0x79 ("joy") */
     unsigned char       version;        /* Interface version */
-
-    /* Bitmasks for the joystick states. See joystick.h for indices */
-    unsigned char       masks[8];
+    void*                               /* Library reference */
 
     /* Jump vectors. Note that these are not C callable */
     void*               install;        /* INSTALL routine */
@@ -85,6 +83,3 @@ void joy_clear_ptr (void);
 
 /* End of joy-kernel.h */
 #endif
-
-
-
index c30ca6265d2963a51a22ec45c6177f8e13d79d16..3629f322e9329532b5152f9964181cda44da9c44 100644 (file)
 #define TGI_COLOR_LIGHTBLUE     COLOR_LIGHTBLUE
 #define TGI_COLOR_WHITE         COLOR_WHITE
 
-/* No support for dynamically loadable drivers */
-#define DYN_DRV 0
-
+/* Masks for joy_read */
+#define JOY_UP_MASK             0x80
+#define JOY_DOWN_MASK           0x40
+#define JOY_LEFT_MASK           0x20
+#define JOY_RIGHT_MASK          0x10
+#define JOY_BTN_1_MASK          0x01
+#define JOY_BTN_2_MASK          0x02
 
+#define JOY_BTN_A_MASK          JOY_BTN_1_MASK
+#define JOY_BTN_B_MASK          JOY_BTN_2_MASK
 
-/* Expanding upon joystick.h */
-#define JOY_BTN_A_IDX           4
-#define JOY_BTN_B_IDX           5
+#define JOY_BTN_A(v)            ((v) & JOY_BTN_A_MASK)
+#define JOY_BTN_B(v)            ((v) & JOY_BTN_B_MASK)
 
-#define JOY_BTN_A(v)            ((v) & joy_masks[JOY_BTN_A_IDX])
-#define JOY_BTN_B(v)            ((v) & joy_masks[JOY_BTN_B_IDX])
+/* No support for dynamically loadable drivers */
+#define DYN_DRV 0
 
 
 
index 0b65cdbe4148ecf18d3fac7edfef3325ddc85c17..217a90779ac716b6c644b6f8105d4216b76e896d 100644 (file)
 #define COLOR_LIGHTBLUE         0x0E
 #define COLOR_GRAY3             0x0F
 
+/* Masks for joy_read */
+#define JOY_UP_MASK     0x10
+#define JOY_DOWN_MASK   0x20
+#define JOY_LEFT_MASK   0x40
+#define JOY_RIGHT_MASK  0x80
+#define JOY_BTN_1_MASK  0x01
+#define JOY_BTN_2_MASK  0x02
+#define JOY_BTN_3_MASK  0x04
+#define JOY_BTN_4_MASK  0x08
+
+#define JOY_BTN_A_MASK  JOY_BTN_1_MASK
+#define JOY_BTN_B_MASK  JOY_BTN_2_MASK
+#define JOY_SELECT_MASK JOY_BTN_3_MASK
+#define JOY_START_MASK  JOY_BTN_4_MASK
+
+#define JOY_BTN_A(v)    ((v) & JOY_BTN_A_MASK)
+#define JOY_BTN_B(v)    ((v) & JOY_BTN_B_MASK)
+#define JOY_SELECT(v)   ((v) & JOY_SELECT_MASK)
+#define JOY_START(v)    ((v) & JOY_START_MASK)
+
 /* Return codes of get_tv */
 #define TV_NTSC         0
 #define TV_PAL          1
 /* No support for dynamically loadable drivers */
 #define DYN_DRV         0
 
-/* Expanding upon joystick.h */
-#define JOY_BTN_A_IDX           4
-#define JOY_BTN_B_IDX           5
-#define JOY_SELECT_IDX          6
-#define JOY_START_IDX           7
-
-#define JOY_BTN_A(v)            ((v) & joy_masks[JOY_BTN_A_IDX])
-#define JOY_BTN_B(v)            ((v) & joy_masks[JOY_BTN_B_IDX])
-#define JOY_SELECT(v)           ((v) & joy_masks[JOY_SELECT_IDX])
-#define JOY_START(v)            ((v) & joy_masks[JOY_START_IDX])
-
 /* Define hardware */
 
 /* Picture Processing Unit */
index 12b596cf916112e4029b8c65075382c1c32945b7..7744d0148f63a5095f94f298870e012c969fb82f 100644 (file)
 #define TV_PAL                  1
 #define TV_OTHER                2
 
-/* No support for dynamically loadable drivers */
-#define DYN_DRV         0
+/* Masks for joy_read */
+#define JOY_UP_MASK             0x10
+#define JOY_DOWN_MASK           0x40
+#define JOY_LEFT_MASK           0x80
+#define JOY_RIGHT_MASK          0x20
+#define JOY_BTN_1_MASK          0x01
+#define JOY_BTN_2_MASK          0x02
+#define JOY_BTN_3_MASK          0x04
+#define JOY_BTN_4_MASK          0x08
+
+#define JOY_BTN_I_MASK          JOY_BTN_1_MASK
+#define JOY_BTN_II_MASK         JOY_BTN_2_MASK
+#define JOY_SELECT_MASK         JOY_BTN_3_MASK
+#define JOY_RUN_MASK            JOY_BTN_4_MASK
 
-/* Expanding upon joystick.h */
-#define JOY_BTN_I_IDX           4
-#define JOY_BTN_II_IDX          5
-#define JOY_SELECT_IDX          6
-#define JOY_RUN_IDX             7
+#define JOY_BTN_I(v)            ((v) & JOY_BTN_I_MASK)
+#define JOY_BTN_II(v)           ((v) & JOY_BTN_II_MASK)
+#define JOY_SELECT(v)           ((v) & JOY_SELECT_MASK)
+#define JOY_RUN(v)              ((v) & JOY_RUN_MASK)
 
-#define JOY_BTN_I(v)            ((v) & joy_masks[JOY_BTN_I_IDX])
-#define JOY_BTN_II(v)           ((v) & joy_masks[JOY_BTN_II_IDX])
-#define JOY_SELECT(v)           ((v) & joy_masks[JOY_SELECT_IDX])
-#define JOY_RUN(v)              ((v) & joy_masks[JOY_RUN_IDX])
+/* No support for dynamically loadable drivers */
+#define DYN_DRV                 0
 
 /* The addresses of the static drivers */
 extern void pce_stdjoy_joy[];   /* Referred to by joy_static_stddrv[] */
index 720e40a783bc6af3ab8761d86189fbcd31739873..e9659d52463911856c2023913e1997e41dd30623 100644 (file)
 #define COLOR_BLACK             0x00
 #define COLOR_WHITE             0x01
 
+/* Masks for joy_read */
+#define JOY_UP_MASK             0x01
+#define JOY_DOWN_MASK           0x02
+#define JOY_LEFT_MASK           0x04
+#define JOY_RIGHT_MASK          0x08
+#define JOY_BTN_1_MASK          0x10
+
 /* Define hardware */
 #include <_pia.h>
 #define PIA1    (*(struct __pia*)0xE810)
index c675de6d23cedea7eb2d4555d9843d10e6b676c6..c6ad9632d7368f0f02d2fe7267782aade83be940 100644 (file)
 
 
 
+/* Masks for joy_read */
+#define JOY_UP_MASK             0x01
+#define JOY_DOWN_MASK           0x02
+#define JOY_LEFT_MASK           0x04
+#define JOY_RIGHT_MASK          0x08
+#define JOY_BTN_1_MASK          0x10
+
+
+
 /* Define hardware */
 #include <_vic.h>
 #define VIC     (*(struct __vic*)0x9000)
index e4097e04319f2bc2651655b0483efe597af7a5f1..ed208325504c6f353209931ebff3f2db7db66d9f 100644 (file)
@@ -46,17 +46,6 @@ PREAD   :=      $FB1E   ; Read paddle in X, return AD conv. value in Y
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $10
-        .byte   $20
-        .byte   $04
-        .byte   $08
-        .byte   $40
-        .byte   $80
-        .byte   $00             ; Future expansion
-        .byte   $00             ; Future expansion
-
 ; Jump table
 
         .addr   INSTALL
@@ -119,7 +108,7 @@ READJOY:
         lda     BUTN0-1,x       ; Check button (1, 3)
         asl
         tya
-        ror                     ; FIRE DOWN !UP RIGHT !LEFT 0 0 0
+        ror                     ; BTN DOWN !UP RIGHT !LEFT 0 0 0
 
         ; Read secondary button
         tay
@@ -130,10 +119,10 @@ READJOY:
         lda     BUTN0-1,x       ; Check button (2, 0)
         asl
         tya
-        ror                     ; FIRE2 FIRE DOWN !UP RIGHT !LEFT 0 0
+        ror                     ; BTN2 BTN DOWN !UP RIGHT !LEFT 0 0
 
         ; Finalize
-        eor     #%00010100      ; FIRE2 FIRE DOWN UP RIGHT LEFT 0 0
+        eor     #%00010100      ; BTN2 BTN DOWN UP RIGHT LEFT 0 0
         ldx     #$00
         bit     $C080           ; Switch in LC bank 2 for R/O
         rts
index fc7aa55f4cf04c49d885cf0c550fd6e02f6b1947..0c8799e21bcf072140dd9fcc70a904c3c2aabb0d 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 not available
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
 ; Jump table.
 
         .addr   INSTALL
index 3483cc11aed1109414ed641550d7357fd9f77f8a..0b8b93b63d443a72c60ee85cf7f1ebfb0ab1d45f 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $01             ; JOY_UP
-        .byte   $02             ; JOY_DOWN
-        .byte   $04             ; JOY_LEFT
-        .byte   $08             ; JOY_RIGHT
-        .byte   $10             ; JOY_FIRE
-        .byte   $20             ; JOY_FIRE2
-        .byte   $00             ; Future expansion
-        .byte   $00             ; Future expansion
-
 ; Jump table.
 
         .addr   INSTALL
@@ -99,7 +88,7 @@ READJOY:
         lda     #0              ; Initialize return value
         cmp     TRIG0,y
         bne     @notrg
-        lda     #$10            ; JOY_FIRE
+        lda     #$10            ; JOY_BTN
 
 ; Read joystick
 
index 26d7c74d8be4b545de2a921673629a0bcdc50e74..637571c0461d2eece93190faf66b0be61c761f61 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $10                     ; JOY_UP
-        .byte   $08                     ; JOY_DOWN
-        .byte   $01                     ; JOY_LEFT
-        .byte   $02                     ; JOY_RIGHT
-        .byte   $20                     ; JOY_FIRE
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
 ; Jump table.
 
         .addr   INSTALL
index 6f65ce5eb4fef09198e9ca15072ffc89621a81ed..c9ae39a47734a271cb026a5af4d1ee3418fe6a54 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
 ; Jump table.
 
         .addr   INSTALL
index a2caead1a17228f9f4a6071b6e64e35fb25846de..943361da5ee526d6333aab406f16248aa409099e 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
 ; Jump table.
 
         .addr   INSTALL
index a798100a79283fbcd83efaa5ea0acb4f7145d858..10c936399563265f83d7268af333d14706e8171e 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
 ; Jump table.
 
         .addr   INSTALL
index 31850488c44dbb98ed7effbc905155ae5abd3d36..e916d887acf7488c15b98a1b2db52b41cb84e464 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
 ; Jump table.
 
         .addr   INSTALL
index 2932c77fdd34d06c3b174c941547e79c1eea0036..930ad6227138d2afab6151e30d7df33d6441ee7c 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
 ; Jump table.
 
         .addr   INSTALL
index 7133f9379a83203361dbe01048201e3b5503b681..0c2efc12d3b2999395da8a813b8374e3daea11f6 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
 ; Jump table.
 
         .addr   INSTALL
@@ -105,7 +94,7 @@ READ:   ldx     #$0F            ; Switch to the system bank
         lda     (cia2),y        ; Read joystick inputs
         sta     tmp1
 
-; Get the fire bits
+; Get the push button bits
 
         ldy     #CIA::PRA
         lda     (cia2),y
@@ -115,12 +104,12 @@ READ:   ldx     #$0F            ; Switch to the system bank
         cpx     #$00            ; Joystick 0?
         bne     @L1             ; Jump if no
 
-; Joystick 1, fire is in bit 6, direction in bit 0-3
+; Joystick 1, push button is in bit 6, direction in bit 0-3
 
         asl     a
         jmp     @L2
 
-; Joystick 2, fire is in bit 7, direction in bit 5-7
+; Joystick 2, push button is in bit 7, direction in bit 5-7
 
 @L1:    ldx     #$00            ; High byte of return value
         lsr     tmp1
@@ -128,9 +117,9 @@ READ:   ldx     #$0F            ; Switch to the system bank
         lsr     tmp1
         lsr     tmp1
 
-; Mask the relavant bits, get the fire bit
+; Mask the relavant bits, get the push button bit
 
-@L2:    asl     a               ; Fire bit into carry
+@L2:    asl     a               ; push button bit into carry
         lda     tmp1
         and     #$0F
         bcc     @L3
index 3f167464a1bdc1d3db5d250281b21cc1ff4f4a27..9a5afc42bb4a2e996ace680b1ffb136a004294b7 100644 (file)
 
                 .addr   $0000
 
-; Symbolic names for joystick masks (similar names like the defines in joystick.h, but not related to them)
-
-JOY_UP          =       $10
-JOY_DOWN        =       $04
-JOY_LEFT        =       $20
-JOY_RIGHT       =       $08
-JOY_FIRE        =       $01
-JOY_FIRE2       =       $02
-
-; Joystick state masks (8 values)
-
-                .byte   JOY_UP
-                .byte   JOY_DOWN
-                .byte   JOY_LEFT
-                .byte   JOY_RIGHT
-                .byte   JOY_FIRE
-                .byte   JOY_FIRE2
-                .byte   $00                     ; Future expansion
-                .byte   $00                     ; Future expansion
-
 ; Jump table.
 
                 .addr   INSTALL
@@ -60,6 +40,13 @@ JOY_FIRE2       =       $02
 
 JOY_COUNT       =       2                       ; Number of joysticks we support
 
+; Symbolic names for joystick masks (similar names like the defines in joystick.h, but not related to them)
+
+JOY_UP          =       $10
+JOY_DOWN        =       $04
+JOY_LEFT        =       $20
+JOY_RIGHT       =       $08
+
 ; ------------------------------------------------------------------------
 ; Code
 
@@ -129,7 +116,7 @@ convert:
 ; values were shifted to the right to be identical).
 ; Why are there two bits indicating a pressed trigger?
 ; According to the "Second book of programs for the Dick Smith Wizard"
-; (pg. 88ff), the left hand fire button gives the value of
+; (pg. 88ff), the left hand button gives the value of
 ; %00010001 and the right hand button gives %00100010
 ; Why two bits? Can there be cases that just one of those bits is set?
 ; Until these questions have been answered, we only use the lower two
index 8b18bae7a2099656e70c440f0cd19c5854c7a3b8..d10eb6f413a4a5e75a49506cfa8bb7cc0a86c3c0 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE_A
-        .byte   $20                     ; JOY_FIRE_B
-        .byte   $80                     ; JOY_SELECT
-        .byte   $40                     ; JOY_START
-
 ; Jump table.
 
         .addr   INSTALL
index 6afe4609296be4f69e302179068fdbc2de33afc2..2787cb59469feae3694c63af2ce5095a52e419b3 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte $01               ; JOY_UP
-        .byte $02               ; JOY_DOWN
-        .byte $04               ; JOY_LEFT
-        .byte $08               ; JOY_RIGHT
-        .byte $10               ; JOY_FIRE
-        .byte $00               ; Future expansion
-        .byte $00               ; Future expansion
-        .byte $00               ; Future expansion
-
 ; Jump table.
 
         .word INSTALL
index 2b1dcf884158f8d34870bacd7737e14137359096..0746709e9ba132385a4217455d081277a2ada353 100644 (file)
@@ -19,8 +19,6 @@
 .bss
 _joy_drv:       .res    2               ; Pointer to driver
 
-_joy_masks:     .res    .sizeof(JOY_HDR::MASKS)
-
 ; Jump table for the driver functions.
 .data
 joy_vectors:
@@ -65,38 +63,28 @@ _joy_install:
         lda     #>joy_libref
         sta     (ptr1),y
 
-; Copy the mask array
-
-        ldy     #JOY_HDR::MASKS + .sizeof(JOY_HDR::MASKS) - 1
-        ldx     #.sizeof(JOY_HDR::MASKS)-1
-@L1:    lda     (ptr1),y
-        sta     _joy_masks,x
-        dey
-        dex
-        bpl     @L1
-
 ; Copy the jump vectors
 
         ldy     #JOY_HDR::JUMPTAB
         ldx     #0
-@L2:    inx                             ; Skip the JMP opcode
+@L1:    inx                             ; Skip the JMP opcode
         jsr     copy                    ; Copy one byte
         jsr     copy                    ; Copy one byte
         cpy     #(JOY_HDR::JUMPTAB + .sizeof(JOY_HDR::JUMPTAB))
-        bne     @L2
+        bne     @L1
 
         jsr     joy_install             ; Call driver install routine
         tay                             ; Test error code
-        bne     @L3                     ; Bail out if install had errors
+        bne     @L2                     ; Bail out if install had errors
 
 ; Install the IRQ vector if the driver needs it. A/X contains the error code
 ; from joy_install, so don't use it.
 
         ldy     joy_irq+2               ; Check high byte of IRQ vector
-        beq     @L3                     ; Jump if vector invalid
+        beq     @L2                     ; Jump if vector invalid
         ldy     #$4C                    ; JMP opcode
         sty     joy_irq                 ; Activate IRQ routine
-@L3:    rts
+@L2:    rts
 
 ; Driver signature invalid
 
index 1146470726760a1a33ec5373b6b220e76169f419..2e91cc43b103cca206f58abb65c30babba972d0a 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-joy_mask:
-        .byte   $80                     ; JOY_UP
-        .byte   $40                     ; JOY_DOWN
-        .byte   $20                     ; JOY_LEFT
-        .byte   $10                     ; JOY_RIGHT
-        .byte   $01                     ; JOY_FIRE
-        .byte   $02                     ; JOY_FIRE1
-        .byte   $00                     ;
-        .byte   $00                     ;
-
 ; Jump table.
 
         .addr   INSTALL
index b5e653c162e01ee39c05c0265a950d063efad395..3032e9330083bc5f10b43fc0f9781b0ddff5eac0 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $10                     ; JOY_UP
-        .byte   $20                     ; JOY_DOWN
-        .byte   $40                     ; JOY_LEFT
-        .byte   $80                     ; JOY_RIGHT
-        .byte   $01                     ; JOY_FIRE      (A)
-        .byte   $02                     ; JOY_FIRE2     (B)
-        .byte   $04                     ;               (Select)
-        .byte   $08                     ;               (Start)
-
 ; Jump table.
 
         .addr   INSTALL
index 746929dd258ed5b8e6109b8d18f9775843651a1a..ab25134ddfe4eb3fa6ce3738e35f2d408906a9f5 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $10                     ; JOY_UP
-        .byte   $40                     ; JOY_DOWN
-        .byte   $80                     ; JOY_LEFT
-        .byte   $20                     ; JOY_RIGHT
-        .byte   $01                     ; JOY_FIRE_A
-        .byte   $02                     ; JOY_FIRE_B
-        .byte   $04                     ; JOY_SELECT
-        .byte   $08                     ; JOY_RUN
-
 ; Jump table.
 
         .addr   INSTALL
index 229055fcb75d08ac28e4a97556ad90b5f2e09cce..3bb36835576dd9880d5fe9602a7a3b9b902c8aba 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
 ; Jump table.
 
         .addr   INSTALL
index 5847c2b094f44773a4a991f34ceacbc95c66ef0f..29c6de627c48db49ff0d157c0fa2e2173f8916a0 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $01             ; JOY_UP
-        .byte   $02             ; JOY_DOWN
-        .byte   $04             ; JOY_LEFT
-        .byte   $08             ; JOY_RIGHT
-        .byte   $10             ; JOY_FIRE
-        .byte   $00             ; JOY_FIRE2 unavailable
-        .byte   $00             ; Future expansion
-        .byte   $00             ; Future expansion
-
 ; Jump table.
 
         .addr   INSTALL
index 4a51328877e7277e20029723bfb0c58ca42b441d..d998b2699057f832e3fabb9fd15b88488e54f37f 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $80                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
 ; Jump table.
 
         .addr   INSTALL
@@ -107,7 +96,7 @@ READ:   ldy     #%11111011      ; Load index for joystick #1
         cli
         eor     #%11111111
 
-; The fire buttons are in bits 6 and 7.  Both of them cannot be %1 together.
+; The push buttons are in bits 6 and 7.  Both of them cannot be %1 together.
 ; Therefore, bit 6 can be merged with bit 7.
 
         clc
index cdd4c274f8dfd64b4ae468b0e377186a3000effd..07c9794433fe6c1563f73e1dd1a4727ecf09ad56 100644 (file)
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
 ; Jump table.
 
         .addr   INSTALL
@@ -152,4 +141,3 @@ joy3:   lda     #$00            ; via port B read/write
 
         ldx     #0
         rts
-
index fc751ebdcfa6d7f1b9e557b8e5623ea92ecb551f..fdd83bb4e2944f9de98c6c12dd61f7cf9a7885be 100644 (file)
@@ -58,21 +58,19 @@ int main (void)
 #if defined(__ATARI5200__) || defined(__CREATIVISION__)
             cprintf ("%1d:%-3s%-3s%-3s%-3s%-3s%-3s",
                      i,
-                     (j & joy_masks[JOY_UP])?    " U " : "   ",
-                     (j & joy_masks[JOY_DOWN])?  " D " : "   ",
-                     (j & joy_masks[JOY_LEFT])?  " L " : "   ",
-                     (j & joy_masks[JOY_RIGHT])? " R " : "   ",
-                     (j & joy_masks[JOY_FIRE])?  " 1 " : "   ",
-                     (j & joy_masks[JOY_FIRE2])? " 2 " : "   ");
+                     JOY_UP(j)?    " U " : " - ",
+                     JOY_DOWN(j)?  " D " : " - ",
+                     JOY_LEFT(j)?  " L " : " - ",
+                     JOY_RIGHT(j)? " R " : " - ",
+                     JOY_BTN_1(j)? " 1 " : " - ");
 #else
             cprintf ("%2d: %-6s%-6s%-6s%-6s%-6s%-6s",
                      i,
-                     (j & joy_masks[JOY_UP])?    "  up  " : " ---- ",
-                     (j & joy_masks[JOY_DOWN])?  " down " : " ---- ",
-                     (j & joy_masks[JOY_LEFT])?  " left " : " ---- ",
-                     (j & joy_masks[JOY_RIGHT])? "right " : " ---- ",
-                     (j & joy_masks[JOY_FIRE])?  " fire " : " ---- ",
-                     (j & joy_masks[JOY_FIRE2])? "fire2 " : " ---- ");
+                     JOY_UP(j)?    "  up  " : " ---- ",
+                     JOY_DOWN(j)?  " down " : " ---- ",
+                     JOY_LEFT(j)?  " left " : " ---- ",
+                     JOY_RIGHT(j)? "right " : " ---- ",
+                     JOY_BTN_1(j)? "button" : " ---- ");
 #endif
         }
     }
index 00ae3c15770a2b621d5f79d6b486a92778bc67fa..ed3f86240446984b2250c54d2ae6a4337d82f440 100644 (file)
@@ -1,3 +1,4 @@
+#include <pce.h>
 #include <conio.h>
 #include <time.h>
 #include <joystick.h>
@@ -97,14 +98,14 @@ void main(void)
                         j = joy_read (i);
                         cprintf ("pad %d: %02x %-6s%-6s%-6s%-6s%-6s%-6s%-6s%-6s",
                                 i, j,
-                                (j & joy_masks[JOY_UP])?    "  up  " : " ---- ",
-                                (j & joy_masks[JOY_DOWN])?  " down " : " ---- ",
-                                (j & joy_masks[JOY_LEFT])?  " left " : " ---- ",
-                                (j & joy_masks[JOY_RIGHT])? "right " : " ---- ",
-                                (j & joy_masks[JOY_FIRE])?  " fire " : " ---- ",
-                                (j & joy_masks[JOY_FIRE2])? "fire2 " : " ---- ",
-                                (j & joy_masks[JOY_SELECT])? "select" : " ---- ",
-                                (j & joy_masks[JOY_RUN])?   " run  " : " ---- ");
+                                JOY_UP(j)?     "  up  " : " ---- ",
+                                JOY_DOWN(j)?   " down " : " ---- ",
+                                JOY_LEFT(j)?   " left " : " ---- ",
+                                JOY_RIGHT(j)?  "right " : " ---- ",
+                                JOY_BTN_I(j)?  "btn I " : " ---- ",
+                                JOY_BTN_II(j)? "btn II" : " ---- ",
+                                JOY_SELECT(j)? "select" : " ---- ",
+                                JOY_RUN(j)?    " run  " : " ---- ");
                 }
 
                 gotoxy(xsize - 10, 3);