]> git.sur5r.net Git - cc65/commitdiff
New joystick API
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 20 Dec 2002 21:41:40 +0000 (21:41 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 20 Dec 2002 21:41:40 +0000 (21:41 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1800 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/Makefile
libsrc/c64/.cvsignore
libsrc/c64/Makefile
libsrc/c64/c64-stdjoy.s [new file with mode: 0644]
libsrc/c64/readjoy.s [deleted file]
libsrc/joystick/joy-kernel.s

index d234fe5120d0d2df88c5270b939c46c30a395ac3..883f413085ef2ac0ccf6a21209d1f0c0e742730e 100644 (file)
@@ -52,7 +52,7 @@ apple2lib:
 # Atari
 
 atarilib:
-       for i in atari common runtime conio dbg em tgi; do \
+       for i in atari common runtime conio dbg em joystick tgi; do \
            AS=$(AS) \
            CC=$(CC) \
            LD=$(LD) \
@@ -67,7 +67,7 @@ atarilib:
 # Oric Atmos
 
 atmoslib:
-       for i in atmos common runtime em tgi; do \
+       for i in atmos common runtime em joystick tgi; do \
            AS=$(AS) \
            CC=$(CC) \
            LD=$(LD) \
@@ -82,7 +82,7 @@ atmoslib:
 # Vic20
 
 vic20lib:
-       for i in vic20 cbm common runtime conio dbg em tgi; do \
+       for i in vic20 cbm common runtime conio dbg em joystick tgi; do \
            AS=$(AS) \
            CC=$(CC) \
            LD=$(LD) \
@@ -97,7 +97,7 @@ vic20lib:
 # C16, C116
 
 c16lib:
-       for i in c16 cbm common runtime conio dbg em tgi; do \
+       for i in c16 cbm common runtime conio dbg em joystick tgi; do \
            AS=$(AS) \
            CC=$(CC) \
            LD=$(LD) \
@@ -112,7 +112,7 @@ c16lib:
 # C64
 
 c64lib:
-       for i in c64 cbm common runtime conio dbg em tgi; do \
+       for i in c64 cbm common runtime conio dbg em joystick tgi; do \
            AS=$(AS) \
            CC=$(CC) \
            LD=$(LD) \
@@ -122,14 +122,15 @@ c64lib:
            $(AR) a c64.lib $$i/*.o;\
        done
        mv c64/crt0.o c64.o
-       cp c64/c64-320-200-2.tgi c64-hi.tgi
        cp c64/*.emd .
+       cp c64/*.joy .
+       cp c64/c64-320-200-2.tgi c64-hi.tgi
 
 #-----------------------------------------------------------------------------
 # C128
 
 c128lib:
-       for i in c128 cbm common runtime conio dbg em tgi; do \
+       for i in c128 cbm common runtime conio dbg em joystick tgi; do \
            AS=$(AS) \
            CC=$(CC) \
            LD=$(LD) \
@@ -145,7 +146,7 @@ c128lib:
 # Commdore P500 / CBM 5x0
 
 cbm510lib:
-       for i in cbm510 cbm common runtime conio dbg em tgi; do \
+       for i in cbm510 cbm common runtime conio dbg em joystick tgi; do \
            CC=$(CC) \
            AS=$(AS) \
            LD=$(LD) \
@@ -220,7 +221,7 @@ petlib:
 # Commodore Plus/4
 
 plus4lib:
-       for i in plus4 cbm common runtime conio dbg em tgi; do \
+       for i in plus4 cbm common runtime conio dbg em joystick tgi; do \
            CC=$(CC) \
            AS=$(AS) \
            LD=$(LD) \
index b3753bbb6332d69f7bcc6a0292fb5f4c61c4d0de..58093ab1b4489dd35aabf76284409675a175acf2 100644 (file)
@@ -1,2 +1,3 @@
 *.emd
+*.joy
 *.tgi
index 768d84efc59d942ea4c635cae184fa6778579847..df57bb672319cbbaf1413a01c374da6f69c7f95f 100644 (file)
@@ -18,6 +18,9 @@
 %.emd: %.o ../runtime/zeropage.o
        @$(LD) -t module -o $@ $^
 
+%.joy: %.o ../runtime/zeropage.o
+       @$(LD) -t module -o $@ $^
+
 %.tgi: %.o ../runtime/zeropage.o
        @$(LD) -t module -o $@ $^
 
@@ -37,7 +40,6 @@ OBJS =        _scrsize.o              \
         kernal.o                \
                mouse.o                 \
         randomize.o             \
-               readjoy.o               \
         revers.o                \
                rs232.o                 \
         tgi_mode_table.o
@@ -45,18 +47,20 @@ OBJS =      _scrsize.o              \
 #--------------------------------------------------------------------------
 # Drivers
 
-TGIS = c64-320-200-2.tgi
+EMDS = c64-georam.emd c64-ram.emd c64-reu.emd c64-vdc.emd
+
+JOYS = c64-stdjoy.joy
 
-EMDS = c64-georam.emd c64-ram.emd c64-reu.emd c64-vdc.emd
+TGIS = c64-320-200-2.tgi
 
 #--------------------------------------------------------------------------
 # Targets
 
-all:   $(OBJS) $(EMDS) $(TGIS)
+all:   $(OBJS) $(EMDS) $(JOYS) $(TGIS)
 
 ../runtime/zeropage.o:
        $(MAKE) -C $(dir $@) $(notdir $@)
 
 clean:
-       @rm -f $(OBJS) $(EMDS:.emd=.o) $(TGIS:.tgi=.o)
+       @rm -f $(OBJS) $(EMDS:.emd=.o) $(JOYS:.joy=.o) $(TGIS:.tgi=.o)
 
diff --git a/libsrc/c64/c64-stdjoy.s b/libsrc/c64/c64-stdjoy.s
new file mode 100644 (file)
index 0000000..7ff84cc
--- /dev/null
@@ -0,0 +1,119 @@
+;
+; Standard joystick driver for the C64
+;
+; 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   $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:   tax                    ; Joystick number into X
+       bne     joy2
+
+; Read joystick 1
+
+joy1:  lda     #$7F
+       sei
+       sta     CIA1_PRA
+       lda     CIA1_PRB
+       cli
+       and     #$1F
+       eor     #$1F
+       rts
+
+; Read joystick 2
+
+joy2:  ldx     #0
+       lda     #$E0
+       ldy     #$FF
+       sei
+       sta     CIA1_DDRA
+       lda     CIA1_PRA
+       sty     CIA1_DDRA
+       cli
+       and     #$1F
+       eor     #$1F
+       rts
+
+
diff --git a/libsrc/c64/readjoy.s b/libsrc/c64/readjoy.s
deleted file mode 100644 (file)
index e5bb2f1..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-;
-; Ullrich von Bassewitz, 23.09.1998
-;
-; unsigned readjoy (unsigned char joy);
-;
-
-       .export         _readjoy
-
-       .include        "c64.inc"
-
-
-.proc  _readjoy
-
-       tax                     ; Joystick number into X
-       bne     joy2
-
-; Read joystick 1
-
-joy1:  lda     #$7F
-       sei
-       sta     CIA1_PRA
-       lda     CIA1_PRB
-       cli
-       and     #$1F
-       eor     #$1F
-       rts
-
-; Read joystick 2
-
-joy2:  ldx     #0
-       lda     #$E0
-       ldy     #$FF
-       sta     CIA1_DDRA
-       lda     CIA1_PRA
-       sty     CIA1_DDRA
-       and     #$1F
-       eor     #$1F
-       rts
-
-.endproc
-
index 9005d930bf13851c89747dc4628a91b9e735fe61..61d35ce2bcce813b2a1e9891dd8b2b4829835a6f 100644 (file)
@@ -4,7 +4,7 @@
 ; Common functions of the joystick API.
 ;
 
-        .export         _joy_install, _joy_deinstall
+        .export         _joy_install, _joy_deinstall, _joy_masks
 
         .importzp       ptr1
 
@@ -58,7 +58,7 @@ _joy_install:
 ; Copy the mask array
 
         ldy     #JOY_MASKS + JOY_MASK_COUNT - 1
-        ldx     #JOY_MASK_COUNT
+        ldx     #JOY_MASK_COUNT-1
 @L1:    lda     (ptr1),y
         sta     _joy_masks,x
         dey