diff --git a/libsrc/Makefile b/libsrc/Makefile index d234fe512..883f41308 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -52,7 +52,7 @@ apple2lib: # Atari atarilib: - for i in atari common runtime conio dbg em tgi; do \ + for i in atari common runtime conio dbg em joystick tgi; do \ AS=$(AS) \ CC=$(CC) \ LD=$(LD) \ @@ -67,7 +67,7 @@ atarilib: # Oric Atmos atmoslib: - for i in atmos common runtime em tgi; do \ + for i in atmos common runtime em joystick tgi; do \ AS=$(AS) \ CC=$(CC) \ LD=$(LD) \ @@ -82,7 +82,7 @@ atmoslib: # Vic20 vic20lib: - for i in vic20 cbm common runtime conio dbg em tgi; do \ + for i in vic20 cbm common runtime conio dbg em joystick tgi; do \ AS=$(AS) \ CC=$(CC) \ LD=$(LD) \ @@ -97,7 +97,7 @@ vic20lib: # C16, C116 c16lib: - for i in c16 cbm common runtime conio dbg em tgi; do \ + for i in c16 cbm common runtime conio dbg em joystick tgi; do \ AS=$(AS) \ CC=$(CC) \ LD=$(LD) \ @@ -112,7 +112,7 @@ c16lib: # C64 c64lib: - for i in c64 cbm common runtime conio dbg em tgi; do \ + for i in c64 cbm common runtime conio dbg em joystick tgi; do \ AS=$(AS) \ CC=$(CC) \ LD=$(LD) \ @@ -122,14 +122,15 @@ c64lib: $(AR) a c64.lib $$i/*.o;\ done mv c64/crt0.o c64.o - cp c64/c64-320-200-2.tgi c64-hi.tgi cp c64/*.emd . + cp c64/*.joy . + cp c64/c64-320-200-2.tgi c64-hi.tgi #----------------------------------------------------------------------------- # C128 c128lib: - for i in c128 cbm common runtime conio dbg em tgi; do \ + for i in c128 cbm common runtime conio dbg em joystick tgi; do \ AS=$(AS) \ CC=$(CC) \ LD=$(LD) \ @@ -145,7 +146,7 @@ c128lib: # Commdore P500 / CBM 5x0 cbm510lib: - for i in cbm510 cbm common runtime conio dbg em tgi; do \ + for i in cbm510 cbm common runtime conio dbg em joystick tgi; do \ CC=$(CC) \ AS=$(AS) \ LD=$(LD) \ @@ -220,7 +221,7 @@ petlib: # Commodore Plus/4 plus4lib: - for i in plus4 cbm common runtime conio dbg em tgi; do \ + for i in plus4 cbm common runtime conio dbg em joystick tgi; do \ CC=$(CC) \ AS=$(AS) \ LD=$(LD) \ diff --git a/libsrc/c64/.cvsignore b/libsrc/c64/.cvsignore index b3753bbb6..58093ab1b 100644 --- a/libsrc/c64/.cvsignore +++ b/libsrc/c64/.cvsignore @@ -1,2 +1,3 @@ *.emd +*.joy *.tgi diff --git a/libsrc/c64/Makefile b/libsrc/c64/Makefile index 768d84efc..df57bb672 100644 --- a/libsrc/c64/Makefile +++ b/libsrc/c64/Makefile @@ -18,6 +18,9 @@ %.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 $@ $^ @@ -37,7 +40,6 @@ OBJS = _scrsize.o \ kernal.o \ mouse.o \ randomize.o \ - readjoy.o \ revers.o \ rs232.o \ tgi_mode_table.o @@ -45,18 +47,20 @@ OBJS = _scrsize.o \ #-------------------------------------------------------------------------- # Drivers -TGIS = c64-320-200-2.tgi +EMDS = c64-georam.emd c64-ram.emd c64-reu.emd c64-vdc.emd -EMDS = c64-georam.emd c64-ram.emd c64-reu.emd c64-vdc.emd +JOYS = c64-stdjoy.joy + +TGIS = c64-320-200-2.tgi #-------------------------------------------------------------------------- # Targets -all: $(OBJS) $(EMDS) $(TGIS) +all: $(OBJS) $(EMDS) $(JOYS) $(TGIS) ../runtime/zeropage.o: $(MAKE) -C $(dir $@) $(notdir $@) clean: - @rm -f $(OBJS) $(EMDS:.emd=.o) $(TGIS:.tgi=.o) + @rm -f $(OBJS) $(EMDS:.emd=.o) $(JOYS:.joy=.o) $(TGIS:.tgi=.o) diff --git a/libsrc/c64/c64-stdjoy.s b/libsrc/c64/c64-stdjoy.s new file mode 100644 index 000000000..7ff84cc8e --- /dev/null +++ b/libsrc/c64/c64-stdjoy.s @@ -0,0 +1,119 @@ +; +; Standard joystick driver for the C64 +; +; Ullrich von Bassewitz, 2002-12-20 +; + + .include "zeropage.inc" + + .include "joy-kernel.inc" + .include "joy-error.inc" + .include "c64.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 $01 ; JOY_UP + .byte $02 ; JOY_DOWN + .byte $04 ; JOY_LEFT + .byte $08 ; 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 = 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 + +; 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. +; + +READ: tax ; Joystick number into X + bne joy2 + +; Read joystick 1 + +joy1: lda #$7F + sei + sta CIA1_PRA + lda CIA1_PRB + cli + and #$1F + eor #$1F + rts + +; Read joystick 2 + +joy2: ldx #0 + lda #$E0 + ldy #$FF + sei + sta CIA1_DDRA + lda CIA1_PRA + sty CIA1_DDRA + cli + and #$1F + eor #$1F + rts + + diff --git a/libsrc/c64/readjoy.s b/libsrc/c64/readjoy.s deleted file mode 100644 index e5bb2f167..000000000 --- a/libsrc/c64/readjoy.s +++ /dev/null @@ -1,41 +0,0 @@ -; -; Ullrich von Bassewitz, 23.09.1998 -; -; unsigned readjoy (unsigned char joy); -; - - .export _readjoy - - .include "c64.inc" - - -.proc _readjoy - - tax ; Joystick number into X - bne joy2 - -; Read joystick 1 - -joy1: lda #$7F - sei - sta CIA1_PRA - lda CIA1_PRB - cli - and #$1F - eor #$1F - rts - -; Read joystick 2 - -joy2: ldx #0 - lda #$E0 - ldy #$FF - sta CIA1_DDRA - lda CIA1_PRA - sty CIA1_DDRA - and #$1F - eor #$1F - rts - -.endproc - diff --git a/libsrc/joystick/joy-kernel.s b/libsrc/joystick/joy-kernel.s index 9005d930b..61d35ce2b 100644 --- a/libsrc/joystick/joy-kernel.s +++ b/libsrc/joystick/joy-kernel.s @@ -4,7 +4,7 @@ ; Common functions of the joystick API. ; - .export _joy_install, _joy_deinstall + .export _joy_install, _joy_deinstall, _joy_masks .importzp ptr1 @@ -58,7 +58,7 @@ _joy_install: ; Copy the mask array ldy #JOY_MASKS + JOY_MASK_COUNT - 1 - ldx #JOY_MASK_COUNT + ldx #JOY_MASK_COUNT-1 @L1: lda (ptr1),y sta _joy_masks,x dey