Jak raz na zawsze uporządkować BIOS-y dla dziesiątek emulatorów
Każdy, kto kiedykolwiek konfigurował konfigurację retro na Steam Deck, starym mini-PC lub Raspberry Pi, zna tę rutynę. Instalujesz Batocera, EmuDeck lub zwykły RetroArch, wrzucasz ulubione gry na PlayStation 2 lub Sega Saturn, uruchamiasz ROM i widzisz czarny ekran. Log mówi, że brakuje pliku takiego jak scph1001.bin lub saturn_bios.bin.
Następnie rozpoczyna się typowa wyprawa: idziesz do wyszukiwarki, znajdujesz podejrzane strony pełne reklam, pobierasz archiwa o pojemności 50 gigabajtów z masą duplikatów i śmieci. Połowa zrzutów ma błędy w nazwach, sumy kontrolne się nie zgadzają, a emulator ciągle się zawiesza. Projekt RetroBIOS rozwiązuje ten problem podejściem inżynieryjnym.
Dlaczego dokumentacja emulatorów często kłamie
Główny problem z plikami BIOS polega na braku synchronizacji. Autorzy frontendów i powłok (na przykład Recalbox czy Batocera) piszą swoje listy wymaganych plików w wiki. Tymczasem deweloperzy rdzeni emulatorów aktualizują swoje bazy kodu, zmieniają wymagania dotyczące nazw plików, dodają obsługę nowych wersji układów lub modyfikują algorytmy inicjalizacji sprzętu.
W rezultacie oficjalna lista BIOS dla frontendu może być niezsynchronizowana przez lata z tym, czego plik binarny emulatora faktycznie żąda przy uruchomieniu.
Twórcy RetroBIOS wybrali inne podejście. Zamiast czytać nieaktualne fora i strony wiki, analizują bezpośrednio kod źródłowy emulatorów. Jeśli rdzeń Libretro lub samodzielny emulator szuka pliku o określonym rozmiarze z konkretnym haszem MD5, ten fakt jest rejestrowany jako jedyne źródło prawdy.
Co kryje się w projekcie
Repozytorium łączy ogromną bazę danych metadanych, skrypty weryfikacyjne i gotowe do użycia zestawy plików systemowych dla 12 popularnych platform: Batocera, BizHawk, EmuDeck, Lakka, MiSTer FPGA, ROCKNIX, Recalbox, RetroArch, RetroBat, RetroDECK, RetroPie i RomM.
Skala wykonanej pracy robi wrażenie liczbami:
- 436 emulatorów przeanalizowanych ze źródeł
- 463 systemy gamingowe, od starożytnego Atari i ZX Spectrum po PS3 i Nintendo Switch
- 8 925 plików w bazie danych, w tym firmware'y systemowe, ROM-y automatów i czcionki systemowe
- 5 typów sum kontrolnych dla każdego pliku (MD5, SHA1, SHA256, CRC32, Adler-32)
Deweloperzy projektu porównują również zrzuty systemowe z bazami danych cyfrowej konserwacji, takimi jak No-Intro, Redump i TOSEC.
Szczególnie interesująca jest tak zwana analiza luk. Dokumentacja projektu otwarcie wymienia to, czego jeszcze nie ma w bazie danych: rzadkie zrzuty, których społeczność jeszcze fizycznie nie utworzyła, lub unikalne klucze szyfrowania dla konkretnych konsol użytkowników.
Jak zainstalować wszystko jednym poleceniem
Do szybkiej konfiguracji autorzy napisali skrypty instalacyjne. Automatycznie wykrywają twój system operacyjny, weryfikują hasze plików, które już masz, i pobierają tylko to, czego brakuje.
W przypadku Linuksa, macOS i Steam Deck wystarczy uruchomić w terminalu:
curl -fsSL https://raw.githubusercontent.com/Abdess/retrobios/main/install.sh | sh
W systemie Windows przez PowerShell:
irm https://raw.githubusercontent.com/Abdess/retrobios/main/install.ps1 | iex
Jeśli konfigurujesz kartę SD dla przenośnej konsoli bezpośrednio z komputera, możesz przekazać ścieżkę docelową i platformę jako argumenty:
curl -fsSL https://raw.githubusercontent.com/Abdess/retrobios/main/install.sh | sh -s -- --platform retroarch --dest /path/to/sdcard
Skrypt weryfikuje pliki dokładnie tak, jak robi to wybrana przez ciebie powłoka. Na przykład Batocera sprawdza hasz MD5 każdego pliku, BizHawk polega na SHA1, a RetroArch weryfikuje tylko poprawność nazwy pliku w folderze system/.
Tworzenie własnych pakietów przez Pythona
Jeśli nie chcesz pobierać całego archiwum o wielu gigabajtach i budujesz minimalny system dla kilku konkretnych platform, repozytorium ma wygodne narzędzia CLI. Wymagają one tylko Pythona 3 i biblioteki pyyaml.
Zbuduj pakiet tylko dla emulatora Dolphin:
python scripts/generate_pack.py --emulator dolphin
Wygeneruj zestaw plików wyłącznie dla PlayStation 2:
python scripts/generate_pack.py --system sony-playstation-2
Zobacz dostępną listę platform i rdzeni:
python scripts/generate_pack.py --list-emulators
python scripts/generate_pack.py --list-systems
Istnieje również skrypt walidacyjny. Skanuje twój istniejący katalog BIOS i generuje szczegółowy raport: które pliki są na miejscu, gdzie hasz jest uszkodzony i których zrzutów brakuje do uruchomienia konkretnych gier.
python scripts/verify.py --platform batocera
python scripts/verify.py --emulator flycast
Otwarte dane dla deweloperów
RetroBIOS jest przydatny nie tylko jako źródło gotowych do użycia plików, ale także jako ustrukturyzowana baza danych. Na stronie dokumentacji autorzy publikują eksporty w formatach JSON, CSV i SQLite ze wszystkimi haszami, ścieżkami i zależnościami emulatorów.
Jeśli piszesz własny launcher, menedżer ROM-ów lub konfigurujesz niestandardową kompilację Linuksa dla urządzeń przenośnych, te pliki zaoszczędzą ci ręcznego parsowania setek źródeł rdzeni. Społeczność już zaczęła budować narzędzia oparte na tych danych, takie jak skanery do sortowania domowych archiwów.
Niuansy i licencjonowanie
Kod źródłowy skryptów i narzędzia do budowania są rozpowszechniane na licencji MIT. Pliki systemowe i firmware'y są zastrzeżonym oprogramowaniem stron trzecich, więc są rozpowszechniane na warunkach pozwalających na osobiste kopie zapasowe i użytkowanie w celach kompatybilności. Autorzy prowadzą otwartą stronę NOTICE z formularzem dla żądań usunięcia od właścicieli praw.
Archiwa większe niż 2 GB w wydaniach są podzielone na woluminy .zip.001 i .zip.002. Możesz je rozpakować za pomocą 7-Zip lub połączyć je prostym poleceniem cat Pack.zip.0* > Pack.zip w terminalu przed rozpakowaniem.
Czy warto spróbować
Jeśli masz konsolę przenośną (Anbernic, Miyoo, Steam Deck), konfigurację retro na Raspberry Pi lub po prostu uruchamiasz emulatory na swoim komputerze służbowym, dodaj to repozytorium do zakładek.
Zamiast chaotycznego szukania archiwów na forach, otrzymujesz czystą kolekcję, gdzie każdy bajt jest zweryfikowany względem własnego kodu źródłowego emulatora. Skrypt instaluje się w kilka minut i oszczędza godziny ręcznego zarządzania katalogami.
Powiązane projekty