From 3771aaa5582c617dcf4a81cba69b1e15508379e4 Mon Sep 17 00:00:00 2001 From: cuz Date: Fri, 20 Dec 2002 23:23:06 +0000 Subject: [PATCH] Converted the VIC20 joystick to a loadable module git-svn-id: svn://svn.cc65.org/cc65/trunk@1807 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/Makefile | 1 + libsrc/vic20/.cvsignore | 1 + libsrc/vic20/Makefile | 37 ++++++++++-- libsrc/vic20/readjoy.s | 42 ------------- libsrc/vic20/vic20-stdjoy.s | 115 ++++++++++++++++++++++++++++++++++++ 5 files changed, 150 insertions(+), 46 deletions(-) delete mode 100644 libsrc/vic20/readjoy.s create mode 100644 libsrc/vic20/vic20-stdjoy.s diff --git a/libsrc/Makefile b/libsrc/Makefile index 883f41308..d849d67cf 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -92,6 +92,7 @@ vic20lib: $(AR) a vic20.lib $$i/*.o;\ done mv vic20/crt0.o vic20.o + cp vic20/*.joy . #----------------------------------------------------------------------------- # C16, C116 diff --git a/libsrc/vic20/.cvsignore b/libsrc/vic20/.cvsignore index a19e3c8e1..c2ce31371 100644 --- a/libsrc/vic20/.cvsignore +++ b/libsrc/vic20/.cvsignore @@ -1 +1,2 @@ +*.joy *.tgi diff --git a/libsrc/vic20/Makefile b/libsrc/vic20/Makefile index 3b713f681..f491f0326 100644 --- a/libsrc/vic20/Makefile +++ b/libsrc/vic20/Makefile @@ -4,6 +4,9 @@ .SUFFIXES: .o .s .c +#-------------------------------------------------------------------------- +# Rules + %.o: %.c @$(CC) $(CFLAGS) $< @$(AS) -o $@ $(AFLAGS) $(*).s @@ -11,6 +14,18 @@ %.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 -all: $(OBJS) +#-------------------------------------------------------------------------- +# Drivers + +EMDS = + +JOYS = vic20-stdjoy.joy + +TGIS = + +#-------------------------------------------------------------------------- +# Targets + +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) diff --git a/libsrc/vic20/readjoy.s b/libsrc/vic20/readjoy.s deleted file mode 100644 index b3dace61c..000000000 --- a/libsrc/vic20/readjoy.s +++ /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 index 000000000..6d725a702 --- /dev/null +++ b/libsrc/vic20/vic20-stdjoy.s @@ -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 + +; 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 + 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 + +