From 4249b76c3ac48864249ee7d984284c3603720be6 Mon Sep 17 00:00:00 2001 From: cuz Date: Fri, 2 May 2003 09:03:47 +0000 Subject: [PATCH] Apple 2 joystick driver based on code by Stefan Haubenthal git-svn-id: svn://svn.cc65.org/cc65/trunk@2113 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/Makefile | 15 ++-- libsrc/apple2/.cvsignore | 3 + libsrc/apple2/Makefile | 27 ++++++- libsrc/apple2/apple2-stdjoy.s | 145 ++++++++++++++++++++++++++++++++++ libsrc/apple2/apple2.inc | 2 + libsrc/apple2/joy_stddrv.s | 14 ++++ 6 files changed, 197 insertions(+), 9 deletions(-) create mode 100644 libsrc/apple2/.cvsignore create mode 100644 libsrc/apple2/apple2-stdjoy.s create mode 100644 libsrc/apple2/joy_stddrv.s diff --git a/libsrc/Makefile b/libsrc/Makefile index 285dd91f3..36179e106 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -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 index 000000000..58093ab1b --- /dev/null +++ b/libsrc/apple2/.cvsignore @@ -0,0 +1,3 @@ +*.emd +*.joy +*.tgi diff --git a/libsrc/apple2/Makefile b/libsrc/apple2/Makefile index 88372e21b..2a8b94ebe 100644 --- a/libsrc/apple2/Makefile +++ b/libsrc/apple2/Makefile @@ -14,6 +14,15 @@ %.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 index 000000000..ae0f4342e --- /dev/null +++ b/libsrc/apple2/apple2-stdjoy.s @@ -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 + +; 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 + 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 + + + diff --git a/libsrc/apple2/apple2.inc b/libsrc/apple2/apple2.inc index 7002f7aad..b4ce8c4d9 100644 --- a/libsrc/apple2/apple2.inc +++ b/libsrc/apple2/apple2.inc @@ -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 index 000000000..6f080404d --- /dev/null +++ b/libsrc/apple2/joy_stddrv.s @@ -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" +