mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-04-16 05:42:31 -05:00
refactor: security hardening + mame arcade bios updates
Security fixes: - Zip-slip protection in _extract_zip_to_archive (sanitize paths) - Hash verification for large file downloads (cache + post-download) - Sanitize YAML destination fields against path traversal - Size limit on ZIP entry reads (512MB cap, prevents zip bombs) - Download size limits in auto_fetch (100MB cap) - Reject hashless external downloads - Sanitize filenames in place_file with basename() MAME arcade updates from Batocera v38 pack: - Updated naomi, naomi2, naomigd, awbios, airlbios, hod2bios, hikaru - Old versions preserved in .variants/ for RetroBat compatibility Batocera 675/680 (+9), all other platforms unchanged at 0 missing
This commit is contained in:
185
README.md
185
README.md
@@ -2,7 +2,7 @@
|
||||
|
||||
Complete, verified collection of BIOS, firmware, and system files for retrogaming emulators - RetroArch, Batocera, Recalbox, Lakka, RetroPie, and more. Every file checked against official checksums from [libretro System.dat](https://github.com/libretro/libretro-database), [batocera-systems](https://github.com/batocera-linux/batocera.linux), and [Recalbox es_bios.xml](https://gitlab.com/recalbox/recalbox).
|
||||
|
||||
> **5352** files | **4650.5 MB** | Last updated: 2026-03-17T13:43:36Z
|
||||
> **5355** files | **4664.7 MB** | Last updated: 2026-03-17T14:31:33Z
|
||||
>
|
||||
> PlayStation, PS2, Nintendo DS, Game Boy, GBA, Dreamcast, Saturn, Neo Geo, Mega CD, PC Engine, MSX, Amiga, Atari ST, ZX Spectrum, Arcade (MAME/FBNeo), and 50+ systems.
|
||||
|
||||
@@ -45,12 +45,12 @@ python scripts/generate_pack.py --all --include-archived --output-dir ~/Download
|
||||
|
||||
| Platform | Coverage | Status | Verification | Details |
|
||||
|----------|----------|--------|--------------|---------|
|
||||
| Batocera | 680/680 (100.0%) |  🟢 | md5 | 589 verified, 91 untested |
|
||||
| Batocera | 680/680 (100.0%) |  🟢 | md5 | 675 verified, 5 untested |
|
||||
| EmuDeck | 164/164 (100.0%) |  🟢 | md5 | 164 verified |
|
||||
| Lakka | 398/398 (100.0%) |  🟢 | existence | 398 present |
|
||||
| Recalbox | 346/346 (100.0%) |  🟢 | md5 | 336 verified, 10 untested |
|
||||
| Recalbox | 346/346 (100.0%) |  🟢 | md5 | 337 verified, 9 untested |
|
||||
| RetroArch | 398/398 (100.0%) |  🟢 | existence | 398 present |
|
||||
| RetroBat | 343/343 (100.0%) |  🟢 | md5 | 341 verified, 2 untested |
|
||||
| RetroBat | 343/343 (100.0%) |  🟢 | md5 | 343 verified |
|
||||
| RetroPie | 398/398 (100.0%) |  📦 | existence | 398 present *(archived - generate manually)* |
|
||||
|
||||
## Systems
|
||||
@@ -67,7 +67,7 @@ python scripts/generate_pack.py --all --include-archived --output-dir ~/Download
|
||||
| Apple/Apple II | 17 | 1.2 MB |
|
||||
| Apple/Macintosh | 18 | 60.1 MB |
|
||||
| Apple/Macintosh II | 10 | 50.3 MB |
|
||||
| Arcade/Arcade | 105 | 594.6 MB |
|
||||
| Arcade/Arcade | 105 | 597.3 MB |
|
||||
| Arcade/FBNeo | 31 | 29.6 MB |
|
||||
| Arcade/MAME | 1060 | 2120.8 MB |
|
||||
| Atari/400-800 | 7 | 90.5 KB |
|
||||
@@ -89,7 +89,7 @@ python scripts/generate_pack.py --all --include-archived --output-dir ~/Download
|
||||
| Commodore/C128 | 7 | 360.0 KB |
|
||||
| DOS/DOSBox | 6 | 1.9 MB |
|
||||
| Dinothawr/Dinothawr | 1 | 6.4 MB |
|
||||
| Dragon/Dragon | 17 | 206.9 KB |
|
||||
| Dragon/Dragon | 17 | 234.1 KB |
|
||||
| EACA/Colour Genie | 1 | 16.0 KB |
|
||||
| Elektronika/BK | 8 | 100.0 KB |
|
||||
| Enterprise/64-128 | 15 | 414.2 KB |
|
||||
@@ -148,11 +148,11 @@ python scripts/generate_pack.py --all --include-archived --output-dir ~/Download
|
||||
| SNK/Neo Geo Pocket | 1 | 64.0 KB |
|
||||
| Sega/32X | 3 | 3.2 KB |
|
||||
| Sega/AI | 1 | 335.2 KB |
|
||||
| Sega/Arcade | 4 | 1.8 MB |
|
||||
| Sega/Arcade | 3 | 5.3 KB |
|
||||
| Sega/Beena | 1 | 83.2 KB |
|
||||
| Sega/Dreamcast | 24 | 32.4 MB |
|
||||
| Sega/Dreamcast | 18 | 10.0 MB |
|
||||
| Sega/Game Gear | 1 | 1024 B |
|
||||
| Sega/Hikaru | 2 | 782.3 KB |
|
||||
| Sega/Hikaru | 1 | 14.7 KB |
|
||||
| Sega/Master System | 2 | 16.0 KB |
|
||||
| Sega/Mega CD | 5 | 1024.0 KB |
|
||||
| Sega/Mega Drive | 6 | 2.3 MB |
|
||||
@@ -171,7 +171,7 @@ python scripts/generate_pack.py --all --include-archived --output-dir ~/Download
|
||||
| Synertek/SYM-1 | 1 | 8.0 KB |
|
||||
| Tandy/CoCo | 21 | 263.0 KB |
|
||||
| Tandy/MC-10 | 2 | 14.2 KB |
|
||||
| Tandy/TRS-80 | 4 | 42.2 KB |
|
||||
| Tandy/TRS-80 | 4 | 75.8 KB |
|
||||
| Tandy/VIS | 1 | 590.9 KB |
|
||||
| Texas Instruments/TI-83 | 3 | 2.8 MB |
|
||||
| Texas Instruments/TI-99 | 5 | 121.0 KB |
|
||||
@@ -610,11 +610,13 @@ These are large asset packs required by specific cores. They are included in the
|
||||
- SHA1: `5426d52e17e0ff9195fabbb42f704342e556d08e`
|
||||
- MD5: `fcb631bf18a56f2d5b077fa846bab4a6`
|
||||
- CRC32: `9c9601ca`
|
||||
- **[airlbios.zip](bios/Arcade/Arcade/airlbios.zip)** (715,730 bytes)
|
||||
- SHA1: `f2a730530f4989ca0e8860aa4e455b6a5fe69e1d`
|
||||
- MD5: `7a11bfe0cc72886d032e386db68f890c`
|
||||
- CRC32: `f83ec60f`
|
||||
- **Variants** (1 alternate versions):
|
||||
- **[airlbios.zip](bios/Arcade/Arcade/airlbios.zip)** (718,362 bytes)
|
||||
- SHA1: `03c9d1c3f59e8c6f320ea74abde1e4e7c5bfa623`
|
||||
- MD5: `6a0ac75d702f8f7c1ca6c72aa2b0b7d8`
|
||||
- CRC32: `1e5b53dc`
|
||||
- **Variants** (3 alternate versions):
|
||||
- [airlbios.zip](bios/Arcade/Arcade/.variants/airlbios.zip) (715,730 bytes) - SHA1: `f2a730530f4989ca0e8860aa4e455b6a5fe69e1d`, MD5: `7a11bfe0cc72886d032e386db68f890c`
|
||||
- [airlbios.zip](bios/Sega/Dreamcast/.variants/airlbios.zip) (702,637 bytes) - SHA1: `e18c5e9ca21654dfd724aa54e625b386e6ffb2c5`, MD5: `3f348c88af99a40fbd11fa435f28c69d`
|
||||
- [airlbios.zip.ff161eaa](bios/Sega/Dreamcast/.variants/airlbios.zip.ff161eaa) (702,615 bytes) - SHA1: `ff161eaa16b36b519eeab26364b99f59b9e8128c`, MD5: `e80075c0dfcd39ab2bea972d150e0ba1`
|
||||
- **[aleck64.zip](bios/Arcade/Arcade/aleck64.zip)** (1,804 bytes)
|
||||
- SHA1: `beaf97c4a0e0792b8db65648f9dabb6a54ae0549`
|
||||
@@ -652,7 +654,8 @@ These are large asset packs required by specific cores. They are included in the
|
||||
- SHA1: `7940c7bf29eee85a5b2fdec78750b19aa22895dc`
|
||||
- MD5: `85254fbe320ca82a768ec2c26bb08def`
|
||||
- CRC32: `67a14ad5`
|
||||
- **Variants** (1 alternate versions):
|
||||
- **Variants** (2 alternate versions):
|
||||
- [awbios.zip](bios/Sega/Dreamcast/.variants/awbios.zip) (34,620 bytes) - SHA1: `cdf247154e28c4b352b962a4a523587f2fde9305`, MD5: `0ec5ae5b5a5c4959fa8b43fcf8687f7c`
|
||||
- [awbios.zip.1f62f581](bios/Sega/Dreamcast/.variants/awbios.zip.1f62f581) (34,598 bytes) - SHA1: `1f62f581094c90620c74d4d15c1c1640a973e684`, MD5: `59889f03e09c1d4246b7874096a3201c`
|
||||
- **[bubsys.zip](bios/Arcade/Arcade/bubsys.zip)** (7,950 bytes)
|
||||
- SHA1: `1c0ffcd308b0c8c6dbb74ad8b811a0767200d366`
|
||||
@@ -827,11 +830,13 @@ These are large asset packs required by specific cores. They are included in the
|
||||
- CRC32: `e62f0ef7`
|
||||
- **Variants** (1 alternate versions):
|
||||
- [hng64.zip](bios/Arcade/Arcade/.variants/hng64.zip) (41,592 bytes) - SHA1: `fb0c36d69f66f4b10a895aa708ae37f826755257`, MD5: `219a818c4ffd9fab04b9be9c7e2107a8`
|
||||
- **[hod2bios.zip](bios/Arcade/Arcade/hod2bios.zip)** (1,479,106 bytes)
|
||||
- SHA1: `782c303cbdfab1027b04db74a63e27bdad5e0c53`
|
||||
- MD5: `f4011d3116500354edf7302a90402711`
|
||||
- CRC32: `0ddc6daf`
|
||||
- **Variants** (3 alternate versions):
|
||||
- **[hod2bios.zip](bios/Arcade/Arcade/hod2bios.zip)** (1,889,870 bytes)
|
||||
- SHA1: `07fd3fae7af650a37a3329ed09d039bd7360294f`
|
||||
- MD5: `0ec01786c10707acfa480f1d96c935ef`
|
||||
- CRC32: `45ecc8ae`
|
||||
- **Variants** (5 alternate versions):
|
||||
- [hod2bios.zip](bios/Arcade/Arcade/.variants/hod2bios.zip) (1,479,106 bytes) - SHA1: `782c303cbdfab1027b04db74a63e27bdad5e0c53`, MD5: `f4011d3116500354edf7302a90402711`
|
||||
- [hod2bios.zip](bios/Sega/Dreamcast/.variants/hod2bios.zip) (1,469,423 bytes) - SHA1: `b3a86809857fe9ce575da73f6ed6c5441d558e3d`, MD5: `9c755171b222fb1f4e1439d5b709dbf1`
|
||||
- [hod2bios.zip.0b5cc968](bios/Arcade/Arcade/.variants/hod2bios.zip.0b5cc968) (1,465,991 bytes) - SHA1: `0b5cc968644c936d4819c1eb5f623f5f3f83eda1`, MD5: `36ac7b58216de5eecfaebe527bf6d02e`
|
||||
- [hod2bios.zip.889d239a](bios/Sega/Dreamcast/.variants/hod2bios.zip.889d239a) (816,543 bytes) - SHA1: `889d239ac41f25622164609367b713dd33bd5bde`, MD5: `ee362dd63d7ff01f6d579ad53f3bfe69`
|
||||
- [hod2bios.zip.9b9c9f0a](bios/Sega/Dreamcast/.variants/hod2bios.zip.9b9c9f0a) (1,057,881 bytes) - SHA1: `9b9c9f0af3de914de677ba8e19f4190673142c1b`, MD5: `6559697f76592be77a7a9ff3bfb6711a`
|
||||
@@ -915,23 +920,29 @@ These are large asset packs required by specific cores. They are included in the
|
||||
- SHA1: `0649e27b7d605add7fc4215ee628b71e3c835328`
|
||||
- MD5: `17516c33298e52424ffb58afc2ad208c`
|
||||
- CRC32: `cf65b189`
|
||||
- **[naomi.zip](bios/Arcade/Arcade/naomi.zip)** (9,321,533 bytes)
|
||||
- SHA1: `c96711c01c0158f161791d6fbe75d88329e8ac0a`
|
||||
- MD5: `526eda1e2a7920c92c88178789d71d84`
|
||||
- CRC32: `6ee50181`
|
||||
- **Variants** (2 alternate versions):
|
||||
- **[naomi.zip](bios/Arcade/Arcade/naomi.zip)** (10,075,456 bytes)
|
||||
- SHA1: `11ad55ee6b11092e810365b8389c1f8b4081e5d0`
|
||||
- MD5: `4e1ca1ade518f53efcce30bdefb855a4`
|
||||
- CRC32: `fb0bca9c`
|
||||
- **Variants** (4 alternate versions):
|
||||
- [naomi.zip](bios/Arcade/Arcade/.variants/naomi.zip) (9,321,533 bytes) - SHA1: `c96711c01c0158f161791d6fbe75d88329e8ac0a`, MD5: `526eda1e2a7920c92c88178789d71d84`
|
||||
- [naomi.zip](bios/Sega/Dreamcast/.variants/naomi.zip) (9,308,440 bytes) - SHA1: `d7ef86bd03de7c1d0e2b0762e04b6f8f8d26dbdb`, MD5: `eb4099aeb42ef089cfe94f8fe95e51f6`
|
||||
- [naomi.zip.2533cc33](bios/Arcade/Arcade/.variants/naomi.zip.2533cc33) (8,005,827 bytes) - SHA1: `2533cc33201da28b2086a0a2fd2b5e04271b6eeb`, MD5: `58033e4ba5793c09dffb87f96f3e9301`
|
||||
- [naomi.zip.43f0018c](bios/Sega/Dreamcast/.variants/naomi.zip.43f0018c) (6,134,707 bytes) - SHA1: `43f0018c32dd6d166c3b6d8ed2ffa672f398fa3a`, MD5: `8bab1ba136d0cb6ebcc05a27c4dfc185`
|
||||
- **[naomi2.zip](bios/Arcade/Arcade/naomi2.zip)** (5,384,060 bytes)
|
||||
- SHA1: `c63a74691ee7384080877268a70bb1f53bc66dee`
|
||||
- MD5: `dd6fb7894fb2398a55e83a51328a3ad6`
|
||||
- CRC32: `4a2409fe`
|
||||
- **Variants** (1 alternate versions):
|
||||
- **[naomi2.zip](bios/Arcade/Arcade/naomi2.zip)** (7,038,226 bytes)
|
||||
- SHA1: `da79eca49c59f7661737643b5e11e63a73b51fcc`
|
||||
- MD5: `843c0d51237dc945f57237c4b9872b1d`
|
||||
- CRC32: `b700583b`
|
||||
- **Variants** (2 alternate versions):
|
||||
- [naomi2.zip](bios/Arcade/Arcade/.variants/naomi2.zip) (5,384,060 bytes) - SHA1: `c63a74691ee7384080877268a70bb1f53bc66dee`, MD5: `dd6fb7894fb2398a55e83a51328a3ad6`
|
||||
- [naomi2.zip.2962e338](bios/Sega/Dreamcast/.variants/naomi2.zip.2962e338) (7,022,501 bytes) - SHA1: `2962e338ccc9f66f29b409f73ca27aeee79633ac`, MD5: `c50072cbab75673e1b1a6b94355e6fa8`
|
||||
- **[naomigd.zip](bios/Arcade/Arcade/naomigd.zip)** (3,371,765 bytes)
|
||||
- SHA1: `f9ad4a4c6b0bbbe39ba358690a48f763ecbd98f0`
|
||||
- MD5: `e20b430bd7def78b45f61f238abab624`
|
||||
- CRC32: `ca501374`
|
||||
- **[naomigd.zip](bios/Arcade/Arcade/naomigd.zip)** (3,387,512 bytes)
|
||||
- SHA1: `a0f07de6070d98f86d55a4ecd61b4a5b05a4a0d5`
|
||||
- MD5: `82f3a8bea688b4863947722d2fcb07f7`
|
||||
- CRC32: `31828d82`
|
||||
- **Variants** (2 alternate versions):
|
||||
- [naomigd.zip](bios/Arcade/Arcade/.variants/naomigd.zip) (3,371,765 bytes) - SHA1: `f9ad4a4c6b0bbbe39ba358690a48f763ecbd98f0`, MD5: `e20b430bd7def78b45f61f238abab624`
|
||||
- [naomigd.zip](bios/Sega/Dreamcast/.variants/naomigd.zip) (4,972,898 bytes) - SHA1: `4b92936f396c8199f745d3ed0ff588a324b8dd70`, MD5: `a3c74748f4b1d08f2247b16099db372d`
|
||||
- **[neocdz.zip](bios/Arcade/Arcade/neocdz.zip)** (214,659 bytes)
|
||||
- SHA1: `838934ee5b8fcc81883fb664526b3d281840b2e9`
|
||||
- MD5: `c85b8132799f1b2ad3754a97947809d2`
|
||||
@@ -2809,6 +2820,8 @@ These are large asset packs required by specific cores. They are included in the
|
||||
- SHA1: `041feccfae58fe052247119138098b51c26448ed`
|
||||
- MD5: `53da8a47c5b877ac7cd90fabe9467d94`
|
||||
- CRC32: `74f30fc6`
|
||||
- **Variants** (1 alternate versions):
|
||||
- [hikaru.zip](bios/Sega/Hikaru/.variants/hikaru.zip) (785,989 bytes) - SHA1: `de2734b2110864ada20f85ca6ba7874ed1e6ecb1`, MD5: `aac601811a25d7b31a3d5f3f1f82f338`
|
||||
- **[hiscore.dat](bios/Arcade/MAME/hiscore.dat)** (332,919 bytes)
|
||||
- SHA1: `d38572d22721eb5972f671cde54201d752dffe6b`
|
||||
- MD5: `0ca8052de426b7eadcb64da341eadec6`
|
||||
@@ -2825,7 +2838,9 @@ These are large asset packs required by specific cores. They are included in the
|
||||
- SHA1: `d652e72ad5d37032c05ca755dfe5508e03e6b45c`
|
||||
- MD5: `629bb0552463ba116ccf23d9a468a9f0`
|
||||
- CRC32: `c64a448d`
|
||||
- **Variants** (3 alternate versions):
|
||||
- **Variants** (5 alternate versions):
|
||||
- [hod2bios.zip](bios/Arcade/Arcade/.variants/hod2bios.zip) (1,479,106 bytes) - SHA1: `782c303cbdfab1027b04db74a63e27bdad5e0c53`, MD5: `f4011d3116500354edf7302a90402711`
|
||||
- [hod2bios.zip](bios/Sega/Dreamcast/.variants/hod2bios.zip) (1,469,423 bytes) - SHA1: `b3a86809857fe9ce575da73f6ed6c5441d558e3d`, MD5: `9c755171b222fb1f4e1439d5b709dbf1`
|
||||
- [hod2bios.zip.0b5cc968](bios/Arcade/Arcade/.variants/hod2bios.zip.0b5cc968) (1,465,991 bytes) - SHA1: `0b5cc968644c936d4819c1eb5f623f5f3f83eda1`, MD5: `36ac7b58216de5eecfaebe527bf6d02e`
|
||||
- [hod2bios.zip.889d239a](bios/Sega/Dreamcast/.variants/hod2bios.zip.889d239a) (816,543 bytes) - SHA1: `889d239ac41f25622164609367b713dd33bd5bde`, MD5: `ee362dd63d7ff01f6d579ad53f3bfe69`
|
||||
- [hod2bios.zip.9b9c9f0a](bios/Sega/Dreamcast/.variants/hod2bios.zip.9b9c9f0a) (1,057,881 bytes) - SHA1: `9b9c9f0af3de914de677ba8e19f4190673142c1b`, MD5: `6559697f76592be77a7a9ff3bfb6711a`
|
||||
@@ -3777,6 +3792,9 @@ These are large asset packs required by specific cores. They are included in the
|
||||
- SHA1: `b0677e6b9e1274292fef56787931732072b0e693`
|
||||
- MD5: `8970b2ea1fa70f5f54f675275d2fc584`
|
||||
- CRC32: `44974ee7`
|
||||
- **Variants** (2 alternate versions):
|
||||
- [naomigd.zip](bios/Arcade/Arcade/.variants/naomigd.zip) (3,371,765 bytes) - SHA1: `f9ad4a4c6b0bbbe39ba358690a48f763ecbd98f0`, MD5: `e20b430bd7def78b45f61f238abab624`
|
||||
- [naomigd.zip](bios/Sega/Dreamcast/.variants/naomigd.zip) (4,972,898 bytes) - SHA1: `4b92936f396c8199f745d3ed0ff588a324b8dd70`, MD5: `a3c74748f4b1d08f2247b16099db372d`
|
||||
- **[nascom_flop.xml](bios/Arcade/MAME/hash/nascom_flop.xml)** (4,125 bytes)
|
||||
- SHA1: `885c4e4d3c85c2154cc32acc73ed6f9db28426ca`
|
||||
- MD5: `02e1231a5815545edb76c40c21bfda9b`
|
||||
@@ -6127,14 +6145,14 @@ These are large asset packs required by specific cores. They are included in the
|
||||
- SHA1: `90164ea50fe3ac4c118b502438d2e5015a588398`
|
||||
- MD5: `35de5d28da507ebb213a26e04241d940`
|
||||
- CRC32: `f444d57f`
|
||||
- **[dragon32.zip](bios/Dragon/Dragon/dragon32.zip)** (21,208 bytes)
|
||||
- SHA1: `afed11dd6be59c672e35f2f416290232a05b1983`
|
||||
- MD5: `77cdf3264e81884e876f438d2553eaca`
|
||||
- CRC32: `7909413a`
|
||||
- **[dragon64.zip](bios/Dragon/Dragon/dragon64.zip)** (34,962 bytes)
|
||||
- SHA1: `613223e2674d44a6b6cdc9662785fe4b7fe9cb60`
|
||||
- MD5: `c428fb2eca69e4e7203314ab911179f0`
|
||||
- CRC32: `81fd2649`
|
||||
- **[dragon32.zip](bios/Dragon/Dragon/dragon32.zip)** (34,983 bytes)
|
||||
- SHA1: `9e042597360e6090687b040364101a64c9f54a89`
|
||||
- MD5: `aa09c353c4759d9eca54ac6d47f4cea1`
|
||||
- CRC32: `fd24e70a`
|
||||
- **[dragon64.zip](bios/Dragon/Dragon/dragon64.zip)** (49,052 bytes)
|
||||
- SHA1: `d82a22cc7d31620983a8c62d400be37f9b18bb9e`
|
||||
- MD5: `e71131dece02e184c7d54dae50c4cabf`
|
||||
- CRC32: `5d04994a`
|
||||
- **[sdose6.rom](bios/Dragon/Dragon/sdose6.rom)** (8,192 bytes)
|
||||
- SHA1: `ef157016386ed463374de6bac84d1f8ce654ed80`
|
||||
- MD5: `9d85e6b7133f915c021156f4b9cdb512`
|
||||
@@ -6428,7 +6446,7 @@ These are large asset packs required by specific cores. They are included in the
|
||||
- MD5: `c011b428819eea4a80b455c245a5a04d`
|
||||
- CRC32: `26dc3fba`
|
||||
- **Variants** (1 alternate versions):
|
||||
- [ecwolf.pk3](bios/Id%20Software/Wolfenstein%203D/.variants/ecwolf.pk3) (187,571 bytes) - SHA1: `f3151d3307c6ff36c0562dac00b4ce195d3157d2`, MD5: `f1c29d2dc0a1a48a0c007dbb38801950`
|
||||
- [ecwolf.pk3](bios/Id%20Software/Wolfenstein%203D/.variants/ecwolf.pk3) (187,571 bytes) - SHA1: `f3f2a11f3ecd91cd62d74c3acfad68a4cc6ddbd9`, MD5: `dbaa5c4e20a11000d1c4db3a2a28f374`
|
||||
|
||||
### Infocom/Z-Machine
|
||||
|
||||
@@ -6450,7 +6468,7 @@ These are large asset packs required by specific cores. They are included in the
|
||||
- MD5: `ccd92e7156ce2f0ce14c88ffb68a16eb`
|
||||
- CRC32: `96a1babf`
|
||||
- **Variants** (1 alternate versions):
|
||||
- [freej2me-lr.jar](bios/Java/J2ME/.variants/freej2me-lr.jar) (518,483 bytes) - SHA1: `5f3f22ccca001c5d992b398a2c47a45510f6316c`, MD5: `c575f2dd51217ce82fd925b2a27a857c`
|
||||
- [freej2me-lr.jar](bios/Java/J2ME/.variants/freej2me-lr.jar) (1,107,828 bytes) - SHA1: `eea6d4c69717af589ea36501e00fcb32ac91a5ac`, MD5: `a6f31483d1da4558cc19025e21f95c1d`
|
||||
- **[freej2me-sdl.jar](bios/Java/J2ME/freej2me-sdl.jar)** (552,043 bytes)
|
||||
- SHA1: `78f1f41d55efc6b8d81e99c1d9d75248b3f83dc2`
|
||||
- MD5: `4da74084fc1b1bd3d776ed8d3ee648de`
|
||||
@@ -9172,14 +9190,6 @@ These are large asset packs required by specific cores. They are included in the
|
||||
|
||||
### Sega/Arcade
|
||||
|
||||
- **[hod2bios.zip](bios/Sega/Arcade/hod2bios.zip)** (1,889,870 bytes)
|
||||
- SHA1: `07fd3fae7af650a37a3329ed09d039bd7360294f`
|
||||
- MD5: `0ec01786c10707acfa480f1d96c935ef`
|
||||
- CRC32: `45ecc8ae`
|
||||
- **Variants** (3 alternate versions):
|
||||
- [hod2bios.zip.0b5cc968](bios/Arcade/Arcade/.variants/hod2bios.zip.0b5cc968) (1,465,991 bytes) - SHA1: `0b5cc968644c936d4819c1eb5f623f5f3f83eda1`, MD5: `36ac7b58216de5eecfaebe527bf6d02e`
|
||||
- [hod2bios.zip.889d239a](bios/Sega/Dreamcast/.variants/hod2bios.zip.889d239a) (816,543 bytes) - SHA1: `889d239ac41f25622164609367b713dd33bd5bde`, MD5: `ee362dd63d7ff01f6d579ad53f3bfe69`
|
||||
- [hod2bios.zip.9b9c9f0a](bios/Sega/Dreamcast/.variants/hod2bios.zip.9b9c9f0a) (1,057,881 bytes) - SHA1: `9b9c9f0af3de914de677ba8e19f4190673142c1b`, MD5: `6559697f76592be77a7a9ff3bfb6711a`
|
||||
- **[mie.zip](bios/Sega/Arcade/mie.zip)** (725 bytes)
|
||||
- SHA1: `00f43f5bf58dd79135565d52c4eea7e314ebc810`
|
||||
- MD5: `e95415b161121bef35ade12367138c63`
|
||||
@@ -9234,18 +9244,6 @@ These are large asset packs required by specific cores. They are included in the
|
||||
- SHA1: `3251d3b601850aed422f006b61ce9776cdb799d2`
|
||||
- MD5: `c045f571b123b018ce2bfd2289172169`
|
||||
- CRC32: `18354008`
|
||||
- **[airlbios.zip](bios/Sega/Dreamcast/airlbios.zip)** (702,637 bytes)
|
||||
- SHA1: `e18c5e9ca21654dfd724aa54e625b386e6ffb2c5`
|
||||
- MD5: `3f348c88af99a40fbd11fa435f28c69d`
|
||||
- CRC32: `2c87c283`
|
||||
- **Variants** (1 alternate versions):
|
||||
- [airlbios.zip.ff161eaa](bios/Sega/Dreamcast/.variants/airlbios.zip.ff161eaa) (702,615 bytes) - SHA1: `ff161eaa16b36b519eeab26364b99f59b9e8128c`, MD5: `e80075c0dfcd39ab2bea972d150e0ba1`
|
||||
- **[awbios.zip](bios/Sega/Dreamcast/awbios.zip)** (34,620 bytes)
|
||||
- SHA1: `cdf247154e28c4b352b962a4a523587f2fde9305`
|
||||
- MD5: `0ec5ae5b5a5c4959fa8b43fcf8687f7c`
|
||||
- CRC32: `c295a8c2`
|
||||
- **Variants** (1 alternate versions):
|
||||
- [awbios.zip.1f62f581](bios/Sega/Dreamcast/.variants/awbios.zip.1f62f581) (34,598 bytes) - SHA1: `1f62f581094c90620c74d4d15c1c1640a973e684`, MD5: `59889f03e09c1d4246b7874096a3201c`
|
||||
- **[dc.zip](bios/Sega/Dreamcast/dc.zip)** (1,083,674 bytes)
|
||||
- SHA1: `24e80cdf0695361ae8de7cceda29843e0474ecd0`
|
||||
- MD5: `8248adaabb908bd0427d88c8d64a2a1a`
|
||||
@@ -9281,37 +9279,12 @@ These are large asset packs required by specific cores. They are included in the
|
||||
- CRC32: `d39556fc`
|
||||
- **Variants** (1 alternate versions):
|
||||
- [f355dlx.zip.3c1c6422](bios/Sega/Dreamcast/.variants/f355dlx.zip.3c1c6422) (2,315,343 bytes) - SHA1: `3c1c6422c332fc57c69c938db4dd3ac91eff4f02`, MD5: `5e83867c751f692a000afdf658dc181f`
|
||||
- **[hod2bios.zip](bios/Sega/Dreamcast/hod2bios.zip)** (1,469,423 bytes)
|
||||
- SHA1: `b3a86809857fe9ce575da73f6ed6c5441d558e3d`
|
||||
- MD5: `9c755171b222fb1f4e1439d5b709dbf1`
|
||||
- CRC32: `277c7fee`
|
||||
- **Variants** (3 alternate versions):
|
||||
- [hod2bios.zip.0b5cc968](bios/Arcade/Arcade/.variants/hod2bios.zip.0b5cc968) (1,465,991 bytes) - SHA1: `0b5cc968644c936d4819c1eb5f623f5f3f83eda1`, MD5: `36ac7b58216de5eecfaebe527bf6d02e`
|
||||
- [hod2bios.zip.889d239a](bios/Sega/Dreamcast/.variants/hod2bios.zip.889d239a) (816,543 bytes) - SHA1: `889d239ac41f25622164609367b713dd33bd5bde`, MD5: `ee362dd63d7ff01f6d579ad53f3bfe69`
|
||||
- [hod2bios.zip.9b9c9f0a](bios/Sega/Dreamcast/.variants/hod2bios.zip.9b9c9f0a) (1,057,881 bytes) - SHA1: `9b9c9f0af3de914de677ba8e19f4190673142c1b`, MD5: `6559697f76592be77a7a9ff3bfb6711a`
|
||||
- **[naomi.zip](bios/Sega/Dreamcast/naomi.zip)** (9,308,440 bytes)
|
||||
- SHA1: `d7ef86bd03de7c1d0e2b0762e04b6f8f8d26dbdb`
|
||||
- MD5: `eb4099aeb42ef089cfe94f8fe95e51f6`
|
||||
- CRC32: `ab628024`
|
||||
- **Variants** (2 alternate versions):
|
||||
- [naomi.zip.2533cc33](bios/Arcade/Arcade/.variants/naomi.zip.2533cc33) (8,005,827 bytes) - SHA1: `2533cc33201da28b2086a0a2fd2b5e04271b6eeb`, MD5: `58033e4ba5793c09dffb87f96f3e9301`
|
||||
- [naomi.zip.43f0018c](bios/Sega/Dreamcast/.variants/naomi.zip.43f0018c) (6,134,707 bytes) - SHA1: `43f0018c32dd6d166c3b6d8ed2ffa672f398fa3a`, MD5: `8bab1ba136d0cb6ebcc05a27c4dfc185`
|
||||
- **[naomi2.zip](bios/Sega/Dreamcast/naomi2.zip)** (7,038,226 bytes)
|
||||
- SHA1: `da79eca49c59f7661737643b5e11e63a73b51fcc`
|
||||
- MD5: `843c0d51237dc945f57237c4b9872b1d`
|
||||
- CRC32: `b700583b`
|
||||
- **Variants** (1 alternate versions):
|
||||
- [naomi2.zip.2962e338](bios/Sega/Dreamcast/.variants/naomi2.zip.2962e338) (7,022,501 bytes) - SHA1: `2962e338ccc9f66f29b409f73ca27aeee79633ac`, MD5: `c50072cbab75673e1b1a6b94355e6fa8`
|
||||
- **[naomi_boot.bin](bios/Sega/Dreamcast/naomi_boot.bin)** (2,097,152 bytes)
|
||||
- SHA1: `6d27d71aec4dfba98f66316ae74a1426d567698a`
|
||||
- MD5: `3bffafac42a7767d8dcecf771f5552ba`
|
||||
- CRC32: `d2a1c6bf`
|
||||
- **Variants** (1 alternate versions):
|
||||
- [naomi_boot.bin](bios/Sega/Dreamcast/.variants/naomi_boot.bin) (181,208 bytes) - SHA1: `56b2a1ca68bf3519f01abde00c22e7a3425494e5`, MD5: `b5475847ee3a3ef2b12cda48dd49370d`
|
||||
- **[naomigd.zip](bios/Sega/Dreamcast/naomigd.zip)** (4,972,898 bytes)
|
||||
- SHA1: `4b92936f396c8199f745d3ed0ff588a324b8dd70`
|
||||
- MD5: `a3c74748f4b1d08f2247b16099db372d`
|
||||
- CRC32: `b7949ddb`
|
||||
- **[vmu_save_A1.bin](bios/Sega/Dreamcast/vmu_save_A1.bin)** (131,072 bytes)
|
||||
- SHA1: `44c9f00deccca2bfe2f3b41693b70662ff2c2256`
|
||||
- MD5: `ccaf708ca6980c4becd018f772ccdd23`
|
||||
@@ -9334,10 +9307,6 @@ These are large asset packs required by specific cores. They are included in the
|
||||
|
||||
### Sega/Hikaru
|
||||
|
||||
- **[hikaru.zip](bios/Sega/Hikaru/hikaru.zip)** (785,989 bytes)
|
||||
- SHA1: `de2734b2110864ada20f85ca6ba7874ed1e6ecb1`
|
||||
- MD5: `aac601811a25d7b31a3d5f3f1f82f338`
|
||||
- CRC32: `b4015df2`
|
||||
- **[jvs13551.zip](bios/Sega/Hikaru/jvs13551.zip)** (15,088 bytes)
|
||||
- SHA1: `2c79934afdbcfc15684de9b75a520ac196ca75d5`
|
||||
- MD5: `ee643e8c7369fe7feca610d4daa4a57c`
|
||||
@@ -10976,18 +10945,18 @@ These are large asset packs required by specific cores. They are included in the
|
||||
|
||||
### Tandy/TRS-80
|
||||
|
||||
- **[trs80.zip](bios/Tandy/TRS-80/trs80.zip)** (4,157 bytes)
|
||||
- SHA1: `3795bf93d977f2625e452f8caf6a5371eff2f701`
|
||||
- MD5: `4eed271d76c7bc19baf7f15ca057a753`
|
||||
- CRC32: `e2510704`
|
||||
- **[trs80m3.zip](bios/Tandy/TRS-80/trs80m3.zip)** (20,844 bytes)
|
||||
- SHA1: `8cdf51015a0bac500d9a1d3969fa47ebec4144f6`
|
||||
- MD5: `dde75b2ef3f7f6ed90364e4564703c1d`
|
||||
- CRC32: `4d403b13`
|
||||
- **[trs80m4.zip](bios/Tandy/TRS-80/trs80m4.zip)** (13,369 bytes)
|
||||
- SHA1: `300b3b1d52fbf833ff1cedb95e9541e76aa224c2`
|
||||
- MD5: `8491bd4f3fcaf5aa5a00bce5e9b735eb`
|
||||
- CRC32: `983e55f2`
|
||||
- **[trs80.zip](bios/Tandy/TRS-80/trs80.zip)** (14,558 bytes)
|
||||
- SHA1: `a9b8931c42303e8dfb475112fc18ff200b7252ce`
|
||||
- MD5: `a631f17e1b041a4cf66a8676582dd234`
|
||||
- CRC32: `6127564d`
|
||||
- **[trs80m3.zip](bios/Tandy/TRS-80/trs80m3.zip)** (32,854 bytes)
|
||||
- SHA1: `b804a031c8db6def59e077a4b6938dcac25093d7`
|
||||
- MD5: `9e2b8b6612c3431e03cec5305571a598`
|
||||
- CRC32: `e09330c8`
|
||||
- **[trs80m4.zip](bios/Tandy/TRS-80/trs80m4.zip)** (25,371 bytes)
|
||||
- SHA1: `bc58ac28be4854fb198b895c7fd999f599b5a961`
|
||||
- MD5: `71f71d32cbb5e2fcc7d11e8735c97b6e`
|
||||
- CRC32: `6377a7f8`
|
||||
- **[trs80m4p.zip](bios/Tandy/TRS-80/trs80m4p.zip)** (4,880 bytes)
|
||||
- SHA1: `497eea6e0ed80501ca3beee714d71a5815495b07`
|
||||
- MD5: `8a0f1567df8f166f4056a6a71ef7dce5`
|
||||
@@ -11174,4 +11143,4 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on submitting BIOS files.
|
||||
|
||||
This repository provides BIOS files for personal backup and archival purposes.
|
||||
|
||||
*Auto-generated on 2026-03-17T13:43:36Z*
|
||||
*Auto-generated on 2026-03-17T14:31:33Z*
|
||||
|
||||
BIN
bios/Arcade/Arcade/.variants/airlbios.zip
Normal file
BIN
bios/Arcade/Arcade/.variants/airlbios.zip
Normal file
Binary file not shown.
BIN
bios/Arcade/Arcade/.variants/hod2bios.zip
Normal file
BIN
bios/Arcade/Arcade/.variants/hod2bios.zip
Normal file
Binary file not shown.
BIN
bios/Arcade/Arcade/.variants/naomi.zip
Normal file
BIN
bios/Arcade/Arcade/.variants/naomi.zip
Normal file
Binary file not shown.
BIN
bios/Arcade/Arcade/.variants/naomi2.zip
Normal file
BIN
bios/Arcade/Arcade/.variants/naomi2.zip
Normal file
Binary file not shown.
BIN
bios/Arcade/Arcade/.variants/naomigd.zip
Normal file
BIN
bios/Arcade/Arcade/.variants/naomigd.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bios/Sega/Dreamcast/.variants/airlbios.zip
Normal file
BIN
bios/Sega/Dreamcast/.variants/airlbios.zip
Normal file
Binary file not shown.
BIN
bios/Sega/Dreamcast/.variants/awbios.zip
Normal file
BIN
bios/Sega/Dreamcast/.variants/awbios.zip
Normal file
Binary file not shown.
BIN
bios/Sega/Dreamcast/.variants/hod2bios.zip
Normal file
BIN
bios/Sega/Dreamcast/.variants/hod2bios.zip
Normal file
Binary file not shown.
BIN
bios/Sega/Dreamcast/.variants/naomi.zip
Normal file
BIN
bios/Sega/Dreamcast/.variants/naomi.zip
Normal file
Binary file not shown.
BIN
bios/Sega/Dreamcast/.variants/naomigd.zip
Normal file
BIN
bios/Sega/Dreamcast/.variants/naomigd.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bios/Sega/Hikaru/.variants/hikaru.zip
Normal file
BIN
bios/Sega/Hikaru/.variants/hikaru.zip
Normal file
Binary file not shown.
Binary file not shown.
327
database.json
327
database.json
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"generated_at": "2026-03-17T14:13:11Z",
|
||||
"total_files": 5352,
|
||||
"total_size": 4877068202,
|
||||
"generated_at": "2026-03-17T14:31:33Z",
|
||||
"total_files": 5355,
|
||||
"total_size": 4891249532,
|
||||
"files": {
|
||||
"520d3d1b5897800af47f92efd2444a26b7a7dead": {
|
||||
"path": "bios/3DO Company/3DO/3do_arcade_saot.bin",
|
||||
@@ -822,6 +822,15 @@
|
||||
"sha256": "a86d539aab1af6352fc05752ec2e3d143f805219880822843c627c6184318def",
|
||||
"crc32": "e133094a"
|
||||
},
|
||||
"f2a730530f4989ca0e8860aa4e455b6a5fe69e1d": {
|
||||
"path": "bios/Arcade/Arcade/.variants/airlbios.zip",
|
||||
"name": "airlbios.zip",
|
||||
"size": 715730,
|
||||
"sha1": "f2a730530f4989ca0e8860aa4e455b6a5fe69e1d",
|
||||
"md5": "7a11bfe0cc72886d032e386db68f890c",
|
||||
"sha256": "cb7d12703030f53a1578210ca7c4979f95bda22970e6df9d2a5eb52b6461ea92",
|
||||
"crc32": "f83ec60f"
|
||||
},
|
||||
"9a48e38cb92b7e0fcc75156bdfa737c63a2cb1c3": {
|
||||
"path": "bios/Arcade/Arcade/.variants/bubsys.zip.9a48e38c",
|
||||
"name": "bubsys.zip.9a48e38c",
|
||||
@@ -876,6 +885,15 @@
|
||||
"sha256": "f10a8a309f0547cc09cb5aec92d740ca7ad35db4aa6bb50b5241743851a51f69",
|
||||
"crc32": "ae5c68a1"
|
||||
},
|
||||
"782c303cbdfab1027b04db74a63e27bdad5e0c53": {
|
||||
"path": "bios/Arcade/Arcade/.variants/hod2bios.zip",
|
||||
"name": "hod2bios.zip",
|
||||
"size": 1479106,
|
||||
"sha1": "782c303cbdfab1027b04db74a63e27bdad5e0c53",
|
||||
"md5": "f4011d3116500354edf7302a90402711",
|
||||
"sha256": "43d2c16c6a5b19a778b96a4e7d00468ee461b2c141f9d735427f7a7d893ba692",
|
||||
"crc32": "0ddc6daf"
|
||||
},
|
||||
"0b5cc968644c936d4819c1eb5f623f5f3f83eda1": {
|
||||
"path": "bios/Arcade/Arcade/.variants/hod2bios.zip.0b5cc968",
|
||||
"name": "hod2bios.zip.0b5cc968",
|
||||
@@ -903,6 +921,15 @@
|
||||
"sha256": "6ce99eede6948e084341e5611d5504e5b77c5debd2737597b8e80a39efcf74a9",
|
||||
"crc32": "08ba2527"
|
||||
},
|
||||
"c96711c01c0158f161791d6fbe75d88329e8ac0a": {
|
||||
"path": "bios/Arcade/Arcade/.variants/naomi.zip",
|
||||
"name": "naomi.zip",
|
||||
"size": 9321533,
|
||||
"sha1": "c96711c01c0158f161791d6fbe75d88329e8ac0a",
|
||||
"md5": "526eda1e2a7920c92c88178789d71d84",
|
||||
"sha256": "9f3ff37a68bef27cd9ce8f5603ce44779b402cca40e653ae3633fff78d179392",
|
||||
"crc32": "6ee50181"
|
||||
},
|
||||
"2533cc33201da28b2086a0a2fd2b5e04271b6eeb": {
|
||||
"path": "bios/Arcade/Arcade/.variants/naomi.zip.2533cc33",
|
||||
"name": "naomi.zip.2533cc33",
|
||||
@@ -912,6 +939,24 @@
|
||||
"sha256": "9a7864168900c030ecbf25496576cad027e8da6335a91520824f2a18ae180ece",
|
||||
"crc32": "7eba26a4"
|
||||
},
|
||||
"c63a74691ee7384080877268a70bb1f53bc66dee": {
|
||||
"path": "bios/Arcade/Arcade/.variants/naomi2.zip",
|
||||
"name": "naomi2.zip",
|
||||
"size": 5384060,
|
||||
"sha1": "c63a74691ee7384080877268a70bb1f53bc66dee",
|
||||
"md5": "dd6fb7894fb2398a55e83a51328a3ad6",
|
||||
"sha256": "80770c419903d66e7e073fd331b7eb22a7c6120a64f20717af22345ba81a0931",
|
||||
"crc32": "4a2409fe"
|
||||
},
|
||||
"f9ad4a4c6b0bbbe39ba358690a48f763ecbd98f0": {
|
||||
"path": "bios/Arcade/Arcade/.variants/naomigd.zip",
|
||||
"name": "naomigd.zip",
|
||||
"size": 3371765,
|
||||
"sha1": "f9ad4a4c6b0bbbe39ba358690a48f763ecbd98f0",
|
||||
"md5": "e20b430bd7def78b45f61f238abab624",
|
||||
"sha256": "1280f4185ac4f7352ab85e49d71db1ca0b3e679c6430bd2c8545088042117eb1",
|
||||
"crc32": "ca501374"
|
||||
},
|
||||
"4f28af31ca0defdd73d80edec2fa296908e624dc": {
|
||||
"path": "bios/Arcade/Arcade/.variants/neocdz.zip.4f28af31",
|
||||
"name": "neocdz.zip.4f28af31",
|
||||
@@ -1011,14 +1056,14 @@
|
||||
"sha256": "10fc7b39f97943ef2afc8a464c7829dd5d6af698926aab7d4c8e80008ab1b83f",
|
||||
"crc32": "9c9601ca"
|
||||
},
|
||||
"f2a730530f4989ca0e8860aa4e455b6a5fe69e1d": {
|
||||
"03c9d1c3f59e8c6f320ea74abde1e4e7c5bfa623": {
|
||||
"path": "bios/Arcade/Arcade/airlbios.zip",
|
||||
"name": "airlbios.zip",
|
||||
"size": 715730,
|
||||
"sha1": "f2a730530f4989ca0e8860aa4e455b6a5fe69e1d",
|
||||
"md5": "7a11bfe0cc72886d032e386db68f890c",
|
||||
"sha256": "cb7d12703030f53a1578210ca7c4979f95bda22970e6df9d2a5eb52b6461ea92",
|
||||
"crc32": "f83ec60f"
|
||||
"size": 718362,
|
||||
"sha1": "03c9d1c3f59e8c6f320ea74abde1e4e7c5bfa623",
|
||||
"md5": "6a0ac75d702f8f7c1ca6c72aa2b0b7d8",
|
||||
"sha256": "9f7b0bf853d7ce6f5b27e3542fc132ff4f19a31332dab4ab601daafa80ee3f69",
|
||||
"crc32": "1e5b53dc"
|
||||
},
|
||||
"beaf97c4a0e0792b8db65648f9dabb6a54ae0549": {
|
||||
"path": "bios/Arcade/Arcade/aleck64.zip",
|
||||
@@ -1488,14 +1533,14 @@
|
||||
"sha256": "6c5a6332a6dc48832e505a8ed2ed9946753ed2d7dc96a7b40e5efd2bb720de4e",
|
||||
"crc32": "e62f0ef7"
|
||||
},
|
||||
"782c303cbdfab1027b04db74a63e27bdad5e0c53": {
|
||||
"07fd3fae7af650a37a3329ed09d039bd7360294f": {
|
||||
"path": "bios/Arcade/Arcade/hod2bios.zip",
|
||||
"name": "hod2bios.zip",
|
||||
"size": 1479106,
|
||||
"sha1": "782c303cbdfab1027b04db74a63e27bdad5e0c53",
|
||||
"md5": "f4011d3116500354edf7302a90402711",
|
||||
"sha256": "43d2c16c6a5b19a778b96a4e7d00468ee461b2c141f9d735427f7a7d893ba692",
|
||||
"crc32": "0ddc6daf"
|
||||
"size": 1889870,
|
||||
"sha1": "07fd3fae7af650a37a3329ed09d039bd7360294f",
|
||||
"md5": "0ec01786c10707acfa480f1d96c935ef",
|
||||
"sha256": "6ca1cfa70cd956b0305a2140e2d049eb19e95b6bccd0f24296c5f19e8a57dd86",
|
||||
"crc32": "45ecc8ae"
|
||||
},
|
||||
"f590ccf688b4c05fa1da5c5dd92c224545170c3b": {
|
||||
"path": "bios/Arcade/Arcade/isgsm.zip",
|
||||
@@ -1641,32 +1686,32 @@
|
||||
"sha256": "da62c16f9edf1621a9777bc7972f2e66c4870a86513f960de8e44e1694e5507f",
|
||||
"crc32": "cf65b189"
|
||||
},
|
||||
"c96711c01c0158f161791d6fbe75d88329e8ac0a": {
|
||||
"11ad55ee6b11092e810365b8389c1f8b4081e5d0": {
|
||||
"path": "bios/Arcade/Arcade/naomi.zip",
|
||||
"name": "naomi.zip",
|
||||
"size": 9321533,
|
||||
"sha1": "c96711c01c0158f161791d6fbe75d88329e8ac0a",
|
||||
"md5": "526eda1e2a7920c92c88178789d71d84",
|
||||
"sha256": "9f3ff37a68bef27cd9ce8f5603ce44779b402cca40e653ae3633fff78d179392",
|
||||
"crc32": "6ee50181"
|
||||
"size": 10075456,
|
||||
"sha1": "11ad55ee6b11092e810365b8389c1f8b4081e5d0",
|
||||
"md5": "4e1ca1ade518f53efcce30bdefb855a4",
|
||||
"sha256": "b5d0f0ed88e8c07657022998b1a648c9323ce2892e506921474b1a471208f067",
|
||||
"crc32": "fb0bca9c"
|
||||
},
|
||||
"c63a74691ee7384080877268a70bb1f53bc66dee": {
|
||||
"da79eca49c59f7661737643b5e11e63a73b51fcc": {
|
||||
"path": "bios/Arcade/Arcade/naomi2.zip",
|
||||
"name": "naomi2.zip",
|
||||
"size": 5384060,
|
||||
"sha1": "c63a74691ee7384080877268a70bb1f53bc66dee",
|
||||
"md5": "dd6fb7894fb2398a55e83a51328a3ad6",
|
||||
"sha256": "80770c419903d66e7e073fd331b7eb22a7c6120a64f20717af22345ba81a0931",
|
||||
"crc32": "4a2409fe"
|
||||
"size": 7038226,
|
||||
"sha1": "da79eca49c59f7661737643b5e11e63a73b51fcc",
|
||||
"md5": "843c0d51237dc945f57237c4b9872b1d",
|
||||
"sha256": "5efc11a37e0b8fe97e0007bb707d8a4f047dd0b8b7ba59293e81cca0443f7993",
|
||||
"crc32": "b700583b"
|
||||
},
|
||||
"f9ad4a4c6b0bbbe39ba358690a48f763ecbd98f0": {
|
||||
"a0f07de6070d98f86d55a4ecd61b4a5b05a4a0d5": {
|
||||
"path": "bios/Arcade/Arcade/naomigd.zip",
|
||||
"name": "naomigd.zip",
|
||||
"size": 3371765,
|
||||
"sha1": "f9ad4a4c6b0bbbe39ba358690a48f763ecbd98f0",
|
||||
"md5": "e20b430bd7def78b45f61f238abab624",
|
||||
"sha256": "1280f4185ac4f7352ab85e49d71db1ca0b3e679c6430bd2c8545088042117eb1",
|
||||
"crc32": "ca501374"
|
||||
"size": 3387512,
|
||||
"sha1": "a0f07de6070d98f86d55a4ecd61b4a5b05a4a0d5",
|
||||
"md5": "82f3a8bea688b4863947722d2fcb07f7",
|
||||
"sha256": "d185636dd45be0545cb22557793b4ac0543c8b8a9abcf6a78eaffc3cc9d3f8fa",
|
||||
"crc32": "31828d82"
|
||||
},
|
||||
"838934ee5b8fcc81883fb664526b3d281840b2e9": {
|
||||
"path": "bios/Arcade/Arcade/neocdz.zip",
|
||||
@@ -44274,15 +44319,6 @@
|
||||
"sha256": "9be7592d4e4d2c0dbfbb0317648603d7a80cf492ca9cb1d01dea09542f51de61",
|
||||
"crc32": "16ef13bc"
|
||||
},
|
||||
"07fd3fae7af650a37a3329ed09d039bd7360294f": {
|
||||
"path": "bios/Sega/Arcade/hod2bios.zip",
|
||||
"name": "hod2bios.zip",
|
||||
"size": 1889870,
|
||||
"sha1": "07fd3fae7af650a37a3329ed09d039bd7360294f",
|
||||
"md5": "0ec01786c10707acfa480f1d96c935ef",
|
||||
"sha256": "6ca1cfa70cd956b0305a2140e2d049eb19e95b6bccd0f24296c5f19e8a57dd86",
|
||||
"crc32": "45ecc8ae"
|
||||
},
|
||||
"00f43f5bf58dd79135565d52c4eea7e314ebc810": {
|
||||
"path": "bios/Sega/Arcade/mie.zip",
|
||||
"name": "mie.zip",
|
||||
@@ -44319,6 +44355,15 @@
|
||||
"sha256": "6a8bf30a5a0942f500d1d617506a99552e33774207d3e895258abafe35979641",
|
||||
"crc32": "b1642de4"
|
||||
},
|
||||
"e18c5e9ca21654dfd724aa54e625b386e6ffb2c5": {
|
||||
"path": "bios/Sega/Dreamcast/.variants/airlbios.zip",
|
||||
"name": "airlbios.zip",
|
||||
"size": 702637,
|
||||
"sha1": "e18c5e9ca21654dfd724aa54e625b386e6ffb2c5",
|
||||
"md5": "3f348c88af99a40fbd11fa435f28c69d",
|
||||
"sha256": "983487f67861b4ec2b7f20cc49b25de0cb6f2160ec741283312deabb199e465e",
|
||||
"crc32": "2c87c283"
|
||||
},
|
||||
"ff161eaa16b36b519eeab26364b99f59b9e8128c": {
|
||||
"path": "bios/Sega/Dreamcast/.variants/airlbios.zip.ff161eaa",
|
||||
"name": "airlbios.zip.ff161eaa",
|
||||
@@ -44328,6 +44373,15 @@
|
||||
"sha256": "df47c364fd16a4816d43f4b542544e902c8e62d8835fc5bd15eb3f83feca06e8",
|
||||
"crc32": "fb55e65e"
|
||||
},
|
||||
"cdf247154e28c4b352b962a4a523587f2fde9305": {
|
||||
"path": "bios/Sega/Dreamcast/.variants/awbios.zip",
|
||||
"name": "awbios.zip",
|
||||
"size": 34620,
|
||||
"sha1": "cdf247154e28c4b352b962a4a523587f2fde9305",
|
||||
"md5": "0ec5ae5b5a5c4959fa8b43fcf8687f7c",
|
||||
"sha256": "cb2d008926d4553448e475ca8ef996161ad73df56fadc1b2b7f0c57787d85ff3",
|
||||
"crc32": "c295a8c2"
|
||||
},
|
||||
"1f62f581094c90620c74d4d15c1c1640a973e684": {
|
||||
"path": "bios/Sega/Dreamcast/.variants/awbios.zip.1f62f581",
|
||||
"name": "awbios.zip.1f62f581",
|
||||
@@ -44373,6 +44427,15 @@
|
||||
"sha256": "e7c0369a22ee0a42ac55b634ed1c6282aea91a6af07ba1402627b8fbe7c2afd5",
|
||||
"crc32": "87e1cf82"
|
||||
},
|
||||
"b3a86809857fe9ce575da73f6ed6c5441d558e3d": {
|
||||
"path": "bios/Sega/Dreamcast/.variants/hod2bios.zip",
|
||||
"name": "hod2bios.zip",
|
||||
"size": 1469423,
|
||||
"sha1": "b3a86809857fe9ce575da73f6ed6c5441d558e3d",
|
||||
"md5": "9c755171b222fb1f4e1439d5b709dbf1",
|
||||
"sha256": "766c3823b2c3512817628dbb5d6b05aa39322c3c97b8ee244ce4e47d84593084",
|
||||
"crc32": "277c7fee"
|
||||
},
|
||||
"889d239ac41f25622164609367b713dd33bd5bde": {
|
||||
"path": "bios/Sega/Dreamcast/.variants/hod2bios.zip.889d239a",
|
||||
"name": "hod2bios.zip.889d239a",
|
||||
@@ -44391,6 +44454,15 @@
|
||||
"sha256": "c90c754f36d4ab0c927da1f79883cb322a4f94b7cebe9cc7f401151a1b8f1a5a",
|
||||
"crc32": "651142d3"
|
||||
},
|
||||
"d7ef86bd03de7c1d0e2b0762e04b6f8f8d26dbdb": {
|
||||
"path": "bios/Sega/Dreamcast/.variants/naomi.zip",
|
||||
"name": "naomi.zip",
|
||||
"size": 9308440,
|
||||
"sha1": "d7ef86bd03de7c1d0e2b0762e04b6f8f8d26dbdb",
|
||||
"md5": "eb4099aeb42ef089cfe94f8fe95e51f6",
|
||||
"sha256": "a062f1242e1dc08a2a9faf07a073cdd7e2d836823f9d01aff5cd0a36482032db",
|
||||
"crc32": "ab628024"
|
||||
},
|
||||
"43f0018c32dd6d166c3b6d8ed2ffa672f398fa3a": {
|
||||
"path": "bios/Sega/Dreamcast/.variants/naomi.zip.43f0018c",
|
||||
"name": "naomi.zip.43f0018c",
|
||||
@@ -44418,6 +44490,15 @@
|
||||
"sha256": "27d407edcd485d81aec58a8e28081327aeb3e0cc7195f4c53c264ec192657098",
|
||||
"crc32": "da4fbc94"
|
||||
},
|
||||
"4b92936f396c8199f745d3ed0ff588a324b8dd70": {
|
||||
"path": "bios/Sega/Dreamcast/.variants/naomigd.zip",
|
||||
"name": "naomigd.zip",
|
||||
"size": 4972898,
|
||||
"sha1": "4b92936f396c8199f745d3ed0ff588a324b8dd70",
|
||||
"md5": "a3c74748f4b1d08f2247b16099db372d",
|
||||
"sha256": "793db2a859be2d814d334ab511811c42c6727a16841e7627fa7c33171c3de441",
|
||||
"crc32": "b7949ddb"
|
||||
},
|
||||
"09f1ed9e0f8ece181a1850ec89361cef78f37c9e": {
|
||||
"path": "bios/Sega/Dreamcast/Atomiswave-0.220_NoClones_V1.0 barhi.dat.7z",
|
||||
"name": "Atomiswave-0.220_NoClones_V1.0 barhi.dat.7z",
|
||||
@@ -44490,24 +44571,6 @@
|
||||
"sha256": "f28a31cfd272690e41058fb280d0b890996c6cb9a1983565fa47380d38394703",
|
||||
"crc32": "18354008"
|
||||
},
|
||||
"e18c5e9ca21654dfd724aa54e625b386e6ffb2c5": {
|
||||
"path": "bios/Sega/Dreamcast/airlbios.zip",
|
||||
"name": "airlbios.zip",
|
||||
"size": 702637,
|
||||
"sha1": "e18c5e9ca21654dfd724aa54e625b386e6ffb2c5",
|
||||
"md5": "3f348c88af99a40fbd11fa435f28c69d",
|
||||
"sha256": "983487f67861b4ec2b7f20cc49b25de0cb6f2160ec741283312deabb199e465e",
|
||||
"crc32": "2c87c283"
|
||||
},
|
||||
"cdf247154e28c4b352b962a4a523587f2fde9305": {
|
||||
"path": "bios/Sega/Dreamcast/awbios.zip",
|
||||
"name": "awbios.zip",
|
||||
"size": 34620,
|
||||
"sha1": "cdf247154e28c4b352b962a4a523587f2fde9305",
|
||||
"md5": "0ec5ae5b5a5c4959fa8b43fcf8687f7c",
|
||||
"sha256": "cb2d008926d4553448e475ca8ef996161ad73df56fadc1b2b7f0c57787d85ff3",
|
||||
"crc32": "c295a8c2"
|
||||
},
|
||||
"24e80cdf0695361ae8de7cceda29843e0474ecd0": {
|
||||
"path": "bios/Sega/Dreamcast/dc.zip",
|
||||
"name": "dc.zip",
|
||||
@@ -44562,33 +44625,6 @@
|
||||
"sha256": "1a98e06d80b758bafe3a787388ba81ecec1184bd28e7b5054e31a99604398d7d",
|
||||
"crc32": "d39556fc"
|
||||
},
|
||||
"b3a86809857fe9ce575da73f6ed6c5441d558e3d": {
|
||||
"path": "bios/Sega/Dreamcast/hod2bios.zip",
|
||||
"name": "hod2bios.zip",
|
||||
"size": 1469423,
|
||||
"sha1": "b3a86809857fe9ce575da73f6ed6c5441d558e3d",
|
||||
"md5": "9c755171b222fb1f4e1439d5b709dbf1",
|
||||
"sha256": "766c3823b2c3512817628dbb5d6b05aa39322c3c97b8ee244ce4e47d84593084",
|
||||
"crc32": "277c7fee"
|
||||
},
|
||||
"d7ef86bd03de7c1d0e2b0762e04b6f8f8d26dbdb": {
|
||||
"path": "bios/Sega/Dreamcast/naomi.zip",
|
||||
"name": "naomi.zip",
|
||||
"size": 9308440,
|
||||
"sha1": "d7ef86bd03de7c1d0e2b0762e04b6f8f8d26dbdb",
|
||||
"md5": "eb4099aeb42ef089cfe94f8fe95e51f6",
|
||||
"sha256": "a062f1242e1dc08a2a9faf07a073cdd7e2d836823f9d01aff5cd0a36482032db",
|
||||
"crc32": "ab628024"
|
||||
},
|
||||
"da79eca49c59f7661737643b5e11e63a73b51fcc": {
|
||||
"path": "bios/Sega/Dreamcast/naomi2.zip",
|
||||
"name": "naomi2.zip",
|
||||
"size": 7038226,
|
||||
"sha1": "da79eca49c59f7661737643b5e11e63a73b51fcc",
|
||||
"md5": "843c0d51237dc945f57237c4b9872b1d",
|
||||
"sha256": "5efc11a37e0b8fe97e0007bb707d8a4f047dd0b8b7ba59293e81cca0443f7993",
|
||||
"crc32": "b700583b"
|
||||
},
|
||||
"6d27d71aec4dfba98f66316ae74a1426d567698a": {
|
||||
"path": "bios/Sega/Dreamcast/naomi_boot.bin",
|
||||
"name": "naomi_boot.bin",
|
||||
@@ -44598,15 +44634,6 @@
|
||||
"sha256": "d821817411834ea0e98ae48b1e2268b12e7d599630556fa5da1792c6e1a2c66f",
|
||||
"crc32": "d2a1c6bf"
|
||||
},
|
||||
"4b92936f396c8199f745d3ed0ff588a324b8dd70": {
|
||||
"path": "bios/Sega/Dreamcast/naomigd.zip",
|
||||
"name": "naomigd.zip",
|
||||
"size": 4972898,
|
||||
"sha1": "4b92936f396c8199f745d3ed0ff588a324b8dd70",
|
||||
"md5": "a3c74748f4b1d08f2247b16099db372d",
|
||||
"sha256": "793db2a859be2d814d334ab511811c42c6727a16841e7627fa7c33171c3de441",
|
||||
"crc32": "b7949ddb"
|
||||
},
|
||||
"44c9f00deccca2bfe2f3b41693b70662ff2c2256": {
|
||||
"path": "bios/Sega/Dreamcast/vmu_save_A1.bin",
|
||||
"name": "vmu_save_A1.bin",
|
||||
@@ -44644,7 +44671,7 @@
|
||||
"crc32": "0ebea9d4"
|
||||
},
|
||||
"de2734b2110864ada20f85ca6ba7874ed1e6ecb1": {
|
||||
"path": "bios/Sega/Hikaru/hikaru.zip",
|
||||
"path": "bios/Sega/Hikaru/.variants/hikaru.zip",
|
||||
"name": "hikaru.zip",
|
||||
"size": 785989,
|
||||
"sha1": "de2734b2110864ada20f85ca6ba7874ed1e6ecb1",
|
||||
@@ -48265,16 +48292,21 @@
|
||||
"c54b17f59168048eb5bf99f83a1f0f4d": "d2c4be29ed5b86c083b5283abc8461127d88395f",
|
||||
"8ffe31f1ee8164f6c1dfd95ffb79feff": "734efa75815502d58898599359cf55f8003a03a5",
|
||||
"4a89c35e11d0bcb3c174cabfa4b1cd09": "32daf772960c7ed31f41b95055968532b81d0896",
|
||||
"7a11bfe0cc72886d032e386db68f890c": "f2a730530f4989ca0e8860aa4e455b6a5fe69e1d",
|
||||
"17cce3efe7b03d0e789744ed7dc4c619": "9a48e38cb92b7e0fcc75156bdfa737c63a2cb1c3",
|
||||
"a805db5d380c597ce14f42ad1afcfbe8": "f8526dcec63402d2533d8180e217fa03a6322c34",
|
||||
"2b268f2f8960e5124f9a8cc6cfe86773": "5c5f300f3ab2bd10e2adf4dd96baa78317578d8d",
|
||||
"e0d8f3de7d217882fec5aa55883b6a11": "ca7bf85999eaaa79652c721986e64f769cf03892",
|
||||
"c26bf1744cb7f6ffe441f463870321f8": "c25686d24c7205473741f948f8a9df9906823145",
|
||||
"219a818c4ffd9fab04b9be9c7e2107a8": "fb0c36d69f66f4b10a895aa708ae37f826755257",
|
||||
"f4011d3116500354edf7302a90402711": "782c303cbdfab1027b04db74a63e27bdad5e0c53",
|
||||
"36ac7b58216de5eecfaebe527bf6d02e": "0b5cc968644c936d4819c1eb5f623f5f3f83eda1",
|
||||
"a8c8fe344adb352ea09166a7c43e33b0": "cb6ecfa04936ea2ec833f08c080985c07b8a1435",
|
||||
"981fa4057f4bd5c064ce446963d8ac33": "dc5c6cc5c294accff4ebce2ac33355063cff8a9d",
|
||||
"526eda1e2a7920c92c88178789d71d84": "c96711c01c0158f161791d6fbe75d88329e8ac0a",
|
||||
"58033e4ba5793c09dffb87f96f3e9301": "2533cc33201da28b2086a0a2fd2b5e04271b6eeb",
|
||||
"dd6fb7894fb2398a55e83a51328a3ad6": "c63a74691ee7384080877268a70bb1f53bc66dee",
|
||||
"e20b430bd7def78b45f61f238abab624": "f9ad4a4c6b0bbbe39ba358690a48f763ecbd98f0",
|
||||
"62d56b126e78f3d82faa4ee8a92c3e82": "4f28af31ca0defdd73d80edec2fa296908e624dc",
|
||||
"68ef99a1f2847d08ff9242a90561d31b": "0783012b4eabca599e460988257ec37500501df6",
|
||||
"653e991a39e867354d090c3394157d1c": "6bbbce094422062bd178d6007bed06dcdd0d8b78",
|
||||
@@ -48286,7 +48318,7 @@
|
||||
"6c6c0c726cbf15e81785eb7592fdb51c": "de463b0577dfd1027bf7de523ff67a0fff861cdb",
|
||||
"72d6c73306c7f0b76723f989e7e1bdd1": "ac4b78d53c7a97da2451ca35498395d8dd1e3024",
|
||||
"fcb631bf18a56f2d5b077fa846bab4a6": "5426d52e17e0ff9195fabbb42f704342e556d08e",
|
||||
"7a11bfe0cc72886d032e386db68f890c": "f2a730530f4989ca0e8860aa4e455b6a5fe69e1d",
|
||||
"6a0ac75d702f8f7c1ca6c72aa2b0b7d8": "03c9d1c3f59e8c6f320ea74abde1e4e7c5bfa623",
|
||||
"c266fc58905af1e246dffadc84301042": "beaf97c4a0e0792b8db65648f9dabb6a54ae0549",
|
||||
"0507c3a390e5b39d81dd9d10fdfc19eb": "901e1927ebe87946e3e4bb6d0a825088a8a60490",
|
||||
"eb6a82c4cc942bf46970968bf331df1e": "f44836072ec6ad9e5a7b46105985548181faab5b",
|
||||
@@ -48339,7 +48371,7 @@
|
||||
"8ef9b86ab13c70e519d2c02e5282c67b": "346cbf24af08f5bfd96e6a77abf27595477aace8",
|
||||
"d0e17fe0126993b97d697bc859202be4": "7381472bf046126257e51a0124e4553282f020e5",
|
||||
"b37582d04dee048edb99743d44764407": "98b92ece93d3e160c446a56ac859a8311333e36c",
|
||||
"f4011d3116500354edf7302a90402711": "782c303cbdfab1027b04db74a63e27bdad5e0c53",
|
||||
"0ec01786c10707acfa480f1d96c935ef": "07fd3fae7af650a37a3329ed09d039bd7360294f",
|
||||
"4a56d56e2219c5e2b006b66a4263c01c": "f590ccf688b4c05fa1da5c5dd92c224545170c3b",
|
||||
"3a6561f8d2bb8424e6797920759962aa": "7b5be2c65e378f736ee4689303349d80dc425f5f",
|
||||
"361f60b1d3ce84e17f027f3e547e3091": "b4ff14ed8c3e37a4b45ce2d80c692961ffc88270",
|
||||
@@ -48356,9 +48388,9 @@
|
||||
"ad9af7a9560cad74f1644328213748f6": "1cc7452608d44af8171270530a995644fb213d1d",
|
||||
"aa569a303793510b2b4173480148de4b": "ab8375fcb12791d35b11df801041f965a40b21d9",
|
||||
"17516c33298e52424ffb58afc2ad208c": "0649e27b7d605add7fc4215ee628b71e3c835328",
|
||||
"526eda1e2a7920c92c88178789d71d84": "c96711c01c0158f161791d6fbe75d88329e8ac0a",
|
||||
"dd6fb7894fb2398a55e83a51328a3ad6": "c63a74691ee7384080877268a70bb1f53bc66dee",
|
||||
"e20b430bd7def78b45f61f238abab624": "f9ad4a4c6b0bbbe39ba358690a48f763ecbd98f0",
|
||||
"4e1ca1ade518f53efcce30bdefb855a4": "11ad55ee6b11092e810365b8389c1f8b4081e5d0",
|
||||
"843c0d51237dc945f57237c4b9872b1d": "da79eca49c59f7661737643b5e11e63a73b51fcc",
|
||||
"82f3a8bea688b4863947722d2fcb07f7": "a0f07de6070d98f86d55a4ecd61b4a5b05a4a0d5",
|
||||
"c85b8132799f1b2ad3754a97947809d2": "838934ee5b8fcc81883fb664526b3d281840b2e9",
|
||||
"00dad01abdbf8ea9e79ad2fe11bdb182": "deb62b0074b8cae4f162c257662136733cfc76ad",
|
||||
"5bc25f80395a68790a69b7eb3e57b897": "f677361cd05cf2d146730890298985290b3dbc69",
|
||||
@@ -53093,22 +53125,26 @@
|
||||
"f88354ec482be09aeccd76a97bb75868": "1e5b0b2441a4979b6966d942b20cc76c413b8c5e",
|
||||
"7f041b6a55cd7423a6c08a219335269e": "4103668c1bbd66c5e24558e73d4f3f92061a109a",
|
||||
"2f19b925f2c6972c7cf299d42dcd7498": "39a0fec854e438f6757882604a8dc56e62e401d9",
|
||||
"0ec01786c10707acfa480f1d96c935ef": "07fd3fae7af650a37a3329ed09d039bd7360294f",
|
||||
"e95415b161121bef35ade12367138c63": "00f43f5bf58dd79135565d52c4eea7e314ebc810",
|
||||
"756b19b9829e8b1c9903104ff4139f94": "9c294250f54b4e3f60e3d13f73ee80325e683b04",
|
||||
"3537e3cfe384cad5dcec34dc63777aff": "fa950979aaa1d4c947473f158f770f3f3c8c45da",
|
||||
"a5d31549c638f0dc0ad4f3bb163ba4b7": "f63eca9a1b1e92ee1582ff5e4c0db55193f97e33",
|
||||
"3f348c88af99a40fbd11fa435f28c69d": "e18c5e9ca21654dfd724aa54e625b386e6ffb2c5",
|
||||
"e80075c0dfcd39ab2bea972d150e0ba1": "ff161eaa16b36b519eeab26364b99f59b9e8128c",
|
||||
"0ec5ae5b5a5c4959fa8b43fcf8687f7c": "cdf247154e28c4b352b962a4a523587f2fde9305",
|
||||
"59889f03e09c1d4246b7874096a3201c": "1f62f581094c90620c74d4d15c1c1640a973e684",
|
||||
"2f818338f47701c606ade664a3e16a8a": "ac59626eee00a6a9a8a2f7e3ac5c774678c116ba",
|
||||
"9338b10ee6f13fbc8bfcd6276e156fad": "f695e418bbfff01c47443fb8c4626d742951ed6a",
|
||||
"f126d318f135f38ee377fef2acf08d7e": "62a0d456ff84664a4f631938d3991088bc122f1b",
|
||||
"5e83867c751f692a000afdf658dc181f": "3c1c6422c332fc57c69c938db4dd3ac91eff4f02",
|
||||
"9c755171b222fb1f4e1439d5b709dbf1": "b3a86809857fe9ce575da73f6ed6c5441d558e3d",
|
||||
"ee362dd63d7ff01f6d579ad53f3bfe69": "889d239ac41f25622164609367b713dd33bd5bde",
|
||||
"6559697f76592be77a7a9ff3bfb6711a": "9b9c9f0af3de914de677ba8e19f4190673142c1b",
|
||||
"eb4099aeb42ef089cfe94f8fe95e51f6": "d7ef86bd03de7c1d0e2b0762e04b6f8f8d26dbdb",
|
||||
"8bab1ba136d0cb6ebcc05a27c4dfc185": "43f0018c32dd6d166c3b6d8ed2ffa672f398fa3a",
|
||||
"c50072cbab75673e1b1a6b94355e6fa8": "2962e338ccc9f66f29b409f73ca27aeee79633ac",
|
||||
"b5475847ee3a3ef2b12cda48dd49370d": "56b2a1ca68bf3519f01abde00c22e7a3425494e5",
|
||||
"a3c74748f4b1d08f2247b16099db372d": "4b92936f396c8199f745d3ed0ff588a324b8dd70",
|
||||
"2593bcd4ba33a4974344af27ca371a1a": "09f1ed9e0f8ece181a1850ec89361cef78f37c9e",
|
||||
"1c3337f3f267e9aaab2652ab8aa6c335": "a43960ea7ba25dd823f5e0567d8d0296b960e47e",
|
||||
"cbc5d25c183ca3eb44af1d44418f52bd": "8841e8e15c65fd94ccad95588eb71ef6b2d3d3c9",
|
||||
@@ -53117,19 +53153,13 @@
|
||||
"5536305d6e89f825519fabf1a8ef207a": "73bdb8359bfc74b04e6e82b20143dc9f6322c886",
|
||||
"35480fabb5a7a306e5a643b915480a24": "c42ff3b9e74c723b07a394dee9106e5a6ab5d3bb",
|
||||
"c045f571b123b018ce2bfd2289172169": "3251d3b601850aed422f006b61ce9776cdb799d2",
|
||||
"3f348c88af99a40fbd11fa435f28c69d": "e18c5e9ca21654dfd724aa54e625b386e6ffb2c5",
|
||||
"0ec5ae5b5a5c4959fa8b43fcf8687f7c": "cdf247154e28c4b352b962a4a523587f2fde9305",
|
||||
"8248adaabb908bd0427d88c8d64a2a1a": "24e80cdf0695361ae8de7cceda29843e0474ecd0",
|
||||
"e10c53c2f8b90bab96ead2d368858623": "8951d1bb219ab2ff8583033d2119c899cc81f18c",
|
||||
"0a93f7940c455905bea6e392dfde92a4": "94d44d7f9529ec1642ba3771ed3c5f756d5bc872",
|
||||
"314fb1b16bd77154db4d30ff780a8e4f": "72c65f2a11ee7b72b77b9945187b7a332632e14a",
|
||||
"54099a23e3d6e87b4786b8eb48bd4274": "7d20a34242c98ac5ea76a8ca55bef0697d22e409",
|
||||
"bb92e8ca3c27546174131ab1f10b7a53": "4b21c78fdc782ef47d1f070ca7df0d50652d5612",
|
||||
"9c755171b222fb1f4e1439d5b709dbf1": "b3a86809857fe9ce575da73f6ed6c5441d558e3d",
|
||||
"eb4099aeb42ef089cfe94f8fe95e51f6": "d7ef86bd03de7c1d0e2b0762e04b6f8f8d26dbdb",
|
||||
"843c0d51237dc945f57237c4b9872b1d": "da79eca49c59f7661737643b5e11e63a73b51fcc",
|
||||
"3bffafac42a7767d8dcecf771f5552ba": "6d27d71aec4dfba98f66316ae74a1426d567698a",
|
||||
"a3c74748f4b1d08f2247b16099db372d": "4b92936f396c8199f745d3ed0ff588a324b8dd70",
|
||||
"ccaf708ca6980c4becd018f772ccdd23": "44c9f00deccca2bfe2f3b41693b70662ff2c2256",
|
||||
"e72afc5684e66420c1a516117319421e": "210cdc6dccb6737e6ddc950cee2f03d43f414def",
|
||||
"aae3efdeee230b6d35392a36bf3fbc29": "8ce40ec2d1e1e2c5f3153a6afd50cac1e571e055",
|
||||
@@ -53788,6 +53818,11 @@
|
||||
"vMac.ROM": [
|
||||
"32daf772960c7ed31f41b95055968532b81d0896"
|
||||
],
|
||||
"airlbios.zip": [
|
||||
"f2a730530f4989ca0e8860aa4e455b6a5fe69e1d",
|
||||
"03c9d1c3f59e8c6f320ea74abde1e4e7c5bfa623",
|
||||
"e18c5e9ca21654dfd724aa54e625b386e6ffb2c5"
|
||||
],
|
||||
"bubsys.zip.9a48e38c": [
|
||||
"9a48e38cb92b7e0fcc75156bdfa737c63a2cb1c3"
|
||||
],
|
||||
@@ -53808,6 +53843,12 @@
|
||||
"fb0c36d69f66f4b10a895aa708ae37f826755257",
|
||||
"98b92ece93d3e160c446a56ac859a8311333e36c"
|
||||
],
|
||||
"hod2bios.zip": [
|
||||
"782c303cbdfab1027b04db74a63e27bdad5e0c53",
|
||||
"07fd3fae7af650a37a3329ed09d039bd7360294f",
|
||||
"d652e72ad5d37032c05ca755dfe5508e03e6b45c",
|
||||
"b3a86809857fe9ce575da73f6ed6c5441d558e3d"
|
||||
],
|
||||
"hod2bios.zip.0b5cc968": [
|
||||
"0b5cc968644c936d4819c1eb5f623f5f3f83eda1"
|
||||
],
|
||||
@@ -53821,9 +53862,24 @@
|
||||
"8cf0aa7f9dca4d77485e605fb0e2173a734633bf",
|
||||
"a97c0579198d88d4db3f7f1b7707ddc6a86ab084"
|
||||
],
|
||||
"naomi.zip": [
|
||||
"c96711c01c0158f161791d6fbe75d88329e8ac0a",
|
||||
"11ad55ee6b11092e810365b8389c1f8b4081e5d0",
|
||||
"d7ef86bd03de7c1d0e2b0762e04b6f8f8d26dbdb"
|
||||
],
|
||||
"naomi.zip.2533cc33": [
|
||||
"2533cc33201da28b2086a0a2fd2b5e04271b6eeb"
|
||||
],
|
||||
"naomi2.zip": [
|
||||
"c63a74691ee7384080877268a70bb1f53bc66dee",
|
||||
"da79eca49c59f7661737643b5e11e63a73b51fcc"
|
||||
],
|
||||
"naomigd.zip": [
|
||||
"f9ad4a4c6b0bbbe39ba358690a48f763ecbd98f0",
|
||||
"a0f07de6070d98f86d55a4ecd61b4a5b05a4a0d5",
|
||||
"b0677e6b9e1274292fef56787931732072b0e693",
|
||||
"4b92936f396c8199f745d3ed0ff588a324b8dd70"
|
||||
],
|
||||
"neocdz.zip.4f28af31": [
|
||||
"4f28af31ca0defdd73d80edec2fa296908e624dc"
|
||||
],
|
||||
@@ -53858,10 +53914,6 @@
|
||||
"acpsx.zip": [
|
||||
"5426d52e17e0ff9195fabbb42f704342e556d08e"
|
||||
],
|
||||
"airlbios.zip": [
|
||||
"f2a730530f4989ca0e8860aa4e455b6a5fe69e1d",
|
||||
"e18c5e9ca21654dfd724aa54e625b386e6ffb2c5"
|
||||
],
|
||||
"aleck64.zip": [
|
||||
"beaf97c4a0e0792b8db65648f9dabb6a54ae0549",
|
||||
"6f2f76832d6dc2c18997421ba26d22d623715c77"
|
||||
@@ -54045,12 +54097,6 @@
|
||||
"1a2b8740f4672fd9668bfa6f648bb34f4339afb6",
|
||||
"d38572d22721eb5972f671cde54201d752dffe6b"
|
||||
],
|
||||
"hod2bios.zip": [
|
||||
"782c303cbdfab1027b04db74a63e27bdad5e0c53",
|
||||
"d652e72ad5d37032c05ca755dfe5508e03e6b45c",
|
||||
"07fd3fae7af650a37a3329ed09d039bd7360294f",
|
||||
"b3a86809857fe9ce575da73f6ed6c5441d558e3d"
|
||||
],
|
||||
"isgsm.zip": [
|
||||
"f590ccf688b4c05fa1da5c5dd92c224545170c3b",
|
||||
"6a19d46d3915f2bff823ac34327bb0976fb2fed7"
|
||||
@@ -54100,19 +54146,6 @@
|
||||
"namcoc75.zip": [
|
||||
"0649e27b7d605add7fc4215ee628b71e3c835328"
|
||||
],
|
||||
"naomi.zip": [
|
||||
"c96711c01c0158f161791d6fbe75d88329e8ac0a",
|
||||
"d7ef86bd03de7c1d0e2b0762e04b6f8f8d26dbdb"
|
||||
],
|
||||
"naomi2.zip": [
|
||||
"c63a74691ee7384080877268a70bb1f53bc66dee",
|
||||
"da79eca49c59f7661737643b5e11e63a73b51fcc"
|
||||
],
|
||||
"naomigd.zip": [
|
||||
"f9ad4a4c6b0bbbe39ba358690a48f763ecbd98f0",
|
||||
"b0677e6b9e1274292fef56787931732072b0e693",
|
||||
"4b92936f396c8199f745d3ed0ff588a324b8dd70"
|
||||
],
|
||||
"neocdz.zip": [
|
||||
"838934ee5b8fcc81883fb664526b3d281840b2e9",
|
||||
"80c9a25ccf39c6b85d1a7c9c0d6fe527ab45ec1c"
|
||||
@@ -68108,6 +68141,9 @@
|
||||
"disk2-16boot.rom": [
|
||||
"d4181c9f046aafc3fb326b381baac809d9e38d16"
|
||||
],
|
||||
"naomi2.zip.incomplete": [
|
||||
"c63a74691ee7384080877268a70bb1f53bc66dee"
|
||||
],
|
||||
"tos102uk.img": [
|
||||
"87900a40a890fdf03bd08be6c60cc645855cbce5"
|
||||
],
|
||||
@@ -69367,16 +69403,21 @@
|
||||
"0074341f": "d2c4be29ed5b86c083b5283abc8461127d88395f",
|
||||
"8473ae12": "734efa75815502d58898599359cf55f8003a03a5",
|
||||
"e133094a": "32daf772960c7ed31f41b95055968532b81d0896",
|
||||
"f83ec60f": "f2a730530f4989ca0e8860aa4e455b6a5fe69e1d",
|
||||
"0de73e72": "9a48e38cb92b7e0fcc75156bdfa737c63a2cb1c3",
|
||||
"a33210fc": "f8526dcec63402d2533d8180e217fa03a6322c34",
|
||||
"96ff4a07": "5c5f300f3ab2bd10e2adf4dd96baa78317578d8d",
|
||||
"9f9c396d": "ca7bf85999eaaa79652c721986e64f769cf03892",
|
||||
"3d54fe55": "c25686d24c7205473741f948f8a9df9906823145",
|
||||
"ae5c68a1": "fb0c36d69f66f4b10a895aa708ae37f826755257",
|
||||
"0ddc6daf": "782c303cbdfab1027b04db74a63e27bdad5e0c53",
|
||||
"e2c08bbf": "0b5cc968644c936d4819c1eb5f623f5f3f83eda1",
|
||||
"29f7891d": "cb6ecfa04936ea2ec833f08c080985c07b8a1435",
|
||||
"08ba2527": "dc5c6cc5c294accff4ebce2ac33355063cff8a9d",
|
||||
"6ee50181": "c96711c01c0158f161791d6fbe75d88329e8ac0a",
|
||||
"7eba26a4": "2533cc33201da28b2086a0a2fd2b5e04271b6eeb",
|
||||
"4a2409fe": "c63a74691ee7384080877268a70bb1f53bc66dee",
|
||||
"ca501374": "f9ad4a4c6b0bbbe39ba358690a48f763ecbd98f0",
|
||||
"6fc3e0de": "4f28af31ca0defdd73d80edec2fa296908e624dc",
|
||||
"713d6657": "0783012b4eabca599e460988257ec37500501df6",
|
||||
"fefb84f1": "6bbbce094422062bd178d6007bed06dcdd0d8b78",
|
||||
@@ -69388,7 +69429,7 @@
|
||||
"b28f7112": "de463b0577dfd1027bf7de523ff67a0fff861cdb",
|
||||
"77228c84": "ac4b78d53c7a97da2451ca35498395d8dd1e3024",
|
||||
"9c9601ca": "5426d52e17e0ff9195fabbb42f704342e556d08e",
|
||||
"f83ec60f": "f2a730530f4989ca0e8860aa4e455b6a5fe69e1d",
|
||||
"1e5b53dc": "03c9d1c3f59e8c6f320ea74abde1e4e7c5bfa623",
|
||||
"da9beacc": "beaf97c4a0e0792b8db65648f9dabb6a54ae0549",
|
||||
"99c68750": "901e1927ebe87946e3e4bb6d0a825088a8a60490",
|
||||
"bccffdf3": "f44836072ec6ad9e5a7b46105985548181faab5b",
|
||||
@@ -69441,7 +69482,7 @@
|
||||
"380dcb3f": "346cbf24af08f5bfd96e6a77abf27595477aace8",
|
||||
"fd02cfba": "7381472bf046126257e51a0124e4553282f020e5",
|
||||
"e62f0ef7": "98b92ece93d3e160c446a56ac859a8311333e36c",
|
||||
"0ddc6daf": "782c303cbdfab1027b04db74a63e27bdad5e0c53",
|
||||
"45ecc8ae": "07fd3fae7af650a37a3329ed09d039bd7360294f",
|
||||
"26856bf9": "f590ccf688b4c05fa1da5c5dd92c224545170c3b",
|
||||
"d9d92d1b": "7b5be2c65e378f736ee4689303349d80dc425f5f",
|
||||
"201eeb68": "b4ff14ed8c3e37a4b45ce2d80c692961ffc88270",
|
||||
@@ -69458,9 +69499,9 @@
|
||||
"be241255": "1cc7452608d44af8171270530a995644fb213d1d",
|
||||
"2d71120c": "ab8375fcb12791d35b11df801041f965a40b21d9",
|
||||
"cf65b189": "0649e27b7d605add7fc4215ee628b71e3c835328",
|
||||
"6ee50181": "c96711c01c0158f161791d6fbe75d88329e8ac0a",
|
||||
"4a2409fe": "c63a74691ee7384080877268a70bb1f53bc66dee",
|
||||
"ca501374": "f9ad4a4c6b0bbbe39ba358690a48f763ecbd98f0",
|
||||
"fb0bca9c": "11ad55ee6b11092e810365b8389c1f8b4081e5d0",
|
||||
"b700583b": "da79eca49c59f7661737643b5e11e63a73b51fcc",
|
||||
"31828d82": "a0f07de6070d98f86d55a4ecd61b4a5b05a4a0d5",
|
||||
"a313a0d6": "838934ee5b8fcc81883fb664526b3d281840b2e9",
|
||||
"81315163": "deb62b0074b8cae4f162c257662136733cfc76ad",
|
||||
"6a679292": "f677361cd05cf2d146730890298985290b3dbc69",
|
||||
@@ -74195,22 +74236,26 @@
|
||||
"dd9c46b8": "1e5b0b2441a4979b6966d942b20cc76c413b8c5e",
|
||||
"bfda1fe5": "4103668c1bbd66c5e24558e73d4f3f92061a109a",
|
||||
"16ef13bc": "39a0fec854e438f6757882604a8dc56e62e401d9",
|
||||
"45ecc8ae": "07fd3fae7af650a37a3329ed09d039bd7360294f",
|
||||
"e185c03f": "00f43f5bf58dd79135565d52c4eea7e314ebc810",
|
||||
"a5a07c99": "9c294250f54b4e3f60e3d13f73ee80325e683b04",
|
||||
"eed16e7a": "fa950979aaa1d4c947473f158f770f3f3c8c45da",
|
||||
"b1642de4": "f63eca9a1b1e92ee1582ff5e4c0db55193f97e33",
|
||||
"2c87c283": "e18c5e9ca21654dfd724aa54e625b386e6ffb2c5",
|
||||
"fb55e65e": "ff161eaa16b36b519eeab26364b99f59b9e8128c",
|
||||
"c295a8c2": "cdf247154e28c4b352b962a4a523587f2fde9305",
|
||||
"20cab9aa": "1f62f581094c90620c74d4d15c1c1640a973e684",
|
||||
"4d458823": "ac59626eee00a6a9a8a2f7e3ac5c774678c116ba",
|
||||
"fa297c5b": "f695e418bbfff01c47443fb8c4626d742951ed6a",
|
||||
"5177e8c4": "62a0d456ff84664a4f631938d3991088bc122f1b",
|
||||
"87e1cf82": "3c1c6422c332fc57c69c938db4dd3ac91eff4f02",
|
||||
"277c7fee": "b3a86809857fe9ce575da73f6ed6c5441d558e3d",
|
||||
"9521330f": "889d239ac41f25622164609367b713dd33bd5bde",
|
||||
"651142d3": "9b9c9f0af3de914de677ba8e19f4190673142c1b",
|
||||
"ab628024": "d7ef86bd03de7c1d0e2b0762e04b6f8f8d26dbdb",
|
||||
"cc8b8e1e": "43f0018c32dd6d166c3b6d8ed2ffa672f398fa3a",
|
||||
"2143196c": "2962e338ccc9f66f29b409f73ca27aeee79633ac",
|
||||
"da4fbc94": "56b2a1ca68bf3519f01abde00c22e7a3425494e5",
|
||||
"b7949ddb": "4b92936f396c8199f745d3ed0ff588a324b8dd70",
|
||||
"18ecc714": "09f1ed9e0f8ece181a1850ec89361cef78f37c9e",
|
||||
"312459a8": "a43960ea7ba25dd823f5e0567d8d0296b960e47e",
|
||||
"28e5fc81": "8841e8e15c65fd94ccad95588eb71ef6b2d3d3c9",
|
||||
@@ -74219,19 +74264,13 @@
|
||||
"bb76ee11": "73bdb8359bfc74b04e6e82b20143dc9f6322c886",
|
||||
"f0ddfc76": "c42ff3b9e74c723b07a394dee9106e5a6ab5d3bb",
|
||||
"18354008": "3251d3b601850aed422f006b61ce9776cdb799d2",
|
||||
"2c87c283": "e18c5e9ca21654dfd724aa54e625b386e6ffb2c5",
|
||||
"c295a8c2": "cdf247154e28c4b352b962a4a523587f2fde9305",
|
||||
"af93ff9c": "24e80cdf0695361ae8de7cceda29843e0474ecd0",
|
||||
"89f2b1a1": "8951d1bb219ab2ff8583033d2119c899cc81f18c",
|
||||
"c611b498": "94d44d7f9529ec1642ba3771ed3c5f756d5bc872",
|
||||
"20199dc0": "72c65f2a11ee7b72b77b9945187b7a332632e14a",
|
||||
"96b7ce1e": "7d20a34242c98ac5ea76a8ca55bef0697d22e409",
|
||||
"d39556fc": "4b21c78fdc782ef47d1f070ca7df0d50652d5612",
|
||||
"277c7fee": "b3a86809857fe9ce575da73f6ed6c5441d558e3d",
|
||||
"ab628024": "d7ef86bd03de7c1d0e2b0762e04b6f8f8d26dbdb",
|
||||
"b700583b": "da79eca49c59f7661737643b5e11e63a73b51fcc",
|
||||
"d2a1c6bf": "6d27d71aec4dfba98f66316ae74a1426d567698a",
|
||||
"b7949ddb": "4b92936f396c8199f745d3ed0ff588a324b8dd70",
|
||||
"5008be15": "44c9f00deccca2bfe2f3b41693b70662ff2c2256",
|
||||
"7efc7372": "210cdc6dccb6737e6ddc950cee2f03d43f414def",
|
||||
"c1800ee3": "8ce40ec2d1e1e2c5f3153a6afd50cac1e571e055",
|
||||
|
||||
@@ -38,6 +38,8 @@ DEFAULT_DB = "database.json"
|
||||
DEFAULT_PLATFORMS_DIR = "platforms"
|
||||
DEFAULT_BIOS_DIR = "bios"
|
||||
|
||||
MAX_DOWNLOAD = 100 * 1024 * 1024 # 100MB per file
|
||||
|
||||
LEGACY_BRANCHES = ["libretro", "RetroArch", "RetroPie", "Recalbox", "batocera", "Other"]
|
||||
|
||||
PUBLIC_REPOS = [
|
||||
@@ -106,6 +108,14 @@ def verify_content(data: bytes, expected: dict) -> bool:
|
||||
return False
|
||||
|
||||
|
||||
def _read_limited(resp, limit: int = MAX_DOWNLOAD) -> bytes | None:
|
||||
"""Read response up to limit bytes. Returns None if exceeded."""
|
||||
data = resp.read(limit + 1)
|
||||
if len(data) > limit:
|
||||
return None
|
||||
return data
|
||||
|
||||
|
||||
def step1_crossref_db(entry: dict, db: dict) -> str | None:
|
||||
"""Check if file exists under different name/path in database."""
|
||||
sha1 = entry.get("sha1")
|
||||
@@ -166,7 +176,9 @@ def step3_search_public_repos(entry: dict) -> bytes | None:
|
||||
try:
|
||||
req = urllib.request.Request(url, headers={"User-Agent": "retrobios-fetch/1.0"})
|
||||
with urllib.request.urlopen(req, timeout=30) as resp:
|
||||
data = resp.read()
|
||||
data = _read_limited(resp)
|
||||
if data is None:
|
||||
continue
|
||||
if verify_content(data, entry):
|
||||
return data
|
||||
except (urllib.error.URLError, urllib.error.HTTPError):
|
||||
@@ -177,7 +189,9 @@ def step3_search_public_repos(entry: dict) -> bytes | None:
|
||||
try:
|
||||
req = urllib.request.Request(url, headers={"User-Agent": "retrobios-fetch/1.0"})
|
||||
with urllib.request.urlopen(req, timeout=30) as resp:
|
||||
data = resp.read()
|
||||
data = _read_limited(resp)
|
||||
if data is None:
|
||||
continue
|
||||
if verify_content(data, entry):
|
||||
return data
|
||||
except (urllib.error.URLError, urllib.error.HTTPError):
|
||||
@@ -196,7 +210,9 @@ def step4_search_archive_org(entry: dict) -> bytes | None:
|
||||
try:
|
||||
req = urllib.request.Request(url, headers={"User-Agent": "retrobios-fetch/1.0"})
|
||||
with urllib.request.urlopen(req, timeout=30) as resp:
|
||||
data = resp.read()
|
||||
data = _read_limited(resp)
|
||||
if data is None:
|
||||
continue
|
||||
if verify_content(data, entry):
|
||||
return data
|
||||
except (urllib.error.URLError, urllib.error.HTTPError):
|
||||
@@ -223,8 +239,8 @@ def step4_search_archive_org(entry: dict) -> bytes | None:
|
||||
try:
|
||||
req2 = urllib.request.Request(dl_url, headers={"User-Agent": "retrobios-fetch/1.0"})
|
||||
with urllib.request.urlopen(req2, timeout=30) as resp2:
|
||||
data = resp2.read()
|
||||
if verify_content(data, entry):
|
||||
data = _read_limited(resp2)
|
||||
if data is not None and verify_content(data, entry):
|
||||
return data
|
||||
except (urllib.error.URLError, urllib.error.HTTPError):
|
||||
pass
|
||||
@@ -236,7 +252,7 @@ def step4_search_archive_org(entry: dict) -> bytes | None:
|
||||
|
||||
def place_file(data: bytes, entry: dict, bios_dir: str, db: dict) -> str:
|
||||
"""Place a fetched BIOS file in the correct location."""
|
||||
name = entry["name"]
|
||||
name = os.path.basename(entry["name"])
|
||||
system = entry["system"]
|
||||
|
||||
dest_dir = Path(bios_dir)
|
||||
|
||||
@@ -39,12 +39,35 @@ DEFAULT_BIOS_DIR = "bios"
|
||||
LARGE_FILES_RELEASE = "large-files"
|
||||
LARGE_FILES_REPO = "Abdess/retrobios"
|
||||
|
||||
MAX_ENTRY_SIZE = 512 * 1024 * 1024 # 512MB
|
||||
|
||||
def fetch_large_file(name: str, dest_dir: str = ".cache/large") -> str | None:
|
||||
|
||||
def _verify_file_hash(path: str, expected_sha1: str = "",
|
||||
expected_md5: str = "") -> bool:
|
||||
"""Compute and compare hash of a local file."""
|
||||
if not expected_sha1 and not expected_md5:
|
||||
return True
|
||||
h = hashlib.sha1() if expected_sha1 else hashlib.md5()
|
||||
with open(path, "rb") as f:
|
||||
while True:
|
||||
chunk = f.read(65536)
|
||||
if not chunk:
|
||||
break
|
||||
h.update(chunk)
|
||||
return h.hexdigest() == (expected_sha1 or expected_md5)
|
||||
|
||||
|
||||
def fetch_large_file(name: str, dest_dir: str = ".cache/large",
|
||||
expected_sha1: str = "", expected_md5: str = "") -> str | None:
|
||||
"""Download a large file from the 'large-files' GitHub release if not cached."""
|
||||
cached = os.path.join(dest_dir, name)
|
||||
if os.path.exists(cached):
|
||||
return cached
|
||||
if expected_sha1 or expected_md5:
|
||||
if _verify_file_hash(cached, expected_sha1, expected_md5):
|
||||
return cached
|
||||
os.unlink(cached)
|
||||
else:
|
||||
return cached
|
||||
|
||||
encoded_name = urllib.request.quote(name)
|
||||
url = f"https://github.com/{LARGE_FILES_REPO}/releases/download/{LARGE_FILES_RELEASE}/{encoded_name}"
|
||||
@@ -58,10 +81,22 @@ def fetch_large_file(name: str, dest_dir: str = ".cache/large") -> str | None:
|
||||
if not chunk:
|
||||
break
|
||||
f.write(chunk)
|
||||
return cached
|
||||
except (urllib.error.URLError, urllib.error.HTTPError):
|
||||
return None
|
||||
|
||||
if expected_sha1 or expected_md5:
|
||||
if not _verify_file_hash(cached, expected_sha1, expected_md5):
|
||||
os.unlink(cached)
|
||||
return None
|
||||
return cached
|
||||
|
||||
|
||||
def _sanitize_path(raw: str) -> str:
|
||||
"""Strip path traversal components from a relative path."""
|
||||
raw = raw.replace("\\", "/")
|
||||
parts = [p for p in raw.split("/") if p and p != ".."]
|
||||
return "/".join(parts)
|
||||
|
||||
|
||||
def resolve_file(file_entry: dict, db: dict, bios_dir: str,
|
||||
zip_contents: dict | None = None) -> tuple[str | None, str]:
|
||||
@@ -110,7 +145,7 @@ def resolve_file(file_entry: dict, db: dict, bios_dir: str,
|
||||
return local_path, "zip_exact"
|
||||
|
||||
# Release assets override local files (authoritative large files)
|
||||
cached = fetch_large_file(name)
|
||||
cached = fetch_large_file(name, expected_sha1=sha1 or "", expected_md5=md5 or "")
|
||||
if cached:
|
||||
return cached, "release_asset"
|
||||
|
||||
@@ -146,6 +181,8 @@ def build_zip_contents_index(db: dict) -> dict:
|
||||
for info in zf.infolist():
|
||||
if info.is_dir():
|
||||
continue
|
||||
if info.file_size > MAX_ENTRY_SIZE:
|
||||
continue
|
||||
data = zf.read(info.filename)
|
||||
inner_md5 = hashlib.md5(data).hexdigest()
|
||||
index[inner_md5] = sha1
|
||||
@@ -160,6 +197,14 @@ def download_external(file_entry: dict, dest_path: str) -> bool:
|
||||
if not url:
|
||||
return False
|
||||
|
||||
sha256 = file_entry.get("sha256")
|
||||
sha1 = file_entry.get("sha1")
|
||||
md5 = file_entry.get("md5")
|
||||
|
||||
if not (sha256 or sha1 or md5):
|
||||
print(f" WARNING: no hash for {file_entry['name']}, skipping unverifiable download")
|
||||
return False
|
||||
|
||||
try:
|
||||
req = urllib.request.Request(url, headers={"User-Agent": "retrobios-pack-gen/1.0"})
|
||||
with urllib.request.urlopen(req, timeout=120) as resp:
|
||||
@@ -168,11 +213,6 @@ def download_external(file_entry: dict, dest_path: str) -> bool:
|
||||
print(f" WARNING: Failed to download {url}: {e}")
|
||||
return False
|
||||
|
||||
# Verify hash
|
||||
sha256 = file_entry.get("sha256")
|
||||
sha1 = file_entry.get("sha1")
|
||||
md5 = file_entry.get("md5")
|
||||
|
||||
if sha256:
|
||||
actual = hashlib.sha256(data).hexdigest()
|
||||
if actual != sha256:
|
||||
@@ -228,7 +268,9 @@ def generate_pack(
|
||||
with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zf:
|
||||
for sys_id, system in sorted(config.get("systems", {}).items()):
|
||||
for file_entry in system.get("files", []):
|
||||
dest = file_entry.get("destination", file_entry["name"])
|
||||
dest = _sanitize_path(file_entry.get("destination", file_entry["name"]))
|
||||
if not dest:
|
||||
continue
|
||||
if base_dest:
|
||||
full_dest = f"{base_dest}/{dest}"
|
||||
else:
|
||||
@@ -316,8 +358,11 @@ def _extract_zip_to_archive(source_zip: str, dest_prefix: str, target_zf: zipfil
|
||||
for info in src.infolist():
|
||||
if info.is_dir():
|
||||
continue
|
||||
clean_name = _sanitize_path(info.filename)
|
||||
if not clean_name:
|
||||
continue
|
||||
data = src.read(info.filename)
|
||||
target_path = f"{dest_prefix}/{info.filename}" if dest_prefix else info.filename
|
||||
target_path = f"{dest_prefix}/{clean_name}" if dest_prefix else clean_name
|
||||
target_zf.writestr(target_path, data)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user