]> git.sur5r.net Git - cc65/commitdiff
Apple 2 joystick driver based on code by Stefan Haubenthal
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 2 May 2003 09:03:47 +0000 (09:03 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 2 May 2003 09:03:47 +0000 (09:03 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@2113 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/Makefile
libsrc/apple2/.cvsignore [new file with mode: 0644]
libsrc/apple2/Makefile
libsrc/apple2/apple2-stdjoy.s [new file with mode: 0644]
libsrc/apple2/apple2.inc
libsrc/apple2/joy_stddrv.s [new file with mode: 0644]

index 285dd91f3198aef4c157791df6677ddfd192a86c..36179e1067715ff88e6f251b7a4cb8bcab224fd5 100644 (file)
@@ -38,7 +38,7 @@ all:
 # Apple ][
 
 apple2lib:
-       for i in apple2 common runtime conio dbg em tgi; do \
+       for i in apple2 common runtime conio dbg em joystick tgi; do \
            AS=$(AS) \
            CC=$(CC) \
            LD=$(LD) \
@@ -115,7 +115,7 @@ c16lib:
 # C64
 
 c64lib:
-       for i in c64 cbm common runtime conio dbg em joystick tgi; do \
+       for i in c64 cbm common runtime conio dbg em joystick serial tgi; do \
            AS=$(AS) \
            CC=$(CC) \
            LD=$(LD) \
@@ -169,7 +169,7 @@ cbm510lib:
 # PET-II series
 
 cbm610lib:
-       for i in cbm610 cbm common runtime conio dbg em; do \
+       for i in cbm610 cbm common runtime conio dbg em joystick tgi; do \
            CC=$(CC) \
            AS=$(AS) \
            LD=$(LD) \
@@ -216,7 +216,7 @@ geoslib:
 # NES
 
 neslib:
-       for i in nes common runtime conio em tgi; do \
+       for i in nes common runtime conio em joystick tgi; do \
            CC=$(CC) \
            AS=$(AS) \
            LD=$(LD) \
@@ -231,7 +231,7 @@ neslib:
 # CBM PET machines
 
 petlib:
-       for i in pet cbm common runtime conio dbg em tgi; do \
+       for i in pet cbm common runtime conio dbg em joystick tgi; do \
            CC=$(CC) \
            AS=$(AS) \
            LD=$(LD) \
@@ -264,14 +264,15 @@ plus4lib:
 .PHONY: clean
 clean:
        @for i in cbm common conio dbg em joystick runtime tgi $(ALLTARGETS); do\
-                  $(MAKE) -C $$i clean;                                                \
+                  $(MAKE) -C $$i clean;                                                \
        done
 
 .PHONY: zap
 zap:   clean
        @for i in cbm common conio dbg em joystick runtime tgi $(ALLTARGETS); do\
-          $(MAKE) -C $$i zap;                                                  \
+          $(MAKE) -C $$i zap;                                                  \
        done
        @rm -f *.o *.emd *.joy *.lib *.tgi
 
 
+                                                             
diff --git a/libsrc/apple2/.cvsignore b/libsrc/apple2/.cvsignore
new file mode 100644 (file)
index 0000000..58093ab
--- /dev/null
@@ -0,0 +1,3 @@
+*.emd
+*.joy
+*.tgi
index 88372e21b25f62e885217532a85d12e9e0d78d88..2a8b94ebe7a59ddfc4fe0f7af48f3657945edff5 100644 (file)
 %.o:   %.s
        @$(AS) -g -o $@ $(AFLAGS) $<
 
+%.emd: %.o ../runtime/zeropage.o
+       @$(LD) -t module -o $@ $^
+
+%.joy: %.o ../runtime/zeropage.o
+       @$(LD) -t module -o $@ $^
+
+%.tgi: %.o ../runtime/zeropage.o
+       @$(LD) -t module -o $@ $^
+
 #--------------------------------------------------------------------------
 # Object files
 
@@ -28,6 +37,7 @@ OBJS= _scrsize.o      \
        crt0.o          \
        ctype.o         \
        cvline.o        \
+        joy_stddrv.o    \
        kbhit.o         \
         mainargs.o      \
         randomize.o     \
@@ -37,15 +47,28 @@ OBJS=       _scrsize.o      \
        where.o         \
        write.o
 
+#--------------------------------------------------------------------------
+# Drivers
+
+EMDS =
+
+JOYS = apple2-stdjoy.joy
+
+TGIS =
+
 #--------------------------------------------------------------------------
 # Targets
 
 .PHONY:        all clean zap
 
-all:   $(OBJS)
+all:   $(OBJS) $(EMDS) $(JOYS) $(TGIS)
+
+../runtime/zeropage.o:
+       $(MAKE) -C $(dir $@) $(notdir $@)
 
 clean:
-       @rm -f $(OBJS)
+       @rm -f $(OBJS) $(EMDS:.emd=.o) $(JOYS:.joy=.o) $(TGIS:.tgi=.o)
 
 zap:   clean
+       @rm -f $(EMDS) $(JOYS) $(TGIS)
 
diff --git a/libsrc/apple2/apple2-stdjoy.s b/libsrc/apple2/apple2-stdjoy.s
new file mode 100644 (file)
index 0000000..ae0f434
--- /dev/null
@@ -0,0 +1,145 @@
+;
+; Standard joystick driver for the Apple ][. May be used multiple times when
+; linked to the statically application.
+;
+; Ullrich von Bassewitz, 2003-05-02
+; Using the readjoy code from Stefan Haubenthal
+;
+
+       .include        "zeropage.inc"
+
+       .include        "joy-kernel.inc"
+        .include        "joy-error.inc"
+        .include        "apple2.inc"
+
+        .macpack        generic
+
+
+; ------------------------------------------------------------------------
+; Constants
+
+JOY_UP          = $01
+JOY_DOWN        = $02
+JOY_LEFT        = $04
+JOY_RIGHT       = $08
+JOY_FIRE        = $10
+
+OFFS            = 10
+
+; ------------------------------------------------------------------------
+; 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   JOY_UP
+        .byte   JOY_DOWN
+        .byte   JOY_LEFT
+        .byte   JOY_RIGHT
+        .byte   JOY_FIRE
+        .byte   $00                     ; Future expansion
+        .byte   $00                     ; Future expansion
+        .byte   $00                     ; Future expansion
+
+; Jump table.
+
+        .word   INSTALL
+        .word   UNINSTALL
+        .word   COUNT
+        .word   READJOY
+
+; ------------------------------------------------------------------------
+; 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
+        ldx     #>JOY_ERR_OK
+
+;      rts                     ; Run into DEINSTALL 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     #>JOY_COUNT
+        rts
+
+; ------------------------------------------------------------------------
+; READ: Read a particular joystick passed in A.
+;
+
+READJOY:
+       and     #$01            ; Fix joystick number
+        asl     a               ;
+       tax                     ; Joystick number (0,2) into X
+
+; Read joystick
+
+        lda     #$00            ; Clear result
+        ldy     OPEN_APPLE,x    ; Check fire button
+        bpl     @nofire
+        ora     #JOY_FIRE       ; Fire button pressed
+
+@nofire:
+        pha
+        jsr     PREAD           ; Read first paddle value
+        pla
+        cpy     #127-OFFS
+        bcc     @left
+        cpy     #127+OFFS
+        bcc     @nextpaddle
+        ora     #JOY_RIGHT
+        .byte   $2c
+@left:  ora     #JOY_LEFT
+
+@nextpaddle:
+        inx
+        pha
+        jsr     PREAD
+        pla
+        cpy     #127-OFFS
+        bcc     @up
+        cpy     #127+OFFS
+        bcc     @done
+        ora     #JOY_DOWN
+        .byte   $2c
+@up:    ora     #JOY_UP
+
+@done:  ldx     #0              ; fix X
+        rts
+
+
+                                               
index 7002f7aadc26d9aecad93ccf253dedfed0239475..b4ce8c4d9aeae0e028ac84d92a48dc3b8d98e737 100644 (file)
@@ -105,3 +105,5 @@ XDRAW   = $F65D         ; Draws a shape by inverting the existing
 
 SETHCOL = $F6EC         ; Set the hi-res color to (X), where (X)
                         ; must be between 0 and 7.
+
+PREAD   = $FB1E         ; Read paddle in X, return AD conv. value in Y
diff --git a/libsrc/apple2/joy_stddrv.s b/libsrc/apple2/joy_stddrv.s
new file mode 100644 (file)
index 0000000..6f08040
--- /dev/null
@@ -0,0 +1,14 @@
+;
+; Name of the standard joystick driver
+;
+; Ullrich von Bassewitz, 2002-12-21
+;
+; const char joy_stddrv[];
+;
+
+       .export _joy_stddrv
+
+.rodata
+
+_joy_stddrv:   .asciiz "apple2-stdjoy.joy"
+