feat: add doom engine wad files, emulatorjs base config

This commit is contained in:
Abdessamad Derraz
2026-03-25 23:00:11 +01:00
parent 32b391ef69
commit d2cc9b8f29
32 changed files with 2349 additions and 1607 deletions

View File

@@ -2,7 +2,7 @@
Complete BIOS and firmware packs for RetroArch, Batocera, Recalbox, Lakka, RetroPie, EmuDeck, RetroBat, and RetroDECK.
**6,733** verified files across **294** systems, ready to extract into your emulator's BIOS directory.
**6,748** verified files across **294** systems, ready to extract into your emulator's BIOS directory.
## Download BIOS packs
@@ -18,17 +18,18 @@ Pick your platform, download the ZIP, extract to the BIOS path.
| RetroBat | 331 | `bios/` | [Download](../../releases/latest) |
| RetroDECK | 2007 | `~/retrodeck/bios/` | [Download](../../releases/latest) |
| RetroPie | 448 | `BIOS/` | [Download](../../releases/latest) |
| RomM | 374 | `bios/{platform_slug}/` | [Download](../../releases/latest) |
## What's included
BIOS, firmware, and system files for consoles from Atari to PlayStation 3.
Each file is checked against the emulator's source code to match what the code actually loads at runtime.
- **8 platforms** supported with platform-specific verification
- **9 platforms** supported with platform-specific verification
- **306 emulators** profiled from source (RetroArch cores + standalone)
- **294 systems** covered (NES, SNES, PlayStation, Saturn, Dreamcast, ...)
- **6,733 files** verified with MD5, SHA1, CRC32 checksums
- **5044 MB** total collection size
- **6,748 files** verified with MD5, SHA1, CRC32 checksums
- **5251 MB** total collection size
## Supported systems
@@ -42,12 +43,13 @@ Full list with per-file details: **[https://abdess.github.io/retrobios/](https:/
|----------|----------|----------|----------|---------|
| Batocera | 359/359 (100.0%) | 358 | 1 | 0 |
| EmuDeck | 161/161 (100.0%) | 161 | 0 | 0 |
| Lakka | 448/448 (100.0%) | 440 | 8 | 0 |
| Recalbox | 346/346 (100.0%) | 341 | 5 | 0 |
| RetroArch | 448/448 (100.0%) | 440 | 8 | 0 |
| RetroBat | 331/331 (100.0%) | 330 | 1 | 0 |
| RetroDECK | 2007/2007 (100.0%) | 2001 | 6 | 0 |
| RetroPie | 448/448 (100.0%) | 440 | 8 | 0 |
| Lakka | 448/448 (100.0%) | 448 | 0 | 0 |
| Recalbox | 346/346 (100.0%) | 346 | 0 | 0 |
| RetroArch | 448/448 (100.0%) | 448 | 0 | 0 |
| RetroBat | 331/331 (100.0%) | 331 | 0 | 0 |
| RetroDECK | 2007/2007 (100.0%) | 2007 | 0 | 0 |
| RetroPie | 448/448 (100.0%) | 448 | 0 | 0 |
| RomM | 374/374 (100.0%) | 359 | 15 | 0 |
## How it works
@@ -65,6 +67,7 @@ Per-file hashes, emulator profiles, gap analysis, cross-reference: **[https://ab
## Contributors
<a href="https://github.com/PixNyb"><img src="https://avatars.githubusercontent.com/u/40770831?v=4" width="50" title="PixNyb"></a>
<a href="https://github.com/monster-penguin"><img src="https://avatars.githubusercontent.com/u/266009589?v=4" width="50" title="monster-penguin"></a>
@@ -76,4 +79,4 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
This repository provides BIOS files for personal backup and archival purposes.
*Auto-generated on 2026-03-25T16:17:06Z*
*Auto-generated on 2026-03-25T22:12:06Z*

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,7 +1,7 @@
{
"generated_at": "2026-03-25T15:41:49Z",
"total_files": 6733,
"total_size": 5288644732,
"generated_at": "2026-03-25T22:06:53Z",
"total_files": 6748,
"total_size": 5505760050,
"files": {
"520d3d1b5897800af47f92efd2444a26b7a7dead": {
"path": "bios/3DO Company/3DO/3do_arcade_saot.bin",
@@ -27713,6 +27713,156 @@
"crc32": "0636e0be",
"adler32": "0ca77de6"
},
"eca9cff1014ce5081804e193588d96c6ddb35432": {
"path": "bios/Id Software/Doom/CHEX.WAD",
"name": "CHEX.WAD",
"size": 12361532,
"sha1": "eca9cff1014ce5081804e193588d96c6ddb35432",
"md5": "25485721882b050afa96a56e5758dd52",
"sha256": "d8eb5277918883f490fb1a4be3c9a8588df2dbaee6dc4beb8df4929148bbffb1",
"crc32": "298dd5b5",
"adler32": "4026602b"
},
"7742089b4468a736cadb659a7deca3320fe6dcbd": {
"path": "bios/Id Software/Doom/DOOM.WAD",
"name": "DOOM.WAD",
"size": 11159840,
"sha1": "7742089b4468a736cadb659a7deca3320fe6dcbd",
"md5": "1cd63c5ddff1bf8ce844237f580e9cf3",
"sha256": "ff2c301b8719465a6e386a512bfa319931b7f64ea517d337c5a47afe03951902",
"crc32": "723e60f9",
"adler32": "e85f4707"
},
"5b2e249b9c5133ec987b3ea77596381dc0d6bc1d": {
"path": "bios/Id Software/Doom/DOOM1.WAD",
"name": "DOOM1.WAD",
"size": 4196020,
"sha1": "5b2e249b9c5133ec987b3ea77596381dc0d6bc1d",
"md5": "f0cefca49926d00903cf57551d901abe",
"sha256": "1d7d43be501e67d927e415e0b8f3e29c3bf33075e859721816f652a526cac771",
"crc32": "162b696a",
"adler32": "3bca9a2a"
},
"7ec7652fcfce8ddc6e801839291f0e28ef1d5ae7": {
"path": "bios/Id Software/Doom/DOOM2.WAD",
"name": "DOOM2.WAD",
"size": 14604584,
"sha1": "7ec7652fcfce8ddc6e801839291f0e28ef1d5ae7",
"md5": "25e1459ca71d321525f84628f45ca8cd",
"sha256": "10d67824b11025ddd9198e8cfc87ca335ee6e2d3e63af4180fa9b8a471893255",
"crc32": "ec8725db",
"adler32": "03bcce6c"
},
"d510c877031bbd5f3d198581a2c8651e09b9861f": {
"path": "bios/Id Software/Doom/DOOM2F.WAD",
"name": "DOOM2F.WAD",
"size": 14607420,
"sha1": "d510c877031bbd5f3d198581a2c8651e09b9861f",
"md5": "3cb02349b3df649c86290907eed64e7b",
"sha256": "ab6d457050daee95fb763040f753fce44a4852883dafdb520b00cc8426e6bda0",
"crc32": "27eaae69",
"adler32": "13e6449b"
},
"ae363db8cd5645e1753d9bacc82cc0724e8e7f21": {
"path": "bios/Id Software/Doom/DOOM64.WAD",
"name": "DOOM64.WAD",
"size": 15103284,
"sha1": "ae363db8cd5645e1753d9bacc82cc0724e8e7f21",
"md5": "e16e17f59afe7b3297f53ebe7e9de815",
"sha256": "902e88504c55cb8f6e03774ba57a272565a65332f08578c3c6fa68972766db2e",
"crc32": "cb10a53d",
"adler32": "1d624237"
},
"f489d479371df32f6d280a0cb23b59a35ba2b833": {
"path": "bios/Id Software/Doom/HERETIC.WAD",
"name": "HERETIC.WAD",
"size": 14189976,
"sha1": "f489d479371df32f6d280a0cb23b59a35ba2b833",
"md5": "66d686b1ed6d35ff103f15dbd30e0341",
"sha256": "12541f82e1d326b456b89411f8c54b895e775a611580f66b78558e898b2eaafa",
"crc32": "5b16049e",
"adler32": "065166bc"
},
"b4c50ca9bea07f7c35250a1a11906091971c05ae": {
"path": "bios/Id Software/Doom/HERETIC1.WAD",
"name": "HERETIC1.WAD",
"size": 5120920,
"sha1": "b4c50ca9bea07f7c35250a1a11906091971c05ae",
"md5": "ae779722390ec32fa37b0d361f7d82f8",
"sha256": "3ab2f21828877e49e5eb3220785aaf8798050b7c4132003b5db7b8f3678bede4",
"crc32": "22d3f0ca",
"adler32": "6110f0ac"
},
"081f6a2024643b54ef4a436a85508539b6d20a1e": {
"path": "bios/Id Software/Doom/HEXDD.WAD",
"name": "HEXDD.WAD",
"size": 4440584,
"sha1": "081f6a2024643b54ef4a436a85508539b6d20a1e",
"md5": "78d5898e99e220e4de64edaa0e479593",
"sha256": "ea5e34c9f7eb677c593f125a0c45db2aaf2d98b8f6e9d50bd683a655aeec531f",
"crc32": "fd5eb11d",
"adler32": "6b8e0546"
},
"4b53832f0733c1e29e5f1de2428e5475e891af29": {
"path": "bios/Id Software/Doom/HEXEN.WAD",
"name": "HEXEN.WAD",
"size": 20083672,
"sha1": "4b53832f0733c1e29e5f1de2428e5475e891af29",
"md5": "abb033caf81e26f12a2103e1fa25453f",
"sha256": "f74b857076b3ffe2597d0e05bdecc687496e6e8a9582d7a47db681e0e78e4001",
"crc32": "dca9114c",
"adler32": "7ebb3585"
},
"90361e2a538d2388506657252ae41aceeb1ba360": {
"path": "bios/Id Software/Doom/PLUTONIA.WAD",
"name": "PLUTONIA.WAD",
"size": 17420824,
"sha1": "90361e2a538d2388506657252ae41aceeb1ba360",
"md5": "75c8cf89566741fa9d22447604053bd7",
"sha256": "a83b00c636fa3308286e76b1b3153fc14507caf994b0450770421260b08efed8",
"crc32": "48d1453c",
"adler32": "63916b81"
},
"bc0a110bf27aee89a0b2fc8111e2391ede891b8d": {
"path": "bios/Id Software/Doom/STRIFE0.WAD",
"name": "STRIFE0.WAD",
"size": 9934413,
"sha1": "bc0a110bf27aee89a0b2fc8111e2391ede891b8d",
"md5": "bb545b9c4eca0ff92c14d466b3294023",
"sha256": "f7f557657cbfd5c7eacaaf9d8aaf3e80512467b51ebfb7c567078ef9bf648ef8",
"crc32": "93c144dd",
"adler32": "70416de4"
},
"64c13b951a845ca7f8081f68138a6181557458d1": {
"path": "bios/Id Software/Doom/STRIFE1.WAD",
"name": "STRIFE1.WAD",
"size": 28377364,
"sha1": "64c13b951a845ca7f8081f68138a6181557458d1",
"md5": "2fed2031a5b03892106e0f117f17901f",
"sha256": "81e4d4402853392fbf2ebf52f9c19cf97754a84f6dd3e5919036241de1ffe52a",
"crc32": "4234ace5",
"adler32": "a0bc562a"
},
"9fbc66aedef7fe3bae0986cdb9323d2b8db4c9d3": {
"path": "bios/Id Software/Doom/TNT.WAD",
"name": "TNT.WAD",
"size": 18195736,
"sha1": "9fbc66aedef7fe3bae0986cdb9323d2b8db4c9d3",
"md5": "4e158d9953c79ccf97bd0663244cc6b6",
"sha256": "c0a9c29d023af2737953663d0e03177d9b7b7b64146c158dcc2a07f9ec18f353",
"crc32": "903dcc27",
"adler32": "cd062fca"
},
"ec6883100d807b894a98f426d024d22c77b63e7f": {
"path": "bios/Id Software/Doom/VOICES.WAD",
"name": "VOICES.WAD",
"size": 27319149,
"sha1": "ec6883100d807b894a98f426d024d22c77b63e7f",
"md5": "082234d6a3f7086424856478b5aa9e95",
"sha256": "3f7a9c37a23dc30bb3b8415e782ea6c78d59e6b2ed4b50ae255ff0365349110c",
"crc32": "cd12ebcf",
"adler32": "28b023c9"
},
"5f4aed208301449c2e9514edfd325fe9dead76fa": {
"path": "bios/Id Software/Doom/prboom.wad",
"name": "prboom.wad",
@@ -70107,6 +70257,21 @@
"8ecd11275ad418d302cd358b408b01ec": "10f1a7204f69b82a18bc94a3010c9660aec0c802",
"ec2a977f0c0645dd284010160caec636": "c0ee6f9443fa82c0fef5d497b3e76aa3077f1865",
"19d55c537767a7424a8e376d62fc2ac0": "72c60172fb1ba77c9b24b06b7755f0a16f0b3a13",
"25485721882b050afa96a56e5758dd52": "eca9cff1014ce5081804e193588d96c6ddb35432",
"1cd63c5ddff1bf8ce844237f580e9cf3": "7742089b4468a736cadb659a7deca3320fe6dcbd",
"f0cefca49926d00903cf57551d901abe": "5b2e249b9c5133ec987b3ea77596381dc0d6bc1d",
"25e1459ca71d321525f84628f45ca8cd": "7ec7652fcfce8ddc6e801839291f0e28ef1d5ae7",
"3cb02349b3df649c86290907eed64e7b": "d510c877031bbd5f3d198581a2c8651e09b9861f",
"e16e17f59afe7b3297f53ebe7e9de815": "ae363db8cd5645e1753d9bacc82cc0724e8e7f21",
"66d686b1ed6d35ff103f15dbd30e0341": "f489d479371df32f6d280a0cb23b59a35ba2b833",
"ae779722390ec32fa37b0d361f7d82f8": "b4c50ca9bea07f7c35250a1a11906091971c05ae",
"78d5898e99e220e4de64edaa0e479593": "081f6a2024643b54ef4a436a85508539b6d20a1e",
"abb033caf81e26f12a2103e1fa25453f": "4b53832f0733c1e29e5f1de2428e5475e891af29",
"75c8cf89566741fa9d22447604053bd7": "90361e2a538d2388506657252ae41aceeb1ba360",
"bb545b9c4eca0ff92c14d466b3294023": "bc0a110bf27aee89a0b2fc8111e2391ede891b8d",
"2fed2031a5b03892106e0f117f17901f": "64c13b951a845ca7f8081f68138a6181557458d1",
"4e158d9953c79ccf97bd0663244cc6b6": "9fbc66aedef7fe3bae0986cdb9323d2b8db4c9d3",
"082234d6a3f7086424856478b5aa9e95": "ec6883100d807b894a98f426d024d22c77b63e7f",
"72ae1b47820fcc93cc0df9c428d0face": "5f4aed208301449c2e9514edfd325fe9dead76fa",
"dbaa5c4e20a11000d1c4db3a2a28f374": "f3f2a11f3ecd91cd62d74c3acfad68a4cc6ddbd9",
"c011b428819eea4a80b455c245a5a04d": "9259b87edfe9b9f6d0749788a75a6ccf158f50aa",
@@ -82071,6 +82236,51 @@
"ALI1429G.AMW": [
"72c60172fb1ba77c9b24b06b7755f0a16f0b3a13"
],
"CHEX.WAD": [
"eca9cff1014ce5081804e193588d96c6ddb35432"
],
"DOOM.WAD": [
"7742089b4468a736cadb659a7deca3320fe6dcbd"
],
"DOOM1.WAD": [
"5b2e249b9c5133ec987b3ea77596381dc0d6bc1d"
],
"DOOM2.WAD": [
"7ec7652fcfce8ddc6e801839291f0e28ef1d5ae7"
],
"DOOM2F.WAD": [
"d510c877031bbd5f3d198581a2c8651e09b9861f"
],
"DOOM64.WAD": [
"ae363db8cd5645e1753d9bacc82cc0724e8e7f21"
],
"HERETIC.WAD": [
"f489d479371df32f6d280a0cb23b59a35ba2b833"
],
"HERETIC1.WAD": [
"b4c50ca9bea07f7c35250a1a11906091971c05ae"
],
"HEXDD.WAD": [
"081f6a2024643b54ef4a436a85508539b6d20a1e"
],
"HEXEN.WAD": [
"4b53832f0733c1e29e5f1de2428e5475e891af29"
],
"PLUTONIA.WAD": [
"90361e2a538d2388506657252ae41aceeb1ba360"
],
"STRIFE0.WAD": [
"bc0a110bf27aee89a0b2fc8111e2391ede891b8d"
],
"STRIFE1.WAD": [
"64c13b951a845ca7f8081f68138a6181557458d1"
],
"TNT.WAD": [
"9fbc66aedef7fe3bae0986cdb9323d2b8db4c9d3"
],
"VOICES.WAD": [
"ec6883100d807b894a98f426d024d22c77b63e7f"
],
"prboom.wad": [
"5f4aed208301449c2e9514edfd325fe9dead76fa"
],
@@ -93221,6 +93431,207 @@
"SCPH-70004_BIOS_V12_EUR_200.ROM2": [
"1bae895fbdd658cfb56c53cc2139282cc1e778de"
],
"tos100uk.img": [
"9a6e4c88533a9eaa4d55cdc040e47443e0226eb2"
],
"tos106de.img": [
"3b8cf5ffa41b252eb67f8824f94608fa4005d6dd"
],
"tos206us.img": [
"ee58768bdfc602c9b14942ce5481e97dd24e7c83"
],
"saturn_bios.bin": [
"2b8cb4f87580683eb4d760e4ed210813d667f0a2",
"df94c5b4d47eb3cc404d88b33a8fda237eaf4720"
],
"sega-saturn:af5828fdff51384f99b3c4926be27762": [
"2b8cb4f87580683eb4d760e4ed210813d667f0a2"
],
"bios7.bin": [
"24f67bdea115a2c847c8813a262502ee1607b7df"
],
"bios9.bin": [
"bfaac75f101c135e32e2aaf541de6b1be4c8c62d"
],
"dsi_bios7.bin": [
"a3aa751eb6bdaaf8a827ba9e03576a6f1ab0f547"
],
"dsi_bios9.bin": [
"7bf549b8be9e48ab0cdc9b0fdadd49a5131f97eb"
],
"gb_bios.bin": [
"4ed31ec6b0b175bb109c0eb5fd3d193da823339f",
"1db57a1e8b6e4096f811587f9eab0c6675fd9755"
],
"dmg0_rom.bin": [
"4ed31ec6b0b175bb109c0eb5fd3d193da823339f",
"1db57a1e8b6e4096f811587f9eab0c6675fd9755"
],
"sgb_bios.bin": [
"aa2f50a77dfb4823da96ba99309085a3c6278515",
"369e6eb5e0c975eaa52a4a3f6ee07b2a3c3c16de",
"f282b3aaf98f8423dab7d77f1aa0192be630f2fb"
],
"sgb1.boot.rom": [
"aa2f50a77dfb4823da96ba99309085a3c6278515"
],
"SGB1.sfc": [
"973e10840db683cf3faf61bd443090786b3a9f04"
],
"SGB1.sfc/program.rom": [
"973e10840db683cf3faf61bd443090786b3a9f04"
],
"SGB2.sfc": [
"e5b2922ca137051059e4269b236d07a22c07bc84"
],
"SGB2.sfc/program.rom": [
"e5b2922ca137051059e4269b236d07a22c07bc84"
],
"fs-a1gt_kanjifont.rom": [
"5aff2d9b6efc723bc395b0f96f0adfa83cc54a49"
],
"fs-a1wsx_kanjifont.rom": [
"5aff2d9b6efc723bc395b0f96f0adfa83cc54a49"
],
"yrw801.rom": [
"32760893ce06dbe3930627755ba065cc3d8ec6ca"
],
"fs-a1wsx_msx2psub.rom": [
"fe0254cbfc11405b79e7c86c7769bd6322b04995"
],
"MSX2PEXT.rom": [
"fe0254cbfc11405b79e7c86c7769bd6322b04995"
],
"fs-a1wsx_kanjibasic.rom": [
"dcc3a67732aa01c4f2ee8d1ad886444a4dbafe06"
],
"fs-a1wsx_disk.rom": [
"7ed7c55e0359737ac5e68d38cb6903f9e5d7c2b6"
],
"kick37350.A600": [
"02843c4253bbd29aba535b0aa3bd9a85034ecde4"
],
"amiga-os-120.rom": [
"11f9e62cf299f72184835b7b2a70a16333fc0d88"
],
"Kickstart v1.2 rev 33.180 (1986)(Commodore)(A500-A2000)[!].rom": [
"11f9e62cf299f72184835b7b2a70a16333fc0d88"
],
"Kickstart v1.2 rev 33.180 (1986)(Commodore)(A500-A1000-A2000).rom": [
"11f9e62cf299f72184835b7b2a70a16333fc0d88"
],
"amiga-os-130.rom": [
"891e9a547772fe0c6c19b610baf8bc4ea7fcb785"
],
"Kickstart v1.3 rev 34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV)[!].rom": [
"891e9a547772fe0c6c19b610baf8bc4ea7fcb785"
],
"Kickstart v1.3 rev 34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV).rom": [
"891e9a547772fe0c6c19b610baf8bc4ea7fcb785"
],
"amiga-os-204.rom": [
"c5839f5cb98a7a8947065c3ed2f14f5f42e334a1"
],
"Kickstart v2.04 rev 37.175 (1991)(Commodore)(A500+)[!].rom": [
"c5839f5cb98a7a8947065c3ed2f14f5f42e334a1"
],
"Kickstart v2.04 rev 37.175 (1991)(Commodore)(A500+).rom": [
"c5839f5cb98a7a8947065c3ed2f14f5f42e334a1"
],
"amiga-os-310-a600.rom": [
"3b7f1493b27e212830f989f26ca76c02049f09ca"
],
"Kickstart v3.1 rev 40.63 (1993)(Commodore)(A500-A600-A2000)[!].rom": [
"3b7f1493b27e212830f989f26ca76c02049f09ca"
],
"Kickstart v3.1 rev 40.63 (1993)(Commodore)(A500-A600-A2000).rom": [
"3b7f1493b27e212830f989f26ca76c02049f09ca"
],
"amiga-ext-130-cdtv.rom": [
"7ba40ffa17e500ed9fed041f3424bd81d9c907be"
],
"amiga-os-130-cdtv-ext.rom": [
"7ba40ffa17e500ed9fed041f3424bd81d9c907be"
],
"CDTV Extended-ROM v1.0 (1991)(Commodore)(CDTV)[!].rom": [
"7ba40ffa17e500ed9fed041f3424bd81d9c907be"
],
"CDTV Extended-ROM v1.0 (1992)(Commodore)(CDTV).rom": [
"7ba40ffa17e500ed9fed041f3424bd81d9c907be"
],
"amiga-os-300-a1200.rom": [
"70033828182fffc7ed106e5373a8b89dda76faa5"
],
"Kickstart v3.0 rev 39.106 (1992)(Commodore)(A1200)[!].rom": [
"70033828182fffc7ed106e5373a8b89dda76faa5"
],
"amiga-os-310-a1200.rom": [
"e21545723fe8374e91342617604f1b3d703094f1"
],
"AmigaVision.rom": [
"e21545723fe8374e91342617604f1b3d703094f1"
],
"Kickstart v3.1 rev 40.68 (1993)(Commodore)(A1200)[!].rom": [
"e21545723fe8374e91342617604f1b3d703094f1"
],
"Kickstart v3.1 rev 40.68 (1993)(Commodore)(A1200).rom": [
"e21545723fe8374e91342617604f1b3d703094f1"
],
"amiga-os-310-a4000.rom": [
"5fe04842d04a489720f0f4bb0e46948199406f49"
],
"Kickstart v3.1 rev 40.68 (1993)(Commodore)(A4000).rom": [
"5fe04842d04a489720f0f4bb0e46948199406f49"
],
"amiga-os-310-cd32.rom": [
"3525be8887f79b5929e017b42380a79edfee542d"
],
"Kickstart v3.1 rev 40.60 (1993)(Commodore)(CD32).rom": [
"3525be8887f79b5929e017b42380a79edfee542d"
],
"amiga-ext-310-cd32.rom": [
"5bef3d628ce59cc02a66e6e4ae0da48f60e78f7f"
],
"amiga-os-310-cd32-ext.rom": [
"5bef3d628ce59cc02a66e6e4ae0da48f60e78f7f"
],
"CD32 Extended-ROM rev 40.60 (1993)(Commodore)(CD32).rom": [
"5bef3d628ce59cc02a66e6e4ae0da48f60e78f7f"
],
"custom0.sf2": [
"286b2e1fb21cc79851da01666db6c0b0e88f25e3"
],
"colecovision.rom": [
"45bedc4cbdeac66c7df59e9e599195c778d86a92"
],
"coleco.rom": [
"45bedc4cbdeac66c7df59e9e599195c778d86a92"
],
"boot.rom": [
"45bedc4cbdeac66c7df59e9e599195c778d86a92"
],
"d2fdc.zip": [
"bc39fbd5b9a8d2287ac5d0a42e639fc4d3c2f9d4",
"af56c948598291b284a528f3fce06b961dba55e3"
],
"basic11.rom": [
"9451a1a09d8f75944dbd6f91193fc360f1de80ac"
],
"basic21.bin": [
"03bbb386cf530e804363acdfc1d13e64cf28af2e"
],
"exos21.bin": [
"55315b20fecb4441a07ee4bc5dc7153f396e0a2e"
],
"EXOS21.ROM": [
"55315b20fecb4441a07ee4bc5dc7153f396e0a2e"
],
"zx48.rom": [
"5ea7c2b824672e914525d1d5c419d71b84a426a2"
],
"zxs:48.rom": [
"5ea7c2b824672e914525d1d5c419d71b84a426a2"
],
"sony-playstation:239665b1a3dade1b5a52c06338011044": [
"343883a7b555646da8cee54aadd2795b6e7dd070"
],
@@ -93353,6 +93764,9 @@
"sony-playstation:c53ca5908936d412331790f4426c6c33": [
"96880d1ca92a016ff054be5159bb06fe03cb4e14"
],
"PSXONPSP660.BIN": [
"96880d1ca92a016ff054be5159bb06fe03cb4e14"
],
"PSXONPSP660.bin": [
"96880d1ca92a016ff054be5159bb06fe03cb4e14"
],
@@ -93632,13 +94046,6 @@
"sega-mega-cd:baca1df271d7c11fe50087c0358f4eb5": [
"2b125c0545afa089b617f2558e686ea723bdc06e"
],
"sega-saturn:af5828fdff51384f99b3c4926be27762": [
"2b8cb4f87580683eb4d760e4ed210813d667f0a2"
],
"saturn_bios.bin": [
"2b8cb4f87580683eb4d760e4ed210813d667f0a2",
"df94c5b4d47eb3cc404d88b33a8fda237eaf4720"
],
"sega-saturn:85ec9ca47d8f6807718151cbcca8b964": [
"df94c5b4d47eb3cc404d88b33a8fda237eaf4720"
],
@@ -93660,200 +94067,6 @@
"sega-saturn:0306c0e408d6682dd2d86324bd4ac661": [
"8c031bf9908fd0142fdd10a9cdd79389f8a3f2fc"
],
"tos100uk.img": [
"9a6e4c88533a9eaa4d55cdc040e47443e0226eb2"
],
"tos106de.img": [
"3b8cf5ffa41b252eb67f8824f94608fa4005d6dd"
],
"tos206us.img": [
"ee58768bdfc602c9b14942ce5481e97dd24e7c83"
],
"bios7.bin": [
"24f67bdea115a2c847c8813a262502ee1607b7df"
],
"bios9.bin": [
"bfaac75f101c135e32e2aaf541de6b1be4c8c62d"
],
"dsi_bios7.bin": [
"a3aa751eb6bdaaf8a827ba9e03576a6f1ab0f547"
],
"dsi_bios9.bin": [
"7bf549b8be9e48ab0cdc9b0fdadd49a5131f97eb"
],
"gb_bios.bin": [
"4ed31ec6b0b175bb109c0eb5fd3d193da823339f",
"1db57a1e8b6e4096f811587f9eab0c6675fd9755"
],
"dmg0_rom.bin": [
"4ed31ec6b0b175bb109c0eb5fd3d193da823339f",
"1db57a1e8b6e4096f811587f9eab0c6675fd9755"
],
"sgb_bios.bin": [
"aa2f50a77dfb4823da96ba99309085a3c6278515",
"369e6eb5e0c975eaa52a4a3f6ee07b2a3c3c16de",
"f282b3aaf98f8423dab7d77f1aa0192be630f2fb"
],
"sgb1.boot.rom": [
"aa2f50a77dfb4823da96ba99309085a3c6278515"
],
"SGB1.sfc": [
"973e10840db683cf3faf61bd443090786b3a9f04"
],
"SGB1.sfc/program.rom": [
"973e10840db683cf3faf61bd443090786b3a9f04"
],
"SGB2.sfc": [
"e5b2922ca137051059e4269b236d07a22c07bc84"
],
"SGB2.sfc/program.rom": [
"e5b2922ca137051059e4269b236d07a22c07bc84"
],
"fs-a1gt_kanjifont.rom": [
"5aff2d9b6efc723bc395b0f96f0adfa83cc54a49"
],
"fs-a1wsx_kanjifont.rom": [
"5aff2d9b6efc723bc395b0f96f0adfa83cc54a49"
],
"yrw801.rom": [
"32760893ce06dbe3930627755ba065cc3d8ec6ca"
],
"fs-a1wsx_msx2psub.rom": [
"fe0254cbfc11405b79e7c86c7769bd6322b04995"
],
"MSX2PEXT.rom": [
"fe0254cbfc11405b79e7c86c7769bd6322b04995"
],
"fs-a1wsx_kanjibasic.rom": [
"dcc3a67732aa01c4f2ee8d1ad886444a4dbafe06"
],
"fs-a1wsx_disk.rom": [
"7ed7c55e0359737ac5e68d38cb6903f9e5d7c2b6"
],
"kick37350.A600": [
"02843c4253bbd29aba535b0aa3bd9a85034ecde4"
],
"amiga-os-120.rom": [
"11f9e62cf299f72184835b7b2a70a16333fc0d88"
],
"Kickstart v1.2 rev 33.180 (1986)(Commodore)(A500-A2000)[!].rom": [
"11f9e62cf299f72184835b7b2a70a16333fc0d88"
],
"Kickstart v1.2 rev 33.180 (1986)(Commodore)(A500-A1000-A2000).rom": [
"11f9e62cf299f72184835b7b2a70a16333fc0d88"
],
"amiga-os-130.rom": [
"891e9a547772fe0c6c19b610baf8bc4ea7fcb785"
],
"Kickstart v1.3 rev 34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV)[!].rom": [
"891e9a547772fe0c6c19b610baf8bc4ea7fcb785"
],
"Kickstart v1.3 rev 34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV).rom": [
"891e9a547772fe0c6c19b610baf8bc4ea7fcb785"
],
"amiga-os-204.rom": [
"c5839f5cb98a7a8947065c3ed2f14f5f42e334a1"
],
"Kickstart v2.04 rev 37.175 (1991)(Commodore)(A500+)[!].rom": [
"c5839f5cb98a7a8947065c3ed2f14f5f42e334a1"
],
"Kickstart v2.04 rev 37.175 (1991)(Commodore)(A500+).rom": [
"c5839f5cb98a7a8947065c3ed2f14f5f42e334a1"
],
"amiga-os-310-a600.rom": [
"3b7f1493b27e212830f989f26ca76c02049f09ca"
],
"Kickstart v3.1 rev 40.63 (1993)(Commodore)(A500-A600-A2000)[!].rom": [
"3b7f1493b27e212830f989f26ca76c02049f09ca"
],
"Kickstart v3.1 rev 40.63 (1993)(Commodore)(A500-A600-A2000).rom": [
"3b7f1493b27e212830f989f26ca76c02049f09ca"
],
"amiga-ext-130-cdtv.rom": [
"7ba40ffa17e500ed9fed041f3424bd81d9c907be"
],
"amiga-os-130-cdtv-ext.rom": [
"7ba40ffa17e500ed9fed041f3424bd81d9c907be"
],
"CDTV Extended-ROM v1.0 (1991)(Commodore)(CDTV)[!].rom": [
"7ba40ffa17e500ed9fed041f3424bd81d9c907be"
],
"CDTV Extended-ROM v1.0 (1992)(Commodore)(CDTV).rom": [
"7ba40ffa17e500ed9fed041f3424bd81d9c907be"
],
"amiga-os-300-a1200.rom": [
"70033828182fffc7ed106e5373a8b89dda76faa5"
],
"Kickstart v3.0 rev 39.106 (1992)(Commodore)(A1200)[!].rom": [
"70033828182fffc7ed106e5373a8b89dda76faa5"
],
"amiga-os-310-a1200.rom": [
"e21545723fe8374e91342617604f1b3d703094f1"
],
"AmigaVision.rom": [
"e21545723fe8374e91342617604f1b3d703094f1"
],
"Kickstart v3.1 rev 40.68 (1993)(Commodore)(A1200)[!].rom": [
"e21545723fe8374e91342617604f1b3d703094f1"
],
"Kickstart v3.1 rev 40.68 (1993)(Commodore)(A1200).rom": [
"e21545723fe8374e91342617604f1b3d703094f1"
],
"amiga-os-310-a4000.rom": [
"5fe04842d04a489720f0f4bb0e46948199406f49"
],
"Kickstart v3.1 rev 40.68 (1993)(Commodore)(A4000).rom": [
"5fe04842d04a489720f0f4bb0e46948199406f49"
],
"amiga-os-310-cd32.rom": [
"3525be8887f79b5929e017b42380a79edfee542d"
],
"Kickstart v3.1 rev 40.60 (1993)(Commodore)(CD32).rom": [
"3525be8887f79b5929e017b42380a79edfee542d"
],
"amiga-ext-310-cd32.rom": [
"5bef3d628ce59cc02a66e6e4ae0da48f60e78f7f"
],
"amiga-os-310-cd32-ext.rom": [
"5bef3d628ce59cc02a66e6e4ae0da48f60e78f7f"
],
"CD32 Extended-ROM rev 40.60 (1993)(Commodore)(CD32).rom": [
"5bef3d628ce59cc02a66e6e4ae0da48f60e78f7f"
],
"custom0.sf2": [
"286b2e1fb21cc79851da01666db6c0b0e88f25e3"
],
"colecovision.rom": [
"45bedc4cbdeac66c7df59e9e599195c778d86a92"
],
"coleco.rom": [
"45bedc4cbdeac66c7df59e9e599195c778d86a92"
],
"boot.rom": [
"45bedc4cbdeac66c7df59e9e599195c778d86a92"
],
"d2fdc.zip": [
"bc39fbd5b9a8d2287ac5d0a42e639fc4d3c2f9d4",
"af56c948598291b284a528f3fce06b961dba55e3"
],
"basic11.rom": [
"9451a1a09d8f75944dbd6f91193fc360f1de80ac"
],
"basic21.bin": [
"03bbb386cf530e804363acdfc1d13e64cf28af2e"
],
"exos21.bin": [
"55315b20fecb4441a07ee4bc5dc7153f396e0a2e"
],
"EXOS21.ROM": [
"55315b20fecb4441a07ee4bc5dc7153f396e0a2e"
],
"zx48.rom": [
"5ea7c2b824672e914525d1d5c419d71b84a426a2"
],
"zxs:48.rom": [
"5ea7c2b824672e914525d1d5c419d71b84a426a2"
],
"apple2gs1.rom": [
"e4fc7560b69d062cb2da5b1ffbe11cd1ca03cc37"
],
@@ -93900,12 +94113,6 @@
"d64tano.rom": [
"1983b4fb398e3dd9668d424c666c5a0b3f1e2b69"
],
"d64_1.rom": [
"f119506eaa3b4b70b9aa0dd83761e8cbe043d042"
],
"fs-5500_disk.rom": [
"78cd7f847e77fd8cd51a647efb2725ba93f4c471"
],
"pcfxbios.bin": [
"1a77fd83e337f906aecab27a1604db064cf10074"
],
@@ -93919,6 +94126,12 @@
"plus3e-3.rom": [
"65f031caa8148a5493afe42c41f4929deab26b4e"
],
"d64_1.rom": [
"f119506eaa3b4b70b9aa0dd83761e8cbe043d042"
],
"fs-5500_disk.rom": [
"78cd7f847e77fd8cd51a647efb2725ba93f4c471"
],
"a1000kbd_fr.zip": [
"93d36de4d5d376c521a9ca99722f659e60d177f2"
],
@@ -98129,6 +98342,21 @@
"0f3e6586": "10f1a7204f69b82a18bc94a3010c9660aec0c802",
"e75945f3": "c0ee6f9443fa82c0fef5d497b3e76aa3077f1865",
"0636e0be": "72c60172fb1ba77c9b24b06b7755f0a16f0b3a13",
"298dd5b5": "eca9cff1014ce5081804e193588d96c6ddb35432",
"723e60f9": "7742089b4468a736cadb659a7deca3320fe6dcbd",
"162b696a": "5b2e249b9c5133ec987b3ea77596381dc0d6bc1d",
"ec8725db": "7ec7652fcfce8ddc6e801839291f0e28ef1d5ae7",
"27eaae69": "d510c877031bbd5f3d198581a2c8651e09b9861f",
"cb10a53d": "ae363db8cd5645e1753d9bacc82cc0724e8e7f21",
"5b16049e": "f489d479371df32f6d280a0cb23b59a35ba2b833",
"22d3f0ca": "b4c50ca9bea07f7c35250a1a11906091971c05ae",
"fd5eb11d": "081f6a2024643b54ef4a436a85508539b6d20a1e",
"dca9114c": "4b53832f0733c1e29e5f1de2428e5475e891af29",
"48d1453c": "90361e2a538d2388506657252ae41aceeb1ba360",
"93c144dd": "bc0a110bf27aee89a0b2fc8111e2391ede891b8d",
"4234ace5": "64c13b951a845ca7f8081f68138a6181557458d1",
"903dcc27": "9fbc66aedef7fe3bae0986cdb9323d2b8db4c9d3",
"cd12ebcf": "ec6883100d807b894a98f426d024d22c77b63e7f",
"a5751b99": "5f4aed208301449c2e9514edfd325fe9dead76fa",
"7f9a2c1e": "f3f2a11f3ecd91cd62d74c3acfad68a4cc6ddbd9",
"26dc3fba": "9259b87edfe9b9f6d0749788a75a6ccf158f50aa",
@@ -115312,6 +115540,42 @@
"1c1a0d8c9f4c446ccd7470516b215ddca5052fb2",
"80080644289ed93d71a1103992a154cc9802b2fa",
"434bc0b4eb4827da0773ec0795aadc5162569a07",
"9a6e4c88533a9eaa4d55cdc040e47443e0226eb2",
"3b8cf5ffa41b252eb67f8824f94608fa4005d6dd",
"ee58768bdfc602c9b14942ce5481e97dd24e7c83",
"2b8cb4f87580683eb4d760e4ed210813d667f0a2",
"24f67bdea115a2c847c8813a262502ee1607b7df",
"bfaac75f101c135e32e2aaf541de6b1be4c8c62d",
"a3aa751eb6bdaaf8a827ba9e03576a6f1ab0f547",
"7bf549b8be9e48ab0cdc9b0fdadd49a5131f97eb",
"4ed31ec6b0b175bb109c0eb5fd3d193da823339f",
"aa2f50a77dfb4823da96ba99309085a3c6278515",
"973e10840db683cf3faf61bd443090786b3a9f04",
"e5b2922ca137051059e4269b236d07a22c07bc84",
"5aff2d9b6efc723bc395b0f96f0adfa83cc54a49",
"32760893ce06dbe3930627755ba065cc3d8ec6ca",
"fe0254cbfc11405b79e7c86c7769bd6322b04995",
"dcc3a67732aa01c4f2ee8d1ad886444a4dbafe06",
"7ed7c55e0359737ac5e68d38cb6903f9e5d7c2b6",
"02843c4253bbd29aba535b0aa3bd9a85034ecde4",
"11f9e62cf299f72184835b7b2a70a16333fc0d88",
"891e9a547772fe0c6c19b610baf8bc4ea7fcb785",
"c5839f5cb98a7a8947065c3ed2f14f5f42e334a1",
"3b7f1493b27e212830f989f26ca76c02049f09ca",
"7ba40ffa17e500ed9fed041f3424bd81d9c907be",
"70033828182fffc7ed106e5373a8b89dda76faa5",
"e21545723fe8374e91342617604f1b3d703094f1",
"5fe04842d04a489720f0f4bb0e46948199406f49",
"3525be8887f79b5929e017b42380a79edfee542d",
"5bef3d628ce59cc02a66e6e4ae0da48f60e78f7f",
"44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"286b2e1fb21cc79851da01666db6c0b0e88f25e3",
"45bedc4cbdeac66c7df59e9e599195c778d86a92",
"bc39fbd5b9a8d2287ac5d0a42e639fc4d3c2f9d4",
"9451a1a09d8f75944dbd6f91193fc360f1de80ac",
"03bbb386cf530e804363acdfc1d13e64cf28af2e",
"55315b20fecb4441a07ee4bc5dc7153f396e0a2e",
"5ea7c2b824672e914525d1d5c419d71b84a426a2",
"343883a7b555646da8cee54aadd2795b6e7dd070",
"1a8d6f9453111b1d317bb7dae300495fbf54600c",
"b06f4a861f74270be819aa2a07db8d0563a7cc4e",
@@ -115427,7 +115691,6 @@
"f5f60f03501908962446ee02fc27d98694dd157d",
"328a3228c29fba244b9db2055adc1ec4f7a87e6b",
"2b125c0545afa089b617f2558e686ea723bdc06e",
"2b8cb4f87580683eb4d760e4ed210813d667f0a2",
"df94c5b4d47eb3cc404d88b33a8fda237eaf4720",
"3bb41feb82838ab9a35601ac666de5aacfd17a58",
"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3",
@@ -115435,41 +115698,6 @@
"49d8493008fa715ca0c94d99817a5439d6f2c796",
"8a22710e09ce75f39625894366cafe503ed1942d",
"8c031bf9908fd0142fdd10a9cdd79389f8a3f2fc",
"9a6e4c88533a9eaa4d55cdc040e47443e0226eb2",
"3b8cf5ffa41b252eb67f8824f94608fa4005d6dd",
"ee58768bdfc602c9b14942ce5481e97dd24e7c83",
"24f67bdea115a2c847c8813a262502ee1607b7df",
"bfaac75f101c135e32e2aaf541de6b1be4c8c62d",
"a3aa751eb6bdaaf8a827ba9e03576a6f1ab0f547",
"7bf549b8be9e48ab0cdc9b0fdadd49a5131f97eb",
"4ed31ec6b0b175bb109c0eb5fd3d193da823339f",
"aa2f50a77dfb4823da96ba99309085a3c6278515",
"973e10840db683cf3faf61bd443090786b3a9f04",
"e5b2922ca137051059e4269b236d07a22c07bc84",
"5aff2d9b6efc723bc395b0f96f0adfa83cc54a49",
"32760893ce06dbe3930627755ba065cc3d8ec6ca",
"fe0254cbfc11405b79e7c86c7769bd6322b04995",
"dcc3a67732aa01c4f2ee8d1ad886444a4dbafe06",
"7ed7c55e0359737ac5e68d38cb6903f9e5d7c2b6",
"02843c4253bbd29aba535b0aa3bd9a85034ecde4",
"11f9e62cf299f72184835b7b2a70a16333fc0d88",
"891e9a547772fe0c6c19b610baf8bc4ea7fcb785",
"c5839f5cb98a7a8947065c3ed2f14f5f42e334a1",
"3b7f1493b27e212830f989f26ca76c02049f09ca",
"7ba40ffa17e500ed9fed041f3424bd81d9c907be",
"70033828182fffc7ed106e5373a8b89dda76faa5",
"e21545723fe8374e91342617604f1b3d703094f1",
"5fe04842d04a489720f0f4bb0e46948199406f49",
"3525be8887f79b5929e017b42380a79edfee542d",
"5bef3d628ce59cc02a66e6e4ae0da48f60e78f7f",
"44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"286b2e1fb21cc79851da01666db6c0b0e88f25e3",
"45bedc4cbdeac66c7df59e9e599195c778d86a92",
"bc39fbd5b9a8d2287ac5d0a42e639fc4d3c2f9d4",
"9451a1a09d8f75944dbd6f91193fc360f1de80ac",
"03bbb386cf530e804363acdfc1d13e64cf28af2e",
"55315b20fecb4441a07ee4bc5dc7153f396e0a2e",
"5ea7c2b824672e914525d1d5c419d71b84a426a2",
"e4fc7560b69d062cb2da5b1ffbe11cd1ca03cc37",
"bc32bc0e8902946663998f56aea52be597d9e361",
"014881a959e045e00f4db8f52955200865d40280",
@@ -115479,12 +115707,12 @@
"04990aa1c3a3fc7294ec884b81deaa89832df614",
"e3c8986bb1d44269c4587b04f1ca27a70b0aaa2e",
"1983b4fb398e3dd9668d424c666c5a0b3f1e2b69",
"f119506eaa3b4b70b9aa0dd83761e8cbe043d042",
"78cd7f847e77fd8cd51a647efb2725ba93f4c471",
"1a77fd83e337f906aecab27a1604db064cf10074",
"93407ea10d2f30ab96a314d8eca44fe160aea734",
"94d44d7f9529ec1642ba3771ed3c5f756d5bc872",
"65f031caa8148a5493afe42c41f4929deab26b4e",
"f119506eaa3b4b70b9aa0dd83761e8cbe043d042",
"78cd7f847e77fd8cd51a647efb2725ba93f4c471",
"93d36de4d5d376c521a9ca99722f659e60d177f2",
"b22847ad1d8c5ee0fff41b3bd31aab6cbf8778ea",
"e35eda0cc2c11da92c0a6c222f314d84e623b29e",

View File

@@ -54,6 +54,7 @@ nav:
- RetroBat: platforms/retrobat.md
- RetroDECK: platforms/retrodeck.md
- RetroPie: platforms/retropie.md
- RomM: platforms/romm.md
- Systems:
- Overview: systems/index.md
- 3DO Company: systems/3do-company.md

View File

@@ -93,4 +93,5 @@ Full libretro docs: `https://docs.libretro.com/library/<core>/`
| RetroBat | md5 | MD5 check via JSON config | `batocera-systems.json` |
| EmuDeck | md5 | MD5 whitelist per system | `checkBIOS.sh` |
| Recalbox | md5 | multi-hash comma-separated | `es_bios.xml` + `Bios.cpp` |
| RomM | md5 | MD5 | `known_bios_files.json` |
| RetroDECK | md5 | MD5 per file via component manifests | `api_data_processing.sh` |
| RomM | md5 | size + any hash (MD5/SHA1/CRC32) | `firmware.py` |

View File

@@ -86,6 +86,17 @@ platforms:
# Each component/<name>/component_manifest.json declares BIOS requirements
# Scraper enumerates top-level dirs via GitHub API, fetches each manifest directly
romm:
config: romm.yml
status: active
logo: "https://avatars.githubusercontent.com/u/168586850"
scraper: romm
source_url: "https://raw.githubusercontent.com/rommapp/romm/master/backend/models/fixtures/known_bios_files.json"
source_format: json
hash_type: sha1
schedule: monthly
inherits_from: emulatorjs # cores inherited from emulatorjs.yml
retropie:
config: retropie.yml
status: archived # Last release: v4.8 (March 2022) - no update in 4 years
@@ -93,10 +104,3 @@ platforms:
scraper: null
cores: all_libretro
schedule: null
romm:
config: romm.yml
status: active
logo: "https://raw.githubusercontent.com/rommapp/romm/master/.github/resources/isotipo.png"
scraper: romm
schedule: monthly

57
platforms/emulatorjs.yml Normal file
View File

@@ -0,0 +1,57 @@
# EmulatorJS base config (not a standalone platform).
# Provides the core list for platforms that use EmulatorJS as their emulation engine.
# Source: emulatorjs/emulatorjs data/src/consts.js + emulatorjs/build cores.json
# RomM mapping: rommapp/romm frontend/src/utils/index.ts (_EJS_CORES_MAP)
platform: EmulatorJS
version: "4.2.3"
homepage: "https://emulatorjs.org"
source: "https://github.com/emulatorjs/emulatorjs"
cores:
- a5200
- beetle_vb
- cap32
- crocods
- desmume
- desmume2015
- dosbox_pure
- fbalpha2012_cps1
- fbalpha2012_cps2
- fbneo
- fceumm
- freeintv
- fuse
- gambatte
- gearcoleco
- genesis_plus_gx
- handy
- mame2003
- mame2003_plus
- mednafen_ngp
- mednafen_pce
- mednafen_pcfx
- mednafen_psx_hw
- mednafen_wswan
- melonds
- mgba
- mupen64plus_next
- nestopia
- opera
- parallel_n64
- pcsx_rearmed
- picodrive
- ppsspp
- prboom
- prosystem
- puae
- same_cdi
- smsplus
- snes9x
- stella2014
- vice_x128
- vice_x64
- vice_x64sc
- vice_xpet
- vice_xplus4
- vice_xvic
- virtualjaguar
- yabause

File diff suppressed because it is too large Load Diff

View File

@@ -26,7 +26,7 @@ import urllib.error
from pathlib import Path
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from common import load_database, load_platform_config
from common import list_registered_platforms, load_database, load_platform_config
try:
import yaml
@@ -381,10 +381,9 @@ def main():
db = load_database(args.db)
if args.all:
platforms = []
for f in Path(args.platforms_dir).glob("*.yml"):
if not f.name.startswith("_"):
platforms.append(f.stem)
platforms = list_registered_platforms(
args.platforms_dir, include_archived=True,
)
elif args.platform:
platforms = [args.platform]
else:

View File

@@ -167,6 +167,31 @@ def load_data_dir_registry(platforms_dir: str = "platforms") -> dict:
return data.get("data_directories", {})
def list_registered_platforms(
platforms_dir: str = "platforms",
include_archived: bool = False,
) -> list[str]:
"""List platforms registered in _registry.yml.
Only registered platforms generate packs and appear in CI.
Unregistered YAMLs (e.g., emulatorjs.yml) are base configs for inheritance.
"""
registry_path = os.path.join(platforms_dir, "_registry.yml")
if not os.path.exists(registry_path):
return []
with open(registry_path) as f:
registry = yaml.safe_load(f) or {}
platforms = []
for name, meta in sorted(registry.get("platforms", {}).items()):
status = meta.get("status", "active")
if status == "archived" and not include_archived:
continue
config_path = os.path.join(platforms_dir, meta.get("config", f"{name}.yml"))
if os.path.exists(config_path):
platforms.append(name)
return platforms
def resolve_local_file(
file_entry: dict,
db: dict,

View File

@@ -25,7 +25,7 @@ except ImportError:
sys.exit(1)
sys.path.insert(0, os.path.dirname(__file__))
from common import load_database, load_emulator_profiles, load_platform_config
from common import list_registered_platforms, load_database, load_emulator_profiles, load_platform_config
DEFAULT_EMULATORS_DIR = "emulators"
DEFAULT_PLATFORMS_DIR = "platforms"
@@ -36,10 +36,8 @@ def load_platform_files(platforms_dir: str) -> tuple[dict[str, set[str]], dict[s
"""Load all platform configs and collect declared filenames + data_directories per system."""
declared = {}
platform_data_dirs = {}
for f in sorted(Path(platforms_dir).glob("*.yml")):
if f.name.startswith("_"):
continue
config = load_platform_config(f.stem, platforms_dir)
for platform_name in list_registered_platforms(platforms_dir, include_archived=True):
config = load_platform_config(platform_name, platforms_dir)
for sys_id, system in config.get("systems", {}).items():
for fe in system.get("files", []):
name = fe.get("name", "")

View File

@@ -18,7 +18,7 @@ from datetime import datetime, timezone
from pathlib import Path
sys.path.insert(0, os.path.dirname(__file__))
from common import compute_hashes
from common import compute_hashes, list_registered_platforms
CACHE_DIR = ".cache"
CACHE_FILE = os.path.join(CACHE_DIR, "db_cache.json")
@@ -353,9 +353,8 @@ def _collect_all_aliases(files: dict) -> dict:
if platforms_dir.is_dir():
try:
import yaml
for config_file in platforms_dir.glob("*.yml"):
if config_file.name.startswith("_"):
continue
for platform_name in list_registered_platforms(str(platforms_dir), include_archived=True):
config_file = platforms_dir / f"{platform_name}.yml"
try:
with open(config_file) as f:
config = yaml.safe_load(f) or {}

View File

@@ -27,9 +27,10 @@ sys.path.insert(0, os.path.dirname(__file__))
from common import (
_build_validation_index, build_zip_contents_index, check_file_validation,
check_inside_zip, compute_hashes, fetch_large_file, filter_files_by_mode,
group_identical_platforms, list_emulator_profiles, list_system_ids,
load_database, load_data_dir_registry, load_emulator_profiles,
load_platform_config, md5_composite, resolve_local_file,
group_identical_platforms, list_emulator_profiles, list_registered_platforms,
list_system_ids, load_database, load_data_dir_registry,
load_emulator_profiles, load_platform_config, md5_composite,
resolve_local_file,
)
from deterministic_zip import rebuild_zip_deterministic
@@ -820,13 +821,8 @@ def generate_system_pack(
def list_platforms(platforms_dir: str) -> list[str]:
"""List available platform names from YAML files."""
platforms = []
for f in sorted(Path(platforms_dir).glob("*.yml")):
if f.name.startswith("_"):
continue
platforms.append(f.stem)
return platforms
"""List available platform names from registry."""
return list_registered_platforms(platforms_dir, include_archived=True)
def main():
@@ -901,9 +897,9 @@ def main():
# Platform mode (existing)
if args.all:
sys.path.insert(0, os.path.dirname(__file__))
from list_platforms import list_platforms as _list_active
platforms = _list_active(include_archived=args.include_archived)
platforms = list_registered_platforms(
args.platforms_dir, include_archived=args.include_archived,
)
elif args.platform:
platforms = [args.platform]
else:

View File

@@ -18,7 +18,7 @@ from datetime import datetime, timezone
from pathlib import Path
sys.path.insert(0, os.path.dirname(__file__))
from common import load_database, load_platform_config
from common import list_registered_platforms, load_database, load_platform_config
from verify import verify_platform
def compute_coverage(platform_name: str, platforms_dir: str, db: dict) -> dict:
@@ -80,10 +80,7 @@ def generate_readme(db: dict, platforms_dir: str) -> str:
size_mb = total_size / (1024 * 1024)
ts = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
platform_names = sorted(
p.stem for p in Path(platforms_dir).glob("*.yml")
if not p.name.startswith("_")
)
platform_names = list_registered_platforms(platforms_dir, include_archived=True)
coverages = {}
for name in platform_names:
@@ -135,6 +132,7 @@ def generate_readme(db: dict, platforms_dir: str) -> str:
"RetroPie": "`BIOS/`",
"RetroDECK": "`~/retrodeck/bios/`",
"EmuDeck": "`Emulation/bios/`",
"RomM": "`bios/{platform_slug}/`",
}
for name, cov in sorted(coverages.items(), key=lambda x: x[1]["platform"]):

View File

@@ -26,7 +26,7 @@ except ImportError:
sys.exit(1)
sys.path.insert(0, os.path.dirname(__file__))
from common import load_database, load_emulator_profiles, load_platform_config
from common import list_registered_platforms, load_database, load_emulator_profiles, load_platform_config
from generate_readme import compute_coverage
from verify import verify_platform
@@ -2044,10 +2044,7 @@ def main():
registry = (yaml.safe_load(f) or {}).get("platforms", {})
# Load platform configs
platform_names = [
p.stem for p in Path(args.platforms_dir).glob("*.yml")
if not p.name.startswith("_")
]
platform_names = list_registered_platforms(args.platforms_dir, include_archived=True)
print("Computing platform coverage...")
coverages = {}

View File

@@ -17,45 +17,16 @@ import argparse
import json
import os
import sys
from pathlib import Path
try:
import yaml
except ImportError:
yaml = None
sys.path.insert(0, os.path.dirname(__file__))
from common import list_registered_platforms
PLATFORMS_DIR = "platforms"
def _load_registry(platforms_dir: str = PLATFORMS_DIR) -> dict:
"""Load _registry.yml if available."""
registry_path = Path(platforms_dir) / "_registry.yml"
if yaml and registry_path.exists():
with open(registry_path) as f:
return yaml.safe_load(f) or {}
return {}
def list_platforms(include_archived: bool = False) -> list[str]:
"""List platform config files, filtering by status from _registry.yml."""
platforms_dir = Path(PLATFORMS_DIR)
if not platforms_dir.is_dir():
return []
registry = _load_registry(str(platforms_dir))
registry_platforms = registry.get("platforms", {})
platforms = []
for f in sorted(platforms_dir.glob("*.yml")):
if f.name.startswith("_"):
continue
name = f.stem
status = registry_platforms.get(name, {}).get("status", "active")
if status == "archived" and not include_archived:
continue
platforms.append(name)
return platforms
return list_registered_platforms(PLATFORMS_DIR, include_archived=include_archived)
def main():

View File

@@ -2,49 +2,117 @@
"""Scraper for RomM BIOS requirements.
Source: https://github.com/rommapp/romm
Format: known_bios_files.json in backend/models/fixtures/
Hash: MD5 (primary), SHA1, CRC
Format: JSON fixture mapping "slug:filename" to {size, crc, md5, sha1}
Hash: SHA1 primary (all four hashes available per entry)
RomM stores BIOS requirements in known_bios_files.json,
it contains bios files for all emulators, and is formatted as a mapping of "<console>:<bios_file>": { "size": "<size_in_bytes>", "crc": "<crc>", "md5": "<md5>", "sha1": "<sha1>" }.
RomM stores known BIOS hashes in known_bios_files.json. At startup, the
fixture is loaded into Redis. When scanning or uploading firmware, RomM
verifies: file size must match AND at least one hash (MD5, SHA1, CRC32)
must match (firmware.py:verify_file_hashes).
RomM hashes files as opaque blobs (no ZIP content inspection). Arcade
BIOS ZIPs are matched by their container hash, which varies by MAME
version and ZIP tool. This is a known limitation (rommapp/romm#2888).
Folder structure: {library}/bios/{platform_slug}/{filename} (flat).
Slugs are IGDB-style platform identifiers.
"""
from __future__ import annotations
import json
import sys
from pathlib import Path
try:
from .base_scraper import BaseScraper, BiosRequirement, fetch_github_latest_version
except ImportError:
sys.path.insert(0, str(Path(__file__).parent.parent))
from scraper.base_scraper import BaseScraper, BiosRequirement, fetch_github_latest_version
from base_scraper import BaseScraper, BiosRequirement, fetch_github_latest_version
PLATFORM_NAME = "RomM"
PLATFORM_NAME = "romm"
BIOS_REPO = "rommapp/romm"
BIOS_BRANCH = "master"
BIOS_FILE = "backend/models/fixtures/known_bios_files.json"
BIOS_URL = (
f"https://raw.githubusercontent.com/{BIOS_REPO}/refs/heads/{BIOS_BRANCH}/{BIOS_FILE}"
SOURCE_URL = (
"https://raw.githubusercontent.com/rommapp/romm/"
"master/backend/models/fixtures/known_bios_files.json"
)
class Scraper(BaseScraper):
"""RomM BIOS scraper from known_bios_files.json."""
GITHUB_REPO = "rommapp/romm"
def __init__(self, url = BIOS_URL):
super().__init__(url)
def fetch_metadata(self) -> dict:
version = fetch_github_latest_version(BIOS_REPO) or "unknown"
return {
"name": PLATFORM_NAME,
"version": version,
"homepage": "https://romm.app",
"source": self.url,
# IGDB slug -> retrobios system ID
SLUG_MAP: dict[str, str] = {
"3do": "3do",
"64dd": "nintendo-64dd",
"acpc": "amstrad-cpc",
"amiga": "commodore-amiga",
"arcade": "arcade",
"atari-st": "atari-st",
"atari5200": "atari-5200",
"atari7800": "atari-7800",
"atari8bit": "atari-400-800",
"colecovision": "coleco-colecovision",
"dc": "sega-dreamcast",
"doom": "doom",
"enterprise": "enterprise-64-128",
"fairchild-channel-f": "fairchild-channel-f",
"fds": "nintendo-fds",
"gamegear": "sega-game-gear",
"gb": "nintendo-gb",
"gba": "nintendo-gba",
"gbc": "nintendo-gbc",
"genesis": "sega-mega-drive",
"intellivision": "mattel-intellivision",
"j2me": "j2me",
"lynx": "atari-lynx",
"mac": "apple-macintosh-ii",
"msx": "microsoft-msx",
"msx2": "microsoft-msx",
"nds": "nintendo-ds",
"neo-geo-cd": "snk-neogeo-cd",
"nes": "nintendo-nes",
"ngc": "nintendo-gamecube",
"odyssey-2-slash-videopac-g7000": "magnavox-odyssey2",
"pc-9800-series": "nec-pc-98",
"pc-fx": "nec-pc-fx",
"pokemon-mini": "nintendo-pokemon-mini",
"ps2": "sony-playstation-2",
"psp": "sony-psp",
"psx": "sony-playstation",
"satellaview": "nintendo-satellaview",
"saturn": "sega-saturn",
"scummvm": "scummvm",
"segacd": "sega-mega-cd",
"sharp-x68000": "sharp-x68000",
"sms": "sega-master-system",
"snes": "nintendo-snes",
"sufami-turbo": "nintendo-sufami-turbo",
"super-gb": "nintendo-sgb",
"tg16": "nec-pc-engine",
"tvc": "videoton-tvc",
"videopac-g7400": "philips-videopac",
"wolfenstein": "wolfenstein-3d",
"x1": "sharp-x1",
"xbox": "microsoft-xbox",
"zxs": "sinclair-zx-spectrum",
}
class Scraper(BaseScraper):
"""Scraper for RomM known_bios_files.json."""
def __init__(self, url: str = SOURCE_URL):
super().__init__(url=url)
self._parsed: dict | None = None
def _parse_json(self) -> dict:
if self._parsed is not None:
return self._parsed
raw = self._fetch_raw()
try:
self._parsed = json.loads(raw)
except json.JSONDecodeError as e:
raise ValueError(f"Failed to parse JSON: {e}") from e
return self._parsed
def fetch_requirements(self) -> list[BiosRequirement]:
"""Parse known_bios_files.json and return BIOS requirements."""
raw = self._fetch_raw()
@@ -52,43 +120,61 @@ class Scraper(BaseScraper):
if not self.validate_format(raw):
raise ValueError("known_bios_files.json format validation failed")
roms = json.loads(raw)
data = self._parse_json()
requirements = []
for key, info in roms.items():
for key, entry in data.items():
if ":" not in key:
continue
system, name = key.split(":", 1)
igdb_slug, filename = key.split(":", 1)
system = SLUG_MAP.get(igdb_slug)
if not system:
print(f"Warning: unmapped IGDB slug '{igdb_slug}'", file=sys.stderr)
continue
sha1 = (entry.get("sha1") or "").strip() or None
md5 = (entry.get("md5") or "").strip() or None
crc32 = (entry.get("crc") or "").strip() or None
size = int(entry["size"]) if entry.get("size") else None
requirements.append(BiosRequirement(
name=name,
name=filename,
system=system,
size=int(info.get("size", 0)),
crc32=info.get("crc"),
md5=info.get("md5"),
sha1=info.get("sha1"),
sha1=sha1,
md5=md5,
crc32=crc32,
size=size,
destination=f"{igdb_slug}/{filename}",
required=True,
))
return requirements
def validate_format(self, raw_data: str) -> bool:
"""Validate that the raw data is a JSON object with the expected structure."""
"""Validate that raw_data is a JSON dict with slug:filename keys."""
try:
data = json.loads(raw_data)
if not isinstance(data, dict):
return False
for key, value in data.items():
if ":" not in key or not isinstance(value, dict):
return False
if not all(k in value for k in ("size", "crc", "md5", "sha1")):
return False
return True
except json.JSONDecodeError:
except (json.JSONDecodeError, TypeError):
return False
if not isinstance(data, dict):
return False
for key in list(data.keys())[:5]:
if ":" not in key:
return False
_, entry = key.split(":", 1), data[key]
if not isinstance(data[key], dict):
return False
if "md5" not in data[key] and "sha1" not in data[key]:
return False
return len(data) > 0
def generate_platform_yaml(self) -> dict:
"""Generate platform YAML content for RomM."""
"""Generate a platform YAML config dict from scraped data."""
requirements = self.fetch_requirements()
metadata = self.fetch_metadata()
systems: dict[str, dict] = {}
for req in requirements:
@@ -97,34 +183,42 @@ class Scraper(BaseScraper):
entry: dict = {
"name": req.name,
"destination": f"{req.system}/{req.name}",
"size": req.size,
"crc": req.crc32,
"md5": req.md5,
"sha1": req.sha1,
"destination": req.destination,
"required": req.required,
}
if req.sha1:
entry["sha1"] = req.sha1
if req.md5:
entry["md5"] = req.md5
if req.crc32:
entry["crc32"] = req.crc32
if req.size:
entry["size"] = req.size
systems[req.system]["files"].append(entry)
version = ""
tag = fetch_github_latest_version(GITHUB_REPO)
if tag:
version = tag
return {
"platform": metadata["name"],
"version": metadata["version"],
"homepage": metadata["homepage"],
"source": metadata["source"],
"inherits": "emulatorjs",
"platform": "RomM",
"version": version,
"homepage": "https://romm.app",
"source": SOURCE_URL,
"base_destination": "bios",
"hash_type": "md5",
"hash_type": "sha1",
"verification_mode": "md5",
"cores": [],
"systems": systems,
}
def main():
try:
from .base_scraper import scraper_cli
except ImportError:
sys.path.insert(0, str(Path(__file__).parent.parent))
from scraper.base_scraper import scraper_cli
from scripts.scraper.base_scraper import scraper_cli
scraper_cli(Scraper, "Scrape RomM BIOS requirements")
if __name__ == "__main__":
main()

View File

@@ -25,7 +25,7 @@ import sys
from pathlib import Path
sys.path.insert(0, os.path.dirname(__file__))
from common import compute_hashes, load_database as _load_database
from common import compute_hashes, list_registered_platforms, load_database as _load_database
try:
import yaml
@@ -107,9 +107,8 @@ def load_platform_hashes(platforms_dir: str) -> dict:
if not os.path.isdir(platforms_dir) or yaml is None:
return known
for f in Path(platforms_dir).glob("*.yml"):
if f.name.startswith("_"):
continue
for name in list_registered_platforms(platforms_dir, include_archived=True):
f = Path(platforms_dir) / f"{name}.yml"
with open(f) as fh:
try:
config = yaml.safe_load(fh) or {}