blob: 796d9f91f8c11d9026ac4d5361c2ae98a62088e1 (
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
|
{$ifdef NDS_INTERFACE}
const
// FIX_ALL = $01;
// FIX_GLUE = $02;
// FIX_GOT = $04;
// FIX_BSS = $08;
DLDI_MAGIC_STRING_LEN = 8;
DLDI_FRIENDLY_NAME_LEN = 48;
var
DLDI_MAGIC_NUMBER: cuint32; cvar; external;
type
DLDI_INTERFACE = packed record
magicNumber: cuint32;
magicString: array [0..DLDI_MAGIC_STRING_LEN-1] of cchar;
versionNumber: cuint8;
driverSize: cuint8;
fixSectionsFlags: cuint8;
allocatedSize: cuint8;
friendlyName: array [0..DLDI_FRIENDLY_NAME_LEN-1]of cchar;
// Pointers to sections that need address fixing
dldiStart: pointer;
dldiEnd: pointer;
interworkStart: pointer;
interworkEnd: pointer;
gotStart: pointer;
gotEnd: pointer;
bssStart: pointer;
bssEnd: pointer;
// Original I/O interface data
ioInterface: DISC_INTERFACE;
end;
PDLDI_INTERFACE = ^DLDI_INTERFACE;
TDLDI_INTERFACE = DLDI_INTERFACE;
var
io_dldi_data: PDLDI_INTERFACE; cvar; external;
function dldiGetInternal(): PDISC_INTERFACE; cdecl; external;
function dldiIsValid(const io: PDLDI_INTERFACE): cbool; cdecl; external;
procedure dldiFixDriverAddresses(io: PDLDI_INTERFACE); cdecl; external;
function dldiLoadFromFile(const path: pcchar): PDLDI_INTERFACE; cdecl; external;
procedure dldiFree(dldi: PDLDI_INTERFACE); cdecl; external;
{$endif NDS_INTERFACE}
|