From 207a8ea10db3a62dc6abeaf92c170fc429fc6f3e Mon Sep 17 00:00:00 2001 From: uz Date: Sun, 28 Feb 2010 09:56:51 +0000 Subject: [PATCH] Fixes for the pet-ptvjoy driver and a new standard joystick driver by Marco 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 | 2 +- libsrc/pet/joy_stddrv.s | 2 +- libsrc/pet/pet-ptvjoy.s | 3 +- libsrc/pet/pet-stdjoy.s | 125 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 129 insertions(+), 3 deletions(-) create mode 100644 libsrc/pet/pet-stdjoy.s diff --git a/libsrc/pet/Makefile b/libsrc/pet/Makefile index b44c383b0..3edec0e02 100644 --- a/libsrc/pet/Makefile +++ b/libsrc/pet/Makefile @@ -71,7 +71,7 @@ OBJS = _scrsize.o \ EMDS = -JOYS = pet-ptvjoy.joy +JOYS = pet-ptvjoy.joy pet-stdjoy.joy TGIS = diff --git a/libsrc/pet/joy_stddrv.s b/libsrc/pet/joy_stddrv.s index 8ad623005..617d374cf 100644 --- a/libsrc/pet/joy_stddrv.s +++ b/libsrc/pet/joy_stddrv.s @@ -10,5 +10,5 @@ .rodata -_joy_stddrv: .asciiz "pet-ptvjoy.joy" +_joy_stddrv: .asciiz "pet-stdjoy.joy" diff --git a/libsrc/pet/pet-ptvjoy.s b/libsrc/pet/pet-ptvjoy.s index ff39405f5..85d2097ce 100644 --- a/libsrc/pet/pet-ptvjoy.s +++ b/libsrc/pet/pet-ptvjoy.s @@ -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 index 000000000..d14f3e408 --- /dev/null +++ b/libsrc/pet/pet-stdjoy.s @@ -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 +; 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: + 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