chore: merge region and coverage checks

This commit is contained in:
Abdessamad Derraz committed 2026-10-28 02:08:40 +01:00
commit a1d094c8b3
38 files changed
+5734 -526

No files matched your search

+3
View File
@@ -40,6 +40,7 @@ on:
- "scripts/provenance_report.py"
- "scripts/refresh_data_dirs.py"
- "scripts/region.py"
- "scripts/region_check.py"
- "scripts/release_record.py"
- "scripts/restore_large_files.py"
- "scripts/safeparse.py"
@@ -73,6 +74,8 @@ on:
- "release.json"
- "derivable.json"
- "measurements/**"
# The coverage table and the region results read the test game list.
- "tests/campaign/content.yml"
# The Starlight project: config, components, styles, lockfile. Its
# generated folders are gitignored and never trigger anything.
- "website/**"
+12 -7
View File
@@ -37,15 +37,17 @@ files:
- name: "scph5500.bin"
description: "SCPH-5500 (v3.0 09-09-96 J)"
region: [japan]
required: true
required: false
hle_fallback: true
size: 524288
sha1: "b05def971d8ec59f346f2d9ac21fb742e3eb6917"
md5: "8dd7d5296a650fac7319bce665a6a53c"
validation: [sha1]
mode: both
source_ref: "libretro.c:768-776"
source_ref: "libretro.c:768-776, 3425-3511"
aliases: ["SCPH5500.bin", "SCPH-5500.bin"]
evidence:
required: ["2026-10-27-55dd1e4943c4"]
- name: "scph5903.bin"
description: "SCPH-5903 (System ROM Version 2.2 12/04/95 J), Video CD daughterboard"
@@ -63,7 +65,7 @@ files:
- name: "scph5501.bin"
description: "SCPH-5501, 5503, 7003 (v3.0 11-18-96 A)"
region: [north-america, latin-america]
required: true
required: false
hle_fallback: true
size: 524288
sha1: "0555c6fae8906f3f09baf5988f00e55f88e9f30b"
@@ -71,7 +73,7 @@ files:
validation: [sha1]
mode: both
note: "Picked for REGION_NA: a SYSTEM.CNF serial whose third letter is U (SCUS, SLUS), a licence string naming America, and content whose region cannot be read while the region option stays on auto (libretro.c:2436-2438, 2279, 2330-2335, 3252-3266, 4517)."
source_ref: "libretro.c:787-805"
source_ref: "libretro.c:787-805, 3425-3511"
aliases:
- "SCPH5501.bin"
- "SCPH-5501.bin"
@@ -89,27 +91,30 @@ files:
- "SCPH-7003.BIN"
evidence:
aliases: ["2026-10-27-48269ae11777", "2026-10-27-ba941702c6c2", "2026-10-27-fc95254312c0", "2026-10-27-5a191f2b540b", "2026-10-27-12ba45024f8c", "2026-10-27-a7c1a301bdb0"]
hle_fallback: ["2026-10-27-f2ecd7ed71b5", "2026-10-27-ca1f49599ca1"]
hle_fallback: ["2026-10-27-6e97b657aca7", "2026-10-27-699ca140a270", "2026-10-27-ec1ab64f96d3", "2026-10-27-47c3dcceed98", "2026-10-27-607274136f7b", "2026-10-27-ae6d4db96e73"]
required: ["2026-10-27-13be0e68b799"]
# -- Region: Europe (REGION_EU) --
- name: "scph5502.bin"
description: "SCPH-5502, 5552 (v3.0 01-06-97 E)"
region: [europe, oceania]
required: true
required: false
hle_fallback: true
size: 524288
sha1: "f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"
md5: "32736f17079d0b2b7024407c39bd3050"
validation: [sha1]
mode: both
source_ref: "libretro.c:807-821"
source_ref: "libretro.c:807-821, 3425-3511"
aliases:
- "SCPH5502.bin"
- "SCPH-5502.bin"
- "scph5552.bin"
- "SCPH5552.bin"
- "SCPH-5552.bin"
evidence:
required: ["2026-10-27-33780d47efdf"]
# -- Override BIOS (region-free alternatives) --
+8 -1
View File
@@ -31,6 +31,9 @@ files:
size: 524288
validation: [size]
source_ref: "source frontend/libretro.c:1229 (bios[0]), :1181 (size check)"
evidence:
hle_fallback: ["2026-10-27-c535a6e54730"]
validation: ["2026-10-27-c535a6e54730", "2026-10-27-dd7185b51e4e"]
- name: "scph5501.bin"
description: "SCPH-5501 (v3.0 11-18-96 A)"
@@ -41,7 +44,8 @@ files:
validation: [size]
source_ref: "source frontend/libretro.c:1229 (bios[1]), :1181 (size check)"
evidence:
hle_fallback: ["2026-10-27-cfc47bbfcd02", "2026-10-27-b6d0ce4dfd7e"]
hle_fallback: ["2026-10-27-c535a6e54730"]
validation: ["2026-10-27-c535a6e54730", "2026-10-27-fb7efd4c1af6"]
- name: "scph7001.bin"
description: "SCPH-7001 (v4.1 12-16-97 A)"
@@ -51,6 +55,9 @@ files:
size: 524288
validation: [size]
source_ref: "source frontend/libretro.c:1229 (bios[2]), :1181 (size check)"
evidence:
hle_fallback: ["2026-10-27-c535a6e54730"]
validation: ["2026-10-27-c535a6e54730", "2026-10-27-5fccbc0c830b"]
# Dynamic scan fallback: after the 3 named files, find_any_bios() scans the
# system directory for any file starting with "scph" (case-insensitive) that
+7 -1
View File
@@ -49,7 +49,7 @@ files:
source_ref: "source frontend/libretro.c:3864-3867 (listed_bios[1])"
note: "Preferred US BIOS, searched first by exact filename. The US slot is the detector's default: a disc takes it for both America licence strings and for any licence that is neither \"Inc.\" (JP) nor \"Euro pe\" (EU), and content without a disc boots it too (libpcsxcore/misc.c:422-453, frontend/libretro.c:2167-2171)."
evidence:
hle_fallback: ["2026-10-27-e9eeba54945e"]
hle_fallback: ["2026-10-27-82bf6de00b8a", "2026-10-27-1d4eb1daebe5"]
# -- Region: Europe (PSX_REGION_EU = 2) --
@@ -84,6 +84,8 @@ files:
validation: [size]
source_ref: "source frontend/libretro.c:3864-3867 (listed_bios[4])"
note: "PSone slim model."
evidence:
hle_fallback: ["2026-10-27-82bf6de00b8a", "2026-10-27-1d4eb1daebe5"]
- name: "scph7001.bin"
description: "SCPH-7001 (v4.1 12-16-97 A)"
@@ -93,6 +95,8 @@ files:
hle_fallback: true
validation: [size]
source_ref: "source frontend/libretro.c:3864-3867 (listed_bios[5])"
evidence:
hle_fallback: ["2026-10-27-82bf6de00b8a", "2026-10-27-1d4eb1daebe5"]
- name: "scph1001.bin"
description: "SCPH-1001 (v2.2 12-04-95 A)"
@@ -103,6 +107,8 @@ files:
validation: [size]
source_ref: "source frontend/libretro.c:3864-3867 (listed_bios[6])"
note: "Original US model. Last in the explicit filename search list."
evidence:
hle_fallback: ["2026-10-27-82bf6de00b8a", "2026-10-27-1d4eb1daebe5"]
# -- Dynamic scan fallback --
# After exhausting listed_bios[], the core calls find_any_bios() which scans
+5 -1
View File
@@ -67,7 +67,7 @@ files:
source_ref: "source src/core/bios.cpp:50-51"
aliases: []
evidence:
hle_fallback: ["2026-10-27-dc8ff3969ec2"]
hle_fallback: ["2026-10-27-ba53cd101c61", "2026-10-27-f9363c9e87f6"]
- name: "scph5502.bin"
description: "SCPH-5502, 5552 (v3.0 01-06-97 E)"
@@ -90,6 +90,8 @@ files:
validation: [size, md5]
source_ref: "source src/core/bios.cpp:66-67"
aliases: []
evidence:
hle_fallback: ["2026-10-27-ba53cd101c61"]
- name: "ps1_rom.bin"
description: "PS3 embedded PS1 BIOS (v5.0 06-23-03 A)"
@@ -102,6 +104,8 @@ files:
note: "Accepts PS1 (512KB), PS2 (4MB), and PS3 (0x3E66F0) sizes. Only first 512KB used."
source_ref: "source src/core/bios.h:9, source src/core/bios.cpp:71, source src/core/bios.cpp:81-90"
aliases: []
evidence:
hle_fallback: ["2026-10-27-ba53cd101c61"]
- name: "ps1_rom.bin"
description: "PS3 embedded PS1 BIOS (v5.0 06-23-03 A), whole 0x3E66F0 image"
+78
View File
@@ -24,3 +24,81 @@
{"check":{"claim":"mednafen_psx_hw opens psxonpsp660.bin as psxonpsp660.bin","method":"psxonpsp660.bin staged as psxonpsp660.bin, against nothing there, 3600 frames of Bust-A-Move 2 - Arcade Edition (USA). The files the core opened are read from strace.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[920,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[930,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[940,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[950,"d51ab7783f8eeafc63a28f14ce39f8e2babeLine truncated
{"check":{"claim":"mednafen_psx_hw opens scph5903.bin as scph5903.bin","method":"scph5903.bin staged as scph5903.bin, against nothing there, 3600 frames of Bust-A-Move 2 - Arcade Edition (USA). The files the core opened are read from strace.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[920,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[930,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[940,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[950,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[960,Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_hw_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_hw_libretro.so","library_name":"Beetle PSX HW","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"d16c889c9f12bd3265edc3c9d4b0e6e24c1f244d1d8d475235f6a74e65e5b10b"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"34963a732f169b0c8ec7d387c742ec367169025e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"a3182429ef3e86a03d23ae76326cd4d7b33a12fd18d28ce60c7231fe8ba5fe6e"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[1.63,2.67,3.42],"load_before":[1.78,2.77,3.47],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-18a314355341","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":0,"frames":1800,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1"],"options":{},"presses":[],"repetitions":5,"warmup":600},"kind":"bench","record_version":3,"recorded_at":"2026-10-27T11:04:53+00:00","subject":"bench-mednafen-psx-hw-bust-a-move-2-arcade-edition-usa","supersedes":null,"timing":{"fps":{"max":665.8914452174591,"mean":661.8036805880163,"median":664.3413109199394,"min":649.7759485719646,"raw":[665.7064866444065,665.8914452174591,664.3413109199394,663.3032115863116,649.7759485719646],"stdev":6.806177582641735},"ms_per_frame":{"max":1.538992020553754,"mean":1.5111516665525009,"median":1.5052503638758532,"min":1.5017462788899947,"raw":[1.5021635211046993,1.5017462788899947,1.5052503638758532,1.507606148338204,1.538992020553754],"stdev":0.015745868182457167}},"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"14":3,"23":1,"28":1,"32":1174,"35":2,"36":1,"37":8,"40":1173,"44":1,"45":4,"46":1,"47":1,"51":1,"55":25,"56":2,"57":1,"59":1,"6":1,"69":1,"8":1},"files_opened":null,"files_probed_absent":null,"fps":665.7064866444065,"fps_nominal":59.94,"frames":1800,"input_pressed":0,"input_queries":76800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX HW","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Bust-A-Move 2 - Arcade Edition (USA).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10400000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10600000 succeeded"},{"frame":0,"level":"info","text":"Checking if required firmware is present..."},{"frame":0,"level":"info","text":"Firmware fLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"1c613dc4b4545f9c352edf834cc039e0939dc1bf","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.81,3.19,3.73],"load_before":[2.71,3.18,3.73],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-c6f6ea437aef","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T20:31:48+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-usa-full","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2374,"35":2,"36":1,"37":8,"40":2373,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":563.1687249315061,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_verLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"1c613dc4b4545f9c352edf834cc039e0939dc1bf","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.67,2.85,3.32],"load_before":[2.55,2.83,3.32],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-c69162e4f54c","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T20:42:14+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-usa-own","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2374,"35":2,"36":1,"37":8,"40":2373,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":563.3533868997672,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_versLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"1c613dc4b4545f9c352edf834cc039e0939dc1bf","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.71,2.8,3.26],"load_before":[2.69,2.8,3.26],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-07643bdf8d21","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T20:43:45+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-usa-others","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2534,"35":2,"36":1,"37":4,"40":2533,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":["scph5501.bin","SCPH5501.bin","SCPH5501.BIN","SCPH-5Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"1c613dc4b4545f9c352edf834cc039e0939dc1bf","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.75,2.76,3.18],"load_before":[2.73,2.76,3.18],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-15e2e9c5a9c0","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T20:45:46+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-usa-pack","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2374,"35":2,"36":1,"37":8,"40":2373,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":565.652845463327,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_versLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"1c613dc4b4545f9c352edf834cc039e0939dc1bf","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.64,2.71,3.09],"load_before":[2.49,2.68,3.08],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-c6d906be01c0","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T20:48:32+00:00","subject":"region-mednafen_psx-puzzle-bobble-2-japan-full","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2382,"35":2,"36":1,"37":8,"40":2381,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"}],"files_probed_absent":[],"fps":547.8670908063518,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Puzzle Bobble 2 (Japan).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10400000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10600000 succeeded"},{"frame":0,"level":"info","text":"Checking if required firmware is present..."},{"frame":0,"level":"info","text":"Firmware found: <system>/scph5500.bin"},{"frame":0,"level":"info","text":"Firmware SHA1: B05DEF971D8EC59F346F2D9AC21FB742E3EB6917"},{"frame":0,"level":"info","text":"Controller 1: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 2: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 3: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 4: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 5: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 6: PlayStation Controller"},{"frLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"1c613dc4b4545f9c352edf834cc039e0939dc1bf","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.6,2.7,3.05],"load_before":[2.62,2.7,3.06],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-b6bbe09ee2ff","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T20:49:59+00:00","subject":"region-mednafen_psx-puzzle-bobble-2-japan-own","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2382,"35":2,"36":1,"37":8,"40":2381,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"}],"files_probed_absent":[],"fps":544.0043298897393,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Puzzle Bobble 2 (Japan).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10400000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10600000 succeeded"},{"frame":0,"level":"info","text":"Checking if required firmware is present..."},{"frame":0,"level":"info","text":"Firmware found: <system>/scph5500.bin"},{"frame":0,"level":"info","text":"Firmware SHA1: B05DEF971D8EC59F346F2D9AC21FB742E3EB6917"},{"frame":0,"level":"info","text":"Controller 1: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 2: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 3: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 4: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 5: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 6: PlayStation Controller"},{"frame"Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"1c613dc4b4545f9c352edf834cc039e0939dc1bf","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.83,2.91,3.05],"load_before":[2.62,2.88,3.03],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-c159d1f82d08","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T20:55:25+00:00","subject":"region-mednafen_psx-puzzle-bobble-2-japan-others","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2546,"35":2,"36":1,"37":4,"40":2545,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":["scph5500.bin","SCPH5500.bin","SCPH5500.BIN","SCPH-5500.bin","SCPH-5500.BIN"],"fps":559.5136015707518,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Puzzle Bobble 2 (Japan).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10400000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10600000 succeeded"},{"frame":0,"level":"info","text":"Checking if required firmware is present..."},{"frame":0,"level":"info","text":"Searching for firmware checksum: B05DEF971D8EC59F346F2D9AC21FB742E3EB6917"},{"frame":0,"level":"info","text":"Firmware is missing: scph5500.bin"},{"frame":0,"level":"info","text":"Controller 1: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 2: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 3: PlayStation ControlLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"1c613dc4b4545f9c352edf834cc039e0939dc1bf","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.83,3.07,3.21],"load_before":[2.8,3.07,3.21],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-4ea2aca50119","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:12:52+00:00","subject":"region-mednafen_psx-puzzle-bobble-2-japan-pack","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2382,"35":2,"36":1,"37":8,"40":2381,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"}],"files_probed_absent":[],"fps":549.9125055809557,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Puzzle Bobble 2 (Japan).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10400000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10600000 succeeded"},{"frame":0,"level":"info","text":"Checking if required firmware is present..."},{"frame":0,"level":"info","text":"Firmware found: <system>/scph5500.bin"},{"frame":0,"level":"info","text":"Firmware SHA1: B05DEF971D8EC59F346F2D9AC21FB742E3EB6917"},{"frame":0,"level":"info","text":"Controller 1: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 2: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 3: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 4: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 5: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 6: PlayStation Controller"},{"fraLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"1c613dc4b4545f9c352edf834cc039e0939dc1bf","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.75,2.87,3.1],"load_before":[2.73,2.87,3.1],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-3b215d4930a8","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:16:06+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-europe-full","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2481,"35":2,"36":1,"37":8,"40":2480,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":497.84422525418665,"fps_nominal":50.0,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Bust-A-Move 2 - Arcade Edition (Europe).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10400000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10600000 succeeded"},{"frame":0,"level":"info","text":"Checking if required firmware is present..."},{"frame":0,"level":"info","text":"Firmware found: <system>/scph5502.bin"},{"frame":0,"level":"info","text":"Firmware SHA1: F6BC2D1F5EB6593DE7D089C425AC681D6FFFD3F0"},{"frame":0,"level":"info","text":"ControllLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":["load average reached 3.08 (threshold 3.0)"],"frontend":{"commit":"1c613dc4b4545f9c352edf834cc039e0939dc1bf","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.08,2.88,3.07],"load_before":[2.65,2.8,3.04],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-2dae6b0df109","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:18:06+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-europe-own","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2481,"35":2,"36":1,"37":8,"40":2480,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":430.7653096280971,"fps_nominal":50.0,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Bust-A-Move 2 - Arcade Edition (Europe).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10400000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10600000 succeeded"},{"frame":0,"level":"info","text":"Checking if required firmware is present..."},{"frame":0,"level":"info","text":"Firmware found: <system>/scph5502.bin"},{"frame":0,"level":"info","text":"Firmware SHA1: F6BC2D1F5EB6593DE7D089C425AC681D6FFFD3F0"},Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"1c613dc4b4545f9c352edf834cc039e0939dc1bf","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.6,2.87,3.0],"load_before":[2.57,2.87,3.0],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-ca91eca1e943","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:24:01+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-europe-others","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2472,"35":2,"36":1,"37":4,"40":2471,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":["scph5502.bin","SCPH5502.bin","SCPH5502.BIN","SCPH-5502.bin","SCPH-5502.BIN","scph5552.bin","SCPH5552.bin","SCPH5552.BIN","SCPH-5552.bin","SCPH-5552.BIN"],"fps":561.0980594128926,"fps_nominal":50.0,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Bust-A-Move 2 - Arcade Edition (Europe).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10400000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10600000 succeeded"Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"1c613dc4b4545f9c352edf834cc039e0939dc1bf","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.49,3.08,3.09],"load_before":[2.49,3.1,3.1],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-ebdc87c8f166","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:27:49+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-europe-pack","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2481,"35":2,"36":1,"37":8,"40":2480,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":500.3940226243306,"fps_nominal":50.0,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Bust-A-Move 2 - Arcade Edition (Europe).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10400000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10600000 succeeded"},{"frame":0,"level":"info","text":"Checking if required firmware is present..."},{"frame":0,"level":"info","text":"Firmware found: <system>/scph5502.bin"},{"frame":0,"level":"info","text":"Firmware SHA1: F6BC2D1F5EB6593DE7D089C425AC681D6FFFD3F0"},{"frame":0,"level":"info","text":"ControlleLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"38dd7401fdfbaa4ae98bda3ea901c80f24d78da7","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"6f18a8ff979e4a5b182d164aae3448818be0ec5ec596df3db636afe9bae44266"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.2,3.3,4.14],"load_before":[2.08,3.34,4.16],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-b0150a15670d","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"84a3435916d67c64d1d7a12305d7bea63dcf7f1467ba5cd775cd35c5887f9532"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T14:47:13+00:00","subject":"references-mednafen-psx-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2374,"35":2,"36":1,"37":8,"40":2373,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":502.55931499932353,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Bust-A-Move 2 - Arcade Edition (USA).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10400000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10600000 succeeded"},{"frame":0,"level":"info","text":"Checking if required firmware is present..."},{"frame":0,"level":"info","text":"Firmware found: <system>/scph5501.bin"},{"frame":0,"level":"info","text":"Firmware SHA1: 0555C6FAE8906F3F09BAF5988F00E55F88E9F30B"},{"frame":0,"level":"info","text":"Controller 1: PlayStation ControllerLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_hw_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_hw_libretro.so","library_name":"Beetle PSX HW","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"d16c889c9f12bd3265edc3c9d4b0e6e24c1f244d1d8d475235f6a74e65e5b10b"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"38dd7401fdfbaa4ae98bda3ea901c80f24d78da7","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"6f18a8ff979e4a5b182d164aae3448818be0ec5ec596df3db636afe9bae44266"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.31,3.27,4.11],"load_before":[2.2,3.3,4.14],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-ee69ad83c9f8","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"84a3435916d67c64d1d7a12305d7bea63dcf7f1467ba5cd775cd35c5887f9532"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T14:47:27+00:00","subject":"references-mednafen-psx-hw-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"14":3,"23":1,"28":1,"32":2374,"35":2,"36":1,"37":8,"40":2373,"44":1,"45":4,"46":1,"47":1,"51":1,"55":25,"56":2,"57":1,"59":1,"6":1,"69":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":496.74944439340885,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX HW","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Bust-A-Move 2 - Arcade Edition (USA).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10400000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10600000 succeeded"},{"frame":0,"level":"info","text":"Checking if required firmware is present..."},{"frame":0,"level":"info","text":"Firmware found: <system>/scph5501.bin"},{"frame":0,"level":"info","text":"Firmware SHA1: 0555C6FAE8906F3F09BAF5988F00E55F88E9F30B"},{"frame":0,"level":"info","tLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"a17406edaeb01d334d15f3a4e6fa4950c6d0b727","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"6aaa716a44ccf5e245f478c560f5718f6af3f0c8ded2e02b05f364adf81df9c8"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.42,2.78,3.48],"load_before":[2.37,2.79,3.5],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-605e4f82cb2f","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"f89e40011815ab1c50dac718cd53c5fcd675ccb67d2e611acff717e3cbaf2bbc"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T14:59:44+00:00","subject":"files-mednafen-psx-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2374,"35":2,"36":1,"37":8,"40":2373,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":564.4396967494708,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"BeetlLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"a17406edaeb01d334d15f3a4e6fa4950c6d0b727","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"6aaa716a44ccf5e245f478c560f5718f6af3f0c8ded2e02b05f364adf81df9c8"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.44,2.77,3.47],"load_before":[2.42,2.78,3.48],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-6e97b657aca7","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"f89e40011815ab1c50dac718cd53c5fcd675ccb67d2e611acff717e3cbaf2bbc"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T14:59:57+00:00","subject":"none-mednafen-psx-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2534,"35":2,"36":1,"37":4,"40":2533,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[],"files_probed_absent":["scph5501.bin","SCPH5501.bin","SCPH5501.BIN","SCPH-5501.bin","SCPH-5501.BIN","scph5503.bin","SCPH5503.bin","SCPH5503.BIN","SCPH-5503.bin","SCPH-5503.BIN","scph7003.bin","SCPH7003.bin","SCPH7003.BIN","SCPH-7003.bin","SCPH-7003.BIN"],"fps":590.7162220404773,"fps_nominal":59.94,"frames":3600,"input_pressed":Line truncated
{"check":{"claim":"mednafen_psx boots Bust-A-Move 2 - Arcade Edition (USA) with openbios.bin alone and refuses a wrong file under its name","method":"openbios.bin alone as openbios.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63aLine truncated
{"check":{"claim":"mednafen_psx boots Bust-A-Move 2 - Arcade Edition (USA) with ps1_rom.bin alone and refuses a wrong file under its name","method":"ps1_rom.bin alone as ps1_rom.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63a28fLine truncated
{"check":{"claim":"every copy of ps1_rom.bin boots Bust-A-Move 2 - Arcade Edition (USA) on mednafen_psx","method":"Each copy the collection holds staged alone as ps1_rom.bin, each run 2 times for 3600 frames. The boot oracle judges each copy.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[920,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[930,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[940,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[950,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[960Line truncated
{"check":{"claim":"mednafen_psx boots Bust-A-Move 2 - Arcade Edition (USA) with psxonpsp660.bin alone and refuses a wrong file under its name","method":"psxonpsp660.bin alone as psxonpsp660.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783fLine truncated
{"check":{"claim":"mednafen_psx boots Bust-A-Move 2 - Arcade Edition (USA) with scph5501.bin alone and refuses a wrong file under its name","method":"scph5501.bin alone as scph5501.bin, then 524288 zero bytes and its first 262144 bytes, then scph5500.bin, scph5502.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[20,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[30,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[40,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[50,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[60,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[70,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[80,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[90,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[100,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[110,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[120,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[130,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[140,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[150,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[160,"0d1ef963932a2aa7e5c79f7e634c9fc63b51ba95"],[170,"9cf22a982c36d29527b7b8594b8bb0677689750f"],[180,"c21e6940f9383070634d99c95e46643dce114806"],[190,"1dc65ead4f57e22b032b202c928a0e1ff47b33cc"],[200,"496c857184814fee7850658513f1618290293643"],[210,"fd759fc97d025b4c7c23f0614625b9751c4e0b96"],[220,"f0aa4c60e2ded472aae7cd79c381bcb02a181580"],[230,"b0201d6721d9159397dbfe069d00040de686e049"],[240,"4da2219693f6d34d6c18b7cd4b18df752d136dc0"],[250,"7e458c656e3966b16a11c18f193e95e95ad2aea4"],[260,"b23d7be1676a2a9ec8cf68f180382e0cb008d39e"],[270,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[280,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[290,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[300,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[310,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[320,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[330,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[340,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[350,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[360,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[370,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[380,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[390,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[400,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[410,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[420,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[430,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[440,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[450,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[460,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[470,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[480,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[490,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[500,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[510,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[520,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[530,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[540,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[550,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[560,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[570,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[580,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[590,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[600,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[610,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[620,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[630,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[640,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[650,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[660,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[670,"6e3c2a9b7bfe358ad2dcdb0aee3ccb2b219543c7"],[680,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[690,"a86c59c3dc0ba4fb0ef697d492b00f2da8b17452"],[700,"464ee3693588a929c5147057dee7565a6d50e983"],[710,"15a6363657c1a822723b38fa2321e98eaff1dbf5"],[720,"5e8190221ecf4481b527f620dbcc276049da93c2"],[730,"bca1e8afa686d8476ea7a12082fc52f47deeab32"],[740,"55c554d108420997fb0c19b82e1b91c7318659e6"],[750,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[760,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[770,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[780,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[790,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[800,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[810,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[820,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[830,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[840,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[850,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[860,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[870,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[880,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[890,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[900,"0905c920a1de9Line truncated
{"check":{"claim":"mednafen_psx boots Bust-A-Move 2 - Arcade Edition (USA) with scph5903.bin alone and refuses a wrong file under its name","method":"scph5903.bin alone as scph5903.bin, then 1048576 zero bytes and its first 524288 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_hw_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_hw_libretro.so","library_name":"Beetle PSX HW","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"d16c889c9f12bd3265edc3c9d4b0e6e24c1f244d1d8d475235f6a74e65e5b10b"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"a17406edaeb01d334d15f3a4e6fa4950c6d0b727","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"6aaa716a44ccf5e245f478c560f5718f6af3f0c8ded2e02b05f364adf81df9c8"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.31,2.56,3.18],"load_before":[2.2,2.55,3.19],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-32e83283615a","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"f89e40011815ab1c50dac718cd53c5fcd675ccb67d2e611acff717e3cbaf2bbc"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T15:05:07+00:00","subject":"files-mednafen-psx-hw-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"14":3,"23":1,"28":1,"32":2374,"35":2,"36":1,"37":8,"40":2373,"44":1,"45":4,"46":1,"47":1,"51":1,"55":25,"56":2,"57":1,"59":1,"6":1,"69":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":562.1811297236717,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_framLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_hw_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_hw_libretro.so","library_name":"Beetle PSX HW","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"d16c889c9f12bd3265edc3c9d4b0e6e24c1f244d1d8d475235f6a74e65e5b10b"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"a17406edaeb01d334d15f3a4e6fa4950c6d0b727","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"6aaa716a44ccf5e245f478c560f5718f6af3f0c8ded2e02b05f364adf81df9c8"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.45,2.58,3.18],"load_before":[2.31,2.56,3.18],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-699ca140a270","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"f89e40011815ab1c50dac718cd53c5fcd675ccb67d2e611acff717e3cbaf2bbc"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T15:05:20+00:00","subject":"none-mednafen-psx-hw-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"14":3,"23":1,"28":1,"32":2534,"35":2,"36":1,"37":4,"40":2533,"44":1,"45":4,"46":1,"47":1,"51":1,"55":25,"56":2,"57":1,"59":1,"6":1,"69":1,"8":1},"files_opened":[],"files_probed_absent":["scph5501.bin","SCPH5501.bin","SCPH5501.BIN","SCPH-5501.bin","SCPH-5501.BIN","scph5503.bin","SCPH5503.bin","SCPH5503.BIN","SCPH-5503.bin","SCPH-5503.BIN","scph7003.bin","SCPH7003.bin","SCPH7003.BIN","SCPH-7003.bin","SCPH-7003.BIN"],"fps":591.088190351902,"fps_nominalLine truncated
{"check":{"claim":"mednafen_psx_hw boots Bust-A-Move 2 - Arcade Edition (USA) with openbios.bin alone and refuses a wrong file under its name","method":"openbios.bin alone as openbios.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafcLine truncated
{"check":{"claim":"mednafen_psx_hw boots Bust-A-Move 2 - Arcade Edition (USA) with ps1_rom.bin alone and refuses a wrong file under its name","method":"ps1_rom.bin alone as ps1_rom.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63aLine truncated
{"check":{"claim":"every copy of ps1_rom.bin boots Bust-A-Move 2 - Arcade Edition (USA) on mednafen_psx_hw","method":"Each copy the collection holds staged alone as ps1_rom.bin, each run 2 times for 3600 frames. The boot oracle judges each copy.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[920,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[930,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[940,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[950,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[Line truncated
{"check":{"claim":"mednafen_psx_hw boots Bust-A-Move 2 - Arcade Edition (USA) with psxonpsp660.bin alone and refuses a wrong file under its name","method":"psxonpsp660.bin alone as psxonpsp660.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab77Line truncated
{"check":{"claim":"mednafen_psx_hw boots Bust-A-Move 2 - Arcade Edition (USA) with scph5501.bin alone and refuses a wrong file under its name","method":"scph5501.bin alone as scph5501.bin, then 524288 zero bytes and its first 262144 bytes, then scph5500.bin, scph5502.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[20,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[30,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[40,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[50,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[60,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[70,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[80,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[90,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[100,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[110,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[120,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[130,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[140,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[150,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[160,"0d1ef963932a2aa7e5c79f7e634c9fc63b51ba95"],[170,"9cf22a982c36d29527b7b8594b8bb0677689750f"],[180,"c21e6940f9383070634d99c95e46643dce114806"],[190,"1dc65ead4f57e22b032b202c928a0e1ff47b33cc"],[200,"496c857184814fee7850658513f1618290293643"],[210,"fd759fc97d025b4c7c23f0614625b9751c4e0b96"],[220,"f0aa4c60e2ded472aae7cd79c381bcb02a181580"],[230,"b0201d6721d9159397dbfe069d00040de686e049"],[240,"4da2219693f6d34d6c18b7cd4b18df752d136dc0"],[250,"7e458c656e3966b16a11c18f193e95e95ad2aea4"],[260,"b23d7be1676a2a9ec8cf68f180382e0cb008d39e"],[270,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[280,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[290,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[300,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[310,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[320,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[330,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[340,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[350,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[360,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[370,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[380,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[390,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[400,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[410,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[420,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[430,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[440,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[450,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[460,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[470,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[480,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[490,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[500,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[510,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[520,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[530,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[540,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[550,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[560,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[570,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[580,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[590,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[600,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[610,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[620,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[630,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[640,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[650,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[660,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[670,"6e3c2a9b7bfe358ad2dcdb0aee3ccb2b219543c7"],[680,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[690,"a86c59c3dc0ba4fb0ef697d492b00f2da8b17452"],[700,"464ee3693588a929c5147057dee7565a6d50e983"],[710,"15a6363657c1a822723b38fa2321e98eaff1dbf5"],[720,"5e8190221ecf4481b527f620dbcc276049da93c2"],[730,"bca1e8afa686d8476ea7a12082fc52f47deeab32"],[740,"55c554d108420997fb0c19b82e1b91c7318659e6"],[750,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[760,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[770,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[780,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[790,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[800,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[810,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[820,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[830,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[840,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[850,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[860,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[870,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[880,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[890,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[900,"0905c920a1Line truncated
{"check":{"claim":"mednafen_psx_hw boots Bust-A-Move 2 - Arcade Edition (USA) with scph5903.bin alone and refuses a wrong file under its name","method":"scph5903.bin alone as scph5903.bin, then 1048576 zero bytes and its first 524288 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"70c3bbd8536cd30851c007d964561c8661df786d","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"86bf2ed561358442b28b6846679ab157a02e03e3b2b97528e1fa41df7a4df078"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.81,4.31,5.22],"load_before":[2.65,4.36,5.25],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-770ea8c50976","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T17:33:05+00:00","subject":"files-mednafen-psx-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2374,"35":2,"36":1,"37":8,"40":2373,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":566.8125959385137,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"70c3bbd8536cd30851c007d964561c8661df786d","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"86bf2ed561358442b28b6846679ab157a02e03e3b2b97528e1fa41df7a4df078"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.78,4.23,5.18],"load_before":[2.81,4.31,5.22],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-ec1ab64f96d3","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T17:33:19+00:00","subject":"none-mednafen-psx-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2534,"35":2,"36":1,"37":4,"40":2533,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[],"files_probed_absent":["scph5501.bin","SCPH5501.bin","SCPH5501.BIN","SCPH-5501.bin","SCPH-5501.BIN","scph5503.bin","SCPH5503.bin","SCPH5503.BIN","SCPH-5503.bin","SCPH-5503.BIN","scph7003.bin","SCPH7003.bin","SCPH7003.BIN","SCPH-7003.bin","SCPH-7003.BIN"],"fps":590.3661781052125,"fps_nominal":59.94,"frames":36Line truncated
{"check":{"claim":"mednafen_psx boots Bust-A-Move 2 - Arcade Edition (USA) with openbios.bin alone and refuses a wrong file under its name","method":"openbios.bin alone as openbios.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63aLine truncated
{"check":{"claim":"mednafen_psx boots Bust-A-Move 2 - Arcade Edition (USA) with ps1_rom.bin alone and refuses a wrong file under its name","method":"ps1_rom.bin alone as ps1_rom.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63a28fLine truncated
{"check":{"claim":"every copy of ps1_rom.bin boots Bust-A-Move 2 - Arcade Edition (USA) on mednafen_psx","method":"Each copy the collection holds staged alone as ps1_rom.bin, each run 2 times for 3600 frames. The boot oracle judges each copy.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[920,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[930,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[940,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[950,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[960Line truncated
{"check":{"claim":"mednafen_psx boots Bust-A-Move 2 - Arcade Edition (USA) with psxonpsp660.bin alone and refuses a wrong file under its name","method":"psxonpsp660.bin alone as psxonpsp660.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783fLine truncated
{"check":{"claim":"mednafen_psx boots Bust-A-Move 2 - Arcade Edition (USA) with scph5501.bin alone and refuses a wrong file under its name","method":"scph5501.bin alone as scph5501.bin, then 524288 zero bytes and its first 262144 bytes, then scph5500.bin, scph5502.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[20,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[30,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[40,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[50,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[60,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[70,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[80,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[90,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[100,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[110,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[120,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[130,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[140,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[150,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[160,"0d1ef963932a2aa7e5c79f7e634c9fc63b51ba95"],[170,"9cf22a982c36d29527b7b8594b8bb0677689750f"],[180,"c21e6940f9383070634d99c95e46643dce114806"],[190,"1dc65ead4f57e22b032b202c928a0e1ff47b33cc"],[200,"496c857184814fee7850658513f1618290293643"],[210,"fd759fc97d025b4c7c23f0614625b9751c4e0b96"],[220,"f0aa4c60e2ded472aae7cd79c381bcb02a181580"],[230,"b0201d6721d9159397dbfe069d00040de686e049"],[240,"4da2219693f6d34d6c18b7cd4b18df752d136dc0"],[250,"7e458c656e3966b16a11c18f193e95e95ad2aea4"],[260,"b23d7be1676a2a9ec8cf68f180382e0cb008d39e"],[270,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[280,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[290,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[300,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[310,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[320,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[330,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[340,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[350,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[360,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[370,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[380,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[390,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[400,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[410,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[420,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[430,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[440,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[450,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[460,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[470,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[480,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[490,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[500,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[510,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[520,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[530,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[540,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[550,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[560,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[570,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[580,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[590,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[600,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[610,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[620,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[630,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[640,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[650,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[660,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[670,"6e3c2a9b7bfe358ad2dcdb0aee3ccb2b219543c7"],[680,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[690,"a86c59c3dc0ba4fb0ef697d492b00f2da8b17452"],[700,"464ee3693588a929c5147057dee7565a6d50e983"],[710,"15a6363657c1a822723b38fa2321e98eaff1dbf5"],[720,"5e8190221ecf4481b527f620dbcc276049da93c2"],[730,"bca1e8afa686d8476ea7a12082fc52f47deeab32"],[740,"55c554d108420997fb0c19b82e1b91c7318659e6"],[750,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[760,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[770,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[780,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[790,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[800,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[810,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[820,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[830,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[840,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[850,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[860,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[870,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[880,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[890,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[900,"0905c920a1de9Line truncated
{"check":{"claim":"mednafen_psx boots Bust-A-Move 2 - Arcade Edition (USA) with scph5903.bin alone and refuses a wrong file under its name","method":"scph5903.bin alone as scph5903.bin, then 1048576 zero bytes and its first 524288 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_hw_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_hw_libretro.so","library_name":"Beetle PSX HW","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"d16c889c9f12bd3265edc3c9d4b0e6e24c1f244d1d8d475235f6a74e65e5b10b"},"emulator":"beetle_psx","flags":["load average reached 3.01 (threshold 3.0)"],"frontend":{"commit":"70c3bbd8536cd30851c007d964561c8661df786d","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"86bf2ed561358442b28b6846679ab157a02e03e3b2b97528e1fa41df7a4df078"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.01,3.3,3.66],"load_before":[2.81,3.28,3.66],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-aa2b85a5e248","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T18:11:36+00:00","subject":"files-mednafen-psx-hw-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"14":3,"23":1,"28":1,"32":2374,"35":2,"36":1,"37":8,"40":2373,"44":1,"45":4,"46":1,"47":1,"51":1,"55":25,"56":2,"57":1,"59":1,"6":1,"69":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":545.9195449199342,"fps_nominal":59.94,"frames":3600,"input_prLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_hw_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_hw_libretro.so","library_name":"Beetle PSX HW","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"d16c889c9f12bd3265edc3c9d4b0e6e24c1f244d1d8d475235f6a74e65e5b10b"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"70c3bbd8536cd30851c007d964561c8661df786d","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"86bf2ed561358442b28b6846679ab157a02e03e3b2b97528e1fa41df7a4df078"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.58,3.09,3.56],"load_before":[2.5,3.09,3.56],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-47c3dcceed98","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T18:12:49+00:00","subject":"none-mednafen-psx-hw-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"14":3,"23":1,"28":1,"32":2534,"35":2,"36":1,"37":4,"40":2533,"44":1,"45":4,"46":1,"47":1,"51":1,"55":25,"56":2,"57":1,"59":1,"6":1,"69":1,"8":1},"files_opened":[],"files_probed_absent":["scph5501.bin","SCPH5501.bin","SCPH5501.BIN","SCPH-5501.bin","SCPH-5501.BIN","scph5503.bin","SCPH5503.bin","SCPH5503.BIN","SCPH-5503.bin","SCPH-5503.BIN","scph7003.bin","SCPH7003.bin","SCPH7003.BIN","SCPH-7003.bin","SCPH-7003.BIN"],"fps":580.4548038Line truncated
{"check":{"claim":"mednafen_psx_hw boots Bust-A-Move 2 - Arcade Edition (USA) with openbios.bin alone and refuses a wrong file under its name","method":"openbios.bin alone as openbios.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafcLine truncated
{"check":{"claim":"mednafen_psx_hw boots Bust-A-Move 2 - Arcade Edition (USA) with ps1_rom.bin alone and refuses a wrong file under its name","method":"ps1_rom.bin alone as ps1_rom.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63aLine truncated
{"check":{"claim":"every copy of ps1_rom.bin boots Bust-A-Move 2 - Arcade Edition (USA) on mednafen_psx_hw","method":"Each copy the collection holds staged alone as ps1_rom.bin, each run 2 times for 3600 frames. The boot oracle judges each copy.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[920,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[930,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[940,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[950,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[Line truncated
{"check":{"claim":"mednafen_psx_hw boots Bust-A-Move 2 - Arcade Edition (USA) with psxonpsp660.bin alone and refuses a wrong file under its name","method":"psxonpsp660.bin alone as psxonpsp660.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab77Line truncated
{"check":{"claim":"mednafen_psx_hw boots Bust-A-Move 2 - Arcade Edition (USA) with scph5501.bin alone and refuses a wrong file under its name","method":"scph5501.bin alone as scph5501.bin, then 524288 zero bytes and its first 262144 bytes, then scph5500.bin, scph5502.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[20,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[30,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[40,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[50,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[60,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[70,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[80,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[90,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[100,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[110,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[120,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[130,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[140,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[150,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[160,"0d1ef963932a2aa7e5c79f7e634c9fc63b51ba95"],[170,"9cf22a982c36d29527b7b8594b8bb0677689750f"],[180,"c21e6940f9383070634d99c95e46643dce114806"],[190,"1dc65ead4f57e22b032b202c928a0e1ff47b33cc"],[200,"496c857184814fee7850658513f1618290293643"],[210,"fd759fc97d025b4c7c23f0614625b9751c4e0b96"],[220,"f0aa4c60e2ded472aae7cd79c381bcb02a181580"],[230,"b0201d6721d9159397dbfe069d00040de686e049"],[240,"4da2219693f6d34d6c18b7cd4b18df752d136dc0"],[250,"7e458c656e3966b16a11c18f193e95e95ad2aea4"],[260,"b23d7be1676a2a9ec8cf68f180382e0cb008d39e"],[270,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[280,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[290,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[300,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[310,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[320,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[330,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[340,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[350,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[360,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[370,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[380,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[390,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[400,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[410,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[420,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[430,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[440,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[450,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[460,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[470,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[480,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[490,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[500,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[510,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[520,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[530,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[540,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[550,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[560,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[570,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[580,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[590,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[600,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[610,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[620,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[630,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[640,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[650,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[660,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[670,"6e3c2a9b7bfe358ad2dcdb0aee3ccb2b219543c7"],[680,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[690,"a86c59c3dc0ba4fb0ef697d492b00f2da8b17452"],[700,"464ee3693588a929c5147057dee7565a6d50e983"],[710,"15a6363657c1a822723b38fa2321e98eaff1dbf5"],[720,"5e8190221ecf4481b527f620dbcc276049da93c2"],[730,"bca1e8afa686d8476ea7a12082fc52f47deeab32"],[740,"55c554d108420997fb0c19b82e1b91c7318659e6"],[750,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[760,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[770,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[780,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[790,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[800,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[810,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[820,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[830,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[840,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[850,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[860,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[870,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[880,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[890,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[900,"0905c920a1Line truncated
{"check":{"claim":"mednafen_psx_hw boots Bust-A-Move 2 - Arcade Edition (USA) with scph5903.bin alone and refuses a wrong file under its name","method":"scph5903.bin alone as scph5903.bin, then 1048576 zero bytes and its first 524288 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":["load average reached 3.42 (threshold 3.0)"],"frontend":{"commit":"30fc471d2389285e83bd62f84607e33dd34ab689","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.42,3.31,3.76],"load_before":[2.81,3.19,3.73],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-a2bd916f1765","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T20:32:03+00:00","subject":"references-mednafen-psx-puzzle-bobble-2-japan","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2382,"35":2,"36":1,"37":8,"40":2381,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"}],"files_probed_absent":[],"fps":481.79081988324543,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Puzzle Bobble 2 (Japan).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10400000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10600000 succeeded"},{"frame":0,"level":"info","text":"Checking if required firmware is present..."},{"frame":0,"level":"info","text":"Firmware found: <system>/scph5500.bin"},{"frame":0,"level":"info","text":"Firmware SHA1: B05DEF971D8EC59F346F2D9AC21FB742E3EB6917"},{"frame":0,"level":"info","text":"Controller 1: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 2: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 3: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 4: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 5: PlayStation CoLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"30fc471d2389285e83bd62f84607e33dd34ab689","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.81,2.87,3.32],"load_before":[2.67,2.85,3.32],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-4b9e700d03a9","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T20:42:30+00:00","subject":"references-mednafen-psx-bust-a-move-2-arcade-edition-europe","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2481,"35":2,"36":1,"37":8,"40":2480,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":440.42630337137933,"fps_nominal":50.0,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Bust-A-Move 2 - Arcade Edition (Europe).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10400000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10600000 succeeded"},{"frame":0,"level":"info","text":"Checking if required firmware is present..."},{"frame":0,"level":"info","text":"Firmware found: <system>/scph5502.bin"},{"frame":0,"level":"info","text":"Firmware SHA1: F6BC2D1F5EB6593DE7D089C425AC681D6FFFD3FLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_hw_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_hw_libretro.so","library_name":"Beetle PSX HW","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"d16c889c9f12bd3265edc3c9d4b0e6e24c1f244d1d8d475235f6a74e65e5b10b"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"30fc471d2389285e83bd62f84607e33dd34ab689","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.92,2.85,3.26],"load_before":[2.71,2.8,3.26],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-6e0e946eeba5","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T20:44:00+00:00","subject":"references-mednafen-psx-hw-puzzle-bobble-2-japan","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"14":3,"23":1,"28":1,"32":2382,"35":2,"36":1,"37":8,"40":2381,"44":1,"45":4,"46":1,"47":1,"51":1,"55":25,"56":2,"57":1,"59":1,"6":1,"69":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"}],"files_probed_absent":[],"fps":479.97835278165746,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX HW","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Puzzle Bobble 2 (Japan).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10400000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10600000 succeeded"},{"frame":0,"level":"info","text":"Checking if required firmware is present..."},{"frame":0,"level":"info","text":"Firmware found: <system>/scph5500.bin"},{"frame":0,"level":"info","text":"Firmware SHA1: B05DEF971D8EC59F346F2D9AC21FB742E3EB6917"},{"frame":0,"level":"info","text":"Controller 1: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 2: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 3: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 4: PlayStation Controller"},{"frame":0,"level":"info","text":"Controller 5: PlayStation ContLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_hw_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_hw_libretro.so","library_name":"Beetle PSX HW","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"d16c889c9f12bd3265edc3c9d4b0e6e24c1f244d1d8d475235f6a74e65e5b10b"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"30fc471d2389285e83bd62f84607e33dd34ab689","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.89,2.79,3.18],"load_before":[2.75,2.76,3.18],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-f3b61598f415","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T20:46:02+00:00","subject":"references-mednafen-psx-hw-bust-a-move-2-arcade-edition-europe","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"14":3,"23":1,"28":1,"32":2481,"35":2,"36":1,"37":8,"40":2480,"44":1,"45":4,"46":1,"47":1,"51":1,"55":25,"56":2,"57":1,"59":1,"6":1,"69":1,"8":1},"files_opened":[{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":447.95898491532915,"fps_nominal":50.0,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX HW","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Bust-A-Move 2 - Arcade Edition (Europe).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10400000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10600000 succeeded"},{"frame":0,"level":"info","text":"Checking if required firmware is present..."},{"frame":0,"level":"info","text":"Firmware found: <system>/scph5502.bin"},{"frame":0,"level":"info","text":"Firmware SHALine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"e6f7ea8f07ea6cf5ae3d8e6affad0ab877f27b4e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.28,2.35,2.32],"load_before":[2.33,2.37,2.32],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-1c9ad16a4129","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"eb8c851948806afcf075ea90ddd16727b662e1b59c4821ae56c00706e45576c9"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:17:22+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-usa-full","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2374,"35":2,"36":1,"37":8,"40":2373,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":573.5176543617409,"fps_nominal":59.94,"fLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"d893823fe16b894a36e2ae464ffbf4cf624f1135","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.38,2.37,2.33],"load_before":[2.42,2.37,2.33],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-ee4cf7add8ef","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"286171f07c671277b4a3a942751cd25c5f20f0addefef78423a3d8eaf46a0c52"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:18:49+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-usa-own","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2374,"35":2,"36":1,"37":8,"40":2373,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":572.8827179054578,"fps_nominal":59.94,"frLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"a123e7d71f892ae860ede66ce61b8624ace9386e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.36,2.37,2.33],"load_before":[2.39,2.37,2.33],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-13be0e68b799","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:19:56+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-usa-others","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2534,"35":2,"36":1,"37":4,"40":2533,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"a123e7d71f892ae860ede66ce61b8624ace9386e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.56,2.41,2.35],"load_before":[2.52,2.4,2.34],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-e44cc1e78a1f","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:21:19+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-usa-pack","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2374,"35":2,"36":1,"37":8,"40":2373,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":542.3966210439478,"fps_nominal":59.94,"frLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"a123e7d71f892ae860ede66ce61b8624ace9386e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.09,2.32,2.33],"load_before":[2.1,2.33,2.33],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-febadfe6495a","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"1d5305661b110a78aff8e41d60c19168c4af77ac","shows":"the PlayStation logo licensed by Sony Computer Entertainment Inc.","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"80d023ecbf776a97b6bb2bdeb13e43460f60fd53","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"1bda114b66fd098623abca772cf23813293a3849","shows":"a black screen with CREDIT 6","stage":"game"},{"sha1":"3bb53b8a3036554a4bf9ec4785df7a4b4e06a87d","shows":"the attract-mode game on the beach, PASSAGE TIME IS","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:23:25+00:00","subject":"region-mednafen_psx-puzzle-bobble-2-japan-full","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2382,"35":2,"36":1,"37":8,"40":2381,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"}],"files_probed_absent":[],"fps":551.0954505194409,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Puzzle Bobble 2 (Japan).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"a123e7d71f892ae860ede66ce61b8624ace9386e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.18,2.31,2.32],"load_before":[2.2,2.31,2.32],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-8119f63187f6","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"1d5305661b110a78aff8e41d60c19168c4af77ac","shows":"the PlayStation logo licensed by Sony Computer Entertainment Inc.","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"80d023ecbf776a97b6bb2bdeb13e43460f60fd53","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"1bda114b66fd098623abca772cf23813293a3849","shows":"a black screen with CREDIT 6","stage":"game"},{"sha1":"3bb53b8a3036554a4bf9ec4785df7a4b4e06a87d","shows":"the attract-mode game on the beach, PASSAGE TIME IS","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:24:50+00:00","subject":"region-mednafen_psx-puzzle-bobble-2-japan-own","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2382,"35":2,"36":1,"37":8,"40":2381,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"}],"files_probed_absent":[],"fps":550.5066217960766,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Puzzle Bobble 2 (Japan).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"}Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"a123e7d71f892ae860ede66ce61b8624ace9386e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.42,2.35,2.34],"load_before":[2.37,2.34,2.33],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-55dd1e4943c4","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"1d5305661b110a78aff8e41d60c19168c4af77ac","shows":"the PlayStation logo licensed by Sony Computer Entertainment Inc.","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"80d023ecbf776a97b6bb2bdeb13e43460f60fd53","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"1bda114b66fd098623abca772cf23813293a3849","shows":"a black screen with CREDIT 6","stage":"game"},{"sha1":"3bb53b8a3036554a4bf9ec4785df7a4b4e06a87d","shows":"the attract-mode game on the beach, PASSAGE TIME IS","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:25:42+00:00","subject":"region-mednafen_psx-puzzle-bobble-2-japan-others","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2546,"35":2,"36":1,"37":4,"40":2545,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":["scph5500.bin","SCPH5500.bin","SCPH5500.BIN","SCPH-5500.bin","SCPH-5500.BIN"],"fps":567.00489062109,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"a123e7d71f892ae860ede66ce61b8624ace9386e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.41,2.43,2.37],"load_before":[2.4,2.43,2.37],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-11ed4fb91816","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"1d5305661b110a78aff8e41d60c19168c4af77ac","shows":"the PlayStation logo licensed by Sony Computer Entertainment Inc.","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"80d023ecbf776a97b6bb2bdeb13e43460f60fd53","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"1bda114b66fd098623abca772cf23813293a3849","shows":"a black screen with CREDIT 6","stage":"game"},{"sha1":"3bb53b8a3036554a4bf9ec4785df7a4b4e06a87d","shows":"the attract-mode game on the beach, PASSAGE TIME IS","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:27:18+00:00","subject":"region-mednafen_psx-puzzle-bobble-2-japan-pack","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2382,"35":2,"36":1,"37":8,"40":2381,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"}],"files_probed_absent":[],"fps":556.6224415201582,"fps_nominal":59.94,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Puzzle Bobble 2 (Japan).cue\""},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10000000 succeeded"},{"frame":0,"level":"debug","text":"Regular mmap to address 0x10200000 succeeded"Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"a123e7d71f892ae860ede66ce61b8624ace9386e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.35,2.4,2.36],"load_before":[2.41,2.42,2.37],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-856ad7d7efe0","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"408effe5ed13b50c97a21d2efe9930ab0d2b6f43","shows":"the PlayStation logo licensed by Sony Computer Entertainment Europe","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"f5649c8df958220324753968e8785ea80a021837","shows":"the anti-piracy notice","stage":"game"},{"sha1":"2cccff1e0706fcc8bdd4fdcd35e0310c9aaf9ac5","shows":"the Acclaim and Taito credits text","stage":"game"},{"sha1":"dd70e8e057c3de89f0c39c2b91b72fce902a8588","shows":"the Acclaim logo","stage":"game"},{"sha1":"368ac3ce2a4ef7dcc1720e0e48f18e3e6404e191","shows":"the Taito logo on white","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:28:29+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-europe-full","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2481,"35":2,"36":1,"37":8,"40":2480,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":502.7538565261183,"fps_nomiLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"a123e7d71f892ae860ede66ce61b8624ace9386e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.76,2.5,2.4],"load_before":[2.82,2.51,2.4],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-5f344e618662","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"408effe5ed13b50c97a21d2efe9930ab0d2b6f43","shows":"the PlayStation logo licensed by Sony Computer Entertainment Europe","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"f5649c8df958220324753968e8785ea80a021837","shows":"the anti-piracy notice","stage":"game"},{"sha1":"2cccff1e0706fcc8bdd4fdcd35e0310c9aaf9ac5","shows":"the Acclaim and Taito credits text","stage":"game"},{"sha1":"dd70e8e057c3de89f0c39c2b91b72fce902a8588","shows":"the Acclaim logo","stage":"game"},{"sha1":"368ac3ce2a4ef7dcc1720e0e48f18e3e6404e191","shows":"the Taito logo on white","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:29:26+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-europe-own","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2481,"35":2,"36":1,"37":8,"40":2480,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":506.97445554095236,"fps_nominaLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"f2f890602dcd1407a5c7a3a5f9c145caa383d843","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.95,2.56,2.42],"load_before":[2.94,2.56,2.42],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-33780d47efdf","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"408effe5ed13b50c97a21d2efe9930ab0d2b6f43","shows":"the PlayStation logo licensed by Sony Computer Entertainment Europe","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"f5649c8df958220324753968e8785ea80a021837","shows":"the anti-piracy notice","stage":"game"},{"sha1":"2cccff1e0706fcc8bdd4fdcd35e0310c9aaf9ac5","shows":"the Acclaim and Taito credits text","stage":"game"},{"sha1":"dd70e8e057c3de89f0c39c2b91b72fce902a8588","shows":"the Acclaim logo","stage":"game"},{"sha1":"368ac3ce2a4ef7dcc1720e0e48f18e3e6404e191","shows":"the Taito logo on white","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:30:48+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-europe-others","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2472,"35":2,"36":1,"37":4,"40":2471,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09bLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":null,"sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"f2f890602dcd1407a5c7a3a5f9c145caa383d843","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.34,2.07,2.19],"load_before":[2.4,2.07,2.19],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-8996d19c29fd","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"408effe5ed13b50c97a21d2efe9930ab0d2b6f43","shows":"the PlayStation logo licensed by Sony Computer Entertainment Europe","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"f5649c8df958220324753968e8785ea80a021837","shows":"the anti-piracy notice","stage":"game"},{"sha1":"2cccff1e0706fcc8bdd4fdcd35e0310c9aaf9ac5","shows":"the Acclaim and Taito credits text","stage":"game"},{"sha1":"dd70e8e057c3de89f0c39c2b91b72fce902a8588","shows":"the Acclaim logo","stage":"game"},{"sha1":"368ac3ce2a4ef7dcc1720e0e48f18e3e6404e191","shows":"the Taito logo on white","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:37:50+00:00","subject":"region-mednafen_psx-bust-a-move-2-arcade-edition-europe-pack","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2481,"35":2,"36":1,"37":8,"40":2480,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":506.41130084498207,"fps_nomLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"e7de3e50840b1592c3f3cc635773780a6f31b6fa","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.89,3.35,3.32],"load_before":[2.77,3.35,3.32],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-a77a03177d4c","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"eb8c851948806afcf075ea90ddd16727b662e1b59c4821ae56c00706e45576c9"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:41:22+00:00","subject":"files-mednafen-psx-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2374,"35":2,"36":1,"37":8,"40":2373,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":5Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_libretro.so","library_name":"Beetle PSX","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"e7de3e50840b1592c3f3cc635773780a6f31b6fa","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.85,3.0,3.18],"load_before":[2.81,3.0,3.18],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-607274136f7b","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"eb8c851948806afcf075ea90ddd16727b662e1b59c4821ae56c00706e45576c9"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:44:58+00:00","subject":"none-mednafen-psx-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"23":1,"28":1,"32":2534,"35":2,"36":1,"37":4,"40":2533,"44":1,"45":4,"46":1,"47":1,"51":1,"55":18,"57":1,"59":1,"8":1},"files_opened":[],"files_probed_absent":["scph5501.bin","SCPH5501.bin","SCPH5501.BIN","SCPH-5501.bin","SCPH-5501.BIN","scph5503.bin","SCPH5503.bin","SCPH5503.BIN","SCPH-5503.bin","SCPH-5503Line truncated
{"check":{"claim":"mednafen_psx boots Bust-A-Move 2 - Arcade Edition (USA) with openbios.bin alone and refuses a wrong file under its name","method":"openbios.bin alone as openbios.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63aLine truncated
{"check":{"claim":"mednafen_psx boots Bust-A-Move 2 - Arcade Edition (USA) with ps1_rom.bin alone and refuses a wrong file under its name","method":"ps1_rom.bin alone as ps1_rom.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63a28fLine truncated
{"check":{"claim":"every copy of ps1_rom.bin boots Bust-A-Move 2 - Arcade Edition (USA) on mednafen_psx","method":"Each copy the collection holds staged alone as ps1_rom.bin, each run 2 times for 3600 frames. The boot oracle judges each copy.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[920,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[930,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[940,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[950,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[960Line truncated
{"check":{"claim":"mednafen_psx boots Bust-A-Move 2 - Arcade Edition (USA) with psxonpsp660.bin alone and refuses a wrong file under its name","method":"psxonpsp660.bin alone as psxonpsp660.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783fLine truncated
{"check":{"claim":"mednafen_psx boots Bust-A-Move 2 - Arcade Edition (USA) with scph5501.bin alone and refuses a wrong file under its name","method":"scph5501.bin alone as scph5501.bin, then 524288 zero bytes and its first 262144 bytes, then scph5500.bin, scph5502.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[20,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[30,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[40,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[50,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[60,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[70,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[80,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[90,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[100,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[110,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[120,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[130,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[140,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[150,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[160,"0d1ef963932a2aa7e5c79f7e634c9fc63b51ba95"],[170,"9cf22a982c36d29527b7b8594b8bb0677689750f"],[180,"c21e6940f9383070634d99c95e46643dce114806"],[190,"1dc65ead4f57e22b032b202c928a0e1ff47b33cc"],[200,"496c857184814fee7850658513f1618290293643"],[210,"fd759fc97d025b4c7c23f0614625b9751c4e0b96"],[220,"f0aa4c60e2ded472aae7cd79c381bcb02a181580"],[230,"b0201d6721d9159397dbfe069d00040de686e049"],[240,"4da2219693f6d34d6c18b7cd4b18df752d136dc0"],[250,"7e458c656e3966b16a11c18f193e95e95ad2aea4"],[260,"b23d7be1676a2a9ec8cf68f180382e0cb008d39e"],[270,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[280,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[290,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[300,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[310,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[320,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[330,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[340,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[350,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[360,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[370,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[380,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[390,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[400,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[410,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[420,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[430,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[440,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[450,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[460,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[470,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[480,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[490,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[500,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[510,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[520,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[530,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[540,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[550,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[560,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[570,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[580,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[590,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[600,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[610,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[620,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[630,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[640,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[650,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[660,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[670,"6e3c2a9b7bfe358ad2dcdb0aee3ccb2b219543c7"],[680,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[690,"a86c59c3dc0ba4fb0ef697d492b00f2da8b17452"],[700,"464ee3693588a929c5147057dee7565a6d50e983"],[710,"15a6363657c1a822723b38fa2321e98eaff1dbf5"],[720,"5e8190221ecf4481b527f620dbcc276049da93c2"],[730,"bca1e8afa686d8476ea7a12082fc52f47deeab32"],[740,"55c554d108420997fb0c19b82e1b91c7318659e6"],[750,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[760,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[770,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[780,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[790,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[800,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[810,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[820,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[830,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[840,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[850,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[860,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[870,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[880,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[890,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[900,"0905c920a1de9Line truncated
{"check":{"claim":"mednafen_psx boots Bust-A-Move 2 - Arcade Edition (USA) with scph5903.bin alone and refuses a wrong file under its name","method":"scph5903.bin alone as scph5903.bin, then 1048576 zero bytes and its first 524288 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_hw_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_hw_libretro.so","library_name":"Beetle PSX HW","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"d16c889c9f12bd3265edc3c9d4b0e6e24c1f244d1d8d475235f6a74e65e5b10b"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"dc53f50f676084c9dbbc4546cdfcd6fc2e85c90d","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.43,2.53,2.75],"load_before":[2.35,2.52,2.75],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-8c3d5fd2c86c","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"eb8c851948806afcf075ea90ddd16727b662e1b59c4821ae56c00706e45576c9"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:00:21+00:00","subject":"files-mednafen-psx-hw-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"14":3,"23":1,"28":1,"32":2374,"35":2,"36":1,"37":8,"40":2373,"44":1,"45":4,"46":1,"47":1,"51":1,"55":25,"56":2,"57":1,"59":1,"6":1,"69":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9fLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_psx_hw_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_psx_hw_libretro.so","library_name":"Beetle PSX HW","library_version":"0.9.44.1 7fea57a","repo":"https://github.com/libretro/beetle-psx-libretro","sha256":"d16c889c9f12bd3265edc3c9d4b0e6e24c1f244d1d8d475235f6a74e65e5b10b"},"emulator":"beetle_psx","flags":[],"frontend":{"commit":"c639a1b3e56afbe42b0b7e061293f9cd9a7d42df","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.92,2.04,2.37],"load_before":[1.76,1.79,2.3],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-ae6d4db96e73","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"dfbfc299250c0983f86bbf951efd187441306d92","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7b72ebae83893b63f9fffd1685f03b1d048d9fa9","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"0905c920a1de996664eddca94f93f75d0dcd4c52","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"63a96bd6d1d487da1824e10d37f6658506edc451","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"6628416f377d2e25df45e5fa2126f8f9313551f0","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"d68892362e0f33c41cc59dac1b5a2077fe5428ee","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"56330c6c7646c2c261acb3f48450825cb289845a","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"eb8c851948806afcf075ea90ddd16727b662e1b59c4821ae56c00706e45576c9"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:07:11+00:00","subject":"none-mednafen-psx-hw-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":2,"13":1,"14":3,"23":1,"28":1,"32":2534,"35":2,"36":1,"37":4,"40":2533,"44":1,"45":4,"46":1,"47":1,"51":1,"55":25,"56":2,"57":1,"59":1,"6":1,"69":1,"8":1},"files_opened":[],"files_probed_absent":["scph5501.bin","SCPH5501.bin","SCPH5501.BIN","SCPH-5501.bin","SCPH-5501.BIN","scph5503.bin","SCPH5503.bin","Line truncated
{"check":{"claim":"mednafen_psx_hw boots Bust-A-Move 2 - Arcade Edition (USA) with openbios.bin alone and refuses a wrong file under its name","method":"openbios.bin alone as openbios.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafcLine truncated
{"check":{"claim":"mednafen_psx_hw boots Bust-A-Move 2 - Arcade Edition (USA) with ps1_rom.bin alone and refuses a wrong file under its name","method":"ps1_rom.bin alone as ps1_rom.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63aLine truncated
{"check":{"claim":"every copy of ps1_rom.bin boots Bust-A-Move 2 - Arcade Edition (USA) on mednafen_psx_hw","method":"Each copy the collection holds staged alone as ps1_rom.bin, each run 2 times for 3600 frames. The boot oracle judges each copy.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[920,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[930,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[940,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[950,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[Line truncated
{"check":{"claim":"mednafen_psx_hw boots Bust-A-Move 2 - Arcade Edition (USA) with psxonpsp660.bin alone and refuses a wrong file under its name","method":"psxonpsp660.bin alone as psxonpsp660.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab77Line truncated
{"check":{"claim":"mednafen_psx_hw boots Bust-A-Move 2 - Arcade Edition (USA) with scph5501.bin alone and refuses a wrong file under its name","method":"scph5501.bin alone as scph5501.bin, then 524288 zero bytes and its first 262144 bytes, then scph5500.bin, scph5502.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[20,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[30,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[40,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[50,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[60,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[70,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[80,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[90,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[100,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[110,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[120,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[130,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[140,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[150,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[160,"0d1ef963932a2aa7e5c79f7e634c9fc63b51ba95"],[170,"9cf22a982c36d29527b7b8594b8bb0677689750f"],[180,"c21e6940f9383070634d99c95e46643dce114806"],[190,"1dc65ead4f57e22b032b202c928a0e1ff47b33cc"],[200,"496c857184814fee7850658513f1618290293643"],[210,"fd759fc97d025b4c7c23f0614625b9751c4e0b96"],[220,"f0aa4c60e2ded472aae7cd79c381bcb02a181580"],[230,"b0201d6721d9159397dbfe069d00040de686e049"],[240,"4da2219693f6d34d6c18b7cd4b18df752d136dc0"],[250,"7e458c656e3966b16a11c18f193e95e95ad2aea4"],[260,"b23d7be1676a2a9ec8cf68f180382e0cb008d39e"],[270,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[280,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[290,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[300,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[310,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[320,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[330,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[340,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[350,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[360,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[370,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[380,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[390,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[400,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[410,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[420,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[430,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[440,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[450,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[460,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[470,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[480,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[490,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[500,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[510,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[520,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[530,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[540,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[550,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[560,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[570,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[580,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[590,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[600,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[610,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[620,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[630,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[640,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[650,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[660,"7b72ebae83893b63f9fffd1685f03b1d048d9fa9"],[670,"6e3c2a9b7bfe358ad2dcdb0aee3ccb2b219543c7"],[680,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[690,"a86c59c3dc0ba4fb0ef697d492b00f2da8b17452"],[700,"464ee3693588a929c5147057dee7565a6d50e983"],[710,"15a6363657c1a822723b38fa2321e98eaff1dbf5"],[720,"5e8190221ecf4481b527f620dbcc276049da93c2"],[730,"bca1e8afa686d8476ea7a12082fc52f47deeab32"],[740,"55c554d108420997fb0c19b82e1b91c7318659e6"],[750,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[760,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[770,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[780,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[790,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[800,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[810,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[820,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[830,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[840,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[850,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[860,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[870,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[880,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[890,"0905c920a1de996664eddca94f93f75d0dcd4c52"],[900,"0905c920a1Line truncated
{"check":{"claim":"mednafen_psx_hw boots Bust-A-Move 2 - Arcade Edition (USA) with scph5903.bin alone and refuses a wrong file under its name","method":"scph5903.bin alone as scph5903.bin, then 1048576 zero bytes and its first 524288 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[10,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[20,"337865a6875563894146c2bf10e400ac4759a23e"],[30,"0304b0afe55ebe3add1ebf5bf41752f97e44204c"],[40,"7c35e737b2ccd7800ea1f0c36f687a9c6dda764c"],[50,"299a3fff10da0b0a116a1ea88d7433af6738de84"],[60,"c12e166c88321b96354829282fc51d5bc21a9b82"],[70,"74eb9bb5d909952545945402db4f6e7556d16e81"],[80,"fa30cf7b1d078ee6b88fee18a4951a7e0451440b"],[90,"539e02cabeebdd160561c5ae9f8c1133de337689"],[100,"fb3ff45d9dcbed0a60c552cb8c88b42115ab4cfd"],[110,"3981635420384123d33c47b909dd3612d6a7bd41"],[120,"fb517372811fb54ecc6820f7f33fee410fd3f94c"],[130,"274796a4421f971ad31f8cfed6143ea1a1f716f8"],[140,"f11ba7396b957127985dff0746fe96c552d01faa"],[150,"352b4bb3233f9e5227c17b9acc64a8f8c12d1a5e"],[160,"fcc27a87c9ed8f96caf75bcf618316ab029935e1"],[170,"ce6cac47ffedc6581fd7cd5234b8eaa491201b29"],[180,"53964f429e207a9e12058d29c03d848fb0ee4bc8"],[190,"556bfc1bd6076747fb1a1cc61195c59935139808"],[200,"d60afa84aa75ac26255e4abcc7787e2c6926a822"],[210,"bf686aec65cb75afa4c2c6a76ed41dc2e7f56473"],[220,"1c30d1c3691149440de2e39c76c9d4c15a3ef887"],[230,"f3f0ab0259b022858fe1f9df5b8b881d20ed9622"],[240,"ccdb9fe1afab16bff7b8abe49d93388a4759b672"],[250,"ef0d5460065e9bea5bf56143dccec95e0f97e9e2"],[260,"37a277f1c7fdd3dbb2957437e97149633bbc46bb"],[270,"c3f66164fa79d8d5387cee765c6c921ef0a5592a"],[280,"949c14bd898ec443eac36d983b1a9b835c1e30bb"],[290,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[300,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[310,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[320,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[330,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[340,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[350,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[360,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[370,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[380,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[390,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[400,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[410,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[420,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[430,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[440,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[450,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[460,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[470,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[480,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[490,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[500,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[510,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[520,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[530,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[540,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[550,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[560,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[570,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[580,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[590,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[600,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[610,"6b056a423c67f7a4675ffdb2f3a62d92f532b358"],[620,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[630,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[640,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[650,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[660,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[670,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[680,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[690,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[700,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[710,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[720,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[730,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[740,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[750,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[760,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[770,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[780,"64646545171a7f81dfcd027089d1f38a7f81b82b"],[790,"ad649e2955576e0af98200564cd4c5e2da081453"],[800,"ad649e2955576e0af98200564cd4c5e2da081453"],[810,"ad649e2955576e0af98200564cd4c5e2da081453"],[820,"ad649e2955576e0af98200564cd4c5e2da081453"],[830,"ad649e2955576e0af98200564cd4c5e2da081453"],[840,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[850,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[860,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[870,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[880,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[890,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[900,"d51ab7783f8eeafc63a28f14ce39f8e2babeffb3"],[910,"d51ab7783f8eeafLine truncated
+27
View File
@@ -102,3 +102,30 @@
{"core":{"build_command":"make -j8","commit":"41d7596","compiler":["GCC: (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0"],"file":"head_41d7596.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":"https://github.com/Abdess/beetle-saturn-libretro","sha256":"4851f3e5ad3509de78bc53b858f101c3e345555fb7f5d5c5220db1364bc41f42"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"17cc35bef9aebfc4dd4f6b306129bdc176516f2e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"2bba7b8a771e0c9585e2a0ff9721077107664bd65811a20bc8021640ca27f074"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.67,2.9,3.08],"load_before":[2.49,2.88,3.07],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-c4542e724438","inputs":{"content":{"label":"Redump: Tomb Raider (Europe)","sha1":"e163871b390380f809579a5a9d82659eaa874000","size":6537,"tracks":[{"file":"Tomb Raider (Europe) (Track 01).bin","sha1":"147585e31fa6a2a819711ee936fd149a86ef653c","size":207714528},{"file":"Tomb Raider (Europe) (Track 02).bin","sha1":"4fdda4efe3341d92938a45d49dc4a73f9842392a","size":34675536},{"file":"Tomb Raider (Europe) (Track 03).bin","sha1":"9c267444a801277785c357cf1e2e49d6646e3530","size":11284896},{"file":"Tomb Raider (Europe) (Track 04).bin","sha1":"7e094cf598d8e281f10b18353b1e0927571d157d","size":21788928},{"file":"Tomb Raider (Europe) (Track 05).bin","sha1":"a53d1d0b7c3f899683d59e6cd88dc1c0500797f0","size":21193872},{"file":"Tomb Raider (Europe) (Track 06).bin","sha1":"e86955b321fedaa97d58a2eddbfa24f1f0015adc","size":13580448},{"file":"Tomb Raider (Europe) (Track 07).bin","sha1":"d9a78b3a02aec82e701687301b897baebba82652","size":9857232},{"file":"Tomb Raider (Europe) (Track 08).bin","sha1":"71e6c29446f05ccb21a130efa12aa6355f94757b","size":12039888},{"file":"Tomb Raider (Europe) (Track 09).bin","sha1":"307d279ac8fe771076f0a53d5b1228a1d28ff08e","size":7070112},{"file":"Tomb Raider (Europe) (Track 10).bin","sha1":"81542d6601ab30cfd00bb9edcb0416d52bc30b3f","size":13984992},{"file":"Tomb Raider (Europe) (Track 11).bin","sha1":"b5112c95e8010b3a8ef4c4e957f52331a46a3fb7","size":1498224},{"file":"Tomb Raider (Europe) (Track 12).bin","sha1":"d9c0e710b6d0595ac29bc59f24d3dbe13ffc554c","size":2643648},{"file":"Tomb Raider (Europe) (Track 13).bin","sha1":"1ab17bbcb52ce47ab606bb70cda315bce34557b0","size":1241856},{"file":"Tomb Raider (Europe) (Track 14).bin","sha1":"b822e5f78f2cabdaf3284b8dc6ae54f98bd57f16","size":2128560},{"file":"Tomb Raider (Europe) (Track 15).bin","sha1":"fd69f277f3d944726c9b3e9f9102936ac4107d4c","size":1947456},{"file":"Tomb Raider (Europe) (Track 16).bin","sha1":"d702c417a938742cc41f5813a3daef9f44c20782","size":6851376},{"file":"Tomb Raider (Europe) (Track 17).bin","sha1":"21bf84308f8944d15202d7499fb3589ea27e0075","size":7559328},{"file":"Tomb Raider (Europe) (Track 18).bin","sha1":"72a718d52ca7345a31ab986c57f8944893530565","size":4466448},{"file":"Tomb Raider (Europe) (Track 19).bin","sha1":"69e73640f92bba3698bab25bc8d494ddaae0f2cc","size":15629040},{"file":"Tomb Raider (Europe) (Track 20).bin","sha1":"895ac2ef2b3046f5fb9137d6c555bebb67733107","size":9565584},{"file":"Tomb Raider (Europe) (Track 21).bin","sha1":"c1f4e83dbfb60afdeba76667210b146c59c9c0f1","size":7272384},{"file":"Tomb Raider (Europe) (Track 22).bin","sha1":"f9bd8850a45f4e983e14bcf338e7fb1ceec811f6","size":11202576},{"file":"Tomb Raider (Europe) (Track 23).bin","sha1":"1ffc775ac71b4440b27cbb59c7083bac4f791a75","size":10158288},{"file":"Tomb Raider (Europe) (Track 24).bin","sha1":"9e73751fcd2350e076f35cf99bf0d0c60440c649","size":2711856},{"file":"Tomb Raider (Europe) (Track 25).bin","sha1":"01b12dd55fc1b0c0f34b533eafbefc1b548c46f4","size":6498576},{"file":"Tomb Raider (Europe) (Track 26).bin","sha1":"1164e0ff54fd16cb85d369267db565e4b16e63f6","size":1237152},{"file":"Tomb Raider (Europe) (Track 27).bin","sha1":"4c3b397861c99b99c5bc632c2d516c9db25db400","size":1237152},{"file":"Tomb Raider (Europe) (Track 28).bin","sha1":"06ab055fa5583f6cab91026743a414d0d25764a4","size":1234800},{"file":"Tomb Raider (Europe) (Track 29).bin","sha1":"3f02f2425e58dacb95e5d37fe066d96cfd7345cb","size":1237152},{"file":"Tomb Raider (Europe) (Track 30).bin","sha1":"b084178ffc2a3c1c1ecf5e3d54a09e4d5a3c4709","size":1406496},{"file":"Tomb Raider (Europe) (Track 31).bin","sha1":"063f00fc06ee3d55bad02787e57f4d52c56e8ee9","size":1237152},{"file":"Tomb Raider (Europe) (Track 32).bin","sha1":"32be222c2e86fd209284bc937f8dd5903279bb02","size":1676976},{"file":"Tomb Raider (Europe) (Track 33).bin","sha1":"59f8c95116327c30e38119c203c9d6d339bf4f68","size":1686384},{"file":"Tomb Raider (Europe) (Track 34).bin","sha1":"07eddaa58a0d1dc774fda8e2d8b79b60c19929af","size":1345344},{"file":"Tomb Raider (Europe) (Track 35).bin","sha1":"b74e67a81db3835a989e8f07a5a91b83c5c35ef2","size":1267728},{"file":"Tomb Raider (EuroLine truncated
{"core":{"build_command":"make -j8","commit":"41d7596","compiler":["GCC: (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0"],"file":"head_41d7596.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":"https://github.com/Abdess/beetle-saturn-libretro","sha256":"4851f3e5ad3509de78bc53b858f101c3e345555fb7f5d5c5220db1364bc41f42"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"17cc35bef9aebfc4dd4f6b306129bdc176516f2e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"2bba7b8a771e0c9585e2a0ff9721077107664bd65811a20bc8021640ca27f074"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.68,2.85,3.04],"load_before":[2.47,2.82,3.04],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-97ba37977acb","inputs":{"content":{"label":"Redump: Virtua Cop (Europe)","sha1":"ba86058fb2feb383e791b990ef3bff680e6a147d","size":2148,"tracks":[{"file":"Virtua Cop (Europe) (Track 01).bin","sha1":"95ff15a9483cb154318074daf64a81cab28cd510","size":50652672},{"file":"Virtua Cop (Europe) (Track 02).bin","sha1":"21a967e3235b35005e9d82f66ddb2f5dc94220ba","size":1618176},{"file":"Virtua Cop (Europe) (Track 03).bin","sha1":"32ac2104ad63b5cbbfd11ef7b6c4545920b4180b","size":24531360},{"file":"Virtua Cop (Europe) (Track 04).bin","sha1":"d98280f80b364e19c09bbf262ae2ea99767ae48a","size":9422112},{"file":"Virtua Cop (Europe) (Track 05).bin","sha1":"1f745eda7a0104f107c617f737ea1c5413c3a224","size":11990496},{"file":"Virtua Cop (Europe) (Track 06).bin","sha1":"9cf23a8a7df5e5318a5833c872b8dcc1559c80c9","size":44323440},{"file":"Virtua Cop (Europe) (Track 07).bin","sha1":"746aa002022340d941267dc2093a9fb518d95b88","size":38537520},{"file":"Virtua Cop (Europe) (Track 08).bin","sha1":"cd374f11c4ba2d404b92f58a5174d972dd76e0ec","size":37274496},{"file":"Virtua Cop (Europe) (Track 09).bin","sha1":"197e09c77934de93763aab147a9a9cbd9a0737e1","size":17569440},{"file":"Virtua Cop (Europe) (Track 10).bin","sha1":"4fef61b53f2e6317a2b95a8c8247fd27bcb9b188","size":28092288},{"file":"Virtua Cop (Europe) (Track 11).bin","sha1":"251c5927b6b1e18a67870190e2c41e0b7302b13a","size":24804192},{"file":"Virtua Cop (Europe) (Track 12).bin","sha1":"ac9e700a996cab481021057b51e13465a41f3c54","size":24256176},{"file":"Virtua Cop (Europe) (Track 13).bin","sha1":"e322a7d828d1cd58ad73741532d9c8b44b526916","size":28983696},{"file":"Virtua Cop (Europe) (Track 14).bin","sha1":"52c3cf4a255b4ee6fa543dd4df17c5220068f200","size":1305360},{"file":"Virtua Cop (Europe) (Track 15).bin","sha1":"e08e6f11cc9add5ec3dd183ce7a84aae2d009dac","size":1653456},{"file":"Virtua Cop (Europe) (Track 16).bin","sha1":"a9d1be682757c2dddb992623fcccd5aa99eb2741","size":13695696},{"file":"Virtua Cop (Europe) (Track 17).bin","sha1":"5e4822b775a9601d515752c4bb85250589991dd5","size":41000064},{"file":"Virtua Cop (Europe) (Track 18).bin","sha1":"22a296399ee04ddce06ec7a723e75d5e85b9b18e","size":43660176},{"file":"Virtua Cop (Europe) (Track 19).bin","sha1":"b1e8b0b4dc2720ccf070509296b50b51a99b917f","size":48963936}]},"env":{"FAKETIME":"2000-01-01 00:00:00","FAKETIME_DONT_FAKE_MONOTONIC":"1","LD_PRELOAD":"libfaketime.so.1"},"frame_hash_every":60,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{"beetle_saturn_mpeg_card":"enabled"},"presses":[{"button":3,"frame":1200,"length":10},{"button":3,"frame":1800,"length":10},{"button":3,"frame":2400,"length":10},{"button":3,"frame":3000,"length":10}],"repetitions":1,"warmup":0},"kind":"run","record_version":3,"recorded_at":"2026-10-27T23:51:34+00:00","subject":"issue85-regression-card-on","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"28":1,"35":3,"37":2,"40":3599,"45":4,"46":1,"47":3600,"51":1,"55":2,"57":1,"8":1,"87":1},"files_opened":[{"path":"mpr-17933.bin","sha1_after":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3","sha1_staged":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3"},{"path":"mpeg_card.bin","sha1_after":"f7171b2a8f1c464696771941225c32d636b59349","sha1_staged":"f7171b2a8f1c464696771941225c32d636b59349"}],"files_probed_absent":[],"fps":182.07126291535343,"fps_nominal":49.92012779552716,"frames":3600,"input_pressed":80,"input_queries":187200,"isolation":"bwrap","last_frame_size":[352,256],"library_name":"Beetle Saturn","library_version":"v1.32.1","loaded":true,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Virtua Cop (Europe).cue\""},{"frame":0,"level":"debug","text":"Disc 1"},{"frame":0,"level":"debug","text":"- Track 1, LBA: 0 DATA"},{"frame":0,"level":"debug","text":"- Track 2, LBA: 21686 AUDIO"},{"frame":0,"level":"debug","text":"- Track 3, LBA: 22374 AUDIO"},{"frame":0,"level":"debug","text":"- Track 4, LBA: 32804 AUDIO"},{"frame":0,"level":"debug","text":"- Track 5, LBA: 36810 AUDIO"},{"frame":Line truncated
{"core":{"build_command":"make -j8","commit":"41d7596","compiler":["GCC: (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0"],"file":"head_41d7596.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":"https://github.com/Abdess/beetle-saturn-libretro","sha256":"4851f3e5ad3509de78bc53b858f101c3e345555fb7f5d5c5220db1364bc41f42"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"17cc35bef9aebfc4dd4f6b306129bdc176516f2e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"2bba7b8a771e0c9585e2a0ff9721077107664bd65811a20bc8021640ca27f074"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.79,2.84,3.02],"load_before":[2.46,2.78,3.01],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-ded9fcc5eb22","inputs":{"content":{"label":"Redump: Virtua Fighter 2 (USA)","sha1":"3d8ca7b99a62235e3157c5a2e55774cef6ed4338","size":3983,"tracks":[{"file":"Virtua Fighter 2 (USA) (Track 01).bin","sha1":"28e0b690ffb61ee737c7f2ccc9280185265a1096","size":60267648},{"file":"Virtua Fighter 2 (USA) (Track 02).bin","sha1":"046f86cd20aa73df39163bd3df843ca88f7de9bf","size":14403648},{"file":"Virtua Fighter 2 (USA) (Track 03).bin","sha1":"6417abbf1cd811418c7efe5df29c55e6e3af7875","size":16870896},{"file":"Virtua Fighter 2 (USA) (Track 04).bin","sha1":"e81669de960631cfc2beaa019a9cf9682b507f6a","size":14575344},{"file":"Virtua Fighter 2 (USA) (Track 05).bin","sha1":"01b7fd6c71b3f339a228165a2e7c0bb1d8dbfdf1","size":14643552},{"file":"Virtua Fighter 2 (USA) (Track 06).bin","sha1":"a7e4c6bb0b8aa6fbe5581c9742cf77813d109990","size":13528704},{"file":"Virtua Fighter 2 (USA) (Track 07).bin","sha1":"dcbccf9638a3103409b25b466352de4ece93b425","size":17745840},{"file":"Virtua Fighter 2 (USA) (Track 08).bin","sha1":"8c2d6519f382310522915ee4f47551e4898b0715","size":16659216},{"file":"Virtua Fighter 2 (USA) (Track 09).bin","sha1":"68ebf03ea348ef2993fcd031bf7247f9ade1a3ce","size":16506336},{"file":"Virtua Fighter 2 (USA) (Track 10).bin","sha1":"be74f7dbd63886fe626d00c8d54f8912063c1f0c","size":17063760},{"file":"Virtua Fighter 2 (USA) (Track 11).bin","sha1":"2bc243633fad43e9d2ad64cbb063e0ce9725bda2","size":13622784},{"file":"Virtua Fighter 2 (USA) (Track 12).bin","sha1":"b203aee3066f80db8fa01d107c0d00e603d716c2","size":16826208},{"file":"Virtua Fighter 2 (USA) (Track 13).bin","sha1":"f649f424efad035b276f6f3b8abf402480ac35db","size":13643952},{"file":"Virtua Fighter 2 (USA) (Track 14).bin","sha1":"52fd6d881bf1b6daea1fe214cc4c216204cdeef9","size":6343344},{"file":"Virtua Fighter 2 (USA) (Track 15).bin","sha1":"60088229de4a4b18d2d4834e6aacb02e463c32c6","size":1411200},{"file":"Virtua Fighter 2 (USA) (Track 16).bin","sha1":"c0c57fab302c8279b1119415deb4fd54efb68a71","size":3339840},{"file":"Virtua Fighter 2 (USA) (Track 17).bin","sha1":"b76e5b126b31ba355e12d1f88a46c96dd5eab3f3","size":8951712},{"file":"Virtua Fighter 2 (USA) (Track 18).bin","sha1":"e20ed56b26c17a5cf1dbfdcbdfb89ce626799d97","size":1766352},{"file":"Virtua Fighter 2 (USA) (Track 19).bin","sha1":"82aee2703eaa8c734b5304aaacd7921f54694e04","size":1970976},{"file":"Virtua Fighter 2 (USA) (Track 20).bin","sha1":"17bfc0722fa59b210b43901aec8b2f847aaa2277","size":2787120},{"file":"Virtua Fighter 2 (USA) (Track 21).bin","sha1":"52333eb9b7f7a2761e9f0eb85c157a26553b8ec6","size":32415264},{"file":"Virtua Fighter 2 (USA) (Track 22).bin","sha1":"8ab3736fa9522d9fd69e0e9253e9d817e135e172","size":27492528},{"file":"Virtua Fighter 2 (USA) (Track 23).bin","sha1":"ea50a1fcc4a35acd3ca7e02ee7a81f20a3e1de48","size":32180064},{"file":"Virtua Fighter 2 (USA) (Track 24).bin","sha1":"4b348bb0e320207148ebbffdf4ad4ddc236a74ad","size":31062864},{"file":"Virtua Fighter 2 (USA) (Track 25).bin","sha1":"ab576b182e3fed5af144cd8d2cc697c7ba37f5d5","size":27530160},{"file":"Virtua Fighter 2 (USA) (Track 26).bin","sha1":"2bc409ef8089c7e6f621e668cc8c07065fa21f73","size":30463104},{"file":"Virtua Fighter 2 (USA) (Track 27).bin","sha1":"ac60884ffcd2419eb2e1ffc9a1beec591c8f5b9a","size":38720976},{"file":"Virtua Fighter 2 (USA) (Track 28).bin","sha1":"f932fdb445adf71e7c528255f3616c7b1484c7e3","size":30681840},{"file":"Virtua Fighter 2 (USA) (Track 29).bin","sha1":"d7523dba40350541bff531cee1bec4145af508af","size":24851232},{"file":"Virtua Fighter 2 (USA) (Track 30).bin","sha1":"cee29a760ff54953a4e083ac6cbfdc2eabce7973","size":25763808},{"file":"Virtua Fighter 2 (USA) (Track 31).bin","sha1":"b3e728a593be2b8b98da613ebeef4ab13859e833","size":26789280},{"file":"Virtua Fighter 2 (USA) (Track 32).bin","sha1":"b3ecc02eb35318022500efb7cb5282457b92ad10","size":28278096},{"file":"Virtua Fighter 2 (USA) (Track 33).bin","sha1":"5e31f0db502bbcfdc368eb50ed612ed746580bdf","size":14918736},{"file":"Virtua Fighter 2 (USA) (Track 34).bin","sha1":"34067257e09ce347d3510908e01e29ce7477ffac","size":13634544}]},"env":{"FAKETIME":"2000-01-01 00:00:00","FAKETIME_Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"6d3045cbb3e527b32f023c7f0d6b38bbeaa58cc6","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.34,2.88,3.02],"load_before":[2.31,2.89,3.02],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-c95a4a8184a5","inputs":{"content":{"label":"Puzzle Bobble 2X (Japan) (2M1, 2MB1)","sha1":"b962ec9148a189239810a10677dcba073983733f","size":2756,"tracks":[{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 01).bin","sha1":"c58ceebc042ebd552c585b05a4bc88d69c6c995e","size":14309568},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 02).bin","sha1":"fe6d188a60087c54934040006727ec610357f5f9","size":28993104},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 03).bin","sha1":"0742c4d1eed7cee765108e78cd49a007a538b635","size":31911936},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 04).bin","sha1":"c9dd1e71937eeffe4e47742828fc07e849a0922b","size":29588160},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 05).bin","sha1":"68c4a10b6794f024e2c02a9e659b5c1c43e88791","size":30484272},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 06).bin","sha1":"edf058feaad0d4651d5d40e7bd4e70d57ba793a8","size":30865296},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 07).bin","sha1":"643806f6761fbafe8eebff5f58bae24b5f8276fc","size":29134224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 08).bin","sha1":"aeb0f26452da450a10b3089626704a74d6f76474","size":30931152},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 09).bin","sha1":"d51239d527f1b1f0e31d849def27aaea07e99185","size":13345248},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 10).bin","sha1":"79ea313379268e07001114a1435bd5e8bf1c4d92","size":12726672},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 11).bin","sha1":"2876deda3588bf6472fec102d9d33faf2b6adcc8","size":1869840},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 12).bin","sha1":"f5bbaec49002f44f48fd2f47d8f810966464beeb","size":1691088},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 13).bin","sha1":"692a5510b8b39dc2e5949b86e6585958f51519e0","size":13055952},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 14).bin","sha1":"e71a26e1045734f1da56066003ef673f88453433","size":10031280},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 15).bin","sha1":"cb1b521cd45a10584fb7fdfb8a2659b7a7e89dfd","size":25460400},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 16).bin","sha1":"3b87e3fc301d6a6ad1d468d28853fde5fb99bb9f","size":4233600},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 17).bin","sha1":"6a98a9ce4f961e379aca84ec6d62b6f9a36fb89a","size":5026224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 18).bin","sha1":"cd8ca74abba4fbe3f46359fc3cf2481f9f989fec","size":4518192},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 19).bin","sha1":"9b2d0cfde9b01ecd32989bf6cd2742dcd2ef6539","size":3833760},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 20).bin","sha1":"9c8b54c5a5f353d1db510c051a1a61359dd7d133","size":3993696},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 21).bin","sha1":"ae84d729b571cf07bfc767b131602e6cfc926f1e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:29:57+00:00","subject":"region-mednafen_saturn-puzzle-bobble-2x-japan-2m1-2mb1-full","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"28":1,"35":3,"37":1,"40":3599,"45":4,"46":1,"47":3600,"51":1,"55":2,"57":1,"8":1,"87":1},"files_opened":[{"path":"sega_101.bin","sha1_after":"df94c5b4d47eb3cc404d88b33a8fda237eaf4720","sha1_staged":"df94c5b4d47eb3cc404d88b33a8fda237eaf4720"}],"files_probed_absent":[],"fps":291.00726509641095,"fps_nominal":59.82650314089141,"frames":3600,"input_pressed":0,"input_queries":187200,"isolation":"bwrap","last_frame_size":[330,224],"library_name":"Beetle Saturn","library_version":"v1.32.1","loaded":true,"logs":[{"frame":0,"leveLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"6d3045cbb3e527b32f023c7f0d6b38bbeaa58cc6","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.76,3.35,3.22],"load_before":[2.71,3.36,3.23],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-b40eb171d095","inputs":{"content":{"label":"Puzzle Bobble 2X (Japan) (2M1, 2MB1)","sha1":"b962ec9148a189239810a10677dcba073983733f","size":2756,"tracks":[{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 01).bin","sha1":"c58ceebc042ebd552c585b05a4bc88d69c6c995e","size":14309568},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 02).bin","sha1":"fe6d188a60087c54934040006727ec610357f5f9","size":28993104},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 03).bin","sha1":"0742c4d1eed7cee765108e78cd49a007a538b635","size":31911936},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 04).bin","sha1":"c9dd1e71937eeffe4e47742828fc07e849a0922b","size":29588160},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 05).bin","sha1":"68c4a10b6794f024e2c02a9e659b5c1c43e88791","size":30484272},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 06).bin","sha1":"edf058feaad0d4651d5d40e7bd4e70d57ba793a8","size":30865296},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 07).bin","sha1":"643806f6761fbafe8eebff5f58bae24b5f8276fc","size":29134224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 08).bin","sha1":"aeb0f26452da450a10b3089626704a74d6f76474","size":30931152},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 09).bin","sha1":"d51239d527f1b1f0e31d849def27aaea07e99185","size":13345248},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 10).bin","sha1":"79ea313379268e07001114a1435bd5e8bf1c4d92","size":12726672},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 11).bin","sha1":"2876deda3588bf6472fec102d9d33faf2b6adcc8","size":1869840},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 12).bin","sha1":"f5bbaec49002f44f48fd2f47d8f810966464beeb","size":1691088},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 13).bin","sha1":"692a5510b8b39dc2e5949b86e6585958f51519e0","size":13055952},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 14).bin","sha1":"e71a26e1045734f1da56066003ef673f88453433","size":10031280},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 15).bin","sha1":"cb1b521cd45a10584fb7fdfb8a2659b7a7e89dfd","size":25460400},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 16).bin","sha1":"3b87e3fc301d6a6ad1d468d28853fde5fb99bb9f","size":4233600},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 17).bin","sha1":"6a98a9ce4f961e379aca84ec6d62b6f9a36fb89a","size":5026224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 18).bin","sha1":"cd8ca74abba4fbe3f46359fc3cf2481f9f989fec","size":4518192},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 19).bin","sha1":"9b2d0cfde9b01ecd32989bf6cd2742dcd2ef6539","size":3833760},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 20).bin","sha1":"9c8b54c5a5f353d1db510c051a1a61359dd7d133","size":3993696},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 21).bin","sha1":"ae84d729b571cf07bfc767b131602e6cfc926f1e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:32:54+00:00","subject":"region-mednafen_saturn-puzzle-bobble-2x-japan-2m1-2mb1-own","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"28":1,"35":3,"37":1,"40":3599,"45":4,"46":1,"47":3600,"51":1,"55":2,"57":1,"8":1,"87":1},"files_opened":[{"path":"sega_101.bin","sha1_after":"df94c5b4d47eb3cc404d88b33a8fda237eaf4720","sha1_staged":"df94c5b4d47eb3cc404d88b33a8fda237eaf4720"}],"files_probed_absent":[],"fps":292.2166983892468,"fps_nominal":59.82650314089141,"frames":3600,"input_pressed":0,"input_queries":187200,"isolation":"bwrap","last_frame_size":[330,224],"library_name":"Beetle Saturn","library_version":"v1.32.1","loaded":true,"logs":[{"frame":0,"level"Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":null,"repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":["default: repetition 0: retro_load_game returned false"],"frontend":{"commit":"6d3045cbb3e527b32f023c7f0d6b38bbeaa58cc6","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.64,3.04,3.12],"load_before":[2.64,3.04,3.12],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-8a0710524e62","inputs":{"content":{"label":"Puzzle Bobble 2X (Japan) (2M1, 2MB1)","sha1":"b962ec9148a189239810a10677dcba073983733f","size":2756,"tracks":[{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 01).bin","sha1":"c58ceebc042ebd552c585b05a4bc88d69c6c995e","size":14309568},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 02).bin","sha1":"fe6d188a60087c54934040006727ec610357f5f9","size":28993104},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 03).bin","sha1":"0742c4d1eed7cee765108e78cd49a007a538b635","size":31911936},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 04).bin","sha1":"c9dd1e71937eeffe4e47742828fc07e849a0922b","size":29588160},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 05).bin","sha1":"68c4a10b6794f024e2c02a9e659b5c1c43e88791","size":30484272},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 06).bin","sha1":"edf058feaad0d4651d5d40e7bd4e70d57ba793a8","size":30865296},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 07).bin","sha1":"643806f6761fbafe8eebff5f58bae24b5f8276fc","size":29134224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 08).bin","sha1":"aeb0f26452da450a10b3089626704a74d6f76474","size":30931152},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 09).bin","sha1":"d51239d527f1b1f0e31d849def27aaea07e99185","size":13345248},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 10).bin","sha1":"79ea313379268e07001114a1435bd5e8bf1c4d92","size":12726672},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 11).bin","sha1":"2876deda3588bf6472fec102d9d33faf2b6adcc8","size":1869840},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 12).bin","sha1":"f5bbaec49002f44f48fd2f47d8f810966464beeb","size":1691088},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 13).bin","sha1":"692a5510b8b39dc2e5949b86e6585958f51519e0","size":13055952},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 14).bin","sha1":"e71a26e1045734f1da56066003ef673f88453433","size":10031280},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 15).bin","sha1":"cb1b521cd45a10584fb7fdfb8a2659b7a7e89dfd","size":25460400},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 16).bin","sha1":"3b87e3fc301d6a6ad1d468d28853fde5fb99bb9f","size":4233600},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 17).bin","sha1":"6a98a9ce4f961e379aca84ec6d62b6f9a36fb89a","size":5026224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 18).bin","sha1":"cd8ca74abba4fbe3f46359fc3cf2481f9f989fec","size":4518192},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 19).bin","sha1":"9b2d0cfde9b01ecd32989bf6cd2742dcd2ef6539","size":3833760},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 20).bin","sha1":"9c8b54c5a5f353d1db510c051a1a61359dd7d133","size":3993696},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 21).bin","sha1":"ae84d729b571cf07bfc767b131602e6cfc926f1e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:35:24+00:00","subject":"region-mednafen_saturn-puzzle-bobble-2x-japan-2m1-2mb1-others","supersedes":null,"variants":[{"flags":["repetition 0: retro_load_game returned false"],"label":"default","repetitions":[{"files_opened":[],"files_probed_absent":["sega_101.bin"],"isolation":"bwrap","library_name":"Beetle Saturn","loaded":false,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Puzzle Bobble 2X (Japan) (2M1, 2MB1).cue\""},{"frame":0,"level":"debug","text":"Disc 1"},{"frame":0,"level":"debug","text":"- Track 1, LBA: 0 DATA"},{"frame":0,"level":"debug","text":"- Track 2, LBA: 6234 AUDIO"},{"frame":0,"level":"debug","text":"- Track 3, LBA: 18561 AULine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"6d3045cbb3e527b32f023c7f0d6b38bbeaa58cc6","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.87,3.54,3.38],"load_before":[2.75,3.55,3.38],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-8f2f065732f1","inputs":{"content":{"label":"Puzzle Bobble 2X (Japan) (2M1, 2MB1)","sha1":"b962ec9148a189239810a10677dcba073983733f","size":2756,"tracks":[{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 01).bin","sha1":"c58ceebc042ebd552c585b05a4bc88d69c6c995e","size":14309568},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 02).bin","sha1":"fe6d188a60087c54934040006727ec610357f5f9","size":28993104},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 03).bin","sha1":"0742c4d1eed7cee765108e78cd49a007a538b635","size":31911936},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 04).bin","sha1":"c9dd1e71937eeffe4e47742828fc07e849a0922b","size":29588160},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 05).bin","sha1":"68c4a10b6794f024e2c02a9e659b5c1c43e88791","size":30484272},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 06).bin","sha1":"edf058feaad0d4651d5d40e7bd4e70d57ba793a8","size":30865296},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 07).bin","sha1":"643806f6761fbafe8eebff5f58bae24b5f8276fc","size":29134224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 08).bin","sha1":"aeb0f26452da450a10b3089626704a74d6f76474","size":30931152},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 09).bin","sha1":"d51239d527f1b1f0e31d849def27aaea07e99185","size":13345248},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 10).bin","sha1":"79ea313379268e07001114a1435bd5e8bf1c4d92","size":12726672},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 11).bin","sha1":"2876deda3588bf6472fec102d9d33faf2b6adcc8","size":1869840},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 12).bin","sha1":"f5bbaec49002f44f48fd2f47d8f810966464beeb","size":1691088},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 13).bin","sha1":"692a5510b8b39dc2e5949b86e6585958f51519e0","size":13055952},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 14).bin","sha1":"e71a26e1045734f1da56066003ef673f88453433","size":10031280},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 15).bin","sha1":"cb1b521cd45a10584fb7fdfb8a2659b7a7e89dfd","size":25460400},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 16).bin","sha1":"3b87e3fc301d6a6ad1d468d28853fde5fb99bb9f","size":4233600},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 17).bin","sha1":"6a98a9ce4f961e379aca84ec6d62b6f9a36fb89a","size":5026224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 18).bin","sha1":"cd8ca74abba4fbe3f46359fc3cf2481f9f989fec","size":4518192},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 19).bin","sha1":"9b2d0cfde9b01ecd32989bf6cd2742dcd2ef6539","size":3833760},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 20).bin","sha1":"9c8b54c5a5f353d1db510c051a1a61359dd7d133","size":3993696},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 21).bin","sha1":"ae84d729b571cf07bfc767b131602e6cfc926f1e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:40:03+00:00","subject":"region-mednafen_saturn-puzzle-bobble-2x-japan-2m1-2mb1-pack","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"28":1,"35":3,"37":1,"40":3599,"45":4,"46":1,"47":3600,"51":1,"55":2,"57":1,"8":1,"87":1},"files_opened":[{"path":"sega_101.bin","sha1_after":"df94c5b4d47eb3cc404d88b33a8fda237eaf4720","sha1_staged":"df94c5b4d47eb3cc404d88b33a8fda237eaf4720"}],"files_probed_absent":[],"fps":291.9555039534164,"fps_nominal":59.82650314089141,"frames":3600,"input_pressed":0,"input_queries":187200,"isolation":"bwrap","last_frame_size":[330,224],"library_name":"Beetle Saturn","library_version":"v1.32.1","loaded":true,"logs":[{"frame":0,"levelLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"6d3045cbb3e527b32f023c7f0d6b38bbeaa58cc6","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.97,3.12,3.23],"load_before":[2.79,3.09,3.23],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-3e2c99e6eb24","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"782b93d04ecb9da4cc534489e67feeac7ea9dc78","size":2733,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"8980b4ff48f62af7c759326084c31886ebe3c6c9","size":14323680},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"5dff4c40aea9544ea439e46598f9f28f3ccd3fe4","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"85e6f4f8d99798ef705f40b1eef64154b56a3719","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 16).bin","sha1":"4e267443c95197df9f169047b89e6763997676da","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 21).bin","sha1":"e17390359629cbb835909c086ca6e5c048af1f43","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:43:34+00:00","subject":"region-mednafen_saturn-bust-a-move-2-arcade-edition-usa-full","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"28":1,"35":3,"37":1,"40":3599,"45":4,"46":1,"47":3600,"51":1,"55":2,"57":1,"8":1,"87":1},"files_opened":[{"path":"mpr-17933.bin","sha1_after":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3","sha1_staged":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3"}],"files_probed_absent":[],"fps":293.88774786969157,"fps_nominal":59.82650314089141,"frames":3600,"input_pressed":0,"input_queries":187200,"isolation":"bwrap","last_frame_size":[330,224],"library_name":"Beetle Saturn","library_version":"v1.32.1","loaded":true,"logs":[{"frame":0,"leLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":["load average reached 3.1 (threshold 3.0)"],"frontend":{"commit":"6d3045cbb3e527b32f023c7f0d6b38bbeaa58cc6","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.1,2.96,3.13],"load_before":[2.94,2.92,3.12],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-ed1804b021e6","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"782b93d04ecb9da4cc534489e67feeac7ea9dc78","size":2733,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"8980b4ff48f62af7c759326084c31886ebe3c6c9","size":14323680},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"5dff4c40aea9544ea439e46598f9f28f3ccd3fe4","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"85e6f4f8d99798ef705f40b1eef64154b56a3719","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 16).bin","sha1":"4e267443c95197df9f169047b89e6763997676da","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 21).bin","sha1":"e17390359629cbb835909c086ca6e5c048af1f43","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:46:54+00:00","subject":"region-mednafen_saturn-bust-a-move-2-arcade-edition-usa-own","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"28":1,"35":3,"37":1,"40":3599,"45":4,"46":1,"47":3600,"51":1,"55":2,"57":1,"8":1,"87":1},"files_opened":[{"path":"mpr-17933.bin","sha1_after":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3","sha1_staged":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3"}],"files_probed_absent":[],"fps":292.0518295855756,"fps_nominal":59.82650314089141,"frames":3600,"input_pressed":0,"input_queries":187200,"isolation":"bwrap","last_frame_size":[330,224],"library_name":"Beetle Saturn","library_version":"v1.32.Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":null,"repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":["default: repetition 0: retro_load_game returned false"],"frontend":{"commit":"6d3045cbb3e527b32f023c7f0d6b38bbeaa58cc6","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.53,2.72,3.01],"load_before":[2.49,2.72,3.01],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-f37d39eb7518","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"782b93d04ecb9da4cc534489e67feeac7ea9dc78","size":2733,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"8980b4ff48f62af7c759326084c31886ebe3c6c9","size":14323680},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"5dff4c40aea9544ea439e46598f9f28f3ccd3fe4","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"85e6f4f8d99798ef705f40b1eef64154b56a3719","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 16).bin","sha1":"4e267443c95197df9f169047b89e6763997676da","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 21).bin","sha1":"e17390359629cbb835909c086ca6e5c048af1f43","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:48:52+00:00","subject":"region-mednafen_saturn-bust-a-move-2-arcade-edition-usa-others","supersedes":null,"variants":[{"flags":["repetition 0: retro_load_game returned false"],"label":"default","repetitions":[{"files_opened":[],"files_probed_absent":["mpr-17933.bin"],"isolation":"bwrap","library_name":"Beetle Saturn","loaded":false,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Bust-A-Move 2 - Arcade Edition (USA).cue\""},{"frame":0,"level":"debug","text":"Disc 1"},{"frame":0,"level":"debug","text":"- Track 1, LBA: 0 DATA"},{"frame":0,"level":"debug","text":"- Track 2, LBA: 6240 AUDIO"},{"frame":0,"level":"debug","text":"- Track 3, LBA: 18567 Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"6d3045cbb3e527b32f023c7f0d6b38bbeaa58cc6","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.55,2.61,2.93],"load_before":[2.23,2.56,2.92],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-a1ae9ea84ad8","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"782b93d04ecb9da4cc534489e67feeac7ea9dc78","size":2733,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"8980b4ff48f62af7c759326084c31886ebe3c6c9","size":14323680},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"5dff4c40aea9544ea439e46598f9f28f3ccd3fe4","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"85e6f4f8d99798ef705f40b1eef64154b56a3719","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 16).bin","sha1":"4e267443c95197df9f169047b89e6763997676da","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 21).bin","sha1":"e17390359629cbb835909c086ca6e5c048af1f43","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:51:03+00:00","subject":"region-mednafen_saturn-bust-a-move-2-arcade-edition-usa-pack","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"28":1,"35":3,"37":1,"40":3599,"45":4,"46":1,"47":3600,"51":1,"55":2,"57":1,"8":1,"87":1},"files_opened":[{"path":"mpr-17933.bin","sha1_after":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3","sha1_staged":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3"}],"files_probed_absent":[],"fps":294.4207355255119,"fps_nominal":59.82650314089141,"frames":3600,"input_pressed":0,"input_queries":187200,"isolation":"bwrap","last_frame_size":[330,224],"library_name":"Beetle Saturn","library_version":"v1.32.1","loaded":true,"logs":[{"frame":0,"levLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"6d3045cbb3e527b32f023c7f0d6b38bbeaa58cc6","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.46,2.56,2.87],"load_before":[2.4,2.55,2.87],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-3e41c5369fdc","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"9298fabcdd797272c8c993abc81fcdd51a4e7830","size":2796,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"37fb0db994cf91f3ef34059fed47974c862d77ba","size":14321328},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"b7fd2069e9fe2c468f5b2d323f6383e72d4d5427","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"1c359b0a80d57f500c76960c539fc6e2ada9e912","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 16).bin","sha1":"531e3397ae1d10ea66f775585ac284a3daf31e3d","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 21).bin","sha1":"ff8de13a8a75eb20a0393ad17053395cb7f3934e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:53:09+00:00","subject":"region-mednafen_saturn-bust-a-move-2-arcade-edition-europe-full","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"28":1,"35":3,"37":1,"40":3599,"45":4,"46":1,"47":3600,"51":1,"55":2,"57":1,"8":1,"87":1},"files_opened":[{"path":"mpr-17933.bin","sha1_after":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3","sha1_staged":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3"}],"files_probed_absent":[],"fps":255.11050375251483,"fps_nominal":49.92012779552716,"frames":3600,"input_pressed":0,"input_queries":187200,"isolation":"bwrap","last_frame_size":[330,256],"library_name":"Beetle SatuLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":["load average reached 3.47 (threshold 3.0)"],"frontend":{"commit":"6d3045cbb3e527b32f023c7f0d6b38bbeaa58cc6","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.47,2.76,2.91],"load_before":[2.57,2.56,2.84],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-a0ac24f9f213","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"9298fabcdd797272c8c993abc81fcdd51a4e7830","size":2796,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"37fb0db994cf91f3ef34059fed47974c862d77ba","size":14321328},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"b7fd2069e9fe2c468f5b2d323f6383e72d4d5427","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"1c359b0a80d57f500c76960c539fc6e2ada9e912","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 16).bin","sha1":"531e3397ae1d10ea66f775585ac284a3daf31e3d","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 21).bin","sha1":"ff8de13a8a75eb20a0393ad17053395cb7f3934e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:54:41+00:00","subject":"region-mednafen_saturn-bust-a-move-2-arcade-edition-europe-own","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"28":1,"35":3,"37":1,"40":3599,"45":4,"46":1,"47":3600,"51":1,"55":2,"57":1,"8":1,"87":1},"files_opened":[{"path":"mpr-17933.bin","sha1_after":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3","sha1_staged":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3"}],"files_probed_absent":[],"fps":252.51881287031114,"fps_nominal":49.92012779552716,"frames":3600,"input_pressed":0,"input_queries":187200,"isolation":"bwrap","last_frame_Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":null,"repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":["default: repetition 0: retro_load_game returned false"],"frontend":{"commit":"6d3045cbb3e527b32f023c7f0d6b38bbeaa58cc6","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.88,2.62,2.82],"load_before":[2.88,2.62,2.82],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-9ac120e3d0a7","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"9298fabcdd797272c8c993abc81fcdd51a4e7830","size":2796,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"37fb0db994cf91f3ef34059fed47974c862d77ba","size":14321328},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"b7fd2069e9fe2c468f5b2d323f6383e72d4d5427","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"1c359b0a80d57f500c76960c539fc6e2ada9e912","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 16).bin","sha1":"531e3397ae1d10ea66f775585ac284a3daf31e3d","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 21).bin","sha1":"ff8de13a8a75eb20a0393ad17053395cb7f3934e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:57:04+00:00","subject":"region-mednafen_saturn-bust-a-move-2-arcade-edition-europe-others","supersedes":null,"variants":[{"flags":["repetition 0: retro_load_game returned false"],"label":"default","repetitions":[{"files_opened":[],"files_probed_absent":["mpr-17933.bin"],"isolation":"bwrap","library_name":"Beetle Saturn","loaded":false,"logs":[{"frame":0,"level":"info","text":"Loading \"<content>/Bust-A-Move 2 - Arcade Edition (Europe).cue\""},{"frame":0,"level":"debug","text":"Disc 1"},{"frame":0,"level":"debug","text":"- Track 1, LBA: 0 DATA"},{"frame":0,"level":"debug","text":"- Track 2, LBA: Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"6d3045cbb3e527b32f023c7f0d6b38bbeaa58cc6","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.77,2.61,2.78],"load_before":[2.57,2.57,2.78],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-dc5c7961e879","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"9298fabcdd797272c8c993abc81fcdd51a4e7830","size":2796,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"37fb0db994cf91f3ef34059fed47974c862d77ba","size":14321328},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"b7fd2069e9fe2c468f5b2d323f6383e72d4d5427","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"1c359b0a80d57f500c76960c539fc6e2ada9e912","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 16).bin","sha1":"531e3397ae1d10ea66f775585ac284a3daf31e3d","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 21).bin","sha1":"ff8de13a8a75eb20a0393ad17053395cb7f3934e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:59:36+00:00","subject":"region-mednafen_saturn-bust-a-move-2-arcade-edition-europe-pack","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"28":1,"35":3,"37":1,"40":3599,"45":4,"46":1,"47":3600,"51":1,"55":2,"57":1,"8":1,"87":1},"files_opened":[{"path":"mpr-17933.bin","sha1_after":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3","sha1_staged":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3"}],"files_probed_absent":[],"fps":256.2688755185345,"fps_nominal":49.92012779552716,"frames":3600,"input_pressed":0,"input_queries":187200,"isolation":"bwrap","last_frame_size":[330,256],"library_name":"Beetle SatuLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":"https://github.com/libretro/beetle-saturn-libretro","sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":["default: repetition 1 disagrees with repetition 0 on state_sha1","load average reached 3.17 (threshold 3.0)"],"frontend":{"commit":"30fc471d2389285e83bd62f84607e33dd34ab689","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.17,2.83,3.12],"load_before":[2.64,2.71,3.09],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-ea155398ce4b","inputs":{"content":{"label":"Puzzle Bobble 2X (Japan) (2M1, 2MB1)","sha1":"b962ec9148a189239810a10677dcba073983733f","size":2756,"tracks":[{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 01).bin","sha1":"c58ceebc042ebd552c585b05a4bc88d69c6c995e","size":14309568},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 02).bin","sha1":"fe6d188a60087c54934040006727ec610357f5f9","size":28993104},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 03).bin","sha1":"0742c4d1eed7cee765108e78cd49a007a538b635","size":31911936},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 04).bin","sha1":"c9dd1e71937eeffe4e47742828fc07e849a0922b","size":29588160},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 05).bin","sha1":"68c4a10b6794f024e2c02a9e659b5c1c43e88791","size":30484272},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 06).bin","sha1":"edf058feaad0d4651d5d40e7bd4e70d57ba793a8","size":30865296},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 07).bin","sha1":"643806f6761fbafe8eebff5f58bae24b5f8276fc","size":29134224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 08).bin","sha1":"aeb0f26452da450a10b3089626704a74d6f76474","size":30931152},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 09).bin","sha1":"d51239d527f1b1f0e31d849def27aaea07e99185","size":13345248},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 10).bin","sha1":"79ea313379268e07001114a1435bd5e8bf1c4d92","size":12726672},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 11).bin","sha1":"2876deda3588bf6472fec102d9d33faf2b6adcc8","size":1869840},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 12).bin","sha1":"f5bbaec49002f44f48fd2f47d8f810966464beeb","size":1691088},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 13).bin","sha1":"692a5510b8b39dc2e5949b86e6585958f51519e0","size":13055952},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 14).bin","sha1":"e71a26e1045734f1da56066003ef673f88453433","size":10031280},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 15).bin","sha1":"cb1b521cd45a10584fb7fdfb8a2659b7a7e89dfd","size":25460400},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 16).bin","sha1":"3b87e3fc301d6a6ad1d468d28853fde5fb99bb9f","size":4233600},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 17).bin","sha1":"6a98a9ce4f961e379aca84ec6d62b6f9a36fb89a","size":5026224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 18).bin","sha1":"cd8ca74abba4fbe3f46359fc3cf2481f9f989fec","size":4518192},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 19).bin","sha1":"9b2d0cfde9b01ecd32989bf6cd2742dcd2ef6539","size":3833760},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 20).bin","sha1":"9c8b54c5a5f353d1db510c051a1a61359dd7d133","size":3993696},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 21).bin","sha1":"ae84d729b571cf07bfc767b131602e6cfc926f1e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T20:48:59+00:00","subject":"references-mednafen-saturn-puzzle-bobble-2x-japan-2m1-2mb1","supersedes":null,"variants":[{"flags":["repetition 1 disagrees with repetition 0 on state_sha1"],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"28":1,"35":3,"37":1,"40":3599,"45":4,"46":1,"47":3600,"51":1,"55":2,"57":1,"8":1,"87":1},"files_opened":[{"path":"sega_101.bin","sha1_after":"df94c5b4d47eb3cc404d88b33a8fda237eaf4720","sha1_staged":"df94c5b4d47eb3cc404d88b33a8fda237eaf4720"}],"files_probed_absent":[],"fps":265.73264653076853,"fps_nominal":59.826Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":"https://github.com/libretro/beetle-saturn-libretro","sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":["default: repetition 1 disagrees with repetition 0 on state_sha1","load average reached 3.15 (threshold 3.0)"],"frontend":{"commit":"30fc471d2389285e83bd62f84607e33dd34ab689","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"427dc7fe27d6e24f81d100da8a7b9a6d9fe9ef425134ae7bf4be55247d407a93"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.15,2.99,3.07],"load_before":[2.83,2.91,3.05],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-35dd5587262d","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"782b93d04ecb9da4cc534489e67feeac7ea9dc78","size":2733,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"8980b4ff48f62af7c759326084c31886ebe3c6c9","size":14323680},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"5dff4c40aea9544ea439e46598f9f28f3ccd3fe4","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"85e6f4f8d99798ef705f40b1eef64154b56a3719","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 16).bin","sha1":"4e267443c95197df9f169047b89e6763997676da","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 21).bin","sha1":"e17390359629cbb835909c086ca6e5c048af1f43","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T20:55:51+00:00","subject":"references-mednafen-saturn-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":["repetition 1 disagrees with repetition 0 on state_sha1"],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"28":1,"35":3,"37":1,"40":3599,"45":4,"46":1,"47":3600,"51":1,"55":2,"57":1,"8":1,"87":1},"files_opened":[{"path":"mpr-17933.bin","sha1_after":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3","sha1_staged":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3"}],"files_probed_absent":[],"fps":271.7238755845247,"fps_nominal":59.82Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":"https://github.com/libretro/beetle-saturn-libretro","sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":["default: repetition 1 disagrees with repetition 0 on state_sha1"],"frontend":{"commit":"dd64434122a3f0dd88ca5908a7cafc2bceedbb98","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.95,3.0,3.17],"load_before":[2.59,2.95,3.16],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-1880da25f150","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"9298fabcdd797272c8c993abc81fcdd51a4e7830","size":2796,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"37fb0db994cf91f3ef34059fed47974c862d77ba","size":14321328},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"b7fd2069e9fe2c468f5b2d323f6383e72d4d5427","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"1c359b0a80d57f500c76960c539fc6e2ada9e912","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 16).bin","sha1":"531e3397ae1d10ea66f775585ac284a3daf31e3d","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 21).bin","sha1":"ff8de13a8a75eb20a0393ad17053395cb7f3934e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:14:11+00:00","subject":"references-mednafen-saturn-bust-a-move-2-arcade-edition-europe","supersedes":null,"variants":[{"flags":["repetition 1 disagrees with repetition 0 on state_sha1"],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"28":1,"35":3,"37":1,"40":3599,"45":4,"46":1,"47":3600,"51":1,"55":2,"57":1,"8":1,"87":1},"files_opened":[{"path":"mpr-17933.bin","sha1_after":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3","sha1_staged":"faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3"}],"files_probed_absent":[],"fps":239.173099333Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":["load average reached 3.02 (threshold 3.0)"],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.02,3.03,2.81],"load_before":[2.46,2.93,2.78],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-77b776b830bc","inputs":{"content":{"label":"Puzzle Bobble 2X (Japan) (2M1, 2MB1)","sha1":"b962ec9148a189239810a10677dcba073983733f","size":2756,"tracks":[{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 01).bin","sha1":"c58ceebc042ebd552c585b05a4bc88d69c6c995e","size":14309568},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 02).bin","sha1":"fe6d188a60087c54934040006727ec610357f5f9","size":28993104},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 03).bin","sha1":"0742c4d1eed7cee765108e78cd49a007a538b635","size":31911936},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 04).bin","sha1":"c9dd1e71937eeffe4e47742828fc07e849a0922b","size":29588160},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 05).bin","sha1":"68c4a10b6794f024e2c02a9e659b5c1c43e88791","size":30484272},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 06).bin","sha1":"edf058feaad0d4651d5d40e7bd4e70d57ba793a8","size":30865296},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 07).bin","sha1":"643806f6761fbafe8eebff5f58bae24b5f8276fc","size":29134224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 08).bin","sha1":"aeb0f26452da450a10b3089626704a74d6f76474","size":30931152},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 09).bin","sha1":"d51239d527f1b1f0e31d849def27aaea07e99185","size":13345248},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 10).bin","sha1":"79ea313379268e07001114a1435bd5e8bf1c4d92","size":12726672},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 11).bin","sha1":"2876deda3588bf6472fec102d9d33faf2b6adcc8","size":1869840},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 12).bin","sha1":"f5bbaec49002f44f48fd2f47d8f810966464beeb","size":1691088},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 13).bin","sha1":"692a5510b8b39dc2e5949b86e6585958f51519e0","size":13055952},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 14).bin","sha1":"e71a26e1045734f1da56066003ef673f88453433","size":10031280},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 15).bin","sha1":"cb1b521cd45a10584fb7fdfb8a2659b7a7e89dfd","size":25460400},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 16).bin","sha1":"3b87e3fc301d6a6ad1d468d28853fde5fb99bb9f","size":4233600},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 17).bin","sha1":"6a98a9ce4f961e379aca84ec6d62b6f9a36fb89a","size":5026224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 18).bin","sha1":"cd8ca74abba4fbe3f46359fc3cf2481f9f989fec","size":4518192},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 19).bin","sha1":"9b2d0cfde9b01ecd32989bf6cd2742dcd2ef6539","size":3833760},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 20).bin","sha1":"9c8b54c5a5f353d1db510c051a1a61359dd7d133","size":3993696},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 21).bin","sha1":"ae84d729b571cf07bfc767b131602e6cfc926f1e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":["^Cannot open BIOS file ","^BIOS file \".*\" is of an incorrect size\\.","^BIOS file \".*\" could not be fully read"],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"5edec5180d1c04dc0ead1e5fbbc7d6d53cc23fdb","shows":"the SEGA SATURN logo of the Japanese BIOS","stage":"bios"},{"sha1":"dcd45679fcd31a423d0e54690e89b52f417d8728","shows":"SEGA, produced by or under license from Sega Enterprises","stage":"bios"},{"sha1":"7efe0a96245086d186a702a253525614d03f01f4","shows":"NOW LOADING","stage":"game"},{"sha1":"79894146225fefecb7db22b6aa296cb035a8d8ae","shows":"the Taito logo on white, CREDIT 9","stage":"game"},{"sha1":"475fce75c7c581b7367ac1a4adaa0aadc18afab1","shows":"GAME OVER, press 1P or 2P start button","stage":"game"},{"sha1":"f610c613f723fa640250121d6086b5e2c53b695c","shows":"the Puzzle Bobble 2X title, press start button","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f776638Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.84,2.87,2.83],"load_before":[2.72,2.85,2.83],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-89ddb49d60ae","inputs":{"content":{"label":"Puzzle Bobble 2X (Japan) (2M1, 2MB1)","sha1":"b962ec9148a189239810a10677dcba073983733f","size":2756,"tracks":[{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 01).bin","sha1":"c58ceebc042ebd552c585b05a4bc88d69c6c995e","size":14309568},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 02).bin","sha1":"fe6d188a60087c54934040006727ec610357f5f9","size":28993104},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 03).bin","sha1":"0742c4d1eed7cee765108e78cd49a007a538b635","size":31911936},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 04).bin","sha1":"c9dd1e71937eeffe4e47742828fc07e849a0922b","size":29588160},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 05).bin","sha1":"68c4a10b6794f024e2c02a9e659b5c1c43e88791","size":30484272},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 06).bin","sha1":"edf058feaad0d4651d5d40e7bd4e70d57ba793a8","size":30865296},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 07).bin","sha1":"643806f6761fbafe8eebff5f58bae24b5f8276fc","size":29134224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 08).bin","sha1":"aeb0f26452da450a10b3089626704a74d6f76474","size":30931152},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 09).bin","sha1":"d51239d527f1b1f0e31d849def27aaea07e99185","size":13345248},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 10).bin","sha1":"79ea313379268e07001114a1435bd5e8bf1c4d92","size":12726672},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 11).bin","sha1":"2876deda3588bf6472fec102d9d33faf2b6adcc8","size":1869840},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 12).bin","sha1":"f5bbaec49002f44f48fd2f47d8f810966464beeb","size":1691088},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 13).bin","sha1":"692a5510b8b39dc2e5949b86e6585958f51519e0","size":13055952},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 14).bin","sha1":"e71a26e1045734f1da56066003ef673f88453433","size":10031280},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 15).bin","sha1":"cb1b521cd45a10584fb7fdfb8a2659b7a7e89dfd","size":25460400},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 16).bin","sha1":"3b87e3fc301d6a6ad1d468d28853fde5fb99bb9f","size":4233600},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 17).bin","sha1":"6a98a9ce4f961e379aca84ec6d62b6f9a36fb89a","size":5026224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 18).bin","sha1":"cd8ca74abba4fbe3f46359fc3cf2481f9f989fec","size":4518192},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 19).bin","sha1":"9b2d0cfde9b01ecd32989bf6cd2742dcd2ef6539","size":3833760},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 20).bin","sha1":"9c8b54c5a5f353d1db510c051a1a61359dd7d133","size":3993696},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 21).bin","sha1":"ae84d729b571cf07bfc767b131602e6cfc926f1e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":["^Cannot open BIOS file ","^BIOS file \".*\" is of an incorrect size\\.","^BIOS file \".*\" could not be fully read"],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"5edec5180d1c04dc0ead1e5fbbc7d6d53cc23fdb","shows":"the SEGA SATURN logo of the Japanese BIOS","stage":"bios"},{"sha1":"dcd45679fcd31a423d0e54690e89b52f417d8728","shows":"SEGA, produced by or under license from Sega Enterprises","stage":"bios"},{"sha1":"7efe0a96245086d186a702a253525614d03f01f4","shows":"NOW LOADING","stage":"game"},{"sha1":"79894146225fefecb7db22b6aa296cb035a8d8ae","shows":"the Taito logo on white, CREDIT 9","stage":"game"},{"sha1":"475fce75c7c581b7367ac1a4adaa0aadc18afab1","shows":"GAME OVER, press 1P or 2P start button","stage":"game"},{"sha1":"f610c613f723fa640250121d6086b5e2c53b695c","shows":"the Puzzle Bobble 2X title, press start button","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":null,"repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":["default: repetition 0: retro_load_game returned false"],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.68,2.8,2.81],"load_before":[2.68,2.8,2.81],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-675b7b6ec8f4","inputs":{"content":{"label":"Puzzle Bobble 2X (Japan) (2M1, 2MB1)","sha1":"b962ec9148a189239810a10677dcba073983733f","size":2756,"tracks":[{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 01).bin","sha1":"c58ceebc042ebd552c585b05a4bc88d69c6c995e","size":14309568},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 02).bin","sha1":"fe6d188a60087c54934040006727ec610357f5f9","size":28993104},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 03).bin","sha1":"0742c4d1eed7cee765108e78cd49a007a538b635","size":31911936},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 04).bin","sha1":"c9dd1e71937eeffe4e47742828fc07e849a0922b","size":29588160},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 05).bin","sha1":"68c4a10b6794f024e2c02a9e659b5c1c43e88791","size":30484272},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 06).bin","sha1":"edf058feaad0d4651d5d40e7bd4e70d57ba793a8","size":30865296},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 07).bin","sha1":"643806f6761fbafe8eebff5f58bae24b5f8276fc","size":29134224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 08).bin","sha1":"aeb0f26452da450a10b3089626704a74d6f76474","size":30931152},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 09).bin","sha1":"d51239d527f1b1f0e31d849def27aaea07e99185","size":13345248},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 10).bin","sha1":"79ea313379268e07001114a1435bd5e8bf1c4d92","size":12726672},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 11).bin","sha1":"2876deda3588bf6472fec102d9d33faf2b6adcc8","size":1869840},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 12).bin","sha1":"f5bbaec49002f44f48fd2f47d8f810966464beeb","size":1691088},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 13).bin","sha1":"692a5510b8b39dc2e5949b86e6585958f51519e0","size":13055952},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 14).bin","sha1":"e71a26e1045734f1da56066003ef673f88453433","size":10031280},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 15).bin","sha1":"cb1b521cd45a10584fb7fdfb8a2659b7a7e89dfd","size":25460400},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 16).bin","sha1":"3b87e3fc301d6a6ad1d468d28853fde5fb99bb9f","size":4233600},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 17).bin","sha1":"6a98a9ce4f961e379aca84ec6d62b6f9a36fb89a","size":5026224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 18).bin","sha1":"cd8ca74abba4fbe3f46359fc3cf2481f9f989fec","size":4518192},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 19).bin","sha1":"9b2d0cfde9b01ecd32989bf6cd2742dcd2ef6539","size":3833760},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 20).bin","sha1":"9c8b54c5a5f353d1db510c051a1a61359dd7d133","size":3993696},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 21).bin","sha1":"ae84d729b571cf07bfc767b131602e6cfc926f1e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":["^Cannot open BIOS file ","^BIOS file \".*\" is of an incorrect size\\.","^BIOS file \".*\" could not be fully read"],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"5edec5180d1c04dc0ead1e5fbbc7d6d53cc23fdb","shows":"the SEGA SATURN logo of the Japanese BIOS","stage":"bios"},{"sha1":"dcd45679fcd31a423d0e54690e89b52f417d8728","shows":"SEGA, produced by or under license from Sega Enterprises","stage":"bios"},{"sha1":"7efe0a96245086d186a702a253525614d03f01f4","shows":"NOW LOADING","stage":"game"},{"sha1":"79894146225fefecb7db22b6aa296cb035a8d8ae","shows":"the Taito logo on white, CREDIT 9","stage":"game"},{"sha1":"475fce75c7c581b7367ac1a4adaa0aadc18afab1","shows":"GAME OVER, press 1P or 2P start button","stage":"game"},{"sha1":"f610c613f723fa640250121d6086b5e2c53b695c","shows":"the Puzzle Bobble 2X title, press start button","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.98,2.91,2.85],"load_before":[2.97,2.9,2.85],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-b6efc273ad68","inputs":{"content":{"label":"Puzzle Bobble 2X (Japan) (2M1, 2MB1)","sha1":"b962ec9148a189239810a10677dcba073983733f","size":2756,"tracks":[{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 01).bin","sha1":"c58ceebc042ebd552c585b05a4bc88d69c6c995e","size":14309568},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 02).bin","sha1":"fe6d188a60087c54934040006727ec610357f5f9","size":28993104},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 03).bin","sha1":"0742c4d1eed7cee765108e78cd49a007a538b635","size":31911936},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 04).bin","sha1":"c9dd1e71937eeffe4e47742828fc07e849a0922b","size":29588160},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 05).bin","sha1":"68c4a10b6794f024e2c02a9e659b5c1c43e88791","size":30484272},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 06).bin","sha1":"edf058feaad0d4651d5d40e7bd4e70d57ba793a8","size":30865296},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 07).bin","sha1":"643806f6761fbafe8eebff5f58bae24b5f8276fc","size":29134224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 08).bin","sha1":"aeb0f26452da450a10b3089626704a74d6f76474","size":30931152},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 09).bin","sha1":"d51239d527f1b1f0e31d849def27aaea07e99185","size":13345248},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 10).bin","sha1":"79ea313379268e07001114a1435bd5e8bf1c4d92","size":12726672},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 11).bin","sha1":"2876deda3588bf6472fec102d9d33faf2b6adcc8","size":1869840},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 12).bin","sha1":"f5bbaec49002f44f48fd2f47d8f810966464beeb","size":1691088},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 13).bin","sha1":"692a5510b8b39dc2e5949b86e6585958f51519e0","size":13055952},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 14).bin","sha1":"e71a26e1045734f1da56066003ef673f88453433","size":10031280},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 15).bin","sha1":"cb1b521cd45a10584fb7fdfb8a2659b7a7e89dfd","size":25460400},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 16).bin","sha1":"3b87e3fc301d6a6ad1d468d28853fde5fb99bb9f","size":4233600},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 17).bin","sha1":"6a98a9ce4f961e379aca84ec6d62b6f9a36fb89a","size":5026224},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 18).bin","sha1":"cd8ca74abba4fbe3f46359fc3cf2481f9f989fec","size":4518192},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 19).bin","sha1":"9b2d0cfde9b01ecd32989bf6cd2742dcd2ef6539","size":3833760},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 20).bin","sha1":"9c8b54c5a5f353d1db510c051a1a61359dd7d133","size":3993696},{"file":"Puzzle Bobble 2X (Japan) (2M1, 2MB1) (Track 21).bin","sha1":"ae84d729b571cf07bfc767b131602e6cfc926f1e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":["^Cannot open BIOS file ","^BIOS file \".*\" is of an incorrect size\\.","^BIOS file \".*\" could not be fully read"],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"5edec5180d1c04dc0ead1e5fbbc7d6d53cc23fdb","shows":"the SEGA SATURN logo of the Japanese BIOS","stage":"bios"},{"sha1":"dcd45679fcd31a423d0e54690e89b52f417d8728","shows":"SEGA, produced by or under license from Sega Enterprises","stage":"bios"},{"sha1":"7efe0a96245086d186a702a253525614d03f01f4","shows":"NOW LOADING","stage":"game"},{"sha1":"79894146225fefecb7db22b6aa296cb035a8d8ae","shows":"the Taito logo on white, CREDIT 9","stage":"game"},{"sha1":"475fce75c7c581b7367ac1a4adaa0aadc18afab1","shows":"GAME OVER, press 1P or 2P start button","stage":"game"},{"sha1":"f610c613f723fa640250121d6086b5e2c53b695c","shows":"the Puzzle Bobble 2X title, press start button","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.97,2.89,2.85],"load_before":[2.7,2.83,2.83],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-d6092b9582ce","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"782b93d04ecb9da4cc534489e67feeac7ea9dc78","size":2733,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"8980b4ff48f62af7c759326084c31886ebe3c6c9","size":14323680},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"5dff4c40aea9544ea439e46598f9f28f3ccd3fe4","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"85e6f4f8d99798ef705f40b1eef64154b56a3719","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 16).bin","sha1":"4e267443c95197df9f169047b89e6763997676da","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 21).bin","sha1":"e17390359629cbb835909c086ca6e5c048af1f43","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":["^Cannot open BIOS file ","^BIOS file \".*\" is of an incorrect size\\.","^BIOS file \".*\" could not be fully read"],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"f6f6ad7714da4b7c32a7736276c8cba7ef9d45d0","shows":"the SEGA SATURN globe logo","stage":"bios"},{"sha1":"dcd45679fcd31a423d0e54690e89b52f417d8728","shows":"SEGA, produced by or under license from Sega Enterprises","stage":"bios"},{"sha1":"e0b0fd36c4da2579b509934b8fe010f4741edfa5","shows":"NOW LOADING","stage":"game"},{"sha1":"97f62d0835bc7f27b660f330d794c149c50c5716","shows":"the Acclaim and Taito credits text, CREDIT 9","stage":"game"},{"sha1":"0cd323a8a93adec3a2173549300acbf9a3fe5596","shows":"the Acclaim logo, CREDIT 9","stage":"game"},{"sha1":"76ed20462b9f45e247611fa77feff69e47052875","shows":"the Taito logo on white, CREDIT 9","stage":"game"},{"sha1":"e90793d79a1c815cd74e7a56f0e9d8f124bfc547","shows":"the Bust-A-Move 2 title, press start button","stage":"game"}]Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.74,2.8,2.82],"load_before":[2.65,2.79,2.82],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-eefba3481d94","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"782b93d04ecb9da4cc534489e67feeac7ea9dc78","size":2733,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"8980b4ff48f62af7c759326084c31886ebe3c6c9","size":14323680},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"5dff4c40aea9544ea439e46598f9f28f3ccd3fe4","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"85e6f4f8d99798ef705f40b1eef64154b56a3719","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 16).bin","sha1":"4e267443c95197df9f169047b89e6763997676da","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 21).bin","sha1":"e17390359629cbb835909c086ca6e5c048af1f43","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":["^Cannot open BIOS file ","^BIOS file \".*\" is of an incorrect size\\.","^BIOS file \".*\" could not be fully read"],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"f6f6ad7714da4b7c32a7736276c8cba7ef9d45d0","shows":"the SEGA SATURN globe logo","stage":"bios"},{"sha1":"dcd45679fcd31a423d0e54690e89b52f417d8728","shows":"SEGA, produced by or under license from Sega Enterprises","stage":"bios"},{"sha1":"e0b0fd36c4da2579b509934b8fe010f4741edfa5","shows":"NOW LOADING","stage":"game"},{"sha1":"97f62d0835bc7f27b660f330d794c149c50c5716","shows":"the Acclaim and Taito credits text, CREDIT 9","stage":"game"},{"sha1":"0cd323a8a93adec3a2173549300acbf9a3fe5596","shows":"the Acclaim logo, CREDIT 9","stage":"game"},{"sha1":"76ed20462b9f45e247611fa77feff69e47052875","shows":"the Taito logo on white, CREDIT 9","stage":"game"},{"sha1":"e90793d79a1c815cd74e7a56f0e9d8f124bfc547","shows":"the Bust-A-Move 2 title, press start button","stage":"game"}]Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":null,"repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":["default: repetition 0: retro_load_game returned false"],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.34,2.69,2.78],"load_before":[2.34,2.69,2.78],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-32e38ac34c5e","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"782b93d04ecb9da4cc534489e67feeac7ea9dc78","size":2733,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"8980b4ff48f62af7c759326084c31886ebe3c6c9","size":14323680},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"5dff4c40aea9544ea439e46598f9f28f3ccd3fe4","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"85e6f4f8d99798ef705f40b1eef64154b56a3719","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 16).bin","sha1":"4e267443c95197df9f169047b89e6763997676da","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 21).bin","sha1":"e17390359629cbb835909c086ca6e5c048af1f43","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":["^Cannot open BIOS file ","^BIOS file \".*\" is of an incorrect size\\.","^BIOS file \".*\" could not be fully read"],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"f6f6ad7714da4b7c32a7736276c8cba7ef9d45d0","shows":"the SEGA SATURN globe logo","stage":"bios"},{"sha1":"dcd45679fcd31a423d0e54690e89b52f417d8728","shows":"SEGA, produced by or under license from Sega Enterprises","stage":"bios"},{"sha1":"e0b0fd36c4da2579b509934b8fe010f4741edfa5","shows":"NOW LOADING","stage":"game"},{"sha1":"97f62d0835bc7f27b660f330d794c149c50c5716","shows":"the Acclaim and Taito credits text, CREDIT 9","stage":"game"},{"sha1":"0cd323a8a93adec3a2173549300acbf9a3fe5596","shows":"the Acclaim logo, CREDIT 9","stage":"game"},{"sha1":"76ed20462b9f45e247611fa77feff69e47052875","shows":"the Taito logo on white, CREDIT 9","stage":"game"},{"sha1":"e90793d79a1c815cd74e7a56f0e9d8f124bfc547","shows":"the Bust-ALine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.71,2.73,2.79],"load_before":[2.65,2.72,2.79],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-67d0345a9ef0","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"782b93d04ecb9da4cc534489e67feeac7ea9dc78","size":2733,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"8980b4ff48f62af7c759326084c31886ebe3c6c9","size":14323680},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"5dff4c40aea9544ea439e46598f9f28f3ccd3fe4","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"85e6f4f8d99798ef705f40b1eef64154b56a3719","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 16).bin","sha1":"4e267443c95197df9f169047b89e6763997676da","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 21).bin","sha1":"e17390359629cbb835909c086ca6e5c048af1f43","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":["^Cannot open BIOS file ","^BIOS file \".*\" is of an incorrect size\\.","^BIOS file \".*\" could not be fully read"],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"f6f6ad7714da4b7c32a7736276c8cba7ef9d45d0","shows":"the SEGA SATURN globe logo","stage":"bios"},{"sha1":"dcd45679fcd31a423d0e54690e89b52f417d8728","shows":"SEGA, produced by or under license from Sega Enterprises","stage":"bios"},{"sha1":"e0b0fd36c4da2579b509934b8fe010f4741edfa5","shows":"NOW LOADING","stage":"game"},{"sha1":"97f62d0835bc7f27b660f330d794c149c50c5716","shows":"the Acclaim and Taito credits text, CREDIT 9","stage":"game"},{"sha1":"0cd323a8a93adec3a2173549300acbf9a3fe5596","shows":"the Acclaim logo, CREDIT 9","stage":"game"},{"sha1":"76ed20462b9f45e247611fa77feff69e47052875","shows":"the Taito logo on white, CREDIT 9","stage":"game"},{"sha1":"e90793d79a1c815cd74e7a56f0e9d8f124bfc547","shows":"the Bust-A-Move 2 title, press start button","stage":"game"}Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.59,2.94,2.93],"load_before":[2.35,2.92,2.93],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-ba104ca40f86","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"9298fabcdd797272c8c993abc81fcdd51a4e7830","size":2796,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"37fb0db994cf91f3ef34059fed47974c862d77ba","size":14321328},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"b7fd2069e9fe2c468f5b2d323f6383e72d4d5427","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"1c359b0a80d57f500c76960c539fc6e2ada9e912","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 16).bin","sha1":"531e3397ae1d10ea66f775585ac284a3daf31e3d","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 21).bin","sha1":"ff8de13a8a75eb20a0393ad17053395cb7f3934e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":["^Cannot open BIOS file ","^BIOS file \".*\" is of an incorrect size\\.","^BIOS file \".*\" could not be fully read"],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"2d870b2352923df4b2563f75c8a01a3d6dcb4237","shows":"the SEGA SATURN globe logo","stage":"bios"},{"sha1":"95410b3a4a9f69ae981e2774c55574886efa67ea","shows":"SEGA, produced by or under license from Sega Enterprises","stage":"bios"},{"sha1":"4d426aec90be9bff76e2d32da0437d91f9880950","shows":"NOW LOADING","stage":"game"},{"sha1":"5bfbc97567caa32bad7489acc6c9a4f3f65ed863","shows":"the Acclaim and Taito credits text, CREDIT 9","stage":"game"},{"sha1":"8af02ae2f2f0864657a3c7a68293a4da163000d6","shows":"the Acclaim logo, CREDIT 9","stage":"game"},{"sha1":"e3245a31197fa028c2da63f387f58a38e010c98d","shows":"the Taito logo on white, CREDIT 9","stage":"game"},{"sha1":"9ae4dbf2ded891887635634d224dedccf176c1a0","shLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.66,2.88,2.91],"load_before":[2.57,2.88,2.91],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-925d625ff52c","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"9298fabcdd797272c8c993abc81fcdd51a4e7830","size":2796,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"37fb0db994cf91f3ef34059fed47974c862d77ba","size":14321328},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"b7fd2069e9fe2c468f5b2d323f6383e72d4d5427","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"1c359b0a80d57f500c76960c539fc6e2ada9e912","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 16).bin","sha1":"531e3397ae1d10ea66f775585ac284a3daf31e3d","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 21).bin","sha1":"ff8de13a8a75eb20a0393ad17053395cb7f3934e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":["^Cannot open BIOS file ","^BIOS file \".*\" is of an incorrect size\\.","^BIOS file \".*\" could not be fully read"],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"2d870b2352923df4b2563f75c8a01a3d6dcb4237","shows":"the SEGA SATURN globe logo","stage":"bios"},{"sha1":"95410b3a4a9f69ae981e2774c55574886efa67ea","shows":"SEGA, produced by or under license from Sega Enterprises","stage":"bios"},{"sha1":"4d426aec90be9bff76e2d32da0437d91f9880950","shows":"NOW LOADING","stage":"game"},{"sha1":"5bfbc97567caa32bad7489acc6c9a4f3f65ed863","shows":"the Acclaim and Taito credits text, CREDIT 9","stage":"game"},{"sha1":"8af02ae2f2f0864657a3c7a68293a4da163000d6","shows":"the Acclaim logo, CREDIT 9","stage":"game"},{"sha1":"e3245a31197fa028c2da63f387f58a38e010c98d","shows":"the Taito logo on white, CREDIT 9","stage":"game"},{"sha1":"9ae4dbf2ded891887635634d224dedccf176c1a0","shLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":null,"repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":["default: repetition 0: retro_load_game returned false"],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.49,2.86,2.91],"load_before":[2.49,2.86,2.91],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-3d384f96701a","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"9298fabcdd797272c8c993abc81fcdd51a4e7830","size":2796,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"37fb0db994cf91f3ef34059fed47974c862d77ba","size":14321328},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"b7fd2069e9fe2c468f5b2d323f6383e72d4d5427","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"1c359b0a80d57f500c76960c539fc6e2ada9e912","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 16).bin","sha1":"531e3397ae1d10ea66f775585ac284a3daf31e3d","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 21).bin","sha1":"ff8de13a8a75eb20a0393ad17053395cb7f3934e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":["^Cannot open BIOS file ","^BIOS file \".*\" is of an incorrect size\\.","^BIOS file \".*\" could not be fully read"],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"2d870b2352923df4b2563f75c8a01a3d6dcb4237","shows":"the SEGA SATURN globe logo","stage":"bios"},{"sha1":"95410b3a4a9f69ae981e2774c55574886efa67ea","shows":"SEGA, produced by or under license from Sega Enterprises","stage":"bios"},{"sha1":"4d426aec90be9bff76e2d32da0437d91f9880950","shows":"NOW LOADING","stage":"game"},{"sha1":"5bfbc97567caa32bad7489acc6c9a4f3f65ed863","shows":"the Acclaim and Taito credits text, CREDIT 9","stage":"game"},{"sha1":"8af02ae2f2f0864657a3c7a68293a4da163000d6","shows":"the Acclaim logo, CREDIT 9","stage":"game"},{"sha1":"e3245a31197fa028c2da63f387f58a38e010c98d","shows":"the Taito logo on white, CREDIT 9","stage":"game"},{"shLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/mednafen_saturn_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"mednafen_saturn_libretro.so","library_name":"Beetle Saturn","library_version":"v1.32.1","repo":null,"sha256":"2cef16a3444d45032ad0ae0d523cbff0e5655f4bc15eb33406c81212f54dc9c1"},"emulator":"beetle_saturn","flags":["load average reached 3.8 (threshold 3.0)"],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.8,3.12,3.0],"load_before":[2.98,2.94,2.94],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-1405c2a3a391","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"9298fabcdd797272c8c993abc81fcdd51a4e7830","size":2796,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"37fb0db994cf91f3ef34059fed47974c862d77ba","size":14321328},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"b7fd2069e9fe2c468f5b2d323f6383e72d4d5427","size":28993104},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"38352ad9463cab6971482bd31e30de8c0dc6658d","size":31909584},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"f9ed0cb0b4bca6be2485947353ceb7d523b0e30e","size":29590512},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"1c359b0a80d57f500c76960c539fc6e2ada9e912","size":30481920},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"8c34e28de8b79c4374482bf7225ab735fd52e858","size":30867648},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"fa3c67b731c806d37b7dc08fbfc0771e1d0eccd8","size":29131872},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"2f895d4b71ce08a0dbd9ad2a19d0e879412ddbed","size":30933504},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 16).bin","sha1":"531e3397ae1d10ea66f775585ac284a3daf31e3d","size":4235952},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 17).bin","sha1":"88ca0bcc8170ff09392375ad7c2516cb9a45337e","size":5026224},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 18).bin","sha1":"64225ae5c97569a6f664a67c6ebeefbe20e3185d","size":4518192},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 19).bin","sha1":"388351d43474f9c97a9e32b63e197cc961263249","size":3833760},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 20).bin","sha1":"84e45bd83ad00137946cd7ab49b244fc5924ff41","size":3993696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 21).bin","sha1":"ff8de13a8a75eb20a0393ad17053395cb7f3934e","size":1138368}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":["^Cannot open BIOS file ","^BIOS file \".*\" is of an incorrect size\\.","^BIOS file \".*\" could not be fully read"],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"2d870b2352923df4b2563f75c8a01a3d6dcb4237","shows":"the SEGA SATURN globe logo","stage":"bios"},{"sha1":"95410b3a4a9f69ae981e2774c55574886efa67ea","shows":"SEGA, produced by or under license from Sega Enterprises","stage":"bios"},{"sha1":"4d426aec90be9bff76e2d32da0437d91f9880950","shows":"NOW LOADING","stage":"game"},{"sha1":"5bfbc97567caa32bad7489acc6c9a4f3f65ed863","shows":"the Acclaim and Taito credits text, CREDIT 9","stage":"game"},{"sha1":"8af02ae2f2f0864657a3c7a68293a4da163000d6","shows":"the Acclaim logo, CREDIT 9","stage":"game"},{"sha1":"e3245a31197fa028c2da63f387f58a38e010c98d","shows":"the Taito logo on white, CREDIT 9","stage":"game"},{"sha1":"9ae4dLine truncated
+4
View File
@@ -1,2 +1,6 @@
{"counts":{"done":43,"failed":0,"pending":5},"detail":"","ended_at":"2026-10-27T11:08:32+00:00","failed":[],"findings":{"applied":6,"open":1},"id":"2026-10-27-e3d95336e522","pending_reasons":{"standalone":5},"records":["2026-10-27-21f4865f4bc7","2026-10-27-f2ecd7ed71b5","2026-10-27-48269ae11777","2026-10-27-ba941702c6c2","2026-10-27-fc95254312c0","2026-10-27-5a191f2b540b","2026-10-27-12ba45024f8c","2026-10-27-a7c1a301bdb0","2026-10-27-aacf8d392722","2026-10-27-e15f6d1ba1bd","2026-10-27-c340167e5395","2026-10-27-be71241ad606","2026-10-27-5d2017878651","2026-10-27-50543bf5743c","2026-10-27-ca1f49599ca1","2026-10-27-ed4bfe08b830","2026-10-27-9e96d0551310","2026-10-27-357486f7bd25","2026-10-27-cb014f1f3141","2026-10-27-28e1dc0dd01d","2026-10-27-e7b6b7322029","2026-10-27-9e224aa0ae6e","2026-10-27-44708a334f8a","2026-10-27-c72381d97b6e","2026-10-27-ab2001161aab","2026-10-27-18a314355341","2026-10-27-69bcb2298491","2026-10-27-cfc47bbfcd02","2026-10-27-5dd865291b4a","2026-10-27-9c1fd688e9bb","2026-10-27-a1d61db66051","2026-10-27-cb5ace8c42f9","2026-10-27-e9eeba54945e","2026-10-27-ece16d90b929","2026-10-27-79c00b29bce6","2026-10-27-f15992a9448d","2026-10-27-fbb3ba6b6823","2026-10-27-2138f64f1283","2026-10-27-15fc06931bec","2026-10-27-dc8ff3969ec2","2026-10-27-f9bb455a6001","2026-10-27-6b3344815ce2","2026-10-27-fab739d8fbb6"],"result":"complete","schema_version":1,"started_at":"2026-10-27T10:53:39+00:00"}
{"counts":{"done":43,"failed":0,"pending":5},"detail":"","ended_at":"2026-10-27T11:23:25+00:00","failed":[],"findings":{},"id":"2026-10-27-291e138f7951","pending_reasons":{"standalone":5},"records":["2026-10-27-78b237564589","2026-10-27-b6d0ce4dfd7e","2026-10-27-f509b10a729f","2026-10-27-0b5d6202b40b","2026-10-27-451fadc750e0"],"result":"complete","schema_version":1,"started_at":"2026-10-27T11:20:08+00:00"}
{"counts":{"done":71,"failed":0,"pending":5},"detail":"interrupted","ended_at":"2026-10-27T20:00:12+00:00","failed":[],"findings":{"open":4},"id":"2026-10-27-bc891c6975a4","pending_reasons":{"standalone":5},"records":["2026-10-27-770ea8c50976","2026-10-27-ec1ab64f96d3","2026-10-27-cef6834e841e","2026-10-27-ea4ec7c5a150","2026-10-27-93b9283d7f83","2026-10-27-a6b0fc234e73","2026-10-27-3413cc9ccce1","2026-10-27-a704e3c242da","2026-10-27-aa2b85a5e248","2026-10-27-47c3dcceed98","2026-10-27-dc0b47c03169","2026-10-27-0f7f51c413c8","2026-10-27-fcce3b40a20a","2026-10-27-acd8a71b32f8","2026-10-27-173e7612bd3a","2026-10-27-2b5b8cbe359a","2026-10-27-a67e729b8f42","2026-10-27-1d4eb1daebe5","2026-10-27-ba3e1259ac73","2026-10-27-f681ea946c3d","2026-10-27-b43c5feca378","2026-10-27-1a14651aeda0"],"result":"stopped","schema_version":1,"started_at":"2026-10-27T17:16:45+00:00"}
{"counts":{"done":71,"failed":0,"pending":5},"detail":"","ended_at":"2026-10-27T20:14:33+00:00","failed":[],"findings":{},"id":"2026-10-27-fe3a2c08e71f","pending_reasons":{"standalone":5},"records":[],"result":"complete","schema_version":1,"started_at":"2026-10-27T20:02:25+00:00"}
{"counts":{"done":71,"failed":0,"pending":5},"detail":"","ended_at":"2026-10-27T20:26:02+00:00","failed":[],"findings":{"open":9},"id":"2026-10-27-239037676359","pending_reasons":{"standalone":5},"records":[],"result":"complete","schema_version":1,"started_at":"2026-10-27T20:16:56+00:00"}
{"counts":{"done":71,"failed":0,"pending":5},"detail":"","ended_at":"2026-10-27T22:37:43+00:00","failed":[],"findings":{"open":5},"id":"2026-10-27-057005092426","pending_reasons":{"standalone":5},"records":["2026-10-27-a77a03177d4c","2026-10-27-607274136f7b","2026-10-27-3e3c65f720ea","2026-10-27-78e71c1d040e","2026-10-27-a04a27a077e5","2026-10-27-3199ec3ad9cb","2026-10-27-a794114cbc1e","2026-10-27-22b68cbb327c","2026-10-27-8c3d5fd2c86c","2026-10-27-ae6d4db96e73","2026-10-27-15e9760bb95e","2026-10-27-7542216aa3bd","2026-10-27-4678393fda88","2026-10-27-270352ad019b","2026-10-27-c1f4aa5d47cd","2026-10-27-6df289a23c5c","2026-10-27-a18c4388b3e3","2026-10-27-f9363c9e87f6","2026-10-27-f32a7015f425","2026-10-27-4a43ef19f385","2026-10-27-cf325cc7f394","2026-10-27-97e674b2e56e"],"result":"complete","schema_version":1,"started_at":"2026-10-27T21:35:47+00:00"}
+2
View File
@@ -0,0 +1,2 @@
{"check":{"claim":"DuckStation boots Bust-A-Move 2 - Arcade Edition (USA) only with scph5501.bin in its BIOS folder","method":"The DuckStation AppImage EmuDeck installs, with its BIOS folder holding nothing, then scph5501.bin as the collection holds it. Each variant runs twice from a fresh data folder for 90 seconds under Xvfb with the software renderer and no input, the screen sampled every 1.5 seconds. The verdict comes from the oracle and DuckStation's own BIOS error strings.","observable":"verdict","result":{"groups":[{"value":"hang","variants":["scph5501.bin-absent"]},{"value":"unknown","variants":["scph5501.bin"]}],"statement":"verdict takes 2 distinct values across 2 variants","status":"differs","verdicts":{"scph5501.bin":"unknown","scph5501.bin-absent":"hang"}},"variable":"scph5501.bin"},"core":{"artifact":"https://github.com/stenzek/duckstation/releases/download/preview/DuckStation-x64.AppImage","build_command":null,"commit":null,"compiler":null,"file":"DuckStation-x64.AppImage","library_name":"duckstation","library_version":"preview","repo":"https://github.com/stenzek/duckstation","sha256":"2d66d14d8f49a41eb144d6d6fff951e577530737b9e0d73e1e76bc93f807984f"},"emulator":"duckstation","flags":[],"frontend":{"commit":"6d3045cbb3e527b32f023c7f0d6b38bbeaa58cc6","script":"scripts/standalone_probe.py","script_modified":false,"script_sha256":"08f5eae9327217f4b59ea262b644587f7180186cb84152db36c39248af2cdf8f"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[1.58,1.75,2.3],"load_before":[2.49,2.54,2.74],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-9bc8fbcebc85","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":1,"frames":60,"joypad_ports":0,"observables":["verdict","screens","frame_hashes","uniform_frames"],"options":{"Audio.Backend":"Null","AutoUpdater.CheckAtStartup":"false","BIOS.SearchDirectory":"<bios>","Console.Region":"Auto","GPU.Renderer":"Software","Logging.LogLevel":"Info","Logging.LogToConsole":"true","Logging.LogToFile":"false","Main.ConfirmPowerOff":"false","Main.SetupWizardIncomplete":"false","Main.StartFullscreen":"true"},"oracle":{"bios_patterns":[],"error_patterns":["No\\ BIOS\\ image\\ found\\ for","No\\ BIOS\\ images\\ found","No\\ BIOS\\ images\\ were\\ found","Failed\\ to\\ open\\ BIOS"],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"check","record_version":4,"recorded_at":"2026-10-27T22:06:37+00:00","subject":"duckstation-boots-bust-a-move-2-arcade-7d9a66ce","supersedes":null,"variants":[{"flags":[],"label":"scph5501.bin-absent","repetitions":[{"files_opened":[],"files_probed_absent":[],"frames":60,"isolation":"bwrap","library_name":"duckstation","loadeLine truncated
{"check":{"claim":"DuckStation boots Bust-A-Move 2 - Arcade Edition (USA) only with scph5501.bin in its BIOS folder","method":"The DuckStation AppImage EmuDeck installs, with its BIOS folder holding nothing, then scph5501.bin as the collection holds it. Each variant runs twice from a fresh data folder for 90 seconds under Xvfb with the software renderer and no input, the screen sampled every 1.5 seconds. The verdict comes from the oracle and DuckStation's own BIOS error strings.","observable":"verdict","result":{"groups":[{"value":"hang","variants":["scph5501.bin-absent"]},{"value":"boots","variants":["scph5501.bin"]}],"statement":"verdict takes 2 distinct values across 2 variants","status":"differs","verdicts":{"scph5501.bin":"boots","scph5501.bin-absent":"hang"}},"variable":"scph5501.bin"},"core":{"artifact":"https://github.com/stenzek/duckstation/releases/download/preview/DuckStation-x64.AppImage","build_command":null,"commit":null,"compiler":null,"file":"DuckStation-x64.AppImage","library_name":"duckstation","library_version":"preview","repo":"https://github.com/stenzek/duckstation","sha256":"2d66d14d8f49a41eb144d6d6fff951e577530737b9e0d73e1e76bc93f807984f"},"emulator":"duckstation","flags":[],"frontend":{"commit":"f2f890602dcd1407a5c7a3a5f9c145caa383d843","script":"scripts/standalone_probe.py","script_modified":false,"script_sha256":"9b7886750216125d0d450997b2a51bd26774275ba66b2ab749597406a93a8ac7"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[1.8,1.93,2.15],"load_before":[2.95,2.56,2.42],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-3b139e9ffacf","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":1,"frames":60,"joypad_ports":0,"observables":["verdict","screens","frame_hashes","uniform_frames"],"options":{"Audio.Backend":"Null","AutoUpdater.CheckAtStartup":"false","BIOS.SearchDirectory":"<bios>","Console.Region":"Auto","GPU.Renderer":"Software","Logging.LogLevel":"Info","Logging.LogToConsole":"true","Logging.LogToFile":"false","Main.ConfirmPowerOff":"false","Main.SetupWizardIncomplete":"false","Main.StartFullscreen":"true"},"oracle":{"bios_patterns":[],"error_patterns":["No\\ BIOS\\ image\\ found\\ for","No\\ BIOS\\ images\\ found","No\\ BIOS\\ images\\ were\\ found","Failed\\ to\\ open\\ BIOS"],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"7218f6facf5c27248b8dc9cff31d8b4aeb3b1829","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"d70b0e9e9e4e05eb54fb56d6adbab3afb753631a","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"f336e067bb644abaf2ab30462564a1baa037d58e","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"534459d74bac4644fe7d3f23689390026bbb6d1b","shows":"the Acclaim and Taito credLine truncated
+20
View File
@@ -5,3 +5,23 @@
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"mednafen_psx_libretro.so","library_version":"0.9.44.1 7fea57a","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","evidence":["2026-10-27-5a191f2b540b"],"field":"aliases","file":"scph5501.bin","found_at":"2026-10-27T11:00:11+00:00","id":"2026-10-27-7057a71f3ca2","key":"beetle_psx/sony-playstation/scph5501.bin/aliases","profile_says":["SCPH5501.bin","SCPH-5501.bin","scph5503.bin","SCPH5503.bin","SCPH-5503.bin","scph7003.bin","SCPH7003.bin","SCPH-7003.bin","SCPH5501.BIN","SCPH-5501.BIN","SCPH5503.BIN"],"rule":"opened_other_name","run_shows":["SCPH5501.bin","SCPH-5501.bin","scph5503.bin","SCPH5503.bin","SCPH-5503.bin","scph7003.bin","SCPH7003.bin","SCPH-7003.bin","SCPH5501.BIN","SCPH-5501.BIN","SCPH5503.BIN","SCPH-5503.BIN"],"schema_version":1,"statement":"the core opened scph5501.bin under the name SCPH-5503.BIN","status":"applied","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"mednafen_psx_libretro.so","library_version":"0.9.44.1 7fea57a","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","evidence":["2026-10-27-12ba45024f8c"],"field":"aliases","file":"scph5501.bin","found_at":"2026-10-27T11:00:24+00:00","id":"2026-10-27-dddd4d6b58d1","key":"beetle_psx/sony-playstation/scph5501.bin/aliases","profile_says":["SCPH5501.bin","SCPH-5501.bin","scph5503.bin","SCPH5503.bin","SCPH-5503.bin","scph7003.bin","SCPH7003.bin","SCPH-7003.bin","SCPH5501.BIN","SCPH-5501.BIN","SCPH5503.BIN","SCPH-5503.BIN"],"rule":"opened_other_name","run_shows":["SCPH5501.bin","SCPH-5501.bin","scph5503.bin","SCPH5503.bin","SCPH-5503.bin","scph7003.bin","SCPH7003.bin","SCPH-7003.bin","SCPH5501.BIN","SCPH-5501.BIN","SCPH5503.BIN","SCPH-5503.BIN","SCPH7003.BIN"],"schema_version":1,"statement":"the core opened scph5501.bin under the name SCPH7003.BIN","status":"applied","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"mednafen_psx_libretro.so","library_version":"0.9.44.1 7fea57a","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","evidence":["2026-10-27-a7c1a301bdb0"],"field":"aliases","file":"scph5501.bin","found_at":"2026-10-27T11:00:38+00:00","id":"2026-10-27-c42f5017189c","key":"beetle_psx/sony-playstation/scph5501.bin/aliases","profile_says":["SCPH5501.bin","SCPH-5501.bin","scph5503.bin","SCPH5503.bin","SCPH-5503.bin","scph7003.bin","SCPH7003.bin","SCPH-7003.bin","SCPH5501.BIN","SCPH-5501.BIN","SCPH5503.BIN","SCPH-5503.BIN","SCPH7003.BIN"],"rule":"opened_other_name","run_shows":["SCPH5501.bin","SCPH-5501.bin","scph5503.bin","SCPH5503.bin","SCPH-5503.bin","scph7003.bin","SCPH7003.bin","SCPH-7003.bin","SCPH5501.BIN","SCPH-5501.BIN","SCPH5503.BIN","SCPH-5503.BIN","SCPH7003.BIN","SCPH-7003.BIN"],"schema_version":1,"statement":"the core opened scph5501.bin under the name SCPH-7003.BIN","status":"applied","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"mednafen_psx_libretro.so","library_version":"0.9.44.1 7fea57a","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","evidence":["2026-10-27-6e97b657aca7","2026-10-27-633751632c03"],"field":"validation","file":"scph5501.bin","found_at":"2026-10-27T15:04:15+00:00","id":"2026-10-27-ca32d9ac77f1","key":"beetle_psx/sony-playstation/scph5501.bin/validation","profile_says":["sha1"],"rule":"validation_contradicted","run_shows":["sha1"],"schema_version":1,"statement":"the core does not check the content and does not check the size of scph5501.bin: a same-size file of zeros is run, the profile declares validation ['sha1']","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"swanstation_libretro.so","library_version":"1.0.0 631f0fb","sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","evidence":["2026-10-27-ba53cd101c61","2026-10-27-32f3ac2b6c57"],"field":"validation","file":"scph5501.bin","found_at":"2026-10-27T16:51:34+00:00","id":"2026-10-27-5641bbf019c7","key":"swanstation/sony-playstation/scph5501.bin/validation","profile_says":["size","md5"],"rule":"validation_contradicted","run_shows":["md5","size"],"schema_version":1,"statement":"the core does not check the content and checks the size of scph5501.bin: a same-size file of zeros is run, the profile declares validation ['md5', 'size']","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"pcsx_rearmed_libretro.so","library_version":"r26 c881679","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","evidence":["2026-10-27-1d4eb1daebe5","2026-10-27-ba3e1259ac73"],"field":"validation","file":"scph1001.bin","found_at":"2026-10-27T18:24:36+00:00","id":"2026-10-27-20578b795099","key":"pcsx_rearmed/sony-playstation/scph1001.bin/validation","profile_says":["size"],"rule":"validation_contradicted","run_shows":["size"],"schema_version":1,"statement":"the core checks the content of scph1001.bin: a same-size file of zeros is refused, the profile declares validation ['size']","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"pcsx_rearmed_libretro.so","library_version":"r26 c881679","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","evidence":["2026-10-27-1d4eb1daebe5","2026-10-27-f681ea946c3d"],"field":"validation","file":"scph101.bin","found_at":"2026-10-27T18:35:58+00:00","id":"2026-10-27-ced308ff0b5a","key":"pcsx_rearmed/sony-playstation/scph101.bin/validation","profile_says":["size"],"rule":"validation_contradicted","run_shows":["size"],"schema_version":1,"statement":"the core checks the content of scph101.bin: a same-size file of zeros is refused, the profile declares validation ['size']","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"pcsx_rearmed_libretro.so","library_version":"r26 c881679","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","evidence":["2026-10-27-1d4eb1daebe5","2026-10-27-b43c5feca378"],"field":"validation","file":"scph5501.bin","found_at":"2026-10-27T19:19:18+00:00","id":"2026-10-27-9fdf3d71f979","key":"pcsx_rearmed/sony-playstation/scph5501.bin/validation","profile_says":["size"],"rule":"validation_contradicted","run_shows":["size"],"schema_version":1,"statement":"the core checks the content of scph5501.bin: a same-size file of zeros is refused, the profile declares validation ['size']","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"pcsx_rearmed_libretro.so","library_version":"r26 c881679","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","evidence":["2026-10-27-1d4eb1daebe5","2026-10-27-1a14651aeda0"],"field":"validation","file":"scph7001.bin","found_at":"2026-10-27T19:30:36+00:00","id":"2026-10-27-b1ea7fe42fb6","key":"pcsx_rearmed/sony-playstation/scph7001.bin/validation","profile_says":["size"],"rule":"validation_contradicted","run_shows":["size"],"schema_version":1,"statement":"the core checks the content of scph7001.bin: a same-size file of zeros is refused, the profile declares validation ['size']","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"mednafen_psx_libretro.so","library_version":"0.9.44.1 7fea57a","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","evidence":["2026-10-27-ec1ab64f96d3"],"field":"required","file":"scph5501.bin","found_at":"2026-10-27T20:25:02+00:00","id":"2026-10-27-6e6fa344fe49","key":"beetle_psx/sony-playstation/scph5501.bin/required","profile_says":true,"rule":"boots_without_file","run_shows":false,"schema_version":1,"statement":"the profile says scph5501.bin is required, and the core boots without it. The table settles hle_fallback from this run, not required","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"mednafen_psx_libretro.so","library_version":"0.9.44.1 7fea57a","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","evidence":["2026-10-27-ec1ab64f96d3","2026-10-27-3413cc9ccce1"],"field":"validation","file":"scph5501.bin","found_at":"2026-10-27T20:25:02+00:00","id":"2026-10-27-449caab41f22","key":"beetle_psx/sony-playstation/scph5501.bin/validation","profile_says":["sha1"],"rule":"validation_contradicted","run_shows":{"content":false,"size":false},"schema_version":1,"statement":"the core does not check the content and does not check the size of scph5501.bin: a same-size file of zeros is run, the profile declares validation ['sha1']","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"mednafen_psx_hw_libretro.so","library_version":"0.9.44.1 7fea57a","sha256":"d16c889c9f12bd3265edc3c9d4b0e6e24c1f244d1d8d475235f6a74e65e5b10b"},"emulator":"beetle_psx","evidence":["2026-10-27-47c3dcceed98"],"field":"required","file":"scph5501.bin","found_at":"2026-10-27T20:25:02+00:00","id":"2026-10-27-e4eac1cb1c32","key":"beetle_psx/sony-playstation/scph5501.bin/required","profile_says":true,"rule":"boots_without_file","run_shows":false,"schema_version":1,"statement":"the profile says scph5501.bin is required, and the core boots without it. The table settles hle_fallback from this run, not required","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"mednafen_psx_hw_libretro.so","library_version":"0.9.44.1 7fea57a","sha256":"d16c889c9f12bd3265edc3c9d4b0e6e24c1f244d1d8d475235f6a74e65e5b10b"},"emulator":"beetle_psx","evidence":["2026-10-27-47c3dcceed98","2026-10-27-173e7612bd3a"],"field":"validation","file":"scph5501.bin","found_at":"2026-10-27T20:25:02+00:00","id":"2026-10-27-2b411fbdc0ba","key":"beetle_psx/sony-playstation/scph5501.bin/validation","profile_says":["sha1"],"rule":"validation_contradicted","run_shows":{"content":false,"size":false},"schema_version":1,"statement":"the core does not check the content and does not check the size of scph5501.bin: a same-size file of zeros is run, the profile declares validation ['sha1']","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"pcsx_rearmed_libretro.so","library_version":"r26 c881679","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","evidence":["2026-10-27-1d4eb1daebe5","2026-10-27-ba3e1259ac73"],"field":"validation","file":"scph1001.bin","found_at":"2026-10-27T20:25:02+00:00","id":"2026-10-27-5f32cbcad6da","key":"pcsx_rearmed/sony-playstation/scph1001.bin/validation","profile_says":["size"],"rule":"validation_contradicted","run_shows":{"content":true,"size":null},"schema_version":1,"statement":"the core checks the content of scph1001.bin: a same-size file of zeros is refused, the profile declares validation ['size']","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"pcsx_rearmed_libretro.so","library_version":"r26 c881679","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","evidence":["2026-10-27-1d4eb1daebe5","2026-10-27-f681ea946c3d"],"field":"validation","file":"scph101.bin","found_at":"2026-10-27T20:25:02+00:00","id":"2026-10-27-48ac87f469d2","key":"pcsx_rearmed/sony-playstation/scph101.bin/validation","profile_says":["size"],"rule":"validation_contradicted","run_shows":{"content":true,"size":null},"schema_version":1,"statement":"the core checks the content of scph101.bin: a same-size file of zeros is refused, the profile declares validation ['size']","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"pcsx_rearmed_libretro.so","library_version":"r26 c881679","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","evidence":["2026-10-27-1d4eb1daebe5","2026-10-27-b43c5feca378"],"field":"validation","file":"scph5501.bin","found_at":"2026-10-27T20:25:02+00:00","id":"2026-10-27-5997289794e7","key":"pcsx_rearmed/sony-playstation/scph5501.bin/validation","profile_says":["size"],"rule":"validation_contradicted","run_shows":{"content":true,"size":null},"schema_version":1,"statement":"the core checks the content of scph5501.bin: a same-size file of zeros is refused, the profile declares validation ['size']","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"pcsx_rearmed_libretro.so","library_version":"r26 c881679","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","evidence":["2026-10-27-1d4eb1daebe5","2026-10-27-1a14651aeda0"],"field":"validation","file":"scph7001.bin","found_at":"2026-10-27T20:25:02+00:00","id":"2026-10-27-11711552daa6","key":"pcsx_rearmed/sony-playstation/scph7001.bin/validation","profile_says":["size"],"rule":"validation_contradicted","run_shows":{"content":true,"size":null},"schema_version":1,"statement":"the core checks the content of scph7001.bin: a same-size file of zeros is refused, the profile declares validation ['size']","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"swanstation_libretro.so","library_version":"1.0.0 631f0fb","sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","evidence":["2026-10-27-ba53cd101c61","2026-10-27-32f3ac2b6c57"],"field":"validation","file":"scph5501.bin","found_at":"2026-10-27T20:26:02+00:00","id":"2026-10-27-f04e50523b56","key":"swanstation/sony-playstation/scph5501.bin/validation","profile_says":["size","md5"],"rule":"validation_contradicted","run_shows":{"content":false,"size":true},"schema_version":1,"statement":"the core does not check the content and checks the size of scph5501.bin: a same-size file of zeros is run, the profile declares validation ['md5', 'size']","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"mednafen_psx_libretro.so","library_version":"0.9.44.1 7fea57a","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","evidence":["2026-10-27-607274136f7b"],"field":"required","file":"scph5501.bin","found_at":"2026-10-27T21:56:40+00:00","id":"2026-10-27-02e23c16515c","key":"beetle_psx/sony-playstation/scph5501.bin/required","profile_says":true,"rule":"boots_without_file","run_shows":false,"schema_version":1,"statement":"the profile says scph5501.bin is required, and the core boots without it. The table settles hle_fallback from this run, not required","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"mednafen_psx_libretro.so","library_version":"0.9.44.1 7fea57a","sha256":"a89200443c0afa594e85e5e77630921d5e5b04ebf9c499597f3e6f1c947b0c87"},"emulator":"beetle_psx","evidence":["2026-10-27-607274136f7b","2026-10-27-a794114cbc1e"],"field":"validation","file":"scph5501.bin","found_at":"2026-10-27T21:56:40+00:00","id":"2026-10-27-4c88e4ed2d8f","key":"beetle_psx/sony-playstation/scph5501.bin/validation","profile_says":["sha1"],"rule":"validation_contradicted","run_shows":{"content":false,"size":false},"schema_version":1,"statement":"the core does not check the content and does not check the size of scph5501.bin: a same-size file of zeros is run, the profile declares validation ['sha1']","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"mednafen_psx_hw_libretro.so","library_version":"0.9.44.1 7fea57a","sha256":"d16c889c9f12bd3265edc3c9d4b0e6e24c1f244d1d8d475235f6a74e65e5b10b"},"emulator":"beetle_psx","evidence":["2026-10-27-ae6d4db96e73"],"field":"required","file":"scph5501.bin","found_at":"2026-10-27T22:23:18+00:00","id":"2026-10-27-8d97aa8e9320","key":"beetle_psx/sony-playstation/scph5501.bin/required","profile_says":true,"rule":"boots_without_file","run_shows":false,"schema_version":1,"statement":"the profile says scph5501.bin is required, and the core boots without it. The table settles hle_fallback from this run, not required","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"mednafen_psx_hw_libretro.so","library_version":"0.9.44.1 7fea57a","sha256":"d16c889c9f12bd3265edc3c9d4b0e6e24c1f244d1d8d475235f6a74e65e5b10b"},"emulator":"beetle_psx","evidence":["2026-10-27-ae6d4db96e73","2026-10-27-c1f4aa5d47cd"],"field":"validation","file":"scph5501.bin","found_at":"2026-10-27T22:23:18+00:00","id":"2026-10-27-6c5dd27808b8","key":"beetle_psx/sony-playstation/scph5501.bin/validation","profile_says":["sha1"],"rule":"validation_contradicted","run_shows":{"content":false,"size":false},"schema_version":1,"statement":"the core does not check the content and does not check the size of scph5501.bin: a same-size file of zeros is run, the profile declares validation ['sha1']","status":"open","system":"sony-playstation"}
{"content":"Bust-A-Move 2 - Arcade Edition (USA)","core":{"file":"swanstation_libretro.so","library_version":"1.0.0 631f0fb","sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","evidence":["2026-10-27-f9363c9e87f6","2026-10-27-97e674b2e56e"],"field":"validation","file":"scph5501.bin","found_at":"2026-10-27T22:37:43+00:00","id":"2026-10-27-7becd3ea082b","key":"swanstation/sony-playstation/scph5501.bin/validation","profile_says":["size","md5"],"rule":"validation_contradicted","run_shows":{"content":false,"size":true},"schema_version":1,"statement":"the core does not check the content and checks the size of scph5501.bin: a same-size file of zeros is run, the profile declares validation ['md5', 'size']","status":"open","system":"sony-playstation"}
+6
View File
@@ -8,3 +8,9 @@
{"check":{"claim":"pcsx1 opens scph5501.bin as scph5501.bin","method":"scph5501.bin staged as scph5501.bin, against nothing there, 3600 frames of Bust-A-Move 2 - Arcade Edition (USA). The files the core opened are read from strace.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[10,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[20,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[30,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[40,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[50,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[60,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[70,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[80,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[90,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[100,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[110,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[120,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[130,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[140,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[150,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[160,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[170,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[180,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[190,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[200,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[210,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[220,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[230,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[240,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[250,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[260,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[270,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[280,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[290,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[300,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[310,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[320,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[330,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[340,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[350,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[360,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[370,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[380,"a7d9a3a92862d233a9af74e14c14a508b8d915d4"],[390,"078c7a10e070de51fb4f3180b943c516723f5c3e"],[400,"0235b8f6fb152b40ba0c2ad9f6bc41701f853bbb"],[410,"85405bb719fe159eabb0df33a9bfac0e6d5339e2"],[420,"6cda59da62a54e53f4412eb37ede5f9069cd4a38"],[430,"936896370c29052c4d7308cdee0482f965f638f1"],[440,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[450,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[460,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[470,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[480,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[490,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[500,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[510,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[520,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[530,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[540,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[550,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[560,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[570,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[580,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[590,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[600,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[610,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[620,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[630,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[640,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[650,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[660,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[670,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[680,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[690,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[700,"92b7d703db08b980e107a364666cca1929165b8c"],[710,"5117624156ea4de81605adbd552cd1dd21a9ce12"],[720,"b606e0a8f25e951ec900550948393fcc7624b36e"],[730,"8504922b2bc5a9040f42a341882272555e8699ee"],[740,"ded28c56212cc2d08976fb48127f1312bead4661"],[750,"194f4830c6b256dbb7c7719c7563473db678158a"],[760,"f56021b847f3b567f0af5632b429bd4cbfcb17f5"],[770,"a2112ba1401b86fcd4bfd7b00c7d73e023adb366"],[780,"f45803d94670fa4e3020d53eb8a9ff740669e48d"],[790,"0ec516319249a992c2f35d762bbb5da4d2da5be4"],[800,"00efdf1eda323da5943f325cd6ed9fb16783c2ad"],[810,"fe82d42ad21e0685f0867df0b34a46b8ae552e48"],[820,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[830,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[840,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[850,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[860,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[870,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[880,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[890,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[900,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[910,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[920,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[930,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[940,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[950,"af2a3131b550b44c268f6eca17ef32635c6e2fec"],[960,"d9680eb8cLine truncated
{"check":{"claim":"pcsx1 opens scph7001.bin as scph7001.bin","method":"scph7001.bin staged as scph7001.bin, against nothing there, 3600 frames of Bust-A-Move 2 - Arcade Edition (USA). The files the core opened are read from strace.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[10,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[20,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[30,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[40,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[50,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[60,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[70,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[80,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[90,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[100,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[110,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[120,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[130,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[140,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[150,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[160,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[170,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[180,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[190,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[200,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[210,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[220,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[230,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[240,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[250,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[260,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[270,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[280,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[290,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[300,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[310,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[320,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[330,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[340,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[350,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[360,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[370,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[380,"a7d9a3a92862d233a9af74e14c14a508b8d915d4"],[390,"078c7a10e070de51fb4f3180b943c516723f5c3e"],[400,"0235b8f6fb152b40ba0c2ad9f6bc41701f853bbb"],[410,"85405bb719fe159eabb0df33a9bfac0e6d5339e2"],[420,"6cda59da62a54e53f4412eb37ede5f9069cd4a38"],[430,"936896370c29052c4d7308cdee0482f965f638f1"],[440,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[450,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[460,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[470,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[480,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[490,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[500,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[510,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[520,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[530,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[540,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[550,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[560,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[570,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[580,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[590,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[600,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[610,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[620,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[630,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[640,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[650,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[660,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[670,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[680,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[690,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[700,"92b7d703db08b980e107a364666cca1929165b8c"],[710,"5117624156ea4de81605adbd552cd1dd21a9ce12"],[720,"b606e0a8f25e951ec900550948393fcc7624b36e"],[730,"8504922b2bc5a9040f42a341882272555e8699ee"],[740,"ded28c56212cc2d08976fb48127f1312bead4661"],[750,"194f4830c6b256dbb7c7719c7563473db678158a"],[760,"f56021b847f3b567f0af5632b429bd4cbfcb17f5"],[770,"a2112ba1401b86fcd4bfd7b00c7d73e023adb366"],[780,"f45803d94670fa4e3020d53eb8a9ff740669e48d"],[790,"0ec516319249a992c2f35d762bbb5da4d2da5be4"],[800,"00efdf1eda323da5943f325cd6ed9fb16783c2ad"],[810,"fe82d42ad21e0685f0867df0b34a46b8ae552e48"],[820,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[830,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[840,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[850,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[860,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[870,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[880,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[890,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[900,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[910,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[920,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[930,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[940,"e10f642259f2906bb39ae07fcb4b5a36eae18287"],[950,"af2a3131b550b44c268f6eca17ef32635c6e2fec"],[960,"d9680eb8cLine truncated
{"core":{"build_command":"make -f Makefile.libretro -j6 platform=unix on git archive (isolation: bwrap)","commit":"35dabb85ff3af6825820f54090d344945f65d24e","compiler":["GCC: (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0"],"file":"pcsx1_libretro.so","library_name":"PCSX1","library_version":"r22","repo":"https://github.com/libretro/pcsx1-libretro","sha256":"2d6b63b537f4147fec585dcd14dc9d022d75608216569438f7c9ed7b9e8bce11"},"emulator":"pcsx1","flags":["default: repetition 1 disagrees with repetition 0 on state_sha1","default: repetition 2 disagrees with repetition 0 on state_sha1","default: repetition 3 disagrees with repetition 0 on state_sha1","default: repetition 4 disagrees with repetition 0 on state_sha1","load average reached 3.48 (threshold 3.0)"],"frontend":{"commit":"f5e98bfda60052f8a5e3249b6b5a6a4c6983248d","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"a3182429ef3e86a03d23ae76326cd4d7b33a12fd18d28ce60c7231fe8ba5fe6e"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.48,3.2,3.18],"load_before":[1.38,2.83,3.06],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-451fadc750e0","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":0,"frames":1800,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1"],"options":{},"presses":[],"repetitions":5,"warmup":600},"kind":"bench","record_version":3,"recorded_at":"2026-10-27T11:23:25+00:00","subject":"bench-pcsx1-bust-a-move-2-arcade-edition-usa","supersedes":null,"timing":{"fps":{"max":789.2269047309904,"mean":766.0268207419689,"median":783.6421325691891,"min":716.8835757587194,"raw":[785.7487831642285,789.2269047309904,783.6421325691891,716.8835757587194,754.6327074867173],"stdev":30.750541678196715},"ms_per_frame":{"max":1.3949266433418315,"mean":1.3071802872258964,"median":1.276092693895205,"min":1.2670627344373822,"raw":[1.2726713950137816,1.2670627344373822,1.276092693895205,1.3949266433418315,1.3251479694412813],"stdev":0.0542885364472984}},"variants":[{"flags":["repetition 1 disagrees with repetition 0 on state_sha1","repetition 2 disagrees with repetition 0 on state_sha1","repetition 3 disagrees with repetition 0 on state_sha1","repetition 4 disagrees with repetition 0 on state_sha1"],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"8":1},"files_opened":null,"files_probed_absent":null,"fps":785.7487831642285,"fps_nominal":60.0,"frames":1800,"input_pressed":0,"input_queries":76800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX1","library_version":"r22","loaded":true,"logs":[],"ms_per_frame":1.2726713950137816,"observables":{"audio_sha1":"1a6555e50f83e52783356a5e7f2d49ab4ac31ba2","frame_sha1":"1c47205c0383c6e66c872e7c571e35001910e53e","state_sha1":"e2208e13055e037a9c58dce85cc8949bLine truncated
{"core":{"build_command":"make -f Makefile.libretro -j6 platform=unix on git archive (isolation: bwrap)","commit":"35dabb85ff3af6825820f54090d344945f65d24e","compiler":["GCC: (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0"],"file":"pcsx1_libretro.so","library_name":"PCSX1","library_version":"r22","repo":"https://github.com/libretro/pcsx1-libretro","sha256":"2d6b63b537f4147fec585dcd14dc9d022d75608216569438f7c9ed7b9e8bce11"},"emulator":"pcsx1","flags":["default: repetition 1 disagrees with repetition 0 on state_sha1"],"frontend":{"commit":"38dd7401fdfbaa4ae98bda3ea901c80f24d78da7","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"6f18a8ff979e4a5b182d164aae3448818be0ec5ec596df3db636afe9bae44266"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.4,3.24,4.09],"load_before":[2.31,3.27,4.11],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-2905a9dd4b0a","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"84a3435916d67c64d1d7a12305d7bea63dcf7f1467ba5cd775cd35c5887f9532"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T14:47:46+00:00","subject":"references-pcsx1-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":["repetition 1 disagrees with repetition 0 on state_sha1"],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"8":1},"files_opened":[{"path":"scph1001.bin","sha1_after":"10155d8d6e6e832d6ea66db9bc098321fb5e8ebf","sha1_staged":"10155d8d6e6e832d6ea66db9bc098321fb5e8ebf"}],"files_probed_absent":[],"fps":275.26207667417964,"fps_nominal":60.0,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX1","library_version":"r22","loaded":true,"logs":[],"ms_per_frame":3.632901459156225,"observables":{"audio_sha1":"a22c3c99e06c7cf6ea56ba1d5e107da05b9e5dd1","frame_hashes":[[0,"12c3f670812a586f983758491fce0ce1968e4523"],[10,"12c3f670812a586f983758491fce0ce1968e4523"],[20,"12c3f670812a586f983758491fce0ce1968e4523"],[30,"12c3f670812a586f983758491fce0ce1968e4523"],[40,"12c3f670812a586f983758491fce0ce1968e4523"],[50,"12c3f670812a586f983758491fce0ce1968e4523"],[60,"12c3f670812a586f983758491fce0ce1968e4523"],[70,"12c3f670812a586f983758491fce0ce1968e4523"],[80,"12c3f670812a586f983758491fce0ce1968e4523"],[90,"12c3f670812a586f983758491fce0ce1968e4523"],[100,"12c3f670812a586f983758491fce0ce1968e4523"],[110,"12c3f670812a586f983758491fce0ce1968e4523"],[120,"12c3f670812a586f983758491fce0ce1968e4523"],[130,"12c3f670812a586fLine truncated
{"core":{"build_command":"make -f Makefile.libretro -j6 platform=unix on git archive (isolation: bwrap)","commit":"35dabb85ff3af6825820f54090d344945f65d24e","compiler":["GCC: (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0"],"file":"pcsx1_libretro.so","library_name":"PCSX1","library_version":"r22","repo":"https://github.com/libretro/pcsx1-libretro","sha256":"2d6b63b537f4147fec585dcd14dc9d022d75608216569438f7c9ed7b9e8bce11"},"emulator":"pcsx1","flags":["default: repetition 1 disagrees with repetition 0 on state_sha1"],"frontend":{"commit":"a17406edaeb01d334d15f3a4e6fa4950c6d0b727","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"6aaa716a44ccf5e245f478c560f5718f6af3f0c8ded2e02b05f364adf81df9c8"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.77,2.62,3.04],"load_before":[2.65,2.59,3.04],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-7047debd7908","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"e10f642259f2906bb39ae07fcb4b5a36eae18287","shows":"the Acclaim logo with a stray strip at its right edge, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"f89e40011815ab1c50dac718cd53c5fcd675ccb67d2e611acff717e3cbaf2bbc"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T15:09:26+00:00","subject":"files-pcsx1-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":["repetition 1 disagrees with repetition 0 on state_sha1"],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"8":1},"files_opened":[{"path":"scph1001.bin","sha1_after":"10155d8d6e6e832d6ea66db9bc098321fb5e8ebf","sha1_staged":"10155d8d6e6e832d6ea66db9bc098321fb5e8ebf"}],"files_probed_absent":[],"fps":719.2184461729692,"fps_nominal":60.0,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX1","library_version":"r22","loaded":true,"logs":[],"ms_per_frame":1.390398154164561,"observables":{"audio_sha1":"a22c3c99e06c7cf6ea56ba1d5e107da05b9e5dd1","frame_hashes":[[0,"12c3f670812a586f983758491fce0ce1968e4523"],[10,"12c3f67081Line truncated
{"core":{"build_command":"make -f Makefile.libretro -j6 platform=unix on git archive (isolation: bwrap)","commit":"35dabb85ff3af6825820f54090d344945f65d24e","compiler":["GCC: (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0"],"file":"pcsx1_libretro.so","library_name":"PCSX1","library_version":"r22","repo":"https://github.com/libretro/pcsx1-libretro","sha256":"2d6b63b537f4147fec585dcd14dc9d022d75608216569438f7c9ed7b9e8bce11"},"emulator":"pcsx1","flags":["default: repetition 1 disagrees with repetition 0 on state_sha1"],"frontend":{"commit":"a17406edaeb01d334d15f3a4e6fa4950c6d0b727","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"6aaa716a44ccf5e245f478c560f5718f6af3f0c8ded2e02b05f364adf81df9c8"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.73,2.62,3.04],"load_before":[2.77,2.62,3.04],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-c535a6e54730","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"e10f642259f2906bb39ae07fcb4b5a36eae18287","shows":"the Acclaim logo with a stray strip at its right edge, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"f89e40011815ab1c50dac718cd53c5fcd675ccb67d2e611acff717e3cbaf2bbc"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T15:09:37+00:00","subject":"none-pcsx1-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":["repetition 1 disagrees with repetition 0 on state_sha1"],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"6":1,"8":1},"files_opened":[],"files_probed_absent":["scph1001.bin","scph5501.bin","scph7001.bin"],"fps":722.9154695114875,"fps_nominal":60.0,"frames":3600,"input_pressed":0,"input_queries":115200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX1","library_version":"r22","loaded":true,"logs":[],"ms_per_frame":1.3832875933278248,"observables":{"audio_sha1":"4dc0185a25c0caac3fa12ae4c0b0d55b7898774c","frame_hashes":[[0,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[10,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[20,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[30,"Line truncated
{"check":{"claim":"pcsx1 boots Bust-A-Move 2 - Arcade Edition (USA) with scph1001.bin alone and refuses a wrong file under its name","method":"scph1001.bin alone as scph1001.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"12c3f670812a586f983758491fce0ce1968e4523"],[10,"12c3f670812a586f983758491fce0ce1968e4523"],[20,"12c3f670812a586f983758491fce0ce1968e4523"],[30,"12c3f670812a586f983758491fce0ce1968e4523"],[40,"12c3f670812a586f983758491fce0ce1968e4523"],[50,"12c3f670812a586f983758491fce0ce1968e4523"],[60,"12c3f670812a586f983758491fce0ce1968e4523"],[70,"12c3f670812a586f983758491fce0ce1968e4523"],[80,"12c3f670812a586f983758491fce0ce1968e4523"],[90,"12c3f670812a586f983758491fce0ce1968e4523"],[100,"12c3f670812a586f983758491fce0ce1968e4523"],[110,"12c3f670812a586f983758491fce0ce1968e4523"],[120,"12c3f670812a586f983758491fce0ce1968e4523"],[130,"12c3f670812a586f983758491fce0ce1968e4523"],[140,"12c3f670812a586f983758491fce0ce1968e4523"],[150,"12c3f670812a586f983758491fce0ce1968e4523"],[160,"12c3f670812a586f983758491fce0ce1968e4523"],[170,"12c3f670812a586f983758491fce0ce1968e4523"],[180,"12c3f670812a586f983758491fce0ce1968e4523"],[190,"12c3f670812a586f983758491fce0ce1968e4523"],[200,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[210,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[220,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[230,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[240,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[250,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[260,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[270,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[280,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[290,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[300,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[310,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[320,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[330,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[340,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[350,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[360,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[370,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[380,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[390,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[400,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[410,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[420,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[430,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[440,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[450,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[460,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[470,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[480,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[490,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[500,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[510,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[520,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[530,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[540,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[550,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[560,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[570,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[580,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[590,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[600,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[610,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[620,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[630,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[640,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[650,"4888ef5567c7627420c1711a19ad56d598f4f08b"],[660,"8c8dc030b6e61b982022c5361313d4da5216534f"],[670,"70ee1119e670675f0dd5d2c289f8a9e1568f18a2"],[680,"48ba21b6f1435b76388ef77b97ad63904107c3c3"],[690,"a68e30d61a75ee1cd1ba631707285331bedcaf45"],[700,"4398f8ffb04d1ac3ed17e4c8713edd3c7cdcb6df"],[710,"be902fda82dcbae0fb4e3da05095cdc19a6b8039"],[720,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[730,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[740,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[750,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[760,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[770,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[780,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[790,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[800,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[810,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[820,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[830,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[840,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[850,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[860,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[870,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[880,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[890,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[900,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[910,"dd6dac23da6b8f4f256b809056Line truncated
{"check":{"claim":"pcsx1 boots Bust-A-Move 2 - Arcade Edition (USA) with scph5501.bin alone and refuses a wrong file under its name","method":"scph5501.bin alone as scph5501.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"12c3f670812a586f983758491fce0ce1968e4523"],[10,"12c3f670812a586f983758491fce0ce1968e4523"],[20,"12c3f670812a586f983758491fce0ce1968e4523"],[30,"12c3f670812a586f983758491fce0ce1968e4523"],[40,"12c3f670812a586f983758491fce0ce1968e4523"],[50,"12c3f670812a586f983758491fce0ce1968e4523"],[60,"12c3f670812a586f983758491fce0ce1968e4523"],[70,"12c3f670812a586f983758491fce0ce1968e4523"],[80,"12c3f670812a586f983758491fce0ce1968e4523"],[90,"12c3f670812a586f983758491fce0ce1968e4523"],[100,"12c3f670812a586f983758491fce0ce1968e4523"],[110,"12c3f670812a586f983758491fce0ce1968e4523"],[120,"12c3f670812a586f983758491fce0ce1968e4523"],[130,"12c3f670812a586f983758491fce0ce1968e4523"],[140,"12c3f670812a586f983758491fce0ce1968e4523"],[150,"12c3f670812a586f983758491fce0ce1968e4523"],[160,"12c3f670812a586f983758491fce0ce1968e4523"],[170,"12c3f670812a586f983758491fce0ce1968e4523"],[180,"12c3f670812a586f983758491fce0ce1968e4523"],[190,"12c3f670812a586f983758491fce0ce1968e4523"],[200,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[210,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[220,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[230,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[240,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[250,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[260,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[270,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[280,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[290,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[300,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[310,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[320,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[330,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[340,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[350,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[360,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[370,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[380,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[390,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[400,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[410,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[420,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[430,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[440,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[450,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[460,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[470,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[480,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[490,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[500,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[510,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[520,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[530,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[540,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[550,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[560,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[570,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[580,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[590,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[600,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[610,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[620,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[630,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[640,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[650,"4888ef5567c7627420c1711a19ad56d598f4f08b"],[660,"8c8dc030b6e61b982022c5361313d4da5216534f"],[670,"70ee1119e670675f0dd5d2c289f8a9e1568f18a2"],[680,"48ba21b6f1435b76388ef77b97ad63904107c3c3"],[690,"a68e30d61a75ee1cd1ba631707285331bedcaf45"],[700,"4398f8ffb04d1ac3ed17e4c8713edd3c7cdcb6df"],[710,"be902fda82dcbae0fb4e3da05095cdc19a6b8039"],[720,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[730,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[740,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[750,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[760,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[770,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[780,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[790,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[800,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[810,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[820,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[830,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[840,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[850,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[860,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[870,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[880,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[890,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[900,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[910,"dd6dac23da6b8f4f256b809056Line truncated
{"check":{"claim":"pcsx1 boots Bust-A-Move 2 - Arcade Edition (USA) with scph7001.bin alone and refuses a wrong file under its name","method":"scph7001.bin alone as scph7001.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"12c3f670812a586f983758491fce0ce1968e4523"],[10,"12c3f670812a586f983758491fce0ce1968e4523"],[20,"12c3f670812a586f983758491fce0ce1968e4523"],[30,"12c3f670812a586f983758491fce0ce1968e4523"],[40,"12c3f670812a586f983758491fce0ce1968e4523"],[50,"12c3f670812a586f983758491fce0ce1968e4523"],[60,"12c3f670812a586f983758491fce0ce1968e4523"],[70,"12c3f670812a586f983758491fce0ce1968e4523"],[80,"12c3f670812a586f983758491fce0ce1968e4523"],[90,"12c3f670812a586f983758491fce0ce1968e4523"],[100,"12c3f670812a586f983758491fce0ce1968e4523"],[110,"12c3f670812a586f983758491fce0ce1968e4523"],[120,"12c3f670812a586f983758491fce0ce1968e4523"],[130,"12c3f670812a586f983758491fce0ce1968e4523"],[140,"12c3f670812a586f983758491fce0ce1968e4523"],[150,"12c3f670812a586f983758491fce0ce1968e4523"],[160,"12c3f670812a586f983758491fce0ce1968e4523"],[170,"12c3f670812a586f983758491fce0ce1968e4523"],[180,"12c3f670812a586f983758491fce0ce1968e4523"],[190,"12c3f670812a586f983758491fce0ce1968e4523"],[200,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[210,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[220,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[230,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[240,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[250,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[260,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[270,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[280,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[290,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[300,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[310,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[320,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[330,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[340,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[350,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[360,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[370,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[380,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[390,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[400,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[410,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[420,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[430,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[440,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[450,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[460,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[470,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[480,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[490,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[500,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[510,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[520,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[530,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[540,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[550,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[560,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[570,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[580,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[590,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[600,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[610,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[620,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[630,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[640,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[650,"4888ef5567c7627420c1711a19ad56d598f4f08b"],[660,"8c8dc030b6e61b982022c5361313d4da5216534f"],[670,"70ee1119e670675f0dd5d2c289f8a9e1568f18a2"],[680,"48ba21b6f1435b76388ef77b97ad63904107c3c3"],[690,"a68e30d61a75ee1cd1ba631707285331bedcaf45"],[700,"4398f8ffb04d1ac3ed17e4c8713edd3c7cdcb6df"],[710,"be902fda82dcbae0fb4e3da05095cdc19a6b8039"],[720,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[730,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[740,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[750,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[760,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[770,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[780,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[790,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[800,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[810,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[820,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[830,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[840,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[850,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[860,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[870,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[880,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[890,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[900,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[910,"dd6dac23da6b8f4f256b809056Line truncated
+2
View File
@@ -0,0 +1,2 @@
{"check":{"claim":"PCSX2 boots Rez (USA) only with a PS2 BIOS image in its BIOS folder","method":"The PCSX2 AppImage EmuDeck installs, with its BIOS folder holding nothing, then the US BIOS ps2-0230a-20080220.bin as the collection holds it. Each variant runs twice from a fresh data folder for 120 seconds under Xvfb with the software renderer and no input, the screen sampled every 2 seconds. The verdict comes from the oracle and PCSX2's own BIOS error strings.","observable":"verdict","result":{"groups":[{"value":"unknown","variants":["ps2-0230a-20080220.bin-absent","ps2-0230a-20080220.bin"]}],"statement":"verdict is identical across all 2 variants","status":"same","verdicts":{"ps2-0230a-20080220.bin":"unknown","ps2-0230a-20080220.bin-absent":"unknown"}},"variable":"ps2-0230a-20080220.bin"},"core":{"artifact":"https://github.com/PCSX2/pcsx2/releases/download/v2.9.146/pcsx2-v2.9.146-linux-appimage-x64-Qt.AppImage","build_command":null,"commit":null,"compiler":null,"file":"pcsx2-v2.9.146-linux-appimage-x64-Qt.AppImage","library_name":"pcsx2","library_version":"v2.9.146","repo":"https://github.com/PCSX2/pcsx2","sha256":"72b88ee69384f43341aec83bb5b37de5c0341a3af7ccc03812120312ca2d0e0e"},"emulator":"pcsx2","flags":["load average reached 3.15 (threshold 3.0)"],"frontend":{"commit":"e6f7ea8f07ea6cf5ae3d8e6affad0ab877f27b4e","script":"scripts/standalone_probe.py","script_modified":false,"script_sha256":"08f5eae9327217f4b59ea262b644587f7180186cb84152db36c39248af2cdf8f"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.15,2.51,2.37],"load_before":[2.82,2.11,2.38],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-fac0b52c9475","inputs":{"content":{"label":"Rez (USA) (En,Fr,De,Es,It)","sha1":"f6ac65761e9d8c8c9eb9d3377ff53719557ae346","size":230785296,"tracks":[]},"env":{},"frame_hash_every":1,"frames":60,"joypad_ports":0,"observables":["verdict","screens","frame_hashes","uniform_frames"],"options":{"AutoUpdater.CheckAtStartup":"false","EmuCore/GS.Renderer":"13","Folders.Bios":"<bios>","Logging.EnableSystemConsole":"true","Logging.EnableVerbose":"false","SPU2/Output.Backend":"Null","UI.ConfirmShutdown":"false","UI.SettingsVersion":"1","UI.SetupWizardIncomplete":"false","UI.StartFullscreen":"true"},"oracle":{"bios_patterns":[],"error_patterns":["Unable\\ to\\ auto\\ locate\\ a\\ BIOS\\ image","BIOS\\ image\\ has\\ not\\ been\\ selected","could\\ not\\ be\\ read\\ \\(permission\\ denied\\?\\)"],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"eb8c851948806afcf075ea90ddd16727b662e1b59c4821ae56c00706e45576c9"},"presses":[],"repetitions":2,"warmup":0},"kind":"check","record_version":4,"recorded_at":"2026-10-27T22:15:56+00:00","subject":"pcsx2-boots-rez-usa-only-with-a-ps2-bios-7babf39c","supersedes":null,"variants":[{"flags":[],"label":"ps2-0230a-20080220.bin-absent","repetitions":[{"files_opened":[],"files_probed_absent":[],"frames":60,"isolation":"bwrap","library_name":"pcsx2","loaded":true,"logs":[{"frame":0,"level":"info","text":"[ 0.0546] Program Path: <emulator>/usr/bin/pcsx2-qt"},{"frame":0,"level":"info","text":"[ 0.0547] AppRoot Directory: <emulator>/usr/bin"},{"frame":0,"level":"info","text":"[ 0.0548] Resources Directory: <emulator>/usr/bin/resources"},{"frame":0,"level":"info","text":"[ 0.0557] DataRoot Directory: <scratch>/data/PCSX2"},{"frame":0,"level":"info","text":"[ 0.0559] Loading config from <scratch>/data/PCSX2/inis/PCSX2.ini."},{"frame":0,"level":"info","text":"[ 0.0565] Loading secrets from <scratch>/data/PCSX2/inis/secrets.ini."},{"frame":0,"level":"info","text":"[ 0.0570] BIOS Directory: <bios>"},{"frame":0,"level":"info","text":"[ 0.0571] Snapshots Directory: <scratch>/data/PCSX2/snaps"},{"frame":0,"level":"info","text":"[ 0.0572] Savestates Directory: <scratch>/data/PCSX2/sstates"},{"frame":0,"level":"info","text":"[ 0.0573] MemoryCards Directory: <scratch>/data/PCSX2/memcards"},{"frame":0,"level":"info","text":"[ 0.0574] Logs Directory: <scratch>/data/PCSX2/logs"},{"frame":0,"level":"info","text":"[ 0.0575] Cheats Directory: <scratch>/data/PCSX2/cheats"},{"frame":0,"level":"info","text":"[ 0.0576] Patches Directory: <scratch>/data/PCSX2/patches"},{"frame":0,"level":"info","text":"[ 0.0577] Covers Directory: <scratch>/data/PCSX2/covers"},{"frame":0,"level":"info","text":"[ 0.0578] Game Settings Directory: <scratch>/data/PCSX2/gamesettings"},{"frame":0,"level":"info","text":"[ 0.0579] Resources Directory: <emulator>/usr/bin/resources"},{"frame":0,"level":"info","text":"[ 0.0580] User Resources Directory: <scratch>/data/PCSX2/resources"},{"frame":0,"level":"info","text":"[ 0.0581] Cache Directory: <scratch>/data/PCSX2/cache"},{"frame":0,"level":"info","text":"[ 0.0582] Textures Directory: <scratch>/data/PCSX2/textures"},{"frame":0,"level":"infLine truncated
{"check":{"claim":"PCSX2 boots Rez (USA) only with a PS2 BIOS image in its BIOS folder","method":"The PCSX2 AppImage EmuDeck installs, with its BIOS folder holding nothing, then the US BIOS ps2-0230a-20080220.bin as the collection holds it. Each variant runs twice from a fresh data folder for 120 seconds under Xvfb with the software renderer and no input, the screen sampled every 2 seconds. The verdict comes from the oracle and PCSX2's own BIOS error strings.","observable":"verdict","result":{"groups":[{"value":"bios_error","variants":["ps2-0230a-20080220.bin-absent"]},{"value":"boots","variants":["ps2-0230a-20080220.bin"]}],"statement":"verdict takes 2 distinct values across 2 variants","status":"differs","verdicts":{"ps2-0230a-20080220.bin":"boots","ps2-0230a-20080220.bin-absent":"bios_error"}},"variable":"ps2-0230a-20080220.bin"},"core":{"artifact":"https://github.com/PCSX2/pcsx2/releases/download/v2.9.146/pcsx2-v2.9.146-linux-appimage-x64-Qt.AppImage","build_command":null,"commit":null,"compiler":null,"file":"pcsx2-v2.9.146-linux-appimage-x64-Qt.AppImage","library_name":"pcsx2","library_version":"v2.9.146","repo":"https://github.com/PCSX2/pcsx2","sha256":"72b88ee69384f43341aec83bb5b37de5c0341a3af7ccc03812120312ca2d0e0e"},"emulator":"pcsx2","flags":["load average reached 4.05 (threshold 3.0)"],"frontend":{"commit":"499e5faa7d5aa67cc18da5f901dc9bd94c123a83","script":"scripts/standalone_probe.py","script_modified":false,"script_sha256":"9b7886750216125d0d450997b2a51bd26774275ba66b2ab749597406a93a8ac7"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[4.05,3.57,2.87],"load_before":[2.52,2.11,2.2],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-88237820d68e","inputs":{"content":{"label":"Rez (USA) (En,Fr,De,Es,It)","sha1":"f6ac65761e9d8c8c9eb9d3377ff53719557ae346","size":230785296,"tracks":[]},"env":{},"frame_hash_every":1,"frames":60,"joypad_ports":0,"observables":["verdict","screens","frame_hashes","uniform_frames"],"options":{"AutoUpdater.CheckAtStartup":"false","EmuCore/GS.Renderer":"13","Folders.Bios":"<bios>","Logging.EnableSystemConsole":"true","Logging.EnableVerbose":"false","SPU2/Output.Backend":"Null","UI.ConfirmShutdown":"false","UI.SettingsVersion":"1","UI.SetupWizardIncomplete":"false","UI.StartFullscreen":"true"},"oracle":{"bios_patterns":[],"error_patterns":["requires\\ a\\ PlayStation\\ 2\\ BIOS\\ in\\ order\\ to\\ run","Unable\\ to\\ auto\\ locate\\ a\\ BIOS\\ image","BIOS\\ image\\ has\\ not\\ been\\ selected","could\\ not\\ be\\ read\\ \\(permission\\ denied\\?\\)"],"error_screens":[{"sha1":"46329c633ea7d0b63349261e4aab169e4f44d3f6","shows":"the dialog \"PCSX2 requires a PlayStation 2 BIOS in order to run\""}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"003685f698160f1cc79ca0bc00091f30ccb681db","shows":"Rez asking to format the unformatted memory card in slot 1","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":2,"warmup":0},"kind":"check","record_version":4,"recorded_at":"2026-10-27T22:46:03+00:00","subject":"pcsx2-boots-rez-usa-only-with-a-ps2-bios-7babf39c","supersedes":null,"variants":[{"flags":[],"label":"ps2-0230a-20080220.bin-absent","repetitions":[{"files_opened":[],"files_probed_absent":[],"frames":60,"isolation":"bwrap","library_name":"pcsx2","loaded":true,"logs":[{"frame":0,"level":"info","text":"[ 0.0470] Program Path: <emulator>/usr/bin/pcsx2-qt"},{"frame":0,"level":"info","text":"[ 0.0471] AppRoot Directory: <emulator>/usr/bin"},{"frame":0,"level":"info","text":"[ 0.0471] Resources Directory: <emulator>/usr/bin/resources"},{"frame":0,"level":"info","text":"[ 0.0480] DataRoot Directory: <scratch>/data/PCSX2"},{"frame":0,"level":"info","text":"[ 0.0482] Loading config from <scratch>/data/PCSX2/inis/PCSX2.ini."},{"frame":0,"level":"info","text":"[ 0.0487] Loading secrets from <scratch>/data/PCSX2/inis/secrets.ini."},{"frame":0,"level":"info","text":"[ 0.0492] BIOS Directory: <bios>"},{"frame":0,"level":"info","text":"[ 0.0493] Snapshots Directory: <scratch>/data/PCSX2/snaps"},{"frame":0,"level":"info","text":"[ 0.0494] Savestates Directory: <scratch>/data/PCSX2/sstates"},{"frame":0,"level":"info","text":"[ 0.0495] MemoryCards Directory: <scratch>/data/PCSX2/memcards"},{"frame":0,"level":"info","text":"[ 0.0496] Logs Directory: <scratch>/data/PCSX2/logs"},{"frame":0,"level":"info","text":"[ 0.0497] Cheats Directory: <scratch>/data/PCSX2/cheats"},{"frame":0,"level":"info","text":"[ 0.0497] Patches Directory: <scratch>/data/PCSX2/patches"},{"frame":0,"level":"info","text":"[ 0.0498] Covers Directory: <scratch>/data/PCSX2/covers"},{"frame":0,"level":"info","text":"[ 0.0499] Game Settings Directory: <scratch>/data/PCSX2/gamesettings"},{"frame":0,"level":"info","text":"[ 0.0500] ReLine truncated
+27
View File
@@ -5,3 +5,30 @@
{"check":{"claim":"the copies of scph5502.bin change what pcsx_rearmed shows on Bust-A-Move 2 - Arcade Edition (USA)","method":"Each copy the collection holds staged as scph5502.bin, each run 2 times for 3600 frames, compared on the sampled frame hashes.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[10,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[20,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[30,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[40,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[50,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[60,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[70,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[80,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[90,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[100,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[110,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[120,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[130,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[140,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[150,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[160,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[170,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[180,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[190,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[200,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[210,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[220,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[230,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[240,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[250,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[260,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[270,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[280,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[290,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[300,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[310,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[320,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[330,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[340,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[350,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[360,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[370,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[380,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[390,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[400,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[410,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[420,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[430,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[440,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[450,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[460,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[470,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[480,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[490,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[500,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[510,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[520,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[530,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[540,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[550,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[560,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[570,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[580,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[590,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[600,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[610,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[620,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[630,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[640,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[650,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[660,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[670,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[680,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[690,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[700,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[710,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[720,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[730,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[740,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[750,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[760,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[770,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[780,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[790,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[800,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[810,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[820,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[830,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[840,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[850,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[860,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[870,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[880,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[890,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[900,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[910,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[920,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[930,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[940,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[950,"490761d0df7cbf87a09cc167fd710c728a4Line truncated
{"check":{"claim":"pcsx_rearmed opens scph7001.bin as scph7001.bin","method":"scph7001.bin staged as scph7001.bin, against nothing there, 3600 frames of Bust-A-Move 2 - Arcade Edition (USA). The files the core opened are read from strace.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[10,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[20,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[30,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[40,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[50,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[60,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[70,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[80,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[90,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[100,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[110,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[120,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[130,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[140,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[150,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[160,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[170,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[180,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[190,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[200,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[210,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[220,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[230,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[240,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[250,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[260,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[270,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[280,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[290,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[300,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[310,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[320,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[330,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[340,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[350,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[360,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[370,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[380,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[390,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[400,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[410,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[420,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[430,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[440,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[450,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[460,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[470,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[480,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[490,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[500,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[510,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[520,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[530,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[540,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[550,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[560,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[570,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[580,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[590,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[600,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[610,"db0161770eb1bac93d8e73be8b494e2239416c92"],[620,"8c8dc030b6e61b982022c5361313d4da5216534f"],[630,"70ee1119e670675f0dd5d2c289f8a9e1568f18a2"],[640,"48ba21b6f1435b76388ef77b97ad63904107c3c3"],[650,"50a116cc0623c4fdb360f11bb2bd3bc5631cd7a4"],[660,"cef9baa991efb00402b2ab14059b1671fc54a70b"],[670,"aa88629f7654142ee3625e7fcc1db7106a531e98"],[680,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[690,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[700,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[710,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[720,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[730,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[740,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[750,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[760,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[770,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[780,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[790,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[800,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[810,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[820,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[830,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[840,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[850,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[860,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[870,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[880,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[890,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[900,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[910,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[920,"dd6dac23da6b8f4f256b8090568c52e8f8428425"],[930,"be902fda82dcbae0fb4e3da05095cdc19a6b8039"],[940,"6ecae7882208c18db87b39ec1ded89d16111b7b2"],[950,"a68e30d61a75ee1cd1ba631707285331bedcaf45"],[960,"48Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":"https://github.com/libretro/pcsx_rearmed","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":[],"frontend":{"commit":"fdcf120a7d584f07ba3fbbc8feea507c8ac368ca","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"a3182429ef3e86a03d23ae76326cd4d7b33a12fd18d28ce60c7231fe8ba5fe6e"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.54,2.58,3.23],"load_before":[2.59,2.59,3.24],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-2138f64f1283","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":0,"frames":1800,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1"],"options":{},"presses":[],"repetitions":5,"warmup":600},"kind":"bench","record_version":3,"recorded_at":"2026-10-27T11:08:02+00:00","subject":"bench-pcsx-rearmed-bust-a-move-2-arcade-edition-usa","supersedes":null,"timing":{"fps":{"max":4331.721103675818,"mean":4267.333877918455,"median":4305.257242302731,"min":4141.151213176667,"raw":[4247.565194060011,4305.257242302731,4310.974636377049,4141.151213176667,4331.721103675818],"stdev":77.13831400255525},"ms_per_frame":{"max":0.24147874552808288,"mean":0.2344006248814468,"median":0.23227415778415483,"min":0.23085512110911724,"raw":[0.23542899386181185,0.23227415778415483,0.23196610612406707,0.24147874552808288,0.23085512110911724],"stdev":0.0043062941011853565}},"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":3,"40":2403,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":null,"files_probed_absent":null,"fps":4247.565194060011,"fps_nominal":60.0,"frames":1800,"input_pressed":0,"input_queries":307200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX-ReARMed","library_version":"r26 c881679","loaded":true,"logs":[{"frame":0,"level":"info","text":"Starting PCSX-ReARMed r26l-119-gc881679 (cc 9.4.0 64bit pic ssse3 lightrec gpu=neon)"},{"frame":0,"level":"info","text":"build time: Oct 25 2026 06:43:00"},{"frame":0,"level":"info","text":"12 cpu core(s) detected"},{"frame":0,"level":"info","text":"found US BIOS file, crc32 8d8cb7e4: <system>/scph5501.bin"},{"frame":0,"level":"info","text":"Using PIXEL_FORMAT 2"},{"frame":0,"level":"info","text":"cdrom precache: 12 buffers"},{"frame":0,"level":"info","text":"plugin: /builtin_gpu"},{"frame":0,"level":"info","text":"plugin: /builtin_spu"},{"frame":0,"level":"info","text":"PlugiLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":"https://github.com/libretro/pcsx_rearmed","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":[],"frontend":{"commit":"38dd7401fdfbaa4ae98bda3ea901c80f24d78da7","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"6f18a8ff979e4a5b182d164aae3448818be0ec5ec596df3db636afe9bae44266"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.59,3.22,4.06],"load_before":[2.4,3.24,4.09],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-8154bab7bf80","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"84a3435916d67c64d1d7a12305d7bea63dcf7f1467ba5cd775cd35c5887f9532"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T14:48:10+00:00","subject":"references-pcsx-rearmed-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":3,"40":3603,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":385.0897322632743,"fps_nominal":60.0,"frames":3600,"input_pressed":0,"input_queries":460800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX-ReARMed","library_version":"r26 c881679","loaded":true,"logs":[{"frame":0,"level":"info","text":"Starting PCSX-ReARMed r26l-119-gc881679 (cc 9.4.0 64bit pic ssse3 lightrec gpu=neon)"},{"frame":0,"level":"info","text":"build time: Oct 25 2026 06:43:00"},{"frame":0,"level":"info","text":"12 cpu core(s) detected"},{"frame":0,"level":"info","text":"found JP BIOS file, crc32 ff3eeb8c: <system>/scph5500.bin"},{"frame":0,"level":"info","text":"found US BIOS file, crc32 8d8cb7e4: <system>/scph5501.bin"},{"frame":0,"level":"info","text":"found EU BIOS file, crc32 d786f0b9Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":"https://github.com/libretro/pcsx_rearmed","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":[],"frontend":{"commit":"a17406edaeb01d334d15f3a4e6fa4950c6d0b727","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"6aaa716a44ccf5e245f478c560f5718f6af3f0c8ded2e02b05f364adf81df9c8"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.3,2.3,2.66],"load_before":[2.19,2.28,2.66],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-378cc9b49c66","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"f89e40011815ab1c50dac718cd53c5fcd675ccb67d2e611acff717e3cbaf2bbc"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T16:43:05+00:00","subject":"files-pcsx-rearmed-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":3,"40":3603,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":2841.1704776251495,"fps_nominal":60.0,"frames":3600,"input_pressed":0,"input_queries":460800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX-ReARMed","library_veLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":"https://github.com/libretro/pcsx_rearmed","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":[],"frontend":{"commit":"a17406edaeb01d334d15f3a4e6fa4950c6d0b727","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"6aaa716a44ccf5e245f478c560f5718f6af3f0c8ded2e02b05f364adf81df9c8"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.62,2.36,2.68],"load_before":[2.3,2.3,2.66],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-82bf6de00b8a","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"f89e40011815ab1c50dac718cd53c5fcd675ccb67d2e611acff717e3cbaf2bbc"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T16:43:20+00:00","subject":"none-pcsx-rearmed-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":2,"40":3602,"45":1,"51":1,"57":1,"59":1,"6":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[],"files_probed_absent":["scph5500.bin","scph5501.bin","scph5502.bin","psxonpsp660.bin","scph101.bin","scph7001.bin","scph1001.bin"],"fps":3059.9461504064743,"fps_nominal":60.0,"frames":3600,"input_pressed":0,"input_queries":460800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX-ReARMed","library_version":"r26 c881679","loaded":true,"logs":[{"frame":0,"level":"info","text":"Starting PCSX-ReARMed r26l-119-gc881679 (cc 9.4.0 64bit pic ssse3 lightrec gpu=neon)"},{"frame":0,"level":"info","text":"build time: Oct 25 2026 06:43:00"},{"frame":0,"level":"info","text":"12 cpu core(s) detected"},{"framLine truncated
{"check":{"claim":"pcsx_rearmed boots Bust-A-Move 2 - Arcade Edition (USA) with scph1001.bin alone and refuses a wrong file under its name","method":"scph1001.bin alone as scph1001.bin, then 524288 zero bytes and its first 262144 bytes, then psxonpsp660.bin, scph5500.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[10,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[20,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[30,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[40,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[50,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[60,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[70,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[80,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[90,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[100,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[110,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[120,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[130,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[140,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[150,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[160,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[170,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[180,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[190,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[200,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[210,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[220,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[230,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[240,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[250,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[260,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[270,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[280,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[290,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[300,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[310,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[320,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[330,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[340,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[350,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[360,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[370,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[380,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[390,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[400,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[410,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[420,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[430,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[440,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[450,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[460,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[470,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[480,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[490,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[500,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[510,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[520,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[530,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[540,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[550,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[560,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[570,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[580,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[590,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[600,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[610,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[620,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[630,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[640,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[650,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[660,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[670,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[680,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[690,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[700,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[710,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[720,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[730,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[740,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[750,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[760,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[770,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[780,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[790,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[800,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[810,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[820,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[830,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[840,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[850,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[860,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[870,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[880,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[890,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[900,"e5af1f2023Line truncated
{"check":{"claim":"pcsx_rearmed boots Bust-A-Move 2 - Arcade Edition (USA) with scph101.bin alone and refuses a wrong file under its name","method":"scph101.bin alone as scph101.bin, then 524288 zero bytes and its first 262144 bytes, then psxonpsp660.bin, scph5500.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[10,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[20,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[30,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[40,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[50,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[60,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[70,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[80,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[90,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[100,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[110,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[120,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[130,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[140,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[150,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[160,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[170,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[180,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[190,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[200,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[210,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[220,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[230,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[240,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[250,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[260,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[270,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[280,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[290,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[300,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[310,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[320,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[330,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[340,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[350,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[360,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[370,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[380,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[390,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[400,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[410,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[420,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[430,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[440,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[450,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[460,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[470,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[480,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[490,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[500,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[510,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[520,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[530,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[540,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[550,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[560,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[570,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[580,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[590,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[600,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[610,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[620,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[630,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[640,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[650,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[660,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[670,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[680,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[690,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[700,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[710,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[720,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[730,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[740,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[750,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[760,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[770,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[780,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[790,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[800,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[810,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[820,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[830,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[840,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[850,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[860,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[870,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[880,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[890,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[900,"e5af1f2023d0dLine truncated
{"check":{"claim":"pcsx_rearmed boots Bust-A-Move 2 - Arcade Edition (USA) with scph5501.bin alone and refuses a wrong file under its name","method":"scph5501.bin alone as scph5501.bin, then 524288 zero bytes and its first 262144 bytes, then psxonpsp660.bin, scph5500.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[10,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[20,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[30,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[40,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[50,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[60,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[70,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[80,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[90,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[100,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[110,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[120,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[130,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[140,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[150,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[160,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[170,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[180,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[190,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[200,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[210,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[220,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[230,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[240,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[250,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[260,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[270,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[280,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[290,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[300,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[310,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[320,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[330,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[340,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[350,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[360,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[370,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[380,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[390,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[400,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[410,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[420,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[430,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[440,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[450,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[460,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[470,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[480,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[490,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[500,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[510,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[520,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[530,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[540,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[550,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[560,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[570,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[580,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[590,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[600,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[610,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[620,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[630,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[640,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[650,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[660,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[670,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[680,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[690,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[700,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[710,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[720,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[730,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[740,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[750,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[760,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[770,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[780,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[790,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[800,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[810,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[820,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[830,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[840,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[850,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[860,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[870,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[880,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[890,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[900,"e5af1f2023Line truncated
{"check":{"claim":"pcsx_rearmed boots Bust-A-Move 2 - Arcade Edition (USA) with scph7001.bin alone and refuses a wrong file under its name","method":"scph7001.bin alone as scph7001.bin, then 524288 zero bytes and its first 262144 bytes, then psxonpsp660.bin, scph5500.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[10,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[20,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[30,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[40,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[50,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[60,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[70,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[80,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[90,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[100,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[110,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[120,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[130,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[140,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[150,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[160,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[170,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[180,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[190,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[200,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[210,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[220,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[230,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[240,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[250,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[260,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[270,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[280,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[290,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[300,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[310,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[320,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[330,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[340,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[350,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[360,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[370,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[380,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[390,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[400,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[410,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[420,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[430,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[440,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[450,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[460,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[470,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[480,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[490,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[500,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[510,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[520,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[530,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[540,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[550,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[560,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[570,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[580,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[590,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[600,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[610,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[620,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[630,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[640,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[650,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[660,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[670,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[680,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[690,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[700,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[710,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[720,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[730,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[740,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[750,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[760,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[770,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[780,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[790,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[800,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[810,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[820,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[830,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[840,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[850,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[860,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[870,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[880,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[890,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[900,"e5af1f2023Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":"https://github.com/libretro/pcsx_rearmed","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":["default: repetition 1 disagrees with repetition 0 on state_sha1","load average reached 3.06 (threshold 3.0)"],"frontend":{"commit":"70c3bbd8536cd30851c007d964561c8661df786d","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"86bf2ed561358442b28b6846679ab157a02e03e3b2b97528e1fa41df7a4df078"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.06,3.01,3.3],"load_before":[2.7,2.94,3.28],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-a67e729b8f42","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T18:22:04+00:00","subject":"files-pcsx-rearmed-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":["repetition 1 disagrees with repetition 0 on state_sha1"],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":3,"40":3603,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":"https://github.com/libretro/pcsx_rearmed","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":[],"frontend":{"commit":"70c3bbd8536cd30851c007d964561c8661df786d","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"86bf2ed561358442b28b6846679ab157a02e03e3b2b97528e1fa41df7a4df078"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.92,2.96,3.26],"load_before":[2.53,2.89,3.24],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-1d4eb1daebe5","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T18:23:20+00:00","subject":"none-pcsx-rearmed-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":2,"40":3602,"45":1,"51":1,"57":1,"59":1,"6":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[],"files_probed_absent":["scph5500.bin","scph5501.bin","scph5502.bin","psxonpsp660.bin","scph101.bin","scph7001.bin","scph1001.bin"],"fps":2913.4395689702355,"fps_nominal":60.0,"frames":3600,"input_pressed":0,"input_queries":460800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX-ReARMed","library_version":"r26 c881679","loaded":true,"logs":[{"frame":0,"level":"info","text":"Starting PCSX-ReARMed r26l-119-gc881679 (cc 9.4.0 64bit pic ssse3 lightrec gpu=neon)"},{"frame":0,"level":"info","text":"build time: Oct 25 2026 06:43:00"},{"frame"Line truncated
{"check":{"claim":"pcsx_rearmed boots Bust-A-Move 2 - Arcade Edition (USA) with scph1001.bin alone and refuses a wrong file under its name","method":"scph1001.bin alone as scph1001.bin, then 524288 zero bytes and its first 262144 bytes, then psxonpsp660.bin, scph5500.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[10,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[20,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[30,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[40,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[50,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[60,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[70,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[80,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[90,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[100,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[110,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[120,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[130,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[140,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[150,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[160,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[170,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[180,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[190,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[200,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[210,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[220,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[230,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[240,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[250,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[260,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[270,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[280,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[290,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[300,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[310,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[320,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[330,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[340,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[350,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[360,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[370,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[380,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[390,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[400,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[410,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[420,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[430,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[440,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[450,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[460,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[470,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[480,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[490,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[500,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[510,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[520,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[530,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[540,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[550,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[560,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[570,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[580,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[590,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[600,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[610,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[620,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[630,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[640,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[650,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[660,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[670,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[680,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[690,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[700,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[710,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[720,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[730,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[740,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[750,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[760,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[770,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[780,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[790,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[800,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[810,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[820,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[830,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[840,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[850,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[860,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[870,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[880,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[890,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[900,"e5af1f2023Line truncated
{"check":{"claim":"pcsx_rearmed boots Bust-A-Move 2 - Arcade Edition (USA) with scph101.bin alone and refuses a wrong file under its name","method":"scph101.bin alone as scph101.bin, then 524288 zero bytes and its first 262144 bytes, then psxonpsp660.bin, scph5500.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[10,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[20,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[30,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[40,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[50,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[60,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[70,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[80,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[90,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[100,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[110,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[120,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[130,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[140,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[150,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[160,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[170,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[180,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[190,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[200,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[210,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[220,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[230,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[240,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[250,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[260,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[270,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[280,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[290,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[300,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[310,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[320,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[330,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[340,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[350,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[360,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[370,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[380,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[390,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[400,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[410,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[420,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[430,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[440,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[450,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[460,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[470,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[480,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[490,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[500,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[510,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[520,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[530,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[540,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[550,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[560,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[570,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[580,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[590,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[600,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[610,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[620,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[630,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[640,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[650,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[660,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[670,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[680,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[690,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[700,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[710,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[720,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[730,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[740,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[750,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[760,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[770,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[780,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[790,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[800,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[810,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[820,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[830,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[840,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[850,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[860,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[870,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[880,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[890,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[900,"e5af1f2023d0dLine truncated
{"check":{"claim":"pcsx_rearmed boots Bust-A-Move 2 - Arcade Edition (USA) with scph5501.bin alone and refuses a wrong file under its name","method":"scph5501.bin alone as scph5501.bin, then 524288 zero bytes and its first 262144 bytes, then psxonpsp660.bin, scph5500.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[10,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[20,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[30,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[40,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[50,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[60,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[70,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[80,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[90,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[100,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[110,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[120,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[130,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[140,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[150,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[160,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[170,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[180,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[190,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[200,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[210,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[220,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[230,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[240,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[250,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[260,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[270,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[280,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[290,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[300,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[310,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[320,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[330,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[340,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[350,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[360,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[370,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[380,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[390,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[400,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[410,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[420,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[430,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[440,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[450,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[460,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[470,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[480,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[490,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[500,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[510,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[520,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[530,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[540,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[550,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[560,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[570,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[580,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[590,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[600,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[610,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[620,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[630,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[640,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[650,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[660,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[670,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[680,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[690,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[700,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[710,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[720,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[730,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[740,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[750,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[760,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[770,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[780,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[790,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[800,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[810,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[820,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[830,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[840,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[850,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[860,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[870,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[880,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[890,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[900,"e5af1f2023Line truncated
{"check":{"claim":"pcsx_rearmed boots Bust-A-Move 2 - Arcade Edition (USA) with scph7001.bin alone and refuses a wrong file under its name","method":"scph7001.bin alone as scph7001.bin, then 524288 zero bytes and its first 262144 bytes, then psxonpsp660.bin, scph5500.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[10,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[20,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[30,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[40,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[50,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[60,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[70,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[80,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[90,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[100,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[110,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[120,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[130,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[140,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[150,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[160,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[170,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[180,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[190,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[200,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[210,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[220,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[230,"7c0a301f6dbdeef5bb7ec89400676ba8f819dcab"],[240,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[250,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[260,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[270,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[280,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[290,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[300,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[310,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[320,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[330,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[340,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[350,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[360,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[370,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[380,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[390,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[400,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[410,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[420,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[430,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[440,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[450,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[460,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[470,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[480,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[490,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[500,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[510,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[520,"36a81577bede5aabaade574c2cb212c2dd0e0071"],[530,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[540,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[550,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[560,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[570,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[580,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[590,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[600,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[610,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[620,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[630,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[640,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[650,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[660,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[670,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[680,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[690,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[700,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[710,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[720,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[730,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[740,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[750,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[760,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[770,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[780,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[790,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[800,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[810,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[820,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[830,"490761d0df7cbf87a09cc167fd710c728a46cb6f"],[840,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[850,"ca7614edfc54ec085049b365dd01e65f59502b7f"],[860,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[870,"35a8774a83d48a2892e1f1ce256542f870df77b1"],[880,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[890,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[900,"e5af1f2023Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":"https://github.com/libretro/pcsx_rearmed","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":["load average reached 3.04 (threshold 3.0)"],"frontend":{"commit":"dd64434122a3f0dd88ca5908a7cafc2bceedbb98","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.04,2.93,3.11],"load_before":[2.75,2.87,3.1],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-65923ebc1836","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:16:29+00:00","subject":"references-pcsx-rearmed-puzzle-bobble-2-japan","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":3,"40":3603,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":374.7221406045197,"fps_nominal":60.0,"frames":3600,"input_pressed":0,"input_queries":460800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX-ReARMed","library_version":"r26 c881679","loaded":true,"logs":[{"frame":0,"level":"info","text":"Starting PCSX-ReARMed r26l-119-gc881679 (cc 9.4.0 64bit pic ssse3 lightrec gpu=neon)"},{"frame":0,"level":"info","text":"build time: Oct 25 2026 06:43:00"},{"frame":0,"level":"info","text":"12 cpu core(s) detected"},{"frame":0,"level":"info","text":"found JP BIOS file, crc32 ff3eeb8c: <system>/scph5500.bin"},{"frame":0,"level":"info","text":"found US BIOS file, crc32 8d8cb7e4: <system>/scph5501.bin"},{"frame":0,"level":"info","text":"found EU BIOS file, crc32 d786f0b9: <system>/scph5502.bin"},{"frame":0,"level":"info","text":"Using PIXEL_FORMAT 2"},{"frame":0,"level":"info","text":"cdrom precache: 12 buffers"},{"frame":0,"level":"info","text":"plugin: /builtin_gpu"},{"frame":0,"level":"info","text":Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":"https://github.com/libretro/pcsx_rearmed","sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":["load average reached 3.07 (threshold 3.0)"],"frontend":{"commit":"dd64434122a3f0dd88ca5908a7cafc2bceedbb98","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.07,2.89,3.04],"load_before":[2.46,2.77,3.01],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-c71f71b579b9","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:20:14+00:00","subject":"references-pcsx-rearmed-bust-a-move-2-arcade-edition-europe","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":5,"40":3605,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":373.93533054780505,"fps_nominal":50.0,"frames":3600,"input_pressed":0,"input_queries":460800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX-ReARMed","library_version":"r26 c881679","loaded":true,"logs":[{"frame":0,"level":"info","text":"Starting PCSX-ReARMed r26l-119-gc881679 (cc 9.4.0 64bit pic ssse3 lightrec gpu=neon)"},{"frame":0,"level":"info","text":"build time: Oct 25 2026 06:43:00"},{"frame":0,"level":"info","text":"12 cpu core(s) detected"},{"frame":0,"level":"info","text":"found JP BIOS file, crc32 ff3eeb8c: <system>/scph5500.bin"},{"frame":0Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":null,"sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.88,2.93,2.85],"load_before":[2.67,2.89,2.84],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-021c5f873e1d","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:56:37+00:00","subject":"region-pcsx_rearmed-bust-a-move-2-arcade-edition-usa-full","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":3,"40":3603,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":2861.691149590149,"fps_nominal":60.0,"frames":3600,"input_pressed":0,"input_queries":460800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":null,"sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.96,2.9,2.84],"load_before":[2.87,2.88,2.84],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-ab4b533f4aab","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:58:00+00:00","subject":"region-pcsx_rearmed-bust-a-move-2-arcade-edition-usa-own","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":3,"40":3603,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"},{"path":"scph101.bin","sha1_after":"dcffe16bd90a723499ad46c641424981338d8378","sha1_staged":"dcffe16bd90a723499ad46c641424981338d8378"},{"path":"scph7001.bin","sha1_after":"14df4f6c1e367ce097c11deae21566b4fe5647a9","sha1_staged":"14df4f6c1e367ce097c11deae21566b4fe5647a9"},{"path":"scph1001.bin","sha1_after":"10155d8d6e6e832d6ea66db9bc098321fb5e8ebf","sha1_staged":"10155d8d6e6e832d6ea66db9bc098321fb5e8ebf"}],"files_probed_absent":["scph5500.bin","scph5502.bin",Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":null,"sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":["load average reached 3.23 (threshold 3.0)"],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.23,2.91,2.85],"load_before":[2.8,2.83,2.82],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-4b7a5bdc4d3c","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:59:24+00:00","subject":"region-pcsx_rearmed-bust-a-move-2-arcade-edition-usa-others","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":3,"40":3603,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"},{"path":"psxonpsp660.bin","sha1_after":"96880d1ca92a016ff054be5159bb06fe03cb4e14","sha1_staged":"96880d1ca92a016ff054be5159bb06fe03cb4e14"}],"files_probed_absent":["scph5501.bin","scph101.bin","scph7001.bin","scph1001.bin"],"fps":2768.717542752976,"fps_nominal":60.0,"frames":3600,Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":null,"sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":["load average reached 3.06 (threshold 3.0)"],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.06,2.93,2.86],"load_before":[2.98,2.91,2.85],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-bd1dc02bff51","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T23:01:32+00:00","subject":"region-pcsx_rearmed-bust-a-move-2-arcade-edition-usa-pack","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":3,"40":3603,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"},{"path":"scph101.bin","sha1_after":"dcffe16bd90a723499ad46c641424981338d8378","sha1_staged":"dcffe16bd90a723499ad46c641424981338d8378"},{"path":"scph7001.bin","sha1_after":"14df4f6c1e367ce097c11deae21566b4fe5647a9","sha1_staged":"14df4f6c1e367ce097c11deae21566b4fe5647a9"},{"path":"scph1001.bin","sha1_after":"10155d8d6e6e832d6ea66db9bc098321fb5e8ebf","sha1_staged":"10155d8d6e6e832d6ea66db9bc098321fb5e8ebf"}],"files_pLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":null,"sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":["load average reached 3.05 (threshold 3.0)"],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.05,2.91,2.86],"load_before":[2.97,2.89,2.85],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-20b02a5c405e","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"2443e73be7ce3203408d7398c997fe6ec7cebd9f","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"373e5e3d7c524ed1556b9292a794169bf1de27d0","shows":"a black screen with CREDIT 6","stage":"game"},{"sha1":"53f32c4acd5a522f359952ee48f138e44aee6e61","shows":"the attract-mode game on the beach, PASSAGE TIME IS","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T23:02:48+00:00","subject":"region-pcsx_rearmed-puzzle-bobble-2-japan-full","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":3,"40":3603,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":2817.1952056776377,"fps_nominal":60.0,"frames":3600,"input_pressed":0,"input_queries":460800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX-ReARMed","library_version":"r26 c881679","loaded":true,"logs":[{"frame":0,"level":"info","text":"Starting PCSX-ReARMed r26l-119-gc881679 (cc 9.4.0 64bit pic ssse3 lightrec gpu=neon)"},{"frame":0,"level":"info","text":"build time: Oct 25 2026 06:43:00"},{"frame":0,"level":"info","text":"12 cpu core(s) detected"},{"frame":0,"level":"info","text":"found JP BIOS file, crc32 ff3eeb8c: Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":null,"sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.84,2.82,2.83],"load_before":[2.74,2.8,2.82],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-ab657833e2e6","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"2443e73be7ce3203408d7398c997fe6ec7cebd9f","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"373e5e3d7c524ed1556b9292a794169bf1de27d0","shows":"a black screen with CREDIT 6","stage":"game"},{"sha1":"53f32c4acd5a522f359952ee48f138e44aee6e61","shows":"the attract-mode game on the beach, PASSAGE TIME IS","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T23:05:12+00:00","subject":"region-pcsx_rearmed-puzzle-bobble-2-japan-own","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":3,"40":3603,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"psxonpsp660.bin","sha1_after":"96880d1ca92a016ff054be5159bb06fe03cb4e14","sha1_staged":"96880d1ca92a016ff054be5159bb06fe03cb4e14"}],"files_probed_absent":["scph5501.bin","scph5502.bin","scph101.bin","scph7001.bin","scph1001.bin"],"fps":2861.9182426042025,"fps_nominal":60.0,"frames":3600,"input_pressed":0,"input_queries":460800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX-ReARMed","library_version":"r26 c881679","loaded":true,"logs":[{"frame":0,"level":"info","text":"Starting PCSX-ReARMed r26l-119-gc881679 (cc 9.4.0 64bit pic ssse3 lightrec gpu=neon)"},{"frame":0,"level":"info","text":"build time: Oct 25 2026 06:43:00"},{"frame":0,"level":"info","text":"12 cpu core(s) detected"},{"frame":0,"level":"info","text":"found JP BIOS file, crc32 ff3eeb8c: <system>/scph5500.bin"},{"frame":0,"level":"info","text":"Using PIXEL_FORMAT 2"},{"frame":0,"level":"info"Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":null,"sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.31,2.68,2.77],"load_before":[2.34,2.69,2.78],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-49e28d441934","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"2443e73be7ce3203408d7398c997fe6ec7cebd9f","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"373e5e3d7c524ed1556b9292a794169bf1de27d0","shows":"a black screen with CREDIT 6","stage":"game"},{"sha1":"53f32c4acd5a522f359952ee48f138e44aee6e61","shows":"the attract-mode game on the beach, PASSAGE TIME IS","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T23:05:58+00:00","subject":"region-pcsx_rearmed-puzzle-bobble-2-japan-others","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":3,"40":3603,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"},{"path":"scph101.bin","sha1_after":"dcffe16bd90a723499ad46c641424981338d8378","sha1_staged":"dcffe16bd90a723499ad46c641424981338d8378"},{"path":"scph7001.bin","sha1_after":"14df4f6c1e367ce097c11deae21566b4fe5647a9","sha1_staged":"14df4f6c1e367ce097c11deae21566b4fe5647a9"},{"path":"scph1001.bin","sha1_after":"10155d8d6e6e832d6ea66db9bc098321fb5e8ebf","sha1_staged":"10155d8d6e6e832d6ea66db9bc098321fb5e8ebf"}],"files_probed_absent":["scph5500.bin","psxonpsp660.bin"],"fps":2858.7360851811554,"fps_nominal":60.0,"frames":3600,"input_pressed":0,"input_queries":460800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX-ReARMed","library_version":"r26 c881679","loaded":true,"logs":[{"frame":0,"level":"info","text":"Starting PCSX-ReARMed Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":null,"sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.9,2.77,2.8],"load_before":[2.71,2.73,2.79],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-8a03e9dff08a","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"2443e73be7ce3203408d7398c997fe6ec7cebd9f","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"373e5e3d7c524ed1556b9292a794169bf1de27d0","shows":"a black screen with CREDIT 6","stage":"game"},{"sha1":"53f32c4acd5a522f359952ee48f138e44aee6e61","shows":"the attract-mode game on the beach, PASSAGE TIME IS","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T23:07:00+00:00","subject":"region-pcsx_rearmed-puzzle-bobble-2-japan-pack","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":3,"40":3603,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"psxonpsp660.bin","sha1_after":"96880d1ca92a016ff054be5159bb06fe03cb4e14","sha1_staged":"96880d1ca92a016ff054be5159bb06fe03cb4e14"}],"files_probed_absent":["scph5501.bin","scph5502.bin","scph101.bin","scph7001.bin","scph1001.bin"],"fps":2800.15199910165,"fps_nominal":60.0,"frames":3600,"input_pressed":0,"input_queries":460800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX-ReARMed","library_version":"r26 c881679","loaded":true,"logs":[{"frame":0,"level":"info","text":"Starting PCSX-ReARMed r26l-119-gc881679 (cc 9.4.0 64bit pic ssse3 lightrec gpu=neon)"},{"frame":0,"level":"info","text":"build time: Oct 25 2026 06:43:00"},{"frame":0,"level":"info","text":"12 cpu core(s) detected"},{"frame":0,"level":"info","text":"found JP BIOS file, crc32 ff3eeb8c: <system>/scph5500.bin"},{"frame":0,"level":"info","text":"Using PIXEL_FORMAT 2"},{"frame":0,"level":"info","Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":null,"sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.62,2.94,2.94],"load_before":[2.59,2.94,2.93],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-5eba2d1d6949","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"d0c5e568fd2585ad5c0ed244c25bdacdbb596d55","shows":"the anti-piracy notice","stage":"game"},{"sha1":"4ea5612d272a8b05fabf98ed7dc4b245fe759001","shows":"the Acclaim and Taito credits text","stage":"game"},{"sha1":"ed433c340dc7ef65c8afba4434542c1827251127","shows":"the Acclaim logo","stage":"game"},{"sha1":"a909b761d6f46ec28bdf46aac874873db40396b7","shows":"the Taito logo on white","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T23:17:50+00:00","subject":"region-pcsx_rearmed-bust-a-move-2-arcade-edition-europe-full","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":5,"40":3605,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":2875.492607784481,"fps_nominal":50.0,"frames":3600,"input_pressed":0,"input_queries":460800,"isolation":"bwrap","last_frame_size":[320,240],"Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":null,"sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.69,2.88,2.91],"load_before":[2.66,2.88,2.91],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-806522bbd94b","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"d0c5e568fd2585ad5c0ed244c25bdacdbb596d55","shows":"the anti-piracy notice","stage":"game"},{"sha1":"4ea5612d272a8b05fabf98ed7dc4b245fe759001","shows":"the Acclaim and Taito credits text","stage":"game"},{"sha1":"ed433c340dc7ef65c8afba4434542c1827251127","shows":"the Acclaim logo","stage":"game"},{"sha1":"a909b761d6f46ec28bdf46aac874873db40396b7","shows":"the Taito logo on white","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T23:19:15+00:00","subject":"region-pcsx_rearmed-bust-a-move-2-arcade-edition-europe-own","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":5,"40":3605,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":["scph5500.bin","scph5501.bin","psxonpsp660.bin","scph101.bin","scph7001.bin","scph1001.bin"],"fps":2839.364485186228,"fps_nominal":50.0,"frames":3600,"input_pressed":0,"input_queries":460800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX-ReARMed","library_version":"r26 c881679","loaded":true,"logs":[{"frame":0,"level":"info","text":"Starting PCSX-ReARMed r26l-119-gc881679 (cc 9.4.0 64bit pic ssse3 lLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":null,"sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.49,2.85,2.91],"load_before":[2.49,2.86,2.91],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-b5ea804d466d","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"d0c5e568fd2585ad5c0ed244c25bdacdbb596d55","shows":"the anti-piracy notice","stage":"game"},{"sha1":"4ea5612d272a8b05fabf98ed7dc4b245fe759001","shows":"the Acclaim and Taito credits text","stage":"game"},{"sha1":"ed433c340dc7ef65c8afba4434542c1827251127","shows":"the Acclaim logo","stage":"game"},{"sha1":"a909b761d6f46ec28bdf46aac874873db40396b7","shows":"the Taito logo on white","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T23:21:32+00:00","subject":"region-pcsx_rearmed-bust-a-move-2-arcade-edition-europe-others","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":5,"40":3605,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"},{"path":"psxonpsp660.bin","sha1_after":"96880d1ca92a016ff054be5159bb06fe03cb4e14","sha1_staged":"96880d1ca92a016ff054be5159bb06fe03cb4e14"},{"path":"scph101.bin","sha1_after":"dcffe16bd90a723499ad46c641424981338d8378","sha1_staged":"dcffe16bd90a723499ad46c641424981338d8378"},{"path":"scph7001.bin","sha1_aftLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/pcsx_rearmed_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"pcsx_rearmed_libretro.so","library_name":"PCSX-ReARMed","library_version":"r26 c881679","repo":null,"sha256":"bfda3f667f8ea8c2f5cc939b970628174b6f491ad32d7f6b143728322df46af6"},"emulator":"pcsx_rearmed","flags":[],"frontend":{"commit":"6bbf0f137cfbf390d4305362238608fce0152df0","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.89,3.15,3.07],"load_before":[2.77,3.14,3.07],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-1ebebc461356","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":["^found (US|EU|JP) BIOS file, crc32 "],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"d0c5e568fd2585ad5c0ed244c25bdacdbb596d55","shows":"the anti-piracy notice","stage":"game"},{"sha1":"4ea5612d272a8b05fabf98ed7dc4b245fe759001","shows":"the Acclaim and Taito credits text","stage":"game"},{"sha1":"ed433c340dc7ef65c8afba4434542c1827251127","shows":"the Acclaim logo","stage":"game"},{"sha1":"a909b761d6f46ec28bdf46aac874873db40396b7","shows":"the Taito logo on white","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T23:28:09+00:00","subject":"region-pcsx_rearmed-bust-a-move-2-arcade-edition-europe-pack","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"23":1,"35":1,"36":1,"37":5,"40":3605,"45":1,"51":1,"57":1,"59":1,"62":1,"63":1,"69":1,"8":1},"files_opened":[{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":["scph5500.bin","scph5501.bin","psxonpsp660.bin","scph101.bin","scph7001.bin","scph1001.bin"],"fps":2771.7008044876056,"fps_nominal":50.0,"frames":3600,"input_pressed":0,"input_queries":460800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"PCSX-ReARMed","library_version":"r26 c881679","loaded":true,"logs":[{"frame":0,"level":"info","text":"Starting PCSX-ReARMed r26l-119-gc881679 (cc 9.4.0 64bit pic ssse3Line truncated
+27
View File
@@ -3,3 +3,30 @@
{"check":{"claim":"swanstation opens ps1_rom.bin as ps1_rom.bin","method":"ps1_rom.bin staged as ps1_rom.bin, against nothing there, 3600 frames of Bust-A-Move 2 - Arcade Edition (USA). The files the core opened are read from strace.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[10,"33ef0e3028294489c17de8b4dde3048383549dc2"],[20,"e66c21611814a83a8d91f8e1ae83ec2679781373"],[30,"072c5eab08091f3e27874d1a1614a6b66e973787"],[40,"b064548a1ae30980944621fd61e74860b7c2e97e"],[50,"c92e7214dcfea5264ab03e6447c530f443168420"],[60,"769bb96721746fe88b295346a9dc75dd996c8329"],[70,"f369597de01ed10be074b57cd6769caa6707cd94"],[80,"fac01ee8c2c421edf7a4cccfea93da716bea3d88"],[90,"10ee5fea0c82672a6e7e6ecb1e86371bbd34f607"],[100,"2c2abdf70f5c6a906b5e75c59509626bff954934"],[110,"fbf632b4e81fa0ddcaa53b8d59fdf3260d374554"],[120,"3c9be08da1d7853da09cb8bd79708dadfbe35acc"],[130,"e664af3c889e73aa501f7671a54054650d2b6b61"],[140,"9b54f2de7fb75e75846f250bd7abb748de1a477e"],[150,"e50a85fea5654599409f196d1cc0b825cf950fcb"],[160,"7c4bc077108563c81593c4f0c126d94ee5d67364"],[170,"f984202c04722fc8668f374a62cfb7c4d2023c08"],[180,"4a32e1f3e836b0dbb54c267a9e9710814d7a93d2"],[190,"25f248219d0d139236776b725daad917fa6178f7"],[200,"bf0c472bf3d7a9bcb435d821e05ac0037373af8f"],[210,"9c6be0c9b8fac287778dbc2b45df4d132d50b359"],[220,"84a7829a4078ea142f5004681a8cd8ba0f64f772"],[230,"4010d3f53696560c8b1577e168fd8bcd01f89056"],[240,"7046e2f6bda4b360485722ade2c8c94824685540"],[250,"12c3f670812a586f983758491fce0ce1968e4523"],[260,"12c3f670812a586f983758491fce0ce1968e4523"],[270,"12c3f670812a586f983758491fce0ce1968e4523"],[280,"12c3f670812a586f983758491fce0ce1968e4523"],[290,"12c3f670812a586f983758491fce0ce1968e4523"],[300,"12c3f670812a586f983758491fce0ce1968e4523"],[310,"12c3f670812a586f983758491fce0ce1968e4523"],[320,"12c3f670812a586f983758491fce0ce1968e4523"],[330,"12c3f670812a586f983758491fce0ce1968e4523"],[340,"12c3f670812a586f983758491fce0ce1968e4523"],[350,"12c3f670812a586f983758491fce0ce1968e4523"],[360,"12c3f670812a586f983758491fce0ce1968e4523"],[370,"12c3f670812a586f983758491fce0ce1968e4523"],[380,"12c3f670812a586f983758491fce0ce1968e4523"],[390,"12c3f670812a586f983758491fce0ce1968e4523"],[400,"12c3f670812a586f983758491fce0ce1968e4523"],[410,"12c3f670812a586f983758491fce0ce1968e4523"],[420,"12c3f670812a586f983758491fce0ce1968e4523"],[430,"12c3f670812a586f983758491fce0ce1968e4523"],[440,"12c3f670812a586f983758491fce0ce1968e4523"],[450,"12c3f670812a586f983758491fce0ce1968e4523"],[460,"12c3f670812a586f983758491fce0ce1968e4523"],[470,"12c3f670812a586f983758491fce0ce1968e4523"],[480,"12c3f670812a586f983758491fce0ce1968e4523"],[490,"12c3f670812a586f983758491fce0ce1968e4523"],[500,"12c3f670812a586f983758491fce0ce1968e4523"],[510,"12c3f670812a586f983758491fce0ce1968e4523"],[520,"12c3f670812a586f983758491fce0ce1968e4523"],[530,"12c3f670812a586f983758491fce0ce1968e4523"],[540,"12c3f670812a586f983758491fce0ce1968e4523"],[550,"12c3f670812a586f983758491fce0ce1968e4523"],[560,"12c3f670812a586f983758491fce0ce1968e4523"],[570,"12c3f670812a586f983758491fce0ce1968e4523"],[580,"12c3f670812a586f983758491fce0ce1968e4523"],[590,"12c3f670812a586f983758491fce0ce1968e4523"],[600,"12c3f670812a586f983758491fce0ce1968e4523"],[610,"12c3f670812a586f983758491fce0ce1968e4523"],[620,"12c3f670812a586f983758491fce0ce1968e4523"],[630,"12c3f670812a586f983758491fce0ce1968e4523"],[640,"12c3f670812a586f983758491fce0ce1968e4523"],[650,"12c3f670812a586f983758491fce0ce1968e4523"],[660,"12c3f670812a586f983758491fce0ce1968e4523"],[670,"12c3f670812a586f983758491fce0ce1968e4523"],[680,"12c3f670812a586f983758491fce0ce1968e4523"],[690,"12c3f670812a586f983758491fce0ce1968e4523"],[700,"12c3f670812a586f983758491fce0ce1968e4523"],[710,"12c3f670812a586f983758491fce0ce1968e4523"],[720,"12c3f670812a586f983758491fce0ce1968e4523"],[730,"12c3f670812a586f983758491fce0ce1968e4523"],[740,"12c3f670812a586f983758491fce0ce1968e4523"],[750,"12c3f670812a586f983758491fce0ce1968e4523"],[760,"12c3f670812a586f983758491fce0ce1968e4523"],[770,"12c3f670812a586f983758491fce0ce1968e4523"],[780,"12c3f670812a586f983758491fce0ce1968e4523"],[790,"12c3f670812a586f983758491fce0ce1968e4523"],[800,"12c3f670812a586f983758491fce0ce1968e4523"],[810,"12c3f670812a586f983758491fce0ce1968e4523"],[820,"12c3f670812a586f983758491fce0ce1968e4523"],[830,"12c3f670812a586f983758491fce0ce1968e4523"],[840,"12c3f670812a586f983758491fce0ce1968e4523"],[850,"12c3f670812a586f983758491fce0ce1968e4523"],[860,"12c3f670812a586f983758491fce0ce1968e4523"],[870,"12c3f670812a586f983758491fce0ce1968e4523"],[880,"12c3f670812a586f983758491fce0ce1968e4523"],[890,"12c3f670812a586f983758491fce0ce1968e4523"],[900,"12c3f670812a586f983758491fce0ce1968e4523"],[910,"12c3f670812a586f983758491fce0ce1968e4523"],[920,"12c3f670812a586f983758491fce0ce1968e4523"],[930,"12c3f670812a586f983758491fce0ce1968e4523"],[940,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[950,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[960,"e5af1f2Line truncated
{"check":{"claim":"swanstation opens psxonpsp660.bin as psxonpsp660.bin","method":"psxonpsp660.bin staged as psxonpsp660.bin, against nothing there, 3600 frames of Bust-A-Move 2 - Arcade Edition (USA). The files the core opened are read from strace.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[10,"33ef0e3028294489c17de8b4dde3048383549dc2"],[20,"e66c21611814a83a8d91f8e1ae83ec2679781373"],[30,"072c5eab08091f3e27874d1a1614a6b66e973787"],[40,"b064548a1ae30980944621fd61e74860b7c2e97e"],[50,"c92e7214dcfea5264ab03e6447c530f443168420"],[60,"769bb96721746fe88b295346a9dc75dd996c8329"],[70,"f369597de01ed10be074b57cd6769caa6707cd94"],[80,"fac01ee8c2c421edf7a4cccfea93da716bea3d88"],[90,"10ee5fea0c82672a6e7e6ecb1e86371bbd34f607"],[100,"2c2abdf70f5c6a906b5e75c59509626bff954934"],[110,"fbf632b4e81fa0ddcaa53b8d59fdf3260d374554"],[120,"3c9be08da1d7853da09cb8bd79708dadfbe35acc"],[130,"e664af3c889e73aa501f7671a54054650d2b6b61"],[140,"9b54f2de7fb75e75846f250bd7abb748de1a477e"],[150,"e50a85fea5654599409f196d1cc0b825cf950fcb"],[160,"7c4bc077108563c81593c4f0c126d94ee5d67364"],[170,"f984202c04722fc8668f374a62cfb7c4d2023c08"],[180,"4a32e1f3e836b0dbb54c267a9e9710814d7a93d2"],[190,"25f248219d0d139236776b725daad917fa6178f7"],[200,"bf0c472bf3d7a9bcb435d821e05ac0037373af8f"],[210,"9c6be0c9b8fac287778dbc2b45df4d132d50b359"],[220,"84a7829a4078ea142f5004681a8cd8ba0f64f772"],[230,"4010d3f53696560c8b1577e168fd8bcd01f89056"],[240,"7046e2f6bda4b360485722ade2c8c94824685540"],[250,"12c3f670812a586f983758491fce0ce1968e4523"],[260,"12c3f670812a586f983758491fce0ce1968e4523"],[270,"12c3f670812a586f983758491fce0ce1968e4523"],[280,"12c3f670812a586f983758491fce0ce1968e4523"],[290,"12c3f670812a586f983758491fce0ce1968e4523"],[300,"12c3f670812a586f983758491fce0ce1968e4523"],[310,"12c3f670812a586f983758491fce0ce1968e4523"],[320,"12c3f670812a586f983758491fce0ce1968e4523"],[330,"12c3f670812a586f983758491fce0ce1968e4523"],[340,"12c3f670812a586f983758491fce0ce1968e4523"],[350,"12c3f670812a586f983758491fce0ce1968e4523"],[360,"12c3f670812a586f983758491fce0ce1968e4523"],[370,"12c3f670812a586f983758491fce0ce1968e4523"],[380,"12c3f670812a586f983758491fce0ce1968e4523"],[390,"12c3f670812a586f983758491fce0ce1968e4523"],[400,"12c3f670812a586f983758491fce0ce1968e4523"],[410,"12c3f670812a586f983758491fce0ce1968e4523"],[420,"12c3f670812a586f983758491fce0ce1968e4523"],[430,"12c3f670812a586f983758491fce0ce1968e4523"],[440,"12c3f670812a586f983758491fce0ce1968e4523"],[450,"12c3f670812a586f983758491fce0ce1968e4523"],[460,"12c3f670812a586f983758491fce0ce1968e4523"],[470,"12c3f670812a586f983758491fce0ce1968e4523"],[480,"12c3f670812a586f983758491fce0ce1968e4523"],[490,"12c3f670812a586f983758491fce0ce1968e4523"],[500,"12c3f670812a586f983758491fce0ce1968e4523"],[510,"12c3f670812a586f983758491fce0ce1968e4523"],[520,"12c3f670812a586f983758491fce0ce1968e4523"],[530,"12c3f670812a586f983758491fce0ce1968e4523"],[540,"12c3f670812a586f983758491fce0ce1968e4523"],[550,"12c3f670812a586f983758491fce0ce1968e4523"],[560,"12c3f670812a586f983758491fce0ce1968e4523"],[570,"12c3f670812a586f983758491fce0ce1968e4523"],[580,"12c3f670812a586f983758491fce0ce1968e4523"],[590,"12c3f670812a586f983758491fce0ce1968e4523"],[600,"12c3f670812a586f983758491fce0ce1968e4523"],[610,"12c3f670812a586f983758491fce0ce1968e4523"],[620,"12c3f670812a586f983758491fce0ce1968e4523"],[630,"12c3f670812a586f983758491fce0ce1968e4523"],[640,"12c3f670812a586f983758491fce0ce1968e4523"],[650,"12c3f670812a586f983758491fce0ce1968e4523"],[660,"12c3f670812a586f983758491fce0ce1968e4523"],[670,"12c3f670812a586f983758491fce0ce1968e4523"],[680,"12c3f670812a586f983758491fce0ce1968e4523"],[690,"12c3f670812a586f983758491fce0ce1968e4523"],[700,"12c3f670812a586f983758491fce0ce1968e4523"],[710,"12c3f670812a586f983758491fce0ce1968e4523"],[720,"12c3f670812a586f983758491fce0ce1968e4523"],[730,"12c3f670812a586f983758491fce0ce1968e4523"],[740,"12c3f670812a586f983758491fce0ce1968e4523"],[750,"12c3f670812a586f983758491fce0ce1968e4523"],[760,"12c3f670812a586f983758491fce0ce1968e4523"],[770,"12c3f670812a586f983758491fce0ce1968e4523"],[780,"12c3f670812a586f983758491fce0ce1968e4523"],[790,"12c3f670812a586f983758491fce0ce1968e4523"],[800,"12c3f670812a586f983758491fce0ce1968e4523"],[810,"12c3f670812a586f983758491fce0ce1968e4523"],[820,"12c3f670812a586f983758491fce0ce1968e4523"],[830,"12c3f670812a586f983758491fce0ce1968e4523"],[840,"12c3f670812a586f983758491fce0ce1968e4523"],[850,"12c3f670812a586f983758491fce0ce1968e4523"],[860,"12c3f670812a586f983758491fce0ce1968e4523"],[870,"12c3f670812a586f983758491fce0ce1968e4523"],[880,"12c3f670812a586f983758491fce0ce1968e4523"],[890,"12c3f670812a586f983758491fce0ce1968e4523"],[900,"12c3f670812a586f983758491fce0ce1968e4523"],[910,"12c3f670812a586f983758491fce0ce1968e4523"],[920,"12c3f670812a586f983758491fce0ce1968e4523"],[930,"12c3f670812a586f983758491fce0ce1968e4523"],[940,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[950,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":"https://github.com/libretro/swanstation","sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"fdcf120a7d584f07ba3fbbc8feea507c8ac368ca","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"a3182429ef3e86a03d23ae76326cd4d7b33a12fd18d28ce60c7231fe8ba5fe6e"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.28,2.51,3.19],"load_before":[2.39,2.53,3.2],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-fab739d8fbb6","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":0,"frames":1800,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1"],"options":{},"presses":[],"repetitions":5,"warmup":600},"kind":"bench","record_version":3,"recorded_at":"2026-10-27T11:08:32+00:00","subject":"bench-swanstation-bust-a-move-2-arcade-edition-usa","supersedes":null,"timing":{"fps":{"max":2378.8980515207204,"mean":2330.070066463387,"median":2335.1319947212696,"min":2258.6641821703206,"raw":[2351.6114770653353,2326.0446268392902,2258.6641821703206,2378.8980515207204,2335.1319947212696],"stdev":44.69013338817331},"ms_per_frame":{"max":0.44273956610898796,"mean":0.42929965154811117,"median":0.4282413166624287,"min":0.42036269665307674,"raw":[0.4252403127611615,0.42991436555490103,0.44273956610898796,0.42036269665307674,0.4282413166624287],"stdev":0.008343809735773854}},"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"35":1,"40":2006,"45":3,"47":2400,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":null,"files_probed_absent":null,"fps":2351.6114770653353,"fps_nominal":59.81733322143555,"frames":1800,"input_pressed":0,"input_queries":67200,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"SwanStation","library_version":"1.0.0 631f0fb","loaded":true,"logs":[{"frame":0,"level":"warn","text":"[InitDiskControlInterface] Failed to set disk control interface"},{"frame":0,"level":"info","text":"[System] Loading CD image '<content>/Bust-A-Move 2 - Arcade Edition (USA).cue'..."},{"frame":0,"level":"info","text":"[System] Auto-detected console NTSC-U region for '<content>/Bust-A-Move 2 - Arcade Edition (USA).cue' (region NTSC-U)"},{"frame":0,"level":"info","text":"[System] Console Region: NTSC-U/C (US, Canada)"},{"frame":0,"level":"info","text":"[Common::MemoryArena] File mapping name: swanstation_2_0x7e39e7cdfc00"},{"frame":0,"level":"info","text":"[CDROMAsLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":"https://github.com/libretro/swanstation","sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"38dd7401fdfbaa4ae98bda3ea901c80f24d78da7","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"6f18a8ff979e4a5b182d164aae3448818be0ec5ec596df3db636afe9bae44266"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.63,3.19,4.03],"load_before":[2.59,3.22,4.06],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-717f780131fc","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"84a3435916d67c64d1d7a12305d7bea63dcf7f1467ba5cd775cd35c5887f9532"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T14:48:28+00:00","subject":"references-swanstation-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"35":1,"40":3206,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":238.81468042894718,"fps_nominal":59.81733322143555,"frames":3600,"input_pressed":0,"input_queries":100800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"SwanStation","library_version":"1.0.0 631f0fb","loaded":true,"logs":[{"frame":0,"level":"warn","text":"[InitDiskControlInterface] Failed to set disk control interface"},{"frame":0,"level":"info","text":"[System] Loading CD image '<content>/Bust-A-Move 2 - Arcade Edition (USA).cue'..."},{"frame":0,"level":"info","text":"[System] Auto-detected console NTSC-U region for '<content>/Bust-A-Move 2 - Arcade Edition (USA).cue' (region NTSC-U)"},{"frame":0,"level":"info","text":"[System] Console Region: NTSC-U/C (US, Canada)"},{"frame":0,"level":"info","text":"[Common::MemoryArena] File mapping name: swanstation_5_0x7454472dfc00"},{"frame":0,"level":"info","text":"[CDROMAsyncReader] Read thread started with readahead of 8 sectors"},{"frame":0,"level":"info","text":"[HostInterface] Renderer = OpenGL"},{"frame":0,"level":"info","text":"Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":"https://github.com/libretro/swanstation","sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"a17406edaeb01d334d15f3a4e6fa4950c6d0b727","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"6aaa716a44ccf5e245f478c560f5718f6af3f0c8ded2e02b05f364adf81df9c8"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.3,2.59,2.7],"load_before":[2.23,2.59,2.7],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-871d035a10c6","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"593a6e2600946040fefd6eb9aebdc5c0d56f0555","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"f89e40011815ab1c50dac718cd53c5fcd675ccb67d2e611acff717e3cbaf2bbc"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T16:50:22+00:00","subject":"files-swanstation-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"35":1,"40":3206,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":1578.3032144076965,"fps_nominal":59.81733322143555,"frames":3600,"input_pressed":0,"input_queries":100800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"SwanStation","library_version":Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":"https://github.com/libretro/swanstation","sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"a17406edaeb01d334d15f3a4e6fa4950c6d0b727","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"6aaa716a44ccf5e245f478c560f5718f6af3f0c8ded2e02b05f364adf81df9c8"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.35,2.6,2.7],"load_before":[2.3,2.59,2.7],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-ba53cd101c61","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"593a6e2600946040fefd6eb9aebdc5c0d56f0555","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"f89e40011815ab1c50dac718cd53c5fcd675ccb67d2e611acff717e3cbaf2bbc"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T16:50:28+00:00","subject":"none-swanstation-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"35":1,"40":3327,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[],"files_probed_absent":["scph5501.bin"],"fps":1529.4361663598859,"fps_nominal":59.81733322143555,"frames":3600,"input_pressed":0,"input_queries":100800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"SwanStation","library_version":"1.0.0 631f0fb","loaded":true,"logs":[{"frame":0,"level":"warn","text":"[InitDiskControlInterface] Failed to set disk controLine truncated
{"check":{"claim":"swanstation boots Bust-A-Move 2 - Arcade Edition (USA) with ps1_rom.bin alone and refuses a wrong file under its name","method":"ps1_rom.bin alone as ps1_rom.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[10,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[20,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[30,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[40,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[50,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[60,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[70,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[80,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[90,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[100,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[110,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[120,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[130,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[140,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[150,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[160,"154688dd18ae734dba85ab19ad46d7118ab2f2a6"],[170,"6e7a6325516bfb954c86172a8368f4c15fe3aace"],[180,"5758e30df01e5eb4afc2665885e50c04e427d631"],[190,"81effa14e5507700b7459f46e670036c54e14a9b"],[200,"69ccdfe60203b9de19c8c690dc7bda4b9b79da44"],[210,"620c1e8d887adb3553f83845846935ac0bd7331f"],[220,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[230,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[240,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[250,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[260,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[270,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[280,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[290,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[300,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[310,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[320,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[330,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[340,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[350,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[360,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[370,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[380,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[390,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[400,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[410,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[420,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[430,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[440,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[450,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[460,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[470,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[480,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[490,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[500,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[510,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[520,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[530,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[540,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[550,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[560,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[570,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[580,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[590,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[600,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[610,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[620,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[630,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[640,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[650,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[660,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[670,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[680,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[690,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[700,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[710,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[720,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[730,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[740,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[750,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[760,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[770,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[780,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[790,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[800,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[810,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[820,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[830,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[840,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[850,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[860,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[870,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[880,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[890,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[900,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[910,"e5af1f2023d0d729ce7aabfLine truncated
{"check":{"claim":"every copy of ps1_rom.bin boots Bust-A-Move 2 - Arcade Edition (USA) on swanstation","method":"Each copy the collection holds staged alone as ps1_rom.bin, each run 2 times for 3600 frames. The boot oracle judges each copy.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[10,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[20,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[30,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[40,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[50,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[60,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[70,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[80,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[90,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[100,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[110,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[120,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[130,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[140,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[150,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[160,"154688dd18ae734dba85ab19ad46d7118ab2f2a6"],[170,"6e7a6325516bfb954c86172a8368f4c15fe3aace"],[180,"5758e30df01e5eb4afc2665885e50c04e427d631"],[190,"81effa14e5507700b7459f46e670036c54e14a9b"],[200,"69ccdfe60203b9de19c8c690dc7bda4b9b79da44"],[210,"620c1e8d887adb3553f83845846935ac0bd7331f"],[220,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[230,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[240,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[250,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[260,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[270,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[280,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[290,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[300,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[310,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[320,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[330,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[340,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[350,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[360,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[370,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[380,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[390,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[400,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[410,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[420,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[430,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[440,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[450,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[460,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[470,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[480,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[490,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[500,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[510,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[520,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[530,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[540,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[550,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[560,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[570,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[580,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[590,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[600,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[610,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[620,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[630,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[640,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[650,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[660,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[670,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[680,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[690,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[700,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[710,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[720,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[730,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[740,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[750,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[760,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[770,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[780,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[790,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[800,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[810,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[820,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[830,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[840,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[850,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[860,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[870,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[880,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[890,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[900,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[910,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[920,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[930,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[940,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[950,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[960,Line truncated
{"check":{"claim":"swanstation boots Bust-A-Move 2 - Arcade Edition (USA) with psxonpsp660.bin alone and refuses a wrong file under its name","method":"psxonpsp660.bin alone as psxonpsp660.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[10,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[20,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[30,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[40,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[50,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[60,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[70,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[80,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[90,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[100,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[110,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[120,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[130,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[140,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[150,"6e18adf4d2fa0dfb80cbb7e7fb45fa3b6599e5c6"],[160,"e02d0fd225cebfa24cb55876875838468df1f85c"],[170,"f82237bc74029b208d0d9ee42708be7e2993b1b0"],[180,"1af84636d8a821c425d0d16996bc731c79ea2756"],[190,"5b7db9932cf80eeecb90e91b0f32fa3e9e9b8221"],[200,"1e70b268416b6d2a98423386b40d4743f3a4d3b7"],[210,"e8baae73b5a4b6fe3c75378b61202bf52390a002"],[220,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[230,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[240,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[250,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[260,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[270,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[280,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[290,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[300,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[310,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[320,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[330,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[340,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[350,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[360,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[370,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[380,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[390,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[400,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[410,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[420,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[430,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[440,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[450,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[460,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[470,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[480,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[490,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[500,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[510,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[520,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[530,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[540,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[550,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[560,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[570,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[580,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[590,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[600,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[610,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[620,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[630,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[640,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[650,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[660,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[670,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[680,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[690,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[700,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[710,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[720,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[730,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[740,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[750,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[760,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[770,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[780,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[790,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[800,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[810,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[820,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[830,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[840,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[850,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[860,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[870,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[880,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[890,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[900,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[910,"180ff6f4954Line truncated
{"check":{"claim":"swanstation boots Bust-A-Move 2 - Arcade Edition (USA) with scph5501.bin alone and refuses a wrong file under its name","method":"scph5501.bin alone as scph5501.bin, then 524288 zero bytes and its first 262144 bytes, then scph5500.bin, scph5502.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[10,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[20,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[30,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[40,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[50,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[60,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[70,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[80,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[90,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[100,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[110,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[120,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[130,"7046e2f6bda4b360485722ade2c8c94824685540"],[140,"1a79c3f6e9f45ef06531acea2b4e2e30d3d8b8e8"],[150,"3c6f9678bfe5d0433aebb9ae3e9efbbfc5fd62c2"],[160,"84a7829a4078ea142f5004681a8cd8ba0f64f772"],[170,"6ae3c4c197eaf1014f7e903f708189d3bdb62e96"],[180,"5b9de43af7943c200dae7a7853637de7f3092646"],[190,"2116cdc10b8f69825d5f83c0a31b80f4fe667a33"],[200,"55cf2bd572d949733bdc741a76f533963778847a"],[210,"f875f10898942a3928cb54c6ea2ee6fda17617cc"],[220,"6935cd6562626c4876f09d1ee8f4870fb260dedc"],[230,"3c6e6e92d153c5693da47ff0b333a13b9296b8d1"],[240,"bea0ea4eaceddbb833418749c2c36241f04c04ae"],[250,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[260,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[270,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[280,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[290,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[300,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[310,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[320,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[330,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[340,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[350,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[360,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[370,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[380,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[390,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[400,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[410,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[420,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[430,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[440,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[450,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[460,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[470,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[480,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[490,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[500,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[510,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[520,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[530,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[540,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[550,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[560,"cd22ca0a08ba97eccbb7fee7cd2542d22b124f8d"],[570,"2966a869a40438c373e7aec133ea8bd2984c58b7"],[580,"405513eab3403a7dca58059df27a510bdd109d7a"],[590,"e46b311640b057b5d46a3d8a14b2fbc3e83547e4"],[600,"3791f3ecf398d95f506295bacca32e2de8ea8cca"],[610,"668d9390ee00842f4178efd6f308ad1da851edb8"],[620,"3bb7e278a6d007452b329ad624ada99220b68cab"],[630,"6466c6ce12f24862251707ab72b236520f0f7dca"],[640,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[650,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[660,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[670,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[680,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[690,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[700,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[710,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[720,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[730,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[740,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[750,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[760,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[770,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[780,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[790,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[800,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[810,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[820,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[830,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[840,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[850,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[860,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[870,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[880,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[890,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[900,"593a6e26009460Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":"https://github.com/libretro/swanstation","sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"dd64434122a3f0dd88ca5908a7cafc2bceedbb98","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.56,2.8,2.97],"load_before":[2.59,2.83,2.98],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-abe38e414339","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:25:08+00:00","subject":"references-swanstation-puzzle-bobble-2-japan","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"35":1,"40":3206,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"}],"files_probed_absent":[],"fps":233.67499864014627,"fps_nominal":59.81733322143555,"frames":3600,"input_pressed":0,"input_queries":100800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"SwanStation","library_version":"1.0.0 631f0fb","loaded":true,"logs":[{"frame":0,"level":"warn","text":"[InitDiskControlInterface] Failed to set disk control interface"},{"frame":0,"level":"info","text":"[System] Loading CD image '<content>/Puzzle Bobble 2 (Japan).cue'..."},{"frame":0,"level":"info","text":"[System] Auto-detected console NTSC-J region for '<content>/Puzzle Bobble 2 (Japan).cue' (region NTSC-J)"},{"frame":0,"level":"info","text":"[System] Console Region: NTSC-J (Japan)"},{"frame":0,"level":"info","text":"[Common::MemoryArena] File mapping name: swanstation_5_0x756ff8adfc00"},{"frame":0,"level":"info","text":"[CDROMAsyncReader] Read thread started with readahead of 8 sectors"},{"frame":0,"level":"info","text":"[HostInterface] Renderer = OpenGL"},{"frame":0,"level":"info","text":"[HostInterface] Requesting hardware renderer context for OpenGL"},{"frame":0,"level":"error","text":"[RequestHardwareRendererContext] Failed to set any GL HW renderer"},{"frame":1169,"level":"info","text":"[MemoryCard] Writing memory card sector 63"},{"frame":1904,"level":"info","text":"[MemoryCard] Writing memory card sector 1"},{"frame":1910,"levLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":"https://github.com/libretro/swanstation","sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":["load average reached 3.17 (threshold 3.0)"],"frontend":{"commit":"dd64434122a3f0dd88ca5908a7cafc2bceedbb98","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[3.17,3.19,3.13],"load_before":[2.49,3.08,3.09],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-57e092562c10","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[],"file":"tests/campaign/oracle.yml","references":[],"sha256":"9f22341bc4be0d1f6dbb349010e35394aac0ba82f794c2cdf2ab0306492e799e"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T21:28:07+00:00","subject":"references-swanstation-bust-a-move-2-arcade-edition-europe","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"32":2,"35":1,"40":3185,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":242.9628131346958,"fps_nominal":49.74681854248047,"frames":3600,"input_pressed":0,"input_queries":100800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"SwanStation","library_version":"1.0.0 631f0fb","loaded":true,"logs":[{"frame":0,"level":"warn","text":"[InitDiskControlInterface] Failed to set disk control interface"},{"frame":0,"level":"info","text":"[System] Loading CD image '<content>/Bust-A-Move 2 - Arcade Edition (Europe).cue'..."},{"frame":0,"level":"info","text":"[System] Auto-detected console PAL region for '<content>/Bust-A-Move 2 - Arcade Edition (Europe).cue' (region PAL)"},{"frame":0,"level":"info","text":"[System] Console Region: PAL (Europe, Australia)"},{"frame":0,"level":"info","text":"[Common::MemoryArena] File mapping name: swanstation_5_0x71f0c6cdfc00"},{"frame":0,"level":"info","text":"[CDROMAsyncReader] Read thread started with readaheaLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":null,"sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"e6f7ea8f07ea6cf5ae3d8e6affad0ab877f27b4e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.34,2.36,2.32],"load_before":[2.29,2.35,2.32],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-679c3f0f9b33","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"167fb7b6527e295b12dca5806a29856f5f31d401","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"593a6e2600946040fefd6eb9aebdc5c0d56f0555","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"eb8c851948806afcf075ea90ddd16727b662e1b59c4821ae56c00706e45576c9"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:17:42+00:00","subject":"region-swanstation-bust-a-move-2-arcade-edition-usa-full","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"35":1,"40":3206,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":1564.6818510526125,"fps_nominal":59.81733322143555,"frames":3600,"inpLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":null,"sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"d893823fe16b894a36e2ae464ffbf4cf624f1135","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.38,2.36,2.33],"load_before":[2.38,2.36,2.33],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-15dfcbf40979","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"167fb7b6527e295b12dca5806a29856f5f31d401","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"593a6e2600946040fefd6eb9aebdc5c0d56f0555","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:19:05+00:00","subject":"region-swanstation-bust-a-move-2-arcade-edition-usa-own","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"35":1,"40":3206,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":1596.4653901629467,"fps_nominal":59.81733322143555,"frames":3600,"inpuLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":null,"sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"a123e7d71f892ae860ede66ce61b8624ace9386e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.46,2.39,2.34],"load_before":[2.5,2.4,2.34],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-8e44763fdeba","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"167fb7b6527e295b12dca5806a29856f5f31d401","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"593a6e2600946040fefd6eb9aebdc5c0d56f0555","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:20:13+00:00","subject":"region-swanstation-bust-a-move-2-arcade-edition-usa-others","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"35":1,"40":3477,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":null,"sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"a123e7d71f892ae860ede66ce61b8624ace9386e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.89,2.5,2.38],"load_before":[2.89,2.5,2.38],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-f13fcb6e40ef","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"167fb7b6527e295b12dca5806a29856f5f31d401","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"593a6e2600946040fefd6eb9aebdc5c0d56f0555","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:21:50+00:00","subject":"region-swanstation-bust-a-move-2-arcade-edition-usa-pack","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"35":1,"40":3206,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":1591.4043413785425,"fps_nominal":59.81733322143555,"frames":3600,"inputLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":null,"sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"a123e7d71f892ae860ede66ce61b8624ace9386e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.27,2.34,2.33],"load_before":[2.3,2.35,2.33],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-61acd5aba9b1","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"167fb7b6527e295b12dca5806a29856f5f31d401","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"9c168a8d6a6c706157307910e2b46039d019e48b","shows":"the PlayStation logo licensed by Sony Computer Entertainment Inc.","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"2443e73be7ce3203408d7398c997fe6ec7cebd9f","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"373e5e3d7c524ed1556b9292a794169bf1de27d0","shows":"a black screen with CREDIT 6","stage":"game"},{"sha1":"53f32c4acd5a522f359952ee48f138e44aee6e61","shows":"the attract-mode game on the beach, PASSAGE TIME IS","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:23:49+00:00","subject":"region-swanstation-puzzle-bobble-2-japan-full","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"35":1,"40":3206,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"}],"files_probed_absent":[],"fps":1481.3801020520157,"fps_nominal":59.81733322143555,"frames":3600,"input_pressed":0,"input_queries":100800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"SwanStation","library_version":"1.0.0 631f0fb","loaded":true,"logs":[{"frame":0,"level":"warn","text":"[InitDiskControlInterface] Failed to set disk control interface"},{"frame":0,"level":"info","text":"[System] Loading CD image '<content>/Puzzle Bobble 2 (Japan).cue'..."},{"frame":0,"level":"info","text":"[System] Auto-detected consLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":null,"sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"a123e7d71f892ae860ede66ce61b8624ace9386e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.32,2.33,2.33],"load_before":[2.32,2.33,2.33],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-f3c29f47b94b","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"167fb7b6527e295b12dca5806a29856f5f31d401","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"9c168a8d6a6c706157307910e2b46039d019e48b","shows":"the PlayStation logo licensed by Sony Computer Entertainment Inc.","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"2443e73be7ce3203408d7398c997fe6ec7cebd9f","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"373e5e3d7c524ed1556b9292a794169bf1de27d0","shows":"a black screen with CREDIT 6","stage":"game"},{"sha1":"53f32c4acd5a522f359952ee48f138e44aee6e61","shows":"the attract-mode game on the beach, PASSAGE TIME IS","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:25:15+00:00","subject":"region-swanstation-puzzle-bobble-2-japan-own","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"35":1,"40":3206,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"}],"files_probed_absent":[],"fps":1471.1162975420486,"fps_nominal":59.81733322143555,"frames":3600,"input_pressed":0,"input_queries":100800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"SwanStation","library_version":"1.0.0 631f0fb","loaded":true,"logs":[{"frame":0,"level":"warn","text":"[InitDiskControlInterface] Failed to set disk control interface"},{"frame":0,"level":"info","text":"[System] Loading CD image '<content>/Puzzle Bobble 2 (Japan).cue'..."},{"frame":0,"level":"info","text":"[System] Auto-detected consLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":null,"sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"a123e7d71f892ae860ede66ce61b8624ace9386e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.89,2.46,2.37],"load_before":[2.79,2.44,2.36],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-d26209a0fecc","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"167fb7b6527e295b12dca5806a29856f5f31d401","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"9c168a8d6a6c706157307910e2b46039d019e48b","shows":"the PlayStation logo licensed by Sony Computer Entertainment Inc.","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"2443e73be7ce3203408d7398c997fe6ec7cebd9f","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"373e5e3d7c524ed1556b9292a794169bf1de27d0","shows":"a black screen with CREDIT 6","stage":"game"},{"sha1":"53f32c4acd5a522f359952ee48f138e44aee6e61","shows":"the attract-mode game on the beach, PASSAGE TIME IS","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:26:00+00:00","subject":"region-swanstation-puzzle-bobble-2-japan-others","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"35":1,"40":3206,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"},{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":["scph5500.bin"],"fps":1406.9133992304448,"fps_nominal":59.81733322143555,"frames":3600,"input_pressed":0,"input_queries":100800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"SwanStation","library_version":"1.0.0 631f0fb","loaded":true,"logs":[{"frame":0,"level":"warn","text":"[InitDiskControlInterface] Failed to set disk control interface"},{"frame":0,"Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":null,"sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"a123e7d71f892ae860ede66ce61b8624ace9386e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.37,2.42,2.36],"load_before":[2.4,2.43,2.37],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-fd8ce164bbae","inputs":{"content":{"label":"Puzzle Bobble 2 (Japan)","sha1":"3b51b45b8b78777c04086fcd1ef1dd0439c365e6","size":1634,"tracks":[{"file":"Puzzle Bobble 2 (Japan) (Track 01).bin","sha1":"78418600795fac1b3378958ff80164cb100a50eb","size":28285152},{"file":"Puzzle Bobble 2 (Japan) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Puzzle Bobble 2 (Japan) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Puzzle Bobble 2 (Japan) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Puzzle Bobble 2 (Japan) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Puzzle Bobble 2 (Japan) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Puzzle Bobble 2 (Japan) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Puzzle Bobble 2 (Japan) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Puzzle Bobble 2 (Japan) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Puzzle Bobble 2 (Japan) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Puzzle Bobble 2 (Japan) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Puzzle Bobble 2 (Japan) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Puzzle Bobble 2 (Japan) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Puzzle Bobble 2 (Japan) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"167fb7b6527e295b12dca5806a29856f5f31d401","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"9c168a8d6a6c706157307910e2b46039d019e48b","shows":"the PlayStation logo licensed by Sony Computer Entertainment Inc.","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"2443e73be7ce3203408d7398c997fe6ec7cebd9f","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"373e5e3d7c524ed1556b9292a794169bf1de27d0","shows":"a black screen with CREDIT 6","stage":"game"},{"sha1":"53f32c4acd5a522f359952ee48f138e44aee6e61","shows":"the attract-mode game on the beach, PASSAGE TIME IS","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:27:38+00:00","subject":"region-swanstation-puzzle-bobble-2-japan-pack","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"35":1,"40":3206,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"}],"files_probed_absent":[],"fps":1467.1072560128605,"fps_nominal":59.81733322143555,"frames":3600,"input_pressed":0,"input_queries":100800,"isolation":"bwrap","last_frame_size":[320,240],"library_name":"SwanStation","library_version":"1.0.0 631f0fb","loaded":true,"logs":[{"frame":0,"level":"warn","text":"[InitDiskControlInterface] Failed to set disk control interface"},{"frame":0,"level":"info","text":"[System] Loading CD image '<content>/Puzzle Bobble 2 (Japan).cue'..."},{"frame":0,"level":"info","text":"[System] Auto-detected consLine truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":null,"sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"a123e7d71f892ae860ede66ce61b8624ace9386e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.34,2.4,2.36],"load_before":[2.37,2.4,2.36],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-06a9fd6e8315","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"167fb7b6527e295b12dca5806a29856f5f31d401","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"e6f4f8524f3c8a47d5dba0d33f63c64dcebccde7","shows":"the PlayStation logo licensed by Sony Computer Entertainment Europe","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"d0c5e568fd2585ad5c0ed244c25bdacdbb596d55","shows":"the anti-piracy notice","stage":"game"},{"sha1":"4ea5612d272a8b05fabf98ed7dc4b245fe759001","shows":"the Acclaim and Taito credits text","stage":"game"},{"sha1":"ed433c340dc7ef65c8afba4434542c1827251127","shows":"the Acclaim logo","stage":"game"},{"sha1":"a909b761d6f46ec28bdf46aac874873db40396b7","shows":"the Taito logo on white","stage":"game"}],"sha256":"22b009c754169d6caf1f5f8979065914ed40118cf2fa12d46da0fcbc2f697437"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:28:45+00:00","subject":"region-swanstation-bust-a-move-2-arcade-edition-europe-full","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"32":2,"35":1,"40":3185,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":1481.4597729102663,"fps_nominal":49.74681854248047Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":null,"sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"f2f890602dcd1407a5c7a3a5f9c145caa383d843","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.33,2.42,2.37],"load_before":[2.36,2.43,2.38],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-65464d86bef7","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"167fb7b6527e295b12dca5806a29856f5f31d401","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"e6f4f8524f3c8a47d5dba0d33f63c64dcebccde7","shows":"the PlayStation logo licensed by Sony Computer Entertainment Europe","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"d0c5e568fd2585ad5c0ed244c25bdacdbb596d55","shows":"the anti-piracy notice","stage":"game"},{"sha1":"4ea5612d272a8b05fabf98ed7dc4b245fe759001","shows":"the Acclaim and Taito credits text","stage":"game"},{"sha1":"ed433c340dc7ef65c8afba4434542c1827251127","shows":"the Acclaim logo","stage":"game"},{"sha1":"a909b761d6f46ec28bdf46aac874873db40396b7","shows":"the Taito logo on white","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:30:06+00:00","subject":"region-swanstation-bust-a-move-2-arcade-edition-europe-own","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"32":2,"35":1,"40":3185,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":1497.1183341722003,"fps_nominal":49.7468185424804Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":null,"sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"f2f890602dcd1407a5c7a3a5f9c145caa383d843","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[1.92,1.95,2.16],"load_before":[1.91,1.95,2.16],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-f8ac14dc774d","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"167fb7b6527e295b12dca5806a29856f5f31d401","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"e6f4f8524f3c8a47d5dba0d33f63c64dcebccde7","shows":"the PlayStation logo licensed by Sony Computer Entertainment Europe","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"d0c5e568fd2585ad5c0ed244c25bdacdbb596d55","shows":"the anti-piracy notice","stage":"game"},{"sha1":"4ea5612d272a8b05fabf98ed7dc4b245fe759001","shows":"the Acclaim and Taito credits text","stage":"game"},{"sha1":"ed433c340dc7ef65c8afba4434542c1827251127","shows":"the Acclaim logo","stage":"game"},{"sha1":"a909b761d6f46ec28bdf46aac874873db40396b7","shows":"the Taito logo on white","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:37:08+00:00","subject":"region-swanstation-bust-a-move-2-arcade-edition-europe-others","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"32":3534,"35":1,"40":3490,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5500.bin","sha1_after":"b05def971d8ec59f346f2d9ac21fb742e3eb6917","sha1_staged":"b05def971d8ec59f346f2d9ac21fb742e3eb6917"},{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f3Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":null,"sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"5be7ee0760bbf2445dc9116d4da74295a974ea6e","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.95,3.09,2.81],"load_before":[2.94,3.09,2.81],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-0c06f75b6c25","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (Europe)","sha1":"fbfb904cdb7a0e25a659980a5ed1206298bc7a1e","size":1992,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 01).bin","sha1":"eb618f16522671450b00317df195b36550a2ffdd","size":28689696},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (Europe) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"167fb7b6527e295b12dca5806a29856f5f31d401","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"e6f4f8524f3c8a47d5dba0d33f63c64dcebccde7","shows":"the PlayStation logo licensed by Sony Computer Entertainment Europe","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"d0c5e568fd2585ad5c0ed244c25bdacdbb596d55","shows":"the anti-piracy notice","stage":"game"},{"sha1":"4ea5612d272a8b05fabf98ed7dc4b245fe759001","shows":"the Acclaim and Taito credits text","stage":"game"},{"sha1":"ed433c340dc7ef65c8afba4434542c1827251127","shows":"the Acclaim logo","stage":"game"},{"sha1":"a909b761d6f46ec28bdf46aac874873db40396b7","shows":"the Taito logo on white","stage":"game"}],"sha256":"01899eb8623a201eb7fb1f5fb850b8f7766381d1f5878371d42aea54c2841d92"},"presses":[],"repetitions":1,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:49:41+00:00","subject":"region-swanstation-bust-a-move-2-arcade-edition-europe-pack","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"32":2,"35":1,"40":3185,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5502.bin","sha1_after":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0","sha1_staged":"f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0"}],"files_probed_absent":[],"fps":1450.5398569948416,"fps_nominal":49.746818542480Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":"https://github.com/libretro/swanstation","sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"f2d474d86673d09275b49a5c052c6db0aad1e872","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.37,2.34,2.33],"load_before":[2.4,2.35,2.33],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-a18c4388b3e3","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"167fb7b6527e295b12dca5806a29856f5f31d401","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"593a6e2600946040fefd6eb9aebdc5c0d56f0555","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"a0d7d28caa5f147cc3199d6dca5d1500d9a05b91dd234eb6e5900bdd0245a555"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:25:35+00:00","subject":"files-swanstation-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"35":1,"40":3206,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[{"path":"scph5501.bin","sha1_after":"0555c6fae8906f3f09baf5988f00e55f88e9f30b","sha1_staged":"0555c6fae8906f3f09baf5988f00e55f88e9f30b"}],"files_probed_absent":[],"fps":1608.9248038542762,"fps_nominal":59.817Line truncated
{"core":{"artifact":"https://buildbot.libretro.com/nightly/linux/x86_64/latest/swanstation_libretro.so.zip","build_command":null,"commit":null,"compiler":["GCC: (Ubuntu 9.4.0-1ubuntu1~16.04) 9.4.0"],"file":"swanstation_libretro.so","library_name":"SwanStation","library_version":"1.0.0 631f0fb","repo":"https://github.com/libretro/swanstation","sha256":"fc65bb2d662c3ad762b611a62ac578f78efd260431d3b8c090f0eb40887a77ea"},"emulator":"swanstation","flags":[],"frontend":{"commit":"f2d474d86673d09275b49a5c052c6db0aad1e872","script":"scripts/core_probe.py","script_modified":false,"script_sha256":"88bab307dab8da3ebdab4865ebe24b16982343b1554ec051c6503ab9e9476057"},"host":{"cpu_count":12,"cpu_model":"13th Gen Intel(R) Core(TM) i9-13900K","kernel":"6.18.54.1-microsoft-standard-WSL2","load_after":[2.4,2.43,2.37],"load_before":[2.44,2.44,2.37],"machine":"x86_64","max_load":3.0,"os":"Linux-6.18.54.1-microsoft-standard-WSL2-x86_64-with-glibc2.39","python":"3.12.3"},"id":"2026-10-27-f9363c9e87f6","inputs":{"content":{"label":"Bust-A-Move 2 - Arcade Edition (USA)","sha1":"ed4a437a6f653cc71ad6ac0da68cc85eb093f298","size":1947,"tracks":[{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 01).bin","sha1":"de8ecb522f6fb6091e5a8f7571fa1cfdf1570a46","size":28311024},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 02).bin","sha1":"4d08db14699c9e1006e0fd64580308266bea5d4e","size":1869840},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 03).bin","sha1":"bc9073820c6caab2a1d5cc69238587e6bde475f7","size":13345248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 04).bin","sha1":"e26b0dc47797003b467891f51d8e2084d17f30d7","size":12726672},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 05).bin","sha1":"80a25117805df470e174222daad36861c2db2fd1","size":33958176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 06).bin","sha1":"0a393b4015a63e8d51e3f4e17e09cf0648523561","size":35030688},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 07).bin","sha1":"f007bd4c61f7dc30fa32244f538f35d3cda72420","size":33795888},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 08).bin","sha1":"a001e6a91d13a08b1e8fd94ab211871b9d183117","size":34898976},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 09).bin","sha1":"d1765b989974cd7bf68f16e29e77f76956c84994","size":34219248},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 10).bin","sha1":"79eaef819941ef937534279e6279b0b9624ed32c","size":1691088},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 11).bin","sha1":"95062adcbfe6763522d728e6ba0fe51a2f83df0b","size":25458048},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 12).bin","sha1":"69813fee25b96a9bc68c14ec34291609b8d79d1f","size":10033632},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 13).bin","sha1":"5635907f575c7d71109370fb8c87f4fc006d6711","size":13053600},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 14).bin","sha1":"444f7bc8f28e8972807c555a80f81bc3dbbf4590","size":36016176},{"file":"Bust-A-Move 2 - Arcade Edition (USA) (Track 15).bin","sha1":"bea344b803475b463195df6fd60834069afe246e","size":32163600}]},"env":{},"frame_hash_every":10,"frames":3600,"joypad_ports":2,"observables":["frame_sha1","video_sha1","audio_sha1","state_sha1","frame_hashes","uniform_frames"],"options":{},"oracle":{"bios_patterns":[],"error_patterns":[],"error_screens":[{"sha1":"167fb7b6527e295b12dca5806a29856f5f31d401","shows":"the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)"}],"file":"tests/campaign/oracle.yml","references":[{"sha1":"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83","shows":"the Sony Computer Entertainment logo","stage":"bios"},{"sha1":"593a6e2600946040fefd6eb9aebdc5c0d56f0555","shows":"the PlayStation logo licensed by Sony Computer Entertainment America","stage":"bios"},{"sha1":"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230","shows":"Now Loading with the yellow bubble","stage":"game"},{"sha1":"dd6dac23da6b8f4f256b8090568c52e8f8428425","shows":"the Acclaim and Taito credits text, CREDIT 6","stage":"game"},{"sha1":"533715dd946ba1984af1b9356e06989c7770e04a","shows":"the Acclaim logo, CREDIT 6","stage":"game"},{"sha1":"0d17db6e9a2d5793695884c85dd2177093420fdc","shows":"the Taito logo on white, CREDIT 6","stage":"game"},{"sha1":"2238516839dc43c0b22c00db5fe76128f5fb6f3f","shows":"a black screen with CREDIT 6","stage":"game"}],"sha256":"a0d7d28caa5f147cc3199d6dca5d1500d9a05b91dd234eb6e5900bdd0245a555"},"presses":[],"repetitions":2,"warmup":0},"kind":"run","record_version":4,"recorded_at":"2026-10-27T22:27:11+00:00","subject":"none-swanstation-bust-a-move-2-arcade-edition-usa","supersedes":null,"variants":[{"flags":[],"label":"default","repetitions":[{"env_unanswered":{"11":1,"13":1,"14":15,"23":1,"35":1,"40":3327,"45":3,"47":3600,"51":1,"55":190,"56":1,"57":1,"59":1,"69":1},"files_opened":[],"files_probed_absent":["scph5501.bin"],"fps":1540.034882856006,"fps_nominal":59.81733322143555,"frames":3600,"input_pressed":0,"input_queries":100800,"isolation":"bwrap","last_frame_size":[320,240],"library_Line truncated
{"check":{"claim":"swanstation boots Bust-A-Move 2 - Arcade Edition (USA) with ps1_rom.bin alone and refuses a wrong file under its name","method":"ps1_rom.bin alone as ps1_rom.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[10,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[20,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[30,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[40,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[50,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[60,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[70,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[80,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[90,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[100,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[110,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[120,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[130,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[140,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[150,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[160,"154688dd18ae734dba85ab19ad46d7118ab2f2a6"],[170,"6e7a6325516bfb954c86172a8368f4c15fe3aace"],[180,"5758e30df01e5eb4afc2665885e50c04e427d631"],[190,"81effa14e5507700b7459f46e670036c54e14a9b"],[200,"69ccdfe60203b9de19c8c690dc7bda4b9b79da44"],[210,"620c1e8d887adb3553f83845846935ac0bd7331f"],[220,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[230,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[240,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[250,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[260,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[270,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[280,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[290,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[300,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[310,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[320,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[330,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[340,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[350,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[360,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[370,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[380,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[390,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[400,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[410,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[420,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[430,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[440,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[450,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[460,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[470,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[480,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[490,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[500,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[510,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[520,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[530,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[540,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[550,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[560,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[570,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[580,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[590,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[600,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[610,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[620,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[630,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[640,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[650,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[660,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[670,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[680,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[690,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[700,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[710,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[720,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[730,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[740,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[750,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[760,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[770,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[780,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[790,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[800,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[810,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[820,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[830,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[840,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[850,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[860,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[870,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[880,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[890,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[900,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[910,"e5af1f2023d0d729ce7aabfLine truncated
{"check":{"claim":"every copy of ps1_rom.bin boots Bust-A-Move 2 - Arcade Edition (USA) on swanstation","method":"Each copy the collection holds staged alone as ps1_rom.bin, each run 2 times for 3600 frames. The boot oracle judges each copy.","observable":"frame_hashes","result":{"groups":[{"value":[[0,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[10,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[20,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[30,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[40,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[50,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[60,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[70,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[80,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[90,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[100,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[110,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[120,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[130,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[140,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[150,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[160,"154688dd18ae734dba85ab19ad46d7118ab2f2a6"],[170,"6e7a6325516bfb954c86172a8368f4c15fe3aace"],[180,"5758e30df01e5eb4afc2665885e50c04e427d631"],[190,"81effa14e5507700b7459f46e670036c54e14a9b"],[200,"69ccdfe60203b9de19c8c690dc7bda4b9b79da44"],[210,"620c1e8d887adb3553f83845846935ac0bd7331f"],[220,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[230,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[240,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[250,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[260,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[270,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[280,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[290,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[300,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[310,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[320,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[330,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[340,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[350,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[360,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[370,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[380,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[390,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[400,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[410,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[420,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[430,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[440,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[450,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[460,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[470,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[480,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[490,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[500,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[510,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[520,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[530,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[540,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[550,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[560,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[570,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[580,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[590,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[600,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[610,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[620,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[630,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[640,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[650,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[660,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[670,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[680,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[690,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[700,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[710,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[720,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[730,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[740,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[750,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[760,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[770,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[780,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[790,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[800,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[810,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[820,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[830,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[840,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[850,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[860,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[870,"7453341901c7f72b2b852c1e5fa9f8a2f74e11bd"],[880,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[890,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[900,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[910,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[920,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[930,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[940,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[950,"e5af1f2023d0d729ce7aabf52d8e03f75bb8d230"],[960,Line truncated
{"check":{"claim":"swanstation boots Bust-A-Move 2 - Arcade Edition (USA) with psxonpsp660.bin alone and refuses a wrong file under its name","method":"psxonpsp660.bin alone as psxonpsp660.bin, then 524288 zero bytes and its first 262144 bytes, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[10,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[20,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[30,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[40,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[50,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[60,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[70,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[80,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[90,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[100,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[110,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[120,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[130,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[140,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[150,"6e18adf4d2fa0dfb80cbb7e7fb45fa3b6599e5c6"],[160,"e02d0fd225cebfa24cb55876875838468df1f85c"],[170,"f82237bc74029b208d0d9ee42708be7e2993b1b0"],[180,"1af84636d8a821c425d0d16996bc731c79ea2756"],[190,"5b7db9932cf80eeecb90e91b0f32fa3e9e9b8221"],[200,"1e70b268416b6d2a98423386b40d4743f3a4d3b7"],[210,"e8baae73b5a4b6fe3c75378b61202bf52390a002"],[220,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[230,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[240,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[250,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[260,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[270,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[280,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[290,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[300,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[310,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[320,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[330,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[340,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[350,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[360,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[370,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[380,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[390,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[400,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[410,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[420,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[430,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[440,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[450,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[460,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[470,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[480,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[490,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[500,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[510,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[520,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[530,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[540,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[550,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[560,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[570,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[580,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[590,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[600,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[610,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[620,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[630,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[640,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[650,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[660,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[670,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[680,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[690,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[700,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[710,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[720,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[730,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[740,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[750,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[760,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[770,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[780,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[790,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[800,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[810,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[820,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[830,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[840,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[850,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[860,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[870,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[880,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[890,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[900,"180ff6f4954444ed4a675ea7d7ef272d1895e29a"],[910,"180ff6f4954Line truncated
{"check":{"claim":"swanstation boots Bust-A-Move 2 - Arcade Edition (USA) with scph5501.bin alone and refuses a wrong file under its name","method":"scph5501.bin alone as scph5501.bin, then 524288 zero bytes and its first 262144 bytes, then scph5500.bin, scph5502.bin staged under its name, nothing else staged. Each run 2 times from a fresh process for 3600 frames with no button pressed, every 10th frame hashed. The boot oracle judges each variant against the reference frames of Bust-A-Move 2 - Arcade Edition (USA).","observable":"frame_hashes","result":{"groups":[{"value":[[0,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[10,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[20,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[30,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[40,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[50,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[60,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[70,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[80,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[90,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[100,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[110,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[120,"da39a3ee5e6b4b0d3255bfef95601890afd80709"],[130,"7046e2f6bda4b360485722ade2c8c94824685540"],[140,"1a79c3f6e9f45ef06531acea2b4e2e30d3d8b8e8"],[150,"3c6f9678bfe5d0433aebb9ae3e9efbbfc5fd62c2"],[160,"84a7829a4078ea142f5004681a8cd8ba0f64f772"],[170,"6ae3c4c197eaf1014f7e903f708189d3bdb62e96"],[180,"5b9de43af7943c200dae7a7853637de7f3092646"],[190,"2116cdc10b8f69825d5f83c0a31b80f4fe667a33"],[200,"55cf2bd572d949733bdc741a76f533963778847a"],[210,"f875f10898942a3928cb54c6ea2ee6fda17617cc"],[220,"6935cd6562626c4876f09d1ee8f4870fb260dedc"],[230,"3c6e6e92d153c5693da47ff0b333a13b9296b8d1"],[240,"bea0ea4eaceddbb833418749c2c36241f04c04ae"],[250,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[260,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[270,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[280,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[290,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[300,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[310,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[320,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[330,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[340,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[350,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[360,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[370,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[380,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[390,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[400,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[410,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[420,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[430,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[440,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[450,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[460,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[470,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[480,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[490,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[500,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[510,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[520,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[530,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[540,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[550,"fad859d9b8211ce9f35ad3a05b0b7d184fe14d83"],[560,"cd22ca0a08ba97eccbb7fee7cd2542d22b124f8d"],[570,"2966a869a40438c373e7aec133ea8bd2984c58b7"],[580,"405513eab3403a7dca58059df27a510bdd109d7a"],[590,"e46b311640b057b5d46a3d8a14b2fbc3e83547e4"],[600,"3791f3ecf398d95f506295bacca32e2de8ea8cca"],[610,"668d9390ee00842f4178efd6f308ad1da851edb8"],[620,"3bb7e278a6d007452b329ad624ada99220b68cab"],[630,"6466c6ce12f24862251707ab72b236520f0f7dca"],[640,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[650,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[660,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[670,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[680,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[690,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[700,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[710,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[720,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[730,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[740,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[750,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[760,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[770,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[780,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[790,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[800,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[810,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[820,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[830,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[840,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[850,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[860,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[870,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[880,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[890,"593a6e2600946040fefd6eb9aebdc5c0d56f0555"],[900,"593a6e26009460Line truncated
+270 -3
View File
@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://abdess.github.io/retrobios/api/v1/schemas/core-probe-record.schema.json",
"title": "RetroBIOS core probe record",
"description": "One line of measurements/<emulator>.jsonl: one run of scripts/core_probe.py, a libretro core executed headless, in full, with what is needed to judge and reproduce it. Every repetition, its core logs and per-frame hashes, and the raw timing values are in the line.",
"description": "One line of measurements/<emulator>.jsonl: one run of scripts/core_probe.py, a libretro core executed headless, in full, with what is needed to judge and reproduce it. Every repetition, its core logs and per-frame hashes, and the raw timing values are in the line. From record_version 4 every repetition and every variant carries the boot oracle's verdict (boots, bios_error, crash, hang, unknown) with the evidence that decided it.",
"type": "object",
"additionalProperties": false,
"required": [
@@ -22,7 +22,11 @@
],
"properties": {
"record_version": {
"const": 3
"enum": [
3,
4
],
"description": "3: records before the boot oracle. 4: every repetition and variant carries `verdict` and `verdict_evidence`, and `inputs.oracle` names what the verdicts were judged against."
},
"id": {
"type": "string",
@@ -144,7 +148,11 @@
],
"properties": {
"script": {
"const": "scripts/core_probe.py"
"enum": [
"scripts/core_probe.py",
"scripts/pack_probe.py",
"scripts/standalone_probe.py"
]
},
"commit": {
"type": [
@@ -353,6 +361,9 @@
"frame_hash_every": {
"type": "integer",
"minimum": 0
},
"oracle": {
"$ref": "#/$defs/oracle"
}
}
},
@@ -398,6 +409,13 @@
"items": {
"type": "string"
}
},
"verdict": {
"$ref": "#/$defs/verdict",
"description": "The verdict every repetition of the variant agrees on, else unknown."
},
"verdict_evidence": {
"$ref": "#/$defs/verdict_evidence"
}
}
}
@@ -492,6 +510,13 @@
}
}
}
},
"verdicts": {
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/verdict"
},
"description": "Variant label -> the variant's verdict."
}
}
}
@@ -535,6 +560,51 @@
"check"
]
}
},
{
"if": {
"properties": {
"record_version": {
"const": 4
}
}
},
"then": {
"properties": {
"inputs": {
"required": [
"oracle"
]
},
"variants": {
"items": {
"required": [
"verdict",
"verdict_evidence"
],
"properties": {
"repetitions": {
"items": {
"required": [
"verdict",
"verdict_evidence"
]
}
}
}
}
},
"check": {
"properties": {
"result": {
"required": [
"verdicts"
]
}
}
}
}
}
}
],
"$defs": {
@@ -747,8 +817,205 @@
}
}
]
},
"verdict": {
"$ref": "#/$defs/verdict"
},
"verdict_evidence": {
"$ref": "#/$defs/verdict_evidence"
},
"exit": {
"type": "object",
"additionalProperties": false,
"required": [
"status",
"signal"
],
"properties": {
"status": {
"type": [
"integer",
"null"
]
},
"signal": {
"type": [
"string",
"null"
]
},
"timeout_s": {
"type": "number",
"minimum": 0
}
},
"description": "How a worker that did not finish ended: its exit status or the signal that killed it, or the timeout after which the probe killed it."
}
}
},
"verdict": {
"enum": [
"boots",
"bios_error",
"crash",
"hang",
"unknown"
],
"description": "boots: a reference frame of the content was reached. bios_error: an error pattern of the core log or a known error screen, and no reference frame. crash: the worker died. hang: killed after the timeout, or every sampled frame of the second half is one colour. unknown: none of these."
},
"verdict_evidence": {
"type": "object",
"additionalProperties": false,
"required": [
"rule",
"detail"
],
"properties": {
"rule": {
"enum": [
"reference_frame",
"error_pattern",
"error_screen",
"exit_status",
"timeout",
"uniform_tail",
"no_evidence",
"repetitions_agree",
"repetitions_disagree"
]
},
"detail": {
"type": "string",
"minLength": 1
},
"frame": {
"type": "integer",
"minimum": 0
},
"sha1": {
"$ref": "#/$defs/sha1"
},
"stages": {
"type": "array",
"items": {
"$ref": "#/$defs/stage"
},
"description": "Stages of the reference frames the run reached, in the order first reached."
},
"pattern": {
"type": "string"
},
"log": {
"type": "string"
},
"exit_status": {
"type": [
"integer",
"null"
]
},
"signal": {
"type": [
"string",
"null"
]
},
"repetitions": {
"type": "array",
"items": {
"$ref": "#/$defs/verdict"
}
}
}
},
"stage": {
"enum": [
"bios",
"game"
],
"description": "bios: a screen only the console's own BIOS draws (its logo). game: a screen of the content itself."
},
"oracle": {
"oneOf": [
{
"type": "null"
},
{
"type": "object",
"additionalProperties": false,
"required": [
"file",
"sha256",
"references",
"error_patterns",
"error_screens"
],
"properties": {
"file": {
"type": "string"
},
"sha256": {
"$ref": "#/$defs/sha256"
},
"references": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"sha1",
"stage",
"shows"
],
"properties": {
"sha1": {
"$ref": "#/$defs/sha1"
},
"stage": {
"$ref": "#/$defs/stage"
},
"shows": {
"type": "string"
}
}
}
},
"error_patterns": {
"type": "array",
"items": {
"type": "string"
}
},
"error_screens": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"sha1",
"shows"
],
"properties": {
"sha1": {
"$ref": "#/$defs/sha1"
},
"shows": {
"type": "string"
}
}
}
},
"bios_patterns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Log lines by which the core says it loaded the console's own BIOS: they add the bios stage when its screens are hidden."
}
}
}
],
"description": "What the verdicts were judged against: the reference frames of this content and core, the core's error patterns, error screens and BIOS load patterns, from the oracle file at its sha256. Null when the run had no oracle entry."
}
}
}
+2 -1
View File
@@ -553,7 +553,8 @@
"required": {"type": "array", "minItems": 1, "uniqueItems": true, "items": {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}-[0-9a-f]{12}$"}},
"hle_fallback": {"type": "array", "minItems": 1, "uniqueItems": true, "items": {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}-[0-9a-f]{12}$"}},
"path": {"type": "array", "minItems": 1, "uniqueItems": true, "items": {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}-[0-9a-f]{12}$"}},
"aliases": {"type": "array", "minItems": 1, "uniqueItems": true, "items": {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}-[0-9a-f]{12}$"}}
"aliases": {"type": "array", "minItems": 1, "uniqueItems": true, "items": {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}-[0-9a-f]{12}$"}},
"validation": {"type": "array", "minItems": 1, "uniqueItems": true, "items": {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}-[0-9a-f]{12}$"}}
}
},
"adler32_byteswap": {
+361 -175
View File
@@ -1,41 +1,56 @@
#!/usr/bin/env python3
"""Run the real-condition campaign unattended: cores, content, checks, rules.
"""Run the real-condition campaign end to end: cores, content, checks, rules.
For each emulator profile in scope, the campaign takes the core (the libretro
x86_64 Linux nightly, else a build of the profile's pinned commit), the test
content of each of its systems (tests/campaign/content.yml, fetched through
romfetch when it is not on disk), and runs core_probe.py:
A maintainer starts each pass. For each emulator profile in scope, the
campaign takes the core (the libretro x86_64 Linux nightly, else a build of
the profile's pinned commit), the test content of each of its systems
(tests/campaign/content.yml, fetched through romfetch when it is not on
disk), and runs core_probe.py. The boot oracle of core_probe judges every
run: boots, bios_error, crash, hang or unknown, against the reference frames
and error patterns of tests/campaign/oracle.yml.
files every declared file the collection holds, staged, and which ones
the core opens
boot the content with no file against the content with the declared
file, compared on the frames the core shows
files every declared file the collection holds, staged: the full set,
and which files the core opens
none no BIOS at all
negative per declared file of the content's region: the file alone, then
zeros of its size, its first half and other regions' dumps
staged under its name
path a declared file staged where the core looked for it
alias a declared file staged under a name the core looked for
variants each .variants/ copy of a file the core opened
bench the content timed, warm-up excluded, 5 repetitions
bench with --bench only: the content timed, warm-up excluded
Every run is a record in measurements/<emulator>.jsonl. The fixed rule table
(campaign_rules.py) turns records into verdicts. A verdict the table settles
is written into the profile with the record ids as `evidence:`. Any other
goes to measurements/findings.jsonl, where the site lists it as open. Each
pass adds one line to measurements/campaign-runs.jsonl.
(campaign_rules.py) reads the verdicts, never a comparison of frames. A
verdict the table settles is written into the profile with the record ids
as `evidence:`. Any other goes to measurements/findings.jsonl, where the
site lists it as open. Each pass adds one line to
measurements/campaign-runs.jsonl.
`references` runs the full set once per core and content with its frames
saved as PNG, and lists the screens that stay on for several samples: the
candidates a reviewer looks at before writing them into oracle.yml.
State is .cache/campaign/state.json of the main checkout: per check done,
failed or pending with the reason, and the core sha256 and profile digest it
ran against. A pass skips what is done unless the core build or the profile
changed. The campaign holds the host-wide automation lock, waits for an idle
host, stops cleanly on a busy host or a full disk, and resumes on the next
pass. Under autorun (`campaign` job) the lock is the job's.
failed or pending with the reason, and the core sha256, profile digest,
oracle sha256 and record version it ran against. A pass skips what is done
unless one of them changed. The campaign holds the host-wide automation
lock, waits for an idle host, stops cleanly on a busy host or a full disk,
and the next pass a maintainer starts resumes there.
Usage:
python scripts/campaign.py run [--only CORE,...] [--system ID] [--budget 6h]
python scripts/campaign.py run [--only CORE,...] [--system ID] [--budget 6h] [--bench]
python scripts/campaign.py run --dry-run
python scripts/campaign.py run --commit [--commit-every N]
python scripts/campaign.py references --only CORE,... [--system ID]
python scripts/campaign.py status [--json]
python scripts/campaign.py findings [--all] [--json]
python scripts/campaign.py gate
python scripts/campaign.py install-timer [--enable]
install-timer is opt-in: a contributor who wants a schedule on their own
machine installs the timer. It writes the units and enables nothing unless
--enable is passed.
"""
from __future__ import annotations
@@ -86,6 +101,7 @@ PENDING = "pending"
CRASH_ATTEMPTS = 3
NETWORK_DELAYS = (10, 60, 300)
MAX_ALIAS_CANDIDATES = 6
MAX_REGION_DUMPS = 2
BENCH_WARMUP = 600
BENCH_FRAMES = 1800
BENCH_REPEAT = 5
@@ -175,6 +191,11 @@ def region_matches(entry: dict, region: str | None) -> bool:
return region in regions or "world" in regions
def regions_of(entry: dict) -> list[str]:
regions = entry.get("region") or []
return [regions] if isinstance(regions, str) else list(regions)
def is_bios(entry: dict) -> bool:
return entry.get("category", "bios") == "bios" and entry.get("type") != "directory"
@@ -235,6 +256,8 @@ class Settings:
bench_frames: int = BENCH_FRAMES
romfetch: str = ""
network: bool = True
# Benchmarks only choose between variants: never part of a default pass.
bench: bool = False
delays: tuple[float, ...] = NETWORK_DELAYS
echo: bool = True
# Third-party code (a nightly core, a project's Makefile) runs only under
@@ -252,6 +275,7 @@ class Paths:
content: Path
db: Path
content_file: Path = CONTENT_FILE
oracle: Path = core_probe.DEFAULT_ORACLE
@property
def state(self) -> Path:
@@ -279,9 +303,9 @@ def child_env(romfetch: bool = False) -> dict[str, str]:
"""What a program the campaign starts inherits: autorun's allowlist,
never a token or a password. romfetch also gets its own settings
(ROMFETCH_*), its account staying in its config file."""
names: list[str] = []
names: list[str] = [core_probe.PROBE_LOCK_ENV, core_probe.PROBE_LOCK_HELD_ENV]
if romfetch:
names = [k for k in os.environ if k.startswith("ROMFETCH_")] + list(ROMFETCH_PASSED)
names += [k for k in os.environ if k.startswith("ROMFETCH_")] + list(ROMFETCH_PASSED)
return autorun.safe_env(names)
@@ -470,14 +494,17 @@ def save_state(path: Path, state: dict) -> None:
autorun.save_state(path, state)
def should_run(previous: dict | None, core_sha: str, digest: str) -> bool:
def should_run(previous: dict | None, core_sha: str, digest: str, oracle_sha: str = "") -> bool:
"""A check runs again when it never ran, is pending, or ran against
another core build or another version of the profile."""
another core build, another version of the profile, another oracle, or
before records carried a verdict."""
if not previous:
return True
if previous.get("status") == PENDING:
return True
return previous.get("core_sha256") != core_sha or previous.get("profile_digest") != digest
return (previous.get("core_sha256") != core_sha or previous.get("profile_digest") != digest
or previous.get("record_version") != mr.RECORD_VERSION
or previous.get("oracle_sha256", "") != oracle_sha)
# --------------------------------------------------------------------------
@@ -875,6 +902,8 @@ class Campaign:
self.cores = Cores(self)
self.store = ContentStore(self)
self.content = load_content(paths.content_file)
self.oracle_sha = file_sha256(paths.oracle) if paths.oracle.is_file() else ""
self.oracle_data = core_probe.load_oracle(paths.oracle)[0]
self.deadline = 0.0
self.current: Pass | None = None
self.dirty_at_start: set[str] = set()
@@ -1004,6 +1033,8 @@ class Campaign:
"--emulator", emulator, "--subject", subject,
"--max-load", str(self.host.max_load), "--timeout", str(self.settings.probe_timeout),
"--work-dir", str(self.paths.root / "tmp" / "core_probe")]
if self.paths.oracle.is_file():
argv += ["--oracle", str(self.paths.oracle)]
if not self.settings.allow_unsandboxed:
argv.append("--require-sandbox")
if core.artifact:
@@ -1025,8 +1056,14 @@ class Campaign:
def remember(self, emulator: str, key: str, result: ProbeResult, core: Core | None,
digest: str) -> None:
judged = None
if result.record and result.record["inputs"].get("content"):
judged = [result.record["inputs"]["content"]["sha1"], result.record["core"]["library_name"]]
entry = {"status": result.status, "at": now_iso(), "profile_digest": digest,
"core_sha256": core.sha256 if core else None}
"core_sha256": core.sha256 if core else None,
"record_version": mr.RECORD_VERSION, "oracle_sha256": self.oracle_digest(judged)}
if judged:
entry["oracle_key"] = judged
if result.reason:
entry["reason"] = result.reason
if result.log:
@@ -1042,6 +1079,38 @@ class Campaign:
self.state["checks"].setdefault(emulator, {})[key] = {
"status": PENDING, "reason": reason, "at": now_iso(), "profile_digest": digest}
def oracle_digest(self, key: list[str] | None) -> str:
"""What a check's verdicts depend on in the oracle: the entries of its
content and core, else the whole file. Another core's references
never make a check run again."""
if not key:
return self.oracle_sha
return mr.value_sha1(core_probe.oracle_for(self.oracle_data, *key))
def needed(self, emulator: str, key: str, core: Core, digest: str) -> bool:
previous = self.state["checks"].get(emulator, {}).get(key)
judged = (previous or {}).get("oracle_key")
if previous and not judged and previous.get("record"):
record = self.read_record(emulator, previous["record"]) or {}
if (record.get("inputs") or {}).get("content"):
judged = [record["inputs"]["content"]["sha1"], record["core"]["library_name"]]
previous["oracle_key"] = judged
# Judged against the entries the record kept, not the file it named.
kept = {k: v for k, v in (record["inputs"].get("oracle") or {}).items()
if k not in ("file", "sha256")}
previous["oracle_sha256"] = mr.value_sha1({"bios_patterns": [], **kept})
return should_run(previous, core.sha256, digest, self.oracle_digest(judged))
def check(self, emulator: str, key: str, core: Core, digest: str, argv: list[str],
log_name: str) -> dict | None:
"""The record of a check: run now when needed, else the one kept."""
if not self.needed(emulator, key, core, digest):
previous = self.state["checks"].get(emulator, {}).get(key) or {}
return self.read_record(emulator, previous.get("record"))
result = self.probe(argv, log_name)
self.remember(emulator, key, result, core, digest)
return result.record
def system_entries(self, profile: dict, system: str) -> list[tuple[int, dict]]:
from validation import filter_files_by_mode
@@ -1060,84 +1129,148 @@ class Campaign:
held.sort(key=lambda item: (item[1].get("priority", 1 << 30), item[0]))
return held[0] if held else None
@staticmethod
def other_regions(entry: dict, staged: dict[str, tuple[int, dict, Path]], local: Path) -> list[Path]:
"""Held dumps of the same system for regions this entry does not
serve, one per distinct file: the wrong-region variants."""
mine = set(regions_of(entry))
if not mine or "world" in mine:
return []
out: dict[str, Path] = {}
for _, other, path in staged.values():
theirs = set(regions_of(other))
if theirs and "world" not in theirs and not theirs & mine and path.resolve() != local.resolve():
out.setdefault(file_sha1(path), path)
return sorted(out.values(), key=lambda p: p.name)[:MAX_REGION_DUMPS]
def run_unit_content(self, unit: Unit, core: Core, content: Content, digest: str) -> None:
emulator, profile = unit.emulator, unit.profile
checks = self.state["checks"].setdefault(emulator, {})
entries = self.system_entries(profile, content.system)
boot = self.boot_entry(entries, content)
keys = {name: self.check_key(core, content, name) for name in ("files", "bench")}
if boot:
keys["boot"] = self.check_key(core, content, f"boot:{boot[1]['name']}")
todo = [k for k in keys.values() if should_run(checks.get(k), core.sha256, digest)]
if not todo:
return
try:
folder = self.store.get(content)
load = load_file(folder, content.load)
except Unavailable as exc:
for key in todo:
self.pending(emulator, key, str(exc), digest)
return
frames = ["--frames", str(content.frames), "--frame-hash-every", str(content.frame_hash_every)]
stem = f"{core.name}-{slug(content.name)}"
# files: every declared file the collection holds, at its place.
staged: dict[str, tuple[int, dict, Path]] = {}
for index, entry in entries:
local = self.local_file(entry)
if local and entry_dest(entry) not in staged:
staged[entry_dest(entry)] = (index, entry, local)
files_record = None
if keys["files"] in todo:
argv = self.probe_args("run", core, emulator, slug(f"files-{stem}"), content, load) + frames
for dest, (_, _, local) in sorted(staged.items()):
argv += ["--system-file", f"{dest}={local}"]
result = self.probe(argv, f"{emulator}-{stem}-files")
self.remember(emulator, keys["files"], result, core, digest)
files_record = result.record
elif checks.get(keys["files"], {}).get("status") == DONE:
files_record = self.read_record(emulator, checks[keys["files"]].get("record"))
tested = {dest: item for dest, item in staged.items() if region_matches(item[1], content.region)}
keys = {"files": self.check_key(core, content, "files"),
"none": self.check_key(core, content, "none")}
for dest in tested:
keys[f"negative:{dest}"] = self.check_key(core, content, f"negative:{dest}")
if self.settings.bench:
keys["bench"] = self.check_key(core, content, "bench")
# The rules run on every pass, from the records kept when nothing
# needs to run again: a change of the table applies without a run.
try:
folder = self.store.get(content)
load = load_file(folder, content.load)
except Unavailable as exc:
for key in keys.values():
if self.needed(emulator, key, core, digest):
self.pending(emulator, key, str(exc), digest)
return
frames = ["--frames", str(content.frames), "--frame-hash-every", str(content.frame_hash_every)]
repeat = ["--repeat", str(self.settings.check_repeat)]
stem = f"{core.name}-{slug(content.name)}"
boot_record = None
if boot and keys["boot"] in todo:
index, entry = boot
local = self.local_file(entry)
dest = entry_dest(entry)
argv = self.probe_args("check", core, emulator, slug(f"boot-{entry['name']}-{stem}"),
content, load) + frames
argv += ["--vary", f"{dest}=", "--vary", f"{dest}={local}", "--observable", "frame_hashes",
"--repeat", str(self.settings.check_repeat),
"--claim", f"{core.name} reaches the game on {content.name} without {entry['name']}",
"--method", (f"Two variants, {entry['name']} absent and {entry['name']} as the "
f"collection holds it, each run {self.settings.check_repeat} times "
f"from a fresh process for {content.frames} frames with no button "
f"pressed. Every {content.frame_hash_every}th frame is hashed. The "
f"runs without the file are compared with the runs with it on the "
f"frames that are not one colour.")]
result = self.probe(argv, f"{emulator}-{stem}-boot")
self.remember(emulator, keys["boot"], result, core, digest)
boot_record = result.record
if boot_record:
absent, present = (v["label"] for v in boot_record["variants"])
verdicts = rules.rule_bios_need(rules.boot_outcome(boot_record, absent, present),
entry, boot_record["id"])
# files: every declared file the collection holds, at its place.
argv = self.probe_args("run", core, emulator, slug(f"files-{stem}"), content, load) + frames + repeat
for dest, (_, _, local) in sorted(staged.items()):
argv += ["--system-file", f"{dest}={local}"]
files_record = self.check(emulator, keys["files"], core, digest, argv, f"{emulator}-{stem}-files")
# none: no BIOS at all.
argv = self.probe_args("run", core, emulator, slug(f"none-{stem}"), content, load) + frames + repeat
none_record = self.check(emulator, keys["none"], core, digest, argv, f"{emulator}-{stem}-none")
if not files_record or not none_record:
return
full = rules.run_of(files_record, files_record["variants"][0]["label"])
none = rules.run_of(none_record, none_record["variants"][0]["label"])
self.log(f"{emulator}: {core.name} on {content.name}: full set {full.verdict}, "
f"no BIOS {none.verdict}")
for dest, (index, entry, local) in sorted(tested.items()):
record = self.negative(unit, core, content, load, frames, digest, keys[f"negative:{dest}"],
dest, entry, local, staged)
if not record:
continue
labels = [v["label"] for v in record["variants"]]
present = rules.run_of(record, labels[0])
zeros, half = (rules.run_of(record, label) for label in labels[1:3])
for label in labels[3:]:
self.log(f"{emulator}: {rules.rule_region(rules.run_of(record, label), present, entry, content.region)}")
if dest in self.opened(files_record, 0) or dest in self.opened(record, 0):
verdicts = rules.rule_need(none, present, entry, rules.read(none, present, zeros, half))
validation = rules.rule_validation(zeros, half, none, present, entry)
if validation:
verdicts.append(validation)
self.settle(emulator, content, core, index, entry, verdicts)
self.follow_aliases(unit, core, content, load, frames, digest, index, entry,
local, boot_record, absent)
variants = self.variant_files(entry, local)
if variants:
self.run_variants(unit, core, content, load, frames, digest, index, entry, dest,
local, variants)
else:
self.moved(unit, core, content, load, frames, digest, index, entry, dest, local,
files_record, record)
if files_record and keys["files"] in todo:
self.read_files(unit, core, content, load, frames, digest, staged, files_record)
boot = self.boot_entry(entries, content)
if boot and entry_dest(boot[1]) in tested:
index, entry = boot
self.follow_aliases(unit, core, content, load, frames, digest, index, entry,
tested[entry_dest(entry)][2], none_record)
if keys["bench"] in todo:
if self.settings.bench and full.verdict == rules.BOOTS:
argv = self.probe_args("bench", core, emulator, slug(f"bench-{stem}"), content, load)
argv += ["--warmup", str(self.settings.bench_warmup), "--frames",
str(self.settings.bench_frames), "--repeat", str(self.settings.bench_repeat),
"--no-trace"]
if boot:
local = self.local_file(boot[1])
argv += ["--system-file", f"{entry_dest(boot[1])}={local}"]
result = self.probe(argv, f"{emulator}-{stem}-bench")
self.remember(emulator, keys["bench"], result, core, digest)
argv += ["--system-file", f"{entry_dest(boot[1])}={self.local_file(boot[1])}"]
self.check(emulator, keys["bench"], core, digest, argv, f"{emulator}-{stem}-bench")
def negative(self, unit: Unit, core: Core, content: Content, load: Path, frames: list[str],
digest: str, key: str, dest: str, entry: dict, local: Path,
staged: dict[str, tuple[int, dict, Path]]) -> dict | None:
"""The file alone, then wrong files under its name: zeros of its
size, its first half, and other regions' dumps."""
stem = f"{core.name}-{slug(content.name)}"
size = local.stat().st_size
others = self.other_regions(entry, staged, local)
argv = self.probe_args("check", core, unit.emulator, slug(f"negative-{entry['name']}-{stem}"),
content, load) + frames
argv += ["--vary", f"{dest}={local}", "--vary", f"{dest}=@zeros:{size}",
"--vary", f"{dest}=@head:{size // 2}:{local}"]
for other in others:
argv += ["--vary", f"{dest}={other}"]
regions = f", then {', '.join(p.name for p in others)} staged under its name" if others else ""
argv += ["--observable", "frame_hashes", "--repeat", str(self.settings.check_repeat),
"--claim", (f"{core.name} boots {content.name} with {entry['name']} alone and "
f"refuses a wrong file under its name"),
"--method", (f"{entry['name']} alone as {dest}, then {size} zero bytes and its "
f"first {size // 2} bytes{regions}, nothing else staged. Each run "
f"{self.settings.check_repeat} times from a fresh process for "
f"{content.frames} frames with no button pressed, every "
f"{content.frame_hash_every}th frame hashed. The boot oracle judges "
f"each variant against the reference frames of {content.name}.")]
return self.check(unit.emulator, key, core, digest, argv, f"{unit.emulator}-{stem}-negative")
def moved(self, unit: Unit, core: Core, content: Content, load: Path, frames: list[str],
digest: str, index: int, entry: dict, dest: str, local: Path, files_record: dict,
alone: dict) -> None:
"""A file the core opened neither in the full set nor alone: where
else it looked for a file of that name, else flagged."""
probed = [p for record in (files_record, alone) for r in record["variants"][0]["repetitions"]
for p in r.get("files_probed_absent") or ()]
others = [p for p in dict.fromkeys(probed) if p != dest
and p.rsplit("/", 1)[-1].casefold() == dest.rsplit("/", 1)[-1].casefold()]
for candidate in others[:MAX_ALIAS_CANDIDATES]:
found = self.follow_up(unit, core, content, load, frames, digest, entry, local, candidate,
f"path:{entry['name']}:{candidate}")
if found and candidate in self.opened(found, 0):
verdict = rules.rule_path(entry, dest, rules.Opened(candidate, found["id"]))
if verdict:
self.settle(unit.emulator, content, core, index, entry, [verdict])
return
verdict = rules.rule_never_opened(entry, [files_record["id"], alone["id"]], content.name)
self.settle(unit.emulator, content, core, index, entry, [verdict])
def read_record(self, emulator: str, rid: str | None) -> dict | None:
if not rid:
@@ -1150,49 +1283,10 @@ class Campaign:
return json.loads(line)
return None
def read_files(self, unit: Unit, core: Core, content: Content, load: Path, frames: list[str],
digest: str, staged: dict[str, tuple[int, dict, Path]], record: dict) -> None:
"""Which staged files the core opened: path follow-ups, variants, flags."""
emulator = unit.emulator
rep = record["variants"][0]["repetitions"][0]
if rep.get("files_opened") is None:
return
opened = {item["path"] for item in rep.get("files_opened") or ()}
probed = list(rep.get("files_probed_absent") or ())
for dest, (index, entry, local) in sorted(staged.items()):
if dest in opened:
variants = self.variant_files(entry, local)
if variants:
self.run_variants(unit, core, content, load, frames, digest, index, entry, dest,
local, variants)
continue
if not region_matches(entry, content.region):
continue
# A fallback is read only when the files before it are absent:
# staged alone, it shows whether the core reads it at all.
alone = self.follow_up(unit, core, content, load, frames, digest, entry, local, dest,
f"alone:{entry['name']}")
if alone is None:
continue
if dest in self.opened(alone, 1):
continue
probed_alone = [p for r in alone["variants"][0]["repetitions"]
for p in r.get("files_probed_absent") or ()]
others = [p for p in dict.fromkeys(probed + probed_alone) if p != dest
and p.rsplit("/", 1)[-1].casefold() == dest.rsplit("/", 1)[-1].casefold()]
moved = False
for candidate in others[:MAX_ALIAS_CANDIDATES]:
record_c = self.follow_up(unit, core, content, load, frames, digest, entry, local,
candidate, f"path:{entry['name']}:{candidate}")
if record_c and candidate in self.opened(record_c, 1):
verdict = rules.rule_path(entry, dest, rules.Opened(candidate, record_c["id"]))
if verdict:
self.settle(emulator, content, core, index, entry, [verdict])
moved = True
break
if not moved:
verdict = rules.rule_never_opened(entry, [record["id"], alone["id"]], content.name)
self.settle(emulator, content, core, index, entry, [verdict])
def judged(self, emulator: str, rid: str) -> bool:
"""True for a record the boot oracle judged: only those prove a field."""
record = self.read_record(emulator, rid)
return bool(record) and record.get("record_version", 0) >= 4
@staticmethod
def opened(record: dict, position: int) -> set[str]:
@@ -1203,34 +1297,23 @@ class Campaign:
def follow_up(self, unit: Unit, core: Core, content: Content, load: Path, frames: list[str],
digest: str, entry: dict, local: Path, dest: str, check: str) -> dict | None:
"""The file staged at dest alone, against nothing there."""
key = self.check_key(core, content, check)
previous = self.state["checks"].get(unit.emulator, {}).get(key)
if not should_run(previous, core.sha256, digest):
return self.read_record(unit.emulator, (previous or {}).get("record"))
"""The file staged at dest alone: does the core open it there."""
stem = f"{core.name}-{slug(content.name)}"
argv = self.probe_args("check", core, unit.emulator, slug(f"{check}-{stem}"), content, load)
argv += frames + ["--vary", f"{dest}=", "--vary", f"{dest}={local}",
"--observable", "frame_hashes", "--repeat", "1",
"--claim", f"{core.name} opens {entry['name']} as {dest}",
"--method", (f"{entry['name']} staged as {dest}, against nothing there, "
f"{content.frames} frames of {content.name}. The files the "
f"core opened are read from strace.")]
result = self.probe(argv, f"{unit.emulator}-{stem}-{slug(check)}")
self.remember(unit.emulator, key, result, core, digest)
return result.record
argv = self.probe_args("run", core, unit.emulator, slug(f"{check}-{stem}"), content, load)
argv += frames + ["--system-file", f"{dest}={local}"]
return self.check(unit.emulator, self.check_key(core, content, check), core, digest, argv,
f"{unit.emulator}-{stem}-{slug(check)}")
def follow_aliases(self, unit: Unit, core: Core, content: Content, load: Path, frames: list[str],
digest: str, index: int, entry: dict, local: Path, record: dict,
absent_label: str) -> None:
"""Names the core looked for, with the file absent, that no entry declares."""
digest: str, index: int, entry: dict, local: Path, none_record: dict) -> None:
"""Names the core looked for, with no BIOS, that no entry declares."""
declared = {e["name"] for e in unit.profile.get("files") or ()}
declared |= {a for e in unit.profile.get("files") or () for a in e.get("aliases") or ()}
suffix = Path(entry["name"]).suffix.casefold()
dest = entry_dest(entry)
folder = dest.rsplit("/", 1)[0] if "/" in dest else ""
probed: list[str] = []
for rep in rules.variant(record, absent_label)["repetitions"]:
for rep in none_record["variants"][0]["repetitions"]:
for path in rep.get("files_probed_absent") or ():
name = path.rsplit("/", 1)[-1]
where = path.rsplit("/", 1)[0] if "/" in path else ""
@@ -1240,7 +1323,7 @@ class Campaign:
for candidate in probed[:MAX_ALIAS_CANDIDATES]:
found = self.follow_up(unit, core, content, load, frames, digest, entry, local, candidate,
f"alias:{entry['name']}:{candidate.rsplit('/', 1)[-1]}")
if found and candidate in self.opened(found, 1):
if found and candidate in self.opened(found, 0):
verdict = rules.rule_alias(self.reload_entry(unit, index), rules.Opened(candidate, found["id"]))
if verdict:
self.settle(unit.emulator, content, core, index, self.reload_entry(unit, index), [verdict])
@@ -1249,7 +1332,7 @@ class Campaign:
digest: str, index: int, entry: dict, dest: str, primary: Path,
variants: list[Path]) -> None:
key = self.check_key(core, content, f"variants:{entry['name']}")
if not should_run(self.state["checks"].get(unit.emulator, {}).get(key), core.sha256, digest):
if not self.needed(unit.emulator, key, core, digest):
return
stem = f"{core.name}-{slug(content.name)}"
argv = self.probe_args("check", core, unit.emulator, slug(f"variants-{entry['name']}-{stem}"),
@@ -1257,16 +1340,14 @@ class Campaign:
for path in [primary, *variants]:
argv += ["--vary", f"{dest}={path}"]
argv += ["--observable", "frame_hashes", "--repeat", str(self.settings.check_repeat),
"--claim", f"the copies of {entry['name']} change what {core.name} shows on {content.name}",
"--method", (f"Each copy the collection holds staged as {dest}, each run "
f"{self.settings.check_repeat} times for {content.frames} frames, "
f"compared on the sampled frame hashes.")]
result = self.probe(argv, f"{unit.emulator}-{stem}-variants")
self.remember(unit.emulator, key, result, core, digest)
if result.record:
status = result.record["check"]["result"]["status"]
verdict = rules.rule_variants(status, [v["label"] for v in result.record["variants"]],
entry, result.record["id"])
"--claim", f"every copy of {entry['name']} boots {content.name} on {core.name}",
"--method", (f"Each copy the collection holds staged alone as {dest}, each run "
f"{self.settings.check_repeat} times for {content.frames} frames. The "
f"boot oracle judges each copy.")]
record = self.check(unit.emulator, key, core, digest, argv, f"{unit.emulator}-{stem}-variants")
if record:
verdict = rules.rule_variants([rules.run_of(record, v["label"]) for v in record["variants"]],
entry)
if verdict:
self.settle(unit.emulator, content, core, index, entry, [verdict])
@@ -1291,9 +1372,10 @@ class Campaign:
agrees = verdict.field in rules.SETTLED_FIELDS and rules.agrees(fresh, verdict)
if verdict.apply:
updates: dict[str, object] = {}
if not agrees or verdict.field not in fresh:
if not agrees or (verdict.field not in fresh and verdict.field != "validation"):
updates[verdict.field] = verdict.value
evidence = rules.merge_evidence(fresh.get("evidence"), verdict)
evidence = rules.merge_evidence(fresh.get("evidence"), verdict,
keep=lambda rid: self.judged(emulator, rid))
if evidence != fresh.get("evidence"):
updates["evidence"] = evidence
if updates:
@@ -1331,7 +1413,8 @@ class Campaign:
key = self.finding_key(emulator, content, entry, verdict)
previous = self.latest_findings().get(key)
if previous and previous["status"] == status and previous["rule"] == verdict.rule \
and previous["run_shows"] == verdict.value and previous["profile_says"] == says:
and previous["run_shows"] == verdict.value and previous["profile_says"] == says \
and previous["evidence"] == list(verdict.evidence):
return
line = mr.seal_line({
"schema_version": 1, "found_at": now_iso(), "key": key, "emulator": emulator,
@@ -1364,6 +1447,60 @@ class Campaign:
return record["core"].get("library_version")
return None
# -- reference frames -----------------------------------------------------------
def references(self, only: set[str], system: str | None, png_dir: Path) -> list[dict]:
"""The full set run once per core and content, frames written as PNG,
and the screens that stay on long enough to serve as references."""
self.deadline = self.host.clock() + self.settings.budget
listed = []
for unit in self.units(only, system):
contents = self.unit_contents(unit, system)
if unit.pending or not contents:
continue
try:
cores = self.unit_cores(unit.emulator, unit.profile, unit.buildbot_only)
except Unavailable as exc:
self.log(f"{unit.emulator}: {exc}")
continue
for core in cores:
for content in contents:
self.guard()
self.store.hold(content, "references")
try:
load = load_file(self.store.get(content), content.load)
except Unavailable as exc:
self.log(f"{unit.emulator}: {exc}")
continue
stem = f"{core.name}-{slug(content.name)}"
target = png_dir / slug(core.name) / slug(content.name)
shutil.rmtree(target, ignore_errors=True)
argv = self.probe_args("run", core, unit.emulator, slug(f"references-{stem}"),
content, load)
argv += ["--frames", str(content.frames), "--frame-hash-every",
str(content.frame_hash_every), "--repeat", str(self.settings.check_repeat),
"--png-dir", str(target)]
for index, entry in self.system_entries(unit.profile, content.system):
local = self.local_file(entry)
if local and f"{entry_dest(entry)}=" not in " ".join(argv):
argv += ["--system-file", f"{entry_dest(entry)}={local}"]
result = self.probe(argv, f"{unit.emulator}-{stem}-references")
self.store.release(content, "references")
if not result.record:
self.log(f"{unit.emulator}: references of {content.name}: {result.reason}")
continue
record = result.record
listed.append({
"emulator": unit.emulator, "core": core.name,
"library_name": record["core"]["library_name"], "content": content.name,
"content_sha1": record["inputs"]["content"]["sha1"], "record": record["id"],
"verdict": record["variants"][0]["verdict"],
"png_dir": str(target / record["variants"][0]["label"]),
"candidates": reference_candidates(record),
})
save_state(self.paths.state, self.state)
return listed
# -- the pass -----------------------------------------------------------------
def units(self, only: set[str], system: str | None) -> list[Unit]:
@@ -1567,6 +1704,32 @@ class Campaign:
return made
def reference_candidates(record: dict, min_samples: int = 3) -> list[dict]:
"""Screens of a record's first variant that are not one colour and stay
on for at least min_samples consecutive samples in every repetition:
what a reviewer looks at to choose reference frames."""
found: list[dict[str, tuple[int, int]]] = []
for rep in record["variants"][0]["repetitions"]:
observables = rep.get("observables") or {}
uniform = set(observables.get("uniform_frames") or ())
runs: dict[str, tuple[int, int]] = {}
previous, start, length = None, 0, 0
for frame, digest in [*(observables.get("frame_hashes") or ()), (None, None)]:
if digest == previous:
length += 1
continue
if previous and previous not in uniform and length >= min_samples:
first, longest = runs.get(previous, (start, 0))
runs[previous] = (min(first, start), max(longest, length))
previous, start, length = digest, frame, 1
found.append(runs)
common = set(found[0]) if found else set()
for runs in found[1:]:
common &= set(runs)
return sorted(({"sha1": digest, "first_frame": found[0][digest][0], "samples": found[0][digest][1]}
for digest in common), key=lambda item: item["first_frame"])
def reason_class(reason: str) -> str:
"""A pending reason without its detail, to count them."""
head = reason.split(":", 1)[0].strip() if ":" in reason else reason
@@ -1661,9 +1824,17 @@ def main(argv: Sequence[str] | None = None) -> int:
parser = argparse.ArgumentParser(allow_abbrev=False, description=__doc__.split("\n\n")[0],
formatter_class=argparse.RawDescriptionHelpFormatter)
sub = parser.add_subparsers(dest="command", required=True)
run_p = sub.add_parser("run", help="one pass: cores, content, checks, rules")
run_p.add_argument("--only", default="", help="emulator profiles or core names, comma-separated")
run_p.add_argument("--system", help="one system id")
scope = argparse.ArgumentParser(add_help=False, allow_abbrev=False)
scope.add_argument("--only", default="", help="emulator profiles or core names, comma-separated")
scope.add_argument("--system", help="one system id")
scope.add_argument("--romfetch", default="",
help=f"romfetch command (default: ${ROMFETCH_ENV}, else romfetch on PATH)")
scope.add_argument("--offline", action="store_true", help="no buildbot, no romfetch, no build")
scope.add_argument("--content-file", default=str(CONTENT_FILE),
help="the test content list (default: tests/campaign/content.yml)")
scope.add_argument("--allow-unsandboxed", action="store_true",
help="run cores and builds without bubblewrap when it is missing (refused by default)")
run_p = sub.add_parser("run", parents=[scope], help="one pass: cores, content, checks, rules")
run_p.add_argument("--budget", type=parse_budget, default=6 * 3600.0,
help="stop starting checks after this long (6h, 90m, 3600s)")
run_p.add_argument("--max-load-wait", type=float, default=3600,
@@ -1671,16 +1842,17 @@ def main(argv: Sequence[str] | None = None) -> int:
run_p.add_argument("--min-free-gb", type=float, default=30, help="pause below this free space")
run_p.add_argument("--cache-cap-gb", type=float, default=20,
help="content the campaign fetched is evicted past this size, oldest use first")
run_p.add_argument("--romfetch", default="",
help=f"romfetch command (default: ${ROMFETCH_ENV}, else romfetch on PATH)")
run_p.add_argument("--offline", action="store_true", help="no buildbot, no romfetch, no build")
run_p.add_argument("--allow-unsandboxed", action="store_true",
help="run cores and builds without bubblewrap when it is missing (refused by default)")
run_p.add_argument("--bench", action="store_true",
help="also time each content that boots (benchmarks only choose between variants)")
run_p.add_argument("--dry-run", action="store_true", help="print the plan, run nothing")
run_p.add_argument("--commit", action="store_true",
help="commit records, findings and each changed profile behind the gate")
run_p.add_argument("--commit-every", type=int, default=0, metavar="N",
help="with --commit, also commit after every N emulators")
refs_p = sub.add_parser("references", parents=[scope],
help="run the full set with PNG frames and list reference candidates")
refs_p.add_argument("--png-dir", default=str(ROOT / "tmp" / "campaign" / "references"),
help="where the frames are written, one folder per core and content")
status_p = sub.add_parser("status", help="done, failed and pending checks, and why")
status_p.add_argument("--json", action="store_true", help="the report as JSON")
findings_p = sub.add_parser("findings", help="profile claims the runs contradict, open for review")
@@ -1688,9 +1860,9 @@ def main(argv: Sequence[str] | None = None) -> int:
findings_p.add_argument("--json", action="store_true", help="the findings as JSON")
sub.add_parser("gate", help="tests, schemas, verify and pack of the changed profiles")
timer_p = sub.add_parser("install-timer",
help="write the autorun units, the campaign job's timer among them")
help="opt-in: write the autorun units, the campaign job's timer among them")
timer_p.add_argument("--enable", action="store_true",
help="also reload systemd and enable the timers")
help="also reload systemd and enable the timers (never by default)")
args = parser.parse_args(argv)
paths = Paths.default()
@@ -1713,20 +1885,34 @@ def main(argv: Sequence[str] | None = None) -> int:
settings = Settings(budget=args.budget, max_load_wait=args.max_load_wait,
min_free_gb=args.min_free_gb, cache_cap_gb=args.cache_cap_gb,
romfetch=args.romfetch, network=not args.offline,
allow_unsandboxed=args.allow_unsandboxed, bench=args.bench)
elif args.command == "references":
settings = Settings(romfetch=args.romfetch, network=not args.offline,
allow_unsandboxed=args.allow_unsandboxed)
if args.command in ("run", "references"):
paths.content_file = Path(args.content_file)
campaign = Campaign(paths, settings)
if args.command == "status":
report = status_report(campaign)
print(json.dumps(report, indent=2) if args.json else render_status(report))
return 0
only = {item.strip() for item in args.only.split(",") if item.strip()}
if args.command == "references":
try:
with host_lock(campaign.lock_path):
listed = campaign.references(only, args.system, Path(args.png_dir))
except autorun.LockBusy as exc:
print(f"campaign: deferred, {exc}", file=sys.stderr)
return 75
print(json.dumps(listed, indent=2))
return 0
if args.dry_run:
campaign.run(only, args.system, dry_run=True)
return 0
campaign.dirty_at_start = set(autorun.changed_files(paths.root)) if args.commit else set()
def stop(signum: int, frame: object) -> None:
# A timer's TimeoutStartSec ends the pass like Ctrl-C: state saved, pass line written.
# SIGTERM ends the pass like Ctrl-C: state saved, pass line written.
raise KeyboardInterrupt
signal.signal(signal.SIGTERM, stop)
try:
+1
View File
@@ -23,6 +23,7 @@ ANCHORS = {
"hle_fallback": ("required", "name"),
"path": ("name",),
"aliases": ("path", "name"),
"validation": ("sha1", "md5", "crc32", "size", "name"),
}
+181 -97
View File
@@ -1,25 +1,36 @@
"""The campaign's fixed rule table: which observable settles which profile field.
"""The campaign's fixed rule table: which verdicts settle which profile field.
Each rule is a pure function of a core probe record (or what was read from
one) and a profile entry. It returns verdicts. A verdict with `apply` set is
settled by the table and written into the profile with the record ids as
`evidence:`. Any other verdict goes to the review queue
(measurements/findings.jsonl).
Each rule is a pure function of verdicts read from core probe records (the
boot oracle of core_probe.py: boots, bios_error, crash, hang, unknown) and
a profile entry. It returns verdicts on profile fields. One with `apply` set
is settled by the table and written into the profile with the record ids as
`evidence:`. Any other goes to the review queue (measurements/findings.jsonl).
observable field settled
boots to the game with no file hle_fallback true
no game screen without it, the game with it required true
hle_fallback false
opens the staged file under another path path that path
opens the staged file under another name aliases name added
a staged file the content should use, never read - flagged only
Three runs are compared for a file, all on the same content: `none` with no
BIOS at all, `present` with the file alone, and wrong files staged under its
name (zeros of its size, its first half, another region's dump).
"Boots to the game" is read from the sampled frames: the run without the
file shows at least MIN_SHARED_SCREENS distinct screens that the run with
the file also shows, single-colour frames excluded. "No game screen" is a
run that did not load, or whose every sampled frame is a single colour. A
run that shows screens of its own that the reference never shows settles
nothing.
runs field settled
none boots, the file changes the run hle_fallback true
none fails, present boots required true
hle_fallback false
zeros refused, present boots validation a content check
zeros used, present boots validation no content check
half refused, zeros used validation size
half used validation no size check
opens the staged file under another path path that path
opens the staged file under another name aliases name added
a staged file the content should use, never - flagged only
read
copies of one file that boot and fail - queued
"Fails" is bios_error, crash or hang. A wrong file is refused when the
core reports a BIOS error, or when it boots without the BIOS screens the
right file shows (it fell back to a built-in BIOS). It is used when it
turns the run into a hang or a crash that the run without any file does not
show. Anything else settles nothing. Of validation, the table writes only a
missing `size`. A contradicted content check goes to review: which hash a
core computes is read in its code.
Standard library only.
"""
@@ -29,23 +40,34 @@ from __future__ import annotations
from collections.abc import Iterable, Sequence
from dataclasses import dataclass, field
MIN_SHARED_SCREENS = 2
BOOTS = "boots"
FAILS = "fails"
INCONCLUSIVE = "inconclusive"
BIOS_ERROR = "bios_error"
CRASH = "crash"
HANG = "hang"
UNKNOWN = "unknown"
FAILS = (BIOS_ERROR, CRASH, HANG)
REFUSED = "refused"
USED = "used"
CONTENT_CHECKS = ("md5", "sha1", "sha256", "crc32", "adler32")
# A field an entry leaves out reads as this value.
FIELD_DEFAULTS: dict[str, object] = {"hle_fallback": False, "path": None, "aliases": []}
SETTLED_FIELDS = ("required", "hle_fallback", "path", "aliases")
FIELD_DEFAULTS: dict[str, object] = {"hle_fallback": False, "path": None, "aliases": [],
"validation": []}
SETTLED_FIELDS = ("required", "hle_fallback", "path", "aliases", "validation")
@dataclass(frozen=True)
class Boot:
"""What the runs without the file showed, against the runs with it."""
class Run:
"""The verdict of one variant of a record: what a rule reads."""
status: str
detail: str
shared: int = 0
verdict: str
record_id: str
label: str
stages: tuple[str, ...] = ()
@property
def shows_bios(self) -> bool:
return "bios" in self.stages
@dataclass(frozen=True)
@@ -67,13 +89,6 @@ class Opened:
extra: dict = field(default_factory=dict)
def screens(repetition: dict) -> set[str]:
"""The distinct sampled frames of a repetition that are not one colour."""
observables = repetition.get("observables") or {}
uniform = set(observables.get("uniform_frames") or ())
return {digest for _, digest in observables.get("frame_hashes") or () if digest not in uniform}
def variant(record: dict, label: str) -> dict:
for item in record.get("variants") or ():
if item.get("label") == label:
@@ -81,43 +96,16 @@ def variant(record: dict, label: str) -> dict:
raise KeyError(f"record {record.get('id')}: no variant {label!r}")
def boot_outcome(record: dict, absent_label: str, present_label: str) -> Boot:
"""Whether the core reached the game without the file.
def run_of(record: dict, label: str) -> Run:
"""A variant's verdict as a rule reads it. A record from before the
oracle has none, and reads as unknown."""
item = variant(record, label)
evidence = item.get("verdict_evidence") or {}
return Run(item.get("verdict", UNKNOWN), record["id"], label, tuple(evidence.get("stages") or ()))
Every repetition must agree: one that boots and one that does not leave
the question open.
"""
present = variant(record, present_label)["repetitions"]
if any(not rep.get("loaded") for rep in present):
return Boot(INCONCLUSIVE, "with the file, the core did not load the content")
reference: set[str] = set()
for rep in present:
shown = screens(rep)
if not shown:
return Boot(INCONCLUSIVE, "with the file, the core showed no game screen")
reference |= shown
outcomes: list[str] = []
shared_counts: list[int] = []
for rep in variant(record, absent_label)["repetitions"]:
if not rep.get("loaded"):
outcomes.append(FAILS)
continue
shown = screens(rep)
if not shown:
outcomes.append(FAILS)
continue
shared = len(shown & reference)
shared_counts.append(shared)
outcomes.append(BOOTS if shared >= MIN_SHARED_SCREENS else INCONCLUSIVE)
shared = min(shared_counts) if shared_counts else 0
if all(o == BOOTS for o in outcomes):
return Boot(BOOTS, f"without the file, every run showed {shared} or more screens the "
f"run with the file shows", shared)
if all(o == FAILS for o in outcomes):
return Boot(FAILS, "without the file, no run loaded the content or showed more than "
"one colour, while the run with the file reached the game")
return Boot(INCONCLUSIVE, "without the file, the runs showed screens the run with the file "
"never shows, or disagreed with each other", shared)
def ids(*runs: Run) -> tuple[str, ...]:
return tuple(dict.fromkeys(run.record_id for run in runs))
def current(entry: dict, name: str) -> object:
@@ -130,32 +118,123 @@ def agrees(entry: dict, verdict: Verdict) -> bool:
"""True when the profile already says what the run showed."""
if verdict.field == "aliases":
return set(verdict.value or ()) <= set(entry.get("aliases") or ())
if verdict.field == "validation":
return verdict.rule == "validation_agrees"
return current(entry, verdict.field) == verdict.value
def rule_bios_need(boot: Boot, entry: dict, record_id: str) -> list[Verdict]:
"""Boot with no file against boot with the declared file."""
def read(none: Run, *runs: Run) -> bool:
"""True when the file changes the run: alone or as a wrong file, one
variant ends otherwise than the run with no BIOS, or reaches other
stages. A core can open a file without using it for this content (a
scan that hashes every file of the folder)."""
return any(run.verdict != none.verdict or run.stages != none.stages for run in runs if run)
def rule_need(none: Run, present: Run, entry: dict, used: bool = True) -> list[Verdict]:
"""No BIOS at all against the file alone: required and hle_fallback. A
file the content never uses settles nothing."""
name = entry["name"]
evidence = (record_id,)
if boot.status == BOOTS:
if none.verdict == BOOTS and not used:
return []
if none.verdict == BOOTS:
out = [Verdict("boots_without_file", "hle_fallback", True,
f"the core reaches the game without {name}: {boot.detail}", evidence, True)]
f"the core boots the content with no BIOS at all, {name} included",
ids(none), True)]
if entry.get("required") is True:
out.append(Verdict(
"boots_without_file", "required", False,
f"the profile says {name} is required, and the core reaches the game "
f"without it. The table settles hle_fallback from this run, not required",
evidence))
f"the profile says {name} is required, and the core boots without it. The table "
f"settles hle_fallback from this run, not required", ids(none)))
return out
if boot.status == FAILS:
if none.verdict in FAILS and present.verdict == BOOTS:
return [
Verdict("fails_without_file", "required", True,
f"the core reaches the game only with {name}: {boot.detail}", evidence, True),
f"with no BIOS the run ends in {none.verdict}, with {name} alone it boots",
ids(none, present), True),
Verdict("fails_without_file", "hle_fallback", False,
f"no stand-in for {name}: {boot.detail}", evidence, True),
f"no stand-in for {name}: with no BIOS the run ends in {none.verdict}",
ids(none, present), True),
]
return [Verdict("inconclusive", "hle_fallback", None,
f"the runs with and without {name} settle nothing: {boot.detail}", evidence)]
return [Verdict("unsettled", "hle_fallback", None,
f"with no BIOS the run is {none.verdict} and with {name} alone {present.verdict}: "
f"no rule settles a field from that", ids(none, present))]
def file_use(wrong: Run, none: Run, present: Run) -> str | None:
"""Whether the core refused a wrong file or ran it, or None."""
if present.verdict != BOOTS:
return None
if wrong.verdict == BIOS_ERROR:
return REFUSED
if wrong.verdict == BOOTS:
if wrong.shows_bios:
return USED
return REFUSED if present.shows_bios else None
if wrong.verdict in (HANG, CRASH) and none.verdict in (BOOTS, BIOS_ERROR):
return USED
return None
def declared_checks(entry: dict) -> tuple[set[str], bool]:
"""The checks the entry's validation names, and whether it is one list
(a per-build dict is never edited by the table)."""
value = entry.get("validation") or []
if isinstance(value, dict):
return {str(v) for items in value.values() for v in items or ()}, False
return {str(v) for v in value}, True
def rule_validation(zeros: Run | None, half: Run | None, none: Run, present: Run,
entry: dict) -> Verdict | None:
"""Same-size and short wrong files against the right one: validation."""
name = entry["name"]
content = {REFUSED: True, USED: False}.get(file_use(zeros, none, present)) if zeros else None
half_use = file_use(half, none, present) if half else None
size: bool | None = None
if half_use == USED:
size, content = False, False if content is None else content
elif half_use == REFUSED and content is False:
size = True
if content is None and size is None:
return None
declared, editable = declared_checks(entry)
evidence = ids(*(run for run in (none, present, zeros, half) if run))
said = sorted(declared)
shown = []
problems = []
if content is not None:
shown.append("checks the content" if content else "does not check the content")
if content != bool(declared & set(CONTENT_CHECKS)):
problems.append("a same-size file of zeros is " + ("refused" if content else "run")
+ f", the profile declares validation {said}")
missing_size = size is True and "size" not in declared
if size is not None:
shown.append("checks the size" if size else "does not check the size")
if size is False and "size" in declared:
problems.append(f"the first half of {name} is run, the profile declares a size check")
statement = f"the core {' and '.join(shown)} of {name}"
# What the runs show, for a finding beside what the profile says.
checks = {"content": content, "size": size}
if problems:
return Verdict("validation_contradicted", "validation", checks,
f"{statement}: {'; '.join(problems)}", evidence)
if missing_size:
if not editable:
return Verdict("validation_contradicted", "validation", checks,
f"{statement}: the per-build validation has no size check", evidence)
value = [*(entry.get("validation") or []), "size"]
return Verdict("validation_size_added", "validation", value,
f"{statement}: half of the file is refused while zeros of its size are run",
evidence, True)
return Verdict("validation_agrees", "validation", entry.get("validation") or [], statement,
evidence, editable)
def rule_region(dump: Run, present: Run, entry: dict, game_region: str | None) -> str:
"""What the core did with another region's dump under this file's name."""
return (f"{dump.label} staged as {entry['name']} with a {game_region or 'region-less'} game: "
f"{dump.verdict}, {entry['name']} itself: {present.verdict}")
def rule_path(entry: dict, declared: str, opened: Opened) -> Verdict | None:
@@ -184,20 +263,25 @@ def rule_never_opened(entry: dict, record_ids: Sequence[str], content: str) -> V
f"{content}", tuple(record_ids))
def rule_variants(status: str, labels: Iterable[str], entry: dict, record_id: str) -> Verdict | None:
"""Copies of one file that change what the core shows: a pack choice to review."""
if status != "differs":
def rule_variants(runs: Iterable[Run], entry: dict) -> Verdict | None:
"""Copies of one file whose verdicts differ: a pack choice to review."""
runs = list(runs)
if len({run.verdict for run in runs}) < 2:
return None
return Verdict("variant_changes_output", "variants", sorted(labels),
f"the copies of {entry['name']} change what the core shows",
(record_id,))
shown = ", ".join(f"{run.label} {run.verdict}" for run in runs)
return Verdict("variant_changes_verdict", "variants", sorted(run.label for run in runs),
f"the copies of {entry['name']} do not boot alike: {shown}", ids(*runs))
def merge_evidence(existing: dict | None, verdict: Verdict) -> dict:
"""The entry's evidence: map with the verdict's record ids added under its field."""
def merge_evidence(existing: dict | None, verdict: Verdict,
keep: object = lambda rid: True) -> dict:
"""The entry's evidence: map with the verdict's record ids added under its
field. An id `keep` refuses is dropped from that field: a record from
before the oracle no longer proves anything."""
out = {key: list(value) for key, value in (existing or {}).items()}
ids = out.setdefault(verdict.field, [])
ids_ = [rid for rid in out.get(verdict.field, []) if keep(rid)]
for rid in verdict.evidence:
if rid not in ids:
ids.append(rid)
return {key: out[key] for key in sorted(out)}
if rid not in ids_:
ids_.append(rid)
out[verdict.field] = ids_
return {key: out[key] for key in sorted(out) if out[key]}
+326 -17
View File
@@ -21,6 +21,7 @@ import argparse
import contextlib
import ctypes
import datetime as dt
import fcntl
import hashlib
import json
import os
@@ -35,7 +36,7 @@ import sys
import tempfile
import time
import zlib
from collections.abc import Iterable, Sequence
from collections.abc import Iterable, Iterator, Sequence
from dataclasses import dataclass, field
from pathlib import Path
@@ -73,6 +74,39 @@ PRINTF_SPEC = re.compile(r"%(?P<flags>[-+ #0]*)(?P<width>\*|\d+)?(?:\.(?P<prec>\
r"(?P<len>hh|h|ll|l|j|z|t|L)?(?P<conv>[diouxXeEfFgGaAcspn%])")
# One measurement at a time on the host: each core_probe execution takes this
# lock itself, its load check included, and releases it when it ends. A pass
# of many runs never holds it between them, so two passes interleave.
PROBE_LOCK_ENV = "RETROBIOS_PROBE_LOCK"
PROBE_LOCK_HELD_ENV = "RETROBIOS_PROBE_LOCK_HELD"
DEFAULT_PROBE_LOCK = Path.home() / ".local" / "state" / "retrobios" / "probe.lock"
def probe_lock_path() -> Path:
return Path(os.environ.get(PROBE_LOCK_ENV) or DEFAULT_PROBE_LOCK)
@contextlib.contextmanager
def host_probe_lock() -> Iterator[None]:
"""The host's probe lock for one execution. A caller that already holds
it for this run says so with RETROBIOS_PROBE_LOCK_HELD."""
if os.environ.get(PROBE_LOCK_HELD_ENV):
yield
return
path = probe_lock_path()
path.parent.mkdir(parents=True, exist_ok=True)
with path.open("a") as handle:
try:
fcntl.flock(handle, fcntl.LOCK_EX | fcntl.LOCK_NB)
except BlockingIOError:
print(f"waiting for {path}: another measurement is running", file=sys.stderr)
fcntl.flock(handle, fcntl.LOCK_EX)
try:
yield
finally:
fcntl.flock(handle, fcntl.LOCK_UN)
class ProbeError(RuntimeError):
"""A run that cannot produce a trustworthy result."""
@@ -375,15 +409,25 @@ class Frontend:
self.unanswered: dict[int, int] = {}
self.input_queries = 0
self.input_pressed = 0
# What a run showed so far, one JSON line per event, flushed at once:
# a core that kills the worker leaves its logs and frames behind.
events = spec.get("events")
self.events = open(events, "a", encoding="utf-8", buffering=1) if events else None # noqa: SIM115
self.callbacks = (
EnvFn(self.environment), VideoFn(self.video_refresh), AudioFn(self.audio_sample),
AudioBatchFn(self.audio_batch), PollFn(lambda: None), InputFn(self.input_state),
)
self.log_callback = RetroLogCallback(LogFn(self.log))
def event(self, kind: str, **values: object) -> None:
if self.events:
self.events.write(json.dumps({"event": kind, **values}) + "\n")
def log(self, level: int, fmt: bytes, *args: int) -> None:
name = LOG_LEVELS[level] if 0 <= level < len(LOG_LEVELS) else str(level)
self.logs.append({"frame": self.frame, "level": name, "text": render_printf(fmt or b"", args)})
line = {"frame": self.frame, "level": name, "text": render_printf(fmt or b"", args)}
self.logs.append(line)
self.event("log", **line)
def environment(self, cmd: int, data: int) -> bool:
cmd &= ~ENV_EXPERIMENTAL
@@ -446,8 +490,10 @@ class Frontend:
if every and self.frame % every == 0:
digest = hashlib.sha1(self.last_frame).hexdigest()
self.frame_hashes.append([self.frame, digest])
if digest not in self.uniform and uniform_frame(self.last_frame, PIXEL_BYTES[self.pixel_format]):
flat = digest in self.uniform or uniform_frame(self.last_frame, PIXEL_BYTES[self.pixel_format])
if flat:
self.uniform.add(digest)
self.event("frame", frame=self.frame, sha1=digest, uniform=flat)
png_dir = self.spec.get("png_dir")
if png_dir and self.last_frame:
rgb = to_rgb(self.pixel_format, *self.last_size, self.last_frame)
@@ -483,6 +529,7 @@ def run_worker(spec: dict) -> dict:
getattr(core, name)(fn)
info = RetroSystemInfo()
core.retro_get_system_info(ctypes.byref(info))
front.event("info", library_name=info.library_name.decode(), library_version=info.library_version.decode())
core.retro_init()
game = None
if spec.get("content"):
@@ -494,7 +541,9 @@ def run_worker(spec: dict) -> dict:
front.option_buffers.append(holder)
game.data, game.size = ctypes.cast(holder, ctypes.c_void_p), len(blob)
core.retro_load_game.restype = ctypes.c_bool
if not core.retro_load_game(ctypes.byref(game) if game else None):
loaded = bool(core.retro_load_game(ctypes.byref(game) if game else None))
front.event("loaded", value=loaded)
if not loaded:
return {"loaded": False, "logs": front.logs, "library_name": info.library_name.decode()}
# A frontend plugs a joypad into each port after loading, as RetroArch does.
for port in range(spec["joypad_ports"]):
@@ -619,10 +668,41 @@ def core_identity(args: argparse.Namespace) -> dict:
# Runs (parent side)
# --------------------------------------------------------------------------
@dataclass(frozen=True)
class Synthetic:
"""A wrong file made for a negative test: `@zeros:SIZE` is SIZE zero
bytes, `@head:SIZE:PATH` the first SIZE bytes of PATH."""
kind: str
size: int
source: Path | None = None
@classmethod
def parse(cls, text: str) -> Synthetic:
kind, _, rest = text[1:].partition(":")
size_text, _, source = rest.partition(":")
if kind not in ("zeros", "head") or not size_text.isdigit() or (kind == "head") != bool(source):
raise argparse.ArgumentTypeError(
f"{text!r}: a made file is @zeros:SIZE or @head:SIZE:PATH")
return cls(kind, int(size_text), Path(source) if source else None)
def label(self, dest: str) -> str:
if self.kind == "zeros":
return f"{dest}-zeros-{self.size}"
return f"{dest}-head-{self.size}-of-{self.source.name}"
def write(self, out: Path) -> None:
if self.kind == "zeros":
out.write_bytes(bytes(self.size))
return
with self.source.open("rb") as handle:
out.write_bytes(handle.read(self.size))
@dataclass
class Variant:
label: str
files: dict[str, Path | None] = field(default_factory=dict)
files: dict[str, Path | Synthetic | None] = field(default_factory=dict)
def stage_system_dir(base: dict[str, Path], variant: Variant, target: Path) -> dict[str, str | None]:
@@ -632,10 +712,14 @@ def stage_system_dir(base: dict[str, Path], variant: Variant, target: Path) -> d
for dest, src in {**base, **variant.files}.items():
out = target / dest
if src is None:
out.unlink(missing_ok=True)
staged[dest] = None
continue
out.parent.mkdir(parents=True, exist_ok=True)
shutil.copyfile(src, out)
if isinstance(src, Synthetic):
src.write(out)
else:
shutil.copyfile(src, out)
staged[dest] = file_digest(out)
return staged
@@ -781,6 +865,45 @@ def run_group(command: list[str], timeout: float, env: dict[str, str]) -> subpro
return subprocess.CompletedProcess(command, proc.returncode, out, err)
WORKER_TRACEBACK = "Traceback (most recent call last)"
def exit_description(returncode: int) -> dict:
"""The status of a worker that died. A signal reaches the probe as a
negative code, or as 128 + its number through bubblewrap's init."""
number = -returncode if returncode < 0 else returncode - 128 if 128 < returncode < 160 else 0
name = None
if number:
with contextlib.suppress(ValueError):
name = signal.Signals(number).name
return {"status": returncode, "signal": name}
def partial_result(events: Path, spec: dict) -> dict:
"""A repetition rebuilt from the events a worker wrote before it died."""
lines = []
if events.is_file():
for line in events.read_text(encoding="utf-8", errors="replace").splitlines():
with contextlib.suppress(ValueError):
lines.append(json.loads(line))
info = next((e for e in lines if e.get("event") == "info"), {})
loaded = next((e["value"] for e in lines if e.get("event") == "loaded"), False)
frames = [e for e in lines if e.get("event") == "frame"]
result: dict = {
"loaded": bool(loaded),
"library_name": info.get("library_name", ""),
"logs": [{k: e[k] for k in ("frame", "level", "text")} for e in lines if e.get("event") == "log"],
}
if info.get("library_version"):
result["library_version"] = info["library_version"]
if spec["frame_hash_every"]:
result["observables"] = {
"frame_hashes": [[e["frame"], e["sha1"]] for e in frames],
"uniform_frames": sorted({e["sha1"] for e in frames if e.get("uniform")}),
}
return result
def run_once(args: argparse.Namespace, system_dir: Path, scratch: Path, state_out: Path | None,
png_dir: Path | None) -> dict:
save_dir = scratch / "save"
@@ -800,6 +923,7 @@ def run_once(args: argparse.Namespace, system_dir: Path, scratch: Path, state_ou
"png_dir": str(png_dir) if png_dir else None,
"state_out": str(state_out) if state_out else None,
"env": dict(args.env),
"events": str((scratch / "events.jsonl").resolve()),
}
spec_path, out_path, trace_path = scratch / "spec.json", scratch / "result.json", scratch / "strace.txt"
spec_path.write_text(json.dumps(spec), encoding="utf-8")
@@ -816,10 +940,20 @@ def run_once(args: argparse.Namespace, system_dir: Path, scratch: Path, state_ou
if args.require_sandbox and isolation != SANDBOX:
raise ProbeError(f"refused to run the core outside a sandbox: {isolation}")
# The core sees the variables it was given and nothing of the host's.
proc = run_group(prefix + command, args.timeout, dict(args.env))
if proc.returncode != 0 or not out_path.exists():
raise ProbeError(f"worker exited {proc.returncode}: {proc.stderr.strip()[-2000:]}")
result = json.loads(out_path.read_text(encoding="utf-8"))
try:
proc = run_group(prefix + command, args.timeout, dict(args.env))
except subprocess.TimeoutExpired:
result = partial_result(scratch / "events.jsonl", spec)
result["exit"] = {"status": None, "signal": "SIGKILL", "timeout_s": args.timeout}
else:
if proc.returncode == 0 and out_path.exists():
result = json.loads(out_path.read_text(encoding="utf-8"))
elif WORKER_TRACEBACK in proc.stderr:
# The probe's own code failed: no verdict on the core is drawn.
raise ProbeError(f"worker exited {proc.returncode}: {proc.stderr.strip()[-2000:]}")
else:
result = partial_result(scratch / "events.jsonl", spec)
result["exit"] = exit_description(proc.returncode)
places = [(str(system_dir.resolve()), "<system>"), (str(save_dir.resolve()), "<save>")]
if args.content:
places.append((str(Path(args.content).resolve().parent), "<content>"))
@@ -872,6 +1006,10 @@ def run_variant(args: argparse.Namespace, base: dict[str, Path], variant: Varian
if state_out:
state_out.parent.mkdir(parents=True, exist_ok=True)
rep = run_once(args, system_dir, scratch, state_out, png_dir)
oracle = oracle_for(args.oracle_data, args.content_sha1, rep.get("library_name"))
rep["verdict"], rep["verdict_evidence"] = judge(rep, oracle)
if rep.get("exit"):
flags.append(f"repetition {index}: {rep['verdict_evidence']['detail']}")
if not rep.get("loaded"):
flags.append(f"repetition {index}: retro_load_game returned false")
for entry in rep.get("files_opened") or []:
@@ -885,11 +1023,14 @@ def run_variant(args: argparse.Namespace, base: dict[str, Path], variant: Varian
if rep.get("observables") != reference:
differing = sorted(k for k in (reference or {}) if (rep.get("observables") or {}).get(k) != reference[k])
flags.append(f"repetition {index} disagrees with repetition 0 on {', '.join(differing)}")
verdict, evidence = variant_verdict(reps)
return {
"label": variant.label,
"system_files": {dest: sha for dest, sha in sorted(staged.items())},
"repetitions": reps,
"flags": flags,
"verdict": verdict,
"verdict_evidence": evidence,
}
@@ -946,12 +1087,18 @@ def build_parser() -> argparse.ArgumentParser:
help="refuse to record when the 1-minute load average exceeds this "
"(default: a quarter of the CPU count)")
common.add_argument("--work-dir", default=str(DEFAULT_WORK_DIR), help="scratch directory")
common.add_argument("--timeout", type=int, default=1800, help="seconds per repetition")
common.add_argument("--timeout", type=int, default=1800,
help="seconds per repetition, after which the run is killed and judged a hang")
common.add_argument("--oracle", default=None, metavar="FILE",
help="reference frames and error patterns the verdicts are judged against "
"(default: tests/campaign/oracle.yml)")
common.add_argument("--no-trace", action="store_true", help="do not run the worker under strace")
common.add_argument("--require-sandbox", action="store_true",
help="refuse to run the core unless bubblewrap can isolate it")
sub.add_parser("run", parents=[common], help="one execution")
run = sub.add_parser("run", parents=[common], help="one execution")
run.add_argument("--repeat", type=int, default=1,
help="runs, each in a fresh process: the verdict is the one they all agree on")
bench = sub.add_parser("bench", parents=[common], help="timed repetitions")
bench.add_argument("--repeat", type=int, default=MIN_BENCH_REPETITIONS,
help=f"timed repetitions, each in a fresh process (at least {MIN_BENCH_REPETITIONS} to record)")
@@ -993,12 +1140,16 @@ def validate_args(args: argparse.Namespace) -> list[str]:
for dest, src in args.system_file:
if not Path(src).is_file():
problems.append(f"--system-file {dest}={src}: not a file")
if args.repeat < 1:
problems.append("--repeat must be >= 1")
if args.frames < 1 or args.warmup < 0:
problems.append("--frames must be >= 1 and --warmup >= 0")
if args.require_sandbox:
isolation = sandbox_argv([])[1]
if isolation != SANDBOX:
problems.append(f"--require-sandbox: {isolation}")
if args.oracle and not Path(args.oracle).is_file():
problems.append(f"--oracle {args.oracle}: not a file")
if args.png_dir and not args.frame_hash_every:
problems.append("--png-dir needs --frame-hash-every")
if args.record:
@@ -1022,7 +1173,15 @@ def validate_args(args: argparse.Namespace) -> list[str]:
if len(dests) != 1:
problems.append("--vary must name the same DEST in every occurrence")
for dest, src in args.vary:
if src and not Path(src).is_file():
if src.startswith("@"):
try:
made = Synthetic.parse(src)
except argparse.ArgumentTypeError as exc:
problems.append(f"--vary {dest}: {exc}")
continue
if made.source and not made.source.is_file():
problems.append(f"--vary {dest}={src}: {made.source} is not a file")
elif src and not Path(src).is_file():
problems.append(f"--vary {dest}={src}: not a file")
names = set(BASE_OBSERVABLES) | {f"state:{v}" for v in args.state_var}
if args.frame_hash_every:
@@ -1038,11 +1197,12 @@ def variants_for(args: argparse.Namespace) -> list[Variant]:
out: list[Variant] = []
seen: set[str] = set()
for dest, src in args.vary:
label = Path(src).name if src else f"{dest}-absent"
made = Synthetic.parse(src) if src.startswith("@") else None
label = made.label(dest) if made else Path(src).name if src else f"{dest}-absent"
while label in seen:
label += "+"
seen.add(label)
out.append(Variant(label, {dest: Path(src) if src else None}))
out.append(Variant(label, {dest: made or (Path(src) if src else None)}))
return out
@@ -1088,6 +1248,144 @@ def check_result(variants: list[dict], observable: str) -> dict:
}
# --------------------------------------------------------------------------
# Boot oracle: what a run reached, from positive evidence
# --------------------------------------------------------------------------
BOOTS, BIOS_ERROR, CRASH, HANG, UNKNOWN = "boots", "bios_error", "crash", "hang", "unknown"
VERDICTS = (BOOTS, BIOS_ERROR, CRASH, HANG, UNKNOWN)
DEFAULT_ORACLE = ROOT / "tests" / "campaign" / "oracle.yml"
def oracle_for(data: dict, content_sha1: str | None, library_name: str | None) -> dict:
"""The oracle entries that judge one content on one core: its reference
frames, the error patterns every core shares and the core's own, the
core's known error screens, and the log lines by which it says it loaded
the console's own BIOS."""
core = (data.get("cores") or {}).get(library_name or "") or {}
references: list[dict] = []
for item in data.get("content") or ():
if content_sha1 and item.get("sha1") == content_sha1:
block = (item.get("references") or {}).get(library_name or "") or {}
references = [{"sha1": f["sha1"], "stage": f["stage"], "shows": f["shows"]}
for f in block.get("frames") or ()]
patterns = [p["pattern"] for p in (data.get("error_patterns") or ())]
patterns += [p["pattern"] for p in core.get("error_patterns") or ()]
screens = [{"sha1": s["sha1"], "shows": s["shows"]} for s in core.get("error_screens") or ()]
loaded = [p["pattern"] for p in core.get("bios_patterns") or ()]
return {"references": references, "error_patterns": patterns, "error_screens": screens,
"bios_patterns": loaded}
def sampled(rep: dict) -> list[tuple[int, str]]:
observables = rep.get("observables") or {}
return [(int(frame), digest) for frame, digest in observables.get("frame_hashes") or ()]
def judge(rep: dict, oracle: dict) -> tuple[str, dict]:
"""The verdict of one repetition and the evidence that decided it.
In order: a worker killed after the timeout is a hang and one that died
a crash, from the process status. A reference frame of the game reached
is a boot: the console's own screens alone are not. Without one, an error pattern of the core log or a known error screen
is a BIOS error. Every sampled frame of the second half one colour is a
hang. Anything else is unknown: a run is never called a boot because
its frames differ from another run's.
"""
ended = rep.get("exit")
if ended and ended.get("timeout_s") is not None:
return HANG, {"rule": "timeout", "detail": f"killed after {ended['timeout_s']} s",
"exit_status": ended.get("status"), "signal": ended.get("signal")}
if ended:
how = f"signal {ended['signal']}" if ended.get("signal") else f"exit status {ended.get('status')}"
return CRASH, {"rule": "exit_status", "detail": f"the worker died: {how}",
"exit_status": ended.get("status"), "signal": ended.get("signal")}
frames = sampled(rep)
final = (rep.get("observables") or {}).get("frame_sha1")
if final:
frames.append((int(rep.get("frames", 0)) + int(rep.get("warmup", 0)), final))
references = {r["sha1"]: r for r in oracle.get("references") or ()}
reached = [(frame, digest) for frame, digest in frames if digest in references]
stages = list(dict.fromkeys(references[d]["stage"] for _, d in reached))
# A core that hides the BIOS screens by default still says it loaded one.
if "bios" not in stages and any(re.search(pattern, line["text"])
for pattern in oracle.get("bios_patterns") or ()
for line in rep.get("logs") or ()):
stages.insert(0, "bios")
game = [(frame, digest) for frame, digest in reached if references[digest]["stage"] == "game"]
if game:
frame, digest = game[0]
return BOOTS, {"rule": "reference_frame",
"detail": f"frame {frame} shows {references[digest]['shows']}",
"frame": frame, "sha1": digest, "stages": stages}
verdict, evidence = _without_the_game(rep, oracle, frames)
if stages:
# The console's own screens without one of the game: never a boot.
evidence["stages"] = stages
evidence["detail"] += ", after the BIOS screens and no screen of the game"
return verdict, evidence
def _without_the_game(rep: dict, oracle: dict, frames: list[tuple[int, str]]) -> tuple[str, dict]:
"""The verdict of a run that reached no screen of the game."""
for pattern in oracle.get("error_patterns") or ():
for line in rep.get("logs") or ():
if re.search(pattern, line["text"]):
return BIOS_ERROR, {"rule": "error_pattern",
"detail": f"the core logged an error at frame {line['frame']}",
"pattern": pattern, "log": line["text"], "frame": line["frame"]}
screens = {s["sha1"]: s for s in oracle.get("error_screens") or ()}
for frame, digest in frames:
if digest in screens:
return BIOS_ERROR, {"rule": "error_screen",
"detail": f"frame {frame} shows {screens[digest]['shows']}",
"frame": frame, "sha1": digest}
if not rep.get("loaded"):
return UNKNOWN, {"rule": "no_evidence",
"detail": "retro_load_game returned false and no error pattern matched"}
uniform = set((rep.get("observables") or {}).get("uniform_frames") or ())
tail = [digest for frame, digest in sampled(rep)][len(sampled(rep)) // 2:]
if tail and all(digest in uniform for digest in tail):
return HANG, {"rule": "uniform_tail",
"detail": f"the last {len(tail)} sampled frames are one colour each"}
if not oracle.get("references"):
return UNKNOWN, {"rule": "no_evidence", "detail": "no reference frame is known for this "
"content on this core"}
return UNKNOWN, {"rule": "no_evidence", "detail": "no reference frame reached, no error pattern "
"and no error screen"}
def variant_verdict(reps: Sequence[dict]) -> tuple[str, dict]:
"""The verdict all repetitions agree on, else unknown."""
verdicts = [rep["verdict"] for rep in reps]
if len(set(verdicts)) == 1:
first = reps[0]["verdict_evidence"]
evidence = {"rule": "repetitions_agree",
"detail": f"{len(reps)} of {len(reps)} repetitions: {first['detail']}",
"repetitions": verdicts}
for key in ("frame", "sha1", "stages", "pattern", "log", "exit_status", "signal"):
if key in first:
evidence[key] = first[key]
return verdicts[0], evidence
return UNKNOWN, {"rule": "repetitions_disagree",
"detail": f"the repetitions disagree: {', '.join(verdicts)}",
"repetitions": verdicts}
def load_oracle(path: Path | None) -> tuple[dict, dict | None]:
"""The oracle file's data and its identity, or nothing without a file."""
if path is None or not path.is_file():
return {}, None
import yaml # noqa: PLC0415
data = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
try:
shown = path.resolve().relative_to(ROOT).as_posix()
except ValueError:
shown = path.name
return data, {"file": shown, "sha256": file_digest(path, "sha256")}
def default_emulator(core_file: Path, library_name: str | None) -> str:
"""The profile whose cores: names the .so, else the library name as a slug."""
stem = core_file.name.split(".")[0].removesuffix("_libretro")
@@ -1143,14 +1441,21 @@ def probe(args: argparse.Namespace) -> int:
for problem in problems:
print(f"ERROR: {problem}", file=sys.stderr)
return 2
with host_probe_lock():
return _probe(args)
def _probe(args: argparse.Namespace) -> int:
max_load = args.max_load if args.max_load is not None else (os.cpu_count() or 1) / 4
load_before = load_average()
if args.record and load_before and load_before[0] > max_load:
print(f"ERROR: load average {load_before[0]} exceeds {max_load}: the machine is busy, "
f"nothing recorded (raise --max-load to override)", file=sys.stderr)
return 3
repetitions = 1 if args.mode == "run" else args.repeat
repetitions = args.repeat
base = {dest: Path(src) for dest, src in args.system_file}
args.oracle_data, oracle_identity = load_oracle(Path(args.oracle) if args.oracle else DEFAULT_ORACLE)
args.content_sha1 = file_digest(Path(args.content)) if args.content else None
work = Path(tempfile.mkdtemp(prefix=f"{args.mode}-", dir=_ensure(Path(args.work_dir))))
try:
variants = [run_variant(args, base, variant, work / f"v{i}", repetitions)
@@ -1188,6 +1493,9 @@ def probe(args: argparse.Namespace) -> int:
+ (["frame_hashes", "uniform_frames"] if args.frame_hash_every else []),
"frame_hash_every": args.frame_hash_every,
"joypad_ports": args.joypad_ports,
"oracle": ({**oracle_identity, **oracle_for(args.oracle_data, args.content_sha1,
first.get("library_name"))}
if oracle_identity else None),
},
"variants": variants,
"flags": [f"{v['label']}: {flag}" for v in variants for flag in v["flags"]],
@@ -1202,7 +1510,8 @@ def probe(args: argparse.Namespace) -> int:
if args.mode == "check":
record["check"] = {"claim": args.claim, "method": args.method, "observable": args.observable,
"variable": args.vary[0][0],
"result": check_result(variants, args.observable)}
"result": {**check_result(variants, args.observable),
"verdicts": {v["label"]: v["verdict"] for v in variants}}}
try:
record["emulator"] = args.emulator or default_emulator(Path(args.core), first.get("library_name"))
except ProbeError as exc:
+22 -1
View File
@@ -7180,6 +7180,11 @@ def system_pages(
_section_label(manufacturer, console),
_install_pairs(installs.get(console, []), lead, consumers))
def region_block(console: str, level: int = 3) -> list[str]:
# Under the console's heading on a maker's page, a section of its
# own on the console's page.
return sitemeasurements.region_section(_REGION_RESULTS.get((slug, console), []), level)
def all_sections() -> dict[str, list[Card]]:
anchors: set[str] = set()
return {console: cards_of(console, anchors) for console in ordered}
@@ -7221,6 +7226,7 @@ def system_pages(
lines.append("")
lines.extend(start_of(console))
lines.extend(install_block(console))
lines.extend(region_block(console))
lines.extend(_cards_markdown(cards))
lines.append("")
lines.extend(_next_block([*_NEXT_FROM_SYSTEMS, json_next]))
@@ -7283,6 +7289,7 @@ def system_pages(
if console not in moved:
summary.extend(start_of(console))
summary.extend(install_block(console))
summary.extend(region_block(console))
summary.extend(_cards_markdown(cards_of(console, summary_anchors)))
summary.append("")
continue
@@ -7367,6 +7374,8 @@ def system_pages(
lines.extend(legend)
lines.extend(_romset_note({console: consoles[console]}))
lines.extend(install_block(console))
if index == 0:
lines.extend(region_block(console, 2))
lines.extend(["## Files", ""])
lines.extend(_cards_markdown(part))
lines.append("")
@@ -9097,6 +9106,9 @@ _DATA_MEMBERS: dict[str, dict[str, dict]] = {}
_DATA_REVISIONS: dict[str, dict] = {}
# The measurement index items of each emulator, for its Tested block.
_MEASUREMENT_ITEMS: dict[str, list[dict]] = {}
# (manufacturer slug, console) -> the region outcomes of its systems
# (region_check.py), shown under the console on its system page.
_REGION_RESULTS: dict[tuple[str, str], list[dict]] = {}
# The emulator pages that list each data directory, by ref.
_DATA_READERS: dict[str, list[tuple[str, str]]] = {}
@@ -11833,6 +11845,13 @@ def _generate(args: argparse.Namespace) -> None:
_system_pages_from_data(manufacturers, coverages, db, profiles)
)
print(f" {len(_system_page_map)} system IDs mapped to pages")
from siterender import _page_by_norm # noqa: PLC0415
_REGION_RESULTS.clear()
for result in sitemeasurements.site_region_results(repo=REPO_URL):
place = _system_page_map.get(result["system"]) or _page_by_norm(result["system"])
if place:
_REGION_RESULTS.setdefault(place, []).append(result)
set_console_sections(manufacturers, program_names(profiles))
from siterender import link_coverage, system_ids # noqa: PLC0415
@@ -11887,7 +11906,9 @@ def _generate(args: argparse.Namespace) -> None:
_MEASUREMENT_ITEMS.update(sitemeasurements.by_emulator(measured.index))
print(f" {measured.index['records']} records, {measured.index['count']} tests")
write_if_changed(str(docs / sitemeasurements.EXPLORER_PAGE),
sitemeasurements.generate_explorer_page(measured.index) + reference_next())
sitemeasurements.generate_explorer_page(
measured.index, {sys_id: system_name(sys_id) for sys_id in sorted(set(_system_page_map))})
+ reference_next())
print("Generating static API and bulk data exports...")
exports = generate_data_exports(
+5 -3
View File
@@ -27,7 +27,9 @@ from collections.abc import Iterable
from dataclasses import dataclass
from pathlib import Path
RECORD_VERSION = 3
RECORD_VERSION = 4
# 3: before the boot oracle. 4: every repetition and variant carries a verdict.
RECORD_VERSIONS = (3, 4)
RECORDS_DIR = "measurements"
ID_PATTERN = re.compile(r"^\d{4}-\d{2}-\d{2}-[0-9a-f]{12}$")
SLUG_PATTERN = re.compile(r"^[a-z0-9]+(?:[-_][a-z0-9]+)*$")
@@ -137,8 +139,8 @@ def check_line(record: dict) -> list[str]:
"""The structural rules a line holds, without a JSON Schema validator."""
rid = record.get("id", "")
problems = []
if record.get("record_version") != RECORD_VERSION:
problems.append(f"{rid}: record_version {record.get('record_version')} != {RECORD_VERSION}")
if record.get("record_version") not in RECORD_VERSIONS:
problems.append(f"{rid}: record_version {record.get('record_version')} not in {RECORD_VERSIONS}")
if not ID_PATTERN.match(str(rid)):
problems.append(f"{rid!r}: not an id of the form YYYY-MM-DD-<12 hex>")
elif str(record.get("recorded_at", ""))[:10] != rid[:10]:
+400
View File
@@ -0,0 +1,400 @@
#!/usr/bin/env python3
"""Region checks: which regional BIOS a core reads for a game, and whether
the game boots without it.
For a system whose profile marks its BIOS entries with `region:`, each test
game of a region (tests/campaign/content.yml) runs through core_probe four
times, each a record in measurements/<emulator>.jsonl:
full every regional BIOS the profile declares
own only the entries whose `region:` holds the game's region
others only the entries of the other regions
pack the files of `generate_pack.py --emulator E --region R`, at
the place the pack puts them
The outcome reads the records: the file the core opened in the full run
(from strace) settles the `region:` claim, the verdicts of `own` and
`others` say whether the BIOS is locked to the region, and `pack` says
whether the pack filtered for the region boots the region's game.
run the four runs for each region game of one core and system
report the outcome of every region record already in measurements/
A maintainer starts a run. Nothing here runs on a timer.
"""
from __future__ import annotations
import argparse
import json
import re
import subprocess
import sys
import tempfile
import time
import urllib.request
from collections.abc import Callable, Iterable
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent))
import yaml # noqa: E402
ROOT = Path(__file__).resolve().parent.parent
CONTENT_FILE = ROOT / "tests" / "campaign" / "content.yml"
CORES = ROOT / ".cache" / "region" / "cores"
NIGHTLY = "https://buildbot.libretro.com/nightly/linux/x86_64/latest/{core}_libretro.so.zip"
VARIANTS = ("full", "own", "others", "pack")
SUBJECT = re.compile(r"^region-(?P<core>[a-z0-9_]+)-(?P<game>[a-z0-9-]+)-(?P<variant>full|own|others|pack)$")
# The territory a test game names, as generate_pack --region takes it.
PACK_REGION = {"japan": "jp", "north-america": "us", "europe": "eu"}
REGION_WORDS = {"japan": "Japanese", "north-america": "US", "europe": "European"}
# --------------------------------------------------------------------------
# Pure rules
# --------------------------------------------------------------------------
def regions_of(entry: dict) -> list[str]:
regions = entry.get("region") or []
return [regions] if isinstance(regions, str) else list(regions)
def entry_dest(entry: dict) -> str:
path = entry.get("path")
if isinstance(path, str) and path and not path.endswith("/"):
return path
return entry["name"]
def region_entries(profile: dict, system: str) -> list[dict]:
"""The BIOS entries of a system that a `region:` ties to territories."""
out = []
for entry in profile.get("files") or ():
systems = entry.get("systems") or ([entry["system"]] if entry.get("system")
else profile.get("systems") or [])
if (system in systems and regions_of(entry) and "world" not in regions_of(entry)
and entry.get("category", "bios") == "bios" and entry.get("mode") != "standalone"):
out.append(entry)
return out
def plan_variants(entries: Iterable[dict], region: str,
local: Callable[[dict], Path | None]) -> dict[str, dict[str, Path]]:
"""The staged files of `full`, `own` and `others`, dest -> file. An entry
the collection does not hold is left out of every variant."""
held = [(entry, local(entry)) for entry in entries]
held = [(entry, path) for entry, path in held if path]
full = {entry_dest(e): p for e, p in held}
own = {entry_dest(e): p for e, p in held if region in regions_of(e)}
others = {entry_dest(e): p for e, p in held if region not in regions_of(e)}
return {"full": full, "own": own, "others": others}
def subject(core: str, game: str, variant: str) -> str:
words = re.findall(r"[a-z0-9]+", game.lower())
return f"region-{core.lower().replace('-', '_')}-{'-'.join(words)[:60].strip('-')}-{variant}"
def opened(record: dict) -> set[str]:
return {item["path"] for variant in record["variants"] for rep in variant["repetitions"]
for item in rep.get("files_opened") or ()}
def frames(record: dict) -> list:
rep = record["variants"][0]["repetitions"][0]
return (rep.get("observables") or {}).get("frame_hashes") or []
def verdict(record: dict) -> str:
return record["variants"][0].get("verdict") or "unknown"
def outcome(records: dict[str, dict], entries: list[dict], region: str) -> dict:
"""What the four records of one game on one core settle.
`selected` is the regional file the core opened with every one staged.
The `region:` claim is `confirmed` when every regional file it opened
holds the game's region, `contradicted` when none does, `ambiguous`
when it opened its own region's file and others too, `unread` when it
opened none. Each variant's result is its oracle verdict. While no
reference frame is known for the game, a variant that samples the same
frames as the full run (`as_full`) boots, and one that does not stays
without an answer: frames that differ never make a verdict.
"""
by_dest = {entry_dest(e): e for e in entries}
full = records.get("full")
selected = sorted(opened(full) & set(by_dest)) if full else []
if not full:
claim = "unrun"
elif not selected:
claim = "unread"
elif all(region in regions_of(by_dest[d]) for d in selected):
claim = "confirmed"
elif any(region in regions_of(by_dest[d]) for d in selected):
# Opened every region's file, to hash them or to choose: the open
# alone does not say which one the core runs.
claim = "ambiguous"
else:
claim = "contradicted"
results: dict[str, dict] = {}
for label in VARIANTS:
record = records.get(label)
if not record:
continue
loaded = all(rep.get("loaded") for v in record["variants"] for rep in v["repetitions"])
item = {"record": record["id"], "verdict": verdict(record), "loaded": loaded,
"staged": sorted(record["variants"][0]["system_files"])}
if full and label != "full":
item["as_full"] = loaded and frames(record) == frames(full)
results[label] = item
full_verdict = verdict(full) if full else None
def boots(label: str) -> bool | None:
item = results.get(label)
if not item:
return None
if item["verdict"] != "unknown":
return item["verdict"] == "boots"
# No verdict: the interim rule. The same frames as the full run is a
# boot, while the full run itself is not shown to fail. Other frames
# say nothing: the US disc reaches its game on the Japanese and
# European BIOS through another licence screen.
if full_verdict in ("boots", "unknown") and item.get("as_full"):
return True
return None
return {
"region": region,
"selected": [by_dest[d]["name"] for d in selected],
"claim": claim,
"variants": results,
"own_boots": boots("own"),
"others_boot": boots("others"),
"pack_boots": boots("pack"),
"judged_by": "verdict" if full_verdict not in (None, "unknown") else "full_run_frames",
}
def sentence(game_region: str, result: dict) -> str:
"""The outcome in words, for the site."""
word = REGION_WORDS.get(game_region, game_region)
own, others = result.get("own_boots"), result.get("others_boot")
if own is None:
return f"The {word} game has no run with its own BIOS yet."
first = f"The {word} BIOS {'boots' if own else 'does not boot'} the {word} game"
if others is None:
return first + ". The other regions' BIOS have no verdict yet."
if others:
return first + ", and so do the other regions' BIOS."
return first + ", the other regions' BIOS do not."
# --------------------------------------------------------------------------
# Runs
# --------------------------------------------------------------------------
def load_content(path: Path = CONTENT_FILE) -> dict[str, list[dict]]:
data = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
out: dict[str, list[dict]] = {}
for system, spec in (data.get("systems") or {}).items():
for item in spec.get("content") or ():
out.setdefault(system, []).append({**item, "romfetch": spec["romfetch"]})
return out
def content_file(item: dict, content_dir: Path) -> Path:
folder = content_dir / item["romfetch"] / item["name"]
if item.get("load") == "cue":
cues = sorted(folder.glob("*.cue"))
if len(cues) != 1:
raise FileNotFoundError(f"{folder}: {len(cues)} .cue files, one expected")
return cues[0]
if item.get("load"):
return folder / item["load"]
files = [p for p in sorted(folder.iterdir()) if p.is_file() and p.name != "identity.json"]
if len(files) != 1:
raise FileNotFoundError(f"{folder}: {len(files)} files, name one with load:")
return files[0]
def nightly_core(core: str) -> tuple[Path, str]:
"""The buildbot nightly of a core, downloaded once, and its URL."""
import zipfile # noqa: PLC0415
url = NIGHTLY.format(core=core)
target = CORES / f"{core}_libretro.so"
if not target.is_file():
CORES.mkdir(parents=True, exist_ok=True)
archive = CORES / f"{core}.zip"
with urllib.request.urlopen(url, timeout=300) as response, archive.open("wb") as out:
out.write(response.read())
with zipfile.ZipFile(archive) as handle:
member = f"{core}_libretro.so"
if member not in handle.namelist():
raise FileNotFoundError(f"{archive.name}: no {member} inside")
partial = target.with_suffix(".part")
partial.write_bytes(handle.read(member))
partial.replace(target)
archive.unlink()
return target, url
def pack_files(emulator: str, region: str, work: Path) -> dict[str, Path]:
"""The files generate_pack puts in the emulator's pack for one region,
extracted, by their path in the pack."""
from ziptools import safe_extract_zip # noqa: PLC0415
out_dir = work / "pack"
subprocess.run([sys.executable, str(ROOT / "scripts" / "generate_pack.py"), "--emulator", emulator,
"--region", PACK_REGION[region], "--output-dir", str(out_dir)],
cwd=ROOT, check=True, capture_output=True, text=True)
zips = sorted(out_dir.glob("*.zip"))
if len(zips) != 1:
raise FileNotFoundError(f"{out_dir}: {len(zips)} packs, one expected")
tree = work / "pack-tree"
safe_extract_zip(str(zips[0]), str(tree))
return {p.relative_to(tree).as_posix(): p for p in sorted(tree.rglob("*")) if p.is_file()
and not p.name.upper().startswith("README")}
def local_resolver() -> Callable[[dict], Path | None]:
from common import load_database, resolve_local_file # noqa: PLC0415
db = load_database(str(ROOT / "database.json"))
def local(entry: dict) -> Path | None:
hint = entry.get("path") if isinstance(entry.get("path"), str) else ""
path, status = resolve_local_file(entry, db, dest_hint=hint or "")
if not path or status in ("not_found", "hash_mismatch"):
return None
found = Path(path) if Path(path).is_absolute() else ROOT / path
return found if found.is_file() else None
return local
BUSY = 3 # core_probe's exit status when it refuses to record on a busy host
POLL_S = 15
def probe_when_idle(argv: list[str], max_wait: float,
clock: Callable[[], float] = time.monotonic,
pause: Callable[[float], None] = time.sleep,
runner: Callable[..., subprocess.CompletedProcess] = subprocess.run
) -> subprocess.CompletedProcess:
"""core_probe, run again while it refuses a busy host, as the campaign
does: every POLL_S seconds until max_wait seconds have passed. The load
threshold stays core_probe's own."""
started = clock()
while True:
proc = runner(argv, cwd=ROOT, capture_output=True, text=True)
if proc.returncode != BUSY or clock() - started >= max_wait:
return proc
pause(POLL_S)
def run(args: argparse.Namespace) -> int:
from common import load_emulator_profiles # noqa: PLC0415
profile = load_emulator_profiles(str(ROOT / "emulators"))[args.emulator]
entries = region_entries(profile, args.system)
if not entries:
print(f"ERROR: {args.emulator} declares no regional BIOS for {args.system}", file=sys.stderr)
return 2
games = [g for g in load_content().get(args.system, []) if g.get("region") in PACK_REGION]
if not games:
print(f"ERROR: content.yml has no regional game for {args.system}", file=sys.stderr)
return 2
core, url = (Path(args.core), args.core_artifact) if args.core else nightly_core(args.core_name)
local = local_resolver()
failures = 0
for game in games:
load = content_file(game, Path(args.content_dir))
with tempfile.TemporaryDirectory(dir=ROOT / "tmp") as scratch:
variants = plan_variants(entries, game["region"], local)
variants["pack"] = pack_files(args.emulator, game["region"], Path(scratch))
for label in args.variants or VARIANTS:
argv = [sys.executable, str(ROOT / "scripts" / "core_probe.py"), "run",
"--core", str(core), "--content", str(load), "--content-label", game["name"],
"--frames", str(game.get("frames", 3600)),
"--frame-hash-every", str(game.get("frame_hash_every", 10)),
"--record", str(ROOT), "--emulator", args.emulator,
"--subject", subject(core.name.removesuffix("_libretro.so"), game["name"], label),
"--require-sandbox", "--timeout", str(args.timeout)]
if url:
argv += ["--core-artifact", url]
for dest, src in sorted(variants[label].items()):
argv += ["--system-file", f"{dest}={src}"]
proc = probe_when_idle(argv, args.max_load_wait)
status = "recorded" if proc.returncode == 0 else f"exit {proc.returncode}"
print(json.dumps({"game": game["name"], "variant": label, "status": status,
"error": proc.stderr.strip()[-400:] if proc.returncode else None}),
flush=True)
failures += proc.returncode != 0
return 1 if failures else 0
def collect(root: Path = ROOT, stored_records: list | None = None) -> list[dict]:
"""Every region outcome the records under measurements/ hold. A game
listed under several systems (sega-megacd and mega-cd) is judged under
the one whose profile ran it."""
from common import load_emulator_profiles # noqa: PLC0415
from measurement_records import live, read_records # noqa: PLC0415
content: dict[str, list[tuple[str, dict]]] = {}
for system, items in load_content(root / "tests" / "campaign" / "content.yml").items():
for item in items:
content.setdefault(item["name"], []).append((system, item))
profiles = load_emulator_profiles(str(root / "emulators"))
groups: dict[tuple[str, str, str], dict[str, dict]] = {}
for stored in read_records(root) if stored_records is None else stored_records:
match = SUBJECT.match(stored.record.get("subject", ""))
label = ((stored.record.get("inputs") or {}).get("content") or {}).get("label")
if not match or label not in content:
continue
key = (stored.emulator, match["core"], label)
groups.setdefault(key, {})[match["variant"]] = stored.record
out = []
for (emulator, core, game), records in sorted(groups.items()):
records = {k: v for k, v in records.items() if v["id"] in {r["id"] for r in live(records.values())}}
profile = profiles.get(emulator, {})
system, item = next(((s, i) for s, i in content[game] if s in (profile.get("systems") or ())),
content[game][0])
entries = region_entries(profile, system)
result = outcome(records, entries, item["region"])
out.append({"emulator": emulator, "core": core, "system": system, "game": game, **result,
"sentence": sentence(item["region"], result)})
return out
def main(argv: list[str] | None = None) -> int:
parser = argparse.ArgumentParser(allow_abbrev=False, description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
sub = parser.add_subparsers(dest="command", required=True)
go = sub.add_parser("run", allow_abbrev=False, help="the four runs of each region game, recorded")
go.add_argument("--emulator", required=True, help="the profile, e.g. beetle_psx")
go.add_argument("--system", required=True, help="the system, e.g. sony-playstation")
go.add_argument("--core-name", help="buildbot core name, e.g. mednafen_psx (downloads the nightly)")
go.add_argument("--core", help="a core .so to use instead of the nightly")
go.add_argument("--core-artifact", help="where --core was downloaded from")
go.add_argument("--content-dir", default=str(ROOT / ".cache" / "test-content"),
help="where romfetch keeps the test games (default: .cache/test-content)")
go.add_argument("--variants", nargs="*", choices=VARIANTS, help="a subset of the four runs")
go.add_argument("--timeout", type=int, default=900, help="seconds per run")
go.add_argument("--max-load-wait", type=int, default=1800,
help="seconds a run waits for a busy host to settle before it is given up (default 1800)")
sub.add_parser("report", allow_abbrev=False, help="the outcomes the records hold, as JSON")
args = parser.parse_args(argv)
if args.command == "run":
if not (args.core or args.core_name):
parser.error("run needs --core-name or --core")
return run(args)
print(json.dumps(collect(), indent=2))
return 0
if __name__ == "__main__":
from common import run_cli
run_cli(main)
+630 -78
View File
@@ -18,17 +18,16 @@ its line at the last commit that touched measurements/.
from __future__ import annotations
import html
import json
import os
import re
import sqlite3
import sys
from collections.abc import Callable
from dataclasses import dataclass
from pathlib import Path
import measurement_records as mr
import siteentries
import sitemarkup as markup
from artifacts import json_text, write_if_changed
from siterender import _escape_tags
@@ -41,7 +40,7 @@ HOSTS_MARKER = "<!-- measurements-hosts -->"
INDEX_PATH = Path("data") / "measurements" / "index.json"
SQLITE_PATH = Path("downloads") / "measurements.sqlite"
PER_EMULATOR_DIR = Path("downloads") / "measurements"
SQLITE_SCHEMA_VERSION = "2"
SQLITE_SCHEMA_VERSION = "3"
# Observables the variants table leaves out: one value per sampled frame.
BULKY_OBSERVABLES = ("frame_hashes",)
INDEX_SCHEMA_VERSION = 1
@@ -76,6 +75,40 @@ def permalink(repo: str, commit: str, path: str, line: int | None = None) -> str
return f"{repo}/blob/{commit}/{path}" + (f"#L{line}" if line else "")
def verdicts_of(record: dict) -> list[dict]:
"""Each variant's boot verdict, from record version 4 on."""
return [{"variant": v["label"], "verdict": v["verdict"],
"detail": (v.get("verdict_evidence") or {}).get("detail", "")}
for v in record["variants"] if "verdict" in v]
def result_of(record: dict) -> tuple[str, str]:
"""The status and statement a page shows for a record.
A run, or a check compared on the sampled frames, is shown by its boot
verdicts: one verdict when every variant has it, else `mixed`, each
variant named in the statement. A check on another observable keeps
its comparison. A frame comparison recorded before the boot oracle
shows `no verdict`: frames that differ prove nothing about a boot.
"""
check = record.get("check") or {}
result = check.get("result") or {}
if record["kind"] == "bench":
return "measured", bench_statement(record) if record.get("timing") else ""
verdicts = verdicts_of(record)
by_frames = record["kind"] == "run" or check.get("observable") == "frame_hashes"
if verdicts and by_frames:
values = {v["verdict"] for v in verdicts}
status = values.pop() if len(values) == 1 else "mixed"
if record["kind"] == "run":
return status, verdicts[0]["detail"]
return status, ". ".join(f"{v['variant']}: {v['verdict']}" for v in verdicts)
if by_frames:
return "no verdict", ("recorded before the boot oracle. Its frames were compared, which "
"settles nothing about a boot")
return result.get("status") or "ran", result.get("statement") or ""
def index_item(entry: mr.Stored, runs: int, source: dict, profiles: dict,
system_names: dict[str, str]) -> dict:
record = entry.record
@@ -95,9 +128,9 @@ def index_item(entry: mr.Stored, runs: int, source: dict, profiles: dict,
"method": check.get("method"),
"observable": check.get("observable"),
"variable": check.get("variable"),
"status": (check.get("result") or {}).get("status") or ("measured" if record["kind"] == "bench" else "ran"),
"statement": (check.get("result") or {}).get("statement")
or (bench_statement(record) if record.get("timing") else ""),
"status": result_of(record)[0],
"statement": result_of(record)[1],
"verdicts": verdicts_of(record),
"content": content.get("label"),
"variants": len(record["variants"]),
"repetitions": record["inputs"]["repetitions"],
@@ -114,9 +147,21 @@ def index_item(entry: mr.Stored, runs: int, source: dict, profiles: dict,
"runs": runs,
"record_url": permalink(source["repo"], source["commit"], mr.records_path(entry.emulator), entry.line),
"sqlite": f"downloads/measurements/{entry.emulator}.sqlite",
"host_short": short_host(record["host"]),
"setup": setup_of(record),
"groups": variant_groups(record),
"proves": proves(record["id"], profile),
"timing": ({"ms_per_frame": record["timing"]["ms_per_frame"]["median"],
"fps": record["timing"]["fps"]["median"],
"stdev": record["timing"]["ms_per_frame"]["stdev"]}
if record.get("timing") else None),
}
def with_title(item: dict) -> dict:
return {**item, "title": short_title(item)}
def build_index(stored: list[mr.Stored], source: dict | None, profiles: dict,
system_names: dict[str, str] | None = None) -> dict:
"""One item per (emulator, subject): its latest record not superseded."""
@@ -129,7 +174,8 @@ def build_index(stored: list[mr.Stored], source: dict | None, profiles: dict,
for key in sorted(by_subject):
entries = by_subject[key]
latest = max(entries, key=lambda s: (s.record["recorded_at"], s.line))
items.append(index_item(latest, len(entries), source or {}, profiles, system_names or {}))
items.append(with_title(index_item(latest, len(entries), source or {}, profiles,
system_names or {})))
items.sort(key=lambda item: (item["emulator"], item["date"], item["subject"]))
return {
"schema_version": INDEX_SCHEMA_VERSION,
@@ -206,7 +252,8 @@ def campaign_section(summary: dict | None) -> list[str]:
lines = [
"## Campaign",
"",
f"Tests run by themselves every night on an idle computer ([how]({METHOD_PAGE})). "
f"A maintainer starts a pass, on an idle computer, and nothing runs by itself "
f"([how]({METHOD_PAGE})). "
f"Last pass: {_plain(last['ended_at'][:10])}, {_plain(last['result'])}"
+ (f" ({_plain(last['detail'])})" if last.get("detail") else "") + ". "
f"{int(counts['done'])} tests done, {int(counts['failed'])} failed, {int(counts['pending'])} waiting. "
@@ -241,6 +288,176 @@ def campaign_section(summary: dict | None) -> list[str]:
return lines
# --------------------------------------------------------------------------
# Coverage and region results
# --------------------------------------------------------------------------
CONTENT_FILE = Path("tests") / "campaign" / "content.yml"
def coverage(root: Path, stored: list[mr.Stored], profiles: dict | None = None) -> dict:
"""Per system of the content list: its games, and which emulators ran
each one. A record counts for a system only when its emulator's profile
names that system: one catalog name can be a PlayStation disc and a
Saturn disc. A system no catalog covers comes with the reason and the
error romfetch returned."""
import yaml # noqa: PLC0415
path = root / CONTENT_FILE
if not path.is_file():
return {"systems": [], "uncovered": []}
data = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
ran: dict[str, set[str]] = {}
for entry in stored:
label = ((entry.record.get("inputs") or {}).get("content") or {}).get("label")
if label:
ran.setdefault(label, set()).add(entry.emulator)
systems = []
for system, spec in (data.get("systems") or {}).items():
games = [{"name": item["name"], "region": item.get("region"),
"emulators": sorted(e for e in ran.get(item["name"], ())
if profiles is None
or system in ((profiles.get(e) or {}).get("systems") or ()))}
for item in spec.get("content") or ()]
listed = {item["name"] for item in spec.get("content") or ()}
# Runs of this system's emulators on games the list does not name.
other = sorted({e for label, emulators in ran.items() if label not in listed for e in emulators
if profiles is not None
and system in ((profiles.get(e) or {}).get("systems") or ())})
systems.append({"system": system, "games": games, "other_games_by": other,
"tested": any(game["emulators"] for game in games)})
uncovered = [{"system": system, "want": item.get("want"), "reason": " ".join(str(item["reason"]).split()),
"romfetch": item.get("romfetch") or {}}
for system, item in (data.get("uncovered") or {}).items()]
return {"systems": systems, "uncovered": uncovered}
def coverage_section(cov: dict | None, system_names: dict[str, str] | None = None) -> list[str]:
"""The Coverage block of the explorer page: tested or not, and why not."""
if not cov or not (cov.get("systems") or cov.get("uncovered")):
return []
names = system_names or {}
tested = [s for s in cov["systems"] if s["tested"]]
lines = [
"## Coverage",
"",
f"Test games come from [`{CONTENT_FILE.as_posix()}`]({REPO}/blob/main/{CONTENT_FILE.as_posix()}), "
f"one per region where a BIOS depends on it. {len(tested)} of {len(cov['systems'])} listed "
f"systems have a recorded run, and {len(cov['uncovered'])} "
f"{'system has' if len(cov['uncovered']) == 1 else 'systems have'} no test game.",
"",
"| System | Games | Tested by |",
"|--------|-------|-----------|",
]
# Two ids of one console (sega-megacd, mega-cd) share their list: one row.
rows: dict[tuple[str, str], set[str]] = {}
others: dict[tuple[str, str], set[str]] = {}
for item in cov["systems"]:
row = (_plain(names.get(item["system"], item["system"])),
", ".join(_plain(game["name"]) for game in item["games"]))
rows.setdefault(row, set()).update(e for game in item["games"] for e in game["emulators"])
others.setdefault(row, set()).update(item.get("other_games_by") or ())
for (name, games), by in rows.items():
if by:
status = ", ".join(_plain(e) for e in sorted(by))
elif others[(name, games)]:
status = ("not yet with these games, other games by "
+ ", ".join(_plain(e) for e in sorted(others[(name, games)])))
else:
status = "not yet: no run recorded"
lines.append(f"| {name} | {games} | {status} |")
lines.append("")
if cov["uncovered"]:
lines += ["Systems without a test game:", "",
"| System | Wanted | Why not | romfetch |",
"|--------|--------|---------|----------|"]
for item in cov["uncovered"]:
code = item["romfetch"].get("code") or "no source"
lines.append(f"| {_plain(names.get(item['system'], item['system']))} | {_plain(item['want'])} | "
f"{_plain(item['reason'])} | exit {_plain(item['romfetch'].get('exit'))}, "
f"{_code(code)} |")
lines.append("")
return lines
def region_results(root: Path, stored: list[mr.Stored], source: dict | None) -> list[dict]:
"""The region outcomes the records hold (region_check.py), each record
linked at the commit the explorer links."""
import region_check # noqa: PLC0415
lines = {s.record["id"]: s for s in stored}
results = region_check.collect(root, stored)
for result in results:
for item in result["variants"].values():
found = lines.get(item["record"])
item["url"] = (permalink(source["repo"], source["commit"], mr.records_path(found.emulator),
found.line)
if found and source and source.get("commit") else None)
return results
def site_region_results(root: Path = ROOT, repo: str = REPO) -> list[dict]:
"""region_results with the records and commit the explorer uses."""
stored = mr.read_records(root)
source = {"repo": repo, "commit": records_commit(root) if stored else None}
return region_results(root, stored, source)
REGION_SUBJECT = re.compile(r"^region-[a-z0-9_]+-[a-z0-9-]+-(full|own|others|pack)$")
VARIANT_WORDS = {"full": "every regional BIOS", "own": "its own region's BIOS only",
"others": "the other regions' BIOS only", "pack": "the region's pack"}
REGION_SHORT = {"japan": "Japanese", "north-america": "US", "europe": "European"}
OUTCOME_WORDS = {True: "boots", False: "does not boot", None: "no verdict"}
def core_region_line(results: list[dict]) -> str:
"""One core's outcome over its region games, in a sentence: each game
on its own BIOS, then on the other regions' BIOS."""
own = {r["own_boots"] for r in results}
others = {r["others_boot"] for r in results}
if own == {True} and others == {True}:
return "Each region's game boots on its own BIOS and on the other regions' BIOS."
if own == {True} and others == {False}:
return "Each region's game boots on its own BIOS only."
parts = [f"{REGION_SHORT.get(r['region'], r['region'])} game: {OUTCOME_WORDS[r['own_boots']]} "
f"on its BIOS, {OUTCOME_WORDS[r['others_boot']]} on the others" for r in results]
return ", ".join(parts) + "."
def region_section(results: list[dict], level: int = 3) -> list[str]:
"""What the region runs showed for one system: a line per core, the
games and their records in a fold."""
if not results:
return []
lines = ["#" * level + " Region check", "",
f"Each game ran with {VARIANT_WORDS['own']}, then with {VARIANT_WORDS['others']} "
f"([method](../{METHOD_PAGE})).", ""]
by_core: dict[str, list[dict]] = {}
for result in results:
by_core.setdefault(result["core"], []).append(result)
for core, items in by_core.items():
lines.append(f"- **{_plain(core)}**: {_plain(core_region_line(items))}")
lines.append("")
rows = []
for result in results:
links = ", ".join(_link(item.get("url"), _cell(VARIANT_WORDS[label]))
for label, item in result["variants"].items())
names = ", ".join(f"<code>{_cell(name)}</code>" for name in result["selected"])
read = (f" It reads {names} with every regional BIOS there "
f"({_cell(result['claim'])} against the profile)." if result["selected"] else "")
basis = ("" if result["judged_by"] == "verdict"
else " Judged against the run with every regional BIOS until reference frames are recorded.")
rows.append(f"<li><strong>{_cell(result['core'])}</strong>, {_cell(result['game'])}: "
f"{_cell(result['sentence'])}{read}{basis} Records: {links}.</li>")
# One line: MDX reads an HTML block split over lines as paragraphs.
lines += ['<details class="rb-region-runs"><summary>Each game and its records</summary><ul>'
+ "".join(rows) + "</ul></details>", ""]
return lines
# --------------------------------------------------------------------------
# SQLite
# --------------------------------------------------------------------------
@@ -294,7 +511,8 @@ SCHEMA_SQL = """
run_id TEXT NOT NULL REFERENCES runs(id), position INTEGER NOT NULL,
label TEXT NOT NULL, repetitions INTEGER NOT NULL, loaded INTEGER NOT NULL,
flags TEXT NOT NULL, observables TEXT NOT NULL, files_opened TEXT,
files_probed_absent TEXT, tracing TEXT, PRIMARY KEY (run_id, position)
files_probed_absent TEXT, tracing TEXT, verdict TEXT, verdict_evidence TEXT,
PRIMARY KEY (run_id, position)
);
CREATE TABLE system_files (
run_id TEXT NOT NULL REFERENCES runs(id), variant_position INTEGER NOT NULL,
@@ -405,11 +623,12 @@ def _insert_run(connection: sqlite3.Connection, entry: mr.Stored, source: dict,
# The first repetition stands for the variant, its per-frame hashes left out.
observables = {key: value for key, value in (first.get("observables") or {}).items()
if key not in BULKY_OBSERVABLES}
connection.execute("INSERT INTO variants VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (
connection.execute("INSERT INTO variants VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (
rid, position, variant["label"], len(reps), int(all(rep.get("loaded") for rep in reps)),
json_text(variant["flags"]), json_text(observables),
json_text(first.get("files_opened")), json_text(first.get("files_probed_absent")),
json_text(first.get("tracing"))))
json_text(first.get("tracing")), variant.get("verdict"),
json_text(variant.get("verdict_evidence")) if "verdict_evidence" in variant else None))
connection.executemany("INSERT INTO system_files VALUES (?, ?, ?, ?)", [
(rid, position, dest, sha1) for dest, sha1 in sorted(variant["system_files"].items())])
for metric, stats in sorted((r.get("timing") or {}).items()):
@@ -462,6 +681,7 @@ def build(public: Path, root: Path = ROOT, emulators_dir: Path = ROOT / "emulato
profiles = load_profiles(emulators_dir)
index = build_index(stored, source, profiles, system_names)
index["campaign"] = campaign_summary(root, stored, source)
index["coverage"] = coverage(root, stored, profiles)
paths = [public / INDEX_PATH]
(public / INDEX_PATH).parent.mkdir(parents=True, exist_ok=True)
write_if_changed(str(public / INDEX_PATH),
@@ -480,9 +700,14 @@ def build(public: Path, root: Path = ROOT, emulators_dir: Path = ROOT / "emulato
# --------------------------------------------------------------------------
def by_emulator(index: dict) -> dict[str, list[dict]]:
"""Each emulator's items, with the count of its findings still open."""
opened: dict[str, int] = {}
for line in (index.get("campaign") or {}).get("open") or ():
opened[line["emulator"]] = opened.get(line["emulator"], 0) + 1
out: dict[str, list[dict]] = {}
for item in index.get("items", []):
out.setdefault(item["emulator"], []).append(item)
out.setdefault(item["emulator"], []).append(
{**item, "open_findings": opened.get(item["emulator"], 0)})
return out
@@ -498,92 +723,418 @@ def _short(commit: str | None) -> str:
return f"`{commit[:12]}`" if commit else "unknown"
# A result the probe could not settle is the one a reader should not take
# at its word. The others describe what was seen, none of them is a fault.
_STATUS_BADGE = {"inconclusive": "warning"}
# A verdict or a comparison, as the block says it: words and a chip kind.
RESULT_WORDS = {
"boots": ("works", "success"),
"bios_error": ("BIOS error", "danger"),
"crash": ("crash", "danger"),
"hang": ("hang", "warning"),
"unknown": ("unknown", "muted"),
"mixed": ("depends on the file", "info"),
"same": ("same with every file", "muted"),
"differs": ("depends on the file", "info"),
"inconclusive": ("inconclusive", "warning"),
"no verdict": ("no verdict", "muted"),
"ran": ("ran", "muted"),
}
# Words a subject slug spells that read as one term.
TERMS = {"bios": "BIOS", "vcd": "Video CD", "cd": "CD", "jp": "JP", "us": "US", "eu": "EU",
"cr2": "CR2", "mpeg": "MPEG", "psx": "PSX", "hle": "HLE", "usa": "USA"}
# The campaign's own check names, as the block says them.
CHECK_NAMES = {"files": "full set", "none": "no BIOS", "negative": "wrong files",
"references": "reference run", "variants": "copies", "alias": "other name",
"path": "other path", "bench": "benchmark", "boot": "boot test", "alone": "file alone"}
def _computer(host: str) -> str:
"""The computer a host line names. The load average differs per run."""
return host.split(", load ")[0]
def _words(text: str) -> list[str]:
return re.findall(r"[a-z0-9]+", str(text or "").lower())
def _build(core: dict) -> str:
return f"{_text(core['library'])} at {_short(core['commit'])}" if core.get("commit") \
else _text(core["library"])
def short_content(label: str | None) -> str:
"""A content label cut to the game's name: no source prefix, no
edition, region or identity detail."""
text = str(label or "").strip()
if ":" in text.split("(")[0]:
text = text.split(":", 1)[1].strip()
for cut in (" - ", " (", ", "):
text = text.split(cut, 1)[0]
return text.strip()
def _shared(items: list[dict], value: Callable[[dict], str]) -> str | None:
"""The value every item gives, None when they differ."""
values = {value(item) for item in items}
return values.pop() if len(values) == 1 else None
def short_title(item: dict) -> str:
"""A test's name in a few words: the file it varies, the game, and what
the subject adds to them (a build, a region, a check of the campaign)."""
thing = Path(str(item.get("variable") or "")).name
game = short_content(item.get("content"))
known = set(_words(thing)) | set(_words(item.get("content"))) | set(_words(game))
known |= set(_words(Path(str((item.get("core") or {}).get("file") or "")).name.split("_libretro")[0]))
axis = []
for word in _words(item.get("subject")):
if word in known or re.fullmatch(r"[0-9a-f]{8}", word):
continue
issue = re.fullmatch(r"issue(\d+)", word)
word = f"issue {issue[1]}" if issue else CHECK_NAMES.get(word, TERMS.get(word, word))
if word not in axis:
axis.append(word)
head = ", ".join(part for part in (thing, game) if part)
title = f"{head} ({' '.join(axis)})" if axis and head else head or " ".join(axis)
return title or str(item.get("subject") or "")
def _plural(count: int, noun: str) -> str:
return f"{count} {noun}{'s' if count != 1 else ''}"
OBSERVABLE_WORDS = {"video_sha1": "video", "frame_hashes": "screens", "audio_sha1": "audio",
"state_sha1": "save state", "frame_sha1": "last frame"}
def tested_row(item: dict, shared_build: bool) -> siteentries.Row:
"""One test: its claim as the row, the result beside it, the method,
the load and the record when the row opens."""
title = item["claim"] or f"Benchmark of {item['content'] or 'the core alone'}"
runs = "1 run" if item["runs"] == 1 else f"{item['runs']} runs, the latest shown"
body = []
if item["statement"]:
body += [f"{_text(item['statement'])}.", ""]
if item.get("method"):
body += [f"**Method:** {_text(item['method'])}", ""]
load = item["host"].partition(", load ")[2]
counts = (f"{_plural(item['variants'], 'variant')}, "
f"{_plural(item['repetitions'], 'repetition')} each"
+ (f", {_plural(item['flags'], 'flag')} raised" if item["flags"] else "") + ".")
body += [f"**Ran:** {counts}" + (f" Load {_text(load)}." if load else "")
+ ("" if shared_build else f" Core build: {_build(item['core'])}."), ""]
body += [f"[Full record]({item['record_url']}), {runs}."]
tone = _STATUS_BADGE.get(item["status"], "muted")
result = f'<span class="rb-badge rb-badge-{tone}">{_text(item["status"])}</span>'
return siteentries.Row(_text(title), body, [_text(item["content"]), result])
def setup_of(record: dict) -> dict:
"""What told two runs of one test apart, each as the words a title
would use: the campaign check, the core build, the core options, the
clock, the number of files tried and what was compared."""
build = str(record["core"].get("build_command") or "")
patched = re.search(r"\b(patch|edit(?:ed|ing)?)\b", build, re.IGNORECASE)
named = re.search(r"\b([A-Z]+[0-9]+)\b", build) if patched else None
check = record.get("check") or {}
first = (_words(record["subject"]) or [""])[0]
options = {}
for key, value in sorted(record["inputs"].get("options", {}).items()):
options[key] = f"{value} region" if key.endswith("_region") else f"{key.rsplit('_', 1)[-1]} {value}"
observable = str(check.get("observable") or "")
return {
"check": CHECK_NAMES.get(first, ""),
"build": (f"{named[1]} patch" if named else "patched build") if patched else "published build",
"options": options,
"clock": "fixed clock" if "FAKETIME" in record["inputs"].get("env", {}) else "running clock",
"files": (f"{len(record['variants'])} file{'s' if len(record['variants']) != 1 else ''}"
if record["kind"] == "check" else ""),
"observable": (observable.split(":", 1)[1] if observable.startswith("state:")
else OBSERVABLE_WORDS.get(observable, observable)),
}
def _features(item: dict) -> dict[str, str]:
"""A test's setup as named features, the options one by one."""
setup = item.get("setup") or {}
out = {name: str(setup.get(name) or "") for name in ("build", "clock", "files", "observable")}
for key, value in (setup.get("options") or {}).items():
out[f"option:{key}"] = value
return out
def distinct_titles(items: list[dict]) -> dict[str, str]:
"""A title per item: its game and campaign check, then what sets it
apart from the other tests of the same file, game and core.
A test whose setup is the common one of its group is named by its game.
Another adds the features where it leaves the common setup (a patched
build, a running clock, another region). Two titles still alike take
every feature that varies in the group, then the subject's own words.
Nothing is cut.
"""
out: dict[str, str] = {}
peers: dict[tuple, list[dict]] = {}
for item in items:
game = short_content(item.get("content")) or short_title(item)
peers.setdefault((item.get("variable") or "", game, item["core"].get("file")), []).append(item)
for (_, game, _), group in peers.items():
features = [_features(item) for item in group]
names = sorted({name for f in features for name in f},
key=lambda n: (n.startswith("option:"), ["build", "clock", "files", "observable"].index(n)
if not n.startswith("option:") else 0, n))
common = {}
for name in names:
values = [f.get(name, "") for f in features]
ranked = sorted(set(values), key=lambda v: -values.count(v))
# A tie has no common value: every test names its own.
tied = len(ranked) > 1 and values.count(ranked[0]) == values.count(ranked[1])
common[name] = None if tied else ranked[0]
varying = [n for n in names if len({f.get(n, "") for f in features}) > 1]
def title(item: dict, own: dict[str, str], every: bool, varying: list[str] = varying,
common: dict[str, str] = common, game: str = game) -> str:
words = [(item.get("setup") or {}).get("check", "")]
for name in varying:
value = own.get(name, "")
if every or value != common[name]:
words.append(value or f"no {name.rsplit('_', 1)[-1]}")
return ", ".join([game, *[w for w in words if w]])
for item, own in zip(group, features):
out[item["id"]] = title(item, own, every=False)
for every in (True, None):
seen: dict[str, int] = {}
for item in group:
seen[out[item["id"]]] = seen.get(out[item["id"]], 0) + 1
for item, own in zip(group, features):
if seen[out[item["id"]]] > 1:
if every:
out[item["id"]] = title(item, own, every=True)
else:
axis = short_title({**item, "variable": None, "content": None})
out[item["id"]] = f"{out[item['id']]}, {axis}"
return out
def short_host(host: dict) -> str:
"""The computer as a reader names it: the CPU model and the OS."""
cpu = str(host.get("cpu_model") or "unknown CPU")
cpu = re.sub(r"\(R\)|\(TM\)|\bCPU\b|@.*$|^\d+(?:st|nd|rd|th) Gen ", "", cpu)
cpu = " ".join(cpu.split())
system = str(host.get("os") or "")
name = "Linux" if "Linux" in system else system.split("-")[0] or "unknown OS"
if "microsoft" in system.lower():
name += " (WSL2)"
return f"{cpu}, {name}"
def variant_groups(record: dict) -> list[dict]:
"""One entry per variant: the result group it falls in, and whether it
staged no file. A run that carries verdicts is grouped by verdict, a
comparison by the value its observable took."""
check = record.get("check") or {}
position: dict[str, int] = {}
result: dict[str, str] = {}
if all("verdict" in v for v in record["variants"]) and (
record["kind"] == "run" or check.get("observable") == "frame_hashes"):
for variant in record["variants"]:
position.setdefault(variant["verdict"], len(position))
result[variant["label"]] = RESULT_WORDS[variant["verdict"]][0]
groups = {v["label"]: position[v["verdict"]] for v in record["variants"]}
else:
groups = {}
for number, group in enumerate((check.get("result") or {}).get("groups") or ()):
for label in group["variants"]:
groups[label] = number
result[label] = f"result {chr(ord('A') + number % 26)}"
varied = check.get("variable")
return [{"variant": v["label"], "group": groups.get(v["label"], 0),
"result": result.get(v["label"], ""),
"absent": bool(varied) and varied in v["system_files"] and v["system_files"][varied] is None}
for v in record["variants"]]
def proves(record_id: str, profile: dict) -> list[str]:
"""The profile fields this record is evidence for, as `field of file`."""
out = []
for entry in profile.get("files") or ():
for name, ids in sorted((entry.get("evidence") or {}).items()):
if record_id in ids:
out.append(f"{name} of {entry.get('name')}")
return out
# An MDX page reads a brace as the start of an expression, in text and in
# an attribute alike.
_BRACES = str.maketrans({"{": "&#123;", "}": "&#125;"})
def _attr(value: object) -> str:
return html.escape(" ".join(str(value or "").split()), quote=True).translate(_BRACES)
def _cell(value: object) -> str:
"""Record text placed in raw HTML: escaped as text, never read as
Markdown (a run's output is no markup), braces made inert for MDX. A
semicolon joining two clauses ends a sentence, as on the rest of the
site."""
text = " ".join(str(value or "").split())
text = re.sub(r";\s+(\w)", lambda m: ". " + m[1].upper(), text)
return html.escape(text, quote=True).translate(_BRACES)
_SAFE_HREF = re.compile(r"^(?:https?://[^\s\"'<>]+|/[^\s\"'<>]*|\.{0,2}/?[\w.~-][^\s\"'<>:]*)$")
def _href(url: object) -> str | None:
"""A link target from a record: http(s) or relative only, else none."""
text = str(url or "")
return _attr(text) if text and _SAFE_HREF.match(text) and not text.lower().startswith(
("javascript:", "data:", "vbscript:")) else None
def _link(url: object, text: str) -> str:
target = _href(url)
return f'<a href="{target}">{text}</a>' if target else text
def _dots(item: dict) -> str:
groups = item.get("groups") or []
names = ". ".join(f"{g['variant']}: {g['result']}" for g in groups)
dots = "".join(
f'<span class="rb-dot rb-dot-{g["group"] % 5}{" rb-dot-empty" if g["absent"] else ""}" '
f'title="{_attr(g["variant"] + ": " + g["result"])}"></span>' for g in groups)
return (f'<span class="rb-dots" role="img" aria-label="{_attr(f"{len(groups)} variants. {names}")}">'
f"{dots}</span>")
def _chip(item: dict) -> str:
words, kind = RESULT_WORDS.get(item["status"], (item["status"], "muted"))
return f'<span class="rb-badge rb-badge-{kind}">{_cell(words)}</span>'
def _sentence_html(label: str, value: object, markup_ready: bool = False) -> str:
"""One line of the details, or nothing: an empty value is never printed."""
text = (str(value or "") if markup_ready else _cell(value)).strip().rstrip(".")
return f"<p><strong>{label}:</strong> {text}.</p>" if text else ""
def _details(item: dict) -> list[str]:
core = item["core"]
build = _cell(core["library"]) + (f" at <code>{_cell(core['commit'][:12])}</code>"
if core.get("commit") else "")
reps = f"{item['variants']} variant{'s' if item['variants'] != 1 else ''}, " \
f"{item['repetitions']} repetition{'s' if item['repetitions'] != 1 else ''} each"
if item["flags"]:
reps += f", {item['flags']} flag{'s' if item['flags'] != 1 else ''} raised"
runs = "" if item["runs"] == 1 else f", {item['runs']} runs, the latest shown"
lines = [
_sentence_html("Claim", item.get("claim")),
_sentence_html("Result", item.get("statement")),
_sentence_html("Method", item.get("method")),
_sentence_html("Proves", ", ".join(item.get("proves") or [])),
_sentence_html("Ran on", item.get("host_short") or item["host"]),
_sentence_html("Core build", build and f"{build}. {reps}", markup_ready=True),
f'<p>{_link(item["record_url"], "Full record")}{runs}.</p>',
]
return [line for line in lines if line]
def tested_counts(items: list[dict]) -> dict:
tests = [i for i in items if i["kind"] != "bench"]
return {"tests": len(items), "confirmed": sum(1 for i in items if i.get("proves")),
"open": max((i.get("open_findings", 0) for i in items), default=0),
"benchmarks": len(items) - len(tests),
"last": max((i["date"][:10] for i in items), default="")}
def core_label(item: dict) -> str:
return Path(str(item["core"].get("file") or "")).name.split("_libretro")[0]
def _row(item: dict, title: str, page_host: str, main_core: str) -> list[str]:
elsewhere = (item.get("host_short") or item["host"]) != page_host
title = _cell(title)
if core_label(item) != main_core:
title += f' <small>{_cell(core_label(item))}</small>'
return [
'<details class="rb-tested-row">',
("<summary>"
f'<span class="rb-tested-test">{title}</span>'
f'<span class="rb-tested-result">{_chip(item)}</span>'
f'<span class="rb-tested-variants">{_dots(item)}</span>'
f'<span class="rb-tested-date">{item["date"][:10]}'
+ (f' <small>{_attr(item.get("host_short"))}</small>' if elsewhere else "")
+ "</span></summary>"),
'<div class="rb-tested-more">',
*_details(item),
"</div>",
"</details>",
]
def by_file(items: list[dict]) -> list[tuple[str, list[dict]]]:
"""The items under the file each varies, in order of first appearance;
the runs that vary none last."""
groups: dict[str, list[dict]] = {}
for item in items:
groups.setdefault(Path(str(item.get("variable") or "")).name, []).append(item)
return sorted(groups.items(), key=lambda kv: kv[0] == "")
def folded(item: dict) -> bool:
"""A row the block folds away: a test from before the boot oracle, or a
run that recorded reference frames for the oracle, which a reviewer
reads and a visitor does not."""
return item["status"] == "no verdict" or str(item.get("subject") or "").startswith("references-")
def summary_line(items: list[dict], page_host: str) -> str:
"""N tests, the confirmed and open counts when there are any, the last
run and its computer."""
counts = tested_counts(items)
parts = [f"{counts['tests']} test{'s' if counts['tests'] != 1 else ''}"]
parts += [f"{counts[key]} {key}" for key in ("confirmed", "open") if counts[key]]
parts.append(f"last run {counts['last']} on {page_host}")
return " · ".join(parts) + "."
def tested_section(name: str, items: list[dict]) -> list[str]:
"""The Tested block of an emulator page, empty when nothing was recorded.
What every test shares is said once above the table."""
The answer first: one summary line, then the tests under the file each
one varies, a row per test with its result chip, a dot per variant and
its date. What proves it (method, claim, computer, core build, record)
waits in each row's details. Tests recorded before the boot oracle fold
under one line, and benchmarks get their own table at the end.
"""
if not items:
return []
computer = _shared(items, lambda i: _computer(i["host"]))
build = _shared(items, lambda i: _build(i["core"]))
content = _shared(items, lambda i: i["content"] or "")
day = _shared(items, lambda i: i["date"][:10])
context = []
if content:
context.append(f"Played: {_text(content)}.")
if build:
context.append(f"Core build: {build}.")
if computer:
context.append(f"Ran on {_text(computer)}" + (f", {day}." if day else "."))
elif day:
context.append(f"Ran on {day}.")
rows = [tested_row(item, build is not None)
for item in sorted(items, key=lambda i: (i["date"], i["subject"]), reverse=True)]
if content:
rows = [siteentries.Row(r.title, r.body, ["", r.cells[1]]) for r in rows]
return [
"## Tested",
"",
f"This emulator was run in real conditions by the [core probe](../{METHOD_PAGE}). "
f"Each test below is the latest of its kind. "
f"[All measurements](../{EXPLORER_PAGE}), "
f"[these records as SQLite](../downloads/measurements/{name}.sqlite).",
"",
*([" ".join(context), ""] if context else []),
*siteentries.entry_table(rows, ["Test", "Game", "Result"], f"rb-tested-{name}", "tests"),
]
hosts = [i.get("host_short") or i["host"] for i in items]
page_host = max(sorted(set(hosts)), key=hosts.count)
cores = [core_label(i) for i in items]
main_core = max(sorted(set(cores)), key=cores.count)
titles = distinct_titles(items)
links = (f'<a href="{markup.site_href(METHOD_PAGE.removesuffix(".md") + "/")}">How</a> · '
f'<a href="{markup.site_href(EXPLORER_PAGE.removesuffix(".md") + "/")}">All tests</a> · '
f'<a href="{markup.site_href(f"downloads/measurements/{name}.sqlite")}">SQLite</a>')
ordered = sorted(items, key=lambda i: (i["date"], i["subject"], core_label(i)), reverse=True)
benches = [i for i in ordered if i["kind"] == "bench"]
# The region runs (region_check.py) read as one outcome per game, on the
# system page: listed here they would be a row per run.
regional = [i for i in ordered if i["kind"] != "bench" and REGION_SUBJECT.match(i["subject"])]
ordered = [i for i in ordered if i not in regional]
earlier = [i for i in ordered if i["kind"] != "bench" and folded(i)]
current = [i for i in ordered if i["kind"] != "bench" and not folded(i)]
lines = ["## Tested", "", '<div class="rb-tested">',
f'<p class="rb-tested-summary">{_cell(summary_line(items, page_host))} {links}</p>']
if current or earlier:
lines.append('<div class="rb-tested-head" aria-hidden="true"><span>Test</span>'
"<span>Result</span><span>Variants</span><span>Date</span></div>")
for file, group in by_file(current):
label = f"<code>{_cell(file)}</code>" if file else "No file varied"
lines.append(f'<p class="rb-tested-file">{label}</p>')
for item in group:
lines += _row(item, titles[item["id"]], page_host, main_core)
if current:
lines.append('<p class="rb-tested-legend"><span class="rb-dot rb-dot-0"></span> A dot per file tried, '
'the same colour for the same result. <span class="rb-dot rb-dot-0 rb-dot-empty">'
"</span> No file staged.</p>")
if earlier:
old = sum(1 for i in earlier if i["status"] == "no verdict")
parts = [f"{old} test{'s' if old != 1 else ''} from before the boot oracle" if old else "",
(f"{len(earlier) - old} reference run{'s' if len(earlier) - old != 1 else ''}"
if len(earlier) - old else "")]
lines += ['<details class="rb-tested-earlier">',
f"<summary>{_cell(' and '.join(p for p in parts if p))}</summary>"]
for item in earlier:
file = Path(str(item.get("variable") or "")).name
title = f"{file}, {titles[item['id']]}" if file else titles[item["id"]]
lines += _row(item, title, page_host, main_core)
lines.append("</details>")
if regional:
games = len({i["content"] for i in regional})
lines.append(f'<p class="rb-tested-file">Region check: {len(regional)} runs of '
f"{games} game{'s' if games != 1 else ''}, read on the system page.</p>")
if benches:
# One line: MDX reads a table split over lines as paragraphs.
table = ['<table class="rb-tested-bench"><thead><tr><th>Benchmark</th><th>ms per frame</th>'
"<th>fps</th><th>stdev</th><th>runs</th></tr></thead><tbody>"]
for item in benches:
timing = item.get("timing") or {}
title = _cell(titles[item["id"]])
if core_label(item) != main_core:
title += f' <small>{_cell(core_label(item))}</small>'
table.append(
f'<tr><td>{_link(item["record_url"], title)}</td>'
f'<td>{timing.get("ms_per_frame", 0):.3f}</td><td>{timing.get("fps", 0):.1f}</td>'
f'<td>{timing.get("stdev", 0):.3f}</td><td>{item["repetitions"]}</td></tr>')
lines.append("".join([*table, "</tbody></table>"]))
return [*lines, "</div>", ""]
def hosts_table(index: dict) -> list[str]:
hosts: dict[str, int] = {}
for item in index.get("items", []):
computer = _computer(item["host"])
# The load average differs per run: the computer is what comes before it.
computer = item["host"].split(", load ")[0]
hosts[computer] = hosts.get(computer, 0) + 1
if not hosts:
return ["No result is recorded yet.", ""]
@@ -600,7 +1151,7 @@ def with_hosts(page: str, index: dict) -> str:
return page.replace(HOSTS_MARKER, "\n".join(hosts_table(index)).rstrip("\n"))
def generate_explorer_page(index: dict) -> str:
def generate_explorer_page(index: dict, system_names: dict[str, str] | None = None) -> str:
commit = index.get("commit")
repo = index.get("repo") or ""
source = (f"[`measurements/`]({repo}/tree/{commit}/{mr.RECORDS_DIR}) at {_short(commit)}"
@@ -623,6 +1174,7 @@ def generate_explorer_page(index: dict) -> str:
"<MeasurementsExplorer />",
"",
*campaign_section(index.get("campaign")),
*coverage_section(index.get("coverage"), system_names),
])
+714
View File
@@ -0,0 +1,714 @@
#!/usr/bin/env python3
"""Run a platform's standalone emulator on a game and record what it did.
The libretro counterpart is core_probe.py: this script records the same way,
in the same measurements/<emulator>.jsonl, for the release binaries the
platforms install beside RetroArch.
resolve the release asset a platform's installer picks, by its own rule
fetch download it into .cache/standalone/, by sha256
run one execution, printed as JSON
check the same execution under several variants of one BIOS file
The binary is the asset the platform downloads, unpacked from its AppImage
without running it. Each repetition starts a private Xvfb, runs the emulator
in core_probe's allowlist sandbox under strace, and samples the screen at a
fixed interval from the X server's framebuffer file. The BIOS files are
staged in a directory the emulator's settings name as its BIOS folder, the
way the platform configures it, and the files it opened there come from
strace.
The verdict of a repetition is one of boots, bios_error, crash, hang or
unknown, by the oracle's rules: a reference screen reached, an error string
of the emulator in its log, the process dying, a uniform screen to the end.
"""
from __future__ import annotations
import argparse
import contextlib
import datetime as dt
import hashlib
import json
import os
import re
import shutil
import signal
import struct
import subprocess
import sys
import tempfile
import threading
import time
import urllib.request
from collections.abc import Sequence
from dataclasses import dataclass, field
from pathlib import Path
from typing import IO
sys.path.insert(0, str(Path(__file__).resolve().parent))
import core_probe as cp
ROOT = Path(__file__).resolve().parent.parent
CACHE = ROOT / ".cache" / "standalone"
DEFAULT_WORK_DIR = ROOT / "tmp" / "standalone_probe"
RECORD_VERSION = 4
SCREEN = (1280, 720)
OBSERVABLES = ("verdict", "screens", "frame_hashes", "uniform_frames")
SCRIPT = "scripts/standalone_probe.py"
# --------------------------------------------------------------------------
# What each emulator is, how the platform installs it, how it is driven
# --------------------------------------------------------------------------
@dataclass(frozen=True)
class Emulator:
"""A standalone emulator as one platform installs it.
`asset_*` reproduce the installer's choice: EmuDeck's getReleaseURLGH
takes the first asset, over GitHub's release list in its own order
(pre-releases included), whose name contains `asset_contains` and ends
with `asset_endswith`.
"""
name: str
platform: str
installer_ref: str
repo: str
asset_endswith: str
asset_contains: str
binary: str
settings_file: str
error_patterns: tuple[str, ...]
settings: dict[str, dict[str, str]] = field(default_factory=dict)
bios_setting: tuple[str, str] = ("", "")
args: tuple[str, ...] = ()
EMULATORS: dict[str, Emulator] = {
"duckstation": Emulator(
name="duckstation",
platform="emudeck",
installer_ref="dragoonDorise/EmuDeck functions/EmuScripts/emuDeckDuckStation.sh "
"(getReleaseURLGH \"stenzek/duckstation\" \"AppImage\" \"x64.\")",
repo="stenzek/duckstation",
asset_endswith="AppImage",
asset_contains="x64.",
binary="usr/bin/duckstation-qt",
# Core::SetDataRoot (src/core/core.cpp): $XDG_CONFIG_HOME/duckstation on Linux.
settings_file="data/duckstation/settings.ini",
bios_setting=("BIOS", "SearchDirectory"),
settings={
"Main": {"SetupWizardIncomplete": "false", "ConfirmPowerOff": "false",
"StartFullscreen": "true"},
"AutoUpdater": {"CheckAtStartup": "false"},
"GPU": {"Renderer": "Software"},
# No sound device in the sandbox: the null backend, not an error dialog.
"Audio": {"Backend": "Null"},
"Logging": {"LogLevel": "Info", "LogToConsole": "true", "LogToFile": "false"},
"Console": {"Region": "Auto"},
},
args=("-batch", "-nogui", "-fullscreen", "--"),
# Strings of src/core/bios.cpp and src/core/system.cpp, as the
# release binary carries them.
error_patterns=("No BIOS image found for", "No BIOS images found",
"No BIOS images were found", "Failed to open BIOS"),
),
"pcsx2": Emulator(
name="pcsx2",
platform="emudeck",
installer_ref="dragoonDorise/EmuDeck functions/EmuScripts/emuDeckPCSX2QT.sh "
"(getReleaseURLGH \"PCSX2/pcsx2\" \"Qt.AppImage\" \"\")",
repo="PCSX2/pcsx2",
asset_endswith="Qt.AppImage",
asset_contains="",
binary="usr/bin/pcsx2-qt",
# EmuFolders::SetDataDirectory (pcsx2/Pcsx2Config.cpp): $XDG_CONFIG_HOME/PCSX2 on Linux,
# its settings in inis/.
settings_file="data/PCSX2/inis/PCSX2.ini",
bios_setting=("Folders", "Bios"),
settings={
# SETTINGS_VERSION of pcsx2/VMManager.cpp: another value resets every setting.
"UI": {"SettingsVersion": "1", "SetupWizardIncomplete": "false", "ConfirmShutdown": "false",
"StartFullscreen": "true"},
"AutoUpdater": {"CheckAtStartup": "false"},
# GSRendererType::SW
"EmuCore/GS": {"Renderer": "13"},
# No sound device in the sandbox: the null backend, not an error dialog
# over the screen.
"SPU2/Output": {"Backend": "Null"},
"Logging": {"EnableSystemConsole": "true", "EnableVerbose": "false"},
},
args=("-batch", "-nogui", "-fullscreen", "-earlyconsolelog", "--"),
error_patterns=("requires a PlayStation 2 BIOS in order to run",
"Unable to auto locate a BIOS image", "BIOS image has not been selected",
"could not be read (permission denied?)"),
),
}
# --------------------------------------------------------------------------
# Pure helpers
# --------------------------------------------------------------------------
def select_asset(releases: Sequence[dict], endswith: str, contains: str) -> dict | None:
"""The asset EmuDeck's getReleaseURLGH returns: the first, over the
releases in the API's order, whose name contains and ends as asked."""
for release in releases:
for asset in release.get("assets") or ():
name = asset.get("name", "")
if contains in name and name.endswith(endswith):
return {"tag": release.get("tag_name"), "name": name,
"url": asset.get("browser_download_url"),
"prerelease": bool(release.get("prerelease"))}
return None
def appimage_offset(head: bytes) -> int:
"""Where an AppImage's squashfs starts: the end of its ELF runtime,
read from the section header table, as the runtime computes it."""
if head[:4] != b"\x7fELF":
raise cp.ProbeError("not an ELF file, not an AppImage")
if head[4] == 2:
shoff = struct.unpack_from("<Q", head, 0x28)[0]
shentsize, shnum = struct.unpack_from("<HH", head, 0x3A)
else:
shoff = struct.unpack_from("<I", head, 0x20)[0]
shentsize, shnum = struct.unpack_from("<HH", head, 0x2E)
return shoff + shentsize * shnum
def ini_text(sections: dict[str, dict[str, str]]) -> str:
out = []
for section, values in sections.items():
out.append(f"[{section}]")
out.extend(f"{key} = {value}" for key, value in values.items())
out.append("")
return "\n".join(out)
def emulator_settings(emu: Emulator, bios_dir: Path, overrides: Sequence[tuple[str, str]]
) -> dict[str, dict[str, str]]:
"""The settings written before a run: the emulator's own, the BIOS
folder, then each SECTION.KEY=VALUE override."""
sections = {name: dict(values) for name, values in emu.settings.items()}
section, key = emu.bios_setting
sections.setdefault(section, {})[key] = str(bios_dir)
for name, value in overrides:
sec, _, k = name.rpartition(".")
if not sec or not k:
raise cp.ProbeError(f"--setting {name}: SECTION.KEY expected")
sections.setdefault(sec, {})[k] = value
return sections
def parse_xwd(data: bytes) -> tuple[int, int, bytes]:
"""Width, height and RGB pixels of an XWD image, the file Xvfb keeps
its screen in: 32 bits per pixel, least significant byte first."""
if len(data) < 100:
raise cp.ProbeError("framebuffer file shorter than an XWD header")
fields = struct.unpack_from(">25I", data, 0)
header_size, version = fields[0], fields[1]
width, height = fields[4], fields[5]
byte_order, bits_per_pixel, bytes_per_line, ncolors = fields[7], fields[11], fields[12], fields[19]
if version != 7 or bits_per_pixel != 32 or byte_order != 0:
raise cp.ProbeError(f"XWD version {version}, {bits_per_pixel} bpp, byte order "
f"{byte_order}: only version 7, 32 bpp, LSB first are read")
start = header_size + ncolors * 12
rows = [data[start + y * bytes_per_line:start + y * bytes_per_line + width * 4] for y in range(height)]
packed = b"".join(rows)
if len(packed) != width * height * 4:
raise cp.ProbeError("framebuffer file shorter than its header says")
return width, height, cp.to_rgb(1, width, height, packed)
# --------------------------------------------------------------------------
# Release binaries
# --------------------------------------------------------------------------
def github_releases(repo: str) -> list[dict]:
from scraper.base_scraper import github_headers # noqa: PLC0415
request = urllib.request.Request(f"https://api.github.com/repos/{repo}/releases",
headers=github_headers())
with urllib.request.urlopen(request, timeout=60) as response:
return json.load(response)
def fetch(emu: Emulator, cache: Path = CACHE) -> dict:
"""Download the asset the platform picks, unpack it, and describe it."""
asset = select_asset(github_releases(emu.repo), emu.asset_endswith, emu.asset_contains)
if not asset:
raise cp.ProbeError(f"{emu.repo}: no release asset matches the {emu.platform} rule")
folder = cache / emu.name
folder.mkdir(parents=True, exist_ok=True)
partial = folder / f"{asset['name']}.part"
with urllib.request.urlopen(asset["url"], timeout=600) as response, partial.open("wb") as out:
shutil.copyfileobj(response, out)
sha256 = cp.file_digest(partial, "sha256")
target = folder / sha256 / asset["name"]
target.parent.mkdir(parents=True, exist_ok=True)
partial.replace(target)
unpack(target)
meta = {**asset, "sha256": sha256, "repo": emu.repo, "platform": emu.platform,
"installer_ref": emu.installer_ref, "fetched_at": now_iso()}
(target.parent / "asset.json").write_text(json.dumps(meta, indent=2), encoding="utf-8")
return meta
def unpack(appimage: Path) -> Path:
"""The AppImage's tree, unpacked with unsquashfs: the runtime is never run."""
tree = appimage.parent / "tree"
if tree.is_dir():
return tree
unsquashfs = shutil.which("unsquashfs")
if not unsquashfs:
raise cp.ProbeError("unsquashfs not found (squashfs-tools)")
with appimage.open("rb") as handle:
offset = appimage_offset(handle.read(64))
scratch = appimage.parent / "tree.part"
shutil.rmtree(scratch, ignore_errors=True)
subprocess.run([unsquashfs, "-q", "-n", "-o", str(offset), "-d", str(scratch), str(appimage)],
check=True, stdout=subprocess.DEVNULL)
scratch.replace(tree)
return tree
def installed(emu: Emulator, sha256: str | None, cache: Path = CACHE) -> tuple[dict, Path]:
"""The fetched asset to run: the one named by sha256, else the newest."""
folder = cache / emu.name
metas = sorted(folder.glob("*/asset.json"), key=lambda p: p.stat().st_mtime, reverse=True)
for path in metas:
meta = json.loads(path.read_text(encoding="utf-8"))
if sha256 in (None, meta["sha256"]):
return meta, unpack(path.parent / meta["name"])
raise cp.ProbeError(f"{emu.name}: no fetched asset{' ' + sha256 if sha256 else ''}, "
f"run `standalone_probe.py fetch {emu.name}`")
# --------------------------------------------------------------------------
# One repetition
# --------------------------------------------------------------------------
def now_iso() -> str:
return dt.datetime.now(dt.timezone.utc).replace(microsecond=0).isoformat()
# The X server runs inside the sandbox, on the sandbox's own /tmp: the
# display is private to the run, and the host's /tmp/.X11-unix (read-only
# under WSLg) is never touched. Its fbdir option keeps the screen as an XWD
# file in the run's scratch folder, which the probe reads from outside.
DISPLAY_NUMBER = 1
XVFB_WRAPPER = (
f'Xvfb ":{DISPLAY_NUMBER}" -screen 0 {SCREEN[0]}x{SCREEN[1]}x24 -nolisten tcp -fbdir "$1" '
'-noreset >/dev/null 2>&1 &\n'
'i=0\n'
f'while [ ! -S /tmp/.X11-unix/X{DISPLAY_NUMBER} ]; do\n'
' i=$((i + 1)); [ "$i" -gt 400 ] && exit 97; sleep 0.05\n'
'done\n'
'shift\n'
'exec "$@"\n'
)
def with_display(argv: list[str], fbdir: Path) -> list[str]:
"""The emulator's command, started once the sandbox's Xvfb listens."""
return ["/bin/sh", "-c", XVFB_WRAPPER, "xvfb", str(fbdir), *argv]
def stop(proc: subprocess.Popen) -> None:
if proc.poll() is None:
with contextlib.suppress(ProcessLookupError):
os.killpg(proc.pid, signal.SIGKILL)
proc.wait()
ANSI = re.compile(r"\x1b\[[0-9;]*[A-Za-z]")
def read_lines(stream: IO[bytes], out: list[dict], samples: list) -> None:
"""The emulator's console, line by line, each with the sample count
reached when it was written, colour escapes removed."""
for raw in iter(stream.readline, b""):
text = ANSI.sub("", raw.decode("utf-8", errors="replace")).rstrip()
if text:
out.append({"frame": len(samples), "level": "info", "text": text})
def run_once(args: argparse.Namespace, emu: Emulator, tree: Path, system_dir: Path, scratch: Path,
png_dir: Path | None) -> dict:
home = scratch / "home"
data = scratch / "data"
for folder in (home, data):
folder.mkdir(parents=True, exist_ok=True)
settings = emulator_settings(emu, system_dir.resolve(), args.setting)
settings_path = scratch / emu.settings_file
settings_path.parent.mkdir(parents=True, exist_ok=True)
settings_path.write_text(ini_text(settings), encoding="utf-8")
content = Path(args.content).resolve()
argv = [str(tree / emu.binary)] + [a.format(data=data.resolve()) for a in emu.args] + [str(content)]
trace = scratch / "strace.txt"
strace = shutil.which("strace") if not args.no_trace else None
if strace:
argv = [strace, "-f", "-qq", "-s", "4096", "-e", "trace=openat,open", "-o", str(trace)] + argv
samples: list[tuple[float, str, bool]] = []
logs: list[dict] = []
if not shutil.which("Xvfb"):
raise cp.ProbeError("Xvfb not found")
fbdir = scratch / "fb"
fbdir.mkdir(parents=True, exist_ok=True)
screen_file = fbdir / "Xvfb_screen0"
env = {"HOME": str(home.resolve()), "XDG_CONFIG_HOME": str(data.resolve()),
"XDG_DATA_HOME": str(data.resolve()), "XDG_CACHE_HOME": str((home / ".cache").resolve()),
"DISPLAY": f":{DISPLAY_NUMBER}", "QT_QPA_PLATFORM": "xcb", "LIBGL_ALWAYS_SOFTWARE": "1",
"PATH": "/usr/bin:/bin", "LANG": "C.UTF-8"}
# The BIOS folder is writable, as the platform's is: PCSX2 creates its
# NVRAM and MEC files there.
prefix, isolation = cp.sandbox_argv([scratch, system_dir], [tree, content.parent])
if args.require_sandbox and isolation != cp.SANDBOX:
raise cp.ProbeError(f"refused to run the emulator outside a sandbox: {isolation}")
proc = subprocess.Popen(prefix + with_display(argv, fbdir.resolve()), stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, env=env, start_new_session=True)
reader = threading.Thread(target=read_lines, args=(proc.stdout, logs, samples), daemon=True)
reader.start()
try:
deadline = time.monotonic() + 30
while not screen_file.exists():
if proc.poll() is not None or time.monotonic() > deadline:
raise cp.ProbeError(f"Xvfb did not start in the sandbox (exit {proc.poll()}): "
f"{' / '.join(line['text'] for line in logs[-5:])}")
time.sleep(0.05)
started = time.monotonic()
ended = None
for index in range(args.samples):
target = started + (index + 1) * args.interval
while time.monotonic() < target and proc.poll() is None:
time.sleep(min(0.05, max(0.0, target - time.monotonic())))
if proc.poll() is not None:
code = proc.returncode
ended = {"status": code if code >= 0 else None,
"signal": signal.Signals(-code).name if code < 0 else None}
break
width, height, rgb = parse_xwd(screen_file.read_bytes())
sha1 = hashlib.sha1(rgb).hexdigest()
samples.append((round(time.monotonic() - started, 3), sha1, cp.uniform_frame(rgb, 3)))
if png_dir and not any(p.name.endswith(f"{sha1[:12]}.png") for p in png_dir.iterdir()):
(png_dir / f"{index:04d}-{sha1[:12]}.png").write_bytes(cp.png_bytes(width, height, rgb))
wall = time.monotonic() - started
finally:
stop(proc)
reader.join(5)
places = [(str(system_dir.resolve()), "<bios>"), (str(scratch.resolve()), "<scratch>"),
(str(content.parent), "<content>"), (str(tree), "<emulator>"), (str(ROOT), "<repo>")]
for line in logs:
line["text"] = cp.host_paths_hidden(line["text"], places)
rep: dict = {
"loaded": ended is None,
"library_name": emu.name,
"frames": max(len(samples), 1),
"wall_s": round(wall, 3),
"sample_interval_s": args.interval,
"sample_times_s": [t for t, _, _ in samples],
# The shapes core_probe gives them: [sample, sha1] pairs, and the
# digests of the samples that are one colour.
"observables": {
"frame_hashes": [[index, h] for index, (_, h, _) in enumerate(samples)],
"uniform_frames": sorted({h for _, h, u in samples if u}),
"screens": sorted({h for _, h, u in samples if not u}),
},
"logs": logs,
"isolation": isolation,
}
if ended:
rep["exit"] = ended
if strace and trace.is_file():
opened, probed = cp.files_under(cp.parse_strace(trace.read_text(encoding="utf-8", errors="replace")),
system_dir)
rep["files_opened"] = [{"path": rel, "sha1_after": cp.file_digest(system_dir / rel)}
for rel in opened if (system_dir / rel).is_file()]
rep["files_probed_absent"] = probed
rep["tracing"] = "strace"
else:
rep["files_opened"] = None
rep["files_probed_absent"] = None
rep["tracing"] = "disabled: --no-trace" if args.no_trace else "unavailable: strace not found"
return rep
# --------------------------------------------------------------------------
# Variants and the record
# --------------------------------------------------------------------------
def run_variant(args: argparse.Namespace, emu: Emulator, tree: Path, oracle: dict,
base: dict[str, Path], variant: cp.Variant, work: Path, repetitions: int) -> dict:
reps: list[dict] = []
flags: list[str] = []
for index in range(repetitions):
# A fresh BIOS folder each time: PCSX2 writes its NVRAM and MEC files
# beside the BIOS, as on a user's folder, and a repetition must not
# start from what the last one wrote.
system_dir = work / f"bios{index}"
staged = cp.stage_system_dir(base, variant, system_dir)
png_dir = None
if args.png_dir and index == 0:
png_dir = Path(args.png_dir) / variant.label
png_dir.mkdir(parents=True, exist_ok=True)
rep = run_once(args, emu, tree, system_dir, work / f"rep{index}", png_dir)
rep["verdict"], rep["verdict_evidence"] = cp.judge(rep, oracle)
rep["observables"]["verdict"] = rep["verdict"]
for entry in rep.get("files_opened") or []:
expected = staged.get(entry["path"])
entry["sha1_staged"] = expected
if expected is not None and expected != entry["sha1_after"]:
flags.append(f"repetition {index}: {entry['path']} sha1 changed during the run")
reps.append(rep)
verdict, evidence = cp.variant_verdict(reps)
return {"label": variant.label, "system_files": dict(sorted(staged.items())), "repetitions": reps,
"flags": flags, "verdict": verdict, "verdict_evidence": evidence}
def frontend_identity() -> dict:
script = Path(__file__).resolve()
commit = dirty = None
try:
commit = subprocess.run(["git", "rev-parse", "HEAD"], cwd=ROOT, capture_output=True, text=True,
check=True).stdout.strip()
dirty = bool(subprocess.run(["git", "status", "--porcelain", "--", str(script)], cwd=ROOT,
capture_output=True, text=True, check=True).stdout.strip())
except (OSError, subprocess.CalledProcessError) as exc:
print(f"WARNING: frontend commit unknown, git failed: {exc}", file=sys.stderr)
return {"script": SCRIPT, "commit": commit, "script_modified": dirty,
"script_sha256": cp.file_digest(script, "sha256")}
def emulator_oracle(emu: Emulator, path: Path, content_sha1: str) -> dict:
"""The oracle core_probe reads (tests/campaign/oracle.yml), looked up by
the content's sha1 and the emulator's name, with the emulator's own
error strings of this script added as patterns. Without the file the
oracle names this script, which then holds every pattern."""
data, identity = cp.load_oracle(path)
entries = cp.oracle_for(data, content_sha1, emu.name)
own = [re.escape(text) for text in emu.error_patterns]
entries["error_patterns"] = list(dict.fromkeys(entries["error_patterns"] + own))
if identity is None:
identity = {"file": SCRIPT, "sha256": cp.file_digest(Path(__file__).resolve(), "sha256")}
return {**identity, **entries}
def check_result(variants: list[dict], observable: str) -> dict:
"""core_probe's comparison, with each variant's verdict beside it."""
return {**cp.check_result(variants, observable),
"verdicts": {v["label"]: v["verdict"] for v in variants}}
def probe(args: argparse.Namespace) -> int:
emu = EMULATORS[args.emulator]
problems = validate(args)
if problems:
for problem in problems:
print(f"ERROR: {problem}", file=sys.stderr)
return 2
# One run on the host at a time, as core_probe: the lock is held for
# this run, its load check included, and freed when it ends.
with cp.host_probe_lock():
return _probe(args, emu)
def _probe(args: argparse.Namespace, emu: Emulator) -> int:
meta, tree = installed(emu, args.sha256)
max_load = args.max_load if args.max_load is not None else (os.cpu_count() or 1) / 4
load_before = cp.load_average()
if args.record and load_before and load_before[0] > max_load:
print(f"ERROR: load average {load_before[0]} exceeds {max_load}: the machine is busy, "
f"nothing recorded", file=sys.stderr)
return 3
oracle = emulator_oracle(emu, Path(args.oracle) if args.oracle else cp.DEFAULT_ORACLE,
cp.file_digest(Path(args.content)))
repetitions = 1 if args.mode == "run" else args.repeat
base = {dest: Path(src) for dest, src in args.bios_file}
if args.mode == "check":
variants_in = []
seen: set[str] = set()
for dest, src in args.vary:
label = Path(src).name if src else f"{dest}-absent"
while label in seen:
label += "+"
seen.add(label)
variants_in.append(cp.Variant(label, {dest: Path(src) if src else None}))
else:
variants_in = [cp.Variant("default")]
work = Path(tempfile.mkdtemp(prefix=f"{args.mode}-", dir=cp._ensure(Path(args.work_dir))))
try:
variants = [run_variant(args, emu, tree, oracle, base, variant, work / f"v{i}", repetitions)
for i, variant in enumerate(variants_in)]
except (cp.ProbeError, OSError, subprocess.SubprocessError) as exc:
print(f"ERROR: {exc}", file=sys.stderr)
return 1
finally:
shutil.rmtree(work, ignore_errors=True)
load_after = cp.load_average()
record: dict = {
"record_version": RECORD_VERSION,
"emulator": emu.name,
"subject": None,
"supersedes": args.supersedes,
"kind": args.mode,
"recorded_at": now_iso(),
"core": {"file": meta["name"], "sha256": meta["sha256"], "repo": f"https://github.com/{meta['repo']}",
"commit": None, "build_command": None, "compiler": None, "library_name": emu.name,
"library_version": meta["tag"], "artifact": meta["url"]},
"frontend": frontend_identity(),
"host": {**cp.host_identity(), "load_before": load_before, "load_after": load_after,
"max_load": max_load},
"inputs": {
"content": cp.content_identity(Path(args.content), args.content_label),
"options": {f"{s}.{k}": v for s, values in
emulator_settings(emu, Path("<bios>"), args.setting).items() for k, v in values.items()},
"env": {},
"frames": args.samples,
"warmup": 0,
"repetitions": repetitions,
"presses": [],
"observables": list(OBSERVABLES),
"frame_hash_every": 1,
"joypad_ports": 0,
"oracle": oracle,
},
"variants": variants,
"flags": [f"{v['label']}: {flag}" for v in variants for flag in v["flags"]],
}
if load_before and load_after and max(load_before[0], load_after[0]) > max_load:
record["flags"].append(f"load average reached {max(load_before[0], load_after[0])} "
f"(threshold {max_load})")
if args.mode == "check":
record["check"] = {"claim": args.claim, "method": args.method, "observable": args.observable,
"variable": args.vary[0][0], "result": check_result(variants, args.observable)}
from measurement_records import canonical, sha256_hex, slugify
if args.subject:
record["subject"] = args.subject
elif args.mode == "check":
digest = sha256_hex(canonical([args.claim, args.method, args.observable, args.vary[0][0]]))[:8]
record["subject"] = f"{slugify(args.claim)}-{digest}"
else:
digest = sha256_hex(canonical([meta["sha256"], record["inputs"]["content"],
record["inputs"]["options"], args.bios_file]))[:8]
record["subject"] = f"run-{slugify(args.content_label or Path(args.content).name, 30)}-{digest}"
if args.record:
try:
lines, record = cp.write_record(Path(args.record), record)
except cp.ProbeError as exc:
print(f"ERROR: {exc}", file=sys.stderr)
return 2
print(f"recorded {lines}", file=sys.stderr)
print(json.dumps(record, indent=2))
return 0
def validate(args: argparse.Namespace) -> list[str]:
problems = []
if not Path(args.content).is_file():
problems.append(f"--content {args.content}: not a file")
for dest, src in args.bios_file:
if not Path(src).is_file():
problems.append(f"--bios-file {dest}={src}: not a file")
if args.oracle and not Path(args.oracle).is_file():
problems.append(f"--oracle {args.oracle}: not a file")
if args.samples < 2 or args.interval <= 0:
problems.append("--samples must be >= 2 and --interval > 0")
if args.require_sandbox:
isolation = cp.sandbox_argv([])[1]
if isolation != cp.SANDBOX:
problems.append(f"--require-sandbox: {isolation}")
if args.record:
wrong = cp.not_a_checkout_root(Path(args.record))
if wrong:
problems.append(wrong)
if args.subject and not re.fullmatch(r"[a-z0-9]+(?:[-_][a-z0-9]+)*", args.subject):
problems.append(f"--subject {args.subject!r}: lowercase letters, digits, - and _ only")
if args.mode == "check":
if len({dest for dest, _ in args.vary}) != 1:
problems.append("--vary must name the same DEST in every occurrence")
for dest, src in args.vary:
if src and not Path(src).is_file():
problems.append(f"--vary {dest}={src}: not a file")
if args.observable not in OBSERVABLES:
problems.append(f"--observable {args.observable}: not one of {', '.join(OBSERVABLES)}")
return problems
# --------------------------------------------------------------------------
# Command line
# --------------------------------------------------------------------------
def build_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(allow_abbrev=False, description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
sub = parser.add_subparsers(dest="mode", required=True)
for name, text in (("resolve", "print the asset the platform's installer picks"),
("fetch", "download and unpack it into .cache/standalone/")):
p = sub.add_parser(name, help=text)
p.add_argument("emulator", choices=sorted(EMULATORS), help="the emulator, by its profile name")
common = argparse.ArgumentParser(add_help=False, allow_abbrev=False)
common.add_argument("emulator", choices=sorted(EMULATORS), help="the emulator, by its profile name")
common.add_argument("--content", required=True, help="the game: a .cue, .iso or .chd")
common.add_argument("--content-label", help="identity of the content, its Redump or No-Intro name")
common.add_argument("--bios-file", action="append", default=[], metavar="DEST=SRC",
type=lambda t: cp.parse_assignment(t, "--bios-file"),
help="copy SRC into the staged BIOS folder as DEST")
common.add_argument("--setting", action="append", default=[], metavar="SECTION.KEY=VALUE",
type=lambda t: cp.parse_assignment(t, "--setting"),
help="an emulator setting written before the run")
common.add_argument("--sha256", help="the fetched asset to run (default: the newest fetched)")
common.add_argument("--samples", type=int, default=60, help="screen samples per repetition")
common.add_argument("--interval", type=float, default=1.0, help="seconds between two samples")
common.add_argument("--oracle", metavar="FILE",
help="the boot oracle (default: tests/campaign/oracle.yml, as core_probe)")
common.add_argument("--png-dir", help="write each distinct sampled screen of repetition 0 as PNG")
common.add_argument("--record", metavar="DIR", nargs="?", const=str(ROOT),
help="append the record to measurements/<emulator>.jsonl in the checkout DIR")
common.add_argument("--subject", help="slug naming what the record tests")
common.add_argument("--supersedes", metavar="ID", help="id of an earlier record this one corrects")
common.add_argument("--max-load", type=float, default=None,
help="refuse to record above this 1-minute load average (default: CPUs / 4)")
common.add_argument("--work-dir", default=str(DEFAULT_WORK_DIR), help="scratch directory")
common.add_argument("--no-trace", action="store_true", help="do not run under strace")
common.add_argument("--require-sandbox", action="store_true",
help="refuse to run unless bubblewrap can isolate the emulator")
sub.add_parser("run", parents=[common], help="one execution")
check = sub.add_parser("check", parents=[common], help="compare variants of one BIOS file")
check.add_argument("--vary", action="append", required=True, metavar="DEST=SRC",
type=lambda t: cp.parse_assignment(t, "--vary"),
help="one variant per occurrence; an empty SRC leaves DEST absent")
check.add_argument("--observable", default="verdict", help="compared across variants")
check.add_argument("--claim", required=True, help="the statement under test")
check.add_argument("--method", required=True, help="how the run tests it")
check.add_argument("--repeat", type=int, default=2, help="runs of each variant")
return parser
def main(argv: Sequence[str] | None = None) -> int:
args = build_parser().parse_args(argv)
emu = EMULATORS[args.emulator]
if args.mode == "resolve":
asset = select_asset(github_releases(emu.repo), emu.asset_endswith, emu.asset_contains)
print(json.dumps({"emulator": emu.name, "platform": emu.platform,
"installer_ref": emu.installer_ref, "asset": asset}, indent=2))
return 0 if asset else 1
if args.mode == "fetch":
try:
print(json.dumps(fetch(emu), indent=2))
except (cp.ProbeError, OSError, subprocess.CalledProcessError) as exc:
print(f"ERROR: {exc}", file=sys.stderr)
return 1
return 0
return probe(args)
if __name__ == "__main__":
from common import run_cli
run_cli(main)
+5
View File
@@ -16,6 +16,11 @@ import os
from pathlib import Path
os.environ.setdefault("RETROBIOS_OFFLINE", "1")
# A test never waits on, nor blocks, the measurements running on the host.
os.environ.setdefault(
"RETROBIOS_PROBE_LOCK",
str(Path(__file__).resolve().parent.parent / "tmp" / "tests" / "probe.lock"),
)
(Path(__file__).resolve().parent.parent / "tmp" / "tests").mkdir(
parents=True, exist_ok=True
+552 -1
View File
@@ -9,6 +9,8 @@
# region the territory of the disc or cartridge: the BIOS entry the
# boot test varies is the one whose `region:` holds it, or one
# without `region:`
# also_regions the other territories one release was sold in, when the
# catalog names one entry for several (`(USA, Europe)`)
# load the file handed to the core: `cue` (the .cue sheet) or a
# file name inside the folder, by default the single file
# frames frames run per repetition, the same with and without the file
@@ -19,7 +21,18 @@
#
# The checks a game is used for are the boot test (no file against the
# declared file), the files test (every declared file staged, which ones the
# core opens) and the benchmark.
# core opens), the benchmark, and for a system whose BIOS a profile ties to a
# territory, the region check (scripts/region_check.py): one game per region,
# run with only its own region's BIOS, then with only the others.
#
# Systems come in the order of the users a missing BIOS stops: BIOS-required
# consoles first, then the arcade BIOS sets, then everything else with a BIOS
# entry. A system no catalog or romfetch source covers is listed under
# `uncovered`, with the reason and romfetch's error code, so the gap is named
# rather than silent.
#
# A system named twice in the profiles (`sega-megacd` and ares' `mega-cd`)
# repeats its list with a YAML alias: the same games, one download.
systems:
sony-playstation:
@@ -40,3 +53,541 @@ systems:
frames: 3600
frame_hash_every: 10
pinned: true
- name: "Puzzle Bobble 2 (Japan)"
catalog: redump
reason: >-
The Japanese release of the same game as the US and European discs, so
the three region runs show the same title screens and only the BIOS
licence screen differs. Beetle PSX picks scph5500.bin for a Japanese
disc, the region check proves it.
region: japan
load: cue
frames: 3600
frame_hash_every: 10
- name: "Bust-A-Move 2 - Arcade Edition (Europe)"
catalog: redump
reason: >-
The PAL release of the same game: a European disc runs at 50 Hz and
Beetle PSX reads scph5502.bin for it. Third leg of the region check,
beside the Japanese and US discs of the same title.
region: europe
load: cue
frames: 3600
frame_hash_every: 10
sony-playstation-2:
romfetch: ps2
content:
- name: "Rez (USA) (En,Fr,De,Es,It)"
catalog: redump
reason: >-
A 230 MB CD-ROM release, the smallest well-known PS2 disc, that boots
through the PS2 BIOS logo straight to its title screen without input.
The profiles do not tie PS2 BIOS images to a region, so one game is
enough for PCSX2 and LRPS2.
region: north-america
frames: 3600
frame_hash_every: 10
sega-saturn:
romfetch: saturn
content: &saturn
- name: "Puzzle Bobble 2X (Japan) (2M1, 2MB1)"
catalog: redump
reason: >-
The Japanese release of the game the US and European discs carry, so
the three region runs compare the same screens. Beetle Saturn loads
sega_101.bin for a Japanese disc and refuses a disc of another area
code, which the region check shows.
region: japan
load: cue
frames: 3600
frame_hash_every: 10
- name: "Bust-A-Move 2 - Arcade Edition (USA)"
catalog: redump
reason: >-
The US release of the same game: Beetle Saturn loads mpr-17933.bin
for a North American disc. Reaches its title within a minute with no
input.
region: north-america
load: cue
frames: 3600
frame_hash_every: 10
- name: "Bust-A-Move 2 - Arcade Edition (Europe)"
catalog: redump
reason: >-
The European release of the same game, area code E. mpr-17933.bin
also serves PAL consoles in Beetle Saturn, so this disc tells whether
one file covers two territories as the profile says.
region: europe
load: cue
frames: 3600
frame_hash_every: 10
sega-megacd:
romfetch: segacd
content: &megacd
- name: "Sonic the Hedgehog CD (Japan)"
catalog: redump
reason: >-
Sega's own title in all three regions, so the region runs compare one
game. Genesis Plus GX, PicoDrive and the other Mega CD cores choose
bios_CD_J.bin or its aliases for a Japanese console.
region: japan
load: cue
frames: 3600
frame_hash_every: 10
- name: "Sonic CD (USA)"
catalog: redump
reason: >-
The US release of the same game, booted through the Sega CD BIOS
(bios_CD_U.bin, us_scd2_9306.bin in PicoDrive). The BIOS shows its
own animated screen before the disc starts.
region: north-america
load: cue
frames: 3600
frame_hash_every: 10
- name: "Sonic CD (Europe)"
catalog: redump
reason: >-
The PAL release of the same game, for the European Mega CD BIOS
(bios_CD_E.bin, eu_mcd2_9306.bin). Third leg of the region check.
region: europe
load: cue
frames: 3600
frame_hash_every: 10
# ares names the same console mega-cd.
mega-cd:
romfetch: segacd
content: *megacd
sega-32x:
romfetch: 32x
content:
- name: "Knuckles' Chaotix (Japan, USA) (En)"
catalog: no-intro
reason: >-
A 32X-only cartridge: the cores that do not emulate the 32X boot ROMs
in HLE need 32X_G_BIOS.BIN, 32X_M_BIOS.BIN and 32X_S_BIOS.BIN to run
any of it. One release for both territories.
region: north-america
also_regions: [japan]
frames: 3600
frame_hash_every: 10
nec-pc-engine-cd:
romfetch: pcecd
content:
- name: "Gate of Thunder (Japan) (FACT, FADT)"
catalog: redump
reason: >-
A Super CD-ROM2 disc: it needs a System Card 3.0 image (syscard3.pce)
and stops on the card's error screen with an older card or none. The
profiles do not tie the card to a region.
region: japan
load: cue
frames: 3600
frame_hash_every: 10
snk-neogeo-cd:
romfetch: neogeocd
content:
- name: "Metal Slug (Japan) (En,Ja)"
catalog: redump
reason: >-
A Neo Geo CD disc that cannot start without the console's BIOS
(neocd.bin and its CDZ variants). Metal Slug is the title the MVS
entry of the arcade list uses too.
region: japan
load: cue
frames: 3600
frame_hash_every: 10
sega-dreamcast:
romfetch: dreamcast
content:
- name: "ChuChu Rocket! (USA) (En,Ja,Fr,De,Es)"
catalog: redump
reason: >-
A GD-ROM that boots through the Dreamcast BIOS logo (dc_boot.bin) to
its title without input. Flycast runs it with its HLE BIOS too, so the
boot test shows the difference the file makes.
region: north-america
load: cue
frames: 3600
frame_hash_every: 10
nintendo-ds:
romfetch: nds
content:
- name: "Mario Kart DS (Japan)"
catalog: no-intro
reason: >-
One game in the three regions, each held by a romfetch source (the
Japanese Tetris DS is not). melonDS and DeSmuME boot with the
ARM7/ARM9 BIOS and firmware or with their free replacements, and
BizHawk ties firmware dumps to regions.
region: japan
frames: 3600
frame_hash_every: 10
- name: "Mario Kart DS (USA, Australia) (En,Fr,De,Es,It)"
catalog: no-intro
reason: >-
The US release of the same game, for the US firmware dump BizHawk
declares and for the boot test of bios7.bin, bios9.bin and
firmware.bin in melonDS.
region: north-america
frames: 3600
frame_hash_every: 10
- name: "Mario Kart DS (Europe) (En,Fr,De,Es,It)"
catalog: no-intro
reason: >-
The European release of the same game, third leg of the region check
for the firmware dumps BizHawk ties to a region.
region: europe
frames: 3600
frame_hash_every: 10
nintendo-gba:
romfetch: gba
content:
- name: "Advance Wars (USA)"
catalog: no-intro
reason: >-
A 4 MB cartridge that shows the Game Boy Advance boot logo when
gba_bios.bin is given and skips it on the cores' HLE BIOS, so the
boot test sees the optional BIOS at work.
region: north-america
frames: 3600
frame_hash_every: 10
panasonic-3do:
romfetch: 3do
content:
- name: "Gex (USA, Europe)"
catalog: redump
reason: >-
A 3DO disc: Opera needs a 3DO BIOS (panafz10.bin and the others the
profile lists) for any game, and Gex shows the 3DO logo the BIOS
draws before the game.
region: north-america
also_regions: [europe]
load: cue
frames: 3600
frame_hash_every: 10
philips-cdi:
romfetch: cdi
content:
- name: "Hotel Mario (Europe)"
catalog: redump
reason: >-
A CD-i disc: the CD-i cores run nothing without the player's system
ROM (cdimono1.zip in MAME, the BIOS SAME CDi declares). A 366 MB disc
that starts its intro without input.
region: europe
load: cue
frames: 3600
frame_hash_every: 10
commodore-amiga-cd32:
romfetch: cd32
content:
- name: "Pinball Fantasies (Europe)"
catalog: redump
reason: >-
A 97 MB CD32 disc: PUAE needs the CD32 Kickstart and extended ROM to
boot any CD32 title, and the disc shows the CD32 boot animation the
ROM draws.
region: europe
load: cue
frames: 3600
frame_hash_every: 10
atari-lynx:
romfetch: lynx
content:
- name: "Super Skweek (World) (Atari Lynx Collection 1) (Unl)"
catalog: no-intro
reason: >-
Handy and Beetle Lynx refuse to start a cartridge without
lynxboot.img. The headered Lynx catalog romfetch reads holds only the
Atari Lynx Collection releases and betas, and this is a full game
from that collection.
region: north-america
also_regions: [europe, japan]
frames: 3600
frame_hash_every: 10
# Everything else with a BIOS entry.
sega-mastersystem:
romfetch: mastersystem
content: &mastersystem
- name: "Alex Kidd no Miracle World (Japan)"
catalog: no-intro
reason: >-
The Japanese Mark III cartridge. Genesis Plus GX ties bios_J.sms to
Japan and bios_U.sms to the other regions, so the region check runs
the same game on each.
region: japan
frames: 3600
frame_hash_every: 10
- name: "Alex Kidd in Miracle World (USA, Europe)"
catalog: no-intro
reason: >-
The western cartridge of the same game, one release for the US and
Europe, as bios_U.sms serves both in the Genesis Plus GX profile.
region: north-america
also_regions: [europe]
frames: 3600
frame_hash_every: 10
# ares names the same console master-system.
master-system:
romfetch: mastersystem
content: *mastersystem
nintendo-64:
romfetch: n64
content:
- name: "Super Mario 64 (Japan)"
catalog: no-intro
reason: >-
One game in the three regions. simple64 loads the NTSC or the PAL PIF
ROM by the cartridge's region, which the region check proves on the
Japanese, US and European releases.
region: japan
frames: 3600
frame_hash_every: 10
- name: "Super Mario 64 (USA)"
catalog: no-intro
reason: >-
The US release of the same game, NTSC like the Japanese one, so it
should read the same PIF ROM as the Japanese cartridge.
region: north-america
frames: 3600
frame_hash_every: 10
- name: "Super Mario 64 (Europe) (En,Fr,De)"
catalog: no-intro
reason: >-
The PAL release of the same game: the one cartridge the PAL PIF ROM
(pif.pal) is for in simple64.
region: europe
frames: 3600
frame_hash_every: 10
nintendo-gamecube:
romfetch: gamecube
content:
- name: "Pikmin (Japan) (Rev 1)"
catalog: redump
reason: >-
One game in the three regions. Dolphin reads the IPL of the disc's
region (GC/JAP/IPL.bin) to show the GameCube boot animation, and
skips it on its HLE boot. 1.4 GB, fetched only when a check needs it.
region: japan
frames: 3600
frame_hash_every: 10
- name: "Pikmin (USA)"
catalog: redump
reason: >-
The US release of the same game, for GC/USA/IPL.bin in Dolphin and
its forks.
region: north-america
frames: 3600
frame_hash_every: 10
- name: "Pikmin (Europe, Australia) (En,Fr,De,Es,It)"
catalog: redump
reason: >-
The PAL release of the same game, for GC/EUR/IPL.bin. Third leg of
the region check.
region: europe
frames: 3600
frame_hash_every: 10
sega-megadrive:
romfetch: megadrive
content:
- name: "Sonic The Hedgehog (USA, Europe)"
catalog: no-intro
reason: >-
A cartridge that passes the TMSS check of a later Mega Drive: with
bios_MD.bin the core shows the TMSS licence screen first, without it
the game starts at once.
region: north-america
also_regions: [europe]
frames: 3600
frame_hash_every: 10
sega-gamegear:
romfetch: gamegear
content:
- name: "Sonic The Hedgehog (World) (Rev A)"
catalog: no-intro
reason: >-
A cartridge for the optional Game Gear boot ROM (bios.gg): with it the
core shows the Sega licence screen before the game.
region: north-america
frames: 3600
frame_hash_every: 10
nintendo-gb:
romfetch: gb
content:
- name: "Tetris (World) (Rev 1)"
catalog: no-intro
reason: >-
The cartridge every Game Boy core runs: with the optional boot ROM
(gb_bios.bin, dmg_boot.bin) the Nintendo logo scrolls down first,
without it the game starts at once.
region: north-america
frames: 3600
frame_hash_every: 10
nintendo-gbc:
romfetch: gbc
content:
- name: "Tetris DX (World) (SGB Enhanced) (GB Compatible)"
catalog: no-intro
reason: >-
A Game Boy Color cartridge for the optional CGB boot ROM
(gbc_bios.bin, cgb_boot.bin): the boot animation and the palette it
picks show whether the core read it.
region: north-america
frames: 3600
frame_hash_every: 10
snk-neogeo-pocket:
romfetch: ngp
content:
- name: "King of Fighters R-1 - Pocket Fighting Series (Japan, Europe) (En,Ja)"
catalog: no-intro
reason: >-
A Neo Geo Pocket cartridge for the optional BIOS some cores read (the
SNK boot screen and the clock setting it asks for). Mednafen's HLE
starts the game without it.
region: japan
also_regions: [europe]
frames: 3600
frame_hash_every: 10
nec-pc-fx:
romfetch: pcfx
content:
- name: "Battle Heat (Japan)"
catalog: redump
reason: >-
A PC-FX disc: Beetle PC-FX needs pcfx.rom for any game. Every PC-FX
release is Japanese.
region: japan
load: cue
frames: 3600
frame_hash_every: 10
sony-psp:
romfetch: psp
content:
- name: "Lumines - Puzzle Fusion (Europe) (En,Fr,De,Es,It)"
catalog: redump
reason: >-
A UMD image for PPSSPP, which needs no BIOS but reads its font and
asset files (the ppsspp data directory) to draw the system dialogs.
region: europe
frames: 3600
frame_hash_every: 10
# Systems with a BIOS entry that no catalog romfetch reads covers, or whose
# content romfetch cannot fetch. `romfetch` is what the request returned:
# its exit code and error code.
uncovered:
snk-neogeo-mvs:
want: "mslug (neogeo.zip with Metal Slug), through MAME and FBNeo"
reason: >-
Arcade sets are not in the Redump or No-Intro catalogs and romfetch has
no arcade system.
romfetch: {exit: 1, code: unknown_system, request: "arcade"}
sega-naomi:
want: "mvsc2 (naomi.zip with Marvel vs. Capcom 2), through MAME and Flycast"
reason: Arcade set, no catalog romfetch reads.
romfetch: {exit: 1, code: unknown_system, request: "arcade"}
sammy-atomiswave:
want: "kofnw (awbios.zip with The King of Fighters Neowave), through MAME and Flycast"
reason: Arcade set, no catalog romfetch reads.
romfetch: {exit: 1, code: unknown_system, request: "arcade"}
igs-pgm:
want: "kov (pgm.zip with Knights of Valour), through MAME and FBNeo"
reason: Arcade set, no catalog romfetch reads.
romfetch: {exit: 1, code: unknown_system, request: "arcade"}
cps3:
want: "sfiii3 (Street Fighter III 3rd Strike), through MAME and FBNeo"
reason: Arcade set, no catalog romfetch reads.
romfetch: {exit: 1, code: unknown_system, request: "arcade"}
sega-stv:
want: "shienryu (stvbios.zip with Shienryu), through MAME, FBNeo and Kronos"
reason: Arcade set, no catalog romfetch reads.
romfetch: {exit: 1, code: unknown_system, request: "arcade"}
sega-triforce:
want: "a Triforce GD-ROM set, through Dolphin Triforce"
reason: Arcade set, no catalog romfetch reads.
romfetch: {exit: 1, code: unknown_system, request: "arcade"}
nintendo-dsi:
want: "a DSi-enhanced cartridge or DSiWare title, for melonDS in DSi mode"
reason: romfetch reads the decrypted DS catalog only, no DSi set.
romfetch: {exit: 1, code: unknown_system, request: "dsi"}
nintendo-3ds:
want: "one game per region, for Citra's regional system archives"
reason: No 3DS catalog in romfetch.
romfetch: {exit: 1, code: unknown_system, request: "3ds"}
nintendo-64dd:
want: "F-Zero X - Expansion Kit (Japan), for the 64DD IPL"
reason: No 64DD catalog in romfetch.
romfetch: {exit: 1, code: unknown_system, request: "n64dd"}
atari-jaguarcd:
want: "Myst (USA), for the Jaguar CD BIOS"
reason: No Jaguar CD catalog in romfetch.
romfetch: {exit: 1, code: unknown_system, request: "jaguarcd"}
intellivision:
want: "Astrosmash (USA, Europe), for exec.bin and grom.bin"
reason: No Intellivision catalog in romfetch.
romfetch: {exit: 1, code: unknown_system, request: "intellivision"}
colecovision:
want: "Donkey Kong (USA), for colecovision.rom"
reason: No ColecoVision catalog in romfetch.
romfetch: {exit: 1, code: unknown_system, request: "colecovision"}
msx:
want: "Gradius (Japan), for the MSX system ROMs"
reason: No MSX catalog in romfetch.
romfetch: {exit: 1, code: unknown_system, request: "msx"}
commodore-amiga:
want: "Lemmings (Europe), for the Kickstart ROMs"
reason: >-
romfetch reads the Amiga CD32 catalog only, no Amiga floppy catalog.
romfetch: {exit: 1, code: unknown_system, request: "amiga"}
atari-5200:
want: "Pac-Man (USA), for 5200.rom"
reason: No Atari 5200 catalog in romfetch.
romfetch: {exit: 1, code: unknown_system, request: "atari5200"}
atari-7800:
want: "Asteroids (USA), for the 7800 BIOS"
reason: No Atari 7800 catalog in romfetch.
romfetch: {exit: 1, code: unknown_system, request: "atari7800"}
nintendo-fds:
want: "Super Mario Brothers 2 (Japan), for disksys.rom"
reason: No Famicom Disk System catalog in romfetch.
romfetch: {exit: 1, code: unknown_system, request: "fds"}
nintendo-pokemon-mini:
want: "Pokemon Pinball Mini (USA, Europe), for bios.min"
reason: No Pokemon Mini catalog in romfetch.
romfetch: {exit: 1, code: unknown_system, request: "pokemini"}
microsoft-xbox:
want: "Halo - Combat Evolved (USA), for xemu's MCPX ROM, BIOS and hard disk image"
reason: >-
romfetch plans the 7.8 GB entry but no source holds it (exit 1, no
candidate), and it is above romfetch's 4 GiB limit that needs --yes.
romfetch: {exit: 1, code: null, request: "xbox"}
sony-playstation-3:
want: "Ridge Racer 7 (USA), for RPCS3's PS3UPDAT.PUP firmware"
reason: romfetch plans the entry but no source holds it (exit 1, no candidate).
romfetch: {exit: 1, code: null, request: "ps3"}
+500
View File
@@ -0,0 +1,500 @@
# The boot oracle of scripts/core_probe.py: what a run must reach to boot,
# and what tells a BIOS error apart.
#
# content per piece of test content (by the sha1 of the file handed to
# the core, the .cue for a disc), per core (by the library name
# retro_get_system_info gives): the reference frames a run with
# the full BIOS set reaches. Each was recorded once
# (`recorded_from`, the record id) and reviewed by looking at its
# PNG, from the variant `variant` names when that run was a
# check. `stage: bios` is a screen only the console's own BIOS
# draws, `stage: game` a screen of the content. A run that reaches
# one of them boots.
# error_patterns log lines after which a core stops, read from its source
# (`source_ref`). Shared ones at the top level, a core's own under
# cores:. A line a core logs and then carries on (a fallback to a
# built-in BIOS) is not an error pattern.
# error_screens per core, the sha1 of a frame that shows its BIOS error message.
# bios_patterns per core, log lines by which it says it loaded the console's
# own BIOS: they stand for the bios-stage screens of a core
# that hides them by default.
#
# A run that reaches no reference frame, matches no pattern or screen and
# does not end on one colour is `unknown`: frames that differ from another
# run's never make a boot.
error_patterns: []
cores:
# The PlayStation cores below log a missing or wrong BIOS and boot a
# built-in one: none of those lines is an error pattern.
"Beetle PSX":
note: >-
A missing BIOS logs "Firmware is missing" and loads the embedded
OpenBIOS, a wrong one logs "Firmware found but has invalid SHA1" and is
loaded anyway (libretro.c:849, 856, 3504-3511 at 7fea57a5).
error_patterns: []
error_screens:
- sha1: dfbfc299250c0983f86bbf951efd187441306d92
shows: the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)
"Beetle PSX HW":
note: The same code as Beetle PSX, built with the hardware renderers.
error_patterns: []
error_screens:
- sha1: dfbfc299250c0983f86bbf951efd187441306d92
shows: the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)
"SwanStation":
note: >-
"No BIOS image found for <region> region" is followed by the built-in
OpenBIOS (src/core/host_interface.cpp:182, src/core/system.cpp:678-682
at 631f0fb3).
error_patterns: []
error_screens:
- sha1: 167fb7b6527e295b12dca5806a29856f5f31d401
shows: the Japanese BIOS main menu, the disc refused (a US disc under a Japanese BIOS)
"PCSX-ReARMed":
note: >-
Without a BIOS, or with one of the wrong size, it logs "Using HLE BIOS"
and runs its own (frontend/libretro.c:3893-3899 at c8816799). The BIOS
boot logo is off by default (pcsx_rearmed_show_bios_bootlogo), so its
runs reach no bios-stage screen: the line it logs once a file passes
its signature check and is kept stands for them.
bios_patterns:
- pattern: '^found (US|EU|JP) BIOS file, crc32 '
source_ref: frontend/libretro.c:3646-3669 at c8816799
error_patterns: []
error_screens: []
"Beetle Saturn":
note: Without a usable BIOS the core logs one of these and retro_load_game fails.
error_patterns:
- pattern: '^Cannot open BIOS file '
source_ref: mednafen/ss/ss.c:1943-1947 at 2ce77e20
- pattern: '^BIOS file ".*" is of an incorrect size\.'
source_ref: mednafen/ss/ss.c:1961-1967 at 2ce77e20
- pattern: '^BIOS file ".*" could not be fully read'
source_ref: mednafen/ss/ss.c:1978-1983 at 2ce77e20
error_screens: []
"pcsx2":
note: >-
PCSX2 standalone (scripts/standalone_probe.py). Without a BIOS it shows a
dialog and runs nothing: the dialog is its error screen, captured as the
1280x720 root window.
error_patterns: []
error_screens:
- sha1: 46329c633ea7d0b63349261e4aab169e4f44d3f6
shows: the dialog "PCSX2 requires a PlayStation 2 BIOS in order to run"
"PCSX1":
note: An HLE BIOS stands in when none is found, and the run logs nothing about it.
error_patterns: []
error_screens: []
content:
- name: "Bust-A-Move 2 - Arcade Edition (USA)"
catalog: redump
# The sha1 of the .cue handed to the core.
sha1: ed4a437a6f653cc71ad6ac0da68cc85eb093f298
references:
"Beetle PSX":
recorded_from: 2026-10-27-b0150a15670d
frames:
- sha1: 7b72ebae83893b63f9fffd1685f03b1d048d9fa9
stage: bios
shows: the Sony Computer Entertainment logo
- sha1: 0905c920a1de996664eddca94f93f75d0dcd4c52
stage: bios
shows: the PlayStation logo licensed by Sony Computer Entertainment America
- sha1: d51ab7783f8eeafc63a28f14ce39f8e2babeffb3
stage: game
shows: Now Loading with the yellow bubble
- sha1: 63a96bd6d1d487da1824e10d37f6658506edc451
stage: game
shows: the Acclaim and Taito credits text, CREDIT 6
- sha1: 6628416f377d2e25df45e5fa2126f8f9313551f0
stage: game
shows: the Acclaim logo, CREDIT 6
- sha1: d68892362e0f33c41cc59dac1b5a2077fe5428ee
stage: game
shows: the Taito logo on white, CREDIT 6
- sha1: 56330c6c7646c2c261acb3f48450825cb289845a
stage: game
shows: a black screen with CREDIT 6
"Beetle PSX HW":
recorded_from: 2026-10-27-ee69ad83c9f8
frames:
- sha1: 7b72ebae83893b63f9fffd1685f03b1d048d9fa9
stage: bios
shows: the Sony Computer Entertainment logo
- sha1: 0905c920a1de996664eddca94f93f75d0dcd4c52
stage: bios
shows: the PlayStation logo licensed by Sony Computer Entertainment America
- sha1: d51ab7783f8eeafc63a28f14ce39f8e2babeffb3
stage: game
shows: Now Loading with the yellow bubble
- sha1: 63a96bd6d1d487da1824e10d37f6658506edc451
stage: game
shows: the Acclaim and Taito credits text, CREDIT 6
- sha1: 6628416f377d2e25df45e5fa2126f8f9313551f0
stage: game
shows: the Acclaim logo, CREDIT 6
- sha1: d68892362e0f33c41cc59dac1b5a2077fe5428ee
stage: game
shows: the Taito logo on white, CREDIT 6
- sha1: 56330c6c7646c2c261acb3f48450825cb289845a
stage: game
shows: a black screen with CREDIT 6
"SwanStation":
recorded_from: 2026-10-27-717f780131fc
frames:
- sha1: fad859d9b8211ce9f35ad3a05b0b7d184fe14d83
stage: bios
shows: the Sony Computer Entertainment logo
- sha1: 593a6e2600946040fefd6eb9aebdc5c0d56f0555
stage: bios
shows: the PlayStation logo licensed by Sony Computer Entertainment America
- sha1: e5af1f2023d0d729ce7aabf52d8e03f75bb8d230
stage: game
shows: Now Loading with the yellow bubble
- sha1: dd6dac23da6b8f4f256b8090568c52e8f8428425
stage: game
shows: the Acclaim and Taito credits text, CREDIT 6
- sha1: 533715dd946ba1984af1b9356e06989c7770e04a
stage: game
shows: the Acclaim logo, CREDIT 6
- sha1: 0d17db6e9a2d5793695884c85dd2177093420fdc
stage: game
shows: the Taito logo on white, CREDIT 6
- sha1: 2238516839dc43c0b22c00db5fe76128f5fb6f3f
stage: game
shows: a black screen with CREDIT 6
"PCSX-ReARMed":
recorded_from: 2026-10-27-8154bab7bf80
frames:
- sha1: e5af1f2023d0d729ce7aabf52d8e03f75bb8d230
stage: game
shows: Now Loading with the yellow bubble
- sha1: dd6dac23da6b8f4f256b8090568c52e8f8428425
stage: game
shows: the Acclaim and Taito credits text, CREDIT 6
- sha1: 533715dd946ba1984af1b9356e06989c7770e04a
stage: game
shows: the Acclaim logo, CREDIT 6
- sha1: 0d17db6e9a2d5793695884c85dd2177093420fdc
stage: game
shows: the Taito logo on white, CREDIT 6
- sha1: 2238516839dc43c0b22c00db5fe76128f5fb6f3f
stage: game
shows: a black screen with CREDIT 6
"PCSX1":
recorded_from: 2026-10-27-2905a9dd4b0a
frames:
- sha1: e5af1f2023d0d729ce7aabf52d8e03f75bb8d230
stage: game
shows: Now Loading with the yellow bubble
- sha1: dd6dac23da6b8f4f256b8090568c52e8f8428425
stage: game
shows: the Acclaim and Taito credits text, CREDIT 6
- sha1: e10f642259f2906bb39ae07fcb4b5a36eae18287
stage: game
shows: the Acclaim logo with a stray strip at its right edge, CREDIT 6
- sha1: 0d17db6e9a2d5793695884c85dd2177093420fdc
stage: game
shows: the Taito logo on white, CREDIT 6
- sha1: 2238516839dc43c0b22c00db5fe76128f5fb6f3f
stage: game
shows: a black screen with CREDIT 6
"duckstation":
recorded_from: 2026-10-27-9bc8fbcebc85
variant: scph5501.bin
frames:
- sha1: 7218f6facf5c27248b8dc9cff31d8b4aeb3b1829
stage: bios
shows: the Sony Computer Entertainment logo
- sha1: d70b0e9e9e4e05eb54fb56d6adbab3afb753631a
stage: bios
shows: the PlayStation logo licensed by Sony Computer Entertainment America
- sha1: f336e067bb644abaf2ab30462564a1baa037d58e
stage: game
shows: Now Loading with the yellow bubble
- sha1: 534459d74bac4644fe7d3f23689390026bbb6d1b
stage: game
shows: the Acclaim and Taito credits text, CREDIT 6
- sha1: b01b0ebfe12f3bcfd7250443f391a67f002c40d4
stage: game
shows: the Acclaim logo, CREDIT 6
- sha1: 5d83577be2b2ca48bd55daaede7cc4ba96b7fee7
stage: game
shows: the Taito logo on white, CREDIT 6
- sha1: 4b4e686aeae9fecbb8cb504dcddb9b91bc1a137e
stage: game
shows: a black screen with CREDIT 6
- sha1: 2901974f4a50e0a9f061b21e5f262ea7edf5b8c2
stage: game
shows: the attract-mode game, two playfields of bubbles
- name: "Puzzle Bobble 2 (Japan)"
catalog: redump
sha1: 3b51b45b8b78777c04086fcd1ef1dd0439c365e6
references:
"Beetle PSX":
recorded_from: 2026-10-27-a2bd916f1765
frames:
- sha1: 7b72ebae83893b63f9fffd1685f03b1d048d9fa9
stage: bios
shows: the Sony Computer Entertainment logo
- sha1: 1d5305661b110a78aff8e41d60c19168c4af77ac
stage: bios
shows: the PlayStation logo licensed by Sony Computer Entertainment Inc.
- sha1: d51ab7783f8eeafc63a28f14ce39f8e2babeffb3
stage: game
shows: Now Loading with the yellow bubble
- sha1: 80d023ecbf776a97b6bb2bdeb13e43460f60fd53
stage: game
shows: the Taito logo on white, CREDIT 6
- sha1: 1bda114b66fd098623abca772cf23813293a3849
stage: game
shows: a black screen with CREDIT 6
- sha1: 3bb53b8a3036554a4bf9ec4785df7a4b4e06a87d
stage: game
shows: the attract-mode game on the beach, PASSAGE TIME IS
"Beetle PSX HW":
recorded_from: 2026-10-27-6e0e946eeba5
frames:
- sha1: 7b72ebae83893b63f9fffd1685f03b1d048d9fa9
stage: bios
shows: the Sony Computer Entertainment logo
- sha1: 1d5305661b110a78aff8e41d60c19168c4af77ac
stage: bios
shows: the PlayStation logo licensed by Sony Computer Entertainment Inc.
- sha1: d51ab7783f8eeafc63a28f14ce39f8e2babeffb3
stage: game
shows: Now Loading with the yellow bubble
- sha1: 80d023ecbf776a97b6bb2bdeb13e43460f60fd53
stage: game
shows: the Taito logo on white, CREDIT 6
- sha1: 1bda114b66fd098623abca772cf23813293a3849
stage: game
shows: a black screen with CREDIT 6
- sha1: 3bb53b8a3036554a4bf9ec4785df7a4b4e06a87d
stage: game
shows: the attract-mode game on the beach, PASSAGE TIME IS
"PCSX-ReARMed":
recorded_from: 2026-10-27-65923ebc1836
frames:
- sha1: e5af1f2023d0d729ce7aabf52d8e03f75bb8d230
stage: game
shows: Now Loading with the yellow bubble
- sha1: 2443e73be7ce3203408d7398c997fe6ec7cebd9f
stage: game
shows: the Taito logo on white, CREDIT 6
- sha1: 373e5e3d7c524ed1556b9292a794169bf1de27d0
stage: game
shows: a black screen with CREDIT 6
- sha1: 53f32c4acd5a522f359952ee48f138e44aee6e61
stage: game
shows: the attract-mode game on the beach, PASSAGE TIME IS
"SwanStation":
recorded_from: 2026-10-27-abe38e414339
frames:
- sha1: fad859d9b8211ce9f35ad3a05b0b7d184fe14d83
stage: bios
shows: the Sony Computer Entertainment logo
- sha1: 9c168a8d6a6c706157307910e2b46039d019e48b
stage: bios
shows: the PlayStation logo licensed by Sony Computer Entertainment Inc.
- sha1: e5af1f2023d0d729ce7aabf52d8e03f75bb8d230
stage: game
shows: Now Loading with the yellow bubble
- sha1: 2443e73be7ce3203408d7398c997fe6ec7cebd9f
stage: game
shows: the Taito logo on white, CREDIT 6
- sha1: 373e5e3d7c524ed1556b9292a794169bf1de27d0
stage: game
shows: a black screen with CREDIT 6
- sha1: 53f32c4acd5a522f359952ee48f138e44aee6e61
stage: game
shows: the attract-mode game on the beach, PASSAGE TIME IS
- name: "Bust-A-Move 2 - Arcade Edition (Europe)"
catalog: redump
sha1: fbfb904cdb7a0e25a659980a5ed1206298bc7a1e
references:
"Beetle PSX":
recorded_from: 2026-10-27-4b9e700d03a9
frames:
- sha1: 7b72ebae83893b63f9fffd1685f03b1d048d9fa9
stage: bios
shows: the Sony Computer Entertainment logo
- sha1: 408effe5ed13b50c97a21d2efe9930ab0d2b6f43
stage: bios
shows: the PlayStation logo licensed by Sony Computer Entertainment Europe
- sha1: d51ab7783f8eeafc63a28f14ce39f8e2babeffb3
stage: game
shows: Now Loading with the yellow bubble
- sha1: f5649c8df958220324753968e8785ea80a021837
stage: game
shows: the anti-piracy notice
- sha1: 2cccff1e0706fcc8bdd4fdcd35e0310c9aaf9ac5
stage: game
shows: the Acclaim and Taito credits text
- sha1: dd70e8e057c3de89f0c39c2b91b72fce902a8588
stage: game
shows: the Acclaim logo
- sha1: 368ac3ce2a4ef7dcc1720e0e48f18e3e6404e191
stage: game
shows: the Taito logo on white
"Beetle PSX HW":
recorded_from: 2026-10-27-f3b61598f415
frames:
- sha1: 7b72ebae83893b63f9fffd1685f03b1d048d9fa9
stage: bios
shows: the Sony Computer Entertainment logo
- sha1: 408effe5ed13b50c97a21d2efe9930ab0d2b6f43
stage: bios
shows: the PlayStation logo licensed by Sony Computer Entertainment Europe
- sha1: d51ab7783f8eeafc63a28f14ce39f8e2babeffb3
stage: game
shows: Now Loading with the yellow bubble
- sha1: f5649c8df958220324753968e8785ea80a021837
stage: game
shows: the anti-piracy notice
- sha1: 2cccff1e0706fcc8bdd4fdcd35e0310c9aaf9ac5
stage: game
shows: the Acclaim and Taito credits text
- sha1: dd70e8e057c3de89f0c39c2b91b72fce902a8588
stage: game
shows: the Acclaim logo
- sha1: 368ac3ce2a4ef7dcc1720e0e48f18e3e6404e191
stage: game
shows: the Taito logo on white
"PCSX-ReARMed":
recorded_from: 2026-10-27-c71f71b579b9
frames:
- sha1: e5af1f2023d0d729ce7aabf52d8e03f75bb8d230
stage: game
shows: Now Loading with the yellow bubble
- sha1: d0c5e568fd2585ad5c0ed244c25bdacdbb596d55
stage: game
shows: the anti-piracy notice
- sha1: 4ea5612d272a8b05fabf98ed7dc4b245fe759001
stage: game
shows: the Acclaim and Taito credits text
- sha1: ed433c340dc7ef65c8afba4434542c1827251127
stage: game
shows: the Acclaim logo
- sha1: a909b761d6f46ec28bdf46aac874873db40396b7
stage: game
shows: the Taito logo on white
"SwanStation":
recorded_from: 2026-10-27-57e092562c10
frames:
- sha1: fad859d9b8211ce9f35ad3a05b0b7d184fe14d83
stage: bios
shows: the Sony Computer Entertainment logo
- sha1: e6f4f8524f3c8a47d5dba0d33f63c64dcebccde7
stage: bios
shows: the PlayStation logo licensed by Sony Computer Entertainment Europe
- sha1: e5af1f2023d0d729ce7aabf52d8e03f75bb8d230
stage: game
shows: Now Loading with the yellow bubble
- sha1: d0c5e568fd2585ad5c0ed244c25bdacdbb596d55
stage: game
shows: the anti-piracy notice
- sha1: 4ea5612d272a8b05fabf98ed7dc4b245fe759001
stage: game
shows: the Acclaim and Taito credits text
- sha1: ed433c340dc7ef65c8afba4434542c1827251127
stage: game
shows: the Acclaim logo
- sha1: a909b761d6f46ec28bdf46aac874873db40396b7
stage: game
shows: the Taito logo on white
- name: "Puzzle Bobble 2X (Japan) (2M1, 2MB1)"
catalog: redump
sha1: b962ec9148a189239810a10677dcba073983733f
references:
"Beetle Saturn":
recorded_from: 2026-10-27-ea155398ce4b
frames:
- sha1: 5edec5180d1c04dc0ead1e5fbbc7d6d53cc23fdb
stage: bios
shows: the SEGA SATURN logo of the Japanese BIOS
- sha1: dcd45679fcd31a423d0e54690e89b52f417d8728
stage: bios
shows: SEGA, produced by or under license from Sega Enterprises
- sha1: 7efe0a96245086d186a702a253525614d03f01f4
stage: game
shows: NOW LOADING
- sha1: 79894146225fefecb7db22b6aa296cb035a8d8ae
stage: game
shows: the Taito logo on white, CREDIT 9
- sha1: 475fce75c7c581b7367ac1a4adaa0aadc18afab1
stage: game
shows: GAME OVER, press 1P or 2P start button
- sha1: f610c613f723fa640250121d6086b5e2c53b695c
stage: game
shows: the Puzzle Bobble 2X title, press start button
- name: "Bust-A-Move 2 - Arcade Edition (USA)"
catalog: redump
sha1: 782b93d04ecb9da4cc534489e67feeac7ea9dc78
references:
"Beetle Saturn":
recorded_from: 2026-10-27-35dd5587262d
frames:
- sha1: f6f6ad7714da4b7c32a7736276c8cba7ef9d45d0
stage: bios
shows: the SEGA SATURN globe logo
- sha1: dcd45679fcd31a423d0e54690e89b52f417d8728
stage: bios
shows: SEGA, produced by or under license from Sega Enterprises
- sha1: e0b0fd36c4da2579b509934b8fe010f4741edfa5
stage: game
shows: NOW LOADING
- sha1: 97f62d0835bc7f27b660f330d794c149c50c5716
stage: game
shows: the Acclaim and Taito credits text, CREDIT 9
- sha1: 0cd323a8a93adec3a2173549300acbf9a3fe5596
stage: game
shows: the Acclaim logo, CREDIT 9
- sha1: 76ed20462b9f45e247611fa77feff69e47052875
stage: game
shows: the Taito logo on white, CREDIT 9
- sha1: e90793d79a1c815cd74e7a56f0e9d8f124bfc547
stage: game
shows: the Bust-A-Move 2 title, press start button
- name: "Bust-A-Move 2 - Arcade Edition (Europe)"
catalog: redump
sha1: 9298fabcdd797272c8c993abc81fcdd51a4e7830
references:
"Beetle Saturn":
recorded_from: 2026-10-27-1880da25f150
frames:
- sha1: 2d870b2352923df4b2563f75c8a01a3d6dcb4237
stage: bios
shows: the SEGA SATURN globe logo
- sha1: 95410b3a4a9f69ae981e2774c55574886efa67ea
stage: bios
shows: SEGA, produced by or under license from Sega Enterprises
- sha1: 4d426aec90be9bff76e2d32da0437d91f9880950
stage: game
shows: NOW LOADING
- sha1: 5bfbc97567caa32bad7489acc6c9a4f3f65ed863
stage: game
shows: the Acclaim and Taito credits text, CREDIT 9
- sha1: 8af02ae2f2f0864657a3c7a68293a4da163000d6
stage: game
shows: the Acclaim logo, CREDIT 9
- sha1: e3245a31197fa028c2da63f387f58a38e010c98d
stage: game
shows: the Taito logo on white, CREDIT 9
- sha1: 9ae4dbf2ded891887635634d224dedccf176c1a0
stage: game
shows: the Bust-A-Move 2 title, press start button
- name: "Rez (USA) (En,Fr,De,Es,It)"
catalog: redump
sha1: f6ac65761e9d8c8c9eb9d3377ff53719557ae346
references:
"pcsx2":
recorded_from: 2026-10-27-fac0b52c9475
variant: ps2-0230a-20080220.bin
frames:
- sha1: 003685f698160f1cc79ca0bc00091f30ccb681db
stage: game
shows: Rez asking to format the unformatted memory card in slot 1
+282 -81
View File
@@ -16,6 +16,7 @@ import io
import json
import os
import shutil
import struct
import subprocess
import sys
import tempfile
@@ -92,15 +93,20 @@ void retro_init(void) {}
void retro_deinit(void) {}
static FILE *try_open(const char *dir, const char *name) {
char path[4096]; snprintf(path, sizeof path, "%s/%s", dir, name); return fopen(path, "rb"); }
/* booted: 0 a black screen to the end, 1 the BIOS logo then the title,
2 the title alone (the built-in stand-in of FAKE_HLE). */
bool retro_load_game(const void *g) {
const char *dir = NULL; FILE *f; (void)g; env(9, &dir);
const char *dir = NULL; FILE *f; unsigned char buf[8]; size_t n = 0; (void)g; env(9, &dir);
f = try_open(dir, "bios.bin");
if (!f) f = try_open(dir, "BIOS.BIN");
if (f) { n = fread(buf, 1, sizeof buf, f); fclose(f); }
int valid = f && n == 4 && buf[0] == 'B';
#ifdef FAKE_HLE
if (f) fclose(f);
booted = 1;
/* Checks the size only: a file of the wrong size is refused for the
stand-in, one of the right size is run, whatever it holds. */
booted = valid ? 1 : (f && n == 4) ? 0 : 2;
#else
if (f) { fclose(f); booted = 1; } else booted = 0;
booted = valid ? 1 : 0;
#endif
return true; }
void retro_unload_game(void) {}
@@ -109,7 +115,8 @@ void retro_run(void) {
#ifdef FAKE_HANG
for (;;) {}
#endif
for (int i = 0; i < 8; i++) pixels[i] = booted ? (uint16_t)(frame / 2 + i) : 0;
int shown = frame < 4 ? 0 : booted == 1 && frame < 8 ? 1 : booted ? 2 : 0;
for (int i = 0; i < 8; i++) pixels[i] = shown == 0 ? 0 : (uint16_t)((shown == 1 ? 1 : 20) + i);
frame++;
video(pixels, 4, 2, 8); batch(s, 2); }
size_t retro_serialize_size(void) { return 0; }
@@ -117,78 +124,103 @@ bool retro_serialize(void *d, size_t n) { (void)d; (void)n; return false; }
"""
def rep(frames: list[str], uniform: list[str] | None = None, loaded: bool = True) -> dict:
return {"loaded": loaded, "observables": {
"frame_hashes": [[i * 10, h] for i, h in enumerate(frames)],
"uniform_frames": sorted(set(uniform or []))}}
def run(verdict: str, label: str = "v", stages: tuple[str, ...] = (),
rid: str = "2026-10-27-aaaaaaaaaaaa") -> rules.Run:
return rules.Run(verdict, rid, label, stages)
def boot_record(absent: list[dict], present: list[dict], rid: str = "2026-10-27-aaaaaaaaaaaa") -> dict:
return {"id": rid, "variants": [{"label": "bios.bin-absent", "repetitions": absent},
{"label": "bios.bin", "repetitions": present}]}
class BootOutcome(unittest.TestCase):
GAME = ("black", "logo", "title", "title2")
def test_boots_when_screens_are_shared(self) -> None:
record = boot_record([rep(["black", "hle", "logo", "title"], ["black"])] * 2,
[rep(self.GAME, ["black"])] * 2)
boot = rules.boot_outcome(record, "bios.bin-absent", "bios.bin")
self.assertEqual((boot.status, boot.shared), (rules.BOOTS, 2))
def test_one_colour_and_no_load_fail(self) -> None:
black = boot_record([rep(["black"], ["black"]), rep([], [], loaded=False)],
[rep(self.GAME, ["black"])])
self.assertEqual(rules.boot_outcome(black, "bios.bin-absent", "bios.bin").status, rules.FAILS)
def test_a_shared_blank_screen_proves_nothing(self) -> None:
# The black frame both runs start on is one colour: it is no game screen.
record = boot_record([rep(["black", "error"], ["black"])], [rep(self.GAME, ["black"])])
self.assertEqual(rules.boot_outcome(record, "bios.bin-absent", "bios.bin").status,
rules.INCONCLUSIVE)
def test_one_shared_screen_is_not_enough(self) -> None:
record = boot_record([rep(["logo", "error"])], [rep(self.GAME, ["black"])])
self.assertEqual(rules.boot_outcome(record, "bios.bin-absent", "bios.bin").status,
rules.INCONCLUSIVE)
def test_repetitions_that_disagree_settle_nothing(self) -> None:
record = boot_record([rep(["logo", "title"]), rep(["black"], ["black"])],
[rep(self.GAME, ["black"])])
self.assertEqual(rules.boot_outcome(record, "bios.bin-absent", "bios.bin").status,
rules.INCONCLUSIVE)
def test_a_reference_that_shows_nothing_settles_nothing(self) -> None:
record = boot_record([rep(["logo", "title"])], [rep(["black"], ["black"])])
self.assertEqual(rules.boot_outcome(record, "bios.bin-absent", "bios.bin").status,
rules.INCONCLUSIVE)
record = boot_record([rep(["logo", "title"])], [rep(self.GAME, loaded=False)])
self.assertEqual(rules.boot_outcome(record, "bios.bin-absent", "bios.bin").status,
rules.INCONCLUSIVE)
NONE_BOOTS = run(rules.BOOTS, "none", ("game",), "2026-10-27-000000000001")
NONE_HANGS = run(rules.HANG, "none", (), "2026-10-27-000000000001")
PRESENT = run(rules.BOOTS, "bios.bin", ("bios", "game"), "2026-10-27-000000000002")
class RuleTable(unittest.TestCase):
ENTRY = MappingProxyType({"name": "bios.bin", "required": True, "aliases": ["Bios.bin"]})
RID = "2026-10-27-bbbbbbbbbbbb"
def test_boots_without_settles_hle_and_queues_required(self) -> None:
verdicts = rules.rule_bios_need(rules.Boot(rules.BOOTS, "x", 3), self.ENTRY, self.RID)
def test_a_verdict_is_read_from_the_record(self) -> None:
record = {"id": self.RID, "variants": [
{"label": "a", "verdict": "boots", "verdict_evidence": {"rule": "repetitions_agree",
"detail": "d", "stages": ["bios"]}},
{"label": "old"}]}
self.assertEqual(rules.run_of(record, "a"), rules.Run("boots", self.RID, "a", ("bios",)))
# A record from before the oracle proves nothing.
self.assertEqual(rules.run_of(record, "old").verdict, rules.UNKNOWN)
def test_boots_with_no_bios_settles_hle_and_queues_required(self) -> None:
verdicts = rules.rule_need(NONE_BOOTS, PRESENT, self.ENTRY)
self.assertEqual([(v.field, v.value, v.apply) for v in verdicts],
[("hle_fallback", True, True), ("required", False, False)])
self.assertEqual(verdicts[0].evidence, (self.RID,))
optional = rules.rule_bios_need(rules.Boot(rules.BOOTS, "x", 3),
{"name": "a", "required": False}, self.RID)
self.assertEqual(verdicts[0].evidence, (NONE_BOOTS.record_id,))
optional = rules.rule_need(NONE_BOOTS, PRESENT, {"name": "a", "required": False})
self.assertEqual([v.field for v in optional], ["hle_fallback"])
def test_fails_without_settles_required_and_no_hle(self) -> None:
verdicts = rules.rule_bios_need(rules.Boot(rules.FAILS, "x"), self.ENTRY, self.RID)
self.assertEqual([(v.field, v.value, v.apply) for v in verdicts],
[("required", True, True), ("hle_fallback", False, True)])
def test_a_file_the_content_never_uses_settles_nothing(self) -> None:
unused = run(rules.BOOTS, "bios.bin", ("game",))
self.assertFalse(rules.read(NONE_BOOTS, unused, unused, unused))
self.assertEqual(rules.rule_need(NONE_BOOTS, unused, self.ENTRY, used=False), [])
# A wrong file that hangs where no file boots: the core reads it.
self.assertTrue(rules.read(NONE_BOOTS, unused, run(rules.HANG), unused))
self.assertTrue(rules.read(NONE_BOOTS, PRESENT, None, None))
def test_inconclusive_is_queued(self) -> None:
(verdict,) = rules.rule_bios_need(rules.Boot(rules.INCONCLUSIVE, "x"), self.ENTRY, self.RID)
self.assertFalse(verdict.apply)
def test_fails_without_and_boots_alone_settles_required(self) -> None:
for failure in rules.FAILS:
verdicts = rules.rule_need(run(failure, "none"), PRESENT, self.ENTRY)
self.assertEqual([(v.field, v.value, v.apply) for v in verdicts],
[("required", True, True), ("hle_fallback", False, True)])
def test_unknown_or_no_boot_alone_settles_nothing(self) -> None:
for none, present in ((run(rules.UNKNOWN), PRESENT), (NONE_HANGS, run(rules.HANG)),
(NONE_HANGS, run(rules.UNKNOWN))):
(verdict,) = rules.rule_need(none, present, self.ENTRY)
self.assertFalse(verdict.apply)
self.assertEqual(verdict.rule, "unsettled")
def test_file_use(self) -> None:
self.assertEqual(rules.file_use(run(rules.BIOS_ERROR), NONE_HANGS, PRESENT), rules.REFUSED)
# It boots without the BIOS screens the right file shows: a fallback.
self.assertEqual(rules.file_use(run(rules.BOOTS, stages=("game",)), NONE_BOOTS, PRESENT),
rules.REFUSED)
self.assertEqual(rules.file_use(run(rules.BOOTS, stages=("bios", "game")), NONE_BOOTS, PRESENT),
rules.USED)
self.assertEqual(rules.file_use(run(rules.HANG), NONE_BOOTS, PRESENT), rules.USED)
self.assertEqual(rules.file_use(run(rules.CRASH), NONE_BOOTS, PRESENT), rules.USED)
# A hang the run with no file shows too says nothing about the file.
self.assertIsNone(rules.file_use(run(rules.HANG), NONE_HANGS, PRESENT))
self.assertIsNone(rules.file_use(run(rules.UNKNOWN), NONE_BOOTS, PRESENT))
self.assertIsNone(rules.file_use(run(rules.BIOS_ERROR), NONE_BOOTS, run(rules.HANG)))
no_logo = run(rules.BOOTS, stages=("game",))
self.assertIsNone(rules.file_use(run(rules.BOOTS, stages=("game",)), NONE_BOOTS, no_logo))
def test_validation_agrees_or_adds_size(self) -> None:
refused = run(rules.BOOTS, stages=("game",))
used = run(rules.HANG)
entry = {"name": "bios.bin", "validation": ["size", "md5"]}
verdict = rules.rule_validation(refused, refused, NONE_BOOTS, PRESENT, entry)
self.assertEqual((verdict.rule, verdict.apply), ("validation_agrees", True))
self.assertTrue(rules.agrees(entry, verdict))
added = rules.rule_validation(used, refused, NONE_BOOTS, PRESENT, {"name": "bios.bin"})
self.assertEqual((added.rule, added.value, added.apply), ("validation_size_added", ["size"], True))
self.assertFalse(rules.agrees({"name": "bios.bin"}, added))
self.assertEqual(rules.rule_validation(used, used, NONE_BOOTS, PRESENT, {"name": "b"}).rule,
"validation_agrees")
def test_validation_contradicted_is_queued(self) -> None:
refused = run(rules.BIOS_ERROR)
used = run(rules.HANG)
cases = [
(refused, None, {"name": "b", "validation": ["size"]}), # content check undeclared
(used, None, {"name": "b", "validation": ["md5"]}), # declared, not done
(None, used, {"name": "b", "validation": ["size"]}), # half of it runs
(used, refused, {"name": "b", "validation": {"core": ["md5"]}}), # per-build form
]
for zeros, half, entry in cases:
verdict = rules.rule_validation(zeros, half, NONE_BOOTS, PRESENT, entry)
self.assertEqual((verdict.rule, verdict.apply), ("validation_contradicted", False), entry)
self.assertEqual(set(verdict.value), {"content", "size"})
self.assertFalse(rules.agrees(entry, verdict))
self.assertIsNone(rules.rule_validation(run(rules.UNKNOWN), None, NONE_BOOTS, PRESENT,
{"name": "b"}))
def test_path_and_alias(self) -> None:
self.assertIsNone(rules.rule_path(self.ENTRY, "bios.bin", rules.Opened("bios.bin", self.RID)))
@@ -204,8 +236,14 @@ class RuleTable(unittest.TestCase):
self.assertEqual(verdict.rule, "never_opened")
def test_variants(self) -> None:
self.assertIsNone(rules.rule_variants("same", ["a", "b"], self.ENTRY, self.RID))
self.assertFalse(rules.rule_variants("differs", ["b", "a"], self.ENTRY, self.RID).apply)
self.assertIsNone(rules.rule_variants([run(rules.BOOTS, "a"), run(rules.BOOTS, "b")], self.ENTRY))
verdict = rules.rule_variants([run(rules.BOOTS, "b"), run(rules.HANG, "a")], self.ENTRY)
self.assertEqual((verdict.value, verdict.apply), (["a", "b"], False))
def test_every_settled_field_can_carry_evidence(self) -> None:
schema = json.loads((REPO_ROOT / "schemas" / "emulator.schema.json").read_text())
evidence = schema["properties"]["files"]["items"]["properties"]["evidence"]["properties"]
self.assertEqual(set(rules.SETTLED_FIELDS), set(evidence))
def test_agreement_and_evidence(self) -> None:
self.assertTrue(rules.agrees({"name": "a"}, rules.Verdict("r", "hle_fallback", False, "", ())))
@@ -213,6 +251,22 @@ class RuleTable(unittest.TestCase):
self.assertTrue(rules.agrees(self.ENTRY, rules.Verdict("r", "aliases", ["Bios.bin"], "", ())))
merged = rules.merge_evidence({"required": ["x"]}, rules.Verdict("r", "required", True, "", ("y", "x")))
self.assertEqual(merged, {"required": ["x", "y"]})
# An id a frame comparison wrote no longer proves the field.
merged = rules.merge_evidence({"required": ["old"], "path": ["p"]},
rules.Verdict("r", "required", True, "", ("new",)),
keep=lambda rid: rid != "old")
self.assertEqual(merged, {"path": ["p"], "required": ["new"]})
def test_reference_candidates(self) -> None:
def rep(hashes: list[str]) -> dict:
return {"observables": {"frame_hashes": [[i * 10, h] for i, h in enumerate(hashes)],
"uniform_frames": ["black"]}}
record = {"variants": [{"repetitions": [
rep(["black"] * 4 + ["logo"] * 3 + ["flash"] + ["title"] * 5),
rep(["black"] * 5 + ["logo"] * 3 + ["title"] * 3)]}]}
self.assertEqual(campaign.reference_candidates(record),
[{"sha1": "logo", "first_frame": 40, "samples": 3},
{"sha1": "title", "first_frame": 80, "samples": 5}])
class ProfileEditor(unittest.TestCase):
@@ -286,6 +340,11 @@ class FakeHost(campaign.Host):
return result
def screen(base: int) -> str:
"""The sha1 of a frame of FAKE_CORE: eight 16-bit pixels from base up."""
return hashlib.sha1(struct.pack("<8H", *range(base, base + 8))).hexdigest()
class Workspace(unittest.TestCase):
def setUp(self) -> None:
TMP.mkdir(parents=True, exist_ok=True)
@@ -309,9 +368,17 @@ class Workspace(unittest.TestCase):
"name": "Fake Game (World)", "catalog": "no-intro", "reason": "a test",
"frames": 12, "frame_hash_every": 2}]}}}), encoding="utf-8")
self.game = self.tmp / "content" / "fakesys" / "Fake Game (World)"
self.oracle = self.tmp / "oracle.yml"
self.oracle.write_text(yaml.safe_dump({
"error_patterns": [], "cores": {}, "content": [{
"name": "Fake Game (World)", "sha1": hashlib.sha1(b"GAME").hexdigest(),
"references": {"Fake": {"recorded_from": "2026-10-27-000000000000", "frames": [
{"sha1": screen(1), "stage": "bios", "shows": "the fake logo"},
{"sha1": screen(20), "stage": "game", "shows": "the fake title"}]}}}]}),
encoding="utf-8")
self.paths = campaign.Paths(root=self.root, home=self.tmp / "home",
content=self.tmp / "content", db=self.root / "database.json",
content_file=self.content_file)
content_file=self.content_file, oracle=self.oracle)
def tearDown(self) -> None:
shutil.rmtree(self.tmp, ignore_errors=True)
@@ -333,13 +400,30 @@ class Workspace(unittest.TestCase):
class StateAndResume(Workspace):
def test_should_run(self) -> None:
self.assertTrue(campaign.should_run(None, "a", "d"))
done = {"status": "done", "core_sha256": "a", "profile_digest": "d"}
done = {"status": "done", "core_sha256": "a", "profile_digest": "d",
"record_version": mr.RECORD_VERSION, "oracle_sha256": ""}
self.assertFalse(campaign.should_run(done, "a", "d"))
# A record from before the verdicts, or judged against another oracle, runs again.
self.assertTrue(campaign.should_run({**done, "record_version": 3}, "a", "d"))
self.assertTrue(campaign.should_run(done, "a", "d", "f" * 64))
self.assertTrue(campaign.should_run(done, "b", "d"))
self.assertTrue(campaign.should_run(done, "a", "e"))
self.assertTrue(campaign.should_run({**done, "status": "pending"}, "a", "d"))
self.assertFalse(campaign.should_run({**done, "status": "failed"}, "a", "d"))
def test_only_its_own_oracle_entries_make_a_check_run_again(self) -> None:
key = [hashlib.sha1(b"GAME").hexdigest(), "Fake"]
before = self.make().oracle_digest(key)
data = yaml.safe_load(self.oracle.read_text())
data["content"][0]["references"]["Other"] = {"recorded_from": "2026-10-27-000000000000",
"frames": [{"sha1": "a" * 40, "stage": "game",
"shows": "x"}]}
self.oracle.write_text(yaml.safe_dump(data), encoding="utf-8")
self.assertEqual(self.make().oracle_digest(key), before)
data["cores"] = {"Fake": {"error_patterns": [{"pattern": "BIOS", "reason": "r"}]}}
self.oracle.write_text(yaml.safe_dump(data), encoding="utf-8")
self.assertNotEqual(self.make().oracle_digest(key), before)
def test_evidence_does_not_change_the_digest(self) -> None:
profile = yaml.safe_load(PROFILE)
before = campaign.profile_digest(profile)
@@ -752,8 +836,14 @@ class Findings(Workspace):
def entry(self, index: int = 0) -> dict:
return yaml.safe_load(self.profile.read_text())["files"][index]
def none(self, verdict: str) -> rules.Run:
return rules.Run(verdict, self.RID, "none")
def present(self) -> rules.Run:
return rules.Run(rules.BOOTS, self.RID, "bios.bin", ("game",))
def test_a_settled_field_is_written_with_its_evidence(self) -> None:
verdicts = rules.rule_bios_need(rules.Boot(rules.BOOTS, "shown", 4), self.entry(), self.RID)
verdicts = rules.rule_need(self.none(rules.BOOTS), self.present(), self.entry())
self.c.settle("fake", self.content, self.core, 0, self.entry(), verdicts)
entry = self.entry()
self.assertEqual(entry["hle_fallback"], True)
@@ -767,7 +857,7 @@ class Findings(Workspace):
self.assertEqual(len(self.lines()), 2)
def test_an_agreeing_run_adds_evidence_only(self) -> None:
verdicts = rules.rule_bios_need(rules.Boot(rules.FAILS, "nothing"), self.entry(), self.RID)
verdicts = rules.rule_need(self.none(rules.HANG), self.present(), self.entry())
self.c.settle("fake", self.content, self.core, 0, self.entry(), verdicts)
entry = self.entry()
self.assertEqual((entry["required"], entry["hle_fallback"]), (True, False))
@@ -775,13 +865,22 @@ class Findings(Workspace):
self.assertEqual(self.lines(), [])
def test_a_later_agreement_resolves_the_open_finding(self) -> None:
(verdict,) = rules.rule_bios_need(rules.Boot(rules.INCONCLUSIVE, "?"), self.entry(), self.RID)
(verdict,) = rules.rule_need(self.none(rules.UNKNOWN), self.present(), self.entry())
self.c.settle("fake", self.content, self.core, 0, self.entry(), [verdict])
self.assertEqual(self.lines()[-1]["status"], "open")
later = rules.Verdict("inconclusive", "hle_fallback", False, "agrees now", ("2026-10-28-000000000000",))
self.c.settle("fake", self.content, self.core, 0, self.entry(), [later])
self.assertEqual([line["status"] for line in self.lines()], ["open", "resolved"])
def test_new_evidence_writes_the_finding_again(self) -> None:
verdict = rules.Verdict("unsettled", "hle_fallback", None, "x", (self.RID,))
self.c.settle("fake", self.content, self.core, 0, self.entry(), [verdict])
self.c.settle("fake", self.content, self.core, 0, self.entry(), [verdict])
later = rules.Verdict("unsettled", "hle_fallback", None, "x", ("2026-10-28-000000000000",))
self.c.settle("fake", self.content, self.core, 0, self.entry(), [later])
self.assertEqual([line["evidence"] for line in self.lines()],
[[self.RID], ["2026-10-28-000000000000"]])
def test_never_opened_is_flagged(self) -> None:
verdict = rules.rule_never_opened(self.entry(1), [self.RID], "Fake Game (World)")
self.c.settle("fake", self.content, self.core, 1, self.entry(1), [verdict])
@@ -789,7 +888,7 @@ class Findings(Workspace):
self.assertNotIn("evidence", self.entry(1))
def test_finding_lines_validate(self) -> None:
verdicts = rules.rule_bios_need(rules.Boot(rules.BOOTS, "shown", 4), self.entry(), self.RID)
verdicts = rules.rule_need(self.none(rules.BOOTS), self.present(), self.entry())
self.c.settle("fake", self.content, self.core, 0, self.entry(), verdicts)
self.c.write_run_line(self.c.current)
try:
@@ -802,7 +901,7 @@ class Findings(Workspace):
self.assertEqual(list(Draft202012Validator(schema).iter_errors(line)), [], name)
def test_the_batch_commit_plan(self) -> None:
verdicts = rules.rule_bios_need(rules.Boot(rules.BOOTS, "shown", 4), self.entry(), self.RID)
verdicts = rules.rule_need(self.none(rules.BOOTS), self.present(), self.entry())
self.c.settle("fake", self.content, self.core, 0, self.entry(), verdicts)
self.c.current.touched.add(mr.records_path("fake"))
plan = self.c.plan_commits(set())
@@ -819,6 +918,37 @@ class Findings(Workspace):
self.assertIn("would commit 'chore: add campaign measurements'", out.getvalue())
class ContentFile(Workspace):
def test_a_content_list_can_be_named(self) -> None:
other = self.tmp / "other.yml"
other.write_text(yaml.safe_dump({"systems": {"fake-system": {
"romfetch": "fakesys", "content": [{"name": "Other Game (Japan)", "catalog": "redump",
"reason": "r"}]}}}), encoding="utf-8")
out = io.StringIO()
with unittest.mock.patch.object(campaign.Paths, "default", return_value=self.paths), \
contextlib.redirect_stdout(out):
self.assertEqual(campaign.main(["run", "--dry-run", "--content-file", str(other)]), 0)
self.assertIn("Other Game (Japan)", out.getvalue())
class InstallTimer(unittest.TestCase):
def test_writes_the_units_and_enables_only_when_asked(self) -> None:
calls = []
real_run = subprocess.run
def fake_run(argv: list[str], **kwargs: object) -> subprocess.CompletedProcess:
if "install-timers" not in argv:
return real_run(argv, **kwargs)
calls.append(argv)
return subprocess.CompletedProcess(argv, 0)
with unittest.mock.patch.object(campaign.subprocess, "run", fake_run):
self.assertEqual(campaign.main(["install-timer"]), 0)
self.assertEqual(campaign.main(["install-timer", "--enable"]), 0)
self.assertEqual([argv[2:] for argv in calls],
[["install-timers"], ["install-timers", "--enable"]])
self.assertTrue(calls[0][1].endswith("scripts/autorun.py"))
class Registry(unittest.TestCase):
def test_no_profile_takes_a_campaign_file_name(self) -> None:
stems = {p.stem for p in (REPO_ROOT / "emulators").glob("*.yml")}
@@ -942,12 +1072,19 @@ class FakeCorePasses(Workspace):
isolations = {rep["isolation"] for r in records for v in r["variants"] for rep in v["repetitions"]}
self.assertEqual(isolations, {campaign.core_probe.SANDBOX})
kinds = sorted(r["subject"].split("-")[0] for r in records)
self.assertEqual(kinds, ["alias", "bench", "boot", "files"])
boot = next(r for r in records if r["subject"].startswith("boot"))
alias = next(r for r in records if r["subject"].startswith("alias"))
self.assertEqual(kinds, ["alias", "files", "negative", "none"])
by_kind = {r["subject"].split("-")[0]: r for r in records}
self.assertEqual(by_kind["files"]["variants"][0]["verdict"], "boots")
self.assertEqual(by_kind["none"]["variants"][0]["verdict_evidence"]["stages"], ["game"])
self.assertEqual(by_kind["negative"]["check"]["result"]["verdicts"],
{"bios.bin": "boots", "bios.bin-zeros-4": "hang",
"bios.bin-head-2-of-bios.bin": "boots"})
entry = yaml.safe_load((self.root / "emulators" / "fake.yml").read_text())["files"][0]
self.assertEqual(entry["hle_fallback"], True)
self.assertEqual(entry["evidence"], {"aliases": [alias["id"]], "hle_fallback": [boot["id"]]})
self.assertEqual(entry["validation"], ["size"])
self.assertEqual(entry["evidence"], {
"aliases": [by_kind["alias"]["id"]], "hle_fallback": [by_kind["none"]["id"]],
"validation": [by_kind["none"]["id"], by_kind["negative"]["id"]]})
statuses = {(f["field"], f["status"]) for f in mr.read_campaign(self.root, mr.FINDINGS)}
self.assertEqual(statuses, {("hle_fallback", "applied"), ("required", "open"),
("aliases", "applied")})
@@ -966,9 +1103,23 @@ class FakeCorePasses(Workspace):
with rebuilt.open("ab") as handle:
handle.write(b"\0")
third = self.passing("hle", core=rebuilt)
# BIOS.BIN is declared now, so no alias run follows the boot test.
# BIOS.BIN is declared now, so no alias run follows.
self.assertEqual(len(third.run(set(), None).records), 3)
def test_a_size_check_the_profile_lacks_is_written(self) -> None:
profile = self.root / "emulators" / "fake.yml"
profile.write_text(PROFILE.replace(" validation: [size]\n", ""), encoding="utf-8")
self.passing("hle").run(set(), None)
entry = yaml.safe_load(profile.read_text())["files"][0]
self.assertEqual(entry["validation"], ["size"])
applied = {f["field"] for f in mr.read_campaign(self.root, mr.FINDINGS) if f["status"] == "applied"}
self.assertIn("validation", applied)
def test_bench_runs_only_when_asked(self) -> None:
self.passing("plain", bench=True).run(set(), None)
subjects = [s.record["subject"] for s in mr.read_records(self.root)]
self.assertEqual(sum(s.startswith("bench") for s in subjects), 1)
def test_no_stand_in_settles_required_and_finds_an_alias(self) -> None:
c = self.passing()
c.run(set(), None)
@@ -987,9 +1138,59 @@ class FakeCorePasses(Workspace):
self.assertEqual(left.stdout, b"")
checks = c.state["checks"]["fake"]
self.assertTrue(checks)
self.assertEqual({entry["status"] for entry in checks.values()}, {"failed"})
self.assertEqual({entry["reason"] for entry in checks.values()}, {"timeout"})
self.assertEqual(mr.read_records(self.root), [])
# A run killed after its timeout is a record whose verdict is a hang.
self.assertEqual({entry["status"] for entry in checks.values()}, {"done"})
records = [s.record for s in mr.read_records(self.root)]
self.assertTrue(records)
self.assertEqual({v["verdict"] for r in records for v in r["variants"]}, {"hang"})
self.assertEqual({rep["verdict_evidence"]["rule"] for r in records for v in r["variants"]
for rep in v["repetitions"]}, {"timeout"})
def test_two_passes_interleave_their_runs(self) -> None:
"""Each core_probe takes the host lock for its own run: a pass never
holds it between runs, so a second pass runs between them."""
import threading
import time
spans: dict[str, list[tuple[float, float]]] = {"a": [], "b": []}
other = Workspace(methodName="setUp")
other.setUp()
self.addCleanup(other.tearDown)
passes = []
for name, workspace in (("a", self), ("b", other)):
c = FakeCorePasses.passing(workspace, "hle") if workspace is self else self.passing_in(workspace)
real = c.host.run
def timed(argv: list[str], *args: object, _name: str = name, _real=real, **kwargs: object):
start = time.monotonic()
try:
return _real(argv, *args, **kwargs)
finally:
spans[_name].append((start, time.monotonic()))
c.host.run = timed
passes.append(c)
threads = [threading.Thread(target=c.run, args=(set(), None)) for c in passes]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
ends = {name: sorted(end for _, end in runs) for name, runs in spans.items()}
self.assertGreater(len(ends["a"]), 2)
self.assertGreater(len(ends["b"]), 2)
# Neither pass finished all its runs before the other started finishing its own.
self.assertLess(ends["b"][0], ends["a"][-1])
self.assertLess(ends["a"][0], ends["b"][-1])
def passing_in(self, workspace: Workspace) -> campaign.Campaign:
workspace.put_game()
host = campaign.Host(loadavg=lambda: (0.0, 0.0, 0.0), free_gb=lambda path: 500.0,
cpu_count=1_000_000)
c = campaign.Campaign(workspace.paths, campaign.Settings(
check_repeat=2, probe_timeout=30, delays=(1,), echo=False), host,
lock_path=workspace.tmp / "auto.lock")
so = self.cores["hle"]
c.unit_cores = lambda *a, **k: [campaign.Core("fake", so, campaign.file_sha256(so))]
return c
def test_missing_content_leaves_the_checks_pending(self) -> None:
c = self.passing(romfetch=str(self.tmp / "no-romfetch"))
+285 -1
View File
@@ -9,6 +9,7 @@ from __future__ import annotations
import argparse
import contextlib
import hashlib
import io
import json
import os
@@ -20,6 +21,7 @@ import tempfile
import unittest
import unittest.mock
from pathlib import Path
from typing import ClassVar
REPO_ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(REPO_ROOT / "scripts"))
@@ -42,6 +44,7 @@ FAKE_CORE = r"""
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
struct retro_system_info { const char *n, *v, *e; bool full, block; };
struct retro_game_geometry { unsigned bw, bh, mw, mh; float a; };
struct retro_system_timing { double fps, rate; };
@@ -78,11 +81,15 @@ bool retro_load_game(const void *g) {
if (env(27, &cb)) {
logger = cb;
cb.log(1, "card %s byte %d\n", f ? "present" : "absent", (int)card);
cb.log(1, "tag %s\n", tag ? tag : "unset"); }
cb.log(1, "tag %s\n", tag ? tag : "unset");
if (card == 0xEE) cb.log(3, "BIOS not found: card.bin\n"); }
return true; }
void retro_unload_game(void) {}
void retro_run(void) {
int16_t s[4] = {1, 2, 3, 4};
const char *end = getenv("CORE_PROBE_TEST_END");
if (end && frames == 1 && !strcmp(end, "crash")) { if (logger.log) logger.log(3, "about to fall\n"); raise(SIGSEGV); }
if (end && frames == 1 && !strcmp(end, "hang")) for (;;) {}
if (frames++ == 0 && logger.log) logger.log(1, "ports %u\n", ports);
input(0, 1, 0, 8);
for (int i = 0; i < 8; i++) pixels[i] = card;
@@ -177,6 +184,187 @@ class ParsingTests(unittest.TestCase):
self.assertEqual([p.name for p in core_probe.cue_tracks(cue)], ["a b.bin", "c.bin"])
def frames(*pairs: tuple[int, str]) -> list[list]:
return [[frame, digest] for frame, digest in pairs]
class OracleTests(unittest.TestCase):
"""judge() turns a repetition into a verdict from positive evidence only."""
TITLE, LOGO, ERROR, BLACK, OTHER = ("1" * 40, "2" * 40, "3" * 40, "4" * 40, "5" * 40)
ORACLE: ClassVar[dict] = {"references": [{"sha1": "2" * 40, "stage": "bios", "shows": "the console logo"},
{"sha1": "1" * 40, "stage": "game", "shows": "the title"}],
"error_patterns": [r"BIOS not found"],
"error_screens": [{"sha1": "3" * 40, "shows": "the core's missing-BIOS message"}]}
def rep(self, hashes: list, logs: list[str] = (), uniform: list[str] = (), loaded: bool = True,
**extra: object) -> dict:
return {"loaded": loaded, "library_name": "Fake", "frames": 100, "warmup": 0,
"logs": [{"frame": 0, "level": "error", "text": text} for text in logs],
"observables": {"frame_hashes": hashes, "uniform_frames": list(uniform)}, **extra}
def test_a_reference_frame_is_a_boot_with_its_stages(self) -> None:
verdict, evidence = core_probe.judge(
self.rep(frames((0, self.BLACK), (10, self.LOGO), (20, self.TITLE)),
logs=["BIOS not found"]), self.ORACLE)
self.assertEqual(verdict, "boots")
self.assertEqual((evidence["rule"], evidence["frame"], evidence["stages"]),
("reference_frame", 20, ["bios", "game"]))
def test_a_bios_load_line_stands_for_hidden_bios_screens(self) -> None:
oracle = {**self.ORACLE, "bios_patterns": [r"^found US BIOS file"]}
verdict, evidence = core_probe.judge(
self.rep(frames((0, self.TITLE)), logs=["found US BIOS file, crc32 1: x"]), oracle)
self.assertEqual((verdict, evidence["stages"]), ("boots", ["bios", "game"]))
self.assertEqual(core_probe.judge(self.rep(frames((0, self.TITLE))), oracle)[1]["stages"], ["game"])
def test_the_bios_screens_alone_are_not_a_boot(self) -> None:
# A console that shows its logo and then refuses the disc never reached the game.
verdict, evidence = core_probe.judge(
self.rep(frames((0, self.LOGO), (10, self.BLACK), (20, self.BLACK)), uniform=[self.BLACK]),
self.ORACLE)
self.assertEqual((verdict, evidence["rule"], evidence["stages"]), ("hang", "uniform_tail", ["bios"]))
self.assertIn("no screen of the game", evidence["detail"])
def test_an_error_pattern_or_screen_without_a_reference_is_a_bios_error(self) -> None:
verdict, evidence = core_probe.judge(
self.rep(frames((0, self.OTHER)), logs=["x", "BIOS not found: scph5501.bin"]), self.ORACLE)
self.assertEqual((verdict, evidence["rule"], evidence["log"]),
("bios_error", "error_pattern", "BIOS not found: scph5501.bin"))
verdict, evidence = core_probe.judge(self.rep(frames((0, self.ERROR))), self.ORACLE)
self.assertEqual((verdict, evidence["rule"], evidence["frame"]), ("bios_error", "error_screen", 0))
self.assertEqual(core_probe.judge(self.rep([], logs=["BIOS not found"], loaded=False),
self.ORACLE)[0], "bios_error")
def test_process_status_decides_crash_and_hang_first(self) -> None:
crashed = self.rep(frames((0, self.TITLE)), exit={"status": -11, "signal": "SIGSEGV"})
self.assertEqual(core_probe.judge(crashed, self.ORACLE)[0], "crash")
killed = self.rep([], exit={"status": None, "signal": "SIGKILL", "timeout_s": 5})
self.assertEqual(core_probe.judge(killed, self.ORACLE), (
"hang", {"rule": "timeout", "detail": "killed after 5 s", "exit_status": None,
"signal": "SIGKILL"}))
def test_a_one_colour_second_half_is_a_hang(self) -> None:
run = self.rep(frames((0, self.OTHER), (10, self.OTHER), (20, self.BLACK), (30, self.BLACK)),
uniform=[self.BLACK])
self.assertEqual(core_probe.judge(run, self.ORACLE)[1]["rule"], "uniform_tail")
lit = self.rep(frames((0, self.BLACK), (10, self.BLACK), (20, self.OTHER), (30, self.BLACK)),
uniform=[self.BLACK])
self.assertEqual(core_probe.judge(lit, self.ORACLE)[0], "unknown")
def test_frames_that_differ_are_never_a_boot(self) -> None:
verdict, evidence = core_probe.judge(self.rep(frames((0, self.OTHER), (10, "6" * 40))),
self.ORACLE)
self.assertEqual((verdict, evidence["rule"]), ("unknown", "no_evidence"))
verdict, evidence = core_probe.judge(self.rep(frames((0, self.TITLE))),
{**self.ORACLE, "references": []})
self.assertEqual(verdict, "unknown")
self.assertIn("no reference frame is known", evidence["detail"])
self.assertEqual(core_probe.judge(self.rep([], loaded=False), self.ORACLE)[0], "unknown")
def test_a_variant_needs_every_repetition_to_agree(self) -> None:
boot = {"verdict": "boots", "verdict_evidence": {"rule": "reference_frame", "detail": "d",
"frame": 3, "stages": ["game"]}}
verdict, evidence = core_probe.variant_verdict([boot, boot])
self.assertEqual((verdict, evidence["rule"], evidence["stages"]),
("boots", "repetitions_agree", ["game"]))
hang = {"verdict": "hang", "verdict_evidence": {"rule": "uniform_tail", "detail": "d"}}
verdict, evidence = core_probe.variant_verdict([boot, hang])
self.assertEqual((verdict, evidence["repetitions"]), ("unknown", ["boots", "hang"]))
def test_oracle_entries_are_picked_by_content_and_core(self) -> None:
data = {"error_patterns": [{"pattern": "shared"}],
"cores": {"Fake": {"error_patterns": [{"pattern": "own"}],
"error_screens": [{"sha1": self.ERROR, "shows": "s"}]}},
"content": [{"name": "disc", "sha1": "a" * 40, "references": {
"Fake": {"frames": [{"sha1": self.TITLE, "stage": "game", "shows": "t"}]},
"Other": {"frames": [{"sha1": self.LOGO, "stage": "bios", "shows": "l"}]}}}]}
picked = core_probe.oracle_for(data, "a" * 40, "Fake")
self.assertEqual(picked["references"], [{"sha1": self.TITLE, "stage": "game", "shows": "t"}])
self.assertEqual(picked["error_patterns"], ["shared", "own"])
self.assertEqual(picked["bios_patterns"], [])
self.assertEqual(core_probe.oracle_for(data, "b" * 40, "Fake")["references"], [])
self.assertEqual(core_probe.oracle_for(data, "a" * 40, "Nobody")["error_patterns"], ["shared"])
def test_every_reference_judges_its_own_record_a_boot(self) -> None:
"""Each reference block names the run it was taken from: judged
again with the oracle as it stands, every repetition of that run
boots, so a frame copied wrong or a stage mislabelled fails here."""
data, _ = core_probe.load_oracle(core_probe.DEFAULT_ORACLE)
records = {s.record["id"]: s.record for s in measurement_records.read_records(REPO_ROOT)}
checked = 0
for item in data.get("content") or ():
for library, block in item["references"].items():
record = records.get(block["recorded_from"])
self.assertIsNotNone(record, f"{item['name']} on {library}: {block['recorded_from']}")
self.assertEqual(record["inputs"]["content"]["sha1"], item["sha1"], item["name"])
# A check names the variant that ran the full set, a run has one.
label = block.get("variant")
chosen = next(v for v in record["variants"] if v["label"] == label) if label \
else record["variants"][0]
for rep in chosen["repetitions"]:
oracle = core_probe.oracle_for(data, item["sha1"], rep["library_name"])
verdict, evidence = core_probe.judge(rep, oracle)
self.assertEqual(verdict, "boots", f"{item['name']} on {library}: {evidence}")
checked += 1
self.assertGreaterEqual(checked, 2 * 14)
def test_the_repository_error_patterns_and_screens(self) -> None:
data, _ = core_probe.load_oracle(core_probe.DEFAULT_ORACLE)
saturn = core_probe.oracle_for(data, None, "Beetle Saturn")
for line in ('Cannot open BIOS file "/system/sega_101.bin".',
'BIOS file "/system/sega_101.bin" is of an incorrect size.',
'BIOS file "/system/sega_101.bin" could not be fully read (short or failed read).'):
rep = {"loaded": False, "logs": [{"frame": 0, "level": "error", "text": line}]}
self.assertEqual(core_probe.judge(rep, saturn)[0], "bios_error", line)
menu = {"Beetle PSX": "dfbfc299250c0983f86bbf951efd187441306d92",
"Beetle PSX HW": "dfbfc299250c0983f86bbf951efd187441306d92",
"SwanStation": "167fb7b6527e295b12dca5806a29856f5f31d401",
"pcsx2": "46329c633ea7d0b63349261e4aab169e4f44d3f6"}
for library, sha1 in menu.items():
rep = {"loaded": True, "logs": [], "frames": 100, "warmup": 0,
"observables": {"frame_hashes": [[90, sha1]], "uniform_frames": []}}
verdict, evidence = core_probe.judge(rep, core_probe.oracle_for(data, None, library))
self.assertEqual((verdict, evidence["rule"]), ("bios_error", "error_screen"), library)
# The PlayStation cores fall back to a built-in BIOS: nothing they log is an error.
for library in ("Beetle PSX", "SwanStation", "PCSX-ReARMed", "PCSX1"):
self.assertEqual(core_probe.oracle_for(data, None, library)["error_patterns"], [])
def test_the_repository_oracle_is_well_formed(self) -> None:
import yaml
data = yaml.safe_load(core_probe.DEFAULT_ORACLE.read_text(encoding="utf-8"))
patterns = list(data.get("error_patterns") or ())
for core in (data.get("cores") or {}).values():
patterns += (core.get("error_patterns") or []) + (core.get("bios_patterns") or [])
for screen in core.get("error_screens") or ():
self.assertRegex(screen["sha1"], r"^[0-9a-f]{40}$")
for pattern in patterns:
self.assertTrue(pattern.get("source_ref") or pattern.get("reason"), pattern)
core_probe.re.compile(pattern["pattern"])
for item in data.get("content") or ():
self.assertRegex(item["sha1"], r"^[0-9a-f]{40}$")
for block in item["references"].values():
self.assertRegex(block["recorded_from"], r"^\d{4}-\d{2}-\d{2}-[0-9a-f]{12}$")
stages = {frame["stage"] for frame in block["frames"]}
self.assertIn("game", stages, item["name"])
for frame in block["frames"]:
self.assertRegex(frame["sha1"], r"^[0-9a-f]{40}$")
self.assertIn(frame["stage"], ("bios", "game"))
self.assertTrue(frame["shows"])
def test_made_files(self) -> None:
zeros = core_probe.Synthetic.parse("@zeros:16")
self.assertEqual((zeros.label("bios.bin"), zeros.source), ("bios.bin-zeros-16", None))
head = core_probe.Synthetic.parse("@head:8:/x/scph5501.bin")
self.assertEqual(head.label("bios.bin"), "bios.bin-head-8-of-scph5501.bin")
for bad in ("@zeros:", "@zeros:8:/x", "@head:8", "@ones:8", "@head:x:/y"):
with self.assertRaises(argparse.ArgumentTypeError):
core_probe.Synthetic.parse(bad)
self.assertEqual(core_probe.exit_description(-11), {"status": -11, "signal": "SIGSEGV"})
self.assertEqual(core_probe.exit_description(139), {"status": 139, "signal": "SIGSEGV"})
self.assertEqual(core_probe.exit_description(1), {"status": 1, "signal": None})
class ResultTests(unittest.TestCase):
@staticmethod
def variant(label: str, value: str, loaded: bool = True) -> dict:
@@ -290,6 +478,102 @@ class FakeCoreTests(unittest.TestCase):
schema = json.loads((REPO_ROOT / "schemas" / "core-probe-record.schema.json").read_text())
self.assertEqual(list(Draft202012Validator(schema).iter_errors(line)), [])
def oracle_file(self) -> Path:
title = hashlib.sha1(struct.pack("<8H", *[1] * 8)).hexdigest()
content = self.tmp / "game.bin"
content.write_bytes(b"game")
path = self.tmp / "oracle.yml"
path.write_text(
"error_patterns:\n - pattern: 'BIOS not found'\n reason: test\n"
"cores:\n Fake:\n error_patterns: []\n error_screens: []\n"
f"content:\n - name: game\n sha1: {core_probe.file_digest(content)}\n"
" references:\n Fake:\n recorded_from: 2026-10-27-000000000000\n"
f" frames:\n - sha1: {title}\n stage: game\n"
" shows: card one\n", encoding="utf-8")
return path
def test_verdicts_of_a_negative_check(self) -> None:
oracle = self.oracle_file()
error = self.tmp / "error.bin"
error.write_bytes(b"\xee")
code, record = self.probe(["check", "--core", str(self.core), "--frames", "4",
"--frame-hash-every", "1", "--content", str(self.tmp / "game.bin"),
"--oracle", str(oracle), "--vary", "card.bin=",
"--vary", f"card.bin={self.cards[0]}", "--vary", f"card.bin={error}",
"--vary", "card.bin=@zeros:1",
"--vary", f"card.bin=@head:0:{self.cards[0]}",
"--observable", "frame_hashes", "--claim", "c", "--method", "m",
"--no-trace", "--repeat", "2"])
self.assertEqual(code, 0)
verdicts = record["check"]["result"]["verdicts"]
self.assertEqual(verdicts, {"card.bin-absent": "hang", "card0.bin": "boots",
"error.bin": "bios_error", "card.bin-zeros-1": "hang",
"card.bin-head-0-of-card0.bin": "hang"})
boot = record["variants"][1]
self.assertEqual((boot["verdict_evidence"]["rule"], boot["verdict_evidence"]["stages"]),
("repetitions_agree", ["game"]))
self.assertEqual(boot["repetitions"][0]["verdict_evidence"]["rule"], "reference_frame")
self.assertEqual(record["variants"][3]["system_files"],
{"card.bin": hashlib.sha1(b"\x00").hexdigest()})
self.assertEqual(record["inputs"]["oracle"]["error_patterns"], ["BIOS not found"])
self.assertEqual(record["record_version"], 4)
self.assert_schema(record)
def test_a_crash_and_a_hang_are_verdicts(self) -> None:
oracle = self.oracle_file()
code, record = self.probe(["run", "--core", str(self.core), "--frames", "4",
"--frame-hash-every", "1", "--oracle", str(oracle),
"--env", "CORE_PROBE_TEST_END=crash"])
self.assertEqual(code, 0)
crashed = record["variants"][0]
self.assertEqual((crashed["verdict"], crashed["repetitions"][0]["exit"]["signal"]),
("crash", "SIGSEGV"))
self.assertEqual(crashed["repetitions"][0]["logs"][-1]["text"], "about to fall")
self.assertEqual(crashed["repetitions"][0]["observables"]["frame_hashes"][0][0], 0)
self.assert_schema(record)
code, record = self.probe(["run", "--core", str(self.core), "--frames", "4",
"--frame-hash-every", "1", "--oracle", str(oracle), "--timeout", "3",
"--env", "CORE_PROBE_TEST_END=hang", "--no-trace"])
self.assertEqual(code, 0)
self.assertEqual((record["variants"][0]["verdict"],
record["variants"][0]["repetitions"][0]["verdict_evidence"]["rule"]),
("hang", "timeout"))
def assert_schema(self, record: dict) -> None:
try:
from jsonschema import Draft202012Validator
except ImportError:
return
schema = json.loads((REPO_ROOT / "schemas" / "core-probe-record.schema.json").read_text())
sealed = measurement_records.seal({**record, "emulator": "fake", "subject": "s"})
self.assertEqual([e.message for e in Draft202012Validator(schema).iter_errors(sealed)], [])
def test_a_run_waits_for_the_host_lock_and_frees_it(self) -> None:
import fcntl
import time
lock = self.tmp / "host.lock"
argv = [sys.executable, str(REPO_ROOT / "scripts" / "core_probe.py"), "run", "--core",
str(self.core), "--frames", "1", "--no-trace", "--work-dir", str(self.tmp / "work")]
env = {**os.environ, "RETROBIOS_PROBE_LOCK": str(lock)}
with lock.open("a") as held:
fcntl.flock(held, fcntl.LOCK_EX)
waiting = subprocess.Popen(argv, env=env, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE,
text=True)
time.sleep(1.5)
self.assertIsNone(waiting.poll(), "the run went ahead while another held the lock")
# A caller that holds the lock for this run says so.
held_run = subprocess.run(argv, env={**env, "RETROBIOS_PROBE_LOCK_HELD": "1"},
capture_output=True, text=True, timeout=60, check=False)
self.assertEqual(held_run.returncode, 0, held_run.stderr)
fcntl.flock(held, fcntl.LOCK_UN)
_, err = waiting.communicate(timeout=60)
self.assertEqual(waiting.returncode, 0, err)
self.assertIn("another measurement is running", err)
# Released at the end of the run: the lock is free again.
with lock.open("a") as again:
fcntl.flock(again, fcntl.LOCK_EX | fcntl.LOCK_NB)
def test_second_run_is_appended_beside_the_first(self) -> None:
record_dir = checkout(self.tmp / "appended")
argv = ["run", "--core", str(self.core), "--frames", "1", "--no-trace", "--max-load", "1000",
+185 -23
View File
@@ -43,16 +43,21 @@ def repetition(value: str, frames: int = 3) -> dict:
"last_frame_size": [4, 2], "tracing": "strace", "input_queries": 3, "input_pressed": 1,
"files_opened": [{"path": "card.bin", "sha1_after": SHA1, "sha1_staged": SHA1}],
"files_probed_absent": [],
"verdict": "boots",
"verdict_evidence": {"rule": "reference_frame", "detail": "reached the title", "frame": 150,
"sha1": value, "stages": ["game"]},
}
def full_record(emulator: str, subject: str, when: str, kind: str = "check",
values: tuple[str, ...] = ("1" * 40, "2" * 40), observable: str = "video_sha1") -> dict:
variants = [{"label": f"v{i}", "system_files": {"card.bin": SHA1},
"repetitions": [repetition(v), repetition(v)], "flags": []}
"repetitions": [repetition(v), repetition(v)], "flags": [], "verdict": "boots",
"verdict_evidence": {"rule": "repetitions_agree", "detail": "both boot",
"repetitions": ["boots", "boots"]}}
for i, v in enumerate(values)]
record = {
"record_version": mr.RECORD_VERSION, "emulator": emulator, "subject": subject,
"record_version": 4, "emulator": emulator, "subject": subject,
"supersedes": None, "kind": kind, "recorded_at": when,
"core": {"file": "fake_libretro.so", "sha256": SHA256, "repo": "https://example.org/fake",
"commit": "c" * 40, "build_command": "make", "compiler": ["GCC 13"],
@@ -67,7 +72,10 @@ def full_record(emulator: str, subject: str, when: str, kind: str = "check",
"options": {"fake_option": "a"}, "env": {}, "frames": 3, "warmup": 0,
"repetitions": 2 if kind == "check" else 5, "presses": [],
"observables": ["frame_sha1", "video_sha1", "audio_sha1", "state_sha1", "frame_hashes"],
"frame_hash_every": 150, "joypad_ports": 2},
"frame_hash_every": 150, "joypad_ports": 2,
"oracle": {"file": "tests/campaign/oracle.yml", "sha256": SHA256,
"references": [{"sha1": values[0], "stage": "game", "shows": "title"}],
"error_patterns": ["BIOS not found"], "error_screens": []}},
"variants": variants,
"flags": [],
}
@@ -81,7 +89,8 @@ def full_record(emulator: str, subject: str, when: str, kind: str = "check",
"observable": observable, "variable": "card.bin",
"result": {"status": "differs" if len(groups) > 1 else "same",
"statement": f"{observable} takes {len(groups)} values",
"groups": [{"value": json.loads(k), "variants": v} for k, v in groups.items()]},
"groups": [{"value": json.loads(k), "variants": v} for k, v in groups.items()],
"verdicts": {v["label"]: v["verdict"] for v in variants}},
}
else:
record["variants"] = record["variants"][:1]
@@ -211,7 +220,8 @@ class ReadAndIndex(Workspace):
keys = {"emulator", "emulator_name", "profiled", "systems", "system_names", "subject", "kind",
"claim", "method", "observable", "variable", "status", "statement", "content",
"variants", "repetitions", "flags", "date", "host", "core", "frontend_commit", "id",
"runs", "record_url", "sqlite"}
"runs", "record_url", "sqlite", "verdicts", "title", "host_short", "groups",
"proves", "timing", "setup"}
for item in index["items"]:
self.assertEqual(set(item), keys)
alpha = {i["subject"]: i for i in index["items"] if i["emulator"] == "alpha"}
@@ -225,6 +235,23 @@ class ReadAndIndex(Workspace):
written = json.loads((self.tmp / "public" / sm.INDEX_PATH).read_text())
self.assertEqual(written, index)
def test_a_frame_check_shows_its_verdicts_never_frames_that_differ(self) -> None:
record = full_record("alpha", "boot", "2026-10-06T10:00:00+00:00", observable="frame_hashes")
record["variants"][1]["verdict"] = "hang"
self.assertEqual(sm.result_of(record), ("mixed", "v0: boots. v1: hang"))
self.assertEqual([v["verdict"] for v in sm.verdicts_of(record)], ["boots", "hang"])
old = {**record, "record_version": 3,
"variants": [{k: v for k, v in variant.items() if not k.startswith("verdict")}
for variant in record["variants"]]}
status, statement = sm.result_of(old)
self.assertEqual(status, "no verdict")
self.assertNotIn("differ", statement)
# A check on another observable keeps its comparison.
self.assertEqual(sm.result_of(full_record("alpha", "c", "2026-10-06T10:00:00+00:00"))[0], "differs")
groups = sm.variant_groups(record)
self.assertEqual([(g["variant"], g["result"], g["group"]) for g in groups],
[("v0", "works", 0), ("v1", "hang", 1)])
def test_links_name_the_last_commit_that_touched_the_records(self) -> None:
first = self.repository()
(self.tree / "other.txt").write_text("x")
@@ -304,6 +331,26 @@ class ReadAndIndex(Workspace):
self.assertTrue(any("measurements/beta.jsonl:1" in e and "kind" in e for e in errors), errors)
self.assertIsNotNone(Draft202012Validator)
def test_a_version_4_record_needs_its_verdicts(self) -> None:
try:
from jsonschema import Draft202012Validator # noqa: F401
except ImportError:
self.skipTest("jsonschema is not installed")
import validate_schemas # noqa: PLC0415
lines = self.tree / mr.records_path("beta")
record = json.loads(lines.read_text())
del record["variants"][0]["verdict"]
del record["variants"][0]["repetitions"][0]["verdict_evidence"]
lines.write_text(mr.line_text(record) + "\n")
errors = validate_schemas._measurement_errors(self.tree)
self.assertTrue(any("'verdict' is a required property" in e for e in errors), errors)
self.assertTrue(any("'verdict_evidence' is a required property" in e for e in errors), errors)
old = {**record, "record_version": 3}
lines.write_text(mr.line_text(old) + "\n")
self.assertFalse(any("required property" in e
for e in validate_schemas._measurement_errors(self.tree)))
class AppendOnly(Workspace):
def setUp(self) -> None:
@@ -383,26 +430,141 @@ class SitePages(unittest.TestCase):
self.assertEqual(sm.tested_section("beetle_saturn", []), [])
text = "\n".join(sm.tested_section("beetle_saturn", [self.ITEM]))
self.assertTrue(text.startswith("## Tested\n"))
for expected in ('<span class="rb-badge rb-badge-muted">same</span>',
"**Method:** Twice per card. Every input fixed.",
"Ran on Test CPU, 12 CPUs, 2026-10-27.", "Played: disc.",
self.ITEM["record_url"], "1 flag raised", "2 runs",
"../downloads/measurements/beetle_saturn.sqlite", "../wiki/measurements.md",
"&lt;image>", '<table class="rb-entries"'):
for expected in ("same with every file", "<strong>Method:</strong> Twice per card. Every input fixed.",
"<strong>Ran on:</strong> Test CPU, 12 CPUs", self.ITEM["record_url"],
"1 flag raised", "2 runs", "downloads/measurements/beetle_saturn.sqlite",
"wiki/measurements/", "&lt;image&gt;", "1 test · last run 2026-10-27",
'<p class="rb-tested-file"><code>mpeg_card.bin</code></p>',
'class="rb-tested-legend"', "No file staged."):
self.assertIn(expected, text)
self.assertNotIn('<th scope="col">Game</th>', text)
self.assertNotIn("confirmed", text)
self.assertNotIn(" open", text)
def test_tested_block_says_shared_context_once(self) -> None:
other = {**self.ITEM, "subject": "other", "content": "cart", "status": "inconclusive",
"host": "Test CPU, 12 CPUs, load 1.5 before, 1.6 after",
"core": {**self.ITEM["core"], "commit": "f" * 40}}
text = "\n".join(sm.tested_section("beetle_saturn", [self.ITEM, other]))
self.assertEqual(text.count("Test CPU, 12 CPUs"), 1)
self.assertIn('<th scope="col">Game</th>', text)
self.assertNotIn("Played:", text)
self.assertIn(f"Core build: Beetle Saturn v1.32.1 at `{'f' * 12}`.", text)
self.assertIn("Load 1.5 before, 1.6 after.", text)
self.assertIn('<span class="rb-badge rb-badge-warning">inconclusive</span>', text)
def item(self, **values: object) -> dict:
return {**self.ITEM, "host_short": "Test CPU, Linux", **values}
def test_summary_counts(self) -> None:
items = [self.item(proves=["hle_fallback of a.bin"], open_findings=2),
self.item(id="b", subject="b", date="2026-10-28T00:00:00+00:00", open_findings=2),
self.item(id="c", kind="bench", status="measured", subject="c",
timing={"ms_per_frame": 1.5, "fps": 660.0, "stdev": 0.01})]
self.assertEqual(sm.tested_counts(items), {"tests": 3, "confirmed": 1, "open": 2, "benchmarks": 1,
"last": "2026-10-28"})
text = "\n".join(sm.tested_section("beetle_saturn", items))
self.assertIn("3 tests · 1 confirmed · 2 open · last run 2026-10-28 on Test CPU, Linux.", text)
self.assertIn("<td>1.500</td><td>660.0</td>", text)
def test_short_titles(self) -> None:
cases = [
({"subject": "mpeg-card-lunar-cr2-build", "variable": "mpeg_card.bin",
"content": "Redump: Lunar - Silver Star Story Complete (Japan), T-27904G V1.00"},
"mpeg_card.bin, Lunar (CR2 build)"),
({"subject": "negative-scph5501-bin-mednafen-psx-bust-a-move-2-arcade-edition-usa",
"variable": "scph5501.bin", "content": "Bust-A-Move 2 - Arcade Edition (USA)",
"core": {"file": "mednafen_psx_libretro.so"}},
"scph5501.bin, Bust-A-Move 2 (wrong files)"),
({"subject": "issue85-lunar-opening-movie", "variable": None,
"content": "Redump: Lunar - Silver Star Story Complete (Japan), T-27904G V1.00"},
"Lunar (issue 85 opening movie)"),
({"subject": "with-command-auth-device-and-command-get-9a211715", "variable": "mpeg_card.bin",
"content": "Redump: Lunar"},
"mpeg_card.bin, Lunar (with command auth device and get)"),
]
for item, title in cases:
self.assertEqual(sm.short_title(item), title)
self.assertEqual(sm.short_host({"cpu_model": "13th Gen Intel(R) Core(TM) i9-13900K",
"os": "Linux-6.18.54.1-microsoft-standard-WSL2-x86_64"}),
"Intel Core i9-13900K, Linux (WSL2)")
def test_rows_of_one_file_never_read_alike(self) -> None:
def item(rid: str, build: str, files: int, observable: str, clock: bool = True) -> dict:
record = {"core": {"build_command": build}, "subject": "mpeg-card-lunar", "kind": "check",
"check": {"observable": observable}, "variants": [{}] * files,
"inputs": {"options": {"beetle_saturn_mpeg_card": "enabled"},
"env": {"FAKETIME": "x"} if clock else {}}}
return self.item(id=rid, content="Redump: Lunar - Silver Star Story", setup=sm.setup_of(record))
items = [item("a", "make -j8", 11, "video_sha1"),
item("b", "make -j8 after editing cdb.c", 11, "video_sha1"),
item("c", "make -j10, with the CR2 patch to cdb.c", 3, "state:MPEG.AuthState"),
item("d", "make -j8", 11, "video_sha1", clock=False)]
titles = sm.distinct_titles(items)
self.assertEqual(titles, {
"a": "Lunar",
"b": "Lunar, patched build",
"c": "Lunar, CR2 patch, 3 files, MPEG.AuthState",
"d": "Lunar, running clock"})
self.assertEqual(len(set(titles.values())), len(items))
self.assertNotIn("...", " ".join(titles.values()))
# Alone in its file, a test is named by its game.
self.assertEqual(sm.distinct_titles(items[:1]), {"a": "Lunar"})
def test_run_output_is_text_never_markup(self) -> None:
nasty = "`code` {expr} <script>alert(1)</script> [x](javascript:alert(1)) \"q\" 'q' **b**"
item = self.item(
claim=nasty, method=nasty, statement=nasty, host=nasty, host_short=nasty, content=nasty,
variable=f"{nasty}.bin", subject="s", title=nasty, proves=[nasty], runs=2, flags=1,
core={"library": nasty, "commit": "{`<x>`}", "file": f"{nasty}_libretro.so"},
groups=[{"variant": nasty, "group": 0, "result": nasty, "absent": False}],
record_url="javascript:alert(1)")
bench = self.item(id="b", kind="bench", status="measured", subject="bench", title=nasty,
content=nasty, record_url="java\nscript:x",
timing={"ms_per_frame": 1.0, "fps": 1.0, "stdev": 0.0})
earlier = self.item(id="e", status="no verdict", subject="e", content=nasty, claim=nasty)
text = "\n".join(sm.tested_section("alpha", [item, bench, earlier]))
self.assertNotIn("<script", text)
self.assertNotRegex(text, r'href="(?!https?://|/)')
self.assertNotIn("javascript:alert(1)\"", text)
self.assertNotRegex(text, r"[{}]")
self.assertNotIn("<strong>b</strong>", text)
self.assertNotIn("<code>code</code>", text)
self.assertNotRegex(text, r'="[^"]*"q"')
self.assertIn("&lt;script&gt;", text)
self.assertIn("&#123;expr&#125;", text)
def test_no_empty_sentence(self) -> None:
text = "\n".join(sm.tested_section("beetle_saturn", [self.item(claim=None, method=None, statement="",
kind="run", status="ran")]))
self.assertNotRegex(text, r"</strong>\s*\.|:\s*\.\s|`ran`\. \.")
self.assertNotIn("Claim:", text)
self.assertNotIn("Method:", text)
def test_dots_follow_the_result_groups(self) -> None:
record = full_record("alpha", "boot", "2026-10-06T10:00:00+00:00", values=("1" * 40, "2" * 40, "1" * 40))
record["check"]["variable"] = "card.bin"
record["variants"][2]["system_files"] = {"card.bin": None}
groups = sm.variant_groups(record)
self.assertEqual([g["group"] for g in groups],
[i for i, group in enumerate(record["check"]["result"]["groups"])
for _ in group["variants"]][:1] + [1, 0])
self.assertEqual([g["absent"] for g in groups], [False, False, True])
text = "\n".join(sm.tested_section("alpha", [self.item(groups=groups)]))
strip = text.split('class="rb-dots"', 1)[1].split("</span></span>", 1)[0]
self.assertEqual(re.findall(r'rb-dot rb-dot-(\d)( rb-dot-empty)?"', strip),
[("0", ""), ("1", ""), ("0", " rb-dot-empty")])
self.assertIn('aria-label="3 variants. v0: result A. v1: result B. v2: result A"', text)
def test_the_details_hold_the_method_and_the_host(self) -> None:
text = "\n".join(sm.tested_section("beetle_saturn", [self.item(runs=1)]))
details = text.split('<div class="rb-tested-more">', 1)[1].split("</div>", 1)[0]
self.assertIn("Twice per card", details)
self.assertIn("<strong>Ran on:</strong> Test CPU, Linux.", details)
self.assertIn(f'<a href="{self.ITEM["record_url"]}">Full record</a>.', details)
self.assertNotIn("1 run", details)
def test_the_beetle_saturn_block_stays_short(self) -> None:
stored = mr.read_records(REPO_ROOT)
profiles = sm.load_profiles(REPO_ROOT / "emulators")
index = sm.build_index(stored, {"repo": REPO_URL, "commit": COMMIT}, profiles)
items = sm.by_emulator(index).get("beetle_saturn")
if not items:
self.skipTest("no beetle_saturn record")
block = "\n".join(sm.tested_section("beetle_saturn", items))
# What a reader sees before opening anything: the closed details hide their body.
shown = re.sub(r'<div class="rb-tested-more">.*?</div>', " ", block, flags=re.S)
shown = re.sub(r'<details class="rb-tested-earlier">.*?</details>\s*</details>', " ", shown,
flags=re.S)
shown = re.sub(r"<[^>]+>", " ", shown)
self.assertLess(len(re.findall(r"[A-Za-z0-9][\w.'-]*", shown)), 120, shown)
def test_hosts_table_on_the_method_page(self) -> None:
page = sm.with_hosts(f"x\n\n{sm.HOSTS_MARKER}\n",
+288
View File
@@ -0,0 +1,288 @@
"""region_check: the variants a region game runs under and what their
records settle."""
from __future__ import annotations
import sys
import unittest
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT / "scripts"))
import region_check as rc # noqa: E402
PROFILE = {
"systems": ["sony-playstation"],
"files": [
{"name": "scph5500.bin", "region": ["japan"]},
{"name": "scph5501.bin", "region": ["north-america", "latin-america"]},
{"name": "scph5502.bin", "region": ["europe", "oceania"]},
{"name": "openbios.bin"},
{"name": "ps1_rom.bin", "region": ["world"]},
{"name": "standalone.bin", "region": ["japan"], "mode": "standalone"},
{"name": "other.bin", "region": ["japan"], "system": "sony-playstation-2"},
],
}
def record(rid: str, staged: list[str], opened: list[str], hashes: list, verdict: str = "unknown",
loaded: bool = True) -> dict:
return {"id": rid, "variants": [{
"label": "default", "verdict": verdict, "system_files": {name: "0" * 40 for name in staged},
"repetitions": [{"loaded": loaded, "files_opened": [{"path": p} for p in opened],
"observables": {"frame_hashes": hashes}}]}]}
class Entries(unittest.TestCase):
def test_only_regional_bios_of_the_system_in_the_libretro_build(self) -> None:
names = [e["name"] for e in rc.region_entries(PROFILE, "sony-playstation")]
self.assertEqual(names, ["scph5500.bin", "scph5501.bin", "scph5502.bin"])
def test_variants_split_by_the_game_region(self) -> None:
entries = rc.region_entries(PROFILE, "sony-playstation")
plan = rc.plan_variants(entries, "japan", lambda e: Path("/bios") / e["name"])
self.assertEqual(sorted(plan["full"]), ["scph5500.bin", "scph5501.bin", "scph5502.bin"])
self.assertEqual(sorted(plan["own"]), ["scph5500.bin"])
self.assertEqual(sorted(plan["others"]), ["scph5501.bin", "scph5502.bin"])
def test_a_file_the_collection_lacks_is_in_no_variant(self) -> None:
entries = rc.region_entries(PROFILE, "sony-playstation")
plan = rc.plan_variants(entries, "europe",
lambda e: None if e["name"] == "scph5502.bin" else Path(e["name"]))
self.assertEqual(plan["own"], {})
self.assertNotIn("scph5502.bin", plan["full"])
def test_subject_names_core_game_and_variant(self) -> None:
slug = rc.subject("mednafen_psx", "Puzzle Bobble 2 (Japan)", "own")
self.assertEqual(slug, "region-mednafen_psx-puzzle-bobble-2-japan-own")
self.assertRegex(slug, rc.SUBJECT)
class BusyHost(unittest.TestCase):
def _run(self, codes: list[int], max_wait: float) -> tuple[int, int]:
import subprocess
now = [0.0]
calls = []
def runner(argv, **_kwargs):
calls.append(argv)
return subprocess.CompletedProcess(argv, codes[min(len(calls), len(codes)) - 1], "", "")
def pause(seconds: float) -> None:
now[0] += seconds
proc = rc.probe_when_idle(["probe"], max_wait, clock=lambda: now[0], pause=pause, runner=runner)
return proc.returncode, len(calls)
def test_a_refused_run_is_tried_again_once_the_host_settles(self) -> None:
self.assertEqual(self._run([rc.BUSY, rc.BUSY, 0], 600), (0, 3))
def test_it_gives_up_after_the_wait(self) -> None:
code, calls = self._run([rc.BUSY], 60)
self.assertEqual(code, rc.BUSY)
self.assertEqual(calls, 60 // rc.POLL_S + 1)
def test_another_failure_is_not_retried(self) -> None:
self.assertEqual(self._run([1, 0], 600), (1, 1))
class Outcome(unittest.TestCase):
ENTRIES = rc.region_entries(PROFILE, "sony-playstation")
ALL = ["scph5500.bin", "scph5501.bin", "scph5502.bin"]
def test_locked_bios_by_verdict(self) -> None:
records = {
"full": record("f", self.ALL, ["scph5500.bin"], [[0, "a"]], "boots"),
"own": record("o", ["scph5500.bin"], ["scph5500.bin"], [[0, "a"]], "boots"),
"others": record("x", self.ALL[1:], [], [[0, "b"]], "bios_error", loaded=False),
"pack": record("p", ["scph5500.bin"], ["scph5500.bin"], [[0, "a"]], "boots"),
}
result = rc.outcome(records, self.ENTRIES, "japan")
self.assertEqual(result["selected"], ["scph5500.bin"])
self.assertEqual(result["claim"], "confirmed")
self.assertEqual((result["own_boots"], result["others_boot"], result["pack_boots"]),
(True, False, True))
self.assertEqual(result["judged_by"], "verdict")
self.assertEqual(rc.sentence("japan", result),
"The Japanese BIOS boots the Japanese game, the other regions' BIOS do not.")
def test_interim_rule_counts_the_same_frames_as_a_boot_and_nothing_else(self) -> None:
records = {
"full": record("f", self.ALL, ["scph5501.bin"], [[0, "a"], [10, "b"]]),
"own": record("o", ["scph5501.bin"], ["scph5501.bin"], [[0, "a"], [10, "b"]]),
"others": record("x", ["scph5500.bin", "scph5502.bin"], ["scph5500.bin"], [[0, "a"], [10, "c"]]),
}
result = rc.outcome(records, self.ENTRIES, "north-america")
self.assertEqual(result["judged_by"], "full_run_frames")
self.assertTrue(result["own_boots"])
# Other frames are no verdict: a US disc reaches its game on the
# Japanese BIOS through another licence screen.
self.assertIsNone(result["others_boot"])
self.assertIsNone(result["pack_boots"])
self.assertEqual(rc.sentence("north-america", result),
"The US BIOS boots the US game. The other regions' BIOS have no verdict yet.")
def test_no_interim_answer_when_the_full_run_fails(self) -> None:
records = {"full": record("f", self.ALL, [], [[0, "a"]], "bios_error"),
"own": record("o", ["scph5502.bin"], [], [[0, "a"]])}
result = rc.outcome(records, self.ENTRIES, "europe")
self.assertIsNone(result["own_boots"])
self.assertEqual(result["claim"], "unread")
def test_a_core_reading_another_region_contradicts_the_claim(self) -> None:
records = {"full": record("f", self.ALL, ["scph5501.bin"], [[0, "a"]], "boots")}
self.assertEqual(rc.outcome(records, self.ENTRIES, "japan")["claim"], "contradicted")
def test_a_core_opening_every_region_file_settles_nothing(self) -> None:
"""PCSX-ReARMed opens the three regional files whatever the disc."""
records = {"full": record("f", self.ALL, self.ALL, [[0, "a"]], "boots")}
self.assertEqual(rc.outcome(records, self.ENTRIES, "japan")["claim"], "ambiguous")
def test_region_free_bios(self) -> None:
records = {"full": record("f", self.ALL, ["scph5501.bin"], [[0, "a"]], "boots"),
"own": record("o", ["scph5502.bin"], [], [[0, "a"]], "boots"),
"others": record("x", ["scph5501.bin"], ["scph5501.bin"], [[0, "a"]], "boots")}
result = rc.outcome(records, self.ENTRIES, "europe")
self.assertEqual(rc.sentence("europe", result),
"The European BIOS boots the European game, and so do the other regions' BIOS.")
def test_no_own_run(self) -> None:
self.assertEqual(rc.sentence("japan", rc.outcome({}, self.ENTRIES, "japan")),
"The Japanese game has no run with its own BIOS yet.")
class ContentList(unittest.TestCase):
def test_every_region_system_has_a_game_per_region_or_says_why(self) -> None:
"""A system whose BIOS a profile ties to JP, US and EU has a game for
each of the three, or the content list says why it has none."""
from common import load_emulator_profiles
import yaml
data = yaml.safe_load(rc.CONTENT_FILE.read_text(encoding="utf-8"))
content = rc.load_content()
uncovered = data.get("uncovered") or {}
profiles = load_emulator_profiles(str(ROOT / "emulators"))
regional: set[str] = set()
for profile in profiles.values():
for system in profile.get("systems") or ():
regions = {r for e in rc.region_entries(profile, system) for r in rc.regions_of(e)}
if {"japan", "north-america", "europe"} <= regions:
regional.add(system)
for system in sorted(regional):
if system in uncovered:
continue
held = {item.get("region") for item in content.get(system, [])}
missing = {"japan", "north-america", "europe"} - held
# One cartridge sold in two territories counts for both.
missing -= {r for item in content.get(system, []) for r in item.get("also_regions") or ()}
self.assertFalse(missing, f"{system}: no game for {sorted(missing)}")
class RequiredFromTheRegionRuns(unittest.TestCase):
def test_beetle_psx_boots_each_region_without_its_bios(self) -> None:
"""libretro.c maps its built-in OpenBIOS when the region's file is
absent: the evidence of required: false is a record where the file
was not staged and the oracle judged the run a boot."""
import json
import yaml
profile = yaml.safe_load((ROOT / "emulators" / "beetle_psx.yml").read_text(encoding="utf-8"))
records = {}
for line in (ROOT / "measurements" / "beetle_psx.jsonl").read_text(encoding="utf-8").splitlines():
record = json.loads(line)
records[record["id"]] = record
regional = [e for e in profile["files"] if e["name"] in ("scph5500.bin", "scph5501.bin", "scph5502.bin")]
self.assertEqual(len(regional), 3)
for entry in regional:
with self.subTest(entry=entry["name"]):
self.assertIs(entry["required"], False)
self.assertIn("3425-3511", entry["source_ref"])
ids = entry["evidence"]["required"]
self.assertTrue(ids)
for rid in ids:
record = records[rid]
self.assertEqual(record["record_version"], 4)
variant = record["variants"][0]
self.assertNotIn(entry["name"], variant["system_files"])
self.assertEqual(variant["verdict"], "boots")
self.assertIn("game", variant["verdict_evidence"].get("stages", []))
class SitePages(unittest.TestCase):
def test_region_section_links_every_record(self) -> None:
import sitemeasurements as sm
records = {"full": record("f", Outcome.ALL, ["scph5500.bin"], [[0, "a"]], "boots"),
"own": record("o", ["scph5500.bin"], ["scph5500.bin"], [[0, "a"]], "boots"),
"others": record("x", Outcome.ALL[1:], [], [[0, "b"]], "bios_error")}
result = rc.outcome(records, Outcome.ENTRIES, "japan")
result.update(core="mednafen_psx", game="Puzzle Bobble 2 (Japan)",
sentence=rc.sentence("japan", result))
for label, item in result["variants"].items():
item["url"] = f"https://example.org/{label}"
text = "\n".join(sm.region_section([result]))
self.assertIn("- **mednafen&#95;psx**: Each region's game boots on its own BIOS only.", text)
self.assertIn("The Japanese BIOS boots the Japanese game, the other regions&#x27; BIOS do not.", text)
# The per-game lines and their records wait in a closed fold.
self.assertIn('<details class="rb-region-runs">', text)
self.assertIn('<a href="https://example.org/own">its own region&#x27;s BIOS only</a>', text)
self.assertIn("<code>scph5500.bin</code>", text)
self.assertNotIn("reference frames are recorded", text)
self.assertEqual(sm.region_section([]), [])
def test_the_emulator_page_folds_region_runs_into_one_line(self) -> None:
import measurement_records as mr
import sitemeasurements as sm
stored = mr.read_records(ROOT)
index = sm.build_index(stored, {"repo": sm.REPO, "commit": "0" * 40}, sm.load_profiles(ROOT / "emulators"))
items = sm.by_emulator(index).get("beetle_psx") or []
regional = [i for i in items if sm.REGION_SUBJECT.match(i["subject"])]
if not regional:
self.skipTest("no region record")
text = "\n".join(sm.tested_section("beetle_psx", items))
self.assertIn(f"Region check: {len(regional)} runs of 3 games, read on the system page.", text)
for item in regional:
self.assertNotIn(item["record_url"], text)
def test_coverage_names_tested_and_uncovered_systems(self) -> None:
import sitemeasurements as sm
cov = {"systems": [{"system": "sony-playstation", "tested": True, "games": [
{"name": "A (USA)", "region": "north-america", "emulators": ["beetle_psx"]}]},
{"system": "sega-32x", "tested": False, "games": [
{"name": "B (World)", "region": None, "emulators": []}]}],
"uncovered": [{"system": "msx", "want": "Gradius", "reason": "No MSX catalog.",
"romfetch": {"exit": 1, "code": "unknown_system"}}]}
text = "\n".join(sm.coverage_section(cov, {"sony-playstation": "PlayStation"}))
self.assertIn("1 of 2 listed systems have a recorded run, and 1 system has no test game", text)
self.assertIn("| PlayStation | A (USA) | beetle&#95;psx |", text)
self.assertIn("| sega-32x | B (World) | not yet: no run recorded |", text)
self.assertIn("exit 1, <code>unknown&#95;system</code>", text)
def test_one_catalog_name_on_two_systems_counts_only_where_it_ran(self) -> None:
import measurement_records as mr
import sitemeasurements as sm
label = "Bust-A-Move 2 - Arcade Edition (USA)"
stored = [mr.Stored("beetle_psx", 1, {"inputs": {"content": {"label": label}}})]
cov = sm.coverage(ROOT, stored, {"beetle_psx": {"systems": ["sony-playstation"]}})
by_system = {item["system"]: item for item in cov["systems"]}
self.assertTrue(by_system["sony-playstation"]["tested"])
self.assertFalse(by_system["sega-saturn"]["tested"])
def test_coverage_reads_the_real_content_list(self) -> None:
import sitemeasurements as sm
cov = sm.coverage(ROOT, [])
systems = {item["system"] for item in cov["systems"]}
self.assertIn("sony-playstation", systems)
self.assertTrue(all(item["romfetch"].get("exit") for item in cov["uncovered"]))
if __name__ == "__main__":
unittest.main()
+201
View File
@@ -0,0 +1,201 @@
"""standalone_probe: the platform's asset choice, the AppImage offset, the
framebuffer reader, the settings it writes and the oracle it judges with."""
from __future__ import annotations
import struct
import sys
import tempfile
import unittest
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT / "scripts"))
import core_probe as cp # noqa: E402
import standalone_probe as sp # noqa: E402
def xwd(width: int, height: int, pixels: bytes, ncolors: int = 0, pad: int = 0) -> bytes:
"""An XWD file as Xvfb keeps its screen: version 7, 32 bpp, LSB first."""
name = b"Xvfb main window\0"
header_size = 100 + len(name)
bytes_per_line = width * 4 + pad
fields = [header_size, 7, 2, 24, width, height, 0, 0, 32, 0, 32, 32, bytes_per_line, 4,
0xFF0000, 0xFF00, 0xFF, 8, 256, ncolors, ncolors, width, height, 0, 0]
rows = b"".join(pixels[y * width * 4:(y + 1) * width * 4] + b"\0" * pad for y in range(height))
return struct.pack(">25I", *fields) + name + b"\0" * (12 * ncolors) + rows
class AssetChoice(unittest.TestCase):
RELEASES = [
{"tag_name": "preview", "prerelease": True, "assets": [
{"name": "DuckStation-x64-SSE2.AppImage", "browser_download_url": "u1"},
{"name": "DuckStation-x64.AppImage", "browser_download_url": "u2"}]},
{"tag_name": "latest", "prerelease": False, "assets": [
{"name": "DuckStation-x64.AppImage", "browser_download_url": "u3"}]},
]
def test_first_match_in_api_order_like_getreleaseurlgh(self) -> None:
asset = sp.select_asset(self.RELEASES, "AppImage", "x64.")
self.assertEqual((asset["tag"], asset["name"], asset["url"]),
("preview", "DuckStation-x64.AppImage", "u2"))
self.assertTrue(asset["prerelease"])
def test_no_match(self) -> None:
self.assertIsNone(sp.select_asset(self.RELEASES, "Qt.AppImage", ""))
def test_every_emulator_names_its_installer_and_profile(self) -> None:
profiles = {p.stem for p in (ROOT / "emulators").glob("*.yml")}
for name, emu in sp.EMULATORS.items():
self.assertEqual(name, emu.name)
self.assertIn(name, profiles)
self.assertIn("EmuDeck", emu.installer_ref)
self.assertTrue(emu.error_patterns)
class AppImage(unittest.TestCase):
def test_offset_is_the_end_of_the_section_headers(self) -> None:
head = bytearray(64)
head[:5] = b"\x7fELF\x02"
struct.pack_into("<Q", head, 0x28, 1000)
struct.pack_into("<HH", head, 0x3A, 64, 30)
self.assertEqual(sp.appimage_offset(bytes(head)), 1000 + 64 * 30)
def test_not_elf(self) -> None:
with self.assertRaises(cp.ProbeError):
sp.appimage_offset(b"hsqs" + bytes(60))
class Framebuffer(unittest.TestCase):
def test_reads_rgb_and_skips_colormap_and_padding(self) -> None:
# Two pixels, BGRX: red then blue.
pixels = bytes((0, 0, 255, 0, 255, 0, 0, 0))
width, height, rgb = sp.parse_xwd(xwd(2, 1, pixels, ncolors=3, pad=8))
self.assertEqual((width, height), (2, 1))
self.assertEqual(rgb, bytes((255, 0, 0, 0, 0, 255)))
def test_refuses_other_layouts(self) -> None:
data = bytearray(xwd(1, 1, bytes(4)))
struct.pack_into(">I", data, 44, 16)
with self.assertRaises(cp.ProbeError):
sp.parse_xwd(bytes(data))
def test_truncated(self) -> None:
with self.assertRaises(cp.ProbeError):
sp.parse_xwd(xwd(4, 4, bytes(64))[:-10])
class Settings(unittest.TestCase):
def test_bios_folder_and_overrides(self) -> None:
emu = sp.EMULATORS["duckstation"]
sections = sp.emulator_settings(emu, Path("/b"), [("GPU.Renderer", "Vulkan"), ("New.Key", "1")])
self.assertEqual(sections["BIOS"]["SearchDirectory"], "/b")
self.assertEqual(sections["GPU"]["Renderer"], "Vulkan")
self.assertEqual(sections["New"]["Key"], "1")
self.assertEqual(emu.settings["GPU"]["Renderer"], "Software")
text = sp.ini_text(sections)
self.assertIn("[BIOS]\nSearchDirectory = /b\n", text)
def test_override_needs_a_section(self) -> None:
with self.assertRaises(cp.ProbeError):
sp.emulator_settings(sp.EMULATORS["pcsx2"], Path("/b"), [("Renderer", "13")])
def test_display_wrapper_passes_the_command_through(self) -> None:
argv = sp.with_display(["/emu", "--", "game.cue"], Path("/fb"))
self.assertEqual(argv[:2], ["/bin/sh", "-c"])
self.assertEqual(argv[3:], ["xvfb", "/fb", "/emu", "--", "game.cue"])
self.assertIn(f'Xvfb ":{sp.DISPLAY_NUMBER}"', argv[2])
class Oracle(unittest.TestCase):
def test_emulator_patterns_join_the_oracle_file(self) -> None:
with tempfile.TemporaryDirectory() as tmp:
path = Path(tmp) / "oracle.yml"
path.write_text("error_patterns:\n - {pattern: 'shared', source_ref: x}\n"
"cores:\n duckstation:\n error_screens:\n"
" - {sha1: '" + "a" * 40 + "', shows: 'no BIOS'}\n"
"content:\n - sha1: '" + "b" * 40 + "'\n references:\n"
" duckstation:\n frames:\n"
" - {sha1: '" + "c" * 40 + "', stage: bios, shows: 'logo'}\n",
encoding="utf-8")
oracle = sp.emulator_oracle(sp.EMULATORS["duckstation"], path, "b" * 40)
self.assertEqual(oracle["references"][0]["sha1"], "c" * 40)
self.assertEqual(oracle["error_screens"][0]["shows"], "no BIOS")
self.assertEqual(oracle["error_patterns"][0], "shared")
self.assertIn(r"No\ BIOS\ image\ found\ for", oracle["error_patterns"])
self.assertEqual(len(oracle["sha256"]), 64)
def test_without_the_file_the_oracle_names_the_script(self) -> None:
oracle = sp.emulator_oracle(sp.EMULATORS["pcsx2"], Path("/nonexistent/oracle.yml"), "0" * 40)
self.assertEqual(oracle["file"], sp.SCRIPT)
self.assertEqual(oracle["references"], [])
def test_a_log_line_gives_bios_error_through_core_probe_judge(self) -> None:
oracle = sp.emulator_oracle(sp.EMULATORS["duckstation"], Path("/nonexistent"), "0" * 40)
rep = {"loaded": True, "observables": {"frame_hashes": [[0, "d" * 40]], "uniform_frames": []},
"logs": [{"frame": 3, "level": "info", "text": "E: No BIOS image found for NTSC-J region."}]}
verdict, evidence = cp.judge(rep, oracle)
self.assertEqual((verdict, evidence["rule"]), ("bios_error", "error_pattern"))
def test_an_early_exit_is_a_crash_and_a_black_tail_a_hang(self) -> None:
oracle = {"references": [], "error_patterns": [], "error_screens": []}
rep = {"loaded": False, "exit": {"status": 1, "signal": None}, "observables": {}, "logs": []}
self.assertEqual(cp.judge(rep, oracle)[0], "crash")
black = "e" * 40
rep = {"loaded": True, "logs": [], "observables": {
"frame_hashes": [[0, "f" * 40], [1, black], [2, black]], "uniform_frames": [black]}}
self.assertEqual(cp.judge(rep, oracle)[0], "hang")
def test_check_result_carries_the_verdicts(self) -> None:
def variant(label: str, verdict: str) -> dict:
return {"label": label, "flags": [], "verdict": verdict, "repetitions": [
{"loaded": True, "observables": {"verdict": verdict}}]}
result = sp.check_result([variant("absent", "bios_error"), variant("scph5501.bin", "boots")],
"verdict")
self.assertEqual(result["status"], "differs")
self.assertEqual(result["verdicts"], {"absent": "bios_error", "scph5501.bin": "boots"})
class HostLock(unittest.TestCase):
def test_a_run_holds_the_probe_lock_for_itself(self) -> None:
import contextlib
from unittest import mock
events = []
@contextlib.contextmanager
def lock():
events.append("take")
yield
events.append("free")
def body(_args, _emu):
events.append("run")
return 0
with tempfile.NamedTemporaryFile(suffix=".cue") as content, \
mock.patch.object(sp.cp, "host_probe_lock", lock), mock.patch.object(sp, "_probe", body):
args = sp.build_parser().parse_args(["run", "duckstation", "--content", content.name])
self.assertEqual(sp.probe(args), 0)
self.assertEqual(events, ["take", "run", "free"])
class CommandLine(unittest.TestCase):
def test_check_refuses_two_destinations(self) -> None:
with tempfile.NamedTemporaryFile(suffix=".cue") as content:
args = sp.build_parser().parse_args(
["check", "duckstation", "--content", content.name, "--vary", "a.bin=", "--vary", "b.bin=",
"--claim", "c", "--method", "m"])
self.assertIn("--vary must name the same DEST in every occurrence", sp.validate(args))
def test_unknown_observable(self) -> None:
with tempfile.NamedTemporaryFile(suffix=".cue") as content:
args = sp.build_parser().parse_args(
["check", "pcsx2", "--content", content.name, "--vary", "a.bin=", "--observable", "fps",
"--claim", "c", "--method", "m"])
self.assertTrue(any("--observable fps" in p for p in sp.validate(args)))
if __name__ == "__main__":
unittest.main()
+5 -1
View File
@@ -154,7 +154,11 @@ class ThePullRequestBuildsTheSite(unittest.TestCase):
if not path.startswith(("scripts/", ".github/"))
}
self.assertIn("wiki/**", inputs)
self.assertEqual(sorted(inputs - watched), [])
# A path the deploy names inside a folder validate.yml watches
# whole (tests/campaign/content.yml under tests/**) is watched.
unwatched = [path for path in inputs - watched
if not any(fnmatch.fnmatch(path, pattern) for pattern in watched)]
self.assertEqual(sorted(unwatched), [])
self.assertIn("scripts/**", watched)
+85
View File
@@ -1051,3 +1051,88 @@ starlight-tabs [role='tab'] { white-space: nowrap; }
@media (min-width: 50rem) {
header .site-title img { height: calc(4rem - 2 * var(--sl-nav-pad-y)); width: auto; }
}
/* The Tested block of an emulator page (scripts/sitemeasurements.py): a
summary line, then one row per test, each a <details> whose summary is
the row and whose body is the proof. Rows stack into two lines on a
phone. A dot per variant, its group in colour and its name in a title
and the strip's label; a variant that staged no file is a ring. */
.sl-markdown-content .rb-tested-summary { color: var(--rb-text-secondary); font-size: 0.9rem; }
.sl-markdown-content :is(.rb-tested-head, .rb-tested-row > summary) {
display: grid;
grid-template-columns: 1.25rem minmax(0, 1fr) 8.5rem 9rem 6rem;
gap: 0.5rem;
align-items: center;
}
.sl-markdown-content .rb-tested-head {
margin-top: 0.75rem;
padding: 0 0 0.25rem;
border-bottom: 1px solid var(--rb-border-strong);
color: var(--rb-text-secondary);
font-size: 0.8rem;
font-weight: 600;
}
.sl-markdown-content .rb-tested-head::before { content: ""; }
/* Starlight draws a side rule on every details: a row has a rule below only. */
.sl-markdown-content details:is(.rb-tested-row, .rb-tested-earlier) { border-inline-start: 0; padding-inline-start: 0; }
.sl-markdown-content details.rb-tested-row { margin: 0; border-bottom: 1px solid var(--rb-border); }
.sl-markdown-content details.rb-tested-row:has(> summary:hover) { border-color: var(--rb-border); }
.sl-markdown-content .rb-tested-row > summary {
min-height: 2.25rem;
padding: 0.3rem 0;
cursor: pointer;
font-size: 0.9rem;
}
.sl-markdown-content .rb-tested-row > summary::before { background-color: var(--rb-text-secondary); margin: 0; }
.sl-markdown-content .rb-tested-row > summary:hover { background: var(--rb-surface); }
.sl-markdown-content .rb-tested-test { font-weight: 600; overflow-wrap: anywhere; }
.sl-markdown-content :is(.rb-tested-test, .rb-tested-date) small { color: var(--rb-text-secondary); font-weight: 400; }
.sl-markdown-content .rb-tested-date { color: var(--rb-text-secondary); font-variant-numeric: tabular-nums; white-space: nowrap; }
.sl-markdown-content .rb-tested-more {
margin: 0 0 0.75rem 1.75rem;
padding: 0.5rem 0.75rem;
border: 1px solid var(--rb-border);
border-radius: 4px;
font-size: 0.875rem;
}
.sl-markdown-content .rb-tested-more p { margin: 0.35rem 0 0; }
.sl-markdown-content .rb-tested-more p:first-child { margin-top: 0; }
.sl-markdown-content details.rb-tested-earlier { margin-top: 0.75rem; }
.sl-markdown-content details.rb-tested-earlier > summary { font-size: 0.9rem; color: var(--rb-text-secondary); cursor: pointer; }
.sl-markdown-content .rb-dots { display: inline-flex; flex-wrap: wrap; gap: 3px; }
.sl-markdown-content .rb-dot {
width: 10px;
height: 10px;
border-radius: 3px;
border: 2px solid var(--rb-dot);
background: var(--rb-dot);
}
.sl-markdown-content .rb-dot-empty { background: transparent; }
.sl-markdown-content .rb-dot-0 { --rb-dot: var(--rb-ok-fg); }
.sl-markdown-content .rb-dot-1 { --rb-dot: var(--rb-info-fg); }
.sl-markdown-content .rb-dot-2 { --rb-dot: var(--rb-warn-fg); }
.sl-markdown-content .rb-dot-3 { --rb-dot: var(--rb-err-fg); }
.sl-markdown-content .rb-dot-4 { --rb-dot: var(--rb-muted-fg); }
.sl-markdown-content p.rb-tested-file {
margin: 0.9rem 0 0;
padding-bottom: 0.2rem;
border-bottom: 1px solid var(--rb-border-strong);
font-size: 0.85rem;
font-weight: 600;
}
.sl-markdown-content p.rb-tested-legend { margin-top: 0.5rem; color: var(--rb-text-secondary); font-size: 0.8rem; }
.sl-markdown-content p.rb-tested-legend .rb-dot { display: inline-block; vertical-align: -1px; }
.sl-markdown-content table.rb-tested-bench { margin-top: 1rem; font-size: 0.875rem; }
.sl-markdown-content table.rb-tested-bench td:not(:first-child) { font-variant-numeric: tabular-nums; text-align: right; }
@media (max-width: 50rem) {
.sl-markdown-content div.rb-tested-head { display: none; }
.sl-markdown-content details.rb-tested-row > summary {
grid-template-columns: 1.25rem auto minmax(0, 1fr) auto;
row-gap: 0.2rem;
}
.sl-markdown-content .rb-tested-row > summary::before { grid-row: 1; }
.sl-markdown-content .rb-tested-test { grid-column: 2 / -1; }
.sl-markdown-content .rb-tested-result { grid-column: 2; }
.sl-markdown-content .rb-tested-date { text-align: right; }
.sl-markdown-content .rb-tested-more { margin-left: 0.5rem; }
}
+26 -16
View File
@@ -14,25 +14,35 @@ the emulator's page shows a **Tested** block. Every result is on the
## What a test does
- A script runs the emulator with no window and no sound.
- It starts a game or a disc and presses buttons at set frames.
- It runs again for each version of one file, such as a BIOS. Nothing else changes.
- It compares what the emulator showed, played or saved, by fingerprint (a hash).
- Each version runs at least twice, each time from a fresh start.
## When tests run
A maintainer starts a test run. It then works alone on an idle computer. A clear
result updates the emulator's page and names the test as proof.
Anything else waits on the [Measurements](../measurements.md) page for someone
to read the code.
- It starts a game and runs it for a set time, at least twice.
- It compares the screens with ones we checked by eye.
## What a result says
- **same**: the file changed nothing that was compared.
- **differs**: some versions of the file changed it.
- **inconclusive**: two runs of one version did not match, so no answer is given.
- **measured**: a speed test, given as time per frame.
| Result | Meaning |
|--------|---------|
| works | the game reached a screen it shows when it works |
| BIOS error | the emulator said a BIOS is missing or wrong |
| crash | the emulator stopped |
| hang | the screen stayed blank, or the run never ended |
| unknown | none of these could be shown |
| no verdict | an older test that only compared screens |
| ms per frame | a speed test |
## How a file is proven
The game runs with no BIOS and with the BIOS alone. Then it runs with a wrong
file under the BIOS name: zeros, half the file, or another region's BIOS.
- **Required**: no BIOS fails, the BIOS alone works.
- **Built-in stand-in**: no BIOS still works.
- **Checked**: a wrong file is refused.
## When tests run
A maintainer starts a test run. A clear result updates the emulator's page.
Anything else waits on the [Measurements](../measurements.md) page for someone
to read the code.
## What a result keeps
+2
View File
@@ -59,6 +59,8 @@ Every module in `tests/`, by the area it guards.
| Running cores | parsers on fixed inputs, a libretro core built from C in the test when a compiler exists | `test_core_probe` |
| Measurement records | synthetic record files, the committed `measurements/` against HEAD | `test_measurements` |
| Real-condition campaign | synthetic profiles, records and content folders, a fake host for load, disk, clock and commands, and whole passes against a libretro core built from C when a compiler and strace exist | `test_campaign` |
| Region checks | the variants a region game runs under, the outcome read from synthetic records, the system page sentence and the coverage table, and that every system whose BIOS a profile ties to Japan, the US and Europe has a game per region in the content list or a reason | `test_region_check` |
| Standalone emulators | the release asset EmuDeck's rule picks, the AppImage offset, the Xvfb framebuffer reader, the settings written and the oracle the verdicts use, with no emulator run | `test_standalone_probe` |
| Automation runner, disk cleanup, asset sync and bit-flip repair | fake jobs, git repositories with a bare origin and session worktrees, a committed file with one bit flipped, canned CI runs in place of `gh` | `test_autorun` |
| Truth and native export | synthetic + cached originals | `test_export_counts`, `test_export_native_layer`, `test_export_report`, `test_exporters`, `test_truth_data_dir_readers`, `test_truth_diff`, `test_truth_layout` |
| Scrapers, upstream and provenance | inline sources, synthetic | `test_batocera_md5_list`, `test_check_freshness`, `test_contributing_text`, `test_coverage_cache`, `test_data_dir_refs`, `test_dataclass_defaults`, `test_dedup`, `test_doc_pages`, `test_doc_surfaces`, `test_elec_scrapers`, `test_fbneo_parser`, `test_find_pinned_revision`, `test_hash_merge`, `test_launchers`, `test_launchers_emudeck`, `test_launchers_recalbox`, `test_launchers_retrobat`, `test_launchers_retrodeck`, `test_launchers_retropie`, `test_launchers_rocknix`, `test_mame_devices`, `test_mame_parser`, `test_mame_ref_audit`, `test_optional_dependencies`, `test_profile_sync`, `test_prose_style`, `test_provenance`, `test_refresh_data_dirs`, `test_refresh_failures`, `test_refresh_stale`, `test_retrodeck_scraper_errors`, `test_romset_recipes`, `test_schema_semantic_gate`, `test_scraper_contract`, `test_site_availability`, `test_site_content_data`, `test_site_copy`, `test_site_cores`, `test_site_emulator_page`, `test_site_exports`, `test_site_funnel`, `test_site_images`, `test_site_picker`, `test_site_platform_hashes`, `test_site_r2_components`, `test_site_r2_css`, `test_site_r2_emulators`, `test_site_r2_entry`, `test_site_r2_gate`, `test_site_r2_nav`, `test_site_r2_p0`, `test_site_r2_reference`, `test_site_r2_systems`, `test_site_r2_wiki`, `test_site_r3_collection`, `test_site_r3_components`, `test_site_r3_css`, `test_site_r3_emulators`, `test_site_r3_entry`, `test_site_r3_nav`, `test_site_r3_p0`, `test_site_r3_reference`, `test_site_r3_systems`, `test_site_r3_wiki`, `test_site_r4_components`, `test_site_r4_css`, `test_site_r4_emulators`, `test_site_r4_entry`, `test_site_r4_merge`, `test_site_r4_p0`, `test_site_r4_reference`, `test_site_r4_search`, `test_site_r4_systems`, `test_site_r4_wiki`, `test_site_r5_components`, `test_site_r5_css`, `test_site_r5_emulators`, `test_site_r5_entry`, `test_site_r5_reference`, `test_site_r5_search`, `test_site_r5_systems`, `test_site_r5_wiki`, `test_site_render`, `test_site_system_links`, `test_site_validation`, `test_site_weight`, `test_site_write`, `test_source_ref_targets`, `test_upstream`, `test_upstream_index`, `test_validate_pr`, `test_version_basis`, `test_validate_pr_flow`, `test_validate_pr_hashes`, `test_workflow_paths` |
+178 -18
View File
@@ -862,8 +862,23 @@ python scripts/core_probe.py bench --core core.so --content game.cue \
python scripts/core_probe.py check --core core.so --content disc.cue \
--vary mpeg_card.bin=a.bin --vary mpeg_card.bin=b.bin --vary mpeg_card.bin= \
--observable video_sha1 --claim "..." --method "..." --record
# negative variants: the file, zeros of its size, its first half
python scripts/core_probe.py check --core core.so --content disc.cue \
--frame-hash-every 10 --vary scph5501.bin=bios/scph5501.bin \
--vary scph5501.bin=@zeros:524288 --vary scph5501.bin=@head:262144:bios/scph5501.bin \
--observable frame_hashes --claim "..." --method "..." --repeat 2 --record
```
One measurement runs at a time on the host. core_probe takes the host lock
itself, per run: `~/.local/state/retrobios/probe.lock` (`RETROBIOS_PROBE_LOCK`
names another file), from its load check to its record, released when the run
ends. A run that finds it held waits and says so. Never wrap a whole pass in
`flock`: a pass of many runs then holds the host for hours, while called
directly its runs interleave with everyone else's. A caller that holds the
lock around one core_probe call sets `RETROBIOS_PROBE_LOCK_HELD=1`. The tests
use their own lock file.
Each repetition runs in a fresh process under `strace -f -e trace=openat,open`
when strace is installed. The worker starts with an empty environment and
clears its own before it loads the core, keeping only the `--env` values.
@@ -876,15 +891,43 @@ writable. Every namespace is unshared, the network included, so nothing of
the user (`~/.config`, `~/.ssh`, `~/.git-credentials`) or of the checkout is
there to read. Each repetition names what it ran under in `isolation`
(`bwrap`, or `environment only` with the reason), and `--require-sandbox`
refuses to run without it. A timeout kills the worker's whole process group. The files the core opened under the system
refuses to run without it. The files the core opened under the system
directory come from the kernel, each hashed again after the run. Without
strace the record says that tracing was unavailable.
**Boot oracle.** Every repetition and every variant carries a `verdict` and
the `verdict_evidence` that decided it (record version 4), judged against
`tests/campaign/oracle.yml` (`--oracle`), in this order:
| Verdict | Evidence |
|---------|----------|
| `hang` | the worker was killed after `--timeout` (`timeout`) |
| `crash` | the worker died, by exit status or signal (`exit_status`). Its logs and sampled frames are rebuilt from the events it streamed |
| `boots` | a sampled frame or the last frame is a `game` reference frame of this content on this core (`reference_frame`), with the `stages` reached: `bios` for a screen only the console's BIOS draws, `game` for one of the content. The BIOS screens alone are never a boot: the stages go into the evidence of the verdict below |
| `bios_error` | a log line matches an error pattern of the core (`error_pattern`), or a frame is one of its error screens (`error_screen`) |
| `hang` | every sampled frame of the second half is one colour (`uniform_tail`) |
| `unknown` | none of these (`no_evidence`) |
A variant's verdict is the one all its repetitions agree on, else `unknown`
(`repetitions_disagree`). A check lists them in `check.result.verdicts`, and
`inputs.oracle` keeps what they were judged against. The oracle finds a
content by the sha1 of the file handed to the core and a core by its library
name. A reference frame is recorded once with the full BIOS set and reviewed
by looking at its PNG. An error pattern is a log line after which the core
stops, read from its source: a line a core logs before it falls back to a
built-in BIOS is not one. A BIOS load pattern is the line a core logs once
it keeps the console's BIOS: it adds the `bios` stage for a core that hides
the BIOS screens by default (PCSX-ReARMed). Frames that differ from another run never make a
boot.
| Option | Effect |
|--------|--------|
| `--system-file DEST=SRC` | copy SRC into a staged system directory as DEST |
| `--content-label` | identity of the content, such as its Redump name, copied into the record |
| `--work-dir`, `--timeout` | scratch directory for the staged runs, and seconds allowed per repetition (default 1800) |
| `--work-dir`, `--timeout` | scratch directory for the staged runs, and seconds allowed per repetition (default 1800), after which the run is killed and judged a hang |
| `--oracle FILE` | reference frames, error patterns and error screens the verdicts are judged against (default `tests/campaign/oracle.yml`) |
| `--repeat N` | runs of each variant, each in a fresh process (`run` defaults to 1, `check` to 2, `bench` to 5) |
| `--vary DEST=SRC` | (`check`) one variant per occurrence. An empty SRC leaves DEST absent, `@zeros:SIZE` stages SIZE zero bytes and `@head:SIZE:PATH` the first SIZE bytes of PATH |
| `--option KEY=VALUE` | core option. Unset options take the first value the core declares |
| `--frames`, `--warmup` | frames timed, and frames run before timing starts |
| `--press FRAME:BUTTON[:LEN]` | hold a libretro joypad button on port 0 (`a`, `b`, `start`, `up`...). A menu may need 15 frames or more to see it |
@@ -964,51 +1007,77 @@ files a core opens nor writes a record.
python scripts/campaign.py run --system sony-playstation --budget 6h
python scripts/campaign.py run --only beetle_psx,swanstation --dry-run
python scripts/campaign.py run --commit --commit-every 10
python scripts/campaign.py run --only pcsx_rearmed --bench # with benchmarks
python scripts/campaign.py references --only beetle_psx --system sony-playstation
python scripts/campaign.py references --only beetle_saturn --content-file other.yml # another content list
python scripts/campaign.py status # done, failed, pending, and why
python scripts/campaign.py findings # what waits for review
python scripts/campaign.py gate # the checks behind a commit
python scripts/campaign.py install-timer # the autorun units, the campaign's among them
python scripts/campaign.py install-timer # opt-in: writes the autorun units, enables nothing
```
| Step | What happens |
|------|--------------|
| Core | The x86_64 Linux nightly from `buildbot.libretro.com`, for each name of the profile's `cores:` the buildbot publishes, downloaded again only when its `ETag` or `Last-Modified` changes. The record keeps the artifact URL, the `.so` sha256 and the `retro_get_system_info` version. With no nightly, the profile's `source_commit` is cloned and built once with `make` (`Makefile.libretro` first), the failure kept so it is not tried again for that commit. Host git only fetches into bare mirrors (`.cache/campaign/mirrors/`), one per repository, submodules included, that it alone touches: no working tree, never bound into a sandbox, and earlier working-tree clones are deleted. It runs with no user or system config, https as the only transport, and `-c` overrides emptying hooks, `core.fsmonitor`, `core.sshCommand`, `core.gitProxy`, credential helpers and every filter driver the mirror's config defines. The commit and each submodule at the commit its tree records are exported with `git archive` into a fresh folder, and `make` runs there in the same bubblewrap sandbox as a core, that folder the one writable path. The core copied out is the newest `*_libretro.so` that is a regular file inside that folder, opened without following links. The record's `build_command` says which isolation was used. A standalone emulator is `pending: standalone` |
| Content | Each system's games come from `tests/campaign/content.yml`, by catalog name and with the reason each was chosen. They are read from `.cache/test-content/<romfetch system>/<name>/`, each file checked against its `identity.json`. Missing content is fetched with `romfetch get <system> <name> --json` when romfetch is on `PATH`, in `RETROBIOS_ROMFETCH` or given with `--romfetch`. Otherwise the checks are `pending: content`, with romfetch's exit code and error code when it failed. Content never enters git, and a record keeps only its identity |
| Checks | `files` stages every declared file the collection holds and reads which ones the core opens (strace). `boot` runs the game with no file and with the declared one (`boot_file:`, else the entry of the game's region). An entry the `files` run left unread is staged `alone`, then where the core looked for it (`path`) and under the names it looked for (`alias`). `variants` runs each `.variants/` copy of a file the core opened. `bench` times the game, warm-up excluded, 5 repetitions |
| Checks | `files` stages every declared file the collection holds (the full set) and reads which ones the core opens (strace). `none` runs the game with no BIOS at all. `negative` runs, for each declared file of the game's region the collection holds, the file alone, then zeros of its size, its first half and up to two other regions' dumps staged under its name. An entry neither the full set nor its own run opened is staged where the core looked for it (`path`), else flagged. The `boot_file:` entry is also staged under the names the core looked for with no BIOS (`alias`). `variants` runs each `.variants/` copy of a file the core opened. Each runs twice from a fresh process and is judged by the boot oracle. `bench` (only with `--bench`) times the game once the full set boots, warm-up excluded, 5 repetitions |
| Rules | `campaign_rules.py`, a fixed table of pure functions (below). A field the table settles is written into the profile, with `evidence:` naming the record ids. Anything else is a line of `measurements/findings.jsonl` |
| Content reuse | A game stays on disk until the last emulator that needs it in the pass is done, then the campaign deletes it if it fetched it. Past `--cache-cap-gb` (default 20) the least recently used goes first. An entry marked `pinned:`, or one the campaign did not fetch, is never deleted |
| Observable | Field | Written |
|------------|-------|---------|
| Without the file, at least 2 screens the run with the file also shows (single-colour frames left out), in every repetition | `hle_fallback` | `true` |
| Without the file, no repetition loads the game or shows more than one colour, while the run with it reaches the game | `required`, `hle_fallback` | `true`, `false` |
| Verdicts | Field | Written |
|----------|-------|---------|
| `none` boots, and the file changes the run: alone or as a wrong file, another verdict or other stages than with no BIOS | `hle_fallback` | `true`. A file the game never uses settles nothing: a core can open every file of the folder to hash it |
| `none` fails (`bios_error`, `crash`, `hang`) and the file alone boots | `required`, `hle_fallback` | `true`, `false` |
| Zeros of the file's size refused while the file boots | `validation` | a content check is proven. Agreeing adds evidence, a profile with no md5, sha1, sha256, crc32 or adler32 is an open finding |
| Zeros used while the file boots | `validation` | no content check. A profile that declares one is an open finding |
| Its first half refused while zeros are used | `validation` | `size`, added when missing |
| Its first half used | `validation` | no size check. A profile that declares one is an open finding |
| The core opened the file staged at another place it looked for | `path` | that path |
| The core opened the file staged under a name no entry declares | `aliases` | the name added |
| A staged file the game's region uses, never opened, staged alone either | nothing | flagged |
| Anything else (runs that disagree, a profile that says `required: true` for a file the core boots without) | nothing | open finding |
| Copies of one file whose verdicts differ | nothing | open finding |
| Anything else (an `unknown`, a profile that says `required: true` for a file the core boots without) | nothing | open finding |
A run that agrees with the profile adds its record id to `evidence:` and
A wrong file is refused when the run reports `bios_error`, or boots without
the `bios` screens the right file shows: the core fell back to a built-in
BIOS. It is used when it turns the run into a `hang` or a `crash` that the
run with no BIOS does not show. Another region's dump is recorded with its
verdict, and the region claims are settled by their own test. Evidence that a
record from before the oracle wrote no longer counts: when a verdict settles a
field again, those ids leave its `evidence:`.
`references` runs the full set once per core and content with every sampled
frame written as PNG under `tmp/campaign/references/<core>/<content>/`, and
prints the record id with the screens that stay on for 3 samples or more in
every repetition. A reviewer opens those PNGs and writes the chosen frames
into `tests/campaign/oracle.yml` with their stage and what they show.
The rules run on every pass, from the kept records when no check needs to run
again, so a change of the table applies without a run. A run that agrees with
the profile adds its record id to `evidence:` and
resolves an open finding of the same field. The profile is edited as text and
the edit is refused unless the result parses to the same profile with only
those fields changed.
State lives in `.cache/campaign/state.json` of the main checkout: each check
is `done`, `failed` (with the reason and its log) or `pending` (with the
reason), with the core sha256 and the profile digest it ran against. A pass
skips a check that is done or failed against the same core and profile, so it
reason), with the core sha256, the profile digest, the oracle entries of its
content and core (by sha1) and the record version it ran against. A pass
skips a check that is done or failed against the same four, so it
takes new nightlies, changed profiles, newly fetched content and pending
checks. The campaign's own `evidence:` writes do not count as a profile change.
| Guard | Rule |
|-------|------|
| Lock | The host-wide autorun lock. Under the `campaign` job, autorun holds it and says so with `RETROBIOS_AUTO_LOCK_HELD` |
| Probe lock | Not held by the pass: each core_probe it starts takes the host probe lock for its own run, so the pass and other measurements (pack_probe, a core_probe loop) interleave. Two campaign passes still exclude each other through the automation lock, since they share `.cache/campaign/state.json`. Do not wrap `campaign.py run` in `flock` |
| Environment | `core_probe.py`, git and `make` get autorun's allowlist, romfetch the same plus its `ROMFETCH_*` settings. None sees a token or a password |
| Sandbox | Fails closed: without a working bubblewrap the pass is `refused` (exit 3) and nothing third-party runs, every probe is started with `--require-sandbox`, and a build is refused. `--allow-unsandboxed` overrides. Under autorun the refusal raises the `job:campaign` alert |
| Load | Before each run, waits while the 1-minute load is above a quarter of the CPUs, up to `--max-load-wait` seconds, then the pass stops as `paused` |
| Disk | Below `--min-free-gb` (default 30) the pass stops as `paused` |
| Budget | No check starts after `--budget` |
| Timeout | A run is killed after 900 seconds per repetition and variant, recorded `failed: timeout`, and the pass moves on |
| Crash | A run that dies is tried 3 times, then `failed` with its log |
| Timeout | A repetition is killed after 900 seconds and judged `hang`. A core_probe call that outlives all its repetitions is `failed: timeout` |
| Crash | A core that dies is a `crash` verdict in its record. A core_probe call that fails for another reason is tried 3 times, then `failed` with its log |
| Network | Buildbot and romfetch source errors are retried after 10, 60 and 300 seconds |
Each pass appends one line to `measurements/campaign-runs.jsonl`: when it ran,
@@ -1019,13 +1088,104 @@ the findings it added. Logs are `.cache/campaign/logs/`, kept 30 days.
each changed profile in its own, behind `campaign.py gate`: the measurement
and campaign tests, `validate_schemas.py --source-only`, then `verify.py
--emulator` and `generate_pack.py --emulator` for each changed profile. A file
that had uncommitted changes before the pass is left alone. The nightly
`campaign` autorun job (06:00, after `nightly`) runs a 150-minute pass in the
automation worktree, gates it with `campaign.py gate` and commits with its
own rules, pushing only with `--push`.
that had uncommitted changes before the pass is left alone.
A maintainer starts each pass. Scheduling is opt-in: a contributor who wants a
schedule on their own machine installs the timer with `campaign.py
install-timer`, which writes the autorun units and enables nothing unless
`--enable` is passed. The `campaign` autorun job then runs a 150-minute pass
in the automation worktree, gates it with `campaign.py gate` and commits with
its own rules, pushing only with `--push`.
Schemas: `campaign-finding.schema.json` and `campaign-run.schema.json`.
### region_check.py
Proves the `region:` fields of a profile on a real run. For each test game
of a region in `tests/campaign/content.yml`, it runs `core_probe.py` four
times, each a record whose subject is `region-<core>-<game>-<variant>`.
| Variant | BIOS staged |
|---------|-------------|
| `full` | every regional BIOS of the system the collection holds |
| `own` | only the entries whose `region:` holds the game's region |
| `others` | only the entries of the other regions |
| `pack` | the files of `generate_pack.py --emulator E --region R`, where the pack puts them |
```bash
python scripts/region_check.py run \
--emulator beetle_psx --system sony-playstation --core-name mednafen_psx
python scripts/region_check.py report # the outcome of every region record, as JSON
```
| Option | Effect |
|--------|--------|
| `--core-name` | the buildbot name of the core, whose x86_64 nightly is downloaded once into `.cache/region/cores/` and named in the record |
| `--core`, `--core-artifact` | a core `.so` to use instead, and where it was downloaded from |
| `--content-dir` | where romfetch keeps the test games (default `.cache/test-content`) |
| `--variants` | a subset of `full`, `own`, `others` and `pack` |
| `--timeout` | seconds per run (default 900) |
| `--max-load-wait` | seconds a run refused on a busy host is tried again, every 15 seconds, before it is given up (default 1800). The load threshold stays core_probe's |
The file the core opened in the `full` run, read from strace, settles the
claim: `confirmed` when its `region:` holds the game's region, `contradicted`
when it does not, `ambiguous` when the core opened its own region's file and the others too (PCSX-ReARMed opens all three), `unread` when it opened none of them. Each variant's
result is the oracle verdict of its record. While the oracle has no reference
frame for a game, a variant counts as booting when it samples the same frames
as the `full` run, and the outcome says it was judged that way. Other frames give no verdict: the US disc reaches its game on the Japanese and European BIOS through another licence screen. The system
pages show each outcome as a sentence ("the Japanese BIOS boots the Japanese
game, the other regions' BIOS do not") with links to the four records. A
maintainer starts each run. Each core_probe run takes the host probe lock for itself and frees it before the next, so do not wrap the command in `flock`. Nothing runs by itself.
### standalone_probe.py
Runs a platform's standalone emulator on a game and records it like
`core_probe.py`, in the same `measurements/<emulator>.jsonl` and the same
record schema (`frontend.script` names this script). No existing harness
traces the files a standalone emulator opens or writes a record, so this is
a thin layer over the emulator's own batch mode, Xvfb and core_probe's
sandbox, oracle and record functions, imported and not copied.
```bash
python scripts/standalone_probe.py resolve duckstation # the asset EmuDeck's installer picks
python scripts/standalone_probe.py fetch duckstation # download and unpack it, by sha256
python scripts/standalone_probe.py run duckstation \
--content game.cue --content-label "Bust-A-Move 2 - Arcade Edition (USA)" \
--bios-file scph5501.bin=bios/Sony/PlayStation/scph5501.bin \
--samples 60 --interval 1.5 --require-sandbox --record
python scripts/standalone_probe.py check pcsx2 \
--content game.bin --vary ps2-0230a-20080220.bin= \
--vary "ps2-0230a-20080220.bin=bios/Sony/PlayStation 2/ps2-0230a-20080220.bin" \
--claim "..." --method "..." --require-sandbox --record
```
| Step | What happens |
|------|--------------|
| Binary | The release asset the platform installs, chosen by its installer's own rule. EmuDeck's `getReleaseURLGH` takes the first asset, over GitHub's release list in its order, pre-releases included, whose name matches: `DuckStation-x64.AppImage` and `pcsx2-*-Qt.AppImage`. It is downloaded into `.cache/standalone/<emulator>/<sha256>/` and unpacked with `unsquashfs` at the offset the AppImage runtime computes, so the runtime is never run. The record names the asset, its release tag, its URL and its sha256 |
| Settings | Written before each repetition in a scratch data folder, `$XDG_CONFIG_HOME/duckstation/settings.ini` and `$XDG_CONFIG_HOME/PCSX2/inis/PCSX2.ini`, the places the emulators read on Linux. The BIOS folder setting names the staged BIOS folder, as EmuDeck points it at `Emulation/bios`. Software rendering, no update check, no setup wizard. `--setting SECTION.KEY=VALUE` adds one. The record lists every setting |
| Sandbox | The allowlist bubblewrap sandbox of `core_probe.py`: the unpacked emulator, the content folder and the staged BIOS folder read-only, the repetition's scratch folder the one writable path, no network. Xvfb runs inside it, on the sandbox's own `/tmp`, so the display is private to the run. `--require-sandbox` refuses to run without bubblewrap |
| Screen | Xvfb keeps its screen as a file (`-fbdir`). The probe reads it every `--interval` seconds, `--samples` times, and hashes each sample's pixels. `--png-dir` writes each distinct sample as PNG for review |
| Files | `strace -f` inside the sandbox: the files the emulator opened in the staged BIOS folder, and the ones it looked for there and did not find |
| Verdict | `core_probe.judge` on each repetition, with the oracle of `tests/campaign/oracle.yml` looked up by the content's sha1 and the emulator's name, plus the emulator's own error strings this script lists (DuckStation's "No BIOS image found for", PCSX2's "Unable to auto locate a BIOS image"). An emulator that exits before the last sample is a crash |
| Option | Effect |
|--------|--------|
| `--bios-file DEST=SRC` | copy SRC into the staged BIOS folder as DEST |
| `--setting SECTION.KEY=VALUE` | an emulator setting written before the run |
| `--sha256` | the fetched asset to run (default: the newest fetched) |
| `--samples`, `--interval` | screen samples per repetition (default 60), and seconds between two (default 1) |
| `--oracle` | the boot oracle file (default `tests/campaign/oracle.yml`, as `core_probe.py`) |
| `--png-dir` | each distinct sampled screen of the first repetition as PNG |
| `--record`, `--subject`, `--supersedes`, `--max-load`, `--work-dir`, `--no-trace`, `--require-sandbox` | as in `core_probe.py` |
| `check`: `--vary`, `--observable`, `--claim`, `--method`, `--repeat` | as in `core_probe.py`, compared on `verdict` by default |
Supported: DuckStation and PCSX2. Dolphin, Flycast, PPSSPP, melonDS, xemu and
MAME are installed by EmuDeck from Flathub, Ryujinx from a Codeberg tarball and
RPCS3 from its own update server: each needs its installer's rule before it
can be added. Cemu is an AppImage like the two supported ones, and waits for
Wii U content, which no catalog romfetch reads holds. Each run takes the host probe lock (`RETROBIOS_PROBE_LOCK`) for itself, its load check included, and frees it when it ends, as `core_probe.py` does. A maintainer starts each run. Nothing runs
by itself.
### Other tools
| Script | Purpose |