<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: PCSX2 memory card format revisited</title>
	<atom:link href="http://www.gothi.co.uk/2006/11/pcsx2-memory-card-format-revisited/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gothi.co.uk/2006/11/pcsx2-memory-card-format-revisited/</link>
	<description>A badly chosen byte</description>
	<lastBuildDate>Sat, 20 Mar 2010 16:24:40 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: gothi</title>
		<link>http://www.gothi.co.uk/2006/11/pcsx2-memory-card-format-revisited/comment-page-1/#comment-11</link>
		<dc:creator>gothi</dc:creator>
		<pubDate>Fri, 30 Mar 2007 07:23:00 +0000</pubDate>
		<guid isPermaLink="false">http://gothi.co.uk/pcsx2-memory-card-format-revisited/#comment-11</guid>
		<description>Thank you both for your updates, they&#039;re most welcome :)&lt;br/&gt;&lt;br/&gt;Matt, thanks for the link to the checksum routine, I&#039;ll be looking into that as soon as I get some spare time.</description>
		<content:encoded><![CDATA[<p>Thank you both for your updates, they&#8217;re most welcome <img src='http://www.gothi.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Matt, thanks for the link to the checksum routine, I&#8217;ll be looking into that as soon as I get some spare time.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matt</title>
		<link>http://www.gothi.co.uk/2006/11/pcsx2-memory-card-format-revisited/comment-page-1/#comment-10</link>
		<dc:creator>Matt</dc:creator>
		<pubDate>Thu, 29 Mar 2007 08:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://gothi.co.uk/pcsx2-memory-card-format-revisited/#comment-10</guid>
		<description>I was able to figure out the CRC had 3 bytes each for each successive 128-bytes of data, with the first byte being the most likely to change.  Because of how consistent they are (And the fact that they&#039;re the same when all values are 0x00, when all values are 0xFF, and when all (word) values are 0x7FFF, it&#039;s obviously just an xor of...something.&lt;br/&gt;&lt;br/&gt;Looking at the PCSX2 source shows the value isn&#039;t generated by PCSX2 directly (That is, PS2 code generates it, rather than the memcard itself).&lt;br/&gt;&lt;br/&gt;Further googling revealed source to generate the checksum:  http://www.geocities.com/SiliconValley/Station/8269/sma02/sma02.html&lt;br/&gt;&lt;br/&gt;Not exactly the most obvious algorithm.</description>
		<content:encoded><![CDATA[<p>I was able to figure out the CRC had 3 bytes each for each successive 128-bytes of data, with the first byte being the most likely to change.  Because of how consistent they are (And the fact that they&#8217;re the same when all values are 0&#215;00, when all values are 0xFF, and when all (word) values are 0x7FFF, it&#8217;s obviously just an xor of&#8230;something.</p>
<p>Looking at the PCSX2 source shows the value isn&#8217;t generated by PCSX2 directly (That is, PS2 code generates it, rather than the memcard itself).</p>
<p>Further googling revealed source to generate the checksum:  <a href="http://www.geocities.com/SiliconValley/Station/8269/sma02/sma02.html" rel="nofollow">http://www.geocities.com/SiliconValley/Station/8269/sma02/sma02.html</a></p>
<p>Not exactly the most obvious algorithm.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: alkarl</title>
		<link>http://www.gothi.co.uk/2006/11/pcsx2-memory-card-format-revisited/comment-page-1/#comment-3</link>
		<dc:creator>alkarl</dc:creator>
		<pubDate>Sat, 18 Nov 2006 20:26:00 +0000</pubDate>
		<guid isPermaLink="false">http://gothi.co.uk/pcsx2-memory-card-format-revisited/#comment-3</guid>
		<description>facts:&lt;br /&gt;the *.ps2 files are 8650752 bytes long.&lt;br /&gt;with 16384 frames.&lt;br /&gt;each frame is 528 bytes long.&lt;br /&gt;&lt;br /&gt;a frame is composed successively of:&lt;br /&gt;512 bytes of data.&lt;br /&gt;12 bytes of checksum.&lt;br /&gt;4 constant NULL bytes.&lt;br /&gt;&lt;br /&gt;the checksum&#039;s bytes are divided in four 3bytes long cheksum&#039;s units.&lt;br /&gt;the result of the checksum of each 128bytes of data is stored in it&#039;s corresponding checksum&#039;s unit.&lt;br /&gt;the default value of the checksum&#039;s units is 77 7F 7F.&lt;br /&gt;the checksum&#039;s process ignore the bytes with a 00 value.&lt;br /&gt;&lt;br /&gt;uncertainties:&lt;br /&gt;as for the FF &amp; 7f their sequence must perfect through all the 128 bytes to not alter the checksum&#039;s unit default value.&lt;br /&gt;the footers have too much dissimilarity to be holding attributes i rather stick with the checksum theory.&lt;br /&gt;the checksum could be a 24bits type &amp; big endian :s</description>
		<content:encoded><![CDATA[<p>facts:<br />the *.ps2 files are 8650752 bytes long.<br />with 16384 frames.<br />each frame is 528 bytes long.</p>
<p>a frame is composed successively of:<br />512 bytes of data.<br />12 bytes of checksum.<br />4 constant NULL bytes.</p>
<p>the checksum&#8217;s bytes are divided in four 3bytes long cheksum&#8217;s units.<br />the result of the checksum of each 128bytes of data is stored in it&#8217;s corresponding checksum&#8217;s unit.<br />the default value of the checksum&#8217;s units is 77 7F 7F.<br />the checksum&#8217;s process ignore the bytes with a 00 value.</p>
<p>uncertainties:<br />as for the FF &#038; 7f their sequence must perfect through all the 128 bytes to not alter the checksum&#8217;s unit default value.<br />the footers have too much dissimilarity to be holding attributes i rather stick with the checksum theory.<br />the checksum could be a 24bits type &#038; big endian :s</p>
]]></content:encoded>
	</item>
</channel>
</rss>

