]> git.sur5r.net Git - cc65/commitdiff
add joystick driver -- trigger buttons are not queried yet
authorChristian Groessler <chris@groessler.org>
Mon, 12 May 2014 01:03:44 +0000 (03:03 +0200)
committerChristian Groessler <chris@groessler.org>
Mon, 12 May 2014 01:03:44 +0000 (03:03 +0200)
libsrc/atari5200/joy/atr5200std.s [new file with mode: 0644]
libsrc/atari5200/joy_stat_stddrv.s [new file with mode: 0644]
libsrc/atari5200/libref.s [new file with mode: 0644]

diff --git a/libsrc/atari5200/joy/atr5200std.s b/libsrc/atari5200/joy/atr5200std.s
new file mode 100644 (file)
index 0000000..2a50698
--- /dev/null
@@ -0,0 +1,130 @@
+;
+; Standard joystick driver for the Atari 5200.
+;
+; Christian Groessler, 2014-05-12
+;
+
+        .include        "zeropage.inc"
+
+        .include        "joy-kernel.inc"
+        .include        "joy-error.inc"
+        .include        "atari5200.inc"
+
+
+; ------------------------------------------------------------------------
+; Header. Includes jump table
+
+.segment        "JUMPTABLE"
+
+; Driver signature
+
+        .byte   $6A, $6F, $79           ; "joy"
+        .byte   JOY_API_VERSION         ; Driver API version number
+
+; Library reference
+
+        .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
+        .addr   UNINSTALL
+        .addr   COUNT
+        .addr   READJOY
+        .addr   0                       ; IRQ entry not used
+
+; ------------------------------------------------------------------------
+; Constants
+
+JOY_COUNT       = 4             ; Number of joysticks we support
+
+
+.code
+
+; ------------------------------------------------------------------------
+; INSTALL routine. Is called after the driver is loaded into memory. If
+; possible, check if the hardware is present and determine the amount of
+; memory available.
+; Must return an JOY_ERR_xx code in a/x.
+;
+
+INSTALL:
+        lda     #JOY_ERR_OK
+        ldx     #0
+;       rts                     ; Run into UNINSTALL instead
+
+; ------------------------------------------------------------------------
+; UNINSTALL routine. Is called before the driver is removed from memory.
+; Can do cleanup or whatever. Must not return anything.
+;
+
+UNINSTALL:
+        rts
+
+
+; ------------------------------------------------------------------------
+; COUNT: Return the total number of available joysticks in a/x.
+;
+
+COUNT:
+        lda     #JOY_COUNT
+        ldx     #0
+        rts
+
+; ------------------------------------------------------------------------
+; READ: Read a particular joystick passed in A.
+;
+
+CENTER =       228 / 2
+SENSIVITY      = 16
+
+READJOY:
+        and     #3              ; fix joystick number
+       asl     a
+        tax                     ; Joystick number * 2 (0-6) into X, index into ZP shadow registers
+       lda     #0              ; Initialize return value
+
+; Read joystick
+
+       ldy     PADDL0,x        ; get horizontal position
+       cpy     #CENTER-SENSIVITY
+       bcs     @chkleft
+
+       ora     #4              ; JOY_LEFT
+       bne     @updown
+
+@chkleft:
+       cpy     #CENTER+SENSIVITY
+       bcc     @updown
+
+       ora     #8              ; JOY_RIGHT
+
+@updown:ldy    PADDL0+1,x      ; get vertical position
+       cpy     #CENTER-SENSIVITY
+       bcs     @chkdown
+
+       ora     #1              ; JOY_UP
+       bne     @buttons
+
+@chkdown:
+       cpy     #CENTER+SENSIVITY
+       bcc     @buttons
+
+       ora     #2              ; JOY_DOWN
+
+@buttons:
+       ; @@@ TODO: BOTTON STATE
+
+       rts
+
diff --git a/libsrc/atari5200/joy_stat_stddrv.s b/libsrc/atari5200/joy_stat_stddrv.s
new file mode 100644 (file)
index 0000000..9924eab
--- /dev/null
@@ -0,0 +1,12 @@
+;
+; Address of the static standard joystick driver
+;
+; Christian Groessler, 2014-05-12
+;
+; const void joy_static_stddrv[];
+;
+
+        .export _joy_static_stddrv
+        .import _atr5200std_joy
+
+_joy_static_stddrv := _atr5200std_joy
diff --git a/libsrc/atari5200/libref.s b/libsrc/atari5200/libref.s
new file mode 100644 (file)
index 0000000..8a5fbe4
--- /dev/null
@@ -0,0 +1,8 @@
+;
+; Christian Groessler, 2014-05-12
+;
+
+        .export         joy_libref
+        .import         _exit
+
+joy_libref      := _exit