From ed6a2f5c861be380899ddd1ae513796029b2e455 Mon Sep 17 00:00:00 2001 From: cuz Date: Sun, 28 Sep 2003 21:41:15 +0000 Subject: [PATCH] New joystick driver, converted from c64 one git-svn-id: svn://svn.cc65.org/cc65/trunk@2458 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/c128/Makefile | 4 +- libsrc/c128/c128-ptvjoy.s | 152 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+), 2 deletions(-) create mode 100644 libsrc/c128/c128-ptvjoy.s diff --git a/libsrc/c128/Makefile b/libsrc/c128/Makefile index 286232561..2c80aaf57 100644 --- a/libsrc/c128/Makefile +++ b/libsrc/c128/Makefile @@ -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 index 000000000..af9be13de --- /dev/null +++ b/libsrc/c128/c128-ptvjoy.s @@ -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 + +; 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 + 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 +