]> git.sur5r.net Git - cc65/commitdiff
New joystick driver contributed by Stefan Haubenthal
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 2 Feb 2004 12:23:45 +0000 (12:23 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 2 Feb 2004 12:23:45 +0000 (12:23 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@2878 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/c64/Makefile
libsrc/c64/c64-numpad.s [new file with mode: 0644]

index 57579c685e99eaa495f90b3f5150975b7756572a..04e52681c4151ded6215bf4808517752ad53f95f 100644 (file)
@@ -55,7 +55,7 @@ OBJS =        _scrsize.o              \
 
 EMDS = c64-georam.emd c64-ram.emd c64-ramcart.emd c64-reu.emd c64-vdc.emd
 
-JOYS = c64-hitjoy.joy c64-ptvjoy.joy c64-stdjoy.joy
+JOYS = c64-hitjoy.joy c64-numpad.joy c64-ptvjoy.joy c64-stdjoy.joy
 
 SERS = c64-swlink.ser
 
diff --git a/libsrc/c64/c64-numpad.s b/libsrc/c64/c64-numpad.s
new file mode 100644 (file)
index 0000000..9d8df25
--- /dev/null
@@ -0,0 +1,115 @@
+;
+; Joystick driver using C128 number pad in 64 mode.
+; May be used multiple times when linked to the statically application.
+;
+; Stefan Haubenthal, 2004-01-26
+; Based on Ullrich von Bassewitz, 2002-12-20
+;
+
+       .include        "zeropage.inc"
+
+       .include        "joy-kernel.inc"
+       .include        "joy-error.inc"
+       .include        "c64.inc"
+
+       .macpack        generic
+
+
+; ------------------------------------------------------------------------
+; Header. Includes jump table
+
+.segment       "JUMPTABLE"
+
+; Driver signature
+
+       .byte   $6A, $6F, $79           ; "joy"
+       .byte   JOY_API_VERSION         ; Driver API version number
+
+; Button state masks (8 values)
+
+       .byte   $02                     ; JOY_UP        "8"
+       .byte   $10                     ; JOY_DOWN      "2"
+       .byte   $20                     ; JOY_LEFT      "4"
+       .byte   $08                     ; JOY_RIGHT     "6"
+       .byte   $04                     ; JOY_FIRE      "5" ENTER
+       .byte   $00                     ; Future expansion
+       .byte   $00                     ; Future expansion
+       .byte   $00                     ; Future expansion
+
+; Jump table.
+
+       .word   INSTALL
+       .word   UNINSTALL
+       .word   COUNT
+       .word   READ
+
+; ------------------------------------------------------------------------
+; Constants
+
+JOY_COUNT      = 1             ; Number of joysticks we support
+
+
+; ------------------------------------------------------------------------
+; Data.
+
+
+.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     VIC_CLK_128
+       cmp     #$FF
+       bne     @C128
+       lda     #JOY_ERR_NO_DEVICE
+       .byte   $2C
+@C128: 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.
+;
+
+READ:  tax                     ; Clear high byte
+       lda     #$FD
+       ldy     #$FE
+       sei
+       sta     VIC_KBD_128
+       lda     CIA1_PRB
+       and     #%00110000
+       eor     #%00110000
+       lsr
+       lsr
+       sty     VIC_KBD_128
+       eor     CIA1_PRB
+       iny
+       sty     VIC_KBD_128     ; Reset to $FF
+       cli
+       and     #%11111110
+       eor     #%11111110
+       rts
+