diff options
| -rw-r--r-- | .cvsignore | 1 | ||||
| -rw-r--r-- | Makefile | 147 | ||||
| -rw-r--r-- | arm7/.cvsignore | 2 | ||||
| -rw-r--r-- | arm7/Makefile | 132 | ||||
| -rw-r--r-- | arm7/source/main.c | 178 | ||||
| -rw-r--r-- | arm9/.cvsignore | 2 | ||||
| -rw-r--r-- | arm9/BUILDING | 17 | ||||
| -rw-r--r-- | arm9/CHANGES | 9 | ||||
| -rw-r--r-- | arm9/COPYING | 341 | ||||
| -rw-r--r-- | arm9/Makefile | 85 | ||||
| -rw-r--r-- | arm9/README | 22 | ||||
| -rw-r--r-- | arm9/instructions.txt | 155 | ||||
| -rw-r--r-- | arm9/mkrelease.sh | 12 | ||||
| -rw-r--r-- | mkrelease.sh | 2 | 
14 files changed, 387 insertions, 718 deletions
| @@ -1,5 +1,6 @@  build  *.arm9 +*.arm7  *.ds.gba  *.elf  *.nds @@ -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 | 
