Add BRK instruction, fix wrong namespace on one of Am interfaces, and disable Debug/Trace logs by default
This commit is contained in:
parent
276f9f6d48
commit
9063766ed6
12 changed files with 51 additions and 16 deletions
|
@ -150,7 +150,8 @@ namespace ChocolArm64.Decoder
|
|||
|
||||
private static bool IsException(AOpCode OpCode)
|
||||
{
|
||||
return OpCode.Emitter == AInstEmit.Svc ||
|
||||
return OpCode.Emitter == AInstEmit.Brk ||
|
||||
OpCode.Emitter == AInstEmit.Svc ||
|
||||
OpCode.Emitter == AInstEmit.Und;
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace ChocolArm64.Decoder
|
|||
|
||||
public AOpCodeException(AInst Inst, long Position, int OpCode) : base(Inst, Position)
|
||||
{
|
||||
Id = (OpCode >> 5) & 0xfff;
|
||||
Id = (OpCode >> 5) & 0xffff;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -7,7 +7,17 @@ namespace ChocolArm64.Instruction
|
|||
{
|
||||
static partial class AInstEmit
|
||||
{
|
||||
public static void Brk(AILEmitterCtx Context)
|
||||
{
|
||||
EmitExceptionCall(Context, nameof(ARegisters.OnBreak));
|
||||
}
|
||||
|
||||
public static void Svc(AILEmitterCtx Context)
|
||||
{
|
||||
EmitExceptionCall(Context, nameof(ARegisters.OnSvcCall));
|
||||
}
|
||||
|
||||
private static void EmitExceptionCall(AILEmitterCtx Context, string MthdName)
|
||||
{
|
||||
AOpCodeException Op = (AOpCodeException)Context.CurrOp;
|
||||
|
||||
|
@ -17,7 +27,7 @@ namespace ChocolArm64.Instruction
|
|||
|
||||
Context.EmitLdc_I4(Op.Id);
|
||||
|
||||
Context.EmitCall(typeof(ARegisters), nameof(ARegisters.OnSvcCall));
|
||||
Context.EmitCall(typeof(ARegisters), MthdName);
|
||||
|
||||
if (Context.CurrBlock.Next != null)
|
||||
{
|
||||
|
|
|
@ -2,11 +2,11 @@ using System;
|
|||
|
||||
namespace ChocolArm64.State
|
||||
{
|
||||
public class SvcEventArgs : EventArgs
|
||||
public class AExceptionEventArgs : EventArgs
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
|
||||
public SvcEventArgs(int Id)
|
||||
public AExceptionEventArgs(int Id)
|
||||
{
|
||||
this.Id = Id;
|
||||
}
|
|
@ -42,12 +42,18 @@ namespace ChocolArm64.State
|
|||
|
||||
public long CntpctEl0 => Environment.TickCount * TicksPerMS;
|
||||
|
||||
public event EventHandler<SvcEventArgs> SvcCall;
|
||||
public event EventHandler<EventArgs> Undefined;
|
||||
public event EventHandler<AExceptionEventArgs> Break;
|
||||
public event EventHandler<AExceptionEventArgs> SvcCall;
|
||||
public event EventHandler<EventArgs> Undefined;
|
||||
|
||||
public void OnBreak(int Imm)
|
||||
{
|
||||
Break?.Invoke(this, new AExceptionEventArgs(Imm));
|
||||
}
|
||||
|
||||
public void OnSvcCall(int Imm)
|
||||
{
|
||||
SvcCall?.Invoke(this, new SvcEventArgs(Imm));
|
||||
SvcCall?.Invoke(this, new AExceptionEventArgs(Imm));
|
||||
}
|
||||
|
||||
public void OnUndefined()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue