From bc1bcf343e48446204007cee83acdff07a373f08 Mon Sep 17 00:00:00 2001 From: Legolas Date: Tue, 2 Mar 2010 21:56:41 +0000 Subject: [PATCH] * 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 - --- compiler/systems/t_gba.pas | 12 +++- compiler/systems/t_nds.pas | 19 ++++-- .../audio/maxmod/audio_modes/Makefile | 48 +++++++++++--- .../audio/maxmod/audio_modes/Makefile.fpc | 2 - .../song_events_example2.pp | 5 +- .../src/dswifi/inc/dswifi_version.inc | 4 +- .../libndsfpc/src/nds/arm9/exceptions.inc | 6 +- packages/libndsfpc/src/nds/arm9/input.inc | 20 ------ packages/libndsfpc/src/nds/arm9/sprite.inc | 2 +- packages/libndsfpc/src/nds/arm9/video.inc | 63 ++++++++++++++++--- packages/libndsfpc/src/nds/interrupts.inc | 39 ++++++++---- packages/libndsfpc/src/nds/nds.inc | 9 ++- packages/libndsfpc/src/nds/ndsinclude.inc | 4 +- packages/libndsfpc/src/nds/ndstypes.inc | 2 +- packages/libndsfpc/src/nds/system.inc | 16 ++++- rtl/nds/cprt07.as | 3 +- rtl/nds/cprt09.as | 12 ++++ rtl/nds/prt07.as | 3 +- rtl/nds/prt09.as | 12 ++++ rtl/nds/sysdir.inc | 15 +++-- rtl/nds/sysutils.pp | 2 +- 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;