From 9f8d623f5d7e6a9bb6fa7ff30ce4d5b1fdf72a1e Mon Sep 17 00:00:00 2001 From: Jean-Philip Desjardins Date: Wed, 1 May 2024 15:21:59 -0400 Subject: [PATCH] Use ReadValue to fetch VIFcode and other simple values. --- Source/ee/Vif.cpp | 8 ++++---- Source/ee/Vif.h | 11 ++++++++++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Source/ee/Vif.cpp b/Source/ee/Vif.cpp index 50021b3e21..61a2367ea3 100644 --- a/Source/ee/Vif.cpp +++ b/Source/ee/Vif.cpp @@ -438,7 +438,7 @@ void CVif::ProcessPacket(StreamType& stream) break; } - stream.Read(&m_CODE, sizeof(CODE)); + stream.ReadValue<4>(&m_CODE); if(m_CODE.nI != 0) { @@ -643,7 +643,7 @@ void CVif::Cmd_STROW(StreamType& stream, CODE nCommand) while(m_NUM != 0 && stream.GetAvailableReadBytes()) { assert(m_NUM <= 4); - stream.Read(&m_R[4 - m_NUM], 4); + stream.ReadValue<4>(&m_R[4 - m_NUM]); m_NUM--; } @@ -662,7 +662,7 @@ void CVif::Cmd_STCOL(StreamType& stream, CODE nCommand) while(m_NUM != 0 && stream.GetAvailableReadBytes()) { assert(m_NUM <= 4); - stream.Read(&m_C[4 - m_NUM], 4); + stream.ReadValue<4>(&m_C[4 - m_NUM]); m_NUM--; } @@ -680,7 +680,7 @@ void CVif::Cmd_STMASK(StreamType& stream, CODE command) { while(m_NUM != 0 && stream.GetAvailableReadBytes()) { - stream.Read(&m_MASK, 4); + stream.ReadValue<4>(&m_MASK); m_NUM--; } diff --git a/Source/ee/Vif.h b/Source/ee/Vif.h index bf029397ed..0fb8ba110b 100644 --- a/Source/ee/Vif.h +++ b/Source/ee/Vif.h @@ -170,17 +170,26 @@ class CVif memcpy(readBuffer, reinterpret_cast(&m_buffer) + m_bufferPosition, ValueSize); m_bufferPosition += ValueSize; } - else + else if(!m_tagIncluded || (ValueSize <= 8)) { uint128 qw[2]; qw[0] = m_buffer; uint32 startPosition = m_bufferPosition; + bool hasTag = m_tagIncluded; m_bufferPosition = BUFFERSIZE; SyncBuffer(); qw[1] = m_buffer; + if(hasTag) + { + qw[1].nD0 = qw[1].nD1; + } m_bufferPosition += (ValueSize - availableBufferSize); memcpy(readBuffer, reinterpret_cast(&qw) + startPosition, ValueSize); } + else + { + Read(buffer, ValueSize); + } } void Flush();