diff --git a/subprojects/memcard/include/memcard/block.hpp b/subprojects/memcard/include/memcard/block.hpp index 54e91d5..7948543 100644 --- a/subprojects/memcard/include/memcard/block.hpp +++ b/subprojects/memcard/include/memcard/block.hpp @@ -61,6 +61,9 @@ public: std::string product_code() const; bool has_pocket_station_content() const; std::string_view identifier() const; + uint8_t toc_checksum() const; + + uint8_t calculate_toc_checksum() const; private: BasicFrame m_toc_entry; diff --git a/subprojects/memcard/src/block.cpp b/subprojects/memcard/src/block.cpp index bb47ec2..9e6458b 100644 --- a/subprojects/memcard/src/block.cpp +++ b/subprojects/memcard/src/block.cpp @@ -215,6 +215,20 @@ std::string_view BasicBlock::identifier() const { return {reinterpret_cast(m_toc_entry.data() + 0x16), 8}; } +template +uint8_t BasicBlock::toc_checksum() const { + return m_toc_entry.data()[0xFF - 0x80]; +} + +template +uint8_t BasicBlock::calculate_toc_checksum() const { + uint8_t retval = 0; + for (std::size_t z = 0; z < m_toc_entry.size() - 1; ++z) { + retval ^= m_toc_entry[z]; + } + return retval; +} + template class BasicBlock; template class BasicBlock; } //namespace mc::psx