]> git.sur5r.net Git - cc65/commitdiff
Fixes for the pet-ptvjoy driver and a new standard joystick driver by Marco
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 28 Feb 2010 09:56:51 +0000 (09:56 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 28 Feb 2010 09:56:51 +0000 (09:56 +0000)
van den Heuvel. Cleanup and integration by me.

git-svn-id: svn://svn.cc65.org/cc65/trunk@4604 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/pet/Makefile
libsrc/pet/joy_stddrv.s
libsrc/pet/pet-ptvjoy.s
libsrc/pet/pet-stdjoy.s [new file with mode: 0644]

index b44c383b0922b89fd2bc888f24486e3b22a945a6..3edec0e02509ec7d2f0cdb37cd46158b96968e95 100644 (file)
@@ -71,7 +71,7 @@ OBJS =        _scrsize.o      \
 
 EMDS =
 
-JOYS = pet-ptvjoy.joy
+JOYS = pet-ptvjoy.joy pet-stdjoy.joy
 
 TGIS =
 
index 8ad623005c2a2bbabde69fb64643e462b72cb2b7..617d374cf6d73f0f068feb4103aed943909db238 100644 (file)
@@ -10,5 +10,5 @@
 
 .rodata
 
-_joy_stddrv:   .asciiz "pet-ptvjoy.joy"
+_joy_stddrv:   .asciiz "pet-stdjoy.joy"
 
index ff39405f5c66a55c7852b23a71076463b4a32390..85d2097ce9e1b1a3f5844bf07d7ab49d36f57b18 100644 (file)
@@ -98,6 +98,7 @@ joy1: lda     #$80            ; via port A read/write
 
        lda     VIA_PRA         ; via port A read/write
        and     #$1f            ; get bit 4-0 (PA4-PA0)
+       eor     #$1f
        rts
 
 ; Read joystick 2
@@ -113,7 +114,7 @@ joy2:       lda     #$00            ; via port A read/write
        and     #%00100000      ; get bit 5 (PA5)
        lsr
        ora     tmp1
+       eor     #$1f
 
        ldx     #0
        rts
-
diff --git a/libsrc/pet/pet-stdjoy.s b/libsrc/pet/pet-stdjoy.s
new file mode 100644 (file)
index 0000000..d14f3e4
--- /dev/null
@@ -0,0 +1,125 @@
+;
+; Standard PET userport joystick driver for the PET
+;
+; Marco van den Heuvel, 2010-01-23
+;
+
+       .include        "zeropage.inc"
+
+       .include        "joy-kernel.inc"
+       .include        "joy-error.inc"
+        .include       "pet.inc"
+
+
+; ------------------------------------------------------------------------
+; 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   $01             ; JOY_UP
+       .byte   $02             ; JOY_DOWN
+       .byte   $04             ; JOY_LEFT
+       .byte   $08             ; JOY_RIGHT
+       .byte   $10             ; JOY_FIRE
+       .byte   $00             ; JOY_FIRE2 unavailable
+       .byte   $00             ; Future expansion
+       .byte   $00             ; Future expansion
+
+; Jump table.
+
+       .addr   INSTALL
+       .addr   UNINSTALL
+       .addr   COUNT
+       .addr   READ
+       .addr   0               ; IRQ entry unused
+
+; ------------------------------------------------------------------------
+; Constants
+
+JOY_COUNT      = 2             ; 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     #>JOY_ERR_OK
+;      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     #>JOY_COUNT
+       rts
+
+; ------------------------------------------------------------------------
+; READ: Read a particular joystick passed in A.
+;
+
+READ:
+       tax                     ; Joystick number into X
+       bne     joy2
+
+; Read joystick 1
+
+joy1:
+       lda     #0
+       sta     VIA_DDRA
+       lda     VIA_PRA
+       and     #$0f
+       cmp     #$0c
+       bne     @notc1
+       lda     #$0f
+       bne     @end1
+@notc1:
+       ora     #$10
+@end1:
+       eor     #$1f
+       rts
+
+; Read joystick 2
+
+joy2:
+       lda     #0
+       sta     VIA_DDRA
+       lda     VIA_PRA
+       lsr
+       lsr
+       lsr
+       lsr
+       cmp     #$0c
+       bne     @notc2
+       lda     #$0f
+       bne     @end2
+@notc2:
+       ora     #$10
+@end2:
+       eor     #$1f
+       ldx     #0
+       rts