libdgf/LibDgf/Ps2/Vif/VifCodeUnpack.cs
2021-03-17 03:18:15 -06:00

87 lines
1.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
namespace LibDgf.Ps2.Vif
{
public struct VifCodeUnpack
{
private uint Value;
public bool Interrupt
{
get
{
return (Value & 0x80000000) != 0;
}
}
public bool Mask
{
get
{
return (Value & 0x10000000) != 0;
}
}
public VifUnpackVnType Vn
{
get
{
return (VifUnpackVnType)((Value >> 26) & 0x3);
}
}
public VifUnpackVlType Vl
{
get
{
return (VifUnpackVlType)((Value >> 24) & 0x3);
}
}
public byte Num
{
get
{
return (byte)(Value >> 16);
}
}
public bool Flag
{
get
{
return (Value & 0x8000) != 0;
}
}
public bool Unsigned
{
get
{
return (Value & 0x4000) != 0;
}
}
public ushort Address
{
get
{
return (ushort)(Value & 0x3ff);
}
}
public static implicit operator VifCode(VifCodeUnpack v)
{
return new VifCode { Value = v.Value | ((uint)VifCodeCmd.Unpack << 24) };
}
public static explicit operator VifCodeUnpack(VifCode v)
{
if ((v.Cmd & VifCodeCmd.Unpack) != VifCodeCmd.Unpack)
throw new ArgumentException("Not an UNPACK code", nameof(v));
return new VifCodeUnpack { Value = v.Value };
}
}
}