summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.cvsignore1
-rw-r--r--Makefile147
-rw-r--r--arm7/.cvsignore2
-rw-r--r--arm7/Makefile132
-rw-r--r--arm7/source/main.c178
-rw-r--r--arm9/.cvsignore2
-rw-r--r--arm9/BUILDING17
-rw-r--r--arm9/CHANGES9
-rw-r--r--arm9/COPYING341
-rw-r--r--arm9/Makefile85
-rw-r--r--arm9/README22
-rw-r--r--arm9/instructions.txt155
-rw-r--r--arm9/mkrelease.sh12
-rw-r--r--mkrelease.sh2
14 files changed, 387 insertions, 718 deletions
diff --git a/.cvsignore b/.cvsignore
index 8d28d83..945fe94 100644
--- a/.cvsignore
+++ b/.cvsignore
@@ -1,5 +1,6 @@
build
*.arm9
+*.arm7
*.ds.gba
*.elf
*.nds
diff --git a/Makefile b/Makefile
index 00d7675..3fcc3c8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,137 +1,48 @@
-# This is a generic DS makefile, as taken from the libnds example programs.
-#
-
-#-------------------------------------------------------------------------------
+#---------------------------------------------------------------------------------
.SUFFIXES:
-#-------------------------------------------------------------------------------
-
+#---------------------------------------------------------------------------------
ifeq ($(strip $(DEVKITARM)),)
-$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
+$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM)
endif
include $(DEVKITARM)/ds_rules
-#-------------------------------------------------------------------------------
-# TARGET is the name of the output
-# BUILD is the directory where object files & intermediate files will be placed
-# SOURCES is a list of directories containing source code
-# INCLUDES is a list of directories containing extra header files
-#-------------------------------------------------------------------------------
-TARGET := $(shell basename $(CURDIR))
-BUILD := build
-SOURCES := source gbagfx
-DATA := data
-INCLUDES := include gbagfx
-
-#-------------------------------------------------------------------------------
-# options for code generation
-#-------------------------------------------------------------------------------
-ARCH := -mthumb -mthumb-interwork
-
-# note: arm9tdmi isn't the correct CPU arch, but anything newer and LD
-# *insists* it has a FPU or VFP, and it won't take no for an answer!
-CFLAGS := -g -Wall -O2\
- -mcpu=arm9tdmi -mtune=arm9tdmi -fomit-frame-pointer\
- -ffast-math \
- $(ARCH) \
- $(ADDITIONAL_CFLAGS)
+export TARGET := $(shell basename $(CURDIR))
+export TOPDIR := $(CURDIR)
-CFLAGS += $(INCLUDE) -DARM9
-CXXFLAGS := $(CFLAGS)
-ASFLAGS := -g $(ARCH)
-LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -mno-fpu -Wl,-Map,$(notdir $*.map)
-
-#-------------------------------------------------------------------------------
-# any extra libraries we wish to link with the project
-#-------------------------------------------------------------------------------
-LIBS := -lfat -lnds9
-
-
-#-------------------------------------------------------------------------------
-# list of directories containing libraries, this must be the top level containing
-# include and lib
-#-------------------------------------------------------------------------------
-LIBDIRS := $(LIBNDS)
-
-#-------------------------------------------------------------------------------
-# no real need to edit anything past this point unless you need to add
-# additional rules for different file extensions
-#-------------------------------------------------------------------------------
-ifneq ($(BUILD),$(notdir $(CURDIR)))
-#-------------------------------------------------------------------------------
-
-export OUTPUT := $(CURDIR)/$(TARGET)
-
-export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
- $(foreach dir,$(DATA),$(CURDIR)/$(dir))
+#---------------------------------------------------------------------------------
+# path to tools - this can be deleted if you set the path in windows
+#---------------------------------------------------------------------------------
+export PATH := $(DEVKITARM)/bin:$(PATH)
-export DEPSDIR := $(CURDIR)/$(BUILD)
+.PHONY: $(TARGET).arm7 $(TARGET).arm9
-CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
-CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
-SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
-BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
-
#---------------------------------------------------------------------------------
-# use CXX for linking C++ projects, CC for standard C
-#---------------------------------------------------------------------------------
-ifeq ($(strip $(CPPFILES)),)
+# main targets
#---------------------------------------------------------------------------------
- export LD := $(CC)
+all: $(TARGET).ds.gba
+
+$(TARGET).ds.gba : $(TARGET).nds
+
#---------------------------------------------------------------------------------
-else
+$(TARGET).nds : $(TARGET).arm7 $(TARGET).arm9
+ ndstool -c $(TARGET).nds -7 $(TARGET).arm7 -9 $(TARGET).arm9
+
#---------------------------------------------------------------------------------
- export LD := $(CXX)
+$(TARGET).arm7 : arm7/$(TARGET).elf
+$(TARGET).arm9 : arm9/$(TARGET).elf
+
#---------------------------------------------------------------------------------
-endif
+arm7/$(TARGET).elf:
+ $(MAKE) -C arm7
+
#---------------------------------------------------------------------------------
+arm9/$(TARGET).elf:
+ $(MAKE) -C arm9
-export OFILES := $(addsuffix .o,$(BINFILES)) \
- $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
-
-export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
- $(foreach dir,$(LIBDIRS),-I$(dir)/include) \
- $(foreach dir,$(LIBDIRS),-I$(dir)/include) \
- -I$(CURDIR)/$(BUILD)
-
-export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
-
-.PHONY: $(BUILD) clean
-
-#---------------------------------------------------------------------------------
-$(BUILD):
- @[ -d $@ ] || mkdir -p $@
- @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
-
#---------------------------------------------------------------------------------
clean:
- @echo clean ...
- @rm -fr $(BUILD) $(TARGET).elf $(TARGET).nds $(TARGET).arm9 $(TARGET).ds.gba
-
-
-#---------------------------------------------------------------------------------
-else
-
-DEPENDS := $(OFILES:.o=.d)
-
-#---------------------------------------------------------------------------------
-# main targets
-#---------------------------------------------------------------------------------
-$(OUTPUT).ds.gba : $(OUTPUT).nds
-$(OUTPUT).nds : $(OUTPUT).arm9
-$(OUTPUT).arm9 : $(OUTPUT).elf
-$(OUTPUT).elf : $(OFILES)
-
-#---------------------------------------------------------------------------------
-%.bin.o : %.bin
-#---------------------------------------------------------------------------------
- @echo $(notdir $<)
- @$(bin2o)
-
-
--include $(DEPENDS)
-
-#---------------------------------------------------------------------------------------
-endif
-#---------------------------------------------------------------------------------------
+ $(MAKE) -C arm9 clean
+ $(MAKE) -C arm7 clean
+ rm -f $(TARGET).ds.gba $(TARGET).nds $(TARGET).arm7 $(TARGET).arm9
diff --git a/arm7/.cvsignore b/arm7/.cvsignore
new file mode 100644
index 0000000..970db45
--- /dev/null
+++ b/arm7/.cvsignore
@@ -0,0 +1,2 @@
+build
+ds81.arm7.elf \ No newline at end of file
diff --git a/arm7/Makefile b/arm7/Makefile
new file mode 100644
index 0000000..c4ede78
--- /dev/null
+++ b/arm7/Makefile
@@ -0,0 +1,132 @@
+#---------------------------------------------------------------------------------
+.SUFFIXES:
+#---------------------------------------------------------------------------------
+ifeq ($(strip $(DEVKITARM)),)
+$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
+endif
+
+include $(DEVKITARM)/ds_rules
+
+#---------------------------------------------------------------------------------
+# BUILD is the directory where object files & intermediate files will be placed
+# SOURCES is a list of directories containing source code
+# INCLUDES is a list of directories containing extra header files
+# DATA is a list of directories containing binary files
+# all directories are relative to this makefile
+#---------------------------------------------------------------------------------
+BUILD := build
+SOURCES := source
+INCLUDES := include build
+DATA :=
+
+#---------------------------------------------------------------------------------
+# options for code generation
+#---------------------------------------------------------------------------------
+ARCH := -mthumb-interwork
+
+CFLAGS := -g -Wall -O2\
+ -mcpu=arm7tdmi -mtune=arm7tdmi -fomit-frame-pointer\
+ -ffast-math \
+ $(ARCH)
+
+CFLAGS += $(INCLUDE) -DARM7
+CXXFLAGS := $(CFLAGS)
+
+
+ASFLAGS := -g $(ARCH)
+LDFLAGS = -specs=ds_arm7.specs -g $(ARCH) -mno-fpu -Wl,-Map,$(notdir $*).map
+
+LIBS := -lnds7 -ldswifi7
+
+#---------------------------------------------------------------------------------
+# list of directories containing libraries, this must be the top level containing
+# include and lib
+#---------------------------------------------------------------------------------
+LIBDIRS := $(LIBNDS)
+
+
+#---------------------------------------------------------------------------------
+# no real need to edit anything past this point unless you need to add additional
+# rules for different file extensions
+#---------------------------------------------------------------------------------
+ifneq ($(BUILD),$(notdir $(CURDIR)))
+#---------------------------------------------------------------------------------
+
+export ARM7BIN := $(TOPDIR)/$(TARGET).arm7
+export ARM7ELF := $(CURDIR)/$(TARGET).arm7.elf
+export DEPSDIR := $(CURDIR)/$(BUILD)
+
+export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir))
+
+CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
+CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
+SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
+BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
+
+export OFILES := $(addsuffix .o,$(BINFILES)) \
+ $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
+
+export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
+ $(foreach dir,$(LIBDIRS),-I$(dir)/include) \
+ -I$(CURDIR)/$(BUILD)
+
+export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
+
+#---------------------------------------------------------------------------------
+# use CXX for linking C++ projects, CC for standard C
+#---------------------------------------------------------------------------------
+ifeq ($(strip $(CPPFILES)),)
+#---------------------------------------------------------------------------------
+ export LD := $(CC)
+#---------------------------------------------------------------------------------
+else
+#---------------------------------------------------------------------------------
+ export LD := $(CXX)
+#---------------------------------------------------------------------------------
+endif
+#---------------------------------------------------------------------------------
+
+.PHONY: $(BUILD) clean
+
+#---------------------------------------------------------------------------------
+$(BUILD):
+ @[ -d $@ ] || mkdir -p $@
+ @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
+
+#---------------------------------------------------------------------------------
+clean:
+ @echo clean ...
+ @rm -fr $(BUILD) *.elf
+
+
+#---------------------------------------------------------------------------------
+else
+
+DEPENDS := $(OFILES:.o=.d)
+
+#---------------------------------------------------------------------------------
+# main targets
+#---------------------------------------------------------------------------------
+$(ARM7BIN) : $(ARM7ELF)
+ @$(OBJCOPY) -O binary $< $@
+ @echo built ... $(notdir $@)
+
+
+$(ARM7ELF) : $(OFILES)
+ @echo linking $(notdir $@)
+ @$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@
+
+
+#---------------------------------------------------------------------------------
+# you need a rule like this for each extension you use as binary data
+#---------------------------------------------------------------------------------
+%.bin.o : %.bin
+#---------------------------------------------------------------------------------
+ @echo $(notdir $<)
+ @$(bin2o)
+
+-include $(DEPENDS)
+
+#---------------------------------------------------------------------------------------
+endif
+#---------------------------------------------------------------------------------------
diff --git a/arm7/source/main.c b/arm7/source/main.c
new file mode 100644
index 0000000..34aef8f
--- /dev/null
+++ b/arm7/source/main.c
@@ -0,0 +1,178 @@
+/*---------------------------------------------------------------------------------
+ $Id$
+
+ Simple ARM7 stub (sends RTC, TSC, and X/Y data to the ARM 9)
+
+ $Log$
+ Revision 1.2 2005/09/07 20:06:06 wntrmute
+ updated for latest libnds changes
+
+ Revision 1.8 2005/08/03 05:13:16 wntrmute
+ corrected sound code
+
+
+---------------------------------------------------------------------------------*/
+#include <nds.h>
+
+#include <nds/bios.h>
+#include <nds/arm7/touch.h>
+#include <nds/arm7/clock.h>
+
+#include <dswifi7.h>
+
+
+//---------------------------------------------------------------------------------
+void startSound(int sampleRate, const void* data, u32 bytes, u8 channel, u8 vol, u8 pan, u8 format) {
+//---------------------------------------------------------------------------------
+ SCHANNEL_TIMER(channel) = SOUND_FREQ(sampleRate);
+ SCHANNEL_SOURCE(channel) = (u32)data;
+ SCHANNEL_LENGTH(channel) = bytes >> 2 ;
+ SCHANNEL_CR(channel) = SCHANNEL_ENABLE | SOUND_ONE_SHOT | SOUND_VOL(vol) | SOUND_PAN(pan) | (format==1?SOUND_8BIT:SOUND_16BIT);
+}
+
+
+//---------------------------------------------------------------------------------
+s32 getFreeSoundChannel() {
+//---------------------------------------------------------------------------------
+ int i;
+ for (i=0; i<16; i++) {
+ if ( (SCHANNEL_CR(i) & SCHANNEL_ENABLE) == 0 ) return i;
+ }
+ return -1;
+}
+
+//---------------------------------------------------------------------------------
+void VblankHandler(void) {
+//---------------------------------------------------------------------------------
+ static int heartbeat = 0;
+
+ uint16 but=0, x=0, y=0, xpx=0, ypx=0, z1=0, z2=0, batt=0, aux=0;
+ int t1=0, t2=0;
+ uint32 temp=0;
+ uint8 ct[sizeof(IPC->curtime)];
+ u32 i;
+
+ // Update the heartbeat
+ heartbeat++;
+
+ // Read the touch screen
+
+ but = REG_KEYXY;
+
+ if (!(but & (1<<6))) {
+
+ touchPosition tempPos = touchReadXY();
+
+ x = tempPos.x;
+ y = tempPos.y;
+ xpx = tempPos.px;
+ ypx = tempPos.py;
+ }
+
+ z1 = touchRead(TSC_MEASURE_Z1);
+ z2 = touchRead(TSC_MEASURE_Z2);
+
+
+ batt = touchRead(TSC_MEASURE_BATTERY);
+ aux = touchRead(TSC_MEASURE_AUX);
+
+ // Read the time
+ rtcGetTime((uint8 *)ct);
+ BCDToInteger((uint8 *)&(ct[1]), 7);
+
+ // Read the temperature
+ temp = touchReadTemperature(&t1, &t2);
+
+ // Update the IPC struct
+ IPC->heartbeat = heartbeat;
+ IPC->buttons = but;
+ IPC->touchX = x;
+ IPC->touchY = y;
+ IPC->touchXpx = xpx;
+ IPC->touchYpx = ypx;
+ IPC->touchZ1 = z1;
+ IPC->touchZ2 = z2;
+ IPC->battery = batt;
+ IPC->aux = aux;
+
+ for(i=0; i<sizeof(ct); i++) {
+ IPC->curtime[i] = ct[i];
+ }
+
+ IPC->temperature = temp;
+ IPC->tdiode1 = t1;
+ IPC->tdiode2 = t2;
+
+
+ //sound code :)
+ TransferSound *snd = IPC->soundData;
+ IPC->soundData = 0;
+
+ if (0 != snd) {
+
+ for (i=0; i<snd->count; i++) {
+ s32 chan = getFreeSoundChannel();
+
+ if (chan >= 0) {
+ startSound(snd->data[i].rate, snd->data[i].data, snd->data[i].len, chan, snd->data[i].vol, snd->data[i].pan, snd->data[i].format);
+ }
+ }
+ }
+
+ Wifi_Update(); // update wireless in vblank
+
+}
+
+// callback to allow wifi library to notify arm9
+void arm7_synctoarm9() { // send fifo message
+ REG_IPC_FIFO_TX = 0x87654321;
+}
+// interrupt handler to allow incoming notifications from arm9
+void arm7_fifo() { // check incoming fifo messages
+ u32 msg = REG_IPC_FIFO_RX;
+ if(msg==0x87654321) Wifi_Sync();
+}
+
+//---------------------------------------------------------------------------------
+int main(int argc, char ** argv) {
+//---------------------------------------------------------------------------------
+ REG_IPC_FIFO_CR = IPC_FIFO_ENABLE | IPC_FIFO_SEND_CLEAR; // enable & prepare fifo asap
+ // Reset the clock if needed
+ rtcReset();
+
+ //enable sound
+ powerON(POWER_SOUND);
+ SOUND_CR = SOUND_ENABLE | SOUND_VOL(0x7F);
+ IPC->soundData = 0;
+
+ irqInit();
+ irqSet(IRQ_VBLANK, VblankHandler);
+ irqEnable(IRQ_VBLANK);
+
+ irqSet(IRQ_WIFI, Wifi_Interrupt); // set up wifi interrupt
+ irqEnable(IRQ_WIFI);
+
+{ // sync with arm9 and init wifi
+ u32 fifo_temp;
+
+ while(1) { // wait for magic number
+ while(REG_IPC_FIFO_CR&IPC_FIFO_RECV_EMPTY) swiWaitForVBlank();
+ fifo_temp=REG_IPC_FIFO_RX;
+ if(fifo_temp==0x12345678) break;
+ }
+ while(REG_IPC_FIFO_CR&IPC_FIFO_RECV_EMPTY) swiWaitForVBlank();
+ fifo_temp=REG_IPC_FIFO_RX; // give next value to wifi_init
+ Wifi_Init(fifo_temp);
+
+ irqSet(IRQ_FIFO_NOT_EMPTY,arm7_fifo); // set up fifo irq
+ irqEnable(IRQ_FIFO_NOT_EMPTY);
+ REG_IPC_FIFO_CR = IPC_FIFO_ENABLE | IPC_FIFO_RECV_IRQ;
+
+ Wifi_SetSyncHandler(arm7_synctoarm9); // allow wifi lib to notify arm9
+ } // arm7 wifi init complete
+
+ // Keep the ARM7 out of main RAM
+ while (1) swiWaitForVBlank();
+}
+
+
diff --git a/arm9/.cvsignore b/arm9/.cvsignore
new file mode 100644
index 0000000..efbf99a
--- /dev/null
+++ b/arm9/.cvsignore
@@ -0,0 +1,2 @@
+build
+ds81.arm9.elf \ No newline at end of file
diff --git a/arm9/BUILDING b/arm9/BUILDING
deleted file mode 100644
index 263b160..0000000
--- a/arm9/BUILDING
+++ /dev/null
@@ -1,17 +0,0 @@
-Build Instructions
-------------------
-
-As this uses the example makefiles from devkitpro, all that is required is
-a 'make' command in the top level directory:
-
-$ make
-
-
-By default FAT support will be initialised. To prevent this you need to supply
-additional flag settings:
-
-$ make ADDITIONAL_CFLAGS="-DDS81_DISABLE_FAT"
-
-
-There is a script mkrelease.sh which simply makes a FAT and non-FAT version of
-DS81 for release.
diff --git a/arm9/CHANGES b/arm9/CHANGES
deleted file mode 100644
index 5e0f9ff..0000000
--- a/arm9/CHANGES
+++ /dev/null
@@ -1,9 +0,0 @@
-+ Completed, * In progress, - Not done.
-
-Changes from V1.0 to V1.1
-
- + Added external FAT file loading.
- + Added Mazogs as a built-in tape (code courtesy of Paul Fearnley)
- + Fixed bug where the ROM input routine could be easily locked up.
- This was caused by a problem in the way I set up the LASTK system
- variables from the house-keeping routine.
diff --git a/arm9/COPYING b/arm9/COPYING
deleted file mode 100644
index abd3cf7..0000000
--- a/arm9/COPYING
+++ /dev/null
@@ -1,341 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-
diff --git a/arm9/Makefile b/arm9/Makefile
index 00d7675..0eb1905 100644
--- a/arm9/Makefile
+++ b/arm9/Makefile
@@ -1,31 +1,27 @@
-# This is a generic DS makefile, as taken from the libnds example programs.
-#
-
-#-------------------------------------------------------------------------------
+#---------------------------------------------------------------------------------
.SUFFIXES:
-#-------------------------------------------------------------------------------
-
+#---------------------------------------------------------------------------------
ifeq ($(strip $(DEVKITARM)),)
$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
endif
include $(DEVKITARM)/ds_rules
-#-------------------------------------------------------------------------------
-# TARGET is the name of the output
+#---------------------------------------------------------------------------------
# BUILD is the directory where object files & intermediate files will be placed
# SOURCES is a list of directories containing source code
# INCLUDES is a list of directories containing extra header files
-#-------------------------------------------------------------------------------
-TARGET := $(shell basename $(CURDIR))
+# DATA is a list of directories containing binary files
+# all directories are relative to this makefile
+#---------------------------------------------------------------------------------
BUILD := build
-SOURCES := source gbagfx
-DATA := data
-INCLUDES := include gbagfx
+SOURCES := source
+INCLUDES := include
+DATA := data
-#-------------------------------------------------------------------------------
+#---------------------------------------------------------------------------------
# options for code generation
-#-------------------------------------------------------------------------------
+#---------------------------------------------------------------------------------
ARCH := -mthumb -mthumb-interwork
# note: arm9tdmi isn't the correct CPU arch, but anything newer and LD
@@ -37,37 +33,36 @@ CFLAGS := -g -Wall -O2\
$(ADDITIONAL_CFLAGS)
CFLAGS += $(INCLUDE) -DARM9
-CXXFLAGS := $(CFLAGS)
+CXXFLAGS := $(CFLAGS)
ASFLAGS := -g $(ARCH)
LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -mno-fpu -Wl,-Map,$(notdir $*.map)
-#-------------------------------------------------------------------------------
+#---------------------------------------------------------------------------------
# any extra libraries we wish to link with the project
-#-------------------------------------------------------------------------------
-LIBS := -lfat -lnds9
-
+#---------------------------------------------------------------------------------
+LIBS := -lfat -lnds9 -ldswifi9
-#-------------------------------------------------------------------------------
+#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
-#-------------------------------------------------------------------------------
+#---------------------------------------------------------------------------------
LIBDIRS := $(LIBNDS)
-#-------------------------------------------------------------------------------
-# no real need to edit anything past this point unless you need to add
-# additional rules for different file extensions
-#-------------------------------------------------------------------------------
+#---------------------------------------------------------------------------------
+# no real need to edit anything past this point unless you need to add additional
+# rules for different file extensions
+#---------------------------------------------------------------------------------
ifneq ($(BUILD),$(notdir $(CURDIR)))
-#-------------------------------------------------------------------------------
-
-export OUTPUT := $(CURDIR)/$(TARGET)
+#---------------------------------------------------------------------------------
+export ARM9BIN := $(TOPDIR)/$(TARGET).arm9
+export ARM9ELF := $(CURDIR)/$(TARGET).arm9.elf
+export DEPSDIR := $(CURDIR)/$(BUILD)
+
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
-
-export DEPSDIR := $(CURDIR)/$(BUILD)
-
+
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
@@ -91,9 +86,8 @@ export OFILES := $(addsuffix .o,$(BINFILES)) \
$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
- $(foreach dir,$(LIBDIRS),-I$(dir)/include) \
- $(foreach dir,$(LIBDIRS),-I$(dir)/include) \
- -I$(CURDIR)/$(BUILD)
+ $(foreach dir,$(LIBDIRS),-I$(dir)/include) \
+ -I$(CURDIR)/$(BUILD)
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
@@ -107,7 +101,7 @@ $(BUILD):
#---------------------------------------------------------------------------------
clean:
@echo clean ...
- @rm -fr $(BUILD) $(TARGET).elf $(TARGET).nds $(TARGET).arm9 $(TARGET).ds.gba
+ @rm -fr $(BUILD) *.elf *.nds* *.bin
#---------------------------------------------------------------------------------
@@ -118,18 +112,23 @@ DEPENDS := $(OFILES:.o=.d)
#---------------------------------------------------------------------------------
# main targets
#---------------------------------------------------------------------------------
-$(OUTPUT).ds.gba : $(OUTPUT).nds
-$(OUTPUT).nds : $(OUTPUT).arm9
-$(OUTPUT).arm9 : $(OUTPUT).elf
-$(OUTPUT).elf : $(OFILES)
-
+$(ARM9BIN) : $(ARM9ELF)
+ @$(OBJCOPY) -O binary $< $@
+ @echo built ... $(notdir $@)
+
+$(ARM9ELF) : $(OFILES)
+ @echo linking $(notdir $@)
+ @$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@
+
+#---------------------------------------------------------------------------------
+# you need a rule like this for each extension you use as binary data
#---------------------------------------------------------------------------------
%.bin.o : %.bin
#---------------------------------------------------------------------------------
@echo $(notdir $<)
@$(bin2o)
-
-
+
+
-include $(DEPENDS)
#---------------------------------------------------------------------------------------
diff --git a/arm9/README b/arm9/README
deleted file mode 100644
index c9ac525..0000000
--- a/arm9/README
+++ /dev/null
@@ -1,22 +0,0 @@
- DS81
- Copyright 2006 Ian Cowburn
- ianc@noddybox.co.uk
-
-The code to DS81 is released under the GNU General Public License. See COPYING
-for details.
-
-Other included software is provided in good faith, is not released under the
-GNU General Public License, and is copyright their respective authors. If any
-of these authors disagree with this distribution of their work then it will be
-gladly removed.
-
-ZX81 BASIC ROM (c) 1981 Nine Tiles Networks LTD
-
-3D Monster Maze (c) 1983 Malcom E. Evans
-
-Mazogs, City Patrol and Sabotage (c) 1981-1982 Don Priestley
-
-
-See the file INSTRUCTIONS.TXT for instructions on use.
-See the file BUILDING for instructions on building the sources.
-See the file CHANGES for recent changes.
diff --git a/arm9/instructions.txt b/arm9/instructions.txt
deleted file mode 100644
index c0d81d2..0000000
--- a/arm9/instructions.txt
+++ /dev/null
@@ -1,155 +0,0 @@
- DS81
- ---------==============================---------
-
- Copyright 2006 Ian Cowburn
- ianc@noddybox.co.uk
-
-
-1. LICENSE
-----------
-
- The code to DS81 is released under the GNU General Public License. See
- the text file COPYING for details.
-
- Other included software is provided in good faith, is not released under
- the GNU General Public License, and is copyright their respective authors.
- If any of these authors disagree with the distribution of their work then
- contact me and it will be gladly removed.
-
- ZX81 BASIC ROM (c) 1981 Nine Tiles Networks LTD
- 3D Monster Maze (c) 1983 Malcom E. Evans
- Mazogs, City Patrol and Sabotage (c) 1981, 1982 Don Priestley
-
-
-2. ZX81
--------
-
- The ZX81 was an 8-bit computer released by Sinclair Research in 1981, using
- the Z80 CPU.
-
- It was a monochrome machine with no sound (be quiet those at the back of
- the room who used to be able to do sound by doing odd things with the video
- signal) and a text mode that could be used to plot graphics at a resolution
- of 64 by 44 (hmmm, smaller than most icons nowadays).
-
- It came with 1K of RAM, though most people opted for a massive 16K RAM pack.
-
-
-2. DS81
--------
-
- DS81 is an emulation of the 16K ZX81 and is is supplied in two main forms,
- as a native Nintendo DS executable and a version with a Gameboy Advance
- wrapper (in case your Ninentdo DS homebrew device only supports running
- GBA executables).
-
- In addition to this two different versions are supplied, one which
- initialises the FAT library and one which doesn't. They are identical save
- for this, and separate ones are supplied in case the FAT library
- initialisation causes problem on your homebrew device:
-
- ds81.nds - Nintendo DS version
- ds81.bs.gba - As above with a GBA wrapper.
-
- ds81-nofat.nds - Nintendo DS version; no FAT library initialisation.
- ds81-nofat.bs.gba - As above with a GBA wrapper.
-
- I'm probably being overly paranoid there, but better safe than sorry.
-
-
-3. Using DS81
--------------
-
- When run DS81 displays a splash screen with copyright information and
- whether the FAT library has been able to find a supported device for the
- loading of external tapes.
-
- Once the A button has been pressed the ZX81 resets and displays itself
- on the top screen, and a soft keyboard is displayed on the bottom, touch
- sensitive, DS screen.
-
- If you've never used a ZX81 before then you may wish to find out how the
- keyboard works -- it uses a keyword entry system, rather than the straight
- typing if commands. So, for instance, the key P is pressed to enter PRINT
- when the cursor is in keyword mode (the cursor in an inverted K).
-
- Trust me; you were glad of it when using the original ZX81's hard plastic
- membrane keyboard.
-
- When using the soft keyboard by default the shift key is 'sticky' and once
- used will stay held down until pressed again.
-
- The World of Spectrum has the original ZX81 manuals, either as a PDF
- or in HTML form:
-
- http://www.worldofspectrum.org/
-
- At the bottom of the keyboard is an area where you can click to bring up a
- menu. Either use the stylus, or the joypad and button A to select an
- option from the following choices:
-
- RESET ZX81
- This resets the emulated ZX81.
-
- SELECT TAPE
- Selects the built-in tape to use (DS81 has a number of ZX81 tapes
- built into it). The next section has extra information on the
- loading of games.
-
- STICK SHIFT ON
- Sets the shift key so it stays down until pressed again.
-
- STICK SHIFT OFF
- Sets the shift key so it behaves likes all the other keys.
-
- MAP JOYPAD TO KEYS
- Allows you to redefine the DS's joypad and buttons to ZX81 keys.
- Follow the on-screen instructions.
-
- CANCEL
- Cancels the menu.
-
-
-
-3. Using the internal tapes on DS81
------------------------------------
-
- Games on the ZX81 were supplied on cassette. DS81 includes a few tape
- files that are selectable from the menu. Follow the on-screen instructions
- to select the game. A quick description and the controls to use are
- displayed on the top screen.
-
- Once you've selected a tape you can load it in the emulator by using the
- command LOAD "". If you're really stuck with the ZX81 keyboard:
-
- 1. Select your tape.
- 2. Reset the ZX81 from the menu.
- 3. When the inverse K cursor is displayed press the J key to generate
- the keyword LOAD.
- 4. Press the SHIFT key.
- 5. Press the P key twice to enter the double quotes (DON'T use the
- double quotes got by pressing SHIFT+Q. These are not the same!)
- 6. Release the SHIFT key and press the NEW LINE key.
- 7. The tape will load and run.
-
-
-3. Using external tapes on DS81
--------------------------------
-
- If you are using the version of DS81 that allows the use of FAT devices,
- and you device is supported, they you can load any old tape.
-
- Simply place the .P file (ZX81 games are usually distributed as .P files
- that are simply an image of the memory that would have been dumped to tape)
- and either put it in the root directory of the FAT device or in a directory
- called ZX81SNAP.
-
- Note that currently hi-resolution games will not work. For that matter,
- it can't be at all guaranteed that all original ZX81 games will work as
- expected. After all, DS81 isn't really a ZX81.
-
-
--------------------------------------------------------------------------------
-$Id$
-
- vim:expandtab:spell
diff --git a/arm9/mkrelease.sh b/arm9/mkrelease.sh
deleted file mode 100644
index 14835bb..0000000
--- a/arm9/mkrelease.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-rm -f *.nds *.elf *.gba *.arm9
-
-make clean
-make ADDITIONAL_CFLAGS="-DDS81_DISABLE_FAT"
-
-mv ds81.nds ds81-nofat.nds
-mv ds81.ds.gba ds81-nofat.ds.gba
-
-rm -f build/main.*
-make
diff --git a/mkrelease.sh b/mkrelease.sh
index 14835bb..0ad5661 100644
--- a/mkrelease.sh
+++ b/mkrelease.sh
@@ -8,5 +8,5 @@ make ADDITIONAL_CFLAGS="-DDS81_DISABLE_FAT"
mv ds81.nds ds81-nofat.nds
mv ds81.ds.gba ds81-nofat.ds.gba
-rm -f build/main.*
+rm -f arm9/build/main.*
make