OpenRakis / Cryogenic

An open-source reimplementation of Cryo's DUNE game (WIP)
Apache License 2.0
26 stars 1 forks source link

Latest "Fake ASM" generated code access the emulated stack when it is empty -> Exception #14

Closed maximilien-noal closed 2 years ago

maximilien-noal commented 2 years ago

21:41:35 ERR { SourceContext: "Spice86.UI.ViewModels.MainWindowViewModel" }] An error occurred during execution System.InvalidOperationException: Stack empty. at System.Collections.Generic.Stack1.ThrowForEmptyStack() at System.Collections.Generic.Stack1.Pop() at Spice86.Emulator.ReverseEngineer.JumpDispatcher.Jump(Func2 target, Int32 entryAddress) in /home/max/repos/Spice86/src/Spice86/Emulator/ReverseEngineer/JumpDispatcher.cs:line 26 at Cryogenic.Overrides.Overrides.spice86_generated_label_ret_target_1000_E67B_01E67B(Int32 loadOffset) in /home/max/repos/Cryogenic/src/Cryogenic/Overrides/Generated/GeneratedCode17.cs:line 3739 at Spice86.Emulator.ReverseEngineer.JumpDispatcher.Jump(Func2 target, Int32 entryAddress) in /home/max/repos/Spice86/src/Spice86/Emulator/ReverseEngineer/JumpDispatcher.cs:line 22 at Cryogenic.Overrides.Overrides.spice86_generated_label_call_target_1000_E675_01E675(Int32 loadOffset) in /home/max/repos/Cryogenic/src/Cryogenic/Overrides/Generated/GeneratedCode17.cs:line 3692 at Spice86.Emulator.ReverseEngineer.JumpDispatcher.Jump(Func2 target, Int32 entryAddress) in /home/max/repos/Spice86/src/Spice86/Emulator/ReverseEngineer/JumpDispatcher.cs:line 22 at Cryogenic.Overrides.Overrides.spice86_generated_label_ret_target_1000_E67B_01E67B(Int32 loadOffset) in /home/max/repos/Cryogenic/src/Cryogenic/Overrides/Generated/GeneratedCode17.cs:line 3739 at Spice86.Emulator.ReverseEngineer.JumpDispatcher.Jump(Func2 target, Int32 entryAddress) in /home/max/repos/Spice86/src/Spice86/Emulator/ReverseEngineer/JumpDispatcher.cs:line 22 at Cryogenic.Overrides.Overrides.spice86_generated_label_call_target_1000_E675_01E675(Int32 loadOffset) in /home/max/repos/Cryogenic/src/Cryogenic/Overrides/Generated/GeneratedCode17.cs:line 3692 at Spice86.Emulator.ReverseEngineer.CSharpOverrideHelper.<>cDisplayClass140_0.b0() in /home/max/repos/Spice86/src/Spice86/Emulator/ReverseEngineer/CSharpOverrideHelper.cs:line 201 at Spice86.Emulator.ReverseEngineer.CSharpOverrideHelper.ExecuteEnsuringSameStack(UInt16 expectedReturnCs, UInt16 expectedReturnIp, Action action) in /home/max/repos/Spice86/src/Spice86/Emulator/ReverseEngineer/CSharpOverrideHelper.cs:line 250 at Spice86.Emulator.ReverseEngineer.CSharpOverrideHelper.NearCall(UInt16 expectedReturnCs, UInt16 expectedReturnIp, Func2 function) in /home/max/repos/Spice86/src/Spice86/Emulator/ReverseEngineer/CSharpOverrideHelper.cs:line 199 at Cryogenic.Overrides.Overrides.spice86_generated_label_ret_target_1000_E5B4_01E5B4(Int32 loadOffset) in /home/max/repos/Cryogenic/src/Cryogenic/Overrides/Generated/GeneratedCode17.cs:line 3484 at Spice86.Emulator.ReverseEngineer.JumpDispatcher.Jump(Func2 target, Int32 entryAddress) in /home/max/repos/Spice86/src/Spice86/Emulator/ReverseEngineer/JumpDispatcher.cs:line 22 at Cryogenic.Overrides.Overrides.spice86_generated_label_call_target_1000_E594_01E594(Int32 loadOffset) in /home/max/repos/Cryogenic/src/Cryogenic/Overrides/Generated/GeneratedCode17.cs:line 3436 at Spice86.Emulator.ReverseEngineer.CSharpOverrideHelper.<>cDisplayClass140_0.b0() in /home/max/repos/Spice86/src/Spice86/Emulator/ReverseEngineer/CSharpOverrideHelper.cs:line 201 at Spice86.Emulator.ReverseEngineer.CSharpOverrideHelper.ExecuteEnsuringSameStack(UInt16 expectedReturnCs, UInt16 expectedReturnIp, Action action) in /home/max/repos/Spice86/src/Spice86/Emulator/ReverseEngineer/CSharpOverrideHelper.cs:line 250 at Spice86.Emulator.ReverseEngineer.CSharpOverrideHelper.NearCall(UInt16 expectedReturnCs, UInt16 expectedReturnIp, Func2 function) in /home/max/repos/Spice86/src/Spice86/Emulator/ReverseEngineer/CSharpOverrideHelper.cs:line 199 at Cryogenic.Overrides.Overrides.entry_1000_0000_10000(Int32 loadOffset) in /home/max/repos/Cryogenic/src/Cryogenic/Overrides/Generated/GeneratedCode.cs:line 2406 at Spice86.Emulator.Function.FunctionInformation.CallOverride() in /home/max/repos/Spice86/src/Spice86/Emulator/Function/FunctionInformation.cs:line 43 at Spice86.Emulator.Function.FunctionHandler.Call(CallType callType, UInt16 entrySegment, UInt16 entryOffset, Nullable1 expectedReturnSegment, Nullable`1 expectedReturnOffset, String name, Boolean recordReturn) in /home/max/repos/Spice86/src/Spice86/Emulator/Function/FunctionHandler.cs:line 52 at Spice86.Emulator.VM.Machine.Run() in /home/max/repos/Spice86/src/Spice86/Emulator/VM/Machine.cs:line 213 at Spice86.Emulator.ProgramExecutor.Run() in /home/max/repos/Spice86/src/Spice86/Emulator/ProgramExecutor.cs:line 51 at Spice86.UI.ViewModels.MainWindowViewModel.RunMachine() in /home/max/repos/Spice86/src/Spice86/UI/ViewModels/MainWindowViewModel.cs:line 292

maximilien-noal commented 2 years ago

Fixed by @kevinferrare