fix: let beebem system roms warn on size

This commit is contained in:
Abdessamad Derraz committed 2026-10-16 06:33:20 +02:00
1 parent 012913720c
commit e6960121d7
2 files changed
+42 -10

No files matched your search

+16 -8
View File
@@ -81,10 +81,11 @@ files:
system: bbc-micro-b
required: true
bundled: true
size: 16384
min_size: 16384
md5: 0a59a5ba15fe8557b5f7fee32bbd393a
sha1: 0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d
validation: [size]
on_mismatch: warn
note: "OS ROM slot. Read into 0xc000; an error is reported unless 16384 bytes are read."
source_ref: "Src/BeebMem.cpp:1291-1308, Src/RomConfigFile.cpp:43"
@@ -133,10 +134,11 @@ files:
system: bbc-micro-b
required: true
bundled: true
size: 16384
min_size: 16384
md5: 0a59a5ba15fe8557b5f7fee32bbd393a
sha1: 0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d
validation: [size]
on_mismatch: warn
note: "OS ROM slot for Model::IntegraB. Same dump as BeebFile/BBC/OS12.rom."
source_ref: "Src/RomConfigFile.cpp:63, Src/BeebMem.cpp:1291-1308"
@@ -223,10 +225,11 @@ files:
system: bbc-micro-bplus
required: true
bundled: true
size: 16384
min_size: 16384
md5: 978370cc7ab8589a137ada34388a6e32
sha1: d9426dd7454ca199cdef9435daa332cdf405c965
validation: [size]
on_mismatch: warn
note: "OS ROM slot for Model::BPlus."
source_ref: "Src/RomConfigFile.cpp:83, Src/BeebMem.cpp:1291-1308"
@@ -290,10 +293,11 @@ files:
system: bbc-master-128
required: true
bundled: true
size: 16384
min_size: 16384
md5: 9087f772447038a00178488b3591347b
sha1: 04d5876999f93fc61a18f172b1fbb3b75db733ac
validation: [size]
on_mismatch: warn
note: "OS ROM slot for Model::Master128, read into 0xC000 by BeebReadRoms (Src/BeebMem.cpp:1291-1308)."
source_ref: "Src/RomConfigFile.cpp:103"
@@ -415,10 +419,11 @@ files:
system: bbc-master-et
required: true
bundled: true
size: 16384
min_size: 16384
md5: 4d4afbf220abaa702026f42f98eb5807
sha1: c9483ef3ebd66930e635674a3776d171785ae959
validation: [size]
on_mismatch: warn
note: "OS ROM slot for Model::MasterET."
source_ref: "Src/RomConfigFile.cpp:123, Src/BeebMem.cpp:1291-1308"
@@ -468,10 +473,11 @@ files:
system: bbc-micro-b
required: false
bundled: true
size: 2048
min_size: 2048
md5: cd6ba85e22adec70b6d863de4c053db7
sha1: 05980c296e1a7800c4aa21d6bed16323b6d859d5
validation: [size]
on_mismatch: warn
note: >
Copied into tube RAM at 0xf800 on every 65C02 reset. An error is reported
unless 2048 bytes are read.
@@ -483,10 +489,11 @@ files:
system: bbc-micro-b
required: false
bundled: true
size: 4096
min_size: 4096
md5: c4c72ceb73300253dc69c865af32f5ac
sha1: d05de861922fed73041cc8ac2666886d95bae15b
validation: [size]
on_mismatch: warn
note: >
Loaded for TubeDevice::AcornZ80. An error is reported unless 4096 bytes are
read. Jonathan Harston's v1.21; the Acorn v1.20 ships as Z80-1.20.rom and is
@@ -514,10 +521,11 @@ files:
system: bbc-master-128
required: false
bundled: true
size: 16384
min_size: 16384
md5: de72efe184f74f1cb98f92b1fbf532bb
sha1: eb2a043d139ae0f3d512b4f1afa32286510c886c
validation: [size]
on_mismatch: warn
note: >
Loaded at 0xf0000 and mirrored three times to fill the top of the 1 MB space.
An error is reported unless 0x4000 bytes are read.
+26 -2
View File
@@ -34,11 +34,14 @@ class _Probe(unittest.TestCase):
self._tmp = tempfile.TemporaryDirectory()
self.addCleanup(self._tmp.cleanup)
def accepts(self, emulator: str, name: str, data: bytes) -> bool:
def accepts(self, emulator: str, name: str, data: bytes, strict: bool = False) -> bool:
"""strict counts a check the code only warns about."""
index = _build_validation_index({emulator: _profile(emulator)})
path = Path(self._tmp.name) / name
path.write_bytes(data)
return check_file_validation(str(path), name, index, emulators={emulator}) is None
return check_file_validation(
str(path), name, index, emulators={emulator}, strict=strict
) is None
class BeebEmTeletextFont(_Probe):
@@ -52,5 +55,26 @@ class BeebEmTeletextFont(_Probe):
self.assertTrue(self.accepts("beebem", "Teletext.fnt", b"\0" * 4000))
class BeebEmSystemRoms(_Probe):
"""The OS, Tube, Z80 and Master 512 ROMs are read with one fread of the
slot's size. A short read reports an error and BeebEm runs with what it
read; bytes past the slot are never read (Src/BeebMem.cpp:1291-1308,
Src/Tube.cpp:1540-1553, Src/Z80Support.cpp:247-261,
Src/Master512CoPro.cpp:3777-3790 at a982ba6)."""
CASES = (("OS12.rom", 16384), ("B+MOS.rom", 16384), ("MOS.rom", 16384),
("MOS400.rom", 16384), ("6502Tube.rom", 2048), ("Z80.rom", 4096),
("BIOS.rom", 16384))
def test_longer_is_read_and_shorter_only_warns(self):
for name, size in self.CASES:
with self.subTest(name=name):
self.assertTrue(self.accepts("beebem", name, b"\0" * (size * 2)))
self.assertTrue(self.accepts("beebem", name, b"\0" * (size // 2)))
self.assertFalse(
self.accepts("beebem", name, b"\0" * (size // 2), strict=True)
)
if __name__ == "__main__":
unittest.main()