diff --git a/.gitattributes b/.gitattributes
index 7fc4f181a3..952f954b5a 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -6269,6 +6269,8 @@ rtl/gba/cprt0.as svneol=native#text/plain
 rtl/gba/dos.pp svneol=native#text/plain
 rtl/gba/gbabios.inc svneol=native#text/plain
 rtl/gba/gbabiosh.inc svneol=native#text/plain
+rtl/gba/libc.inc svneol=native#text/plain
+rtl/gba/libch.inc svneol=native#text/plain
 rtl/gba/prt0.as svneol=native#text/plain
 rtl/gba/sysdir.inc svneol=native#text/plain
 rtl/gba/sysfile.inc svneol=native#text/plain
diff --git a/packages/libgbafpc/Makefile.fpc b/packages/libgbafpc/Makefile.fpc
index aa8b8bc847..ec7e23d745 100644
--- a/packages/libgbafpc/Makefile.fpc
+++ b/packages/libgbafpc/Makefile.fpc
@@ -3,13 +3,12 @@
 #
 
 [package]
-name=libgbafpc
-version=2.5.1
+version=2.4.0
 
 [target]
 loaders=core_asm
 units=gba maxmod
-exampledirs=examples
+#exampledirs=examples
 
 
 [compiler]
diff --git a/packages/libgbafpc/examples/graphics/ansi_console/console.pp b/packages/libgbafpc/examples/graphics/ansi_console/console.pp
index c8cf3d5935..eb35a56651 100644
--- a/packages/libgbafpc/examples/graphics/ansi_console/console.pp
+++ b/packages/libgbafpc/examples/graphics/ansi_console/console.pp
@@ -2,7 +2,7 @@ program console;
 
 uses
   gba;
-
+           
 begin
   // the vblank interrupt must be enabled for VBlankIntrWait() to work
   // since the default dispatcher handles the bios flags no vblank handler
diff --git a/packages/libgbafpc/src/gba/gba_helper.inc b/packages/libgbafpc/src/gba/gba_helper.inc
index 78d76887f5..4908a7a8f6 100644
--- a/packages/libgbafpc/src/gba/gba_helper.inc
+++ b/packages/libgbafpc/src/gba/gba_helper.inc
@@ -48,7 +48,7 @@
 
 {$ifdef GBA_INTERFACE}
 {$H+}
-
+    (*
 procedure memset16(dest: pointer; hw: word; hwcount: dword); cdecl; external;
 procedure memcpy16(dest: pointer; const src: pointer; hwcount: dword); cdecl; external;
 
@@ -71,7 +71,7 @@ function realloc(ptr: pointer; size: integer): pointer; cdecl; external;
 procedure free(ptr: pointer); cdecl; external;
 function memcpy(dest: pointer; src: pointer; n: integer): pointer; cdecl; external;
 
-(* libc file handling types and routines *)
+
 type
   _FILE = record
     firstCluster: cuint;
@@ -105,7 +105,6 @@ function ftell(stream: P_FILE): longint; cdecl; external;
 function fseek(stream: P_FILE; off: longint; whence: longint): longint; cdecl; external;
 function fclose(stream: P_FILE): longint; cdecl; external;
 
-(* Directory iterator for mantaining state between dir* calls *)
 type
   DIR_ITER = record
     device: cint;
@@ -160,7 +159,7 @@ function diropen(const path: pchar): PDIR_ITER; cdecl; external;
 function dirreset(dirState: PDIR_ITER): cint; cdecl; external;
 function dirnext(dirState: PDIR_ITER; filename: pchar; filestat: Pstat): cint; cdecl; external;
 function dirclose(dirState: PDIR_ITER): cint; cdecl; external;
-
+  *)
 procedure DebugPrint(s: string); assembler; inline;
 function GBAIntToStr(i: integer): string;
 
diff --git a/packages/libgbafpc/src/gba/gba_interrupt.inc b/packages/libgbafpc/src/gba/gba_interrupt.inc
index c888fb3968..37bdb67957 100644
--- a/packages/libgbafpc/src/gba/gba_interrupt.inc
+++ b/packages/libgbafpc/src/gba/gba_interrupt.inc
@@ -49,7 +49,7 @@ type
 
   IntTable = record
     handler: IntFn;
-    mask: u32;
+    mask: cuint32;
   end;
   PIntTable = ^IntTable;
 
@@ -87,7 +87,7 @@ const
 
 var
 //  IntrTable: array [0..MAX_INTS-1] of IntTable; cvar; // cvar used in order to gain access from assembly unit
-  IntrTable: array [0..0] of IntTable; cvar; external;
+  IntrTable: array [0..0] of IntTable; cvar; external;         
 
 procedure irqInit(); cdecl; external;
 
diff --git a/packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile b/packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile
index 9a2e1580f2..0ca6781bbf 100644
--- a/packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile
+++ b/packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile
@@ -1,8 +1,9 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/08/02]
-#
+<<<<<<< .mine# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/04/02]
+=======# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/09/29]
+>>>>>>> .theirs#
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
+MAKEFILETARGETS=arm-nds
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx
 LIMIT83fs = go32v2 os2 emx watcom
@@ -59,11 +60,9 @@ endif
 endif
 ifdef COMSPEC
 ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
-ifndef RUNBATCH
 RUNBATCH=$(COMSPEC) /C
 endif
 endif
-endif
 ifdef inUnix
 PATHSEP=/
 else
@@ -175,17 +174,6 @@ OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
 endif
 FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
 FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
-ifeq ($(CPU_TARGET),armeb)
-ARCH=arm
-override FPCOPT+=-Cb
-else
-ifeq ($(CPU_TARGET),armel)
-ARCH=arm
-override FPCOPT+=-CaEABI
-else
-ARCH=$(CPU_TARGET)
-endif
-endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 TARGETSUFFIX=$(OS_TARGET)
 SOURCESUFFIX=$(OS_SOURCE)
@@ -207,7 +195,7 @@ endif
 ifeq ($(OS_TARGET),linux)
 linuxHier=1
 endif
-export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
 ifdef FPCDIR
 override FPCDIR:=$(subst \,/,$(FPCDIR))
 ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
@@ -269,701 +257,17 @@ PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(F
 BUILD = build
 AUDIO_FILES = $(foreach dir,$(notdir $(wildcard audio/*.*)),$(CURDIR)/audio/$(dir))
 GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.png)))
-ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_PROGRAMS+=audio_modes
-endif
 ifeq ($(FULL_TARGET),arm-nds)
 override TARGET_PROGRAMS+=audio_modes
 endif
-ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_PROGRAMS+=audio_modes
-endif
-ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
 ifeq ($(FULL_TARGET),arm-nds)
 override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
 endif
-ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-haiku)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-darwin)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-wince)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),x86_64-darwin)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),arm-palmos)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),arm-wince)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),arm-gba)
-override CLEAN_UNITS+=*
-endif
 ifeq ($(FULL_TARGET),arm-nds)
 override CLEAN_UNITS+=*
 endif
-ifeq ($(FULL_TARGET),arm-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc64-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-haiku)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-darwin)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-wince)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),x86_64-darwin)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),arm-palmos)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),arm-wince)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),arm-gba)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
 ifeq ($(FULL_TARGET),arm-nds)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),arm-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc64-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
+override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin *.map $(BUILD)/* $(INC)/*
 endif
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
@@ -1184,7 +488,6 @@ endif
 ifeq ($(OS_TARGET),go32v2)
 STATICLIBPREFIX=
 SHORTSUFFIX=dos
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),watcom)
 STATICLIBPREFIX=
@@ -1192,7 +495,6 @@ OEXT=.obj
 ASMEXT=.asm
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=wat
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),linux)
 BATCHEXT=.sh
@@ -1229,7 +531,6 @@ STATICLIBPREFIX=
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=os2
 ECHO=echo
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),emx)
 BATCHEXT=.cmd
@@ -1238,7 +539,6 @@ STATICLIBPREFIX=
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=emx
 ECHO=echo
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),amiga)
 EXEEXT=
@@ -1259,11 +559,6 @@ BATCHEXT=.sh
 EXEEXT=
 SHORTSUFFIX=be
 endif
-ifeq ($(OS_TARGET),haiku)
-BATCHEXT=.sh
-EXEEXT=
-SHORTSUFFIX=hai
-endif
 ifeq ($(OS_TARGET),solaris)
 BATCHEXT=.sh
 EXEEXT=
@@ -1278,20 +573,17 @@ ifeq ($(OS_TARGET),netware)
 EXEEXT=.nlm
 STATICLIBPREFIX=
 SHORTSUFFIX=nw
-IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),netwlibc)
 EXEEXT=.nlm
 STATICLIBPREFIX=
 SHORTSUFFIX=nwl
-IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
 EXEEXT=
 DEBUGSYMEXT=.xcoff
 SHORTSUFFIX=mac
-IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),darwin)
 BATCHEXT=.sh
@@ -1318,17 +610,14 @@ STATICLIBEXT=.a1
 SHAREDLIBEXT=.so1
 STATICLIBPREFIX=
 SHORTSUFFIX=v1
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),go32v2)
 STATICLIBPREFIX=
 SHORTSUFFIX=dos
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),watcom)
 STATICLIBPREFIX=
 SHORTSUFFIX=wat
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),linux)
 BATCHEXT=.sh
@@ -1375,7 +664,6 @@ STATICLIBEXT=.ao2
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=os2
 ECHO=echo
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),amiga)
 EXEEXT=
@@ -1436,7 +724,6 @@ STATICLIBEXT=.a
 SHAREDLIBEXT=.nlm
 EXEEXT=.nlm
 SHORTSUFFIX=nw
-IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),netwlibc)
 STATICLIBPREFIX=
@@ -1448,7 +735,6 @@ STATICLIBEXT=.a
 SHAREDLIBEXT=.nlm
 EXEEXT=.nlm
 SHORTSUFFIX=nwl
-IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
@@ -1460,7 +746,6 @@ STATICLIBEXT=.a
 EXEEXT=
 DEBUGSYMEXT=.xcoff
 SHORTSUFFIX=mac
-IMPORTLIBPREFIX=imp
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1733,180 +1018,9 @@ TAROPT=vz
 TAREXT=.tar.gz
 endif
 override REQUIRE_PACKAGES=libndsfpc
-ifeq ($(FULL_TARGET),i386-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-haiku)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-darwin)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-wince)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-darwin)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),arm-palmos)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),arm-wince)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),arm-gba)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
 ifeq ($(FULL_TARGET),arm-nds)
 REQUIRE_PACKAGES_LIBNDSFPC=1
 endif
-ifeq ($(FULL_TARGET),arm-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc64-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
 ifdef REQUIRE_PACKAGES_LIBNDSFPC
 PACKAGEDIR_LIBNDSFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Makefile.fpc,$(PACKAGESDIR))))))
 ifneq ($(PACKAGEDIR_LIBNDSFPC),)
@@ -1934,13 +1048,13 @@ override COMPILER_UNITDIR+=$(UNITDIR_LIBNDSFPC)
 endif
 endif
 ifndef NOCPUDEF
-override FPCOPTDEF=$(ARCH)
+override FPCOPTDEF=$(CPU_TARGET)
 endif
 ifneq ($(OS_TARGET),$(OS_SOURCE))
 override FPCOPT+=-T$(OS_TARGET)
 endif
 ifneq ($(CPU_TARGET),$(CPU_SOURCE))
-override FPCOPT+=-P$(ARCH)
+override FPCOPT+=-P$(CPU_TARGET)
 endif
 ifeq ($(OS_SOURCE),openbsd)
 override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
diff --git a/packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile.fpc b/packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile.fpc
index 2c4810ef2e..497065f320 100644
--- a/packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile.fpc
+++ b/packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile.fpc
@@ -20,9 +20,8 @@ target=nds
 fpcdir=../../../../../..
 
 [clean]
-files=*.elf *.o *.s *.nds *.nef *.h *.bin *.map \
-       $(BUILD)/* \
-       $(INC)/*
+files=*.elf *.o *.s *.nds *.nef *.h *.bin \
+       $(BUILD)/*
 units=*
 
 [prerules]
@@ -32,17 +31,9 @@ GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.png)))
 
 [rules]
 .NOTPARALLEL:
-clean: dir_delete fpc_clean fpc_cleanall
 all: direc fpc_all 
-
-#
-# Delete temp directories
-#
-dir_delete:
-        @$(DELTREE) $(CURDIR)/$(BUILD)
-        @$(DELTREE) $(CURDIR)/$(INC)
-
-direc:
+<<<<<<< .mine=======
+>>>>>>> .theirsdirec:
 ifneq ($(BUILD), $(CURDIR))
         $(MKDIR) $(BUILD)
 endif
diff --git a/packages/libndsfpc/examples/audio/maxmod/basic_sound/Makefile b/packages/libndsfpc/examples/audio/maxmod/basic_sound/Makefile
index 822986a4bd..41da81fc9f 100644
--- a/packages/libndsfpc/examples/audio/maxmod/basic_sound/Makefile
+++ b/packages/libndsfpc/examples/audio/maxmod/basic_sound/Makefile
@@ -1,8 +1,9 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/08/02]
-#
+<<<<<<< .mine# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/04/02]
+=======# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/09/29]
+>>>>>>> .theirs#
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
+MAKEFILETARGETS=arm-nds
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx
 LIMIT83fs = go32v2 os2 emx watcom
@@ -59,11 +60,9 @@ endif
 endif
 ifdef COMSPEC
 ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
-ifndef RUNBATCH
 RUNBATCH=$(COMSPEC) /C
 endif
 endif
-endif
 ifdef inUnix
 PATHSEP=/
 else
@@ -175,17 +174,6 @@ OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
 endif
 FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
 FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
-ifeq ($(CPU_TARGET),armeb)
-ARCH=arm
-override FPCOPT+=-Cb
-else
-ifeq ($(CPU_TARGET),armel)
-ARCH=arm
-override FPCOPT+=-CaEABI
-else
-ARCH=$(CPU_TARGET)
-endif
-endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 TARGETSUFFIX=$(OS_TARGET)
 SOURCESUFFIX=$(OS_SOURCE)
@@ -207,7 +195,7 @@ endif
 ifeq ($(OS_TARGET),linux)
 linuxHier=1
 endif
-export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
 ifdef FPCDIR
 override FPCDIR:=$(subst \,/,$(FPCDIR))
 ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
@@ -269,876 +257,21 @@ PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(F
 BUILD = build
 AUDIO_FILES = $(foreach dir,$(notdir $(wildcard audio/*.*)),$(CURDIR)/audio/$(dir))
 GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.png)))
-ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_PROGRAMS+=basic_sound
-endif
 ifeq ($(FULL_TARGET),arm-nds)
 override TARGET_PROGRAMS+=basic_sound
 endif
-ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_PROGRAMS+=basic_sound
-endif
-ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
 ifeq ($(FULL_TARGET),arm-nds)
 override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
 endif
-ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_LOADERS+=soundbank.bin $(GFX_FILES)
-endif
-ifeq ($(FULL_TARGET),i386-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-haiku)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-darwin)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-wince)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),x86_64-darwin)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),arm-palmos)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),arm-wince)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),arm-gba)
-override CLEAN_UNITS+=*
-endif
 ifeq ($(FULL_TARGET),arm-nds)
 override CLEAN_UNITS+=*
 endif
-ifeq ($(FULL_TARGET),arm-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc64-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override CLEAN_UNITS+=*
-endif
-ifeq ($(FULL_TARGET),i386-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-haiku)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-darwin)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-wince)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),x86_64-darwin)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),arm-palmos)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),arm-wince)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),arm-gba)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
 ifeq ($(FULL_TARGET),arm-nds)
 override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
 endif
-ifeq ($(FULL_TARGET),arm-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc64-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
-endif
 override INSTALL_FPCPACKAGE=y
-ifeq ($(FULL_TARGET),i386-linux)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-haiku)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-darwin)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-wince)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-embedded)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),x86_64-darwin)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),arm-palmos)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),arm-wince)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),arm-gba)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
 ifeq ($(FULL_TARGET),arm-nds)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),arm-embedded)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),powerpc64-linux)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override COMPILER_OPTIONS+=-g -O2 -d__THUMB__
+override COMPILER_OPTIONS+=-g -O2
 endif
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -1358,7 +491,6 @@ endif
 ifeq ($(OS_TARGET),go32v2)
 STATICLIBPREFIX=
 SHORTSUFFIX=dos
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),watcom)
 STATICLIBPREFIX=
@@ -1366,7 +498,6 @@ OEXT=.obj
 ASMEXT=.asm
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=wat
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),linux)
 BATCHEXT=.sh
@@ -1403,7 +534,6 @@ STATICLIBPREFIX=
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=os2
 ECHO=echo
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),emx)
 BATCHEXT=.cmd
@@ -1412,7 +542,6 @@ STATICLIBPREFIX=
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=emx
 ECHO=echo
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),amiga)
 EXEEXT=
@@ -1433,11 +562,6 @@ BATCHEXT=.sh
 EXEEXT=
 SHORTSUFFIX=be
 endif
-ifeq ($(OS_TARGET),haiku)
-BATCHEXT=.sh
-EXEEXT=
-SHORTSUFFIX=hai
-endif
 ifeq ($(OS_TARGET),solaris)
 BATCHEXT=.sh
 EXEEXT=
@@ -1452,20 +576,17 @@ ifeq ($(OS_TARGET),netware)
 EXEEXT=.nlm
 STATICLIBPREFIX=
 SHORTSUFFIX=nw
-IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),netwlibc)
 EXEEXT=.nlm
 STATICLIBPREFIX=
 SHORTSUFFIX=nwl
-IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
 EXEEXT=
 DEBUGSYMEXT=.xcoff
 SHORTSUFFIX=mac
-IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),darwin)
 BATCHEXT=.sh
@@ -1492,17 +613,14 @@ STATICLIBEXT=.a1
 SHAREDLIBEXT=.so1
 STATICLIBPREFIX=
 SHORTSUFFIX=v1
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),go32v2)
 STATICLIBPREFIX=
 SHORTSUFFIX=dos
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),watcom)
 STATICLIBPREFIX=
 SHORTSUFFIX=wat
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),linux)
 BATCHEXT=.sh
@@ -1549,7 +667,6 @@ STATICLIBEXT=.ao2
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=os2
 ECHO=echo
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),amiga)
 EXEEXT=
@@ -1610,7 +727,6 @@ STATICLIBEXT=.a
 SHAREDLIBEXT=.nlm
 EXEEXT=.nlm
 SHORTSUFFIX=nw
-IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),netwlibc)
 STATICLIBPREFIX=
@@ -1622,7 +738,6 @@ STATICLIBEXT=.a
 SHAREDLIBEXT=.nlm
 EXEEXT=.nlm
 SHORTSUFFIX=nwl
-IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
@@ -1634,7 +749,6 @@ STATICLIBEXT=.a
 EXEEXT=
 DEBUGSYMEXT=.xcoff
 SHORTSUFFIX=mac
-IMPORTLIBPREFIX=imp
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1907,180 +1021,9 @@ TAROPT=vz
 TAREXT=.tar.gz
 endif
 override REQUIRE_PACKAGES=libndsfpc
-ifeq ($(FULL_TARGET),i386-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-haiku)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-darwin)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-wince)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-darwin)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),arm-palmos)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),arm-wince)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),arm-gba)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
 ifeq ($(FULL_TARGET),arm-nds)
 REQUIRE_PACKAGES_LIBNDSFPC=1
 endif
-ifeq ($(FULL_TARGET),arm-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc64-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-REQUIRE_PACKAGES_LIBNDSFPC=1
-endif
 ifdef REQUIRE_PACKAGES_LIBNDSFPC
 PACKAGEDIR_LIBNDSFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Makefile.fpc,$(PACKAGESDIR))))))
 ifneq ($(PACKAGEDIR_LIBNDSFPC),)
@@ -2108,13 +1051,13 @@ override COMPILER_UNITDIR+=$(UNITDIR_LIBNDSFPC)
 endif
 endif
 ifndef NOCPUDEF
-override FPCOPTDEF=$(ARCH)
+override FPCOPTDEF=$(CPU_TARGET)
 endif
 ifneq ($(OS_TARGET),$(OS_SOURCE))
 override FPCOPT+=-T$(OS_TARGET)
 endif
 ifneq ($(CPU_TARGET),$(CPU_SOURCE))
-override FPCOPT+=-P$(ARCH)
+override FPCOPT+=-P$(CPU_TARGET)
 endif
 ifeq ($(OS_SOURCE),openbsd)
 override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
diff --git a/packages/libndsfpc/examples/audio/maxmod/basic_sound/Makefile.fpc b/packages/libndsfpc/examples/audio/maxmod/basic_sound/Makefile.fpc
index 14071c506e..f0f2a43d11 100644
--- a/packages/libndsfpc/examples/audio/maxmod/basic_sound/Makefile.fpc
+++ b/packages/libndsfpc/examples/audio/maxmod/basic_sound/Makefile.fpc
@@ -20,7 +20,7 @@ target=nds
 fpcdir=../../../../../..
 
 [compiler]
-options=-g -O2 -d__THUMB__
+options=-g -O2
 
 [clean]
 files=*.elf *.o *.s *.nds *.nef *.h *.bin \
diff --git a/packages/libndsfpc/examples/audio/maxmod/song_events_example2/song_events_example2.pp b/packages/libndsfpc/examples/audio/maxmod/song_events_example2/song_events_example2.pp
index 279ab05574..fa1db5dd14 100644
--- a/packages/libndsfpc/examples/audio/maxmod/song_events_example2/song_events_example2.pp
+++ b/packages/libndsfpc/examples/audio/maxmod/song_events_example2/song_events_example2.pp
@@ -37,8 +37,9 @@ var
   sprites: array[0..4] of MySprite;
 
 
-function myEventHandler(msg, param: mm_word): mm_callback;
-begin
+<<<<<<< .minefunction myEventHandler(msg, param: mm_word): mm_word;
+=======function myEventHandler(msg, param: mm_word): pmm_word;
+>>>>>>> .theirsbegin
   case msg of
     MMCB_SONGMESSAGE:	// process song messages
     begin
@@ -50,7 +51,7 @@ begin
     end;
     MMCB_SONGFINISHED:;	// process song finish message (only triggered in songs played with MM_PLAY_ONCE)
   end;
-  result := nil;
+  result := 0;
 end;
 
 
diff --git a/packages/libndsfpc/examples/debugging/exceptionTest/exceptionTest.pp b/packages/libndsfpc/examples/debugging/exceptionTest/exceptionTest.pp
index 8ddd5e6cbd..4c0019073f 100644
--- a/packages/libndsfpc/examples/debugging/exceptionTest/exceptionTest.pp
+++ b/packages/libndsfpc/examples/debugging/exceptionTest/exceptionTest.pp
@@ -16,7 +16,7 @@ begin
   defaultExceptionHandler();
 
   // generate an exception
-  pu32(250)^ := 100;
+  pu32(8192)^ := 100;
   
   while true do
     swiWaitForVBlank();
diff --git a/packages/libndsfpc/src/dswifi/inc/dswifi_version.inc b/packages/libndsfpc/src/dswifi/inc/dswifi_version.inc
index 5f63b54571..feed113dee 100644
--- a/packages/libndsfpc/src/dswifi/inc/dswifi_version.inc
+++ b/packages/libndsfpc/src/dswifi/inc/dswifi_version.inc
@@ -2,6 +2,6 @@
 const
   DSWIFI_MAJOR    = 0;
   DSWIFI_MINOR    = 3;
-  DSWIFI_REVISION = 6;
-  DSWIFI_VERSION  = '0.3.6';
+  DSWIFI_REVISION = 11;
+  DSWIFI_VERSION  = '0.3.11';
 {$endif NDS_INTERFACE}
diff --git a/packages/libndsfpc/src/fat/fat.inc b/packages/libndsfpc/src/fat/fat.inc
index 95c2e3b755..2ceb3ffaca 100644
--- a/packages/libndsfpc/src/fat/fat.inc
+++ b/packages/libndsfpc/src/fat/fat.inc
@@ -41,7 +41,7 @@
 function fatInit(cacheSize: cuint32; setAsDefaultDevice: cbool): cbool; cdecl; external;
 function fatInitDefault(): cbool; cdecl; external;
 function fatMountSimple (const name: pcchar; const ainterface: PDISC_INTERFACE): cbool; cdecl; external;
-function fatMount (const name: pcchar; const ainterface: PDISC_INTERFACE; startSector, cacheSize: cuint32): cbool; cdecl; external;
+function fatMount (const name: pcchar; const ainterface: PDISC_INTERFACE; startSector, cacheSize, SectorsPerPage: cuint32): cbool; cdecl; external;
 function fatUnmount(const name: pcchar): cbool; cdecl; external;
 {$endif NDS_INTERFACE}
 
diff --git a/packages/libndsfpc/src/nds/arm9/exceptions.inc b/packages/libndsfpc/src/nds/arm9/exceptions.inc
index 5dc10c5329..3bd8f4d2e2 100644
--- a/packages/libndsfpc/src/nds/arm9/exceptions.inc
+++ b/packages/libndsfpc/src/nds/arm9/exceptions.inc
@@ -40,7 +40,7 @@
 
 {$ifdef NDS_INTERFACE}
 const
-  EXCEPTION_VECTOR : ^VoidFunctionPointer = pointer($27FFD9C);
+  EXCEPTION_VECTOR : ^VoidFunctionPointer = pointer($2FFFD9C);
 
 var
   exceptionC: ^VoidFunctionPointer; cvar; external;
diff --git a/packages/libndsfpc/src/nds/memory.inc b/packages/libndsfpc/src/nds/memory.inc
index 2f3f7964ac..ac5387452f 100644
--- a/packages/libndsfpc/src/nds/memory.inc
+++ b/packages/libndsfpc/src/nds/memory.inc
@@ -160,7 +160,7 @@ type
   pNDSHeader = ^tNDSHeader;
   
 const
-  __NDSHeader : pNDSHeader = pointer($027FFE00);
+  __NDSHeader : pNDSHeader = pointer($02FFFE00);
 
 
 type
@@ -216,21 +216,19 @@ end;
 // Changes all bus ownerships
 procedure sysSetBusOwners(arm9rom, arm9card: cbool); inline;
 var
-  pattern: cuint16;
-  a9r, a9c: cint;
+  val1, val2: cuint;
 begin
-  pattern := REG_EXMEMCNT^ and not (ARM7_OWNS_CARD or ARM7_OWNS_ROM);
-  if arm9card then
-    a9c := 0 
-  else
-    a9c := ARM7_OWNS_CARD;
-  if arm9rom then
-    a9r := 0 
-  else
-    a9r := ARM7_OWNS_ROM;
-
-  pattern := pattern or (a9c) or (a9r);
-  REG_EXMEMCNT^ := pattern;
+  val1 := 0;
+  val2 := 0;
+  if not arm9card then
+    val1 := ARM7_OWNS_CARD; 
+  
+  if not arm9rom then
+    val2 := ARM7_OWNS_ROM ;
+    
+  REG_EXMEMCNT^ := (REG_EXMEMCNT^ and not(ARM7_OWNS_CARD or ARM7_OWNS_ROM)) or val1 or val2;
 end;
+
+
 {$endif NDS_IMPLEMENTATION}
 {$endif ARM9}
diff --git a/packages/libndsfpc/src/nds/system.inc b/packages/libndsfpc/src/nds/system.inc
index 8442e11fa0..3ba1e11c37 100644
--- a/packages/libndsfpc/src/nds/system.inc
+++ b/packages/libndsfpc/src/nds/system.inc
@@ -200,7 +200,7 @@ type
 const
   REG_KEYINPUT	: pcuint16 = pointer($04000130);
   REG_KEYCNT		: pcuint16 = pointer($04000132);
-  PersonalData  : PPERSONAL_DATA = pointer($27FFC80);
+  PersonalData  : PPERSONAL_DATA = pointer($2FFFC80);
 
 
 type 
@@ -216,7 +216,7 @@ type
   Pargv = ^Targv;
 
 const
-  __system_argv: Pargv = pointer($027FFF70);
+  __system_argv: Pargv = pointer($02FFFE70);
   ARGV_MAGIC = $5f617267;
   
 
@@ -232,6 +232,13 @@ type
     padding: cuint8;
   end;
 
+
+{$ifdef ARM9}
+procedure memCached(address: pointer); cdecl; external;
+procedure memUncached(address: pointer); cdecl; external;
+{$endif ARM9}
+
+
 {$endif NDS_INTERFACE}
 
 {$ifdef NDS_IMPLEMENTATION}
diff --git a/rtl/gba/Makefile b/rtl/gba/Makefile
index 12d9d388b3..354a328243 100644
--- a/rtl/gba/Makefile
+++ b/rtl/gba/Makefile
@@ -1,8 +1,8 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/08/02]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/09/29]
 #
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx
 LIMIT83fs = go32v2 os2 emx watcom
@@ -59,11 +59,9 @@ endif
 endif
 ifdef COMSPEC
 ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
-ifndef RUNBATCH
 RUNBATCH=$(COMSPEC) /C
 endif
 endif
-endif
 ifdef inUnix
 PATHSEP=/
 else
@@ -175,17 +173,6 @@ OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
 endif
 FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
 FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
-ifeq ($(CPU_TARGET),armeb)
-ARCH=arm
-override FPCOPT+=-Cb
-else
-ifeq ($(CPU_TARGET),armel)
-ARCH=arm
-override FPCOPT+=-CaEABI
-else
-ARCH=$(CPU_TARGET)
-endif
-endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 TARGETSUFFIX=$(OS_TARGET)
 SOURCESUFFIX=$(OS_SOURCE)
@@ -207,7 +194,7 @@ endif
 ifeq ($(OS_TARGET),linux)
 linuxHier=1
 endif
-export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
 ifdef FPCDIR
 override FPCDIR:=$(subst \,/,$(FPCDIR))
 ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
@@ -274,185 +261,169 @@ COMMON=$(RTL)/common
 PROCINC=$(RTL)/$(CPU_TARGET)
 UNITPREFIX=rtl
 SYSTEMUNIT=system
-BINUTILSPREFIX=arm-eabi-
 ifdef RELEASE
 override FPCOPT+=-Ur
 endif
 OBJPASDIR=$(RTL)/objpas
 GRAPHDIR=$(INC)/graph
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
-endif
-ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 override TARGET_LOADERS+=prt0 cprt0
@@ -472,9 +443,6 @@ endif
 ifeq ($(FULL_TARGET),i386-beos)
 override TARGET_LOADERS+=prt0 cprt0
 endif
-ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_LOADERS+=prt0 cprt0
-endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 override TARGET_LOADERS+=prt0 cprt0
 endif
@@ -592,9 +560,6 @@ endif
 ifeq ($(FULL_TARGET),arm-palmos)
 override TARGET_LOADERS+=prt0 cprt0
 endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_LOADERS+=prt0 cprt0
-endif
 ifeq ($(FULL_TARGET),arm-wince)
 override TARGET_LOADERS+=prt0 cprt0
 endif
@@ -619,15 +584,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 override TARGET_LOADERS+=prt0 cprt0
 endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_LOADERS+=prt0 cprt0
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_LOADERS+=prt0 cprt0
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_LOADERS+=prt0 cprt0
-endif
 override INSTALL_FPCPACKAGE=y
 ifeq ($(FULL_TARGET),i386-linux)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
@@ -647,9 +603,6 @@ endif
 ifeq ($(FULL_TARGET),i386-beos)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 endif
-ifeq ($(FULL_TARGET),i386-haiku)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
-endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 endif
@@ -767,9 +720,6 @@ endif
 ifeq ($(FULL_TARGET),arm-palmos)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
-endif
 ifeq ($(FULL_TARGET),arm-wince)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 endif
@@ -794,15 +744,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
-endif
 ifeq ($(FULL_TARGET),i386-linux)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 endif
@@ -821,9 +762,6 @@ endif
 ifeq ($(FULL_TARGET),i386-beos)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 endif
-ifeq ($(FULL_TARGET),i386-haiku)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
-endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 endif
@@ -941,9 +879,6 @@ endif
 ifeq ($(FULL_TARGET),arm-palmos)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
-endif
 ifeq ($(FULL_TARGET),arm-wince)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 endif
@@ -968,15 +903,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
-endif
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 endif
@@ -1195,7 +1121,6 @@ endif
 ifeq ($(OS_TARGET),go32v2)
 STATICLIBPREFIX=
 SHORTSUFFIX=dos
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),watcom)
 STATICLIBPREFIX=
@@ -1203,7 +1128,6 @@ OEXT=.obj
 ASMEXT=.asm
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=wat
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),linux)
 BATCHEXT=.sh
@@ -1240,7 +1164,6 @@ STATICLIBPREFIX=
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=os2
 ECHO=echo
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),emx)
 BATCHEXT=.cmd
@@ -1249,7 +1172,6 @@ STATICLIBPREFIX=
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=emx
 ECHO=echo
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),amiga)
 EXEEXT=
@@ -1270,11 +1192,6 @@ BATCHEXT=.sh
 EXEEXT=
 SHORTSUFFIX=be
 endif
-ifeq ($(OS_TARGET),haiku)
-BATCHEXT=.sh
-EXEEXT=
-SHORTSUFFIX=hai
-endif
 ifeq ($(OS_TARGET),solaris)
 BATCHEXT=.sh
 EXEEXT=
@@ -1289,20 +1206,17 @@ ifeq ($(OS_TARGET),netware)
 EXEEXT=.nlm
 STATICLIBPREFIX=
 SHORTSUFFIX=nw
-IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),netwlibc)
 EXEEXT=.nlm
 STATICLIBPREFIX=
 SHORTSUFFIX=nwl
-IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
 EXEEXT=
 DEBUGSYMEXT=.xcoff
 SHORTSUFFIX=mac
-IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),darwin)
 BATCHEXT=.sh
@@ -1329,17 +1243,14 @@ STATICLIBEXT=.a1
 SHAREDLIBEXT=.so1
 STATICLIBPREFIX=
 SHORTSUFFIX=v1
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),go32v2)
 STATICLIBPREFIX=
 SHORTSUFFIX=dos
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),watcom)
 STATICLIBPREFIX=
 SHORTSUFFIX=wat
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),linux)
 BATCHEXT=.sh
@@ -1386,7 +1297,6 @@ STATICLIBEXT=.ao2
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=os2
 ECHO=echo
-IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),amiga)
 EXEEXT=
@@ -1447,7 +1357,6 @@ STATICLIBEXT=.a
 SHAREDLIBEXT=.nlm
 EXEEXT=.nlm
 SHORTSUFFIX=nw
-IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),netwlibc)
 STATICLIBPREFIX=
@@ -1459,7 +1368,6 @@ STATICLIBEXT=.a
 SHAREDLIBEXT=.nlm
 EXEEXT=.nlm
 SHORTSUFFIX=nwl
-IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
@@ -1471,7 +1379,6 @@ STATICLIBEXT=.a
 EXEEXT=
 DEBUGSYMEXT=.xcoff
 SHORTSUFFIX=mac
-IMPORTLIBPREFIX=imp
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1744,13 +1651,13 @@ TAROPT=vz
 TAREXT=.tar.gz
 endif
 ifndef NOCPUDEF
-override FPCOPTDEF=$(ARCH)
+override FPCOPTDEF=$(CPU_TARGET)
 endif
 ifneq ($(OS_TARGET),$(OS_SOURCE))
 override FPCOPT+=-T$(OS_TARGET)
 endif
 ifneq ($(CPU_TARGET),$(CPU_SOURCE))
-override FPCOPT+=-P$(ARCH)
+override FPCOPT+=-P$(CPU_TARGET)
 endif
 ifeq ($(OS_SOURCE),openbsd)
 override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
@@ -2329,6 +2236,7 @@ ucomplex$(PPUEXT): $(INC)/ucomplex.pp math$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
 getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
 heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
 	$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
+lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
 charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMUNIT)$(PPUEXT)
 exec$(PPUEXT)    : exec.pp execf.inc execd.inc
 timer$(PPUEXT)   : timer.pp timerd.inc timerf.inc
diff --git a/rtl/gba/Makefile.fpc b/rtl/gba/Makefile.fpc
index addf530500..3b263aef10 100644
--- a/rtl/gba/Makefile.fpc
+++ b/rtl/gba/Makefile.fpc
@@ -12,10 +12,10 @@ units=$(SYSTEMUNIT) objpas macpas strings \
       sysutils \
       classes math typinfo varutils fmtbcd ctypes \
       charset ucomplex getopts matrix \
-      variants types rtlconsts sysconst dateutil fgl \
+      variants types rtlconsts sysconst dateutil lineinfo fgl \
 #      exec timer doslib utility hardware inputevent graphics layers \
 # these can be moved to packages later
-#      clipboard datatypes asl ahi tinygl get9 muihelper lineinfo \
+#      clipboard datatypes asl ahi tinygl get9 muihelper  \
 #rsts=math rtlconsts varutils typinfo variants classes sysconst dateutil
 # implicitunits=exeinfo
 
@@ -42,7 +42,6 @@ COMMON=$(RTL)/common
 PROCINC=$(RTL)/$(CPU_TARGET)
 UNITPREFIX=rtl
 SYSTEMUNIT=system
-BINUTILSPREFIX=arm-eabi-
 
 # Use new feature from 1.0.5 version
 # that generates release PPU files
@@ -179,7 +178,7 @@ getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
 heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
         $(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
 
-#lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
+lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
 #lnfodwrf$(PPUEXT) : $(INC)/lnfodwrf.pp $(SYSTEMUNIT)$(PPUEXT)
 
 charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMUNIT)$(PPUEXT)
diff --git a/rtl/gba/libc.inc b/rtl/gba/libc.inc
new file mode 100644
index 0000000000..15ced61e7a
--- /dev/null
+++ b/rtl/gba/libc.inc
@@ -0,0 +1,56 @@
+{
+    This file is part of the Free Component Library (FCL)
+    Copyright (c) 1999-2002 by the Free Pascal development team
+
+    BIOS functions unit for Nintendo DS
+    Copyright (c) 2006 by Francesco Lombardi
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    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.
+
+ *****************************************************************************}
+
+function __errno: plongint;  cdecl; export;
+begin
+
+end;
+
+
+function S_ISBLK(m: longint): boolean; inline;
+begin
+  result := (m and _IFMT) = _IFBLK;
+end;
+
+function S_ISCHR(m: longint): boolean; inline;
+begin
+  result := (m and _IFMT) = _IFCHR;
+end;
+
+function S_ISDIR(m: longint): boolean; inline;
+begin
+  result := (m and _IFMT) = _IFDIR;
+end;
+
+function S_ISFIFO(m: longint): boolean; inline;
+begin
+  result := (m and _IFMT) = _IFIFO;
+end;
+
+function S_ISREG(m: longint): boolean; inline;
+begin
+  result := (m and _IFMT) = _IFREG;
+end;
+
+function S_ISLNK(m: longint): boolean; inline;
+begin
+  result := (m and _IFMT) = _IFLNK;
+end;
+
+function S_ISSOCK(m: longint): boolean; inline;
+begin
+  result := (m and _IFMT) = _IFSOCK;
+end;
diff --git a/rtl/gba/libch.inc b/rtl/gba/libch.inc
new file mode 100644
index 0000000000..d72e5508d6
--- /dev/null
+++ b/rtl/gba/libch.inc
@@ -0,0 +1,199 @@
+{
+    This file is part of the Free Component Library (FCL)
+    Copyright (c) 1999-2002 by the Free Pascal development team
+
+    BIOS functions unit for Nintendo DS
+    Copyright (c) 2006 by Francesco Lombardi
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    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.
+
+ *****************************************************************************}
+
+type
+  time_t = longint;
+  ptime_t = ^time_t;
+
+  Ptm = ^tm;
+  tm = record
+    tm_sec: longint;
+    tm_min: longint;
+    tm_hour: longint;
+    tm_mday: longint;
+    tm_mon: longint;
+    tm_year: longint;
+    tm_wday: longint;
+    tm_yday: longint;
+    tm_isdst: longint;
+  end;
+
+
+(* Some libc functions *)
+//function printf(format: Pchar; args: array of const): longint; cdecl; external;
+function printf(format: Pchar): longint; cdecl; varargs; external;
+//function sprintf(s: Pchar; format: Pchar; args: array of const): longint; cdecl; external;
+function sprintf(s: Pchar; format: Pchar): longint; varargs; cdecl; external;
+//function iprintf(format: Pchar; args: array of const): longint; cdecl; external;
+function iprintf(format: Pchar): longint; varargs; cdecl; external;
+//function scanf(format: Pchar; args: array of const): longint; cdecl; external;
+function scanf(format: Pchar): longint; cdecl; varargs; external;
+//function sscanf(s: Pchar; format: Pchar; args: array of const): longint; cdecl; external;
+function sscanf(s: Pchar; format: Pchar): longint; cdecl; varargs; external;
+function strcmp(s1: Pchar; s2: Pchar): longint; cdecl; external;
+
+function malloc(size: integer): pointer; cdecl; external;
+function realloc(ptr: pointer; size: integer): pointer; cdecl; external;
+procedure free(ptr: pointer); cdecl; external;
+function memcpy(dest: pointer; src: pointer; n: integer): pointer; cdecl; external;
+
+function gmtime(timer: ptime_t): ptm; cdecl; external;
+function time(timer: ptime_t): time_t; cdecl; external;
+
+type
+  TSort = function (const a, b: pointer): integer;
+procedure qsort(__base: pointer; __nmemb: integer; __size: integer; __compar: TSort); cdecl; external;
+
+function __errno: plongint; cdecl; export;
+
+type
+  _FILE = record
+    firstCluster: longword;
+    length: longword;
+    curPos: longword;
+    curClus: longword;                       // Current cluster to read from
+    curSect: integer;                     // Current sector within cluster
+    curByte: integer;                     // Current byte within sector
+    readBuffer: array [0..511] of byte;   // Buffer used for unaligned reads
+    appClus: longword;                       // Cluster to append to
+    appSect: integer;                     // Sector within cluster for appending
+    appByte: integer;                     // Byte within sector for appending
+    read: boolean;                        // Can read from file
+    write: boolean;                       // Can write to file
+    append: boolean;                      // Can append to file
+    inUse: boolean;                       // This file is open
+    dirEntSector: longword;                  // The sector where the directory entry is stored
+    dirEntOffset: integer;                // The offset within the directory sector
+  end;
+  P_FILE = ^_FILE;
+
+const
+  SEEK_SET = 0;
+  SEEK_CUR = 1;
+  SEEK_END = 2;
+
+(*
+  ------------------------------------------------------------------------------
+    Directory iterator for mantaining state between dir* calls
+  ------------------------------------------------------------------------------
+*)
+type
+  DIR_ITER = record
+    device: longint;
+    dirStruct: pointer;
+  end;
+  PDIR_ITER = ^DIR_ITER;
+
+  stat = packed record
+    st_dev: longint;
+    st_ino: longword;
+    st_mode : longword;
+    st_nlink : word;
+    st_uid : word;
+    st_gid : word;
+    st_rdev : longint;
+    st_size : longint;
+    st_atime : longint;
+
+    st_spare1: longint;
+    st_mtime: longint;
+    st_spare2: longint;
+    st_ctime: longint;
+    st_spare3: longint;
+    st_blksize: longint;
+    st_blocks: longint;
+    st_spare4: array [0..1] of longint;
+  end;
+  TStat = stat;
+  PStat = ^stat;
+
+const
+  _IFMT    = 0170000;   // type of file
+  _IFDIR   = 0040000;   // directory
+  _IFCHR   = 0020000; 	// character special
+  _IFBLK   = 0060000; 	// block special
+  _IFREG   = 0100000; 	// regular
+  _IFLNK   = 0120000; 	// symbolic link
+  _IFSOCK  = 0140000; 	// socket
+  _IFIFO   = 0010000; 	// fifo
+
+  S_BLKSIZE = 1024;  // size of a block
+
+  S_ISUID = 0004000; // set user id on execution
+  S_ISGID = 0002000; // set group id on execution
+
+  NAME_MAX = 767;
+
+function S_ISBLK(m: longint): boolean; inline;
+function S_ISCHR(m: longint): boolean; inline;
+function S_ISDIR(m: longint): boolean; inline;
+function S_ISFIFO(m: longint): boolean; inline;
+function S_ISREG(m: longint): boolean; inline;
+function S_ISLNK(m: longint): boolean; inline;
+function S_ISSOCK(m: longint): boolean; inline;
+
+
+type
+  dirent = record
+    d_ino: longint;
+    d_name: array [0..NAME_MAX] of char;
+  end;
+  PDirent = ^dirent;
+  PPDirent = ^PDirent;
+
+  DIR = record
+    position: longint;
+    dirData: PDIR_ITER;
+    fileData: dirent;
+  end;
+  PDIR = ^DIR;
+
+(* DIR handling *)
+function closedir(dirp: PDIR): longint; cdecl; external;
+function opendir(const dirname: pchar): PDIR; cdecl; external;
+function readdir(dirp: PDIR): PDirent; cdecl; external;
+function readdir_r(dirp: PDIR; entry: PDirent; result: PPDirent): longint; cdecl; external;
+procedure rewinddir(dirp: PDIR); cdecl; external;
+procedure seekdir(dirp: PDIR; loc: longint); cdecl; external;
+function telldir(dirp: PDIR): longint; cdecl; external;
+
+
+function diropen(const path: pchar): PDIR_ITER; cdecl; external;
+function dirreset(dirState: PDIR_ITER): longint; cdecl; external;
+function dirnext(dirState: PDIR_ITER; filename: pchar; filestat: Pstat): longint; cdecl; external;
+function dirclose(dirState: PDIR_ITER): longint; cdecl; external;
+
+(* File handling *)
+function fopen(filename: Pchar; modes: Pchar): P_FILE; cdecl; external;
+function fread(ptr: pointer; size: longint; n: longint; stream: P_FILE): longint; cdecl; external;
+function fread(var ptr; size: longint; n: longint; var stream: _FILE): longint; cdecl; external;
+function fwrite(ptr: pointer; size: longint; n: longint; s: P_FILE): longint; cdecl; external;
+function fwrite(var ptr; size: longint; n: longint; var s: _FILE): longint; cdecl; external;
+function ftell(stream: P_FILE): longint; cdecl; external;
+function ftell(var stream: _FILE): longint; cdecl; external;
+function fseek(stream: P_FILE; off: longint; whence: longint): longint; cdecl; external;
+function fseek(var stream: _FILE; off: longint; whence: longint): longint; cdecl; external;
+function fclose(stream: P_FILE): longint; cdecl; external;
+function fclose(var stream: _FILE): longint; cdecl; external;
+function isatty(fildes: longint): longint; cdecl; external;
+function fileno(para1: P_FILE): longint; cdecl; external;
+function fileno(var para1: _FILE): longint; cdecl; external;
+function fstat(fildes: longint; buf: PStat): longint; cdecl; external;
+function fstat(fildes: longint; var buf: TStat): longint; cdecl; external;
+function _stat(__file:Pchar; var __buf:Tstat):longint; cdecl; external name 'stat';
+function ftruncate(fildes: longint; len: longint): longint; cdecl; external;
+function unlink(path: Pchar): longint; cdecl; external;
+function rename(para1: Pchar; para2: Pchar): longint; cdecl; external;
diff --git a/rtl/gba/system.pp b/rtl/gba/system.pp
index 77b99c98fb..a058fd4754 100644
--- a/rtl/gba/system.pp
+++ b/rtl/gba/system.pp
@@ -28,6 +28,10 @@ interface
 {$i systemh.inc}
 {$i gbabiosh.inc}
 
+{$i libch.inc}
+
+
+
 {$define fpc_softfpu_interface}
   {$i softfpu.pp}
 {$undef fpc_softfpu_interface}
@@ -48,24 +52,25 @@ const
  MaxPathLen = 255;
  AllFilesMask = '*';
 
-
  sLineBreak : string[1] = LineEnding;
  DefaultTextLineBreakStyle : TTextLineBreakStyle = tlbsCRLF;
 
-const
   UnusedHandle    = $ffff;
   StdInputHandle  = 0;
   StdOutputHandle = 1;
   StdErrorHandle  = $ffff;
 
 
+
+
 var
   argc: LongInt = 0;
   argv: PPChar;
   envp: PPChar;
-  errno: integer;
+//  errno: integer;
   fake_heap_end: ^byte; cvar; external;
 
+
 procedure randomize(value: integer);
 
 implementation
@@ -89,9 +94,12 @@ implementation
 {$i system.inc}
 {$i gbabios.inc}
 
+{$i libc.inc}
+
 {$ifdef FPC_HAS_FEATURE_PROCESSES}
 function GetProcessID: SizeUInt;
 begin
+  GetProcessID := 0;
 end;
 {$endif}
 
@@ -101,6 +109,7 @@ end;
 *****************************************************************************}
 procedure System_exit;
 begin
+
 end;
 
 
@@ -154,16 +163,16 @@ function paramstr(l : longint) : string;
 begin
   paramstr:='';
 end;
-{$endif}
+{$endif FPC_HAS_FEATURE_COMMANDARGS}
 
-{$ifdef FPC_HAS_FEATURE_CONSOLEIO}
+{$ifdef FPC_HAS_FEATURE_TEXTIO}
 procedure SysInitStdIO;
 begin
   OpenStdIO(Input,fmInput,StdInputHandle);
   OpenStdIO(Output,fmOutput,StdOutputHandle);
   OpenStdIO(StdOut,fmOutput,StdOutputHandle);
 end;
-{$endif}
+{$endif FPC_HAS_FEATURE_TEXTIO}
 
 
 function CheckInitialStkLen(stklen : SizeUInt) : SizeUInt;
@@ -177,17 +186,19 @@ begin
   StackBottom := StackTop - StackLength;
 { OS specific startup }
 
+{ Set up signals handlers }
+  fpc_cpucodeinit;
+
 { Setup heap }
   InitHeap;
   SysInitExceptions;
 {$ifdef FPC_HAS_FEATURE_CONSOLEIO}
   { Setup stdin, stdout and stderr }
   SysInitStdIO;
-{$endif FPC_HAS_FEATURE_CONSOLEIO}
-{$ifdef FPC_HAS_FEATURE_CONSOLEIO}
   { Reset IO Error }
   InOutRes:=0;
 {$endif FPC_HAS_FEATURE_CONSOLEIO}
+
 {$ifdef FPC_HAS_FEATURE_THREADING}
   { threading }
   InitSystemThreads;
diff --git a/rtl/nds/cprt07.as b/rtl/nds/cprt07.as
index c795e68e93..accf9e5add 100644
--- a/rtl/nds/cprt07.as
+++ b/rtl/nds/cprt07.as
@@ -33,11 +33,8 @@ _start:
 	mov	r0, #0			@ int argc
 	mov	r1, #0			@ char *argv[]
 	ldr	r3, =main
-	bl	_blx_r3_stub
-		
-	@ If the user ever returns, return to flash cartridge
-	mov	r0, #0x08000000
-	bx	r0
+	ldr	lr,=__libnds_exit
+	bx	r3
 
 @---------------------------------------------------------------------------------
  _blx_r3_stub:
diff --git a/rtl/nds/cprt09.as b/rtl/nds/cprt09.as
index c07815165e..66ba9adf15 100644
--- a/rtl/nds/cprt09.as
+++ b/rtl/nds/cprt09.as
@@ -5,7 +5,7 @@
 	.cpu	arm946e-s
 @---------------------------------------------------------------------------------
 
-	.equ	_libnds_argv,	0x027FFF70
+	.equ	_libnds_argv,0x02FFFE70
 
 @---------------------------------------------------------------------------------
 	.section ".init"
@@ -19,123 +19,8 @@ _start:
 	mov	r0, #0x04000000			@ IME = 0;
 	str	r0, [r0, #0x208]
 
-@---------------------------------------------------------------------------------
-@ turn the power on for M3
-@---------------------------------------------------------------------------------
-	ldr     r1, =0x8203
-	add	r0,r0,#0x304
-	strh    r1, [r0]
-
-	ldr	r1, =0x00002078			@ disable TCM and protection unit
-	mcr	p15, 0, r1, c1, c0
-
-@---------------------------------------------------------------------------------
-@ Protection Unit Setup added by Sasq
-@---------------------------------------------------------------------------------
-	@ Disable cache
-	mov	r0, #0
-	mcr	p15, 0, r0, c7, c5, 0		@ Instruction cache
-	mcr	p15, 0, r0, c7, c6, 0		@ Data cache
-
-	@ Wait for write buffer to empty 
-	mcr	p15, 0, r0, c7, c10, 4
-
-	ldr	r0, =__dtcm_start
-	orr	r0,r0,#0x0a
-	mcr	p15, 0, r0, c9, c1,0		@ DTCM base = __dtcm_start, size = 16 KB
-
-	mov r0,#0x20
-	mcr	p15, 0, r0, c9, c1,1		@ ITCM base = 0 , size = 32 MB
-
-@---------------------------------------------------------------------------------
-@ Setup memory regions similar to Release Version
-@---------------------------------------------------------------------------------
-
-	@-------------------------------------------------------------------------
-	@ Region 0 - IO registers
-	@-------------------------------------------------------------------------
-	ldr	r0,=( (0b11001 << 1) | 0x04000000 | 1)	
-	mcr	p15, 0, r0, c6, c0, 0
-
-	@-------------------------------------------------------------------------
-	@ Region 1 - Main Memory
-	@-------------------------------------------------------------------------
-	ldr	r0,=( (0b10101 << 1) | 0x02000000 | 1)	
-	mcr	p15, 0, r0, c6, c1, 0
-
-	@-------------------------------------------------------------------------
-	@ Region 2 - alternate vector base
-	@-------------------------------------------------------------------------
-	ldr r0,=( (0b01011 << 1) | 0x00000000 | 1)
-	mcr	p15, 0, r0, c6, c2, 0
-
-	@-------------------------------------------------------------------------
-	@ Region 3 - DS Accessory (GBA Cart)
-	@-------------------------------------------------------------------------
-	ldr	r0,=( (0b11010 << 1) | 0x08000000 | 1)	
-	mcr	p15, 0, r0, c6, c3, 0
-
-	@-------------------------------------------------------------------------
-	@ Region 4 - DTCM
-	@-------------------------------------------------------------------------
-	ldr	r0,=__dtcm_start
-	orr	r0,r0,#((0b01101 << 1) | 1)
-	mcr	p15, 0, r0, c6, c4, 0
-
-	@-------------------------------------------------------------------------
-	@ Region 5 - ITCM
-	@-------------------------------------------------------------------------
-	ldr	r0,=__itcm_start
-	@ align to 32k boundary
-	mov     r0,r0,lsr #15
-	mov     r0,r0,lsl #15
-	orr	r0,r0,#((0b01110 << 1) | 1)
-	mcr	p15, 0, r0, c6, c5, 0
-
-	@-------------------------------------------------------------------------
-	@ Region 6 - System ROM
-	@-------------------------------------------------------------------------
-	ldr	r0,=( (0b01110 << 1) | 0xFFFF0000 | 1)	
-	mcr	p15, 0, r0, c6, c6, 0
-
-	@-------------------------------------------------------------------------
-	@ Region 7 - non cacheable main ram
-	@-------------------------------------------------------------------------
-	ldr	r0,=( (0b10101 << 1)  | 0x02400000 | 1)	
-	mcr	p15, 0, r0, c6, c7, 0
-
-	@-------------------------------------------------------------------------
-	@ Write buffer enable
-	@-------------------------------------------------------------------------
-	ldr	r0,=0b00000010
-	mcr	p15, 0, r0, c3, c0, 0
-
-	@-------------------------------------------------------------------------
-	@ DCache & ICache enable
-	@-------------------------------------------------------------------------
-	ldr	r0,=0b01000010
-	mcr	p15, 0, r0, c2, c0, 0
-	mcr	p15, 0, r0, c2, c0, 1
-
-	@-------------------------------------------------------------------------
-	@ IAccess
-	@-------------------------------------------------------------------------
-	ldr	r0,=0x36636633
-	mcr	p15, 0, r0, c5, c0, 3
-
-	@-------------------------------------------------------------------------
-	@ DAccess
-	@-------------------------------------------------------------------------
-	ldr	r0,=0x36333633
-	mcr     p15, 0, r0, c5, c0, 2
-
-	@-------------------------------------------------------------------------
-	@ Enable ICache, DCache, ITCM & DTCM
-	@-------------------------------------------------------------------------
-	mrc	p15, 0, r0, c1, c0, 0
-	ldr	r1,= (1<<18) | (1<<16) | (1<<12) | (1<<2) | (1<<0)
-	orr	r0,r0,r1
-	mcr	p15, 0, r0, c1, c0, 0
+	ldr	r3,=__libnds_mpu_setup
+	blx	r3
 
 	mov	r0, #0x12		@ Switch to IRQ Mode
 	msr	cpsr, r0
@@ -176,10 +61,6 @@ _start:
 	ldr	r1, =__sbss_end
 	sub	r1, r1, r0
 	bl	ClearMem
-
-	ldr	r1, =fake_heap_end	@ set heap end
-	ldr	r0, =__eheap_end
-	str	r0, [r1]
 	
 	ldr	r0,	=_libnds_argv
 
@@ -188,6 +69,10 @@ _start:
 	ldr	r1,=fake_heap_start
 	str	r2,[r1]
 
+	ldr	r1, =fake_heap_end	@ set heap end
+	sub	r8,r8,#0xc000
+	str	r8, [r1]
+
 	push    {r0}
 	ldr     r3, =initSystem
 	blx     r3                      @ system initialisation
@@ -200,16 +85,8 @@ _start:
 
 
 	ldr	r3, =main
-	blx	r3		@ jump to user code
-		
-	@ If the user ever returns, go back to passme loop
-	ldr	r0, =ILoop
-	ldr	r0, [r0]
-	ldr	r1, =0x027FFE78
-	str	r0, [r1]
-	bx	r1
-ILoop:
-	b	ILoop
+	ldr	lr,=__libnds_exit
+	bx	r3			@ jump to user code
 
 @---------------------------------------------------------------------------------
 @ check for a commandline
@@ -221,10 +98,11 @@ checkARGV:
 	str	r1, [r0,#12]            @ clear argc
 	str	r1, [r0,#16]            @ clear argv
  	  	 
-	ldr	r1, [r0]                @ argv magic number
-	ldr	r2, =0x5f617267         @ '_arg'
-	cmp	r1, r2
-	bxne	lr                      @ bail out if no magic
+	ldr	r3, [r0]		@ argv magic number
+	ldr	r2, =0x5f617267		@ '_arg'
+	cmp	r3, r2
+	strne	r1,[r0,#20]
+  bxne	lr                      @ bail out if no magic
 
 	ldr	r1, [r0, #4]            @ command line address
 	ldr	r2, [r0, #8]            @ length of command line
diff --git a/rtl/nds/prt07.as b/rtl/nds/prt07.as
index 9a5258ab58..320462e8b3 100644
--- a/rtl/nds/prt07.as
+++ b/rtl/nds/prt07.as
@@ -30,12 +30,8 @@ _start:
 	mov	r0, #0			@ int argc
 	mov	r1, #0			@ char *argv[]
 	ldr	r3, =main
-  bx	r3
-  nop
-  		
-	@ If the user ever returns, return to flash cartridge
-	mov	r0, #0x08000000
-	bx	r0
+	ldr	lr,=__libnds_exit
+	bx	r3
 
 @---------------------------------------------------------------------------------
 @ Clear memory to 0x00 if length != 0
diff --git a/rtl/nds/prt09.as b/rtl/nds/prt09.as
index f1bfbc4ca7..c74d26f15e 100644
--- a/rtl/nds/prt09.as
+++ b/rtl/nds/prt09.as
@@ -5,7 +5,7 @@
 	.cpu	arm946e-s
 @---------------------------------------------------------------------------------
 
-	.equ	_libnds_argv,	0x027FFF70
+	.equ	_libnds_argv,0x02FFFE70
 
 @---------------------------------------------------------------------------------
 	.section ".init"
@@ -19,123 +19,8 @@ _start:
 	mov	r0, #0x04000000			@ IME = 0;
 	str	r0, [r0, #0x208]
 	
-@---------------------------------------------------------------------------------
-@ turn the power on for M3
-@---------------------------------------------------------------------------------
-	ldr     r1, =0x8203
-	add	r0,r0,#0x304
-	strh    r1, [r0]
-
-	ldr	r1, =0x00002078			@ disable TCM and protection unit
-	mcr	p15, 0, r1, c1, c0
-
-@---------------------------------------------------------------------------------
-@ Protection Unit Setup added by Sasq
-@---------------------------------------------------------------------------------
-	@ Disable cache
-	mov	r0, #0
-	mcr	p15, 0, r0, c7, c5, 0		@ Instruction cache
-	mcr	p15, 0, r0, c7, c6, 0		@ Data cache
-
-	@ Wait for write buffer to empty 
-	mcr	p15, 0, r0, c7, c10, 4
-
-	ldr	r0, =__dtcm_start
-	orr	r0,r0,#0x0a
-	mcr	p15, 0, r0, c9, c1,0		@ DTCM base = __dtcm_start, size = 16 KB
-
-	mov r0,#0x20
-	mcr	p15, 0, r0, c9, c1,1		@ ITCM base = 0 , size = 32 MB
-
-@---------------------------------------------------------------------------------
-@ Setup memory regions similar to Release Version
-@---------------------------------------------------------------------------------
-
-	@-------------------------------------------------------------------------
-	@ Region 0 - IO registers
-	@-------------------------------------------------------------------------
-	ldr	r0,=( (0b11001 << 1) | 0x04000000 | 1)	
-	mcr	p15, 0, r0, c6, c0, 0
-
-	@-------------------------------------------------------------------------
-	@ Region 1 - Main Memory
-	@-------------------------------------------------------------------------
-	ldr	r0,=( (0b10101 << 1) | 0x02000000 | 1)	
-	mcr	p15, 0, r0, c6, c1, 0
-
-	@-------------------------------------------------------------------------
-	@ Region 2 - alternate vector base
-	@-------------------------------------------------------------------------
-	ldr r0,=( (0b01011 << 1) | 0x00000000 | 1)
-	mcr	p15, 0, r0, c6, c2, 0
-
-	@-------------------------------------------------------------------------
-	@ Region 3 - DS Accessory (GBA Cart)
-	@-------------------------------------------------------------------------
-	ldr	r0,=( (0b11010 << 1) | 0x08000000 | 1)	
-	mcr	p15, 0, r0, c6, c3, 0
-
-	@-------------------------------------------------------------------------
-	@ Region 4 - DTCM
-	@-------------------------------------------------------------------------
-	ldr	r0,=__dtcm_start
-	orr	r0,r0,#((0b01101 << 1) | 1)
-	mcr	p15, 0, r0, c6, c4, 0
-
-	@-------------------------------------------------------------------------
-	@ Region 5 - ITCM
-	@-------------------------------------------------------------------------
-	ldr	r0,=__itcm_start
-	@ align to 32k boundary
-	mov     r0,r0,lsr #15
-	mov     r0,r0,lsl #15
-	orr	r0,r0,#((0b01110 << 1) | 1)
-	mcr	p15, 0, r0, c6, c5, 0
-
-	@-------------------------------------------------------------------------
-	@ Region 6 - System ROM
-	@-------------------------------------------------------------------------
-	ldr	r0,=( (0b01110 << 1) | 0xFFFF0000 | 1)	
-	mcr	p15, 0, r0, c6, c6, 0
-
-	@-------------------------------------------------------------------------
-	@ Region 7 - non cacheable main ram
-	@-------------------------------------------------------------------------
-	ldr	r0,=( (0b10101 << 1)  | 0x02400000 | 1)	
-	mcr	p15, 0, r0, c6, c7, 0
-
-	@-------------------------------------------------------------------------
-	@ Write buffer enable
-	@-------------------------------------------------------------------------
-	ldr	r0,=0b00000010
-	mcr	p15, 0, r0, c3, c0, 0
-
-	@-------------------------------------------------------------------------
-	@ DCache & ICache enable
-	@-------------------------------------------------------------------------
-	ldr	r0,=0b01000010
-	mcr	p15, 0, r0, c2, c0, 0
-	mcr	p15, 0, r0, c2, c0, 1
-
-	@-------------------------------------------------------------------------
-	@ IAccess
-	@-------------------------------------------------------------------------
-	ldr	r0,=0x36636633
-	mcr	p15, 0, r0, c5, c0, 3
-
-	@-------------------------------------------------------------------------
-	@ DAccess
-	@-------------------------------------------------------------------------
-	ldr	r0,=0x36333633
-	mcr     p15, 0, r0, c5, c0, 2
-
-	@-------------------------------------------------------------------------
-	@ Enable ICache, DCache, ITCM & DTCM
-	@-------------------------------------------------------------------------
-	mrc	p15, 0, r0, c1, c0, 0
-	ldr	r1,= (1<<18) | (1<<16) | (1<<12) | (1<<2) | (1<<0)
-	orr	r0,r0,r1
-	mcr	p15, 0, r0, c1, c0, 0
+	ldr	r3,=__libnds_mpu_setup
+	blx	r3
 
 	mov	r0, #0x12		@ Switch to IRQ Mode
 	msr	cpsr, r0
@@ -177,10 +62,6 @@ _start:
 	sub	r1, r1, r0
 	bl	ClearMem
 
-	ldr	r1, =fake_heap_end	@ set heap end
-	ldr	r0, =__eheap_end
-	str	r0, [r1]
-	
 	ldr	r0,	=_libnds_argv
 
 	@ reset heap base
@@ -188,6 +69,10 @@ _start:
 	ldr	r1,=fake_heap_start
 	str	r2,[r1]
 
+	ldr	r1, =fake_heap_end	@ set heap end
+	sub	r8,r8,#0xc000
+	str	r8, [r1]
+
 	push    {r0}
 	ldr     r3, =initSystem
 	blx     r3                      @ system initialisation
@@ -200,16 +85,8 @@ _start:
 
 
 	ldr	r3, =main
-	blx	r3		@ jump to user code
-		
-	@ If the user ever returns, go back to passme loop
-	ldr	r0, =ILoop
-	ldr	r0, [r0]
-	ldr	r1, =0x027FFE78
-	str	r0, [r1]
-	bx	r1
-ILoop:
-	b	ILoop
+	ldr	lr,=__libnds_exit
+	bx	r3			@ jump to user code
 
 @---------------------------------------------------------------------------------
 @ check for a commandline
@@ -221,10 +98,11 @@ checkARGV:
 	str	r1, [r0,#12]            @ clear argc
 	str	r1, [r0,#16]            @ clear argv
  	  	 
-	ldr	r1, [r0]                @ argv magic number
-	ldr	r2, =0x5f617267         @ '_arg'
-	cmp	r1, r2
-	bxne	lr                      @ bail out if no magic
+	ldr	r3, [r0]		@ argv magic number
+	ldr	r2, =0x5f617267		@ '_arg'
+	cmp	r3, r2
+	strne	r1,[r0,#20]
+  bxne	lr                      @ bail out if no magic
 
 	ldr	r1, [r0, #4]            @ command line address
 	ldr	r2, [r0, #8]            @ length of command line