* Modified heap management

* Cleaned some code and resolved some warnings

git-svn-id: trunk@4528 -
This commit is contained in:
Legolas 2006-09-01 17:53:02 +00:00
parent 41185d2f1e
commit ae43d8658a
7 changed files with 356 additions and 274 deletions

View File

@ -25,6 +25,8 @@ unit Dos;
interface
{$MODE objfpc}
type
SearchRec = Packed Record
AnchorPtr : Pointer; { Pointer to the Anchorpath structure }
@ -48,18 +50,22 @@ implementation
function dosLock(const name: String; accessmode: Longint) : LongInt;
begin
result := -1;
end;
function IsLeapYear(Source : Word) : Boolean;
begin
result := false;
end;
function dosSetProtection(const name: string; mask:longint): Boolean;
begin
result := false;
end;
function dosSetFileDate(name: string): Boolean;
begin
result := false;
end;
@ -69,6 +75,7 @@ end;
function DosVersion: Word;
begin
result := 0;
end;
procedure NewList ();
@ -77,6 +84,7 @@ end;
function CreateExtIO (size: Longint): integer;
begin
result := -1;
end;
procedure DeleteExtIO ();
@ -85,6 +93,7 @@ end;
function Createport(name : PChar; pri : longint): integer;
begin
result := -1;
end;
procedure DeletePort ();
@ -94,6 +103,7 @@ end;
function Create_Timer(theUnit : longint) : integer;
begin
result := -1;
end;
Procedure Delete_Timer();
@ -102,10 +112,12 @@ end;
function set_new_time(secs, micro : longint): longint;
begin
result := -1;
end;
function get_sys_time(): longint;
begin
result := -1;
end;
procedure GetDate(Var Year, Month, MDay, WDay: Word);
@ -141,12 +153,14 @@ end;
Function DiskFree(Drive: Byte): int64;
Begin
result := -1;
end;
Function DiskSize(Drive: Byte): int64;
Begin
result := -1;
end;
@ -171,6 +185,7 @@ end;
function FSearch(path: PathStr; dirlist: String) : PathStr;
begin
result := '';
end;
@ -199,22 +214,26 @@ end;
function getpathstring: string;
begin
result := '';
end;
function EnvCount: Longint;
begin
result := -1;
end;
function EnvStr(Index: LongInt): String;
begin
result := '';
end;
function GetEnv(envvar : String): String;
begin
result := '';
end;
@ -224,10 +243,12 @@ end;
function MakeDeviceName(str : pchar): string;
begin
result := '';
end;
function IsInDeviceList(str : string): boolean;
begin
result := false;
end;
procedure ReadInDevices;

View File

@ -1,300 +1,310 @@
/* (c) 2006 by devkitPro (http://www.devkitpro.org) */
/* Linker Script Original v1.3 by Jeff Frohwein */
/* v1.0 - Original release */
/* v1.1 - Added proper .data section support */
/* v1.2 - Added support for c++ & iwram overlays */
/* - Major contributions by Jason Wilkins. */
/* v1.3 - .ewram section now can be used when */
/* compiling for MULTIBOOT mode. This fixes */
/* malloc() in DevKitAdvance which depends */
/* on __eheap_start instead of end to define*/
/* the starting location of heap space. */
/* External global variable __gba_iwram_heap*/
/* support added to allow labels end, _end, */
/* & __end__ to point to end of iwram or */
/* the end of ewram. */
/* Additions by WinterMute */
/* v1.4 - .sbss section added for unitialised */
/* data in ewram */
/* v1.5 - padding section added to stop EZF */
/* stripping important data */
/* This file is released into the public domain */
/* for commercial or non-commercial use with no */
/* restrictions placed upon it. */
/* NOTE!!!: This linker script defines the RAM & */
/* ROM start addresses. In order for it to work */
/* properly, remove -Ttext and -Tbss linker */
/* options from your makefile if they are */
/* present. */
/* You can use the following to view section */
/* addresses in your .elf file: */
/* objdump -h file.elf */
/* Please note that empty sections may incorrectly*/
/* list the lma address as the vma address for */
/* some versions of objdump. */
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
/* SEARCH_DIR(/bin/arm); */
/* The linker script function "var1 += var2;" sometimes */
/* reports incorrect values in the *.map file but the */
/* actual value it calculates is usually, if not always, */
/* correct. If you leave out the ". = ALIGN(4);" at the */
/* end of each section then the return value of SIZEOF() */
/* is sometimes incorrect and "var1 += var2;" appears to */
/* not work as well. "var1 += var2" style functions are */
/* avoided below as a result. */
MEMORY {
rom : ORIGIN = 0x08000000, LENGTH = 32M
iwram : ORIGIN = 0x03000000, LENGTH = 32K
ewram : ORIGIN = 0x02000000, LENGTH = 256K
rom : ORIGIN = 0x08000000, LENGTH = 32M
iwram : ORIGIN = 0x03000000, LENGTH = 32K
ewram : ORIGIN = 0x02000000, LENGTH = 256K
}
__text_start = 0x8000000;
__eheap_end = 0x2040000;
__iwram_start = 0x3000000;
__iwram_end = 0x3008000;
__sp_irq = __iwram_end - 0x100;
__sp_usr = __sp_irq - 0x100;
/*
__text_start = 0x8000000;
__eheap_end = 0x2040000;
__iwram_start = 0x3000000;
__iwram_end = 0x3008000;
__sp_irq = __iwram_end - 0x100;
__sp_usr = __sp_irq - 0x100;
*/
__text_start = ORIGIN(rom);
/* __eheap_end = ORIGIN(ewram) + 0x40000; */
__eheap_end = ORIGIN(ewram) + LENGTH(ewram);
__iwram_start = ORIGIN(iwram);
/* __iwram_end = ORIGIN(iwram) + 0x8000; */
__iwram_end = ORIGIN(iwram) + LENGTH(iwram);
__sp_irq = __iwram_end - 0x100;
__sp_usr = __sp_irq - 0x100;
SECTIONS
{
. = __text_start;
.init :
{
KEEP (*(.init))
. = ALIGN(4);
} >rom =0xff
. = __text_start;
.init :
{
KEEP (*(.init))
. = ALIGN(4);
} >rom =0xff
.plt :
{
*(.plt)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom
.plt :
{
*(.plt)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom
.text : /* ALIGN (4): */
{
*(EXCLUDE_FILE (*.iwram*) .text)
*(.text.*)
*(.stub)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.gnu.linkonce.t*)
*(.glue_7)
*(.glue_7t)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0xff
.text : /* ALIGN (4): */
{
*(EXCLUDE_FILE (*.iwram*) .text)
*(.text.*)
*(.stub)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.gnu.linkonce.t*)
*(.glue_7)
*(.glue_7t)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0xff
__text_end = .;
.fini :
{
KEEP (*(.fini))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom =0
__text_end = .;
.fini :
{
KEEP (*(.fini))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom =0
.rodata :
{
*(.rodata)
*all.rodata*(*)
*(.roda)
*(.rodata.*)
*(.gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0xff
.rodata :
{
*(.rodata)
*all.rodata*(*)
*(.roda)
*(.rodata.*)
/************************************************************ FL: Attempt n.2 */
/* *(.data.*) Moved here from EWRAM because size matters */
*(.gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0xff
.ctors :
{
/* gcc uses crtbegin.o to find the start of the constructors, so
we make sure it is first. Because this is a wildcard, it
doesn't matter if the user does not actually link against
crtbegin.o; the linker won't look for a file to match a
wildcard. The wildcard also means that it doesn't matter which
directory crtbegin.o is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
.ctors :
{
/* gcc uses crtbegin.o to find the start of the constructors, so
we make sure it is first. Because this is a wildcard, it
doesn't matter if the user does not actually link against
crtbegin.o; the linker won't look for a file to match a
wildcard. The wildcard also means that it doesn't matter which
directory crtbegin.o is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0
.jcr : { KEEP (*(.jcr)) } >rom
.jcr : { KEEP (*(.jcr)) } >rom
.eh_frame :
{
KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0
.eh_frame :
{
KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0
.gcc_except_table :
{
*(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0
.gcc_except_table :
{
*(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0
__iwram_lma = .;
.iwram __iwram_start : AT (__iwram_lma)
{
__iwram_start = ABSOLUTE(.) ;
*(.iwram)
*iwram.*(.text)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff
/************************************************************* FL: Attempt n.2
__data_lma = . + SIZEOF(.gcc_except_table) ;
__data_lma = __iwram_lma + SIZEOF(.iwram) ;
__iwram_end = . ;
.data ALIGN(4) : AT (__data_lma)
{
__data_start = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
} >rom = 0xff
.bss ALIGN(4) :
{
__bss_start = ABSOLUTE(.);
__bss_start__ = ABSOLUTE(.);
*(.dynbss)
*(.gnu.linkonce.b*)
*(.bss*)
*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram
__bss_end = . ;
__bss_end__ = . ;
.data ALIGN(4) : AT (__data_lma)
{
__data_start = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
} >iwram = 0xff
__iwram_overlay_lma = __data_lma + SIZEOF(.data);
__data_end = .;
__iwram_overlay_start = . ;
OVERLAY ALIGN(4) : NOCROSSREFS AT (__iwram_overlay_lma)
{
.iwram0 { *(.iwram0) . = ALIGN(4);}
.iwram1 { *(.iwram1) . = ALIGN(4);}
.iwram2 { *(.iwram2) . = ALIGN(4);}
.iwram3 { *(.iwram3) . = ALIGN(4);}
.iwram4 { *(.iwram4) . = ALIGN(4);}
.iwram5 { *(.iwram5) . = ALIGN(4);}
.iwram6 { *(.iwram6) . = ALIGN(4);}
.iwram7 { *(.iwram7) . = ALIGN(4);}
.iwram8 { *(.iwram8) . = ALIGN(4);}
.iwram9 { *(.iwram9) . = ALIGN(4);}
}>iwram = 0xff
__ewram_lma = LOADADDR(.iwram0) + SIZEOF(.iwram0)+SIZEOF(.iwram1)+SIZEOF(.iwram2)+SIZEOF(.iwram3)+SIZEOF(.iwram4)+SIZEOF(.iwram5)+SIZEOF(.iwram6)+SIZEOF(.iwram7)+SIZEOF(.iwram8)+SIZEOF(.iwram9);
__iwram_overlay_end = . ;
__iheap_start = . ;
__ewram_start = 0x2000000;
.ewram __ewram_start : AT (__ewram_lma)
{
*(.ewram)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
}>ewram = 0xff
__ewram_overlay_lma = __ewram_lma + SIZEOF(.ewram);
.sbss ALIGN(4):
{
__sbss_start = ABSOLUTE(.);
*(.sbss)
. = ALIGN(4);
} >ewram
__data_end = .;
*********************************************/
__sbss_end = .;
__ewram_end = . ;
__ewram_overlay_start = . ;
OVERLAY ALIGN(4): NOCROSSREFS AT (__ewram_overlay_lma)
{
.ewram0 { *(.ewram0) . = ALIGN(4);}
.ewram1 { *(.ewram1) . = ALIGN(4);}
.ewram2 { *(.ewram2) . = ALIGN(4);}
.ewram3 { *(.ewram3) . = ALIGN(4);}
.ewram4 { *(.ewram4) . = ALIGN(4);}
.ewram5 { *(.ewram5) . = ALIGN(4);}
.ewram6 { *(.ewram6) . = ALIGN(4);}
.ewram7 { *(.ewram7) . = ALIGN(4);}
.ewram8 { *(.ewram8) . = ALIGN(4);}
.ewram9 { *(.ewram9) . = ALIGN(4);}
}>ewram = 0xff
__pad_lma = LOADADDR(.ewram0) + SIZEOF(.ewram0)+SIZEOF(.ewram1)+SIZEOF(.ewram2)+SIZEOF(.ewram3)+SIZEOF(.ewram4)+SIZEOF(.ewram5)+SIZEOF(.ewram6)+SIZEOF(.ewram7)+SIZEOF(.ewram8)+SIZEOF(.ewram9);
/* EZF Advance strips trailing 0xff bytes, add a pad section so nothing important is removed */
.pad ALIGN(4) : AT (__pad_lma)
{
LONG(0x52416b64)
LONG(0x4d)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} = 0xff
__ewram_overlay_end = . ;
__eheap_start = . ;
__iwram_lma = .;
_end = .;
__end__ = _end ; /* v1.3 */
PROVIDE (end = _end); /* v1.3 */
.iwram __iwram_start : AT (__iwram_lma)
{
__iwram_start = ABSOLUTE(.) ;
*(.iwram)
*iwram.*(.text)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff
__iwram_end = . ;
.bss ALIGN(4) :
{
__bss_start = ABSOLUTE(.);
__bss_start__ = ABSOLUTE(.);
*(.dynbss)
*(.gnu.linkonce.b*)
*(.bss*)
*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram
__bss_end = . ;
__bss_end__ = . ;
__iwram_overlay_lma = __iwram_lma + SIZEOF(.iwram);
__iwram_overlay_start = . ;
OVERLAY ALIGN(4) : NOCROSSREFS AT (__iwram_overlay_lma)
{
.iwram0 { *(.iwram0) . = ALIGN(4);}
.iwram1 { *(.iwram1) . = ALIGN(4);}
.iwram2 { *(.iwram2) . = ALIGN(4);}
.iwram3 { *(.iwram3) . = ALIGN(4);}
.iwram4 { *(.iwram4) . = ALIGN(4);}
.iwram5 { *(.iwram5) . = ALIGN(4);}
.iwram6 { *(.iwram6) . = ALIGN(4);}
.iwram7 { *(.iwram7) . = ALIGN(4);}
.iwram8 { *(.iwram8) . = ALIGN(4);}
.iwram9 { *(.iwram9) . = ALIGN(4);}
}>iwram = 0xff
__ewram_lma = LOADADDR(.iwram0) + SIZEOF(.iwram0)+SIZEOF(.iwram1)+SIZEOF(.iwram2)+SIZEOF(.iwram3)+SIZEOF(.iwram4)+SIZEOF(.iwram5)+SIZEOF(.iwram6)+SIZEOF(.iwram7)+SIZEOF(.iwram8)+SIZEOF(.iwram9);
__iwram_overlay_end = . ;
__iheap_start = . ;
__ewram_start = 0x2000000;
.ewram __ewram_start : AT (__ewram_lma)
{
*(.ewram)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
}>ewram = 0xff
__data_lma = __ewram_lma + SIZEOF(.ewram) ;
.data ALIGN(4) : AT (__data_lma)
{
__data_start = ABSOLUTE(.);
*(.data) /****************************************** FL: Attempt n.2 */
*(.data.*) /* Moved to RODATA for size matters */
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
} >ewram = 0xff
__data_end = .;
__ewram_overlay_lma = __data_lma + SIZEOF(.data);
.sbss ALIGN(4):
{
__sbss_start = ABSOLUTE(.);
*(.sbss)
. = ALIGN(4);
} >ewram
__sbss_end = .;
__ewram_end = . ;
__ewram_overlay_start = . ;
OVERLAY ALIGN(4): NOCROSSREFS AT (__ewram_overlay_lma)
{
.ewram0 { *(.ewram0) . = ALIGN(4);}
.ewram1 { *(.ewram1) . = ALIGN(4);}
.ewram2 { *(.ewram2) . = ALIGN(4);}
.ewram3 { *(.ewram3) . = ALIGN(4);}
.ewram4 { *(.ewram4) . = ALIGN(4);}
.ewram5 { *(.ewram5) . = ALIGN(4);}
.ewram6 { *(.ewram6) . = ALIGN(4);}
.ewram7 { *(.ewram7) . = ALIGN(4);}
.ewram8 { *(.ewram8) . = ALIGN(4);}
.ewram9 { *(.ewram9) . = ALIGN(4);}
}>ewram = 0xff
__pad_lma = LOADADDR(.ewram0) + SIZEOF(.ewram0)+SIZEOF(.ewram1)+SIZEOF(.ewram2)+SIZEOF(.ewram3)+SIZEOF(.ewram4)+SIZEOF(.ewram5)+SIZEOF(.ewram6)+SIZEOF(.ewram7)+SIZEOF(.ewram8)+SIZEOF(.ewram9);
/* EZF Advance strips trailing 0xff bytes, add a pad section so nothing important is removed */
.pad ALIGN(4) : AT (__pad_lma)
{
LONG(0x52416b64)
LONG(0x4d)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} = 0xff
__ewram_overlay_end = . ;
__eheap_start = . ;
_end = .;
__end__ = _end ; /* v1.3 */
PROVIDE (end = _end); /* v1.3 */
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
.stack 0x80000 : { _stack = .; *(.stack) }
/* These must appear regardless of . */
}
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
.stack 0x80000 : { _stack = .; *(.stack) }
/* These must appear regardless of . */
}

View File

@ -37,14 +37,17 @@ end;
function do_write(h: longint; addr: pointer; len: longint) : longint;
begin
result := -1;
end;
function do_read(h: longint; addr: pointer; len: longint) : longint;
begin
result := -1;
end;
function do_filepos(handle: longint) : longint;
begin
result := -1;
end;
procedure do_seek(handle, pos: longint);
@ -53,10 +56,12 @@ end;
function do_seekend(handle: longint):longint;
begin
result := -1;
end;
function do_filesize(handle : longint) : longint;
begin
result := -1;
end;
{ truncate at a given position }
@ -70,5 +75,6 @@ end;
function do_isdevice(handle: longint): boolean;
begin
result := false;
end;

View File

@ -17,9 +17,10 @@
OS Memory allocation / deallocation
****************************************************************************}
function SysOSAlloc(size: ptrint): pointer;
begin
result := pointer($02000000);
end;
{ $define HAS_SYSOSFREE}

View File

@ -110,6 +110,24 @@ begin
end;
procedure InitHeap;
begin
FillChar(freelists_fixed,sizeof(tfreelists),0);
FillChar(freelists_free_chunk,sizeof(freelists_free_chunk),0);
freelist_var:=nil;
{The GBA has no operating system from which we ask memory, so we
initialize the heap with a single block of memory.}
freeoslistcount:=1;
freeoslist:=pointer($2040000);
fillchar(freeoslist^,sizeof(freeoslist^),0);
freeoslist^.size:=$40000; {GBA heap is $40000 bytes.}
fillchar(internal_status,sizeof(internal_status),0);
end;
begin
StackLength := CheckInitialStkLen(InitialStkLen);
StackBottom := Sptr - StackLength;

View File

@ -34,7 +34,8 @@ interface
implementation
uses dos, sysconst;
uses
dos, sysconst;
{ Include platform independent implementation part }
{$i sysutils.inc}
@ -45,45 +46,54 @@ uses dos, sysconst;
****************************************************************************}
function FileOpen(const FileName: string; Mode: Integer): LongInt;
begin
result := -1;
end;
function FileGetDate(Handle: LongInt) : LongInt;
begin
result := -1;
end;
function FileSetDate(Handle, Age: LongInt) : LongInt;
begin
result := -1;
end;
function FileCreate(const FileName: string) : LongInt;
begin
result := -1;
end;
function FileCreate(const FileName: string; Mode: integer): LongInt;
begin
result := -1;
end;
function FileRead(Handle: LongInt; var Buffer; Count: LongInt): LongInt;
begin
result := -1;
end;
function FileWrite(Handle: LongInt; const Buffer; Count: LongInt): LongInt;
begin
result := -1;
end;
function FileSeek(Handle, FOffset, Origin: LongInt) : LongInt;
begin
result := -1;
end;
function FileSeek(Handle: LongInt; FOffset, Origin: Int64): Int64;
begin
result := -1;
end;
@ -94,16 +104,19 @@ end;
function FileTruncate(Handle, Size: LongInt): Boolean;
begin
result := false;
end;
function DeleteFile(const FileName: string) : Boolean;
begin
result := false;
end;
function RenameFile(const OldName, NewName: string): Boolean;
begin
result := false;
end;
@ -112,22 +125,26 @@ end;
Function FileAge (Const FileName : String): Longint;
begin
result := -1;
end;
Function FileExists (Const FileName : String) : Boolean;
Begin
result := false;
end;
Function FindFirst (Const Path : String; Attr : Longint; Out Rslt : TSearchRec) : Longint;
begin
result := -1;
end;
Function FindNext (Var Rslt : TSearchRec) : Longint;
begin
result := -1;
end;
Procedure FindClose (Var F : TSearchrec);
@ -136,13 +153,13 @@ end;
Function FileGetAttr (Const FileName : String) : Longint;
begin
result := -1;
end;
Function FileSetAttr (Const Filename : String; Attr: longint) : Longint;
begin
result := -1;
end;
@ -160,39 +177,43 @@ end;
Function DiskFree(Drive: Byte): int64;
Begin
result := -1;
End;
Function DiskSize(Drive: Byte): int64;
Begin
result := -1;
End;
Function GetCurrentDir : String;
begin
result := '';
end;
Function SetCurrentDir (Const NewDir : String) : Boolean;
begin
result := false;
end;
Function CreateDir (Const NewDir : String) : Boolean;
begin
result := false;
end;
Function RemoveDir (Const Dir : String) : Boolean;
begin
result := false;
end;
function DirectoryExists(const Directory: string): Boolean;
begin
result := false;
end;
@ -216,9 +237,9 @@ end ;
function SysErrorMessage(ErrorCode: Integer): String;
begin
{ Result:=StrError(ErrorCode);}
result := '';
end;
{****************************************************************************
@ -227,23 +248,28 @@ end;
Function GetEnvironmentVariable(Const EnvVar : String) : String;
begin
result := '';
end;
Function GetEnvironmentVariableCount : Integer;
begin
result := -1;
end;
Function GetEnvironmentString(Index : Integer) : String;
begin
result := '';
end;
function ExecuteProcess (const Path: AnsiString; const ComLine: AnsiString): integer;
begin
result := -1;
end;
function ExecuteProcess (const Path: AnsiString;
const ComLine: array of AnsiString): integer;
begin
result := -1;
end;

View File

@ -42,7 +42,7 @@ end;
function TThread.GetPriority: TThreadPriority;
begin
result := tpNormal;
end;
@ -106,7 +106,7 @@ end;
function TThread.WaitFor: Integer;
begin
result := -1;
end;