From 82544b86788769b6c66bfb41784c8b820610f678 Mon Sep 17 00:00:00 2001 From: Christian Groessler Date: Mon, 12 May 2014 03:03:44 +0200 Subject: [PATCH] add joystick driver -- trigger buttons are not queried yet --- libsrc/atari5200/joy/atr5200std.s | 130 +++++++++++++++++++++++++++++ libsrc/atari5200/joy_stat_stddrv.s | 12 +++ libsrc/atari5200/libref.s | 8 ++ 3 files changed, 150 insertions(+) create mode 100644 libsrc/atari5200/joy/atr5200std.s create mode 100644 libsrc/atari5200/joy_stat_stddrv.s create mode 100644 libsrc/atari5200/libref.s diff --git a/libsrc/atari5200/joy/atr5200std.s b/libsrc/atari5200/joy/atr5200std.s new file mode 100644 index 000000000..2a506983d --- /dev/null +++ b/libsrc/atari5200/joy/atr5200std.s @@ -0,0 +1,130 @@ +; +; Standard joystick driver for the Atari 5200. +; +; Christian Groessler, 2014-05-12 +; + + .include "zeropage.inc" + + .include "joy-kernel.inc" + .include "joy-error.inc" + .include "atari5200.inc" + + +; ------------------------------------------------------------------------ +; Header. Includes jump table + +.segment "JUMPTABLE" + +; Driver signature + + .byte $6A, $6F, $79 ; "joy" + .byte JOY_API_VERSION ; Driver API version number + +; Library reference + + .addr $0000 + +; 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 $20 ; JOY_FIRE2 + .byte $00 ; Future expansion + .byte $00 ; Future expansion + +; Jump table. + + .addr INSTALL + .addr UNINSTALL + .addr COUNT + .addr READJOY + .addr 0 ; IRQ entry not used + +; ------------------------------------------------------------------------ +; 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 #0 +; 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 + ldx #0 + rts + +; ------------------------------------------------------------------------ +; READ: Read a particular joystick passed in A. +; + +CENTER = 228 / 2 +SENSIVITY = 16 + +READJOY: + and #3 ; fix joystick number + asl a + tax ; Joystick number * 2 (0-6) into X, index into ZP shadow registers + lda #0 ; Initialize return value + +; Read joystick + + ldy PADDL0,x ; get horizontal position + cpy #CENTER-SENSIVITY + bcs @chkleft + + ora #4 ; JOY_LEFT + bne @updown + +@chkleft: + cpy #CENTER+SENSIVITY + bcc @updown + + ora #8 ; JOY_RIGHT + +@updown:ldy PADDL0+1,x ; get vertical position + cpy #CENTER-SENSIVITY + bcs @chkdown + + ora #1 ; JOY_UP + bne @buttons + +@chkdown: + cpy #CENTER+SENSIVITY + bcc @buttons + + ora #2 ; JOY_DOWN + +@buttons: + ; @@@ TODO: BOTTON STATE + + rts + diff --git a/libsrc/atari5200/joy_stat_stddrv.s b/libsrc/atari5200/joy_stat_stddrv.s new file mode 100644 index 000000000..9924eab73 --- /dev/null +++ b/libsrc/atari5200/joy_stat_stddrv.s @@ -0,0 +1,12 @@ +; +; Address of the static standard joystick driver +; +; Christian Groessler, 2014-05-12 +; +; const void joy_static_stddrv[]; +; + + .export _joy_static_stddrv + .import _atr5200std_joy + +_joy_static_stddrv := _atr5200std_joy diff --git a/libsrc/atari5200/libref.s b/libsrc/atari5200/libref.s new file mode 100644 index 000000000..8a5fbe4e0 --- /dev/null +++ b/libsrc/atari5200/libref.s @@ -0,0 +1,8 @@ +; +; Christian Groessler, 2014-05-12 +; + + .export joy_libref + .import _exit + +joy_libref := _exit -- 2.39.5