summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLegolas <Legolas@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-03-02 21:56:41 +0000
committerLegolas <Legolas@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-03-02 21:56:41 +0000
commitce9ef74af67cd88e00a4f7ad6cf66e30aa4eb614 (patch)
tree2b48cabb0c8fe2fb13f2c5c10aaadede74f19c90
parent632796e5e32cb8b33d78a11dac44dfc28639fffd (diff)
downloadfpc-ce9ef74af67cd88e00a4f7ad6cf66e30aa4eb614.tar.gz
* 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: http://svn.freepascal.org/svn/fpc/trunk@14967 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--compiler/systems/t_gba.pas12
-rw-r--r--compiler/systems/t_nds.pas19
-rw-r--r--packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile48
-rw-r--r--packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile.fpc2
-rw-r--r--packages/libndsfpc/examples/audio/maxmod/song_events_example2/song_events_example2.pp5
-rw-r--r--packages/libndsfpc/src/dswifi/inc/dswifi_version.inc4
-rw-r--r--packages/libndsfpc/src/nds/arm9/exceptions.inc6
-rw-r--r--packages/libndsfpc/src/nds/arm9/input.inc20
-rw-r--r--packages/libndsfpc/src/nds/arm9/sprite.inc2
-rw-r--r--packages/libndsfpc/src/nds/arm9/video.inc63
-rw-r--r--packages/libndsfpc/src/nds/interrupts.inc39
-rw-r--r--packages/libndsfpc/src/nds/nds.inc9
-rw-r--r--packages/libndsfpc/src/nds/ndsinclude.inc4
-rw-r--r--packages/libndsfpc/src/nds/ndstypes.inc2
-rw-r--r--packages/libndsfpc/src/nds/system.inc16
-rw-r--r--rtl/nds/cprt07.as3
-rw-r--r--rtl/nds/cprt09.as12
-rw-r--r--rtl/nds/prt07.as3
-rw-r--r--rtl/nds/prt09.as12
-rw-r--r--rtl/nds/sysdir.inc15
-rw-r--r--rtl/nds/sysutils.pp2
21 files changed, 213 insertions, 85 deletions
diff --git a/compiler/systems/t_gba.pas b/compiler/systems/t_gba.pas
index 65ee756bf8..390a8ecab4 100644
--- a/compiler/systems/t_gba.pas
+++ b/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);');
diff --git a/compiler/systems/t_nds.pas b/compiler/systems/t_nds.pas
index b796a2c080..d4cec52adf 100644
--- a/compiler/systems/t_nds.pas
+++ b/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('{');
diff --git a/packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile b/packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile
index 0ca6781bbf..70101c7eb5 100644
--- a/packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile
+++ b/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
diff --git a/packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile.fpc b/packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile.fpc
index 497065f320..24eb0016a1 100644
--- a/packages/libndsfpc/examples/audio/maxmod/audio_modes/Makefile.fpc
+++ b/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
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 fa1db5dd14..293cdc04d4 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,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
diff --git a/packages/libndsfpc/src/dswifi/inc/dswifi_version.inc b/packages/libndsfpc/src/dswifi/inc/dswifi_version.inc
index feed113dee..1c054c0f0c 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 = 11;
- DSWIFI_VERSION = '0.3.11';
+ DSWIFI_REVISION = 12;
+ DSWIFI_VERSION = '0.3.12';
{$endif NDS_INTERFACE}
diff --git a/packages/libndsfpc/src/nds/arm9/exceptions.inc b/packages/libndsfpc/src/nds/arm9/exceptions.inc
index 3bd8f4d2e2..40d5517c5a 100644
--- a/packages/libndsfpc/src/nds/arm9/exceptions.inc
+++ b/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;
diff --git a/packages/libndsfpc/src/nds/arm9/input.inc b/packages/libndsfpc/src/nds/arm9/input.inc
index 5a35b8c010..3b224c7ef9 100644
--- a/packages/libndsfpc/src/nds/arm9/input.inc
+++ b/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;
diff --git a/packages/libndsfpc/src/nds/arm9/sprite.inc b/packages/libndsfpc/src/nds/arm9/sprite.inc
index 79eb8df2a9..dcd6ccec60 100644
--- a/packages/libndsfpc/src/nds/arm9/sprite.inc
+++ b/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}
diff --git a/packages/libndsfpc/src/nds/arm9/video.inc b/packages/libndsfpc/src/nds/arm9/video.inc
index f8ff9565dc..8850c7cacd 100644
--- a/packages/libndsfpc/src/nds/arm9/video.inc
+++ b/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}
diff --git a/packages/libndsfpc/src/nds/interrupts.inc b/packages/libndsfpc/src/nds/interrupts.inc
index 4863929f1c..3f969f6e99 100644
--- a/packages/libndsfpc/src/nds/interrupts.inc
+++ b/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;
diff --git a/packages/libndsfpc/src/nds/nds.inc b/packages/libndsfpc/src/nds/nds.inc
index 61ace700b0..a336420c10 100644
--- a/packages/libndsfpc/src/nds/nds.inc
+++ b/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}
diff --git a/packages/libndsfpc/src/nds/ndsinclude.inc b/packages/libndsfpc/src/nds/ndsinclude.inc
index 2a244917c2..5ea21f476a 100644
--- a/packages/libndsfpc/src/nds/ndsinclude.inc
+++ b/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}
diff --git a/packages/libndsfpc/src/nds/ndstypes.inc b/packages/libndsfpc/src/nds/ndstypes.inc
index 7543381245..1d0365014c 100644
--- a/packages/libndsfpc/src/nds/ndstypes.inc
+++ b/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;
diff --git a/packages/libndsfpc/src/nds/system.inc b/packages/libndsfpc/src/nds/system.inc
index 3ba1e11c37..9bcde59b59 100644
--- a/packages/libndsfpc/src/nds/system.inc
+++ b/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}
diff --git a/rtl/nds/cprt07.as b/rtl/nds/cprt07.as
index accf9e5add..f5c8f7ff93 100644
--- a/rtl/nds/cprt07.as
+++ b/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
diff --git a/rtl/nds/cprt09.as b/rtl/nds/cprt09.as
index 66ba9adf15..1263bf0259 100644
--- a/rtl/nds/cprt09.as
+++ b/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
diff --git a/rtl/nds/prt07.as b/rtl/nds/prt07.as
index 320462e8b3..c454e241a3 100644
--- a/rtl/nds/prt07.as
+++ b/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
diff --git a/rtl/nds/prt09.as b/rtl/nds/prt09.as
index c74d26f15e..a766767132 100644
--- a/rtl/nds/prt09.as
+++ b/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
diff --git a/rtl/nds/sysdir.inc b/rtl/nds/sysdir.inc
index 6f146c4d9a..242804b84f 100644
--- a/rtl/nds/sysdir.inc
+++ b/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);
diff --git a/rtl/nds/sysutils.pp b/rtl/nds/sysutils.pp
index ab1e6f2107..66b4eb7f3e 100644
--- a/rtl/nds/sysutils.pp
+++ b/rtl/nds/sysutils.pp
@@ -223,7 +223,7 @@ end;
Misc Functions
****************************************************************************}
-procedure Beep;
+Procedure SysBeep;
begin
end;