]> git.sur5r.net Git - cc65/blob - libsrc/atari/joy/atrstd.s
Removed IRQ support from joystick drivers.
[cc65] / libsrc / atari / joy / atrstd.s
1 ;
2 ; Standard joystick driver for the Atari. May be used multiple times when linked
3 ; to the statically application.
4 ;
5 ; Ullrich von Bassewitz, 2002-12-21
6 ; Using the readjoy code from Christian Groessler
7 ;
8
9         .include        "zeropage.inc"
10
11         .include        "joy-kernel.inc"
12         .include        "joy-error.inc"
13         .include        "atari.inc"
14
15         .macpack        generic
16         .macpack        module
17
18
19 ; ------------------------------------------------------------------------
20 ; Header. Includes jump table
21
22 .ifdef __ATARIXL__
23         module_header   _atrxstd_joy
24 .else
25         module_header   _atrstd_joy
26 .endif
27
28 ; Driver signature
29
30         .byte   $6A, $6F, $79           ; "joy"
31         .byte   JOY_API_VERSION         ; Driver API version number
32
33 ; Library reference
34
35         .addr   $0000
36
37 ; Jump table.
38
39         .addr   INSTALL
40         .addr   UNINSTALL
41         .addr   COUNT
42         .addr   READJOY
43
44 ; ------------------------------------------------------------------------
45 ; Constants
46
47 JOY_COUNT       = 4             ; Number of joysticks we support
48
49
50 ; ------------------------------------------------------------------------
51 ; Data.
52
53
54 .code
55
56 ; ------------------------------------------------------------------------
57 ; INSTALL routine. Is called after the driver is loaded into memory. If
58 ; possible, check if the hardware is present and determine the amount of
59 ; memory available.
60 ; Must return an JOY_ERR_xx code in a/x.
61 ;
62
63 INSTALL:
64         lda     #JOY_ERR_OK
65         ldx     #0
66 ;       rts                     ; Run into UNINSTALL instead
67
68 ; ------------------------------------------------------------------------
69 ; UNINSTALL routine. Is called before the driver is removed from memory.
70 ; Can do cleanup or whatever. Must not return anything.
71 ;
72
73 UNINSTALL:
74         rts
75
76
77 ; ------------------------------------------------------------------------
78 ; COUNT: Return the total number of available joysticks in a/x.
79 ;
80
81 COUNT:
82         lda     #JOY_COUNT
83         ldx     $fcd8
84         cpx     #$a2
85         beq     _400800
86         lsr     a               ; XL and newer machines only have 2 ports
87 _400800:
88         ldx     #0
89         rts
90
91 ; ------------------------------------------------------------------------
92 ; READ: Read a particular joystick passed in A.
93 ;
94
95 READJOY:
96         and     #3              ; fix joystick number
97         tax                     ; Joystick number (0-3) into X
98
99 ; Read joystick
100
101         lda     STRIG0,x        ; get button
102         asl     a
103         asl     a
104         asl     a
105         asl     a
106         ora     STICK0,x        ; add position information
107         eor     #$1F
108         ldx     #0              ; fix X
109         rts