]> git.sur5r.net Git - cc65/commitdiff
Added nes-stdjoy.s from Stefan Haubenthal
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 26 Oct 2004 21:01:50 +0000 (21:01 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 26 Oct 2004 21:01:50 +0000 (21:01 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@3267 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/nes/Makefile
libsrc/nes/nes-stdjoy.s [new file with mode: 0644]

index ee18b60a3ccf6e36945bd97a109ab553e46ae23b..78dff9968c595a8371ab0562b0d55e6332a2d493 100644 (file)
@@ -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 (file)
index 0000000..3803c95
--- /dev/null
@@ -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