summaryrefslogtreecommitdiff
path: root/fpcsrc/packages/libndsfpc/src/nds/bios.inc
blob: 0fef5a0b5cdb5bb637160e8de35cc4697f65d9cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
{$ifdef NDS_INTERFACE}

type
  TGetHeaderCallback = function(source: pcuint8;  dest: pcuint16; r2: cuint32): pcint;
  getHeaderCallback = TGetHeaderCallback;
  TGetResultCallback = function(source: pcuint8): pcint;
  getResultCallback = TGetResultCallback; 
  TGetByteCallback = function(source: pcuint8): pcuint8; 
  getByteCallback = TGetByteCallback;

type
  DecompressionStream = packed record
    getSize: TGetHeaderCallback; 
    getResult: TGetResultCallback; 
    readByte: TGetByteCallback; 
  end;
  TDecompressionStream = DecompressionStream;
  PDecompressionStream = ^TDecompressionStream;

  UnpackStruct = packed record
    sourceSize: cuint16; // in bytes
    sourceWidth: cuint8;
    destWidth: cuint8;
    dataOffset: cuint32;
  end;
  TUnpackStruct = UnpackStruct;
  PUnpackStruct = ^TUnpackStruct;


procedure swiSoftReset(); cdecl; external;

procedure swiDelay(duration: cuint32); cdecl; external;

function swiDivide(numerator, divisor: cint): cint; cdecl; external;
function swiRemainder(numerator, divisor: cint): cint; cdecl; external;
procedure swiDivMod(numerator, divisor: cint; var result, remainder: cint); cdecl; external;

const
  COPY_MODE_HWORD = (0);
  COPY_MODE_WORD  = (1 shl 26);
  COPY_MODE_COPY  = (0);
  COPY_MODE_FILL  = (1 shl 24);

procedure swiCopy(const source: pointer; dest: pointer; flags: cint); cdecl; external;
procedure swiFastCopy(const source: pointer; dest: pointer; flags: cint); cdecl; external;

function swiSqrt(value: cint): cint; cdecl; external;

function swiCRC16(crc: cuint16; data: pointer; size: cuint32): cuint16; cdecl; external;

function swiIsDebugger(): cint; cdecl; external;

procedure swiUnpackBits(source: pcuint8; destination: pcuint32; params: PUnpackStruct); cdecl; external;

procedure swiDecompressLZSSWram(source, destination: pointer); cdecl; external;
function swiDecompressLZSSVram(source, destination: pointer; toGetSize: cuint32; stream: PDecompressionStream): cint; cdecl; external;

function swiDecompressLZSSVramNTR(source, destination: pointer; toGetSize: cuint32; stream: PDecompressionStream): cint; cdecl; external;
function swiDecompressLZSSVramTWL(source, destination: pointer; toGetSize: cuint32; stream: PDecompressionStream): cint; cdecl; external;

function swiDecompressHuffman(source, destination: pointer; toGetSize: cuint32; stream: PDecompressionStream): cint; cdecl; external;

procedure swiDecompressRLEWram(source, destination: pointer); cdecl; external;
function swiDecompressRLEVram(source, destination: pointer; toGetSize: cuint32; stream: PDecompressionStream): cint; cdecl; external;

{$ifdef ARM9}
  procedure swiWaitForIRQ(); cdecl; external;
  procedure swiSetHaltCR(data: cuint32); cdecl; external;
  procedure swiDecodeDelta8(source, destination: pointer); cdecl; external;
  procedure swiDecodeDelta16(source, destination: pointer); cdecl; external;
{$endif ARM9}

{$ifdef ARM7}
  procedure swiHalt(); cdecl; external;
  procedure swiSleep(); cdecl; external;
  procedure swiSwitchToGBAMode(); cdecl; external;
  procedure swiSetHaltCR(data: cuint8); cdecl; external;
  function swiGetSineTable(index: cint): cuint16; cdecl; external;
  function swiGetPitchTable(index: cint): cuint16; cdecl; external;
  function swiGetVolumeTable(index: cint): cuint8; cdecl; external;
  procedure swiChangeSoundBias(enabled, delay: cint); cdecl; external;
{$endif ARM7}

{$endif NDS_INTERFACE}