]> git.sur5r.net Git - cc65/blobdiff - libsrc/plus4/joy/plus4-stdjoy.s
Removed IRQ support from joystick drivers.
[cc65] / libsrc / plus4 / joy / plus4-stdjoy.s
index bdba131fb49ef0dec24fe89567a4a9a2a0ec1ee7..e8e85fedcfb89fdb5f98d5b14c21165e8987f255 100644 (file)
@@ -1,39 +1,35 @@
 ;
-; Standard joystick driver for the Plus/4. May be used multiple times when linked
-; to the statically application.
+; Standard joystick driver for the Plus/4 and C16.
+; May be used multiple times when linked statically to an application.
 ;
-; Ullrich von Bassewitz, 2002-12-21
+; 2002-12-21, Ullrich von Bassewitz
+; 2016-06-18, Greg King
 ;
 
-       .include        "zeropage.inc"
-
-       .include        "joy-kernel.inc"
+        .include        "joy-kernel.inc"
         .include        "joy-error.inc"
         .include        "plus4.inc"
 
-        .macpack        generic
+        .macpack        module
 
 
 ; ------------------------------------------------------------------------
 ; Header. Includes jump table
 
-.segment        "JUMPTABLE"
+        .if .xmatch ("MODULE_LABEL", .string(MODULE_LABEL))
+        module_header   _plus4_stdjoy_joy
+        .else
+        module_header   MODULE_LABEL
+        .endif
 
 ; Driver signature
 
-        .byte   $6A, $6F, $79          ; "joy"
-        .byte   JOY_API_VERSION                ; Driver API version number
+        .byte   $6A, $6F, $79           ; ASCII "joy"
+        .byte   JOY_API_VERSION         ; Driver API version number
 
-; Button state masks (8 values)
+; Library reference
 
-        .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
+        .addr   $0000
 
 ; Jump table.
 
@@ -41,7 +37,6 @@
         .addr   UNINSTALL
         .addr   COUNT
         .addr   READ
-        .addr   0                       ; IRQ entry unused
 
 ; ------------------------------------------------------------------------
 ; Constants
@@ -65,7 +60,7 @@ JOY_COUNT       = 2             ; Number of joysticks we support
 INSTALL:
         lda     #<JOY_ERR_OK
         ldx     #>JOY_ERR_OK
-;      rts                     ; Run into UNINSTALL instead
+;       rts                     ; Run into UNINSTALL instead
 
 ; ------------------------------------------------------------------------
 ; UNINSTALL routine. Is called before the driver is removed from memory.
@@ -89,16 +84,20 @@ COUNT:
 ; READ: Read a particular joystick passed in A.
 ;
 
-READ:  ldy     #$FA            ; Load index for joystick #1
-       tax                     ; Test joystick number
-               beq     @L1
-       ldy     #$FB            ; Load index for joystick #2
+READ:   ldy     #%11111011      ; Load index for joystick #1
+        tax                     ; Test joystick number
+        beq     @L1
+        ldy     #%11111101      ; Load index for joystick #2
+        ldx     #>$0000         ; (Return unsigned int)
 @L1:    sei
-       sty     TED_KBD
-       lda     TED_KBD
-       cli
-       ldx     #$00            ; Clear high byte
-       and     #$1F
-       eor     #$1F
-       rts
+        sty     TED_KBD         ; Read a joystick ...
+        lda     TED_KBD         ; ... and some keys -- it's unavoidable
+        cli
+        eor     #%11111111
+
+; 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
+        adc     #%01000000
+        rts