From: cuz Date: Sun, 28 Aug 2005 21:06:23 +0000 (+0000) Subject: Driver for the Protovision 4 Player Joystick Adapter by Stefan Haubenthal. X-Git-Tag: V2.12.0~248 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=aeb90b37c001a3b39df1c81c965abd68e6e25f78;p=cc65 Driver for the Protovision 4 Player Joystick Adapter by Stefan Haubenthal. New joy_stddrv module to make the Protovision driver the default driver (cause it's the only one). git-svn-id: svn://svn.cc65.org/cc65/trunk@3596 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/libsrc/pet/.cvsignore b/libsrc/pet/.cvsignore new file mode 100644 index 000000000..58093ab1b --- /dev/null +++ b/libsrc/pet/.cvsignore @@ -0,0 +1,3 @@ +*.emd +*.joy +*.tgi diff --git a/libsrc/pet/Makefile b/libsrc/pet/Makefile index 8671414ae..7772573f1 100644 --- a/libsrc/pet/Makefile +++ b/libsrc/pet/Makefile @@ -26,6 +26,15 @@ CFLAGS = -Osir -g -T -t $(SYS) --forget-inc-paths -I . -I ../../include %.o: %.s @$(AS) -g -o $@ $(AFLAGS) $< +%.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 $@ $^ + #-------------------------------------------------------------------------- # Object files @@ -56,15 +65,29 @@ OBJS = _scrsize.o \ revers.o \ sysuname.o +#-------------------------------------------------------------------------- +# Drivers + +EMDS = + +JOYS = pet-ptvjoy.joy + +TGIS = + #-------------------------------------------------------------------------- # Targets .PHONY: all clean zap -all: $(OBJS) +all: $(OBJS) $(EMDS) $(JOYS) $(TGIS) + +../runtime/zeropage.o: + $(MAKE) -C $(dir $@) $(notdir $@) clean: - @$(RM) $(OBJS) + @$(RM) $(OBJS) $(EMDS:.emd=.o) $(JOYS:.joy=.o) $(TGIS:.tgi=.o) zap: clean + @$(RM) $(EMDS) $(JOYS) $(TGIS) + diff --git a/libsrc/pet/joy_stddrv.s b/libsrc/pet/joy_stddrv.s new file mode 100644 index 000000000..8ad623005 --- /dev/null +++ b/libsrc/pet/joy_stddrv.s @@ -0,0 +1,14 @@ +; +; Name of the standard joystick driver +; +; Ullrich von Bassewitz, 2002-12-21 +; +; const char joy_stddrv[]; +; + + .export _joy_stddrv + +.rodata + +_joy_stddrv: .asciiz "pet-ptvjoy.joy" + diff --git a/libsrc/pet/pet-ptvjoy.s b/libsrc/pet/pet-ptvjoy.s new file mode 100644 index 000000000..ff39405f5 --- /dev/null +++ b/libsrc/pet/pet-ptvjoy.s @@ -0,0 +1,119 @@ +; +; PTV-2 Player joystick driver for the PET +; +; Stefan Haubenthal, 2005-05-25 +; Groepaz/Hitmen, 2002-12-23 +; obviously based on Ullrichs driver :) +; + + .include "zeropage.inc" + + .include "joy-kernel.inc" + .include "joy-error.inc" +; .include "pet.inc" +VIA_PRA := $E841 ; Port register A +VIA_DDRA := $E843 ; Data direction register A + +; ------------------------------------------------------------------------ +; 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 +; 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 + rts + +; ------------------------------------------------------------------------ +; READ: Read a particular joystick passed in A. +; + +READ: lda #%10000000 ; via port A Data-Direction + sta VIA_DDRA ; bit 7: out bit 6-0: in + + tax ; Joystick number into X + bne joy2 + +; Read joystick 1 + +joy1: lda #$80 ; via port A read/write + sta VIA_PRA ; (output one at PA7) + + lda VIA_PRA ; via port A read/write + and #$1f ; get bit 4-0 (PA4-PA0) + rts + +; Read joystick 2 + +joy2: lda #$00 ; via port A read/write + sta VIA_PRA ; (output zero at PA7) + + lda VIA_PRA ; via port A read/write + and #$0f ; get bit 3-0 (PA3-PA0) + sta tmp1 ; joy 4 directions + + lda VIA_PRA ; via port A read/write + and #%00100000 ; get bit 5 (PA5) + lsr + ora tmp1 + + ldx #0 + rts +