* 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 -
This commit is contained in:
Legolas 2010-03-02 21:56:41 +00:00
parent 71c99628d4
commit bc1bcf343e
21 changed files with 213 additions and 85 deletions

View File

@ -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);');

View File

@ -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('{');

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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}

View File

@ -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;

View File

@ -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;

View File

@ -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}

View File

@ -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}

View File

@ -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;

View File

@ -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}

View File

@ -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}

View File

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

View File

@ -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}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);

View File

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