summaryrefslogtreecommitdiff
path: root/packages/libgbafpc/src/gba/dldi.inc
diff options
context:
space:
mode:
Diffstat (limited to 'packages/libgbafpc/src/gba/dldi.inc')
-rw-r--r--packages/libgbafpc/src/gba/dldi.inc51
1 files changed, 51 insertions, 0 deletions
diff --git a/packages/libgbafpc/src/gba/dldi.inc b/packages/libgbafpc/src/gba/dldi.inc
new file mode 100644
index 0000000000..075b7aac4c
--- /dev/null
+++ b/packages/libgbafpc/src/gba/dldi.inc
@@ -0,0 +1,51 @@
+{$ifdef GBA_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;
+
+// I/O interface with DLDI extensions
+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 GBA_INTERFACE}