diff --git a/src/SharpEmu.Libs/SystemService/SystemServiceExports.cs b/src/SharpEmu.Libs/SystemService/SystemServiceExports.cs index 260a3c6..8ac5088 100644 --- a/src/SharpEmu.Libs/SystemService/SystemServiceExports.cs +++ b/src/SharpEmu.Libs/SystemService/SystemServiceExports.cs @@ -38,8 +38,8 @@ public static class SystemServiceExports } // No system notice screen to skip in the emulator; report "do not skip". - Span flagBytes = stackalloc byte[sizeof(int)]; - BinaryPrimitives.WriteInt32LittleEndian(flagBytes, 0); + Span flagBytes = stackalloc byte[1]; + flagBytes[0] = 0; return ctx.Memory.TryWrite(flagAddress, flagBytes) ? ctx.SetReturn(0) : ctx.SetReturn((int)OrbisGen2Result.ORBIS_GEN2_ERROR_MEMORY_FAULT); diff --git a/tests/SharpEmu.Libs.Tests/SystemService/SystemServiceExportsTests.cs b/tests/SharpEmu.Libs.Tests/SystemService/SystemServiceExportsTests.cs new file mode 100644 index 0000000..ba1e1df --- /dev/null +++ b/tests/SharpEmu.Libs.Tests/SystemService/SystemServiceExportsTests.cs @@ -0,0 +1,29 @@ +// Copyright (C) 2026 SharpEmu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +using SharpEmu.HLE; +using SharpEmu.Libs.SystemService; +using Xunit; + +namespace SharpEmu.Libs.Tests.SystemService; + +public sealed class SystemServiceExportsTests +{ + private const ulong MemoryBase = 0x1_0000_0000; + + [Fact] + public void GetNoticeScreenSkipFlagWritesOneByteAtMemoryBoundary() + { + var memory = new FakeCpuMemory(MemoryBase, 1); + var context = new CpuContext(memory, Generation.Gen5); + Assert.True(memory.TryWrite(MemoryBase, new byte[] { 0xA5 })); + context[CpuRegister.Rdi] = MemoryBase; + + Assert.Equal(0, SystemServiceExports.SystemServiceGetNoticeScreenSkipFlag(context)); + Assert.Equal(0UL, context[CpuRegister.Rax]); + + Span flag = stackalloc byte[1]; + Assert.True(memory.TryRead(MemoryBase, flag)); + Assert.Equal(0, flag[0]); + } +}