]> git.sur5r.net Git - cc65/commitdiff
Added two more joystick drivers from groepaz
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 27 Sep 2003 20:14:31 +0000 (20:14 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 27 Sep 2003 20:14:31 +0000 (20:14 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@2454 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/c64/Makefile
libsrc/c64/c64-hitjoy.s [new file with mode: 0755]
libsrc/c64/c64-ptvjoy.s [new file with mode: 0755]

index 5263bdce5fe30c86aed18b61274c0d94c672a932..2403b8bff15a52e04e3f873420930405d3de4b62 100644 (file)
@@ -56,7 +56,7 @@ OBJS =        _scrsize.o              \
 
 EMDS = c64-georam.emd c64-ram.emd c64-ramcart.emd c64-reu.emd c64-vdc.emd
 
-JOYS = c64-stdjoy.joy
+JOYS = c64-hitjoy.joy c64-ptvjoy.joy c64-stdjoy.joy
 
 SERS = c64-swlink.ser
 
diff --git a/libsrc/c64/c64-hitjoy.s b/libsrc/c64/c64-hitjoy.s
new file mode 100755 (executable)
index 0000000..cb5dde3
--- /dev/null
@@ -0,0 +1,252 @@
+;
+; DXS/HIT-4 Player joystick driver for the C64
+;
+; Groepaz/Hitmen, 2002-12-23
+; obviously based on Ullrichs driver :)
+;
+
+        .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       = 4             ; Number of joysticks we support
+
+; ------------------------------------------------------------------------
+; Data. Written in the IRQ, read by the READ routine
+
+.bss
+
+temp3:         .byte 0
+temp4: .byte 0
+
+.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:
+        sei
+        lda $0314
+        sta irqjmp+1
+        lda $0315
+        sta irqjmp+2
+        lda #<pollirq
+        sta $0314
+        lda #>pollirq
+        sta $0315
+        cli
+
+        lda     #<JOY_ERR_OK
+        ldx     #>JOY_ERR_OK
+
+        rts
+
+; ------------------------------------------------------------------------
+; DEINSTALL routine. Is called before the driver is removed from memory.
+; Can do cleanup or whatever. Must not return anything.
+;
+
+DEINSTALL:
+        sei
+        lda irqjmp+1
+        sta $0314
+        lda irqjmp+2
+        sta $0315
+        cli
+        rts
+
+; ------------------------------------------------------------------------
+; we must use an irq here since we need timers
+; which otherwhise would conflict with system-irq
+pollirq:
+         ; cia 2 setup
+
+         ldy #$00  ; port b direction
+         sty $dd03 ; => input
+
+;         ldy #$00
+         sty $dd05 ; cia2 timer a highbyte
+         sty $dc05 ; cia1 timer a highbyte
+         iny
+;         lda #$01
+         sty $dd04 ; cia2 timer a lowbyte
+         sty $dc04 ; cia1 timer a lowbyte
+
+         lda #%00010001
+         sta $dd0e ; control register a
+                   ; timer: start
+                   ;        continous
+                   ;        forced load
+                   ; serial port: input
+
+         ; cia 1 setup
+
+;         lda #%00000001
+;         sty $dc0d ; irq ctrl reg
+
+         lda #%01010001
+         sta $dc0e ; control register a
+                   ; timer: start
+                   ;        continous
+                   ;        forced load
+                   ; serial port: output
+
+
+         ; read directions 3
+
+         lda $dd01 ;read cia 2 port b
+         and #$0f
+         sta temp3
+
+         ; read button 3
+
+         lda $dd02      ;cia 2 port a
+         and #%11111011 ;data direction
+         sta $dd02      ;=> bit 2 input
+
+         lda $dd00      ;read cia 2 p.A
+         and #%00000100 ;check bit 2
+         asl a
+         asl a
+         ora temp3
+         sta temp3
+
+         ; read directions 4
+
+         lda $dd01 ;read cia 2 port b
+         lsr a
+         lsr a
+         lsr a
+         lsr a
+         sta temp4
+
+         ; read button 4
+
+         ldx #$ff ;serial data register
+         stx $dc0c;=> writing $ff causes
+                  ;cia to output some
+                  ;count signals at cnt1
+
+         ldx $dd0c ;read cia 2 serial in
+         beq fire  ;button press if zero
+
+         lda temp4
+         ora #%00010000
+         sta temp4
+
+fire:
+
+         ; Default Value: $40/64 on PAL
+         ;                $42/66 on NTSC
+         lda #$41
+         sta $dc05
+         ; Default Value: $25/37 on PAL
+         ;                $95/149 on NTSC
+         lda #0
+         sta $dc04
+
+irqjmp:  jmp $dead
+
+; ------------------------------------------------------------------------
+; 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
+
+        ; ldx  #0
+        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 temp3
+        eor    #$1F
+        ldx #0
+        rts
+
+        ; Read joystick 4
+
+joy4:
+        lda temp4
+        eor    #$1F
+        ldx #0
+        rts
+
diff --git a/libsrc/c64/c64-ptvjoy.s b/libsrc/c64/c64-ptvjoy.s
new file mode 100755 (executable)
index 0000000..6e01895
--- /dev/null
@@ -0,0 +1,158 @@
+;
+; PTV-4 Player joystick driver for the C64
+;
+; Groepaz/Hitmen, 2002-12-23
+; obviously based on Ullrichs driver :)
+;
+
+        .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       = 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
+
+        ; ldx  #0
+        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 $dd03       ; bit 7: out    bit 6-0: in
+
+        lda #$80        ; cia 2 port B read/write
+        sta $dd01       ; (output one at PB7)
+
+        lda $dd01       ; cia 2 port B read/write
+        and #$1f        ; get bit 4-0 (PB4-PB0)
+        ; ldx #0
+        rts
+
+        ; Read joystick 4
+
+joy4:
+        lda #%10000000  ; cia 2 port B Data-Direction
+        sta $dd03       ; bit 7: out    bit 6-0: in
+
+        lda #$00        ; cia 2 port B read/write
+        sta $dd01       ; (output zero at PB7)
+
+        lda $dd01       ; cia 2 port B read/write
+        and #$0f        ; get bit 3-0 (PB3-PB0)
+        sta tmp1        ; joy 4 directions
+
+        lda $dd01       ; cia 2 port B read/write
+        and #%00100000  ; get bit 5 (PB5)
+        lsr
+        ora tmp1
+
+        ldx #0
+        rts
+