diff --git a/config/retrodeck/reference_lists/bios_checklist.cfg b/config/retrodeck/reference_lists/bios_checklist.cfg deleted file mode 100644 index 09d55096..00000000 --- a/config/retrodeck/reference_lists/bios_checklist.cfg +++ /dev/null @@ -1,155 +0,0 @@ -panafz1.bin^^f47264dd47fe30f73ab3c010015c155b^3DO^Panasonic FZ-1 -panafz10.bin^^51f2f43ae2f3508a14d9f56597e2d3ce^3DO^Panasonic FZ-10 -panafz10-norsa.bin^^1477bda80dc33731a65468c1f5bcbee9^3DO^Panasonic FZ-10 [RSA Patch] -panafz10e-anvil.bin^^a48e6746bd7edec0f40cff078f0bb19f^3DO^Panasonic FZ-10-E [Anvil] -panafz10e-anvil-norsa.bin^^cf11bbb5a16d7af9875cca9de9a15e09^3DO^Panasonic FZ-10-E [Anvil RSA Patch] -panafz1j.bin^^a496cfdded3da562759be3561317b605^3DO^Panasonic FZ-1J -panafz1j-norsa.bin^^f6c71de7470d16abe4f71b1444883dc8^3DO^Panasonic FZ-1J [RSA Patch] -goldstar.bin^^8639fd5e549bd6238cfee79e3e749114^3DO^Goldstar GDO-101M -sanyotry.bin^^35fa1a1ebaaeea286dc5cd15487c13ea^3DO^Sanyo IMP-21J TRY -3do_arcade_saot.bin^^8970fc987ab89a7f64da9f8a8c4333ff^3DO^Shootout At Old Tucson -panafz1-kanji.bin^^b8dc97f778a6245c58e064b0312e8281^3DO^Panasonic FZ-1 Kanji ROM (Font ROM: required for some Japanese games. Optional otherwise.) -panafz10ja-anvil-kanji.bin^^428577250f43edc902ea239c50d2240d^3DO^Panasonic FZ-10JA Kanji ROM (Font ROM: required for some Japanese games. Optional otherwise.) -panafz1j-kanji.bin^^c23fb5d5e6bb1c240d02cf968972be37^3DO^Panasonic FZ-1J Kanji ROM (Font ROM: required for some Japanese games. Optional otherwise.) -neogeo.zip^^00dad01abdbf8ea9e79ad2fe11bdb182^Arcade (FinalBurn Neo)^Neo Geo BIOS (Required for this system) -neocdz.zip^^c733b4b7bd30fa849874d96c591c8639^Arcade (FinalBurn Neo)^Neo Geo CDZ BIOS (Required for this system) -decocass.zip^^b7e1189b341bf6a8e270017c096d21b0^Arcade (FinalBurn Neo)^DECO Cassette System BIOS (Required for this system) -isgsm.zip^^4a56d56e2219c5e2b006b66a4263c01c^Arcade (FinalBurn Neo)^ISG Selection Master Type 2006 System BIOS (Required for this system) -midssio.zip^^5904b0de768d1d506e766aa7e18994c1^Arcade (FinalBurn Neo)^Midway SSIO Sound Board Internal ROM (Required for this system) -nmk004.zip^^bfacf1a68792d5348f93cf724d2f1dda^Arcade (FinalBurn Neo)^NMK004 Internal ROM (Required for this system) -pgm.zip^^87cc944eef4c671aa2629a8ba48a08e0^Arcade (FinalBurn Neo)^PGM System BIOS (Required for this system) -skns.zip^^3f956c4e7008804cb47cbde49bd5b908^Arcade (FinalBurn Neo)^Super Kaneko Nova System BIOS (Required for this system) -ym2608.zip^^79ae0d2bb1901b7e606b6dc339b79a97^Arcade (FinalBurn Neo)^YM2608 Internal ROM (Required for this system) -cchip.zip^^df6f8a3d83c028a5cb9f2f2be60773f3^Arcade (FinalBurn Neo)^C-Chip Internal ROM (Required for this system) -bubsys.zip^^f81298afd68a1a24a49a1a2d9f087964^Arcade (FinalBurn Neo)^Bubble System BIOS (Required for this system) -namcoc69.zip^^Unknown^Arcade (FinalBurn Neo)^Namco C69 BIOS (Required for this system) -namcoc70.zip^^Unknown^Arcade (FinalBurn Neo)^Namco C70 BIOS (Required for this system) -namcoc75.zip^^Unknown^Arcade (FinalBurn Neo)^Namco C75 BIOS (Required for this system) -coleco.zip^^Unknown^Arcade (FinalBurn Neo)^ColecoVision System BIOS (Required for this system) -fdsbios.zip^^Unknown^Arcade (FinalBurn Neo)^FDS System BIOS (Required for this system) -msx.zip^^Unknown^Arcade (FinalBurn Neo)^MSX1 System BIOS (Required for this system) -ngp.zip^^Unknown^Arcade (FinalBurn Neo)^NeoGeo Pocket BIOS (Required for this system) -spectrum.zip^^Unknown^Arcade (FinalBurn Neo)^ZX Spectrum BIOS (Required for this system) -spec128.zip^^Unknown^Arcade (FinalBurn Neo)^ZX Spectrum 128 BIOS (Required for this system) -spec1282a.zip^^Unknown^Arcade (FinalBurn Neo)^ZX Spectrum 128 +2a BIOS (Required for this system) -channelf.zip^^Unknown^Arcade (FinalBurn Neo)^Fairchild Channel F BIOS (Required for this system) -5200.rom^^281f20ea4320404ec820fb7ec0693b38^Atari 8-bit computer systems and 5200^5200 BIOS (Required) -ATARIXL.ROM^^06daac977823773a3eea3422fd26a703^Atari 8-bit computer systems and 5200^Atari XL/XE OS BIOS (Required for these systems) -ATARIBAS.ROM^^0bac0c6a50104045d902df4503a4c30b^Atari 8-bit computer systems and 5200^BASIC interpreter BIOS (Required for these systems) -ATARIOSA.ROM^^eb1f32f5d9f382db1bbfb8d7f9cb343a^Atari 8-bit computer systems and 5200^Atari 400/800 PAL BIOS (Required for these systems) -ATARIOSB.ROM^^a3e8d617c95d08031fe1b20d541434b2^Atari 8-bit computer systems and 5200^BIOS for Atari 400/800 NTSC (Required for these systems) -tos.img^^c1c57ce48e8ee4135885cee9e63a68a2^Atari ST/STE/TT/Falcon^TOS Boot Image (Required) -lynxboot.img^^fcd403db69f54290b51035d82f835e7b^Atari Lynx^Lynx Boot Image (Required) -o2rom.bin^^562d5ebf9e030a40d6fabfc2f33139fd^Magnavox Odyssey2 / Phillips Videopac+^Odyssey2 BIOS - G7000 model (Required) -c52.bin^^f1071cdb0b6b10dde94d3bc8a6146387^Magnavox Odyssey2 / Phillips Videopac+^Videopac+ French BIOS - G7000 model (Required for Videopac games) -g7400.bin^^c500ff71236068e0dc0d0603d265ae76^Magnavox Odyssey2 / Phillips Videopac+^Videopac+ European BIOS - G7400 model (Required for Videopac games) -jopac.bin^^279008e4a0db2dc5f1c048853b033828^Magnavox Odyssey2 / Phillips Videopac+^Videopac+ French BIOS - G7400 model (Required for Videopac games) -exec.bin^^62e761035cb657903761800f4437b8af^Mattel Intellivision^Executive ROM (Required) -grom.bin^^0cd5946c6473e42e8e4c2137785e427f^Mattel Intellivision^Graphics ROM (Required) -MSX.ROM^^364a1a579fe5cb8dba54519bcfcdac0d^Microsoft MSX^MSX BIOS (Required) -MSX2.ROM^^ec3a01c91f24fbddcbcab0ad301bc9ef^Microsoft MSX^MSX2 BIOS (Required) -MSX2EXT.ROM^^2183c2aff17cf4297bdb496de78c2e8a^Microsoft MSX^MSX2 ExtROM (Required) -MSX2P.ROM^^847cc025ffae665487940ff2639540e5^Microsoft MSX^MSX2+ BIOS (Required) -MSX2PEXT.ROM^^7c8243c71d8f143b2531f01afa6a05dc^Microsoft MSX^MSX2+ ExtROM (Required) -DISK.ROM^^80dcd1ad1a4cf65d64b7ba10504e8190^Microsoft MSX^DiskROM/BDOS -FMPAC.ROM^^6f69cc8b5ed761b03afd78000dfb0e19^Microsoft MSX^FMPAC BIOS -MSXDOS2.ROM^^6418d091cd6907bbcf940324339e43bb^Microsoft MSX^MSX-DOS 2 -PAINTER.ROM^^403cdea1cbd2bb24fae506941f8f655e^Microsoft MSX^Yamaha Painter -KANJI.ROM^^febe8782b466d7c3b16de6d104826b34^Microsoft MSX^Kanji Font -mcpx_1.0.bin^^d49c52a4102f6df7bcf8d0617ac475ed^Microsoft XBOX^Used by XEMU emulator -Complex.bin^^Unknown^Microsoft XBOX^Used by XEMU emulator -Complex_4627v1.03.bin^^Unknown^Microsoft XBOX^Used by XEMU emulator -Complex_4627.bin^^Unknown^Microsoft XBOX^Used by XEMU emulator -syscard3.pce^^38179df8f4ac870017db21ebcbf53114^NEC PC Engine / CD^Super CD-ROM2 System V3.xx (Required) -syscard2.pce^^3cdd6614a918616bfc41c862e889dd79^NEC PC Engine / CD^CD-ROM System V2.xx -syscard1.pce^^2b7ccb3d86baa18f6402c176f3065082^NEC PC Engine / CD^CD-ROM System V1.xx -gexpress.pce^^6d2cb14fc3e1f65ceb135633d1694122^NEC PC Engine / CD^Game Express CD Card -font.bmp^np2kai/^7da1e5b7c482d4108d22a5b09631d967^NEC PC-98 (Neko Project II Kai)^Needed to display text (Required) -FONT.ROM^np2kai/^2af6179d7de4893ea0b705c00e9a98d6^NEC PC-98 (Neko Project II Kai)^Alt font file (Required if normal font file is missing) -bios.rom^np2kai/^e246140dec5124c5e404869a84caefce^NEC PC-98 (Neko Project II Kai)^BIOS file (Required) -itf.rom^np2kai/^e9fc3890963b12cf15d0a2eea5815b72^NEC PC-98 (Neko Project II Kai)^BIOS file (Required) -sound.rom^np2kai/^caf90f22197aed6f14c471c21e64658d^NEC PC-98 (Neko Project II Kai)^BIOS file (Required) -bios9821.rom^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^Optional BIOS file -d8000.rom^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^Optional BIOS file -2608_BD.WAV^np2kai/^d94546e70f17fd899be8df3544ab6cbb^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample -2608_SD.WAV^np2kai/^d71004351c8bbfdad53b18222c061d49^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample -2608_TOP.WAV^np2kai/^593cff6597ab9380d822b8f824fd2c28^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample -2608_HH.WAV^np2kai/^08c54a0c1f774a5538a848a6665a34b4^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample -2608_TOM.WAV^np2kai/^96a4ead13f364734f79b0c58af2f0e1f^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample -2608_RIM.WAV^np2kai/^465ea0768b27da404aec45dfc501404b^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample -n88.rom^^4f984e04a99d56c4cfe36115415d6eb8^NEC PC-8000 / PC-8800 series (QUASI88)^BIOS File (Required) -n88n.rom^^2ff07b8769367321128e03924af668a0^NEC PC-8000 / PC-8800 series (QUASI88)^Required for PC-8000 series emulation. (N BASIC mode) -disk.rom^^793f86784e5608352a5d7f03f03e0858^NEC PC-8000 / PC-8800 series (QUASI88)^Required for loading disk images -n88knj1.rom^^d81c6d5d7ad1a4bbbd6ae22a01257603^NEC PC-8000 / PC-8800 series (QUASI88)^Required for viewing kanji -n88_0.rom^^d675a2ca186c6efcd6277b835de4c7e5^NEC PC-8000 / PC-8800 series (QUASI88)^Required for viewing kanji -n88_1.rom^^e844534dfe5744b381444dbe61ef1b66^NEC PC-8000 / PC-8800 series (QUASI88)^Optional BIOS file -n88_2.rom^^6548fa45061274dee1ea8ae1e9e93910^NEC PC-8000 / PC-8800 series (QUASI88)^Optional BIOS file -n88_3.rom^^fc4b76a402ba501e6ba6de4b3e8b4273^NEC PC-8000 / PC-8800 series (QUASI88)^Optional BIOS file -neocd_f.rom^^8834880c33164ccbe6476b559f3e37de^Neo Geo CD^Front Loader BIOS (At least 1 required) -neocd_sf.rom^^043d76d5f0ef836500700c34faef774d^Neo Geo CD^Front Loader BIOS (SMKDAN 0.7b DEC 2010) (At least 1 required) -neocd_t.rom^^de3cf45d227ad44645b22aa83b49f450^Neo Geo CD^Top Loader BIOS (At least 1 required) -neocd_st.rom^^f6325a33c6d63ea4b9162a3fa8c32727^Neo Geo CD^Top Loader BIOS (SMKDAN 0.7b DEC 2010) (At least 1 required) -neocd_z.rom^^11526d58d4c524daef7d5d677dc6b004^Neo Geo CD^CDZ BIOS (At least 1 required) -neocd_sz.rom^^971ee8a36fb72da57aed01758f0a37f5^Neo Geo CD^CDZ BIOS (SMKDAN 0.7b DEC 2010) (At least 1 required) -front-sp1.bin^^5c2366f25ff92d71788468ca492ebeca^Neo Geo CD^Front Loader BIOS (MAME) (At least 1 required) -top-sp1.bin^^122aee210324c72e8a11116e6ef9c0d0^Neo Geo CD^Top Loader BIOS (MAME) (At least 1 required) -neocd.bin^^f39572af7584cb5b3f70ae8cc848aba2^Neo Geo CD^CDZ BIOS (MAME) (At least 1 required) -uni-bioscd.rom^^08ca8b2dba6662e8024f9e789711c6fc^Neo Geo CD^Universe BIOS CD 3.3 -gb_bios.bin^^32fbbd84168d3482956eb3c5051637f5^Game Boy^Optional BIOS file (used to display the Nintendo logo at boot) -gbc_bios.bin^^dbfce9db9deaa2567f6a84fde55f9680^Game Boy Color^Optional BIOS file (used to display the Nintendo logo at boot) -gba_bios.bin^^a860e8c0b6d573d191e4ec7db1b1e4f6^Game Boy Advance^Optional BIOS file (used to display the Nintendo logo at boot) -aes_keys.txt^citra/sysdata/^Unknown^Nintendo 3DS^Decryption keys used by Citra emulator -bios7.bin^^df692a80a5b1bc90728bc3dfc76cd948^Nintendo DS^Used by MelonDS emulator (Required, see Wiki) -bios9.bin^^a392174eb3e572fed6447e956bde4b25^Nintendo DS^Used by MelonDS emulator (Required, see Wiki) -firmware.bin^^e45033d9b0fa6b0de071292bba7c9d13^Nintendo DS^Used by MelonDS emulator (Required, see Wiki) -disksys.rom^^ca30b50f880eb660a320674ed365ef7a^Nintendo NES / Famicom^Family Computer Disk System BIOS - Required for Family Computer Disk System emulation -bios.min^^1e4fb124a3a886865acb574f388c803d^Nintendo Pokemon Mini^Pokémon Mini BIOS - Optional -prod.keys^switch/keys/^Unknown^Nintendo Switch^A file for Switch emulation in Ryujinx (Required) -title.keys^switch/keys/^Unknown^Nintendo Switch^A file for Switch emulation in Ryujinx (Required) -pico8^pico-8/^Unknown^PICO-8^The PICO-8 executable (Required) -pico8.dat^pico-8/^Unknown^PICO-8^A PICO-8 system file (Required) -pico8_dyn^pico-8/^Unknown^PICO-8^A PICO-8 system file (Required) -bios_CD_E.bin^^e66fa1dc5820d254611fdcdba0662372^Sega CD^MegaCD EU BIOS (At least 1 required) -bios_CD_U.bin^^2efd74e3232ff260e371b99f84024f7f^Sega CD^SegaCD US BIOS (At least 1 required) -bios_CD_J.bin^^278a9397d192149e84e820ac621a8edd^Sega CD^MegaCD JP BIOS (At least 1 required) -dc_boot.bin^dc/^e10c53c2f8b90bab96ead2d368858623^Sega Dreamcast^Dreamcast BIOS (Required) -naomi.zip^dc/^0ea6d3650ce4a7608a589e5df21a1f2f^Sega Dreamcast^Naomi BIOS -naomi2.zip^dc/^9b85e0de6ef359e5006c9b79a5a266b0^Sega Dreamcast^Naomi BIOS -naomi_boot.bin^dc/^96cb91c4a0bedd86e5a6965cfe6c0148^Sega Dreamcast^Naomi BIOS -hod2bios.zip^dc/^629bb0552463ba116ccf23d9a468a9f0^Sega Dreamcast^Naomi The House of the Dead 2 BIOS -f355dlx.zip^dc/^4b5bb177cbd760477598f85531dbe7fd^Sega Dreamcast^Naomi Ferrari F355 Challenge Deluxe BIOS -f355bios.zip^dc/^882f2c1cf8ec030955c48fe6aa6929ea^Sega Dreamcast^Naomi Ferrari F355 Challenge Twin/Deluxe BIOS -airlbios.zip^dc/^09ef4b8dea6cd8db2de1c13d510a6a87^Sega Dreamcast^Naomi Airline Pilots Deluxe BIOS -awbios.zip^dc/^b2f122e091da223beb824efafc3d6a36^Sega Dreamcast^Naomi Atomiswave BIOS -bios.sms^^840481177270d5642a14ca71ee72844c^Sega Master System / GameGear^Master System BIOS -BIOS.col^^2c66f5911e5b42b8ebe113403548eee7^Sega Master System / GameGear^Colecovision BIOS -sega_101.bin^^85ec9ca47d8f6807718151cbcca8b964^Sega Saturn^Saturn JP BIOS (At least 1 required) -mpr-17933.bin^^3240872c70984b6cbfda1586cab68dbe^Sega Saturn^Saturn US.mdEU BIOS (At least 1 required) -mpr-18811-mx.ic1^^255113ba943c92a54facd25a10fd780c^Sega Saturn^The King of Fighters 95 ROM Cartridge (Required for this game) -mpr-19367-mx.ic1^^1cd19988d1d72a3e7caa0b73234c96b4^Sega Saturn^Ultraman: Hikari no Kyojin Densetsu ROM Cartridge (Required for this game) -iplrom.dat^keropi/^7fd4caabac1d9169e289f0f7bbf71d8e^Sharp X68000^X68000 BIOS (Required) -cgrom.dat^keropi/^cb0a5cfcf7247a7eab74bb2716260269^Sharp X68000^Font file (Required) -iplrom30.dat^keropi/^f373003710ab4322642f527f567e020a^Sharp X68000^X68000 BIOS 2 -iplromco.dat^keropi/^cc78d4f4900f622bd6de1aed7f52592f^Sharp X68000^X68000 BIOS 3 -iplromxv.dat^keropi/^0617321daa182c3f3d6f41fd02fb3275^Sharp X68000^X68000 BIOS 4 -psxonpsp660.bin^^c53ca5908936d412331790f4426c6c33^Sony PSX^PS1 BIOS from PSP (At least 1 required) -scph5500.bin^^8dd7d5296a650fac7319bce665a6a53c^Sony PSX^PS1 JP BIOS (At least 1 required) -scph5501.bin^^490f666e1afb15b7362b406ed1cea246^Sony PSX^PS1 US BIOS (At least 1 required) -scph5502.bin^^32736f17079d0b2b7024407c39bd3050^Sony PSX^PS1 EU BIOS (At least 1 required) -scph7001.bin^^1e68c231d0896b7eadcad1d7d8e76129^Sony PSX^PS1 BIOS (At least 1 required) -scph7002.bin^^b9d9a0286c33dc6b7237bb13cd46fdee^Sony PSX^PS1 BIOS (At least 1 required) -scph7003.bin^^490f666e1afb15b7362b406ed1cea246^Sony PSX^PS1 BIOS (At least 1 required) -scph7502.bin^^b9d9a0286c33dc6b7237bb13cd46fdee^Sony PSX^PS1 BIOS (At least 1 required) -scph9002(7502).bin^^b9d9a0286c33dc6b7237bb13cd46fdee^Sony PSX^PS1 BIOS (At least 1 required) -ps1_rom.bin^^81bbe60ba7a3d1cea1d48c14cbcc647b^Sony PSX^PS1 BIOS (At least 1 required) -ps2-0200a-20040614.bin^^d333558cc14561c1fdc334c75d5f37b7^Sony PS2^PS2 US BIOS (At least 1 required) -ps2-0200e-20040614.bin^^dc752f160044f2ed5fc1f4964db2a095^Sony PS2^PS2 EU BIOS (At least 1 required) -ps2-0200j-20040614.bin^^0eee5d1c779aa50e94edd168b4ebf42e^Sony PS2^PS2 JP BIOS (At least 1 required) -128p-0.rom^fuse/^a249565f03b98d004ee7f019570069cd^ZX Spectrum^Pentagon 128K/512K/1024 ROM (Required) -128p-1.rom^fuse/^6e09e5d3c4aef166601669feaaadc01c^ZX Spectrum^Pentagon 128K/512K/1024 ROM (Required) -trdos.rom^fuse/^0da70a5d2a0e733398e005b96b7e4ba6^ZX Spectrum^Pentagon 128K/512K/1024 ROM (Required) -gluck.rom^fuse/^d5869034604dbfd2c1d54170e874fd0a^ZX Spectrum^Pentagon 512K/1024 ROM (Required) -256s-0.rom^fuse/^b9fda5b6a747ff037365b0e2d8c4379a^ZX Spectrum^Scorpion 256K ROM (Required) -256s-1.rom^fuse/^643861ad34831b255bf2eb64e8b6ecb8^ZX Spectrum^Scorpion 256K ROM (Required) -256s-2.rom^fuse/^d8ad507b1c915a9acfe0d73957082926^ZX Spectrum^Scorpion 256K ROM (Required) -256s-3.rom^fuse/^ce0723f9bc02f4948c15d3b3230ae831^ZX Spectrum^Scorpion 256K ROM (Required) \ No newline at end of file diff --git a/functions/configurator_functions.sh b/functions/configurator_functions.sh index db7f9c4d..6bba4ab6 100644 --- a/functions/configurator_functions.sh +++ b/functions/configurator_functions.sh @@ -1,34 +1,5 @@ #!/bin/bash -check_bios_files() { - # This function validates all the BIOS files listed in the $bios_checklist and adds the results to an array called $bios_checked_list which can be used elsewhere - # There is a "basic" and "expert" mode which outputs different levels of data - # USAGE: check_bios_files "mode" - - - while IFS="^" read -r bios_file bios_subdir bios_hash bios_system bios_desc || [[ -n "$bios_file" ]]; - do - if [[ ! $bios_file == "#"* ]] && [[ ! -z "$bios_file" ]]; then - bios_file_found="No" - bios_hash_matched="No" - if [[ -f "$bios_folder/$bios_subdir$bios_file" ]]; then - bios_file_found="Yes" - if [[ $bios_hash == "Unknown" ]]; then - bios_hash_matched="Unknown" - elif [[ $(md5sum "$bios_folder/$bios_subdir$bios_file" | awk '{ print $1 }') == "$bios_hash" ]]; then - bios_hash_matched="Yes" - fi - fi - if [[ "$1" == "basic" ]]; then - bios_checked_list=("${bios_checked_list[@]}" "$bios_file" "$bios_system" "$bios_file_found" "$bios_hash_matched" "$bios_desc") - echo "$bios_file"^"$bios_system"^"$bios_file_found"^"$bios_hash_matched"^"$bios_desc" # Godot data transfer - else - bios_checked_list=("${bios_checked_list[@]}" "$bios_file" "$bios_system" "$bios_file_found" "$bios_hash_matched" "$bios_desc" "$bios_subdir" "$bios_hash") - echo "$bios_file"^"$bios_system"^"$bios_file_found"^"$bios_hash_matched"^"$bios_desc"^"$bios_subdir"^"$bios_hash" # Godot data transfer - fi - fi - done < $bios_checklist -} find_empty_rom_folders() { # This function will build an array of all the system subfolders in $roms_folder which are either empty or contain only systeminfo.txt for easy removal diff --git a/functions/global.sh b/functions/global.sh index 27637ea6..d31fabd6 100644 --- a/functions/global.sh +++ b/functions/global.sh @@ -36,7 +36,7 @@ rd_conf_backup="/var/config/retrodeck/retrodeck.bak" config="/app/retrodeck/config" # folder with all the default emulator configs rd_defaults="$config/retrodeck/retrodeck.cfg" # A default RetroDECK config file rd_update_patch="/var/config/retrodeck/rd_update.patch" # A static location for the temporary patch file used during retrodeck.cfg updates -bios_checklist="$config/retrodeck/reference_lists/bios_checklist.cfg" # A config file listing BIOS file information that can be verified +bios_checklist="$config/retrodeck/reference_lists/bios.json" # A config file listing BIOS file information that can be verified input_validation="$config/retrodeck/reference_lists/input_validation.cfg" # A config file listing valid CLI inputs finit_options_list="$config/retrodeck/reference_lists/finit_options_list.cfg" # A config file listing available optional installs during finit splashscreen_dir="/var/config/ES-DE/resources/graphics/extra_splashes" # The default location of extra splash screens diff --git a/tools/configurator.sh b/tools/configurator.sh index a2a098a4..48d05ce9 100755 --- a/tools/configurator.sh +++ b/tools/configurator.sh @@ -70,7 +70,6 @@ source /app/libexec/global.sh # - Troubleshooting # - Backup: RetroDECK Userdata # - Check & Verify: BIOS -# - Check & Verify: BIOS - Expert Mode # - Check & Verify: Multi-file structure # - RetroDECK: Reset # - Reset Emulator or Engine @@ -153,6 +152,7 @@ configurator_welcome_dialog() { "RetroDECK: Troubleshooting" ) log i "Configurator: opening \"$choice\" menu" + # Call the troubleshooting dialog to return to the previous menu after checking BIOS files configurator_retrodeck_troubleshooting_dialog ;; @@ -986,7 +986,6 @@ configurator_retrodeck_troubleshooting_dialog() { --column="Choice" --column="Action" \ "Backup: RetroDECK Userdata" "Compress and backup important RetroDECK user data folders" \ "Check & Verify: BIOS Files" "Show information about common BIOS files" \ - "Check & Verify: BIOS Files - Expert Mode" "Show information about common BIOS files, with additional information useful for troubleshooting" \ "Check & Verify: Multi-file structure" "Verify the proper structure of multi-file or multi-disc games" \ "RetroDECK: Reset" "Reset specific parts or all of RetroDECK" ) @@ -1015,10 +1014,6 @@ configurator_retrodeck_troubleshooting_dialog() { configurator_check_bios_files ;; - "Check & Verify: BIOS Files - Expert Mode" ) - configurator_check_bios_files_expert_mode - ;; - "Check & Verify: Multi-file structure" ) log i "Configurator: opening \"$choice\" menu" configurator_check_multifile_game_structure @@ -1037,40 +1032,92 @@ configurator_retrodeck_troubleshooting_dialog() { esac } +# This function checks and verifies BIOS files for RetroDECK. +# It reads a list of required BIOS files from a JSON file, checks if they exist in the specified folder, +# verifies their MD5 hashes if provided, and displays the results in a Zenity dialog. configurator_check_bios_files() { + configurator_generic_dialog "RetroDECK Configurator - Check & Verify: BIOS Files" "This check will look for BIOS files that RetroDECK has identified as working.\n\nNot all BIOS files are required for games to work, please check the BIOS description for more information on its purpose.\n\nBIOS files not known to this tool could still function.\n\nSome more advanced emulators such as Ryujinx will have additional methods to verify that the BIOS files are in working order." - bios_checked_list=() - check_bios_files "basic" + log d "Starting BIOS check in mode: $mode" - rd_zenity --list --title="RetroDECK Configurator Utility - Check & Verify: BIOS Files" --cancel-label="Back" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ - --column "BIOS File Name" \ - --column "System" \ - --column "BIOS File Found" \ - --column "BIOS Hash Match" \ - --column "BIOS File Description" \ - "${bios_checked_list[@]}" + ( - configurator_retrodeck_troubleshooting_dialog -} + # Read the BIOS checklist from bios.json using jq + total_bios=$(jq '.bios | length' $bios_checklist) + current_bios=0 -configurator_check_bios_files_expert_mode() { - configurator_generic_dialog "RetroDECK Configurator - Check & Verify: BIOS Files - Expert Mode" "This check will look for BIOS files that RetroDECK has identified as working.\n\nNot all BIOS files are required for games to work, please check the BIOS description for more information on its purpose.\n\nBIOS files not known to this tool could still function.\n\nSome more advanced emulators such as Ryujinx will have additional methods to verify that the BIOS files are in working order." - bios_checked_list=() + log d "Total BIOS files to check: $total_bios" - check_bios_files "expert" + declare -a bios_checked_list - rd_zenity --list --title="RetroDECK Configurator Utility - Check & Verify: BIOS Files" --cancel-label="Back" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ - --column "BIOS File Name" \ - --column "System" \ - --column "BIOS File Found" \ - --column "BIOS Hash Match" \ - --column "BIOS File Description" \ - --column "BIOS File Subdirectory" \ - --column "BIOS File Hash" \ - "${bios_checked_list[@]}" + while read -r entry; do + # Extract the key (element name) and the fields + bios_file=$(echo "$entry" | jq -r '.key // "Unknown"') + bios_hash=$(echo "$entry" | jq -r '.value.md5 | if type=="array" then join(", ") else . end // "Unknown"') + bios_systems=$(echo "$entry" | jq -r '.value.system | if type=="array" then join(", ") else . end // "Unknown"') + bios_desc=$(echo "$entry" | jq -r '.value.description // "No description provided"') + required=$(echo "$entry" | jq -r '.value.required // "No"') # TODO: add me to zenity + bios_subdir=$(echo "$entry" | jq -r ".value.subdir // \"$bios_folder\"") + + log d "Checking entry $bios_entry" + + # Skip if bios_file is empty + if [[ ! -z "$bios_file" ]]; then + bios_file_found="No" + bios_hash_matched="No" + + # Check if the BIOS file exists + if [[ -f "$bios_folder/$bios_subdir$bios_file" ]]; then + bios_file_found="Yes" + + # Check if the hash matches + if [[ $bios_hash == "Unknown" ]]; then + bios_hash_matched="Unknown" + elif [[ $(md5sum "$bios_folder/$bios_subdir$bios_file" | awk '{ print $1 }') == "$bios_hash" ]]; then + bios_hash_matched="Yes" + fi + fi + + log d "BIOS file found: $bios_file_found, Hash matched: $bios_hash_matched" + + fi + + log d "Adding BIOS entry: \"$bios_file $bios_systems $bios_file_found $bios_hash_matched $bios_desc $bios_subdir $bios_hash\" to the bios_checked_list" + + if [[ $bios_checked_list != "" ]]; then + bios_checked_list=("${bios_checked_list[@]}"^"$bios_file^$bios_systems^$bios_file_found^$bios_hash_matched^$bios_desc^$bios_subdir^$bios_hash") + else + bios_checked_list=("$bios_file^$bios_systems^$bios_file_found^$bios_hash_matched^$bios_subdir^$bios_hash^$bios_desc") + fi + #echo "$bios_file"^"$bios_systems"^"$bios_file_found"^"$bios_hash_matched"^"$bios_subdir"^"$bios_hash"^"$bios_desc" # Godot data transfer #TODO: this is breaking the zenity dialog, since we don't release Godot in this version I disabled it. + + current_bios=$((current_bios + 1)) + echo "$((current_bios * 100 / total_bios))" + + done < <(jq -c '.bios | to_entries[]' "$bios_checklist") + + log d "Finished checking BIOS files" + + IFS="^" # Set the Internal Field Separator to ^ to split the bios_checked_list array + rd_zenity --list --title="RetroDECK Configurator Utility - Check & Verify: BIOS Files" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column "BIOS File Name" \ + --column "Systems" \ + --column "Found?" \ + --column "Hash Matches?" \ + --column "Expected Path" \ + --column "MD5" \ + --column "Description" \ + $(printf '%s\n' "${bios_checked_list[@]}") + IFS=$' \t\n' # Reset the Internal Field Separator + + ) | + rd_zenity --progress --no-cancel --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - BIOS Check in Progress" \ + --text="RetroDECK is checking your BIOS files, please wait..." \ + --width=400 --height=100 configurator_retrodeck_troubleshooting_dialog }