]> git.sur5r.net Git - cc65/commitdiff
Converted the VIC20 joystick to a loadable module
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 20 Dec 2002 23:23:06 +0000 (23:23 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 20 Dec 2002 23:23:06 +0000 (23:23 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1807 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/Makefile
libsrc/vic20/.cvsignore
libsrc/vic20/Makefile
libsrc/vic20/readjoy.s [deleted file]
libsrc/vic20/vic20-stdjoy.s [new file with mode: 0644]

index 883f413085ef2ac0ccf6a21209d1f0c0e742730e..d849d67cfbe7592c21096fe92fda51cbf2a4e7ff 100644 (file)
@@ -92,6 +92,7 @@ vic20lib:
            $(AR) a vic20.lib $$i/*.o;\
        done
        mv vic20/crt0.o vic20.o
+       cp vic20/*.joy .
 
 #-----------------------------------------------------------------------------
 # C16, C116
index a19e3c8e11242026b6f26c7f89625d4aa2c19dcd..c2ce31371f33865fd722f49400507c955b1ed339 100644 (file)
@@ -1 +1,2 @@
+*.joy
 *.tgi
index 3b713f681eae99e714c309a43e423231722603a8..f491f0326b5859003d5ddd3c02d986ade0f85239 100644 (file)
@@ -4,6 +4,9 @@
 
 .SUFFIXES: .o .s .c
 
+#--------------------------------------------------------------------------
+# Rules
+
 %.o:           %.c
        @$(CC) $(CFLAGS) $<
        @$(AS) -o $@ $(AFLAGS) $(*).s
 %.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
+
 OBJS = _scrsize.o      \
        break.o         \
        crt0.o          \
@@ -23,11 +38,25 @@ OBJS =      _scrsize.o      \
         kernal.o        \
         kplot.o         \
         randomize.o     \
-       readjoy.o       \
-       revers.o        
+       revers.o
+
+#--------------------------------------------------------------------------
+# Drivers
+
+EMDS =
+
+JOYS = vic20-stdjoy.joy
+
+TGIS =
+
+#--------------------------------------------------------------------------
+# Targets
+
+all:   $(OBJS) $(EMDS) $(JOYS) $(TGIS)
 
-all:   $(OBJS)
+../runtime/zeropage.o:
+       $(MAKE) -C $(dir $@) $(notdir $@)
 
 clean:
-       @rm -f $(OBJS)
+       @rm -f $(OBJS) $(EMDS:.emd=.o) $(JOYS:.joy=.o) $(TGIS:.tgi=.o)
 
diff --git a/libsrc/vic20/readjoy.s b/libsrc/vic20/readjoy.s
deleted file mode 100644 (file)
index b3dace6..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-;
-; Ullrich von Bassewitz, 23.09.1998
-; Adapted for Vic20 by Steve Schmidtke 05.08.2002
-;
-; unsigned readjoy (unsigned char joy);
-;
-
-        .export         _readjoy
-
-        .include        "vic20.inc"
-
-
-; The current implemenation will ignore the joystick number because we do only
-; have one joystick
-
-
-.proc   _readjoy
-
-        lda     #$7F            ; mask for VIA2 JOYBIT: sw3
-        ldx     #$C3            ; mask for VIA1 JOYBITS: sw0,sw1,sw2,sw4
-        sei                     ; necessary?
-
-        ldy     VIA2_DDRB       ; remember the date of DDRB
-        sta     VIA2_DDRB       ; set JOYBITS on this VIA for input
-        lda     VIA2_JOY        ; read JOYBIT: sw3
-        sty     VIA2_DDRB       ; restore the state of DDRB
-        asl                     ; Shift sw3 into carry
-
-        ldy     VIA1_DDRA       ; remember the state of DDRA
-        stx     VIA1_DDRA       ; set JOYBITS on this VIA for input
-        lda     VIA1_JOY        ; read JOYBITS: sw0,sw1,sw2,sw4
-        sty     VIA1_DDRA       ; restore the state of DDRA
-
-        cli                     ; necessary?
-        ror                     ; Shift sw3 into bit 7
-        and     #$9E            ; Mask relevant bits
-        eor     #$9E            ; Active states are inverted
-
-        rts
-
-.endproc
-
diff --git a/libsrc/vic20/vic20-stdjoy.s b/libsrc/vic20/vic20-stdjoy.s
new file mode 100644 (file)
index 0000000..6d725a7
--- /dev/null
@@ -0,0 +1,115 @@
+;
+; Standard joystick driver for the VIC20
+;
+; Ullrich von Bassewitz, 2002-12-20
+; Using code from Steve Schmidtke
+;
+
+       .include        "zeropage.inc"
+
+       .include        "joy-kernel.inc"
+        .include        "joy-error.inc"
+        .include        "vic20.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   $02                     ; JOY_UP
+        .byte   $04                     ; JOY_DOWN
+        .byte   $08                     ; JOY_LEFT
+        .byte   $80                     ; 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       = 1             ; 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
+
+; ------------------------------------------------------------------------
+; 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
+        ldx     #>JOY_COUNT
+        rts
+
+; ------------------------------------------------------------------------
+; READ: Read a particular joystick passed in A.
+; The current implemenation will ignore the joystick number because we do only
+; have one joystick
+
+READ:  lda     #$7F            ; mask for VIA2 JOYBIT: sw3
+        ldx     #$C3            ; mask for VIA1 JOYBITS: sw0,sw1,sw2,sw4
+        sei                     ; necessary?
+
+        ldy     VIA2_DDRB       ; remember the date of DDRB
+        sta     VIA2_DDRB       ; set JOYBITS on this VIA for input
+        lda     VIA2_JOY        ; read JOYBIT: sw3
+        sty     VIA2_DDRB       ; restore the state of DDRB
+        asl                     ; Shift sw3 into carry
+
+        ldy     VIA1_DDRA       ; remember the state of DDRA
+        stx     VIA1_DDRA       ; set JOYBITS on this VIA for input
+        lda     VIA1_JOY        ; read JOYBITS: sw0,sw1,sw2,sw4
+        sty     VIA1_DDRA       ; restore the state of DDRA
+
+        cli                     ; necessary?
+        ror                     ; Shift sw3 into bit 7
+        and     #$9E            ; Mask relevant bits
+        eor     #$9E            ; Active states are inverted
+
+        rts
+
+