From 28d91e2eea9ec3b0f6e992954947ff3fb3b5f1d0 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 3 Nov 2026 10:16:09 +0100 Subject: [PATCH 1/2] fix: settle test taps past float rounding --- tests/test_install_tui.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tests/test_install_tui.py b/tests/test_install_tui.py index 98932609d..d1f5f18d2 100644 --- a/tests/test_install_tui.py +++ b/tests/test_install_tui.py @@ -10081,9 +10081,11 @@ def drawn(state: install.TuiState, cols: int, rows: int) -> list: def settled(state: install.TuiState) -> None: - """The clock moved on past TUI_TAP_SETTLE since the screen was drawn.""" + """The clock moved on past TUI_TAP_SETTLE since the screen was drawn. + A millisecond past it: shown + 0.4 - shown is 0.39999 once the clock is + large, as a CI runner's uptime makes it, and the tap read as too early.""" if state.hits is not None: - state.now = max(state.now, state.hits.shown + install.TUI_TAP_SETTLE) + state.now = max(state.now, state.hits.shown + install.TUI_TAP_SETTLE + 0.001) def tap(state: install.TuiState, col: int, row: int, button: int = 0) -> list: @@ -11975,6 +11977,16 @@ class TwoTapsOnlyWhereFilesAreWritten(unittest.TestCase): self.assertIn(f"{install.COLOUR_ROLES['accent']}m{entry}\x1b[0m", painted) self.assertEqual(tap(state, 2, len(lines) - 1), [("run", "install")]) + def test_a_tap_settles_on_a_clock_as_large_as_a_runners(self): + """CI's monotonic clock counts the runner's uptime: shown + 0.4 - shown + came out under 0.4 there and every deliberate tap was dropped.""" + state = fresh_state() + state.mouse = True + state.now = 1234567.123456789 + lines = drawn(state, 80, 24) + tap(state, str(lines[-1]).index("B/Esc"), len(lines) - 1) + self.assertEqual(state.screen, "quit") + def test_quit_takes_two_activations(self): state = fresh_state() state.mouse = True From bb634661d5e91ab4009ecf50355f174f48a0a89e Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 3 Nov 2026 10:41:16 +0100 Subject: [PATCH 2/2] chore: advance beetle_saturn to 30f4c12 The pin moves past the merged Video CD card PR (libretro/beetle-saturn-libretro#99). The core now reads the Video CD player out of mpeg_card.bin with command 0xE2, so the entry and the notes no longer say the image is never read. Refs rebased, core_version still v1.32.1 at libretro.c:58. source-paths.json gains the new pin and the Kenji-NX pin that was missing. --- emulators/beetle_saturn.yml | 42 ++++++++++++++++-------------- website/src/data/source-paths.json | 41 ++++++++++++++++++++++++++++- 2 files changed, 62 insertions(+), 21 deletions(-) diff --git a/emulators/beetle_saturn.yml b/emulators/beetle_saturn.yml index 3bd569eb8..a1c779345 100644 --- a/emulators/beetle_saturn.yml +++ b/emulators/beetle_saturn.yml @@ -5,7 +5,7 @@ core: mednafen_saturn_libretro source: "https://github.com/libretro/beetle-saturn-libretro" upstream: "https://mednafen.github.io/" profiled_date: "2026-10-05" -source_commit: "2ce77e20a956dc9a67b8d3d527f477b984310feb" +source_commit: "30f4c12072d265c9e553dcb29386059114945dea" core_version: "v1.32.1" version_basis: kind: file @@ -24,19 +24,19 @@ notes: | reporting v1.32.1 (libretro.c:58). Every firmware file is read from the system directory: MDFN_MakeFName joins retro_base_directory and the bare name for MDFNMKF_FIRMWARE (libretro.c:2347-2348), and the BIOS path is - built the same way (mednafen/ss/ss.c:1867-1869). + built the same way (mednafen/ss/ss.c:1868-1870). Region comes from the disc header and the region table of mednafen/ss/db.c (libretro.c:1113-1115) and can be forced by the beetle_saturn_region option (libretro.c:454-476, libretro.c:1119-1120). With no content loaded the region defaults to North America (libretro.c:1069, libretro.c:1266-1267). The BIOS filename is hard-coded - per region (mednafen/ss/ss.c:1845-1848): sega_101.bin for Japan and Asia + per region (mednafen/ss/ss.c:1846-1849): sega_101.bin for Japan and Asia NTSC, mpr-17933.bin for every other area. The file must be exactly 524288 bytes and InitCommon returns false when it is absent, of another size or - short on read (mednafen/ss/ss.c:1943-1947, mednafen/ss/ss.c:1961-1984). + short on read (mednafen/ss/ss.c:1944-1948, mednafen/ss/ss.c:1962-1985). The sha256 of the loaded image is kept only to refuse a save state made - under another BIOS (mednafen/ss/ss.c:1988, mednafen/ss/ss.c:2594-2613). + under another BIOS (mednafen/ss/ss.c:1989, mednafen/ss/ss.c:2584-2603). ss.bios_sanity answers true (mednafen/settings.c:50-51) but nothing in the port reads it: the name and hash table that upstream checks under that setting is not carried over. @@ -51,21 +51,23 @@ notes: | ST-V content is a game ZIP or a bare ROM matched against the ST-V game table (libretro.c:1173-1193, libretro.c:1227-1247). The cabinet region of the matched game selects one of three ST-V BIOS images - (mednafen/ss/ss.c:1829-1843), and the beetle_saturn_region option is not + (mednafen/ss/ss.c:1830-1844), and the beetle_saturn_region option is not applied on that path (libretro.c:1183, libretro.c:1241). The image is read as a bare file from the system directory or, when that file is absent, as the member of the same name in stvbios.zip there, matched without regard - to case (mednafen/ss/ss.c:1875-1949, zip_reader.c:350-357). Either form - may be 131072 or 524288 bytes (mednafen/ss/ss.c:1911-1912, - mednafen/ss/ss.c:1962). + to case (mednafen/ss/ss.c:1876-1950, zip_reader.c:350-357). Either form + may be 131072 or 524288 bytes (mednafen/ss/ss.c:1912-1913, + mednafen/ss/ss.c:1963). The Video CD Card is driven through the CD block. With the beetle_saturn_mpeg_card option enabled (libretro.c:544-552, default disabled), CDB_Init opens mpeg_card.bin in the system directory and MPEG_Init keeps up to 0x80000 bytes of it (mednafen/settings.c:52-53, - mednafen/settings.c:68-69, mednafen/ss/cdb.c:1315-1332, - mednafen/ss/mpeg.c:423-450). The bytes are never mapped or executed: the - loaded image only makes the card authenticate (mednafen/ss/mpeg.c:667-675). + mednafen/settings.c:68-69, mednafen/ss/cdb.c:1316-1333, + mednafen/ss/mpeg.c:580-607). A loaded image makes the card authenticate + (mednafen/ss/mpeg.c:867-875), and the BIOS then reads the Video CD player + program out of it with command 0xE2 (mednafen/ss/cdb.c:2924-2971, + mednafen/ss/mpeg.c:839-859). No setting names a file for the bootable ROM cart: ss.cart.bootrom_path has no value in the port (mednafen/ss/cart.c:242-262, @@ -80,7 +82,7 @@ files: validation: {core: [size], upstream: [size, sha256]} sha256: "dcfef4b99605f872b6c3b6d05c045385cdea3d1b702906a0ed930df7bcb7deac" note: "Saturn BIOS v1.01 (Japan), loaded for the Japan and Asia NTSC areas. The port checks the size only. The sha256 is the value upstream Mednafen 1.32.1 holds for this filename in its ss.bios_sanity table (src/ss/ss.cpp, BIOSDB)." - source_ref: "mednafen/ss/ss.c:1845-1846 (region filename), mednafen/ss/ss.c:1867-1873 (open), mednafen/ss/ss.c:1961-1984 (size check, read), mednafen/ss/ss.c:1988 (sha256 for save states)" + source_ref: "mednafen/ss/ss.c:1846-1847 (region filename), mednafen/ss/ss.c:1868-1874 (open), mednafen/ss/ss.c:1962-1985 (size check, read), mednafen/ss/ss.c:1989 (sha256 for save states)" - name: "mpr-17933.bin" system: sega-saturn @@ -90,7 +92,7 @@ files: validation: {core: [size], upstream: [size, sha256]} sha256: "96e106f740ab448cf89f0dd49dfbac7fe5391cb6bd6e14ad5e3061c13330266f" note: "Saturn BIOS v1.00a (North America and Europe), loaded for every area other than Japan and Asia NTSC, and when no content is loaded. Disc area E maps to EU_PAL and the code has no Oceania area (disc.c:162-165). The port checks the size only. The sha256 is the value upstream Mednafen 1.32.1 holds for this filename in its ss.bios_sanity table (src/ss/ss.cpp, BIOSDB)." - source_ref: "mednafen/ss/ss.c:1847-1848 (region filename), mednafen/ss/ss.c:1867-1873 (open), mednafen/ss/ss.c:1961-1984 (size check, read), mednafen/ss/ss.c:1988 (sha256 for save states), libretro.c:1069 (default area)" + source_ref: "mednafen/ss/ss.c:1848-1849 (region filename), mednafen/ss/ss.c:1868-1874 (open), mednafen/ss/ss.c:1962-1985 (size check, read), mednafen/ss/ss.c:1989 (sha256 for save states), libretro.c:1069 (default area)" - name: "mpr-18811-mx.ic1" system: sega-saturn @@ -115,7 +117,7 @@ files: size: [131072, 524288] validation: [size] note: "ST-V BIOS for Japan and Asia NTSC cabinets. Read from stvbios.zip when the bare file is absent." - source_ref: "mednafen/ss/ss.c:1838-1839 (region filename), mednafen/ss/ss.c:1871-1988 (open, zip fallback, size check, read)" + source_ref: "mednafen/ss/ss.c:1839-1840 (region filename), mednafen/ss/ss.c:1872-1989 (open, zip fallback, size check, read)" - name: "epr-17952a.ic8" system: sega-stv @@ -124,7 +126,7 @@ files: size: [131072, 524288] validation: [size] note: "ST-V BIOS for North America and Central and South America cabinets. Read from stvbios.zip when the bare file is absent." - source_ref: "mednafen/ss/ss.c:1840-1841 (region filename), mednafen/ss/ss.c:1871-1988 (open, zip fallback, size check, read)" + source_ref: "mednafen/ss/ss.c:1841-1842 (region filename), mednafen/ss/ss.c:1872-1989 (open, zip fallback, size check, read)" - name: "epr-17954a.ic8" system: sega-stv @@ -133,7 +135,7 @@ files: size: [131072, 524288] validation: [size] note: "ST-V BIOS for every other cabinet region. Read from stvbios.zip when the bare file is absent." - source_ref: "mednafen/ss/ss.c:1842-1843 (region filename), mednafen/ss/ss.c:1871-1988 (open, zip fallback, size check, read)" + source_ref: "mednafen/ss/ss.c:1843-1844 (region filename), mednafen/ss/ss.c:1872-1989 (open, zip fallback, size check, read)" - name: "stvbios.zip" category: bios_zip @@ -141,7 +143,7 @@ files: required: false description: "ST-V BIOS archive" note: "Opened only when the bare ST-V BIOS file for the cabinet region is absent. The member of the same name is matched without regard to case and must be 131072 or 524288 bytes. No hash is checked." - source_ref: "mednafen/ss/ss.c:1888-1941 (open, member lookup, size check, extract), zip_reader.c:350-357 (case-insensitive lookup)" + source_ref: "mednafen/ss/ss.c:1889-1942 (open, member lookup, size check, extract), zip_reader.c:350-357 (case-insensitive lookup)" contents: - name: "epr-20091.ic8" description: "Japan and Asia NTSC" @@ -154,8 +156,8 @@ files: system: sega-saturn required: false size: 524288 - note: "Video CD Card program ROM, opened when beetle_saturn_mpeg_card is enabled. The card carries a 512 KiB mask ROM. The core keeps at most 0x80000 bytes, pads a shorter image with zeros and checks nothing else. The image is never mapped: its presence is what makes the card authenticate, and without it the card answers commands but does not authenticate." - source_ref: "mednafen/settings.c:68-69 (filename), mednafen/ss/cdb.c:1315-1332 (open), mednafen/ss/mpeg.c:67-71 (size), mednafen/ss/mpeg.c:423-450 (read), mednafen/ss/mpeg.c:667-675 (authentication)" + note: "Video CD Card program ROM, opened when beetle_saturn_mpeg_card is enabled. The card carries a 512 KiB mask ROM. The core keeps at most 0x80000 bytes, pads a shorter image with zeros and checks nothing else. A loaded image makes the card authenticate. Command 0xE2 then copies the Video CD player program out of it, from the offset its first four bytes give plus 8, so an image of the wrong bytes authenticates but runs no player. Without it the card answers commands but does not authenticate." + source_ref: "mednafen/settings.c:68-69 (filename), mednafen/ss/cdb.c:1316-1333 (open), mednafen/ss/mpeg.c:67-71 (size), mednafen/ss/mpeg.c:580-607 (read), mednafen/ss/mpeg.c:867-875 (authentication), mednafen/ss/mpeg.c:839-859 (program offset), mednafen/ss/cdb.c:2924-2971 (0xE2 program read)" - name: "satar4mp.bin" system: sega-saturn diff --git a/website/src/data/source-paths.json b/website/src/data/source-paths.json index a8c3cda93..c7e9e7996 100644 --- a/website/src/data/source-paths.json +++ b/website/src/data/source-paths.json @@ -141,6 +141,44 @@ "src/Ryujinx.Common/Configuration/AppDataManager.cs", "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs" ], + "git.ryujinx.app/projects/Kenji-NX@53d32a761e61dc8e9b5c0744199a890fc8d934d5": [ + "README.md", + "src/KenjinxAndroid/app/build.gradle", + "src/KenjinxAndroid/app/src/main/AndroidManifest.xml", + "src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/MainActivity.kt", + "src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/MainViewModel.kt", + "src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/QuickSettings.kt", + "src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/SettingsViewModel.kt", + "src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/VulkanDriverViewModel.kt", + "src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/GameViews.kt", + "src/LibKenjinx/Android/JniExportedMethods.cs", + "src/LibKenjinx/LibKenjinx.Input.cs", + "src/LibKenjinx/LibKenjinx.cs", + "src/LibKenjinx/LibKenjinx.csproj", + "src/LibKenjinx/VulkanLoader.cs", + "src/Ryujinx.Audio.Backends.SDL3/SDL3HardwareDeviceDriver.cs", + "src/Ryujinx.Common/Configuration/AppDataManager.cs", + "src/Ryujinx.Common/ReleaseInformation.cs", + "src/Ryujinx.HLE/FileSystem/ContentManager.cs", + "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs", + "src/Ryujinx.HLE/HOS/Horizon.cs", + "src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs", + "src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboDecryptor.cs", + "src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboMasterKey.cs", + "src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/INfp.cs", + "src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/KenjinxAmiiboShim.cs", + "src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs", + "src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs", + "src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs", + "src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs", + "src/Ryujinx.HLE/Kenjinx/AmiiboBridge.cs", + "src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs", + "src/Ryujinx.Input.SDL3/SDL3GamepadDriver.cs", + "src/Ryujinx.SDL3.Common/SDL3Driver.cs", + "src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs", + "src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs", + "src/Ryujinx/UI/Windows/MainWindow.axaml.cs" + ], "github.com/2ship2harkinian/2ship2harkinian@8a24047fbce8915993804e7819f4df4fa591551f": [ "docs/supportedHashes.json", "mm/2s2h/BenPort.cpp", @@ -4057,7 +4095,7 @@ "github.com/libretro/beetle-psx-libretro@7fea57a541abb39b8c5035b6261c3e70962d221b": [ "libretro.c" ], - "github.com/libretro/beetle-saturn-libretro@2ce77e20a956dc9a67b8d3d527f477b984310feb": [ + "github.com/libretro/beetle-saturn-libretro@30f4c12072d265c9e553dcb29386059114945dea": [ "disc.c", "libretro.c", "mednafen/settings.c", @@ -6257,6 +6295,7 @@ "yabause/src/utils/src/db.c" ], "github.com/libretro/yabause@8926b0c6c347f8c5c755911ddb0ac695420ffbf8": [ + "yabause/src/cs2.c", "yabause/src/libretro/libretro.c", "yabause/src/memory.c", "yabause/src/memory.h"