]> git.sur5r.net Git - cc65/commitdiff
standard joystick driver for GEOS
authorizydorst <izydorst@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 25 Dec 2002 19:43:34 +0000 (19:43 +0000)
committerizydorst <izydorst@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 25 Dec 2002 19:43:34 +0000 (19:43 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1847 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/Makefile
libsrc/geos/devel/Makefile
libsrc/geos/devel/geos-stdjoy.s [new file with mode: 0644]

index d450a3fd4f95514d9944ff399d06be8a247edcfa..062062d8f532bcdc063352c314e42ce8d860c818 100644 (file)
@@ -207,6 +207,7 @@ geoslib:
            done \
        done
        cp geos/devel/*.emd .
+       cp geos/devel/*.joy .
 
 #-----------------------------------------------------------------------------
 # CBM PET machines
index 51d21eaa93f1ba86ad514a96570ea8e4c610adfb..df2cd54f00c4ac1b094cbc8c11f8255b77bbf69a 100644 (file)
@@ -23,7 +23,7 @@ S_OBJS        = crt0.o oserror.o oserrlist.o randomize.o fio_module.o
 
 EMDS = geos-vdc.emd
 
-JOYS =
+JOYS = geos-stdjoy.joy
 
 TGIS =
 
diff --git a/libsrc/geos/devel/geos-stdjoy.s b/libsrc/geos/devel/geos-stdjoy.s
new file mode 100644 (file)
index 0000000..b161495
--- /dev/null
@@ -0,0 +1,124 @@
+;
+; Standard joystick driver for the C64
+;
+; Ullrich von Bassewitz, 2002-12-20
+;
+
+       .include        "zeropage.inc"
+
+       .include        "joy-kernel.inc"
+        .include        "joy-error.inc"
+       .include        "../inc/geossym.inc"
+
+        .macpack        generic
+
+
+; ------------------------------------------------------------------------
+; Header. Includes jump table
+
+.segment        "JUMPTABLE"
+
+; Driver signature
+
+        .byte   $6A, $6F, $79          ; "joy"
+        .byte   $00                     ; 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
+
+; Jump table.
+
+        .word   INSTALL
+        .word   DEINSTALL
+        .word   COUNT
+        .word   READ
+
+; ------------------------------------------------------------------------
+; Constants
+
+JOY_COUNT       = 2             ; 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     #<JOY_ERR_OK
+        ldx     #>JOY_ERR_OK
+
+;      rts                     ; Run into DEINSTALL instead
+
+; ------------------------------------------------------------------------
+; DEINSTALL routine. Is called before the driver is removed from memory.
+; Can do cleanup or whatever. Must not return anything.
+;
+
+DEINSTALL:
+        rts
+
+
+; ------------------------------------------------------------------------
+; COUNT: Return the total number of available joysticks in a/x.
+;
+
+COUNT:
+        lda     #<JOY_COUNT
+        ldx     #>JOY_COUNT
+        rts
+
+; ------------------------------------------------------------------------
+; READ: Read a particular joystick passed in A.
+;
+
+READ:  php
+       sei                     ; disable IRQ
+       lda     $01
+       pha
+       lda     #$35
+       sta     $01             ; enable I/O
+
+       tax                     ; Joystick number into X
+       bne     joy2
+
+; Read joystick 1
+
+joy1:  
+       lda     #$7F
+       sta     cia1base
+       lda     cia1base+1
+back:  tax
+       pla
+       sta     $01
+       plp
+       txa
+       and     #$1F
+       eor     #$1F
+       ldx     #0
+       rts
+
+; Read joystick 2
+
+joy2:  lda     #$E0
+       ldy     #$FF
+       sta     cia1base+2
+       lda     cia1base+1
+       sty     cia1base+2
+       jmp     back