Linux Loader
Linux Loader emulates Sega Lindbergh. It reads 9 files, none of them required: it starts games without them.
About this profile
Install this emulator's files
With RetroBat: the installer finds RetroBat and its BIOS folder, then downloads only the files Linux Loader reads there and checks each one.
Open the Start menu. Type PowerShell and open it. Paste the line. Press Enter.
&([scriptblock]::Create((irm https://raw.githubusercontent.com/Abdess/retrobios/main/install.ps1))) --emulator linuxloaderTechnical notes
The successor of Lindbergh Loader from the same team, in a repository of its own, built for Linux and for 32-bit Windows. RetroBat installs the Windows release as linuxloader.exe with an ll-deps folder beside it (emulatorlauncher Installer.cs:85, emulatorlauncher Program.cs:114) and runs it from that folder with -g <game>/disk0[/<launcher>], plus -c, -o and -d for the configuration, controls and controller database files it writes there (emulatorlauncher Linuxloader.Generator.cs:144-181, 196-213).
On Linux the launcher puts linuxloader.so in LD_PRELOAD, found in /app/lib32,
the AppImage lib32, the -L directory, ll-deps, the loader directory, then the
system 32-bit library folders, and runs the game ELF
(src/, 1149-1168). On Windows there is no Linux
runtime at all. src/loader/elfLoader maps the game ELF itself and resolves
every DT_NEEDED library through SymbolResolver
(src/). Libraries listed in
src/ are answered by a Windows DLL
(libCg.so by Cg.dll, libCgGL.so by CgGL.dll, libopenal.so.0 and .1 by
openal32.dll, libz.so.1 by zlib1.dll, libgcc_s.so.1 by libgcc_s_dw2-1.dll)
or by the loader's own bridges (libc, libpthread, libGL, libasound, X11,
libsegaapi, libkswapapi and the rest marked INTERNAL). Any other library is
loaded as a native 32-bit Linux shared object from the search path: the
executable folder, ll-deps, the -L directory, the game folder, its lib
subfolder, ../dso/q2satl_lind/release and data/drv/cri/lindbergh/libs
(symbolResolver.cpp:153-226). A missing libstdc++ ends the run, any other
missing library is logged and its symbols stay unresolved
(symbolResolver.cpp:364-371). The Windows release ships these as ll-deps,
copied from libs/win32/ll-deps plus the MinGW libgcc_s_dw2-1.dll
(scripts/).
The Lindbergh hardware is emulated in the loader with no firmware file.
The fopen hooks answer /dev/zero or NUL for the baseboard, EEPROM, serial
ports and PCI config space (src/,
319-420). eeprom.bin is opened from the working directory and created when
absent (src/), sram.bin
defaults to the working directory and is created on first open
(src/, hardware/lindbergh/baseBoard.c:64-78),
and card reader files InidCrd%03d.crd or InidCard%02d.crd are written from
scratch (hardware/lindbergh/cardReader.c:249-253, 386-397). linuxloader.ini
and controls.ini are optional, each falling back to built-in defaults
(src/).
Shaders come from the game dump. The Cg 2.0 runtime is loaded only for the
titles whose patches recompile them: Harley-Davidson, Quiz Answer x Answer,
Rambo, The House of the Dead EX and Too Spicy
(src/, 2553, 2587, 2621, 2655, 3090, 3156).
Primeval Hunt runs through Mesa's Zink driver by default
(PRIMEVAL_HUNT_USE_ZINK, src/loader/config/config.c:166, 387).
The boot logos and console fonts are compiled in. resources/lindberghLogo.h
and resources/font.h carry the same bytes as the Lindbergh Loader
built-ins (sha1 c800e91a, 9a888a49, 6fcc3fff and e0814d3d). The originals
are read from the game folder only with DISABLE_BUILTIN_LOGOS or
DISABLE_BUILTIN_FONT (src/, 372-373).
9 files: 0 required, 9 optional. 6 have an HLE fallback. 18 more files come with the app.
By kind: 26 BIOS and 1 game data.
| File | Required | Hash |
|---|---|---|
segaboot |
no | - |
logo.tga |
no | - |
logo_red.tga |
no | - |
LucidaConsole_12.tga |
no | - |
LucidaConsole_12.abc |
no | - |
SEGA_KakuGothic-DB-Roman_12.tga |
no | - |
SEGA_KakuGothic-DB-Roman_12.abc |
no | - |
lindbergrc |
no | - |
gamecontrollerdb.txt |
no | - |
libCg2.so |
with the app | SHA1 23b85ca78122 |
cg2.dll |
with the app | SHA1 44459da64df1 |
libCg.so |
with the app | SHA1 9637cd9d774d |
libCgGL.so |
with the app | SHA1 b2ca278a7c4d |
cg.dll |
with the app | SHA1 e7da9515c4b2 |
cgGL.dll |
with the app | SHA1 5b98e1e97387 |
libstdc++.so.5 |
with the app | SHA1 c3480f87336d |
libstdc++.so.6 |
with the app | SHA1 5ccc8d96d9de |
libncurses.so.5 |
with the app | SHA1 1dd354eb1560 |
libpcsclite.so.1 |
with the app | SHA1 152c306568e1 |
libcrypto.so.0.9.7 |
with the app | SHA1 0ee8ed2a8fb4 |
libssl.so.0.9.7 |
with the app | SHA1 60c2838da6cd |
libopenal.so.0 |
with the app | SHA1 91d69bba438f |
openal32.dll |
with the app | SHA1 b33c59e506e4 |
zlib1.dll |
with the app | SHA1 4861e064669c |
libgcc_s_dw2-1.dll |
with the app | - |
zink/opengl32.dll |
with the app | SHA1 6d59e04c9c69 |
zink/libgallium_wgl.dll |
with the app | SHA1 5d843698d8fd |
In this collection: 8 in repo, 0 missing and 1 unsourceable.
Optional
Section titled “Optional”8 files
segaboot optional in repo
Sega Lindbergh boot and hardware check program
- System: Sega Lindbergh
- Source:
src/,loader/ mainShared.c:861-864 src/loader/ mainShared.c:1170-1172 - Collection copy:
bios/Sega/Lindbergh/segaboot
- Run as "segaboot -t" under -s or --segaboot, from the game folder. A 32-bit x86 Linux ELF, /usr/sbin/segaboot on the system CompactFlash card. The Windows build creates tmp\segaboot for it (
src/loader/mainW.cpp:121-124).
logo.tga optional in repo HLE fallback built-in fallback
Lindbergh boot logo, read from /usr/lib/boot on the original system
- System: Sega Lindbergh
- Source:
src/loader/ redirections/ filesystemShared.c:324-336 - Collection copy:
bios/Sega/Lindbergh/logo.tga
- Read from the game folder only when DISABLE_BUILTIN_LOGOS is set. Otherwise the lindberghLogo array of resources/lindberghLogo.h answers the read.
logo_red.tga optional in repo HLE fallback built-in fallback
Lindbergh Red boot logo, read from /usr/lib/boot on the original system
- System: Sega Lindbergh
- Source:
src/loader/ redirections/ filesystemShared.c:338-350 - Collection copy:
bios/Sega/ Lindbergh/ logo_red.tga
- Read from the game folder only when DISABLE_BUILTIN_LOGOS is set. Otherwise the lindberghLogoRed array answers the read.
LucidaConsole_12.tga optional in repo HLE fallback built-in fallback
Lucida Console font texture
- System: Sega Lindbergh
- Source:
src/loader/ redirections/ filesystemShared.c:352-364 - Collection copy:
bios/Sega/ Lindbergh/ LucidaConsole_12.tga
- Read from the game folder only when DISABLE_BUILTIN_FONT is set. Otherwise the fontTGA array of resources/font.h answers the read, one atlas shared by all four font paths.
LucidaConsole_12.abc optional in repo HLE fallback built-in fallback
Lucida Console font metrics
- System: Sega Lindbergh
- Source:
src/loader/ redirections/ filesystemShared.c:366-378 - Collection copy:
bios/Sega/ Lindbergh/ LucidaConsole_12.abc
- Read from the game folder only when DISABLE_BUILTIN_FONT is set. Otherwise the fontABC array of resources/font.h answers the read.
SEGA_KakuGothic-DB-Roman_12.tga optional in repo HLE fallback built-in fallback
Sega Kaku Gothic console font texture
- System: Sega Lindbergh
- Source:
src/loader/ redirections/ filesystemShared.c:387-399 - Collection copy:
bios/Sega/ Lindbergh/ SEGA_KakuGothic-DB-Roman_12.tga
- Read from the game folder only when DISABLE_BUILTIN_FONT is set. Otherwise the same fontTGA atlas answers the read.
SEGA_KakuGothic-DB-Roman_12.abc optional in repo HLE fallback built-in fallback
Sega Kaku Gothic console font metrics
- System: Sega Lindbergh
- Source:
src/loader/ redirections/ filesystemShared.c:401-413 - Collection copy:
bios/Sega/ Lindbergh/ SEGA_KakuGothic-DB-Roman_12.abc
- Read from the game folder only when DISABLE_BUILTIN_FONT is set. Otherwise the same fontABC table answers the read.
lindbergrc optional unsourceable
Lindbergh development configuration read by Sega's lxmaster and segaboot
- System: Sega Lindbergh
- The fopen hook rewrites /root/lindbergrc to lindbergrc in the game folder. The loader neither creates the file nor substitutes for it.
- Not collectable: Pushed from a developer host onto development units. A retail system card ships none. (acknowledged gaps)
Game data
Section titled “Game data”1 file
gamecontrollerdb.txt optional in repo game data
SDL gamepad mappings added on top of SDL's own table
- System: Sega Lindbergh
- Source:
src/,loader/ mainShared.c:456-477 src/loader/ input/ sdlInput.c:216-223 - Collection copy:
bios/SDL/ GameControllerDB/ gamecontrollerdb.txt
- Loaded from the path given by -d or --controllerdb, passed through LINUX_LOADER_CONTROLS_DB_PATH. A missing file is logged and only the mappings SDL carries remain.
Comes with the app
Section titled “Comes with the app”18 files
libCg2.so comes with the app
NVIDIA Cg 2.0.0.12 runtime used to recompile the game shaders, Linux build
- System: Sega Lindbergh
- Size: 3.2 MB
- SHA1:
23b85ca78122d862553c1b54200158cbccf30d65 - Validation: signature
- Source:
src/,loader/ graphics/ shaderPatches.c:1157-1264 src/loader/ graphics/ shaderPatches.c:1266-1285 - Collection copy:
bios/Sega/Lindbergh/libCg2.so
- Searched at LIBCG_PATH, then $LINUX_LOADER_CURRENT_DIR/ll-deps/libCg2.so, $LINUX_LOADER_CURRENT_DIR/libCg2.so, $LINUX_LOADER_DEPS_PATH/libCg2.so, /app/lib32/libCg2.so and the AppImage lib32. The loader reads 8 bytes at 0x226d84 and requires "2.0.0.12". A missing file or another version ends the run for the titles that recompile shaders. Upstream vendors it as libs/linux_x86/libCg.so and the build scripts copy it as libCg2.so (
scripts/linux/make-linux.sh:8,scripts/).appimage/ make-appimage.sh:132
cg2.dll comes with the app
NVIDIA Cg 2.0 runtime used to recompile the game shaders, Windows build
- System: Sega Lindbergh
- Size: 2.3 MB
- SHA1:
44459da64df180900a483fecc1128e775634de1e - Source:
src/,loader/ graphics/ shaderPatches.c:1266-1285 libs/win32/ll-deps/cg2.dll
- LoadLibraryA("cg2.dll") through the default DLL directories, which include ll-deps. Failure to load it or to find cgCreateContext and the other entry points ends the run. No version check on this build.
- Not collectable: ships in ll-deps of the Windows release, vendored in libs/win32/ll-deps, and is not collected (acknowledged gaps)
libCg.so comes with the app
NVIDIA Cg 3.1 runtime linked by the game binaries, Linux build
- System: Sega Lindbergh
- Size: 11.3 MB
- SHA1:
9637cd9d774db008018851ab0889701d3dd74df4 - Source:
src/,loader/ mainShared.c:488-604 scripts/linux/make-linux.sh:7
- Resolved by the dynamic linker for the game ELF. Upstream ships it in libs/linux_x86/Cg-3.1.zip, unpacked into ll-deps.
libCgGL.so comes with the app
NVIDIA Cg 3.1 OpenGL runtime linked by the game binaries, Linux build
- System: Sega Lindbergh
- Size: 454.6 KB
- SHA1:
b2ca278a7c4dd446ce1b16d90e24648b9d2b819e - Source:
src/,loader/ mainShared.c:488-604 scripts/linux/make-linux.sh:7
- Same origin and mechanism as libCg.so.
cg.dll comes with the app
NVIDIA Cg runtime answering libCg.so on Windows
- System: Sega Lindbergh
- Size: 8.1 MB
- SHA1:
e7da9515c4b2cd3894f018e3ff63d2ce7f4a094c - Source:
src/,loader/ elfLoader/ elfLoader.cpp:362 src/loader/ elfLoader/ symbolResolver.cpp:262-300
- The game ELF's libCg.so is mapped to Cg.dll and looked up in the search path, ll-deps included, then by LoadLibraryA.
- Not collectable: ships in ll-deps of the Windows release, vendored in libs/win32/ll-deps, and is not collected (acknowledged gaps)
cgGL.dll comes with the app
NVIDIA Cg OpenGL runtime answering libCgGL.so on Windows
- System: Sega Lindbergh
- Size: 350.8 KB
- SHA1:
5b98e1e973873ef47b337161e67b590286410dbb - Source:
src/,loader/ elfLoader/ elfLoader.cpp:363 src/loader/ elfLoader/ symbolResolver.cpp:262-300
- The game ELF's libCgGL.so is mapped to CgGL.dll, found the same way as cg.dll.
- Not collectable: ships in ll-deps of the Windows release, vendored in libs/win32/ll-deps, and is not collected (acknowledged gaps)
libstdc++.so.5 comes with the app
GNU C++ runtime 5 linked by the older game binaries
- System: Sega Lindbergh
- Size: 743.5 KB
- SHA1:
c3480f87336de0407490f4776d78c2baf9d3d965 - Source:
src/,loader/ elfLoader/ symbolResolver.cpp:302-371 libs/win32/ ll-deps/ libstdc++.so.5
- On Windows loaded as a native Linux shared object from the search path. A game that needs it and does not find it stops with "Critical library not found". On Linux it comes from the system, and the Linux build script copies the host's copy into ll-deps (
scripts/linux/make-linux.sh:14). - Not collectable: ships in ll-deps of the Windows release, vendored in libs/win32/ll-deps, and is not collected (acknowledged gaps)
libstdc++.so.6 comes with the app
GNU C++ runtime 6 linked by the newer game binaries
- System: Sega Lindbergh
- Size: 3.9 MB
- SHA1:
5ccc8d96d9de310a597a98cc57947b0bcdcbe238 - Source:
src/,loader/ elfLoader/ symbolResolver.cpp:302-371 libs/win32/ ll-deps/ libstdc++.so.6
- Same handling as libstdc++.so.5 on Windows. On Linux the system copy is used.
- Not collectable: ships in ll-deps of the Windows release, vendored in libs/win32/ll-deps, and is not collected (acknowledged gaps)
libncurses.so.5 comes with the app
ncurses 5 linked by some game binaries
- System: Sega Lindbergh
- Size: 157.4 KB
- SHA1:
1dd354eb156031d848e947df070d0b436647bfef - Source:
src/,loader/ elfLoader/ symbolResolver.cpp:302-371 libs/win32/ ll-deps/ libncurses.so.5
- Loaded as a native shared object on Windows. A missing copy is logged and the symbols it would provide stay unresolved.
- Not collectable: ships in ll-deps of the Windows release, vendored in libs/win32/ll-deps, and is not collected (acknowledged gaps)
libpcsclite.so.1 comes with the app
PC/SC smart card library linked by the card reader titles
- System: Sega Lindbergh
- Size: 49.4 KB
- SHA1:
152c306568e1761981ffaa31f030859fe6eb3ec5 - Source:
src/,loader/ elfLoader/ symbolResolver.cpp:302-371 libs/win32/ ll-deps/ libpcsclite.so.1
- Loaded as a native shared object on Windows, missing copy logged.
- Not collectable: ships in ll-deps of the Windows release, vendored in libs/win32/ll-deps, and is not collected (acknowledged gaps)
libcrypto.so.0.9.7 comes with the app
OpenSSL 0.9.7 crypto library linked by the networked games
- System: Sega Lindbergh
- Size: 1019.3 KB
- SHA1:
0ee8ed2a8fb49926b96f1e5237f573dcfb8ed67e - Source:
src/,loader/ elfLoader/ symbolResolver.cpp:302-371 scripts/linux/make-linux.sh:10
- Same bytes in libs/linux_x86 and libs/win32/ll-deps. Resolved by the dynamic linker on Linux and loaded as a native shared object on Windows. Shipped in ll-deps of both release archives and in the AppImage.
libssl.so.0.9.7 comes with the app
OpenSSL 0.9.7 TLS library linked by the networked games
- System: Sega Lindbergh
- Size: 832.5 KB
- SHA1:
60c2838da6cd97810ff11c5c7e7fdc203a4c2762 - Source:
src/,loader/ elfLoader/ symbolResolver.cpp:302-371 scripts/linux/make-linux.sh:11
- Paired with libcrypto.so.0.9.7, same bytes in both upstream folders, and shipped with it in both release archives and the AppImage.
libopenal.so.0 comes with the app
OpenAL runtime preloaded for Quiz Answer x Answer, Linux build
- System: Sega Lindbergh
- Size: 634.6 KB
- SHA1:
91d69bba438f321d6e3ebb60b3e89b1edd63de17 - Source:
src/loader/mainShared.c:32,src/loader/ mainShared.c:1160-1166
- When the ELF is q2satl_lind the launcher looks it up with findPreloadLibrary and adds it to LD_PRELOAD. Absent, it prints that sound may be missing and the game runs. Shipped in ll-deps of the Linux archive and in the AppImage.
openal32.dll comes with the app
OpenAL runtime answering libopenal.so.0 and .1 on Windows
- System: Sega Lindbergh
- Size: 825.2 KB
- SHA1:
b33c59e506e44c8d79e812794bcde858772bc6d2 - Source:
src/,loader/ elfLoader/ elfLoader.cpp:360-361 libs/win32/ ll-deps/ openal32.dll
- Not collectable: ships in ll-deps of the Windows release, vendored in libs/win32/ll-deps, and is not collected (acknowledged gaps)
zlib1.dll comes with the app
zlib answering libz.so.1 on Windows
- System: Sega Lindbergh
- Size: 83.5 KB
- SHA1:
4861e064669c9c9c8f910431a7812feb32b32c63 - Source:
src/,loader/ elfLoader/ elfLoader.cpp:365 libs/win32/ll-deps/zlib1.dll
- Not collectable: ships in ll-deps of the Windows release, vendored in libs/win32/ll-deps, and is not collected (acknowledged gaps)
libgcc_s_dw2-1.dll comes with the app
MinGW GCC runtime answering libgcc_s.so.1 and libgcc.so on Windows
- System: Sega Lindbergh
- Not in the repository. The build script copies it from the MinGW toolchain into ll-deps.
- Not collectable: copied from the MinGW toolchain into ll-deps of the Windows release, and not collected (acknowledged gaps)
opengl32.dll comes with the app
Mesa OpenGL front end used to run Primeval Hunt through Zink on Windows
- Path:
zink/opengl32.dll - System: Sega Lindbergh
- Size: 153.5 KB
- SHA1:
6d59e04c9c691848ec52eb21c3e69ec376e9de87 - Source:
src/loader/mainW.cpp:141-155,libs/win32/ ll-deps/ zink/ opengl32.dll
- Loaded from <ll-deps or -L>/zink/ for Primeval Hunt while PRIMEVAL_HUNT_USE_ZINK is on, its default. If it fails to load the loader prints "Failed to load OpenGL!" and exits. Every other game uses the system opengl32.dll.
- Not collectable: ships in ll-deps of the Windows release, vendored in libs/win32/ll-deps, and is not collected (acknowledged gaps)
libgallium_wgl.dll comes with the app
Mesa Gallium driver loaded by the Zink opengl32.dll
- Path:
zink/libgallium_wgl.dll - System: Sega Lindbergh
- Size: 26.3 MB
- SHA1:
5d843698d8fd0c834771fd3625cff4d33e6c3958 - Source:
src/loader/mainW.cpp:141-145,libs/win32/ ll-deps/ zink/ libgallium_wgl.dll
- The zink folder is added to the DLL search path before opengl32.dll is loaded.
- Not collectable: ships in ll-deps of the Windows release, vendored in libs/win32/ll-deps, and is not collected (acknowledged gaps)
Next steps
Section titled “Next steps”- Get your files, for the setup you play on
- Every system, and the files each one needs
- When a game does not start