]> git.sur5r.net Git - cc65/commitdiff
New joystick driver, converted from c64 one
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 28 Sep 2003 21:41:15 +0000 (21:41 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 28 Sep 2003 21:41:15 +0000 (21:41 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@2458 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/c128/Makefile
libsrc/c128/c128-ptvjoy.s [new file with mode: 0644]

index 286232561d04a58b1557cacba281c22c976f993a..2c80aaf57e8731dc17b05eaae82db5b57261b6bd 100644 (file)
@@ -53,9 +53,9 @@ OBJS =        _scrsize.o              \
 #--------------------------------------------------------------------------
 # Drivers
 
-EMDS = c128-georam.emd c128-ram.emd c128-ramcart.emd c128-reu.emd c128-vdc.emd
+EMDS = c128-georam.emd c128-ram.emd c128-ramcart.emd c128-reu.emd c128-vdc.emd
 
-JOYS = c128-stdjoy.joy
+JOYS = c128-ptvjoy.joy c128-stdjoy.joy
 
 TGIS = c128-640-200-2.tgi c128-640-480-2.tgi
 
diff --git a/libsrc/c128/c128-ptvjoy.s b/libsrc/c128/c128-ptvjoy.s
new file mode 100644 (file)
index 0000000..af9be13
--- /dev/null
@@ -0,0 +1,152 @@
+;
+; PTV-4 Player joystick driver for the C128
+;                                          
+; Ullrich von Bassewitz, 2003-09-28, using the C64 driver from
+; Groepaz/Hitmen, 2002-12-23, which is
+; obviously based on Ullrichs driver :)
+;
+
+        .include "zeropage.inc"
+
+        .include "joy-kernel.inc"
+        .include "joy-error.inc"
+        .include "c128.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       = 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     #>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:   dex
+        bne     joy3
+
+        lda    #$E0
+        ldy    #$FF
+        sei
+        sta    CIA1_DDRA
+        lda    CIA1_PRA
+        sty    CIA1_DDRA
+        cli
+        and    #$1F
+        eor    #$1F
+        rts
+
+; Read joystick 3
+
+joy3:   dex
+        bne     joy4
+
+        lda     #%10000000      ; cia 2 port B Data-Direction
+        sta     CIA2_DDRB       ; bit 7: out    bit 6-0: in
+
+        lda     #$80            ; cia 2 port B read/write
+        sta     CIA2_PRB        ; (output one at PB7)
+
+        lda     CIA2_PRB        ; cia 2 port B read/write
+        and     #$1f            ; get bit 4-0 (PB4-PB0)
+        rts
+
+; Read joystick 4
+
+joy4:   lda     #%10000000      ; cia 2 port B Data-Direction
+        sta     CIA2_DDRB       ; bit 7: out    bit 6-0: in
+
+        lda     #$00            ; cia 2 port B read/write
+        sta     CIA2_PRB        ; (output zero at PB7)
+
+        lda     CIA2_PRB        ; cia 2 port B read/write
+        and     #$0f            ; get bit 3-0 (PB3-PB0)
+        sta     tmp1            ; joy 4 directions
+
+        lda     CIA2_PRB        ; cia 2 port B read/write
+        and     #%00100000      ; get bit 5 (PB5)
+        lsr
+        ora     tmp1
+
+        ldx #0
+        rts
+