fix: let a declared size contest another size

System.dat pins the 2 KiB X1 font as xmil/IPLROM.X1T, where xmil reads
a 32 KiB Turbo IPL. A held copy of the exact size a profile declares now
proves its claim against a file of another size, so the existence packs
ship the IPL. The font's duplicate under the IPL name is removed.
This commit is contained in:
Abdessamad Derraz committed 2026-10-18 13:08:40 +02:00
1 parent bfa6c51ff5
commit 2b535525ef
15 files changed
+264 -83

No files matched your search

File renamed without changes.
Binary file not shown.
+34 -43
View File
@@ -1,6 +1,6 @@
{
"schema_version": 1,
"generated_at": "2026-10-18T06:45:25Z",
"generated_at": "2026-10-18T11:04:01Z",
"total_files": 19075,
"total_size": 17567770846,
"bios_dir": "bios",
@@ -188752,23 +188752,6 @@
"crc32": "7b28d9de",
"adler32": "d6c53905"
},
"44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3": {
"path": "bios/Sharp/X1/.variants/IPLROM.X1T.44620f57",
"name": "IPLROM.X1T",
"size": 32768,
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"md5": "56c28adcf1f3a2f87cf3d57c378013f5",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"crc32": "2e8b767c",
"adler32": "7af8f6bb",
"provenance": {
"tosec": {
"dat": "Sharp X1 Turbo - Firmware",
"name": "Sharp X1 Turbo IPL ROM (198x)(Sharp).bin",
"description": "Sharp X1 Turbo IPL ROM (198x)(Sharp)"
}
}
},
"1c1a0d8c9f4c446ccd7470516b215ddca5052fb2": {
"path": "bios/Sharp/X1/FNT0808.X1",
"name": "FNT0808.X1",
@@ -188806,6 +188789,23 @@
"crc32": "46826745",
"adler32": "5991cbd7"
},
"44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3": {
"path": "bios/Sharp/X1/IPLROM.X1T",
"name": "IPLROM.X1T",
"size": 32768,
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"md5": "56c28adcf1f3a2f87cf3d57c378013f5",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"crc32": "2e8b767c",
"adler32": "7af8f6bb",
"provenance": {
"tosec": {
"dat": "Sharp X1 Turbo - Firmware",
"name": "Sharp X1 Turbo IPL ROM (198x)(Sharp).bin",
"description": "Sharp X1 Turbo IPL ROM (198x)(Sharp)"
}
}
},
"d3395e9aeb5b8bbba7654dd471bcd8af228ee69a": {
"path": "bios/Sharp/X1/iplrom.x1",
"name": "iplrom.x1",
@@ -214475,10 +214475,10 @@
"1474da2b8fbbb37abce8e7ab5cf9024c": "fec7527ecbf79b1ac697137f770bb8715fe8a652",
"e634c906c23e62d5d3cd63581e5748ff": "2ca428b70ed1746834d129c11fb8e60a56317cff",
"59074727a953fe965109b7dbe3298e30": "c4db9a6e99873808c8022afd1c50fef556a8b44d",
"56c28adcf1f3a2f87cf3d57c378013f5": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"851e4a5936f17d13f8c39a980cf00d77": "1c1a0d8c9f4c446ccd7470516b215ddca5052fb2",
"fb31145036be80d392c95ff50ee8553c": "4f06d20c997a79ee6af954b69498147789bf1847",
"77000214fda5f3ecd2043db1e6091074": "b9e6c320611f0842df6f45673c47c3e23bc14272",
"56c28adcf1f3a2f87cf3d57c378013f5": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"eeeea1cd29c6e0e8b094790ae969bfa7": "d3395e9aeb5b8bbba7654dd471bcd8af228ee69a",
"51b55ee3807901c015fdb93616858b8b": "76c18deb168ad0ffd7886a130a9e74e915070782",
"d407317a52f8425a6753232064d14700": "77be2f6f28897f99b73d4c47bf7cd47e999fd7cd",
@@ -263515,9 +263515,6 @@
"IPLROM.X1": [
"c4db9a6e99873808c8022afd1c50fef556a8b44d"
],
"IPLROM.X1T": [
"44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3"
],
"FNT0808.X1": [
"1c1a0d8c9f4c446ccd7470516b215ddca5052fb2"
],
@@ -263527,6 +263524,9 @@
"FNT1616.X1": [
"b9e6c320611f0842df6f45673c47c3e23bc14272"
],
"IPLROM.X1T": [
"44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3"
],
"iplrom.x1": [
"d3395e9aeb5b8bbba7654dd471bcd8af228ee69a"
],
@@ -268584,10 +268584,6 @@
"sega-saturn:85ec9ca47d8f6807718151cbcca8b964": [
"df94c5b4d47eb3cc404d88b33a8fda237eaf4720"
],
"iplrom.x1t": [
"1c1a0d8c9f4c446ccd7470516b215ddca5052fb2",
"44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3"
],
"cgrom.tmp": [
"8d72c5b4d63bb14c5dbdac495244d659aa1498b6"
],
@@ -269321,6 +269317,10 @@
"Kickstart v3.0 rev 39.106 (1992)(Commodore)(A1200)[!].rom": [
"70033828182fffc7ed106e5373a8b89dda76faa5"
],
"iplrom.x1t": [
"44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"1c1a0d8c9f4c446ccd7470516b215ddca5052fb2"
],
"basic11.rom": [
"9451a1a09d8f75944dbd6f91193fc360f1de80ac"
],
@@ -290459,10 +290459,10 @@
"17878e56": "fec7527ecbf79b1ac697137f770bb8715fe8a652",
"a61ca7c7": "2ca428b70ed1746834d129c11fb8e60a56317cff",
"7b28d9de": "c4db9a6e99873808c8022afd1c50fef556a8b44d",
"2e8b767c": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"e3995a57": "1c1a0d8c9f4c446ccd7470516b215ddca5052fb2",
"8f9fb213": "4f06d20c997a79ee6af954b69498147789bf1847",
"46826745": "b9e6c320611f0842df6f45673c47c3e23bc14272",
"2e8b767c": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"e70011d3": "d3395e9aeb5b8bbba7654dd471bcd8af228ee69a",
"72628c06": "76c18deb168ad0ffd7886a130a9e74e915070782",
"5dd9a0c5": "77be2f6f28897f99b73d4c47bf7cd47e999fd7cd",
@@ -309536,10 +309536,10 @@
"b853ce2856970592853e19e91f855e9905e4d9e5af46da26e8e818e0ed456cdf": "fec7527ecbf79b1ac697137f770bb8715fe8a652",
"ad1b2eb9300efd3d9476dad742c72e7436d9a9f67c951d537868553fa0c80843": "2ca428b70ed1746834d129c11fb8e60a56317cff",
"0513077cb96c90c3ab8809c44259d8274c7a34862ea7df1b957b2d6129eaaeb1": "c4db9a6e99873808c8022afd1c50fef556a8b44d",
"212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"42139ed610747190c8ca9046c799907b52582c0d642b5f52f1548d9c1d4a86f8": "1c1a0d8c9f4c446ccd7470516b215ddca5052fb2",
"e356dd1992708d2bdf03d4029ba07a8177158e1cb0eac145f881ed8dcdae35d8": "4f06d20c997a79ee6af954b69498147789bf1847",
"40c080b7ad381050fe9f8d8063985a2648785ef470e397fbeb3d606a9774fc48": "b9e6c320611f0842df6f45673c47c3e23bc14272",
"212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"e6295a523008688421991b651ab61de392b28c67bec9efbf040b0004e4b70a2a": "d3395e9aeb5b8bbba7654dd471bcd8af228ee69a",
"847de5c002e031b53459f76fd630779f692ff3d1e824ad5859e439ce1069c410": "76c18deb168ad0ffd7886a130a9e74e915070782",
"07ab9575dfc9024cd52ebc92e2f3e64e9a0a3d713f6902eaf81974f20174d582": "77be2f6f28897f99b73d4c47bf7cd47e999fd7cd",
@@ -544446,15 +544446,6 @@
".variants/IPLROM.X1.c4db9a6e": [
"c4db9a6e99873808c8022afd1c50fef556a8b44d"
],
"Sharp/X1/.variants/IPLROM.X1T.44620f57": [
"44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3"
],
"X1/.variants/IPLROM.X1T.44620f57": [
"44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3"
],
".variants/IPLROM.X1T.44620f57": [
"44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3"
],
"Sharp/X1/FNT0808.X1": [
"1c1a0d8c9f4c446ccd7470516b215ddca5052fb2"
],
@@ -544473,6 +544464,12 @@
"X1/FNT1616.X1": [
"b9e6c320611f0842df6f45673c47c3e23bc14272"
],
"Sharp/X1/IPLROM.X1T": [
"44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3"
],
"X1/IPLROM.X1T": [
"44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3"
],
"Sharp/X1/iplrom.x1": [
"d3395e9aeb5b8bbba7654dd471bcd8af228ee69a"
],
@@ -578233,12 +578230,6 @@
"Saturn/sega_101.bin": [
"df94c5b4d47eb3cc404d88b33a8fda237eaf4720"
],
"Sharp/X1/iplrom.x1t": [
"1c1a0d8c9f4c446ccd7470516b215ddca5052fb2"
],
"X1/iplrom.x1t": [
"1c1a0d8c9f4c446ccd7470516b215ddca5052fb2"
],
"Sharp/X68000/cgrom.tmp": [
"8d72c5b4d63bb14c5dbdac495244d659aa1498b6"
],
+2 -1
View File
@@ -53,10 +53,11 @@ notes: |
files:
- name: IPLROM.X1
path: xmil/IPLROM.X1
size: 32768
size: 4096
required: false
hle_fallback: true
description: "X1 IPL ROM. Loaded when ROM_TYPE=1 (X1 model)."
note: "file_read copies up to 0x8000 bytes into biosmem, unchecked; the X1 IPL dump is 4 KiB."
source_ref: "io/memio.c:82,96-108"
- name: IPLROM.X1T
+3 -3
View File
@@ -5,7 +5,7 @@
"platform": "batocera",
"display_name": "Batocera",
"version": "1.0",
"generated": "2026-10-18T00:39:54Z",
"generated": "2026-10-18T11:04:01Z",
"base_destination": "bios",
"detect": [
{
@@ -9951,7 +9951,7 @@
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/.variants/IPLROM.X1T.44620f57",
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": null,
"systems": [
"sharp-x1"
@@ -139643,7 +139643,7 @@
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/.variants/IPLROM.X1T.44620f57",
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": [
"x1"
],
+52 -8
View File
@@ -5,7 +5,7 @@
"platform": "lakka",
"display_name": "Lakka",
"version": "1.0",
"generated": "2026-10-18T00:39:54Z",
"generated": "2026-10-18T11:04:01Z",
"base_destination": "system",
"detect": [
{
@@ -17,9 +17,9 @@
],
"standalone_copies": [],
"total_files": 5887,
"total_size": 6132361388,
"total_size": 6132392108,
"pack_files": 8529,
"pack_size": 6172909591,
"pack_size": 6172940311,
"total_omitted": 8,
"omitted_files": [
{
@@ -3930,6 +3930,28 @@
"systems": [
"galaksija"
],
"slot_choices": [
{
"sha1": "5d5ab4313a2d0effe7572bb129193b64cab002c1",
"sha256": "7d93fe474fcc98c06a6d96e533f8935e4e707edf0792d3e9d679ea68404375de",
"size": 4096,
"repo_path": "bios/Galaksija/ROM2.BIN",
"cores": [
"galaksija"
]
}
],
"declared_choices": [
{
"sha1": "5d5ab4313a2d0effe7572bb129193b64cab002c1",
"sha256": "7d93fe474fcc98c06a6d96e533f8935e4e707edf0792d3e9d679ea68404375de",
"size": 4096,
"repo_path": "bios/Galaksija/ROM2.BIN",
"systems": [
"galaksija"
]
}
],
"alternatives": [
{
"sha1": "5d5ab4313a2d0effe7572bb129193b64cab002c1",
@@ -9577,20 +9599,42 @@
},
{
"dest": "xmil/IPLROM.X1T",
"sha1": "1c1a0d8c9f4c446ccd7470516b215ddca5052fb2",
"sha256": "42139ed610747190c8ca9046c799907b52582c0d642b5f52f1548d9c1d4a86f8",
"size": 2048,
"repo_path": "bios/Sharp/X1/FNT0808.X1",
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": null,
"systems": [
"sharp-x1"
],
"slot_choices": [
{
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": [
"x1"
]
}
],
"declared_choices": [
{
"sha1": "1c1a0d8c9f4c446ccd7470516b215ddca5052fb2",
"sha256": "42139ed610747190c8ca9046c799907b52582c0d642b5f52f1548d9c1d4a86f8",
"size": 2048,
"repo_path": "bios/Sharp/X1/FNT0808.X1",
"systems": [
"sharp-x1"
]
}
],
"alternatives": [
{
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/.variants/IPLROM.X1T.44620f57",
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": [
"x1"
]
+3 -3
View File
@@ -5,7 +5,7 @@
"platform": "recalbox",
"display_name": "Recalbox",
"version": "1.0",
"generated": "2026-10-18T00:39:54Z",
"generated": "2026-10-18T11:04:01Z",
"base_destination": "bios",
"detect": [
{
@@ -6928,7 +6928,7 @@
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/.variants/IPLROM.X1T.44620f57",
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": null,
"systems": [
"x1"
@@ -6938,7 +6938,7 @@
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/.variants/IPLROM.X1T.44620f57",
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": [
"x1"
]
+52 -8
View File
@@ -5,7 +5,7 @@
"platform": "retroarch",
"display_name": "RetroArch",
"version": "1.0",
"generated": "2026-10-18T00:39:54Z",
"generated": "2026-10-18T11:04:01Z",
"base_destination": "system",
"detect": [
{
@@ -268,9 +268,9 @@
}
],
"total_files": 5880,
"total_size": 6132196328,
"total_size": 6132227048,
"pack_files": 8522,
"pack_size": 6172744531,
"pack_size": 6172775251,
"total_omitted": 8,
"omitted_files": [
{
@@ -4181,6 +4181,28 @@
"systems": [
"galaksija"
],
"slot_choices": [
{
"sha1": "5d5ab4313a2d0effe7572bb129193b64cab002c1",
"sha256": "7d93fe474fcc98c06a6d96e533f8935e4e707edf0792d3e9d679ea68404375de",
"size": 4096,
"repo_path": "bios/Galaksija/ROM2.BIN",
"cores": [
"galaksija"
]
}
],
"declared_choices": [
{
"sha1": "5d5ab4313a2d0effe7572bb129193b64cab002c1",
"sha256": "7d93fe474fcc98c06a6d96e533f8935e4e707edf0792d3e9d679ea68404375de",
"size": 4096,
"repo_path": "bios/Galaksija/ROM2.BIN",
"systems": [
"galaksija"
]
}
],
"alternatives": [
{
"sha1": "5d5ab4313a2d0effe7572bb129193b64cab002c1",
@@ -9696,20 +9718,42 @@
},
{
"dest": "xmil/IPLROM.X1T",
"sha1": "1c1a0d8c9f4c446ccd7470516b215ddca5052fb2",
"sha256": "42139ed610747190c8ca9046c799907b52582c0d642b5f52f1548d9c1d4a86f8",
"size": 2048,
"repo_path": "bios/Sharp/X1/FNT0808.X1",
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": null,
"systems": [
"sharp-x1"
],
"slot_choices": [
{
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": [
"x1"
]
}
],
"declared_choices": [
{
"sha1": "1c1a0d8c9f4c446ccd7470516b215ddca5052fb2",
"sha256": "42139ed610747190c8ca9046c799907b52582c0d642b5f52f1548d9c1d4a86f8",
"size": 2048,
"repo_path": "bios/Sharp/X1/FNT0808.X1",
"systems": [
"sharp-x1"
]
}
],
"alternatives": [
{
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/.variants/IPLROM.X1T.44620f57",
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": [
"x1"
]
+2 -2
View File
@@ -5,7 +5,7 @@
"platform": "retrobat",
"display_name": "RetroBat",
"version": "1.0",
"generated": "2026-10-18T00:39:54Z",
"generated": "2026-10-18T11:04:01Z",
"base_destination": "bios",
"detect": [
{
@@ -7706,7 +7706,7 @@
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/.variants/IPLROM.X1T.44620f57",
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": null,
"systems": [
"sharp-x1"
+2 -2
View File
@@ -5,7 +5,7 @@
"platform": "retrodeck",
"display_name": "RetroDECK",
"version": "1.0",
"generated": "2026-10-18T00:39:54Z",
"generated": "2026-10-18T11:04:01Z",
"base_destination": "",
"detect": [
{
@@ -84621,7 +84621,7 @@
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/.variants/IPLROM.X1T.44620f57",
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": [
"x1"
]
+52 -8
View File
@@ -5,7 +5,7 @@
"platform": "retropie",
"display_name": "RetroPie",
"version": "1.0",
"generated": "2026-10-18T00:39:54Z",
"generated": "2026-10-18T11:04:01Z",
"base_destination": "BIOS",
"detect": [
{
@@ -16,9 +16,9 @@
],
"standalone_copies": [],
"total_files": 9930,
"total_size": 8499656937,
"total_size": 8499687657,
"pack_files": 12572,
"pack_size": 8540205140,
"pack_size": 8540235860,
"total_omitted": 107,
"omitted_files": [
{
@@ -4993,6 +4993,28 @@
"systems": [
"galaksija"
],
"slot_choices": [
{
"sha1": "5d5ab4313a2d0effe7572bb129193b64cab002c1",
"sha256": "7d93fe474fcc98c06a6d96e533f8935e4e707edf0792d3e9d679ea68404375de",
"size": 4096,
"repo_path": "bios/Galaksija/ROM2.BIN",
"cores": [
"galaksija"
]
}
],
"declared_choices": [
{
"sha1": "5d5ab4313a2d0effe7572bb129193b64cab002c1",
"sha256": "7d93fe474fcc98c06a6d96e533f8935e4e707edf0792d3e9d679ea68404375de",
"size": 4096,
"repo_path": "bios/Galaksija/ROM2.BIN",
"systems": [
"galaksija"
]
}
],
"alternatives": [
{
"sha1": "5d5ab4313a2d0effe7572bb129193b64cab002c1",
@@ -10641,20 +10663,42 @@
},
{
"dest": "xmil/IPLROM.X1T",
"sha1": "1c1a0d8c9f4c446ccd7470516b215ddca5052fb2",
"sha256": "42139ed610747190c8ca9046c799907b52582c0d642b5f52f1548d9c1d4a86f8",
"size": 2048,
"repo_path": "bios/Sharp/X1/FNT0808.X1",
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": null,
"systems": [
"sharp-x1"
],
"slot_choices": [
{
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": [
"x1"
]
}
],
"declared_choices": [
{
"sha1": "1c1a0d8c9f4c446ccd7470516b215ddca5052fb2",
"sha256": "42139ed610747190c8ca9046c799907b52582c0d642b5f52f1548d9c1d4a86f8",
"size": 2048,
"repo_path": "bios/Sharp/X1/FNT0808.X1",
"systems": [
"sharp-x1"
]
}
],
"alternatives": [
{
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/.variants/IPLROM.X1T.44620f57",
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": [
"x1"
]
+2 -2
View File
@@ -5,7 +5,7 @@
"platform": "rocknix",
"display_name": "ROCKNIX",
"version": "1.0",
"generated": "2026-10-18T06:45:25Z",
"generated": "2026-10-18T11:04:01Z",
"base_destination": "bios",
"detect": [
{
@@ -61702,7 +61702,7 @@
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/.variants/IPLROM.X1T.44620f57",
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": [
"x1"
]
+2 -2
View File
@@ -5,7 +5,7 @@
"platform": "romm",
"display_name": "RomM",
"version": "1.0",
"generated": "2026-10-18T00:39:54Z",
"generated": "2026-10-18T11:04:01Z",
"base_destination": "bios",
"detect": [
{
@@ -14580,7 +14580,7 @@
"sha1": "44620f57a25f0bcac2b57ca2b0f1ebad3bf305d3",
"sha256": "212895703175665be8544daa55b65da1aebcf1e9a2db65bcc1622e564b802b71",
"size": 32768,
"repo_path": "bios/Sharp/X1/.variants/IPLROM.X1T.44620f57",
"repo_path": "bios/Sharp/X1/IPLROM.X1T",
"cores": [
"x1"
],
+26 -1
View File
@@ -16,6 +16,7 @@ union and is never discarded, the same rule region.py already applies.
from __future__ import annotations
import os
from dataclasses import dataclass, field
from typing import TYPE_CHECKING
@@ -43,7 +44,23 @@ if TYPE_CHECKING:
# A profile entry can prove a slot without declaring a hash: Dolphin names no
# checksum for the GameCube boot ROM because its source names none, and the
# proof is then the path the repository stores the file at.
PROVEN_STATUSES = frozenset({"path_exact", "members_held"})
# A profile entry that names an exact size, for a file the code reads in
# full (no hash to declare), is proven by a held copy of that size: the
# platform's xmil/IPLROM.X1T pinned the 2 KiB X1 font where xmil reads a
# 32 KiB Turbo IPL, and a name-only claim could not contest it.
SIZE_EXACT = "size_exact"
PROVEN_STATUSES = frozenset({"path_exact", "members_held", SIZE_EXACT})
def _size_the_code_reads(entry: dict, local: str | None) -> bool:
"""Whether a name-resolved copy has the exact size the entry declares."""
size = entry.get("size")
if not local or not isinstance(size, int) or size <= 0:
return False
try:
return os.path.getsize(local) == size
except OSError:
return False
# A core that reads ROMs inside an archive proves the archive by its members:
# FBNeo's neocdz.zip is any copy holding neocd.bin and 000-lo.lo by crc.
@@ -229,6 +246,8 @@ def profile_claims(
dest_hint=dest,
data_dir_registry=data_dir_registry,
)
if status == "name_exact" and _size_the_code_reads(entry, local):
status = SIZE_EXACT
claims.append(
Claim(
origin="profile",
@@ -372,6 +391,12 @@ def _slot_claims(
platform = by_dest.get(key)
if platform is None or not claim.is_proven:
continue
if claim.status == SIZE_EXACT and (
not platform.local_path
or _size_the_code_reads(claim.entry, platform.local_path)
):
# A size proves a claim only against a file of another size.
continue
if not platform.is_proven and not (path_only and platform.local_path):
continue
by_slot.setdefault(key, []).append(claim)
+32
View File
@@ -610,6 +610,38 @@ class TestProvenEvidence(unittest.TestCase):
class AnExactSizeContestsAnotherSize(unittest.TestCase):
"""System.dat pinned the 2 KiB X1 font as xmil/IPLROM.X1T, where xmil
reads a 32 KiB Turbo IPL; the profile's name-only claim could not
contest it, and RetroArch packs shipped the font as the IPL."""
def setUp(self):
import tempfile
self._tmp = tempfile.TemporaryDirectory()
self.addCleanup(self._tmp.cleanup)
root = Path(self._tmp.name)
self.ipl = root / "IPLROM.X1T"
self.ipl.write_bytes(b"i" * 32768)
self.font = root / "FNT0808.X1"
self.font.write_bytes(b"f" * 2048)
def test_a_held_copy_of_the_declared_size_proves_the_claim(self):
entry = {"name": "IPLROM.X1T", "size": 32768}
self.assertTrue(slots._size_the_code_reads(entry, str(self.ipl)))
self.assertFalse(slots._size_the_code_reads(entry, str(self.font)))
self.assertTrue(slots.Claim("profile", "d", "n", status=slots.SIZE_EXACT).is_proven)
def test_retroarch_ships_the_turbo_ipl(self):
import json as _json
manifest = _json.loads(
(Path(__file__).resolve().parents[1] / "install" / "retroarch.json").read_text()
)
entry = next(f for f in manifest["files"] if f["dest"] == "xmil/IPLROM.X1T")
self.assertEqual(entry["size"], 32768)
class ManifestFollowsTheArbitration(unittest.TestCase):
"""The installer is handed the file the ZIP carries on a contested slot."""