From 90082bd6e19121cae87be17fdd9c01916bd24cbe Mon Sep 17 00:00:00 2001 From: Ian C Date: Tue, 14 Nov 2006 00:57:41 +0000 Subject: Project modified so that seperate ARM7 and ARM9 bits can be compiled. Intended for wifi access. --- .cvsignore | 1 + Makefile | 147 +++++----------------- arm7/.cvsignore | 2 + arm7/Makefile | 132 +++++++++++++++++++ arm7/source/main.c | 178 ++++++++++++++++++++++++++ arm9/.cvsignore | 2 + arm9/BUILDING | 17 --- arm9/CHANGES | 9 -- arm9/COPYING | 341 -------------------------------------------------- arm9/Makefile | 85 +++++++------ arm9/README | 22 ---- arm9/instructions.txt | 155 ----------------------- arm9/mkrelease.sh | 12 -- mkrelease.sh | 2 +- 14 files changed, 387 insertions(+), 718 deletions(-) create mode 100644 arm7/.cvsignore create mode 100644 arm7/Makefile create mode 100644 arm7/source/main.c create mode 100644 arm9/.cvsignore delete mode 100644 arm9/BUILDING delete mode 100644 arm9/CHANGES delete mode 100644 arm9/COPYING delete mode 100644 arm9/README delete mode 100644 arm9/instructions.txt delete mode 100644 arm9/mkrelease.sh 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=devkitARM") +$(error "Please set DEVKITARM in your environment. export DEVKITARM=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=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 + +#include +#include +#include + +#include + + +//--------------------------------------------------------------------------------- +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; icurtime[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; icount; 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. - - - Copyright (C) 19yy - - 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. - - , 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=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 -- cgit v1.2.3