8506b7a334
THis fix a bug introduced in #1560 that would cause "Stop emulation" to actually restart the game all the time.
60 lines
1.6 KiB
C#
60 lines
1.6 KiB
C#
using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Ryujinx.HLE.HOS
|
|
{
|
|
public class UserChannelPersistence
|
|
{
|
|
private Stack<byte[]> _userChannelStorages;
|
|
public int PreviousIndex { get; private set; }
|
|
public int Index { get; private set; }
|
|
public ProgramSpecifyKind Kind { get; private set; }
|
|
public bool ShouldRestart { get; set; }
|
|
|
|
public UserChannelPersistence()
|
|
{
|
|
_userChannelStorages = new Stack<byte[]>();
|
|
Kind = ProgramSpecifyKind.ExecuteProgram;
|
|
PreviousIndex = -1;
|
|
Index = 0;
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
_userChannelStorages.Clear();
|
|
}
|
|
|
|
public void Push(byte[] data)
|
|
{
|
|
_userChannelStorages.Push(data);
|
|
}
|
|
|
|
public byte[] Pop()
|
|
{
|
|
_userChannelStorages.TryPop(out byte[] result);
|
|
|
|
return result;
|
|
}
|
|
|
|
public bool IsEmpty => _userChannelStorages.Count == 0;
|
|
|
|
public void ExecuteProgram(ProgramSpecifyKind kind, ulong value)
|
|
{
|
|
Kind = kind;
|
|
PreviousIndex = Index;
|
|
ShouldRestart = true;
|
|
|
|
switch (kind)
|
|
{
|
|
case ProgramSpecifyKind.ExecuteProgram:
|
|
Index = (int)value;
|
|
break;
|
|
case ProgramSpecifyKind.RestartProgram:
|
|
break;
|
|
default:
|
|
throw new NotImplementedException($"{kind} not implemented");
|
|
}
|
|
}
|
|
}
|
|
}
|