diff --git a/install/targets/knulli.json b/install/targets/knulli.json index 533167e6b..89a0b6bda 100644 --- a/install/targets/knulli.json +++ b/install/targets/knulli.json @@ -321,26 +321,43 @@ }, "atm7039": { "cores": [ + "2048", "81", "a5200", "abuse", "arduous", "atari800", "bennugd", + "bk", "bluemsx", + "bsnes_cplusplus98", + "bsnes_mercury_accuracy", + "bsnes_mercury_balanced", + "bsnes_mercury_performance", "bstone", "cannonball", "cap32", "cdogs", "cgenius", + "chailove", + "crocods", "devilutionx", + "dinothawr", + "dosbox_core", "dosbox_pure", "dosbox_staging", + "dosbox_svn", + "dosbox_svn_ce", "easyrpg", + "ecwolf", "emuscv", "fake08", "fallout1-ce", "fallout2-ce", + "fbalpha2012", + "fbalpha2012_cps1", + "fbalpha2012_cps2", + "fbalpha2012_neogeo", "fbneo", "fceumm", "flycast", @@ -349,37 +366,56 @@ "freeintv", "fuse", "gambatte", + "gearboy", "gearsystem", + "genesis_plus_gx", "genesisplusgx", "geolith", + "gme", + "gpsp", "gsplus", "gw", "handy", "hatari", "hcl", + "higan_sfc", + "higan_sfc_balanced", "holani", "hurrican", "ioquake3", "lowresnx", "lutro", + "mame", "mame0139", "mame078plus", + "mame2000", + "mame2003", + "mame2003_plus", + "mednafen_gba", "mednafen_lynx", "mednafen_ngp", + "mednafen_pce", + "mednafen_pce_fast", "mednafen_psx", + "mednafen_snes", "mednafen_supergrafx", + "mednafen_vb", "mednafen_wswan", + "mesen", "mgba", "minivmac", "moonlight", "mrboom", + "mu", "mupen64plus", "mupen64plus-next", + "nekop2", "neocd", "nestopia", "np2kai", "nxengine", "o2em", + "oberon", "openbor", "openbor4432", "openbor6412", @@ -392,6 +428,7 @@ "pcfx", "pcsx_rearmed", "picodrive", + "pocketcdg", "pokemini", "potator", "ppsspp", @@ -402,22 +439,34 @@ "px68k", "pygame", "quasi88", + "quicknes", + "reminiscence", + "remotejoy", "samcoupe", + "sameboy", "sameduck", "scummvm", "sdlpop", "smsplus", "snes9x", + "snes9x2002", + "snes9x2005", + "snes9x2005_plus", + "snes9x2010", "snes9x_next", "solarus", "sonic2013", "soniccd", + "squirreljme", "stella", + "stella2014", "superbroswar", "swanstation", "taradino", + "test", "tgbdual", "theodore", + "thepowdertoy", "tic80", "tyrian", "tyrquake", @@ -425,15 +474,21 @@ "uzem", "vb", "vba-m", + "vba_next", + "vbam", "vecx", + "vemulator", "vice", "vice_x128", "vice_x64", "vice_x64sc", + "vice_xcbm2", + "vice_xcbm5x0", "vice_xpet", "vice_xplus4", "vice_xscpu64", "vice_xvic", + "virtualjaguar", "x1", "x128", "x16emu", @@ -620,6 +675,7 @@ }, "r16": { "cores": [ + "2048", "81", "a5200", "abuse", @@ -627,20 +683,36 @@ "arduous", "atari800", "bennugd", + "bk", "bluemsx", + "bsnes_cplusplus98", + "bsnes_mercury_accuracy", + "bsnes_mercury_balanced", + "bsnes_mercury_performance", "bstone", "cannonball", "cap32", "cdogs", "cgenius", + "chailove", + "crocods", "devilutionx", + "dinothawr", + "dosbox_core", "dosbox_pure", "dosbox_staging", + "dosbox_svn", + "dosbox_svn_ce", "easyrpg", + "ecwolf", "emuscv", "fake08", "fallout1-ce", "fallout2-ce", + "fbalpha2012", + "fbalpha2012_cps1", + "fbalpha2012_cps2", + "fbalpha2012_neogeo", "fbneo", "fceumm", "flycast", @@ -649,37 +721,56 @@ "freeintv", "fuse", "gambatte", + "gearboy", "gearsystem", + "genesis_plus_gx", "genesisplusgx", "geolith", + "gme", + "gpsp", "gsplus", "gw", "handy", "hatari", "hcl", + "higan_sfc", + "higan_sfc_balanced", "holani", "hurrican", "ioquake3", "lowresnx", "lutro", + "mame", "mame0139", "mame078plus", + "mame2000", + "mame2003", + "mame2003_plus", + "mednafen_gba", "mednafen_lynx", "mednafen_ngp", + "mednafen_pce", + "mednafen_pce_fast", "mednafen_psx", + "mednafen_snes", "mednafen_supergrafx", + "mednafen_vb", "mednafen_wswan", + "mesen", "mgba", "minivmac", "moonlight", "mrboom", + "mu", "mupen64plus", "mupen64plus-next", + "nekop2", "neocd", "nestopia", "np2kai", "nxengine", "o2em", + "oberon", "openbor", "openbor4432", "openbor6412", @@ -692,6 +783,7 @@ "pcfx", "pcsx_rearmed", "picodrive", + "pocketcdg", "pokemini", "potator", "ppsspp", @@ -702,22 +794,34 @@ "px68k", "pygame", "quasi88", + "quicknes", + "reminiscence", + "remotejoy", "samcoupe", + "sameboy", "sameduck", "scummvm", "sdlpop", "smsplus", "snes9x", + "snes9x2002", + "snes9x2005", + "snes9x2005_plus", + "snes9x2010", "snes9x_next", "solarus", "sonic2013", "soniccd", + "squirreljme", "stella", + "stella2014", "superbroswar", "swanstation", "taradino", + "test", "tgbdual", "theodore", + "thepowdertoy", "tic80", "tyrian", "tyrquake", @@ -725,15 +829,21 @@ "uzem", "vb", "vba-m", + "vba_next", + "vbam", "vecx", + "vemulator", "vice", "vice_x128", "vice_x64", "vice_x64sc", + "vice_xcbm2", + "vice_xcbm5x0", "vice_xpet", "vice_xplus4", "vice_xscpu64", "vice_xvic", + "virtualjaguar", "x1", "x128", "x16emu", @@ -752,6 +862,7 @@ }, "rk3128": { "cores": [ + "2048", "81", "a5200", "abuse", @@ -759,21 +870,37 @@ "arduous", "atari800", "bennugd", + "bk", "bluemsx", + "bsnes_cplusplus98", + "bsnes_mercury_accuracy", + "bsnes_mercury_balanced", + "bsnes_mercury_performance", "bstone", "cannonball", "cap32", "cdogs", "cgenius", + "chailove", + "crocods", "devilutionx", + "dinothawr", + "dosbox_core", "dosbox_pure", "dosbox_staging", + "dosbox_svn", + "dosbox_svn_ce", "easyrpg", + "ecwolf", "emuscv", "fake08", "fallout1-ce", "fallout2-ce", "fbalpha", + "fbalpha2012", + "fbalpha2012_cps1", + "fbalpha2012_cps2", + "fbalpha2012_neogeo", "fbneo", "fceumm", "flycast", @@ -782,37 +909,55 @@ "freeintv", "fuse", "gambatte", + "gearboy", "gearsystem", + "genesis_plus_gx", "genesisplusgx", "geolith", + "gme", "gpsp", "gsplus", "gw", "handy", "hatari", "hcl", + "higan_sfc", + "higan_sfc_balanced", "holani", "hurrican", "lightspark", "lowresnx", "lutro", + "mame", "mame0139", "mame078plus", + "mame2000", + "mame2003", + "mame2003_plus", + "mednafen_gba", "mednafen_lynx", "mednafen_ngp", + "mednafen_pce", + "mednafen_pce_fast", "mednafen_psx", + "mednafen_snes", "mednafen_supergrafx", + "mednafen_vb", "mednafen_wswan", + "mesen", "mgba", "minivmac", "mrboom", + "mu", "mupen64plus", "mupen64plus-next", + "nekop2", "neocd", "nestopia", "np2kai", "nxengine", "o2em", + "oberon", "openbor", "openbor4432", "openbor6412", @@ -825,6 +970,7 @@ "pcfx", "pcsx_rearmed", "picodrive", + "pocketcdg", "pokemini", "potator", "ppsspp", @@ -835,22 +981,34 @@ "px68k", "pygame", "quasi88", + "quicknes", + "reminiscence", + "remotejoy", "samcoupe", + "sameboy", "sameduck", "scummvm", "sdlpop", "smsplus", "snes9x", + "snes9x2002", + "snes9x2005", + "snes9x2005_plus", + "snes9x2010", "snes9x_next", "solarus", "sonic2013", "soniccd", + "squirreljme", "stella", + "stella2014", "superbroswar", "swanstation", "taradino", + "test", "tgbdual", "theodore", + "thepowdertoy", "tic80", "tyrian", "tyrquake", @@ -858,15 +1016,21 @@ "uzem", "vb", "vba-m", + "vba_next", + "vbam", "vecx", + "vemulator", "vice", "vice_x128", "vice_x64", "vice_x64sc", + "vice_xcbm2", + "vice_xcbm5x0", "vice_xpet", "vice_xplus4", "vice_xscpu64", "vice_xvic", + "virtualjaguar", "x1", "x128", "x16emu", diff --git a/platforms/knulli.yml b/platforms/knulli.yml index c6923e911..dd5b3eff2 100644 --- a/platforms/knulli.yml +++ b/platforms/knulli.yml @@ -4907,6 +4907,57 @@ dual_mode_cores: - scummvm - stella - yabasanshiro +installable_cores: +- "2048" +- bk +- bsnes_cplusplus98 +- bsnes_mercury_accuracy +- bsnes_mercury_balanced +- bsnes_mercury_performance +- chailove +- crocods +- dinothawr +- dosbox_core +- dosbox_svn +- dosbox_svn_ce +- ecwolf +- fbalpha2012 +- fbalpha2012_cps1 +- fbalpha2012_cps2 +- fbalpha2012_neogeo +- gearboy +- genesis_plus_gx +- gme +- higan_sfc +- higan_sfc_balanced +- mame2000 +- mame2003 +- mame2003_plus +- mednafen_gba +- mednafen_pce +- mednafen_pce_fast +- mednafen_snes +- mednafen_vb +- mu +- nekop2 +- oberon +- pocketcdg +- quicknes +- remotejoy +- sameboy +- snes9x2002 +- snes9x2005 +- snes9x2005_plus +- snes9x2010 +- squirreljme +- stella2014 +- test +- thepowdertoy +- vba_next +- vbam +- vemulator +- vice_xcbm2 +- vice_xcbm5x0 libretro_systems: "81": - zx81 diff --git a/platforms/targets/knulli.yml b/platforms/targets/knulli.yml index c98caaf92..d18ca9335 100644 --- a/platforms/targets/knulli.yml +++ b/platforms/targets/knulli.yml @@ -1,6 +1,6 @@ platform: knulli source: https://github.com/knulli-cfw/knulli-linux/tree/20260511 -scraped_at: '2026-11-06T02:19:00Z' +scraped_at: '2026-11-09T20:38:23Z' targets: a133: architecture: aarch64 @@ -472,6 +472,7 @@ targets: - zc210 images: - rg35xx + downloads: linux-armhf h700: architecture: aarch64 cores: @@ -787,6 +788,7 @@ targets: - zc210 images: - miyoo-a30 + downloads: linux-armhf rk3128: architecture: arm cores: @@ -930,6 +932,7 @@ targets: - powkiddy_a13 - ps5000 - ps7000 + downloads: linux-armhf rk3326: architecture: aarch64 cores: diff --git a/scripts/scraper/knulli_scraper.py b/scripts/scraper/knulli_scraper.py index f94f56704..0522ae53a 100644 --- a/scripts/scraper/knulli_scraper.py +++ b/scripts/scraper/knulli_scraper.py @@ -42,6 +42,7 @@ from .batocera_scraper import ( es_systems_by_system, es_systems_libretro_systems, extract_systems_dict, + installable_cores, platform_systems, records_run, requirements_from_systems, @@ -136,9 +137,11 @@ class Scraper(BaseScraper): # What runs is what at least one board builds, read by the targets # scraper from the Kconfig of KNULLI's tree and its batocera and # buildroot submodules (boards_build). - built = boards_build(BoardTargets().build_selection(self.tag), launchers) + selection = BoardTargets().build_selection(self.tag) + built = boards_build(selection, launchers) launchers = records_run(launchers, built) cores, standalone, dual = configgen_cores(defaults, es_systems, dropped, built) + installable = installable_cores(selection, cores) # Each system's own list (psx, es_systems.yml:640-653: libretro # pcsx_rearmed, swanstation, mednafen_psx, then duckstation and # duckstation-legacy). @@ -160,6 +163,8 @@ class Scraper(BaseScraper): result["standalone_cores"] = standalone if dual: result["dual_mode_cores"] = dual + if installable: + result["installable_cores"] = installable # configgen hands a libretro core /userdata/saves/, as # Batocera's does: the systems each core runs for are its save folders. result["libretro_systems"] = es_systems_libretro_systems(es_systems, dropped) diff --git a/tests/test_target_scrapers.py b/tests/test_target_scrapers.py index 23571eb7c..8c17df288 100644 --- a/tests/test_target_scrapers.py +++ b/tests/test_target_scrapers.py @@ -280,6 +280,7 @@ class CoreDownloaderReach(unittest.TestCase): self.assertLessEqual(x86, set(load_target_config("batocera", "x86_64", root) or ())) self.assertLessEqual(armhf, set(load_target_config("batocera", "rk3288", root) or ())) self.assertFalse(x86 <= set(load_target_config("batocera", "bcm2711", root) or ())) + self.assertLessEqual(armhf, set(load_target_config("knulli", "r16", root) or ())) def test_the_platform_names_what_its_boards_install(self): import yaml # noqa: PLC0415 @@ -287,7 +288,7 @@ class CoreDownloaderReach(unittest.TestCase): from common import load_target_config # noqa: PLC0415 root = str(REPO_ROOT / "platforms") - for platform in ("batocera",): + for platform in ("batocera", "knulli"): config = yaml.safe_load((REPO_ROOT / "platforms" / f"{platform}.yml").read_text()) targets = yaml.safe_load( (REPO_ROOT / "platforms" / "targets" / f"{platform}.yml").read_text())["targets"]