public VifPacketList Convert(BinaryFormat binary) { VifPacketList packetList = new VifPacketList(); DataReader reader = new DataReader(binary.Stream); // Start reading tags until EOF while (!binary.Stream.EndOfStream) { // Read VIFcode VifPacket packet = new VifPacket(); packet.Immediate = reader.ReadUInt16(); packet.Num = reader.ReadByte(); packet.Command = (VifCommands)reader.ReadByte(); ReadPacketDataFromCommand(packet, binary.Stream); packetList.AddPacket(packet); } return(packetList); }
void ReadPacketDataFromCommand(VifPacket packet, DataStream stream) { DataReader reader = new DataReader(stream); switch (packet.Command) { case VifCommands.Nop: case VifCommands.StCycl: case VifCommands.Offset: case VifCommands.Base: case VifCommands.Itops: case VifCommands.StMod: case VifCommands.MskPath3: case VifCommands.Mark: case VifCommands.FlushE: case VifCommands.Flush: case VifCommands.FlushA: case VifCommands.MsCal: case VifCommands.MsCnt: case VifCommands.MsCalf: break; case VifCommands.StMask: packet.Data = reader.ReadBytes(4); break; case VifCommands.StRow: case VifCommands.StCol: packet.Data = reader.ReadBytes(4 * 4); break; case VifCommands.Direct: case VifCommands.DirectHl: packet.Data = reader.ReadBytes(packet.Immediate * 4 * 4); break; default: throw new NotSupportedException("Unsupported command: " + packet.Command); } }
public void AddPacket(VifPacket packet) { packets.Add(packet); }