From 05c990795ef6442315711950136ec63ff836903c Mon Sep 17 00:00:00 2001 From: izydorst Date: Wed, 25 Dec 2002 19:43:34 +0000 Subject: [PATCH] standard joystick driver for GEOS git-svn-id: svn://svn.cc65.org/cc65/trunk@1847 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/Makefile | 1 + libsrc/geos/devel/Makefile | 2 +- libsrc/geos/devel/geos-stdjoy.s | 124 ++++++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 libsrc/geos/devel/geos-stdjoy.s diff --git a/libsrc/Makefile b/libsrc/Makefile index d450a3fd4..062062d8f 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -207,6 +207,7 @@ geoslib: done \ done cp geos/devel/*.emd . + cp geos/devel/*.joy . #----------------------------------------------------------------------------- # CBM PET machines diff --git a/libsrc/geos/devel/Makefile b/libsrc/geos/devel/Makefile index 51d21eaa9..df2cd54f0 100644 --- a/libsrc/geos/devel/Makefile +++ b/libsrc/geos/devel/Makefile @@ -23,7 +23,7 @@ S_OBJS = crt0.o oserror.o oserrlist.o randomize.o fio_module.o EMDS = geos-vdc.emd -JOYS = +JOYS = geos-stdjoy.joy TGIS = diff --git a/libsrc/geos/devel/geos-stdjoy.s b/libsrc/geos/devel/geos-stdjoy.s new file mode 100644 index 000000000..b16149545 --- /dev/null +++ b/libsrc/geos/devel/geos-stdjoy.s @@ -0,0 +1,124 @@ +; +; Standard joystick driver for the C64 +; +; Ullrich von Bassewitz, 2002-12-20 +; + + .include "zeropage.inc" + + .include "joy-kernel.inc" + .include "joy-error.inc" + .include "../inc/geossym.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 = 2 ; Number of joysticks we support + + +; ------------------------------------------------------------------------ +; Data. + + +.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: php + sei ; disable IRQ + lda $01 + pha + lda #$35 + sta $01 ; enable I/O + + tax ; Joystick number into X + bne joy2 + +; Read joystick 1 + +joy1: + lda #$7F + sta cia1base + lda cia1base+1 +back: tax + pla + sta $01 + plp + txa + and #$1F + eor #$1F + ldx #0 + rts + +; Read joystick 2 + +joy2: lda #$E0 + ldy #$FF + sta cia1base+2 + lda cia1base+1 + sty cia1base+2 + jmp back -- 2.39.5