From: cuz Date: Tue, 26 Oct 2004 21:01:50 +0000 (+0000) Subject: Added nes-stdjoy.s from Stefan Haubenthal X-Git-Tag: V2.12.0~568 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=45b6a6f20cc2b67d0fa5bc5eddb5325b77fd1685;p=cc65 Added nes-stdjoy.s from Stefan Haubenthal git-svn-id: svn://svn.cc65.org/cc65/trunk@3267 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/libsrc/nes/Makefile b/libsrc/nes/Makefile index ee18b60a3..78dff9968 100644 --- a/libsrc/nes/Makefile +++ b/libsrc/nes/Makefile @@ -26,45 +26,76 @@ CFLAGS = -Osir -g -T -t $(SYS) --forget-inc-paths -I . -I ../../include %.o: %.s @$(AS) -g -o $@ $(AFLAGS) $< +%.emd: %.o ../runtime/zeropage.o + @$(LD) -t module -o $@ $^ + +%.joy: %.o ../runtime/zeropage.o + @$(LD) -t module -o $@ $^ + +%.mou: %.o ../runtime/zeropage.o + @$(LD) -t module -o $@ $^ + +%.ser: %.o ../runtime/zeropage.o + @$(LD) -t module -o $@ $^ + +%.tgi: %.o ../runtime/zeropage.o + @$(LD) -t module -o $@ $^ + #-------------------------------------------------------------------------- # Object files -C_OBJS = - -S_OBJS = _scrsize.o \ - cclear.o \ - chline.o \ - clock.o \ - clrscr.o \ - color.o \ - cputc.o \ - crt0.o \ - ctype.o \ - cvline.o \ - getenv.o \ - gotox.o \ - gotoxy.o \ - gotoy.o \ - mainargs.o \ - ppu.o \ - ppubuf.o \ - randomize.o \ - revers.o \ - setcursor.o \ - sysuname.o \ - waitvblank.o \ - wherex.o \ - wherey.o +OBJS = _scrsize.o \ + cclear.o \ + chline.o \ + clock.o \ + clrscr.o \ + color.o \ + cputc.o \ + crt0.o \ + ctype.o \ + cvline.o \ + getenv.o \ + gotox.o \ + gotoxy.o \ + gotoy.o \ + mainargs.o \ + ppu.o \ + ppubuf.o \ + randomize.o \ + revers.o \ + setcursor.o \ + sysuname.o \ + waitvblank.o \ + wherex.o \ + wherey.o + +#-------------------------------------------------------------------------- +# Drivers + +EMDS = + +JOYS = nes-stdjoy.joy + +MOUS = + +SERS = + +TGIS = #-------------------------------------------------------------------------- # Targets .PHONY: all clean zap -all: $(C_OBJS) $(S_OBJS) +all: $(OBJS) $(EMDS) $(JOYS) $(MOUS) $(SERS) $(TGIS) + +../runtime/zeropage.o: + $(MAKE) -C $(dir $@) $(notdir $@) clean: - @$(RM) $(C_OBJS:.c=.s) $(C_OBJS) $(S_OBJS) + @$(RM) $(OBJS) $(EMDS:.emd=.o) $(JOYS:.joy=.o) $(MOUS:.mou=.o) $(SERS:.ser=.o) $(TGIS:.tgi=.o) zap: clean + @$(RM) $(EMDS) $(JOYS) $(MOUS) $(SERS) $(TGIS) + diff --git a/libsrc/nes/nes-stdjoy.s b/libsrc/nes/nes-stdjoy.s new file mode 100644 index 000000000..3803c95f8 --- /dev/null +++ b/libsrc/nes/nes-stdjoy.s @@ -0,0 +1,111 @@ +; +; Standard joypad driver for the NES. May be used multiple times when +; linked to the statically application. +; +; Ullrich von Bassewitz, 2003-05-02 +; Stefan Haubenthal, 2004-10-05 +; + + .include "zeropage.inc" + + .include "joy-kernel.inc" + .include "joy-error.inc" + .include "nes.inc" + + +; ------------------------------------------------------------------------ +; Header. Includes jump table + +.segment "JUMPTABLE" + +; Driver signature + + .byte $6A, $6F, $79 ; "joy" + .byte JOY_API_VERSION ; Driver API version number + +; Button state masks (8 values) + + .byte $08 ; JOY_UP + .byte $04 ; JOY_DOWN + .byte $02 ; JOY_LEFT + .byte $01 ; JOY_RIGHT + .byte $80 ; JOY_FIRE (A) + .byte $40 ; JOY_FIRE2 (B) + .byte $20 ; JOY_FIRE3 (Select) + .byte $10 ; JOY_FIRE4 (Start) + +; Jump table. + + .word INSTALL + .word UNINSTALL + .word COUNT + .word READJOY + +; ------------------------------------------------------------------------ +; Constants + +JOY_COUNT = 2 ; Number of joysticks we support + + +.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 #0 +; rts ; Run into UNINSTALL 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 #0 + rts + +; ------------------------------------------------------------------------ +; READ: Read a particular joystick passed in A. +; + +READJOY: + and #$01 ; Fix joystick number + tay ; Joystick number (0,1) into Y + +; Read joystick + + lda #1 + sta APU_PAD1,y + lda #0 + sta APU_PAD1,y + sta tmp1 + + ldx #8 +@L1: asl tmp1 + lda APU_PAD1,y + and #$01 + beq @L2 + lda tmp1 + ora #$01 + sta tmp1 +@L2: dex + bne @L1 + + lda tmp1 +; ldx #$00 ; fix X + rts