Explorar o código

* Updated NDS and GBA to devkitARM r28
* Updated libnds to 1.4.1
* Fixed NDS rtl according with last string handling changes
* Fixed nds audio examples

git-svn-id: trunk@14967 -

Legolas %!s(int64=15) %!d(string=hai) anos
pai
achega
bc1bcf343e

+ 10 - 2
compiler/systems/t_gba.pas

@@ -429,13 +429,21 @@ begin
       add('	__init_lma = __preinit_lma + SIZEOF(.preinit_array);');
       add('');
       add('	PROVIDE (__init_array_start = .);');
-      add('	.init_array     : AT (__init_lma) { KEEP (*(.init_array)) } >iwram');
+      add('	.init_array     : AT (__init_lma)');
+      add('	{');
+      add('		KEEP (*(SORT(.init_array.*)))');
+      add('		KEEP (*(.init_array))');
+      add('	} >iwram');
       add('	PROVIDE (__init_array_end = .);');
       add('	PROVIDE (__fini_array_start = .);');
       add('');
       add('	__fini_lma = __init_lma + SIZEOF(.init_array);');
       add('');
-      add('	.fini_array     : AT (__fini_lma) { KEEP (*(.fini_array)) } >iwram');
+      add('	.fini_array     : AT (__fini_lma)');
+      add('	{');
+      add('		KEEP (*(SORT(.fini_array.*)))');
+      add('		KEEP (*(.fini_array))');
+      add('	} >iwram');
       add('  	PROVIDE (__fini_array_end = .);');
       add('');
       add('	__jcr_lma = __fini_lma + SIZEOF(.fini_array);');

+ 14 - 5
compiler/systems/t_nds.pas

@@ -325,10 +325,18 @@ begin
         add('  .preinit_array     : { KEEP (*(.preinit_array)) } >ewram = 0xff');
         add('  PROVIDE (__preinit_array_end = .);');
         add('  PROVIDE (__init_array_start = .);');
-        add('  .init_array     : { KEEP (*(.init_array)) } >ewram = 0xff');
+        add('  .init_array     :');
+        add('  {');
+        add('       KEEP (*(SORT(.init_array.*)))');
+        add('       KEEP (*(.init_array))');
+        add('  } >ewram = 0xff');        
         add('  PROVIDE (__init_array_end = .);');
         add('  PROVIDE (__fini_array_start = .);');
-        add('  .fini_array     : { KEEP (*(.fini_array)) } >ewram = 0xff');
+        add('  .fini_array     :');
+        add('  {');
+        add('       KEEP (*(.fini_array))');
+        add('       KEEP (*(SORT(.fini_array.*)))');
+        add('  } >ewram = 0xff');
         add('  PROVIDE (__fini_array_end = .);');
         add('');
         add('	.ctors :');
@@ -504,12 +512,13 @@ begin
         add('');
         add('__iwram_start	=	ORIGIN(iwram);');
         add('__iwram_top	=	ORIGIN(iwram)+ LENGTH(iwram);');
-        add('__sp_irq	=	__iwram_top - 0x60;');
+        add('__sp_irq	=	__iwram_top - 0x100;');
         add('__sp_svc	=	__sp_irq - 0x100;');
         add('__sp_usr	=	__sp_svc - 0x100;');
         add('');
-        add('__irq_flags	=	__iwram_top - 8;');
-        add('__irq_vector	=	__iwram_top - 4;');
+        add('__irq_flags	=	0x04000000 - 8;');
+        add('__irq_flagsaux	=	0x04000000 - 0x40;');
+        add('__irq_vector	=	0x04000000 - 4;');
         add('');
         add('SECTIONS');
         add('{');

+ 39 - 9
packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile

@@ -1,11 +1,10 @@
 #
-<<<<<<< .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#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/12/24]
+#
 default: all
 MAKEFILETARGETS=arm-nds
 BSDs = freebsd netbsd openbsd darwin
-UNIXs = linux $(BSDs) solaris qnx
+UNIXs = linux $(BSDs) solaris qnx haiku
 LIMIT83fs = go32v2 os2 emx watcom
 OSNeedsComspecToRunBatch = go32v2 watcom
 FORCE:
@@ -60,9 +59,11 @@ endif
 endif
 ifdef COMSPEC
 ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+ifndef RUNBATCH
 RUNBATCH=$(COMSPEC) /C
 endif
 endif
+endif
 ifdef inUnix
 PATHSEP=/
 else
@@ -174,6 +175,17 @@ 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)
@@ -195,7 +207,7 @@ endif
 ifeq ($(OS_TARGET),linux)
 linuxHier=1
 endif
-export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
 ifdef FPCDIR
 override FPCDIR:=$(subst \,/,$(FPCDIR))
 ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
@@ -267,7 +279,7 @@ ifeq ($(FULL_TARGET),arm-nds)
 override CLEAN_UNITS+=*
 endif
 ifeq ($(FULL_TARGET),arm-nds)
-override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin *.map $(BUILD)/* $(INC)/*
+override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin $(BUILD)/*
 endif
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
@@ -488,6 +500,7 @@ endif
 ifeq ($(OS_TARGET),go32v2)
 STATICLIBPREFIX=
 SHORTSUFFIX=dos
+IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),watcom)
 STATICLIBPREFIX=
@@ -495,6 +508,7 @@ OEXT=.obj
 ASMEXT=.asm
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=wat
+IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),linux)
 BATCHEXT=.sh
@@ -531,6 +545,7 @@ STATICLIBPREFIX=
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=os2
 ECHO=echo
+IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),emx)
 BATCHEXT=.cmd
@@ -539,6 +554,7 @@ STATICLIBPREFIX=
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=emx
 ECHO=echo
+IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),amiga)
 EXEEXT=
@@ -559,6 +575,11 @@ BATCHEXT=.sh
 EXEEXT=
 SHORTSUFFIX=be
 endif
+ifeq ($(OS_TARGET),haiku)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=hai
+endif
 ifeq ($(OS_TARGET),solaris)
 BATCHEXT=.sh
 EXEEXT=
@@ -573,17 +594,20 @@ 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
@@ -610,14 +634,17 @@ 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
@@ -664,6 +691,7 @@ STATICLIBEXT=.ao2
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=os2
 ECHO=echo
+IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),amiga)
 EXEEXT=
@@ -724,6 +752,7 @@ STATICLIBEXT=.a
 SHAREDLIBEXT=.nlm
 EXEEXT=.nlm
 SHORTSUFFIX=nw
+IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),netwlibc)
 STATICLIBPREFIX=
@@ -735,6 +764,7 @@ STATICLIBEXT=.a
 SHAREDLIBEXT=.nlm
 EXEEXT=.nlm
 SHORTSUFFIX=nwl
+IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
@@ -746,6 +776,7 @@ STATICLIBEXT=.a
 EXEEXT=
 DEBUGSYMEXT=.xcoff
 SHORTSUFFIX=mac
+IMPORTLIBPREFIX=imp
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
@@ -1048,13 +1079,13 @@ override COMPILER_UNITDIR+=$(UNITDIR_LIBNDSFPC)
 endif
 endif
 ifndef NOCPUDEF
-override FPCOPTDEF=$(CPU_TARGET)
+override FPCOPTDEF=$(ARCH)
 endif
 ifneq ($(OS_TARGET),$(OS_SOURCE))
 override FPCOPT+=-T$(OS_TARGET)
 endif
 ifneq ($(CPU_TARGET),$(CPU_SOURCE))
-override FPCOPT+=-P$(CPU_TARGET)
+override FPCOPT+=-P$(ARCH)
 endif
 ifeq ($(OS_SOURCE),openbsd)
 override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
@@ -1617,7 +1648,6 @@ include fpcmake.loc
 endif
 .NOTPARALLEL:
 all: direc fpc_all 
-direc:
 ifneq ($(BUILD), $(CURDIR))
 	$(MKDIR) $(BUILD)
 endif

+ 0 - 2
packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile.fpc

@@ -32,8 +32,6 @@ GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.png)))
 [rules]
 .NOTPARALLEL:
 all: direc fpc_all 
-<<<<<<< .mine=======
->>>>>>> .theirsdirec:
 ifneq ($(BUILD), $(CURDIR))
         $(MKDIR) $(BUILD)
 endif

+ 2 - 3
packages/libndsfpc/examples/audio/maxmod/song_events_example2/song_events_example2.pp

@@ -37,9 +37,8 @@ var
   sprites: array[0..4] of MySprite;
 
 
-<<<<<<< .minefunction myEventHandler(msg, param: mm_word): mm_word;
-=======function myEventHandler(msg, param: mm_word): pmm_word;
->>>>>>> .theirsbegin
+function myEventHandler(msg, param: mm_word): mm_word;
+begin
   case msg of
     MMCB_SONGMESSAGE:	// process song messages
     begin

+ 2 - 2
packages/libndsfpc/src/dswifi/inc/dswifi_version.inc

@@ -2,6 +2,6 @@
 const
   DSWIFI_MAJOR    = 0;
   DSWIFI_MINOR    = 3;
-  DSWIFI_REVISION = 11;
-  DSWIFI_VERSION  = '0.3.11';
+  DSWIFI_REVISION = 12;
+  DSWIFI_VERSION  = '0.3.12';
 {$endif NDS_INTERFACE}

+ 3 - 3
packages/libndsfpc/src/nds/arm9/exceptions.inc

@@ -40,15 +40,15 @@
 
 {$ifdef NDS_INTERFACE}
 const
-  EXCEPTION_VECTOR : ^VoidFunctionPointer = pointer($2FFFD9C);
+  EXCEPTION_VECTOR : ^VoidFn = pointer($2FFFD9C);
 
 var
-  exceptionC: ^VoidFunctionPointer; cvar; external;
+  exceptionC: ^VoidFn; cvar; external;
   exceptionStack: cuint32; cvar; external;
   exceptionRegisters: pcint32; cvar; external;
 
 procedure enterException(); cdecl; external;
-procedure setExceptionHandler(handler: VoidFunctionPointer); cdecl; external;
+procedure setExceptionHandler(handler: VoidFn); cdecl; external;
 procedure defaultExceptionHandler(); cdecl; external;
 
 function getCPSR(): cuint32; cdecl; external;

+ 0 - 20
packages/libndsfpc/src/nds/arm9/input.inc

@@ -39,26 +39,6 @@
 *)
 
 {$ifdef NDS_INTERFACE}
-// Keyboard
-type
-  KEYPAD_BITS = cint;
-const
-//!	Bit values for the keypad buttons.
-  KEY_A      : KEYPAD_BITS = (1 shl 0);  // Keypad A button.
-  KEY_B      : KEYPAD_BITS = (1 shl 1);  // Keypad B button.
-  KEY_SELECT : KEYPAD_BITS = (1 shl 2);  // Keypad SELECT button.
-  KEY_START  : KEYPAD_BITS = (1 shl 3);  // Keypad START button.
-  KEY_RIGHT  : KEYPAD_BITS = (1 shl 4);  // Keypad RIGHT button.
-  KEY_LEFT   : KEYPAD_BITS = (1 shl 5);  // Keypad LEFT button.
-  KEY_UP     : KEYPAD_BITS = (1 shl 6);  // Keypad UP button.
-  KEY_DOWN   : KEYPAD_BITS = (1 shl 7);  // Keypad DOWN button.
-  KEY_R      : KEYPAD_BITS = (1 shl 8);  // Right shoulder button.
-  KEY_L      : KEYPAD_BITS = (1 shl 9);  // Left shoulder button.
-  KEY_X      : KEYPAD_BITS = (1 shl 10); // Keypad X button.
-  KEY_Y      : KEYPAD_BITS = (1 shl 11); // Keypad Y button.
-  KEY_TOUCH  : KEYPAD_BITS = (1 shl 12); // Touchscreen pendown.
-  KEY_LID    : KEYPAD_BITS = (1 shl 13); // Lid state.
-
   
 procedure scanKeys(); cdecl; external;
 

+ 1 - 1
packages/libndsfpc/src/nds/arm9/sprite.inc

@@ -315,7 +315,7 @@ procedure oamAffineTransformation(var oam: OamState; rotId, hdx, hdy, vdx, vdy:
 
 function oamCountFragments(var oam: OamState): cint; cdecl; external;
 procedure oamAllocReset(var oam: OamState); cdecl; external;
-function oamGfxPtrToOffset(const offset: pointer): cuint; cdecl; external;
+function oamGfxPtrToOffset(var oam: OamState; const offset: pointer): cuint; cdecl; external;
 {$endif NDS_INTERFACE}
  
 {$ifdef NDS_IMPLEMENTATION}

+ 54 - 9
packages/libndsfpc/src/nds/arm9/video.inc

@@ -256,15 +256,15 @@ var
 function vramSetMainBanks(a: VRAM_A_TYPE; b: VRAM_B_TYPE; c: VRAM_C_TYPE; d: VRAM_D_TYPE): cuint32; cdecl; external;
 procedure vramRestoreMainBanks(vramTemp: cuint32); cdecl; external;
 
-procedure vramSetBankA(a: VRAM_A_TYPE); cdecl; external;
-procedure vramSetBankB(b: VRAM_B_TYPE); cdecl; external;
-procedure vramSetBankC(c: VRAM_C_TYPE); cdecl; external;
-procedure vramSetBankD(d: VRAM_D_TYPE); cdecl; external;
-procedure vramSetBankE(e: VRAM_E_TYPE); cdecl; external;
-procedure vramSetBankF(f: VRAM_F_TYPE); cdecl; external;
-procedure vramSetBankG(g: VRAM_G_TYPE); cdecl; external;
-procedure vramSetBankH(h: VRAM_H_TYPE); cdecl; external;
-procedure vramSetBankI(i: VRAM_I_TYPE); cdecl; external;
+procedure vramSetBankA(a: VRAM_A_TYPE); inline;
+procedure vramSetBankB(b: VRAM_B_TYPE); inline;
+procedure vramSetBankC(c: VRAM_C_TYPE); inline;
+procedure vramSetBankD(d: VRAM_D_TYPE); inline;
+procedure vramSetBankE(e: VRAM_E_TYPE); inline;
+procedure vramSetBankF(f: VRAM_F_TYPE); inline;
+procedure vramSetBankG(g: VRAM_G_TYPE); inline;
+procedure vramSetBankH(h: VRAM_H_TYPE); inline;
+procedure vramSetBankI(i: VRAM_I_TYPE); inline;
 
 const
   REG_DISPCNT       : pcuint32 = pointer($04000000);
@@ -628,4 +628,49 @@ begin
 	GFX_BUSY := GFX_STATUS^ and (1 shl 27) <> 0;
 end;
 
+procedure vramSetBankA(a: VRAM_A_TYPE); inline;
+begin
+  VRAM_A_CR^ := VRAM_ENABLE or a;
+end;
+
+procedure vramSetBankB(b: VRAM_B_TYPE); inline;
+begin
+  VRAM_B_CR^ := VRAM_ENABLE or b;
+end;
+
+procedure vramSetBankC(c: VRAM_C_TYPE); inline;
+begin
+  VRAM_C_CR^ := VRAM_ENABLE or c;
+end;
+
+procedure vramSetBankD(d: VRAM_D_TYPE); inline;
+begin
+  VRAM_D_CR^ := VRAM_ENABLE or d;
+end;
+
+procedure vramSetBankE(e: VRAM_E_TYPE); inline;
+begin
+  VRAM_E_CR^ := VRAM_ENABLE or e;
+end;
+
+procedure vramSetBankF(f: VRAM_F_TYPE); inline;
+begin
+  VRAM_F_CR^ := VRAM_ENABLE or f;
+end;
+
+procedure vramSetBankG(g: VRAM_G_TYPE); inline;
+begin
+  VRAM_G_CR^ := VRAM_ENABLE or g;
+end;
+
+procedure vramSetBankH(h: VRAM_H_TYPE); inline;
+begin
+  VRAM_H_CR^ := VRAM_ENABLE or h;
+end;
+
+procedure vramSetBankI(i: VRAM_I_TYPE); inline;
+begin
+  VRAM_I_CR^ := VRAM_ENABLE or i;
+end;
+
 {$endif NDS_IMPLEMENTATION}

+ 26 - 13
packages/libndsfpc/src/nds/interrupts.inc

@@ -60,15 +60,20 @@ const
   IRQ_IPC_SYNC		    : IRQ_MASK =	(1 shl 16);	  (* IPC sync interrupt mask *)
   IRQ_FIFO_EMPTY		  : IRQ_MASK =	(1 shl 17);	  (* Send FIFO empty interrupt mask *)
   IRQ_FIFO_NOT_EMPTY	: IRQ_MASK =	(1 shl 18);	  (* Receive FIFO empty interrupt mask *)
-  IRQ_CARD			      : IRQ_MASK =	(1 shl 19);	  (* interrupt mask *)
+  IRQ_CARD			      : IRQ_MASK =	(1 shl 19);	  (* interrupt mask DS Card Slot *)
   IRQ_CARD_LINE		    : IRQ_MASK =	(1 shl 20);	  (* interrupt mask *)
   IRQ_GEOMETRY_FIFO   : IRQ_MASK =	(1 shl 21);	  (* geometry FIFO interrupt mask *)
-  IRQ_LID				      : IRQ_MASK =	(1 shl 22);	  (* interrupt mask *)
+  IRQ_LID				      : IRQ_MASK =	(1 shl 22);	  (* interrupt mask hinge *)
   IRQ_SPI				      : IRQ_MASK =	(1 shl 23);	  (* SPI interrupt mask *)
   IRQ_WIFI			      : IRQ_MASK =	(1 shl 24);	  (* WIFI interrupt mask (ARM7)*)
   IRQ_ALL				      : IRQ_MASK =	(not 0);      //$FFFFFF ?
 
 
+type
+  IRQ_MASKSAUX = cuint;
+const
+  IRQ_POWER: IRQ_MASKSAUX = (1 shl 6); (* Power Button interrupt mask (DSi ARM7) *)
+
 function IRQ_TIMER(n: cint): cint; inline;
 
 const
@@ -77,9 +82,11 @@ const
 
 
 const
-  REG_IE	: pcuint32 = pointer($04000210);
-  REG_IF	: pcuint32 = pointer($04000214);
-  REG_IME	: pcuint16 = pointer($04000208);
+  REG_IE	 : pcuint32 = pointer($04000210);
+  REG_AUXIE: pcuint32 = pointer($04000218);
+  REG_IF	 : pcuint32 = pointer($04000214);
+  REG_AUXIF: pcuint32 = pointer($0400021C);
+  REG_IME	 : pcuint32 = pointer($04000208);
 
 type
   IME_VALUE = integer;
@@ -89,7 +96,7 @@ const
 
 
 type
-  TVoidFunctionPointer = procedure of object;
+  TVoidFn = procedure of object;
   
 var
 //  __irq_vector: array [0..0] of VoidFunctionPointer; cvar; external;
@@ -102,10 +109,11 @@ var
 ///  __irq_flags: pcuint32; cvar; external;
   __irq_vector: Pointer; external name '__irq_vector';
   __irq_flags: pcuint32; external name '__irq_flags';
+  __irq_flagsaux: pcuint32; external name '__irq_flagsaux';
 
 
-
-{$define VBLANK_INTR_WAIT_FLAGS := __irq_flags}
+{$define INTR_WAIT_FLAGS := __irq_flags}
+{$define INTR_WAIT_FLAGSAUX := __irq_flagsaux}
 {$define IRQ_HANDLER := __irq_vector}
 
 type
@@ -115,15 +123,20 @@ type
   end;
 
 procedure irqInit(); cdecl; external;
-procedure irqSet(irq: IRQ_MASK; handler: TVoidFunctionPointer); cdecl; external;
-procedure irqSet(irq: IRQ_MASK; handler: pointer); cdecl; external;
-procedure irqClear(irq: IRQ_MASK); cdecl; external;
-procedure irqInitHandler(handler: TVoidFunctionPointer); cdecl; external;
+procedure irqSet(irq: cuint32; handler: TVoidFn); cdecl; external;
+procedure irqSet(irq: cuint32; handler: pointer); cdecl; external;
+procedure irqSetAUX(irq: cuint32; handler: TVoidFn); cdecl; external;
+procedure irqSetAUX(irq: cuint32; handler: pointer); cdecl; external;
+procedure irqClear(irq: cuint32); cdecl; external;
+procedure irqClearAUX(irq: cuint32); cdecl; external;
+procedure irqInitHandler(handler: TVoidFn); cdecl; external;
 procedure irqInitHandler(handler: pointer); cdecl; external;
 procedure irqEnable(irq: cuint32); cdecl; external;
+procedure irqEnableAUX(irq: cuint32); cdecl; external;
 procedure irqDisable(irq: cuint32); cdecl; external;
+procedure irqDisableAUX(irq: cuint32); cdecl; external;
 
-procedure swiIntrWait(waitForSet: cint; flags: cuint32); cdecl; external;
+procedure swiIntrWait(waitForSet: cuint32; flags: cuint32); cdecl; external;
 procedure swiWaitForVBlank(); cdecl; external;
 function enterCriticalSection(): cint; inline;
 procedure leaveCriticalSection(oldIME: cint); inline;

+ 7 - 2
packages/libndsfpc/src/nds/nds.inc

@@ -78,31 +78,35 @@
 {$include jtypes.inc}
 {$include bios.inc}
 {$include card.inc}
+{$include debug.inc} // testing...
 {$include dma.inc}
 {$include interrupts.inc}
 {$include ipc.inc}
 {$include memory.inc}
 {$include system.inc}
 {$include timers.inc}
+{$include fifocommon.inc} // testing...
+{$include touch.inc} // testing...
+{$include input.inc} // testing...
 
 {$ifdef ARM9}
   {$include arm9/background.inc}
   {$include arm9/boxtest.inc}
   {$include arm9/cache.inc}
   {$include arm9/console.inc}
+  {$include arm9/keyboard.inc} // testing...
   {$include arm9/exceptions.inc}
   {$include arm9/image.inc}
   {$include arm9/input.inc}
   {$include arm9/math.inc}
   {$include arm9/pcx.inc}
-  { $include nds/arm9/postest.inc}  // da rimuovere
   {$include arm9/rumble.inc}
   {$include arm9/sound.inc}
   {$include arm9/trig_lut.inc}
-  {$include arm9/ndsmotion.inc}
   {$include arm9/video.inc}
   {$include arm9/videoGL.inc}
   {$include arm9/sprite.inc}
+  {$include arm9/decompress.inc} // testing...
 {$endif ARM9}
 
 {$ifdef ARM7}
@@ -110,6 +114,7 @@
   {$include arm7/clock.inc}
   {$include arm7/serial.inc}
   {$include arm7/touch.inc}
+  {$include arm7/input.inc} // testing...  
 {$endif ARM7}
 
 {$ifdef ARM7}

+ 2 - 2
packages/libndsfpc/src/nds/ndsinclude.inc

@@ -13,7 +13,8 @@
 {$include fifocommon.inc}
 {$include system.inc}
 {$include timers.inc}
-{$include fifomessages.inc}
+{$include fifomessages.inc} 
+{$include input.inc} // testing...
 
 {$include linkedlist.inc}
 {$include dynamicArray.inc}
@@ -46,6 +47,5 @@
   {$include arm7/clock.inc}
   {$include arm7/input.inc}
   {$include arm7/serial.inc}
-  { $include arm7/system.inc} 
   {$include arm7/touch.inc}
 {$endif ARM7}

+ 1 - 1
packages/libndsfpc/src/nds/ndstypes.inc

@@ -139,7 +139,7 @@ typedef volatile s64          vs64;
 
 
   //IntFn = function: pointer;
-  VoidFunctionPointer = function: pointer; cdecl;
+  VoidFn = function: pointer; cdecl;
   //fp = function: pointer;
 
   IntFn = procedure;

+ 14 - 2
packages/libndsfpc/src/nds/system.inc

@@ -198,8 +198,6 @@ type
   PPERSONAL_DATA = ^tPERSONAL_DATA;
 
 const
-  REG_KEYINPUT	: pcuint16 = pointer($04000130);
-  REG_KEYCNT		: pcuint16 = pointer($04000132);
   PersonalData  : PPERSONAL_DATA = pointer($2FFFC80);
 
 
@@ -218,6 +216,15 @@ type
 const
   __system_argv: Pargv = pointer($02FFFE70);
   ARGV_MAGIC = $5f617267;
+  BOOTSIG = $62757473746F6F62; // ULL?
+
+type
+  __bootstub = packed record      // packed ?
+    bootsig: 	cuint64;
+    arm9reboot: VoidFn;
+    arm7reboot: VoidFn;
+    bootsize: cuint32;
+  end;
   
 
 type
@@ -236,8 +243,13 @@ type
 {$ifdef ARM9}
 procedure memCached(address: pointer); cdecl; external;
 procedure memUncached(address: pointer); cdecl; external;
+procedure resetARM7(address: cuint32); cdecl; external;
 {$endif ARM9}
 
+{$ifdef ARM7}
+procedure resetARM9(address: cuint32); cdecl; external;
+{$endif ARM7}
+
 
 {$endif NDS_INTERFACE}
 

+ 2 - 1
rtl/nds/cprt07.as

@@ -8,7 +8,8 @@
 _start:
 @---------------------------------------------------------------------------------
 	mov	r0, #0x04000000		@ IME = 0;
-	str	r0, [r0, #0x208]
+	mov	r1, #0
+	str	r1, [r0, #0x208]
 
 	mov	r0, #0x12		@ Switch to IRQ Mode
 	msr	cpsr, r0

+ 12 - 0
rtl/nds/cprt09.as

@@ -18,6 +18,18 @@ _start:
 @---------------------------------------------------------------------------------
 	mov	r0, #0x04000000			@ IME = 0;
 	str	r0, [r0, #0x208]
+	
+	@ set sensible stacks to allow bios call
+
+	mov	r0, #0x13		@ Switch to SVC Mode
+	msr	cpsr, r0
+	mov	r1,#0x03000000
+	sub	r1,r1,#0x1000
+	mov	sp,r1
+	mov	r0, #0x1F		@ Switch to System Mode
+	msr	cpsr, r0
+	sub	r1,r1,#0x100
+	mov	sp,r1
 
 	ldr	r3,=__libnds_mpu_setup
 	blx	r3

+ 2 - 1
rtl/nds/prt07.as

@@ -8,7 +8,8 @@
 _start:
 @---------------------------------------------------------------------------------
 	mov	r0, #0x04000000		@ IME = 0;
-	str	r0, [r0, #0x208]
+	mov	r1, #0
+	str	r1, [r0, #0x208]
 
 	mov	r0, #0x12		@ Switch to IRQ Mode
 	msr	cpsr, r0

+ 12 - 0
rtl/nds/prt09.as

@@ -19,6 +19,18 @@ _start:
 	mov	r0, #0x04000000			@ IME = 0;
 	str	r0, [r0, #0x208]
 	
+	@ set sensible stacks to allow bios call
+
+	mov	r0, #0x13		@ Switch to SVC Mode
+	msr	cpsr, r0
+	mov	r1,#0x03000000
+	sub	r1,r1,#0x1000
+	mov	sp,r1
+	mov	r0, #0x1F		@ Switch to System Mode
+	msr	cpsr, r0
+	sub	r1,r1,#0x100
+	mov	sp,r1
+	
 	ldr	r3,=__libnds_mpu_setup
 	blx	r3
 

+ 9 - 6
rtl/nds/sysdir.inc

@@ -19,22 +19,25 @@
 {*****************************************************************************
                            Directory Handling
 *****************************************************************************}
-procedure mkdir(const s: string);[IOCheck];
+procedure mkdir(s: pchar; len: sizeuint);[IOCheck, public, alias : 'FPC_SYS_MKDIR'];
 begin
+  if not assigned(s) or (len=0) or (InOutRes<>0) then exit;
   if FileIODevice.DirIO.DoMkdir <> nil then
-    FileIODevice.DirIO.DoMkdir(s);
+    FileIODevice.DirIO.DoMkdir(strpas(s));
 end;
 
-procedure rmdir(const s: string);[IOCheck];
+procedure rmdir(s: pchar; len: sizeuint);[IOCheck, public, alias : 'FPC_SYS_RMDIR'];
 begin
+  if not assigned(s) or (len=0) then exit;
   if FileIODevice.DirIO.DoRmdir <> nil then
-    FileIODevice.DirIO.DoRmdir(s);
+    FileIODevice.DirIO.DoRmdir(strpas(s));
 end;
 
-procedure chdir(const s: string);[IOCheck];
+procedure chdir(s: pchar; len: sizeuint);[IOCheck, public, alias : 'FPC_SYS_CHDIR'];
 begin
+  if not assigned(s) or (len=0) then exit;
   if FileIODevice.DirIO.DoChdir <> nil then
-    FileIODevice.DirIO.DoChdir(s);
+    FileIODevice.DirIO.DoChdir(strpas(s));
 end;
 
 procedure GetDir(DriveNr: byte; var Dir: ShortString);

+ 1 - 1
rtl/nds/sysutils.pp

@@ -223,7 +223,7 @@ end;
                               Misc Functions
 ****************************************************************************}
 
-procedure Beep;
+Procedure SysBeep;
 begin
 end;