]> git.sur5r.net Git - cc65/commitdiff
P.A.S.E. joystick driver for the Oric Atmos, contributed by Stefan Haubenthal.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 21 Dec 2009 21:14:21 +0000 (21:14 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 21 Dec 2009 21:14:21 +0000 (21:14 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@4532 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/Makefile
libsrc/atmos/Makefile
libsrc/atmos/atmos-pase.s [new file with mode: 0644]
packages/rpm/redhat/cc65.spec

index e21d85d77d46e088622f34b60145919e82d8f70f..babde2c5b4de8feb96845233e2bc45df421b72ad 100644 (file)
@@ -113,6 +113,7 @@ atmoslib:
            $(MAKE) SYS=atmos -C $$i || exit 1; \
            $(AR) a atmos.lib $$i/*.o;\
        done
+       cp atmos/*.joy .
        cp atmos/*.tgi .
 
 #-----------------------------------------------------------------------------
index fb2376b4e33f6790ce50dc0d545ac7b6b903f205..7f5d417fae7c265f6ff777c6382ee797f160cb6d 100644 (file)
@@ -73,7 +73,7 @@ OBJS  =       _scrsize.o      \
 
 EMDS =
 
-JOYS =
+JOYS = atmos-pase.joy
 
 MOUS =
 
diff --git a/libsrc/atmos/atmos-pase.s b/libsrc/atmos/atmos-pase.s
new file mode 100644 (file)
index 0000000..18ac7b8
--- /dev/null
@@ -0,0 +1,125 @@
+;
+; P.A.S.E. joystick driver for the Atmos
+; May be used multiple times when linked to the statically application.
+;
+; Stefan Haubenthal, 2009-12-21
+; Based on Ullrich von Bassewitz, 2002-12-20
+;
+
+       .include        "joy-kernel.inc"
+       .include        "joy-error.inc"
+;      .include        "atmos.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   $10                     ; JOY_UP
+       .byte   $08                     ; JOY_DOWN
+       .byte   $01                     ; JOY_LEFT
+       .byte   $02                     ; JOY_RIGHT
+       .byte   $20                     ; JOY_FIRE
+       .byte   $00                     ; Future expansion
+       .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
+
+PRA            = $0301
+DDRA           = $0303
+PRA2           = $030F
+
+; ------------------------------------------------------------------------
+; Data.
+
+.bss
+temp1: .byte   $00
+temp2: .byte   $00
+
+.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.
+;
+
+READ:
+       tay
+
+       lda     PRA
+       pha
+       lda     DDRA
+       pha
+       lda     #%11000000
+       sta     DDRA
+       lda     #%10000000
+       sta     PRA2
+       lda     PRA2
+       sta     temp1
+       lda     #%01000000
+       sta     PRA2
+       lda     PRA
+       sta     temp2
+       pla
+       sta     DDRA
+       pla
+       sta     PRA2
+
+       ldx     #0
+       tya
+       bne     @L1
+       lda     temp1
+       eor     #$FF
+       rts
+@L1:   lda     temp2
+       eor     #$FF
+       rts
index 43709f42b5d7f720b55a1956fc802eab9b0e0913..bd8c125aa872fc4a6104a84fd98d53ad065545f1 100644 (file)
@@ -185,6 +185,7 @@ programs for the Oric Atmos using the cc65 crosscompiler.
 
 %files atmos
 %attr(644,root,root)           /usr/lib/cc65/lib/atmos.lib
+%attr(644,root,root)           /usr/lib/cc65/tgi/atmos-*.joy
 %attr(644,root,root)           /usr/lib/cc65/tgi/atmos-*.tgi