]> git.sur5r.net Git - cc65/blobdiff - libsrc/atari/atari-stdjoy.s
The spans do now contain the size of a span, no longer the end offset.
[cc65] / libsrc / atari / atari-stdjoy.s
index 597159ec40d1402d6074cfb6f010bd6e62a63a30..53eff79fefa5975d9cd9f0f8c0eb0178c6a5654b 100644 (file)
@@ -1,51 +1,53 @@
 ;
-; Standard joystick driver for the Atari
+; Standard joystick driver for the Atari. May be used multiple times when linked
+; to the statically application.
 ;
 ; Ullrich von Bassewitz, 2002-12-21
 ; Using the readjoy code from Christian Groessler
 ;
 
-       .include        "zeropage.inc"
+       .include        "zeropage.inc"
 
-       .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "atari.inc"
+       .include        "joy-kernel.inc"
+       .include        "joy-error.inc"
+       .include        "atari.inc"
 
-        .macpack        generic
+       .macpack        generic
 
 
 ; ------------------------------------------------------------------------
 ; Header. Includes jump table
 
-.segment        "JUMPTABLE"
+.segment       "JUMPTABLE"
 
 ; Driver signature
 
-        .byte   $6A, $6F, $79          ; "joy"
-        .byte   $00                     ; Driver API version number
+       .byte   $6A, $6F, $79           ; "joy"
+       .byte   JOY_API_VERSION         ; Driver API version number
 
 ; 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
+       .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.
 
-        .word   INSTALL
-        .word   DEINSTALL
-        .word   COUNT
-        .word   READJOY
+       .addr   INSTALL
+       .addr   UNINSTALL
+       .addr   COUNT
+       .addr   READJOY
+       .addr   0                       ; IRQ entry not used
 
 ; ------------------------------------------------------------------------
 ; Constants
 
-JOY_COUNT       = 4             ; Number of joysticks we support
+JOY_COUNT      = 4             ; Number of joysticks we support
 
 
 ; ------------------------------------------------------------------------
@@ -62,18 +64,17 @@ JOY_COUNT       = 4             ; Number of joysticks we support
 ;
 
 INSTALL:
-        lda     #<JOY_ERR_OK
-        ldx     #>JOY_ERR_OK
-
-;      rts                     ; Run into DEINSTALL instead
+       lda     #JOY_ERR_OK
+       ldx     #0
+;      rts                     ; Run into UNINSTALL instead
 
 ; ------------------------------------------------------------------------
-; DEINSTALL routine. Is called before the driver is removed from memory.
+; UNINSTALL routine. Is called before the driver is removed from memory.
 ; Can do cleanup or whatever. Must not return anything.
 ;
 
-DEINSTALL:
-        rts
+UNINSTALL:
+       rts
 
 
 ; ------------------------------------------------------------------------
@@ -81,9 +82,14 @@ DEINSTALL:
 ;
 
 COUNT:
-        lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
-        rts
+       lda     #JOY_COUNT
+       ldx     $fcd8
+       cpx     #$a2
+       beq     _400800
+       lsr     a               ; XL and newer machines only have 2 ports
+_400800:
+       ldx     #0
+       rts
 
 ; ------------------------------------------------------------------------
 ; READ: Read a particular joystick passed in A.
@@ -103,5 +109,4 @@ READJOY:
        ora     STICK0,x        ; add position information
        eor     #$1F
        ldx     #0              ; fix X
-       rts
-
+       rts