<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Planet MAMEdev</title>
	<link rel="self" href="atom.xml"/>
	<link href="http://blondechris.com/planetmame/"/>
	<id>atom.xml</id>
	<updated>2010-03-12T23:00:25+00:00</updated>
	<generator uri="http://www.planetplanet.org/">http://intertwingly.net/code/venus/</generator>

	<entry>
		<title type="html">It's full of stars! - Vega, part3</title>
		<link href="http://doxdev.blogspot.com/2010/03/its-full-of-stars-vega-part3.html"/>
		<id>tag:blogger.com,1999:blog-3480224794091448318.post-3475471723898431526</id>
		<updated>2010-03-12T11:17:37+00:00</updated>
		<content type="html">I was wrong - there's no &quot;type 3&quot; sprite. It's just a background layer made of 16 different  32x32 pixel tiles. Tilemap (128x8 cells (4096x256 pixels), animated (flashing stars and texts) ) is hardcoded inside one of eproms used as a lookup.&lt;br /&gt;&lt;br /&gt;Here's a screenshot from game - shows only the most boring part of bg - stars:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_384gkgINfRw/S5oerc0-KoI/AAAAAAAAAQE/_jbcHEfy1cY/s1600-h/0087.png&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_384gkgINfRw/S5oerc0-KoI/AAAAAAAAAQE/_jbcHEfy1cY/s400/0087.png&quot; alt=&quot;&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 240px; height: 281px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5447700431079615106&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Game is not playable (yet) so i can't see other levels / backgrounds. These images are ripped directly from the tilemap (wrong colros, as usually ;) :&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_384gkgINfRw/S5ofVRFO8PI/AAAAAAAAAQM/fuxW_9uzbHU/s1600-h/map_1.png&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_384gkgINfRw/S5ofVRFO8PI/AAAAAAAAAQM/fuxW_9uzbHU/s400/map_1.png&quot; alt=&quot;&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 200px; height: 400px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5447701149481103602&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_384gkgINfRw/S5ofs92ePJI/AAAAAAAAAQU/1yrMXVS4XG0/s1600-h/map_2.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_384gkgINfRw/S5ofs92ePJI/AAAAAAAAAQU/1yrMXVS4XG0/s400/map_2.png&quot; alt=&quot;&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 239px; height: 400px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5447701556635778194&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There's also an interesting hw feature - background can be stretched horizontally (in fact - vertically (div scnaline clock by 2), because screen is rotated by 90 deg). It's probably used (only?) to display the planet surface:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_384gkgINfRw/S5of0hH4qRI/AAAAAAAAAQc/mEsj1au9qys/s1600-h/map_p.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_384gkgINfRw/S5of0hH4qRI/AAAAAAAAAQc/mEsj1au9qys/s400/map_p.png&quot; alt=&quot;&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 256px; height: 192px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5447701686363138322&quot; /&gt;&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/3480224794091448318-3475471723898431526?l=doxdev.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Tom</name>
			<email>noreply@blogger.com</email>
			<uri>http://doxdev.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">doxDev</title>
			<subtitle type="html">emulation * gamedev * programming * hacking</subtitle>
			<link rel="self" href="http://www.blogger.com/feeds/3480224794091448318/posts/default"/>
			<id>tag:blogger.com,1999:blog-3480224794091448318</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">MAME 0.137</title>
		<link href="http://mamedev.org/?p=301"/>
		<id>http://mamedev.org/?p=301</id>
		<updated>2010-03-11T20:00:00+00:00</updated>
		<content type="html">&lt;p&gt;
				Believe it or not, the first official MAME release of 2010 is finally
				available, so head on over to the 
				&lt;a href=&quot;http://mamedev.org/release.html&quot;&gt;Latest Release&lt;/a&gt; page and
				grab yourself a copy!
				&lt;/p&gt;</content>
		<author>
			<name>MAMEdev Main Page</name>
			<uri>http://mamedev.org/</uri>
		</author>
		<source>
			<title type="html">MAME | Multiple Arcade Machine Emulator</title>
			<subtitle type="html">The Official Site of the MAME Development Team</subtitle>
			<link rel="self" href="http://mamedev.org/?feed=atom"/>
			<id>http://mamedev.org/</id>
		</source>
	</entry>

	<entry>
		<title type="html">25 light-years away from home - Vega, part 2</title>
		<link href="http://doxdev.blogspot.com/2010/03/25-light-years-away-from-home-vega-part.html"/>
		<id>tag:blogger.com,1999:blog-3480224794091448318.post-1109774735226891886</id>
		<updated>2010-03-10T17:59:17+00:00</updated>
		<content type="html">&lt;span style=&quot;font-weight: bold;&quot;&gt;The good news&lt;/span&gt; - i have got scans of vega  schematics (big thanks to Kold666)&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;The bad news&lt;/span&gt; - hardware is quite old (early 80s .. possibly 1982 or 1983)  (read: unique and complicated) and schems are buggy as hell. &lt;br /&gt;&lt;br /&gt;The biggest problem so far - no reference images/screenshots/flyer pics. Nothing. I have no f***ing idea about the real game.&lt;br /&gt;&lt;br /&gt;So &lt;span style=&quot;font-weight: bold;&quot;&gt;any&lt;/span&gt; info will be greatly appreciated.&lt;br /&gt;&lt;br /&gt;Schems are as mysterious as the pcb pics i got - no info about the major ICs.&lt;br /&gt;But looking at pinout i have identifed all of them as: &lt;br /&gt;&lt;br /&gt;- &lt;span style=&quot;font-weight: bold;&quot;&gt;i8035&lt;/span&gt; (mcu)&lt;br /&gt;- &lt;span style=&quot;font-weight: bold;&quot;&gt;AY 3-8910&lt;/span&gt; (sound)&lt;br /&gt;- &lt;span style=&quot;font-weight: bold;&quot;&gt;PPI 8255&lt;/span&gt; (i/o)&lt;br /&gt;- &lt;span style=&quot;font-weight: bold;&quot;&gt;INS 8154&lt;/span&gt; (i/o + ram)&lt;br /&gt;- &lt;span style=&quot;font-weight: bold;&quot;&gt;DP 8350&lt;/span&gt; (crt controller)&lt;br /&gt;&lt;br /&gt;AY is used only for generating sfx. Afaik there's no music. Sound chip is connected in unusual way - AY data lines are tied to address bus and AY address/data  write selection is connected to mcu R/W line. So, writing any data to address NNN within range mapped to AY - results in setting AY address register to value NNN. Reading from address MMM store MMM in AY data register. Weird, isn't ?  &lt;br /&gt;&lt;br /&gt;Graphics hardware consist of four different &quot;blocks&quot;:&lt;br /&gt;&lt;br /&gt;- &lt;span style=&quot;font-weight: bold;&quot;&gt;text layer&lt;/span&gt; - 1bpp fonts with hardcoded (PROM) color for each character. Bullets and some type of enemies are made of characters on text layer.&lt;br /&gt;- &lt;span style=&quot;font-weight: bold;&quot;&gt;four &quot;type1&quot; sprites&lt;/span&gt; - simple format, 32x32 pixels, horizontal flip, direct color (1r1g1b + extra unknown bit). Used mainly for enemies (spaseships)&lt;br /&gt;- &lt;span style=&quot;font-weight: bold;&quot;&gt;single &quot;type2&quot; sprite&lt;/span&gt; , used for player's ship/explosion only- 32x64 object made of 32x4 slices.&lt;br /&gt;- &lt;span style=&quot;font-weight: bold;&quot;&gt;single (?) &quot;type3&quot; sprite&lt;/span&gt; - not emulated yet. Quite big (possibly 64x64) obejcts (planets, asteroids) with special 2kb lookup table.&lt;br /&gt;&lt;br /&gt;So far, the most complicated to emulate was the type 2 player sprite. It's auto-animated (based on vblank counter). There's also a 256x4 PROM used as a lookup table , connected in a bit weird way :&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_384gkgINfRw/S5eoCQSs3SI/AAAAAAAAAPc/xz9mKuP4ft4/s1600-h/sprite.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_384gkgINfRw/S5eoCQSs3SI/AAAAAAAAAPc/xz9mKuP4ft4/s400/sprite.png&quot; alt=&quot;&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 371px; height: 400px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5447007031014513954&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here's some (test/temporary) formula i'm using to draw the sprite:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_384gkgINfRw/S5fUXiYbUbI/AAAAAAAAAP8/th3hm5xUPqk/s1600-h/formula.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_384gkgINfRw/S5fUXiYbUbI/AAAAAAAAAP8/th3hm5xUPqk/s400/formula.png&quot; alt=&quot;&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 185px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5447055775159243186&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And now few fresh screenshots. Sprite positions (type1 and type2 (last pic)) and colors may be wrong:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_384gkgINfRw/S5fSQLBpnuI/AAAAAAAAAPk/dBC5svOW-KU/s1600-h/0047.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_384gkgINfRw/S5fSQLBpnuI/AAAAAAAAAPk/dBC5svOW-KU/s400/0047.png&quot; alt=&quot;&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 240px; height: 281px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5447053449607356130&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_384gkgINfRw/S5fSaUFkoGI/AAAAAAAAAPs/1d5iIEWZxzo/s1600-h/0048.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_384gkgINfRw/S5fSaUFkoGI/AAAAAAAAAPs/1d5iIEWZxzo/s400/0048.png&quot; alt=&quot;&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 240px; height: 281px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5447053623838416994&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_384gkgINfRw/S5fSrqCivsI/AAAAAAAAAP0/dxn-dTGVnxc/s1600-h/0054.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_384gkgINfRw/S5fSrqCivsI/AAAAAAAAAP0/dxn-dTGVnxc/s400/0054.png&quot; alt=&quot;&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 240px; height: 281px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5447053921789066946&quot; /&gt;&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/3480224794091448318-1109774735226891886?l=doxdev.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Tom</name>
			<email>noreply@blogger.com</email>
			<uri>http://doxdev.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">doxDev</title>
			<subtitle type="html">emulation * gamedev * programming * hacking</subtitle>
			<link rel="self" href="http://www.blogger.com/feeds/3480224794091448318/posts/default"/>
			<id>tag:blogger.com,1999:blog-3480224794091448318</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">How to build SDLMAME 0.136u1 and later</title>
		<link href="http://rbelmont.mameworld.info/?p=527"/>
		<id>http://rbelmont.mameworld.info/?p=527</id>
		<updated>2010-03-07T03:45:12+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Read the instructions &lt;a href=&quot;http://www.bannister.org/forums/ubbthreads.php?ubb=showflat&amp;amp;Number=58111#Post58111&quot;&gt;here&lt;/a&gt;.  Get the endings.zip utility &lt;a href=&quot;http://rbelmont.mameworld.info/endings.zip&quot;&gt;here&lt;/a&gt; (updated!).&lt;/p&gt;
&lt;p&gt;For 0.136u4 you do NOT need the separate PowerPC patch that was formerly here.&lt;/p&gt;</content>
		<author>
			<name>site admin</name>
			<uri>http://rbelmont.mameworld.info</uri>
		</author>
		<source>
			<title type="html">Arbee's WIP Emporium</title>
			<subtitle type="html">WIP by R. Belmont</subtitle>
			<link rel="self" href="http://rbelmont.mameworld.info/?feed=atom"/>
			<id>http://rbelmont.mameworld.info/?feed=atom</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">MAME 0.136u4</title>
		<link href="http://mamedev.org/?p=300"/>
		<id>http://mamedev.org/?p=300</id>
		<updated>2010-03-04T20:00:00+00:00</updated>
		<content type="html">&lt;p&gt;
				MAME 0.136u4 is now available on the 
				&lt;a href=&quot;http://mamedev.org/updates.html&quot;&gt;MAME Updates&lt;/a&gt; page.
				Next release will be 0.137.
				&lt;/p&gt;</content>
		<author>
			<name>MAMEdev Main Page</name>
			<uri>http://mamedev.org/</uri>
		</author>
		<source>
			<title type="html">MAME | Multiple Arcade Machine Emulator</title>
			<subtitle type="html">The Official Site of the MAME Development Team</subtitle>
			<link rel="self" href="http://mamedev.org/?feed=atom"/>
			<id>http://mamedev.org/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">White water</title>
		<link href="http://rbelmont.mameworld.info/?p=548"/>
		<id>http://rbelmont.mameworld.info/?p=548</id>
		<updated>2010-03-04T04:30:29+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Incremental progress on Namco System 23 and friends continues.  Got &lt;b&gt;Rapid River&lt;/b&gt; to drop into attract mode, with these 2D graphics (and music and sound f/x):  In other news, I found the coin input on &lt;b&gt;Time Crisis 2&lt;/b&gt; and was able to start a game, although without the 3D there’s not much there.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://rbelmont.mameworld.info/wipimg/rapidrvr0.png&quot; /&gt;&lt;img src=&quot;http://rbelmont.mameworld.info/wipimg/rapidrvr1.png&quot; /&gt;&lt;img src=&quot;http://rbelmont.mameworld.info/wipimg/rapidrvr2.png&quot; /&gt;&lt;img src=&quot;http://rbelmont.mameworld.info/wipimg/timecrs26.png&quot; /&gt;&lt;/p&gt;</content>
		<author>
			<name>site admin</name>
			<uri>http://rbelmont.mameworld.info</uri>
		</author>
		<source>
			<title type="html">Arbee's WIP Emporium</title>
			<subtitle type="html">WIP by R. Belmont</subtitle>
			<link rel="self" href="http://rbelmont.mameworld.info/?feed=atom"/>
			<id>http://rbelmont.mameworld.info/?feed=atom</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Me, you and a whole bunch of Dolls</title>
		<link href="http://mamedev.emulab.it/kale/?p=991"/>
		<id>http://mamedev.emulab.it/kale/?p=991</id>
		<updated>2010-03-01T15:02:43+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Currently looking (again) at the Multi Amenity Cassette System, a Japanese Arcade System developed by I’Max in 1995. First off, I’ve removed the existing hacks in the driver and implemented BIOS support and basic BIOS/cart ROM bankswitch.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/03/0018.png&quot;&gt;&lt;img src=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/03/0018.png&quot; title=&quot;0018&quot; height=&quot;256&quot; width=&quot;384&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-992&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/03/0019.png&quot;&gt;&lt;img src=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/03/0019.png&quot; title=&quot;0019&quot; height=&quot;256&quot; width=&quot;384&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-993&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;First effect of this is improved logic in &lt;strong&gt;Kisekae Mahjong&lt;/strong&gt;, that boots, runs some attract mode and it’s playable until it resets in the middle of the gameplay (still investigating on it):&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/03/0013.png&quot;&gt;&lt;img src=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/03/0013.png&quot; title=&quot;0013&quot; height=&quot;256&quot; width=&quot;384&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-994&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/03/0015.png&quot;&gt;&lt;img src=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/03/0015.png&quot; title=&quot;0015&quot; height=&quot;256&quot; width=&quot;384&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-995&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/03/0016.png&quot;&gt;&lt;img src=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/03/0016.png&quot; title=&quot;0016&quot; height=&quot;256&quot; width=&quot;384&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-996&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/03/0010.png&quot;&gt;&lt;img src=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/03/0010.png&quot; title=&quot;0010&quot; height=&quot;256&quot; width=&quot;384&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-997&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/03/0012.png&quot;&gt;&lt;img src=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/03/0012.png&quot; title=&quot;0012&quot; height=&quot;256&quot; width=&quot;384&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-998&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Kale</name>
			<uri>http://mamedev.emulab.it/kale</uri>
		</author>
		<source>
			<title type="html">Kale's Mame Wip</title>
			<subtitle type="html">Multiple Arcade Machine Emulator</subtitle>
			<link rel="self" href="http://mamedev.emulab.it/kale/?feed=atom"/>
			<id>http://mamedev.emulab.it/kale/?feed=atom</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">I love your sexy talk, it’s so kindergarten, “Poo poo”, “Wee wee”.</title>
		<link href="http://mamedev.emulab.it/kale/?p=975"/>
		<id>http://mamedev.emulab.it/kale/?p=975</id>
		<updated>2010-02-14T21:15:53+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Team Europe and the Dumping Union proudly presents … &lt;strong&gt;Uncle Poo&lt;/strong&gt;, an obscure 1983 game from the even more obscure Diatec, possibly a bootleg/hack of something else obscure that we don’t know jack about it either. Me and Haze worked on the driver for this, it currently works apart from sound and a bunch of minor bits. I also don’t know why the title screen colors looks so awkward, but I don’t see anything weird from the ROM-to-videoram transfer so I don’t know if it’s the correct behaviour or not…&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/02/00171.png&quot;&gt;&lt;img src=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/02/00171.png&quot; title=&quot;0017&quot; height=&quot;256&quot; width=&quot;256&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-977&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/02/0018.png&quot;&gt;&lt;img src=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/02/0018.png&quot; title=&quot;0018&quot; height=&quot;256&quot; width=&quot;256&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-978&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/02/0019.png&quot;&gt;&lt;img src=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/02/0019.png&quot; title=&quot;0019&quot; height=&quot;256&quot; width=&quot;256&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-980&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/02/0021.png&quot;&gt;&lt;img src=&quot;http://mamedev.emulab.it/kale/wp-content/uploads/2010/02/0021.png&quot; title=&quot;0021&quot; height=&quot;256&quot; width=&quot;256&quot; alt=&quot;&quot; class=&quot;alignnone size-full wp-image-981&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;As you can see, game is a maze game with scrolling (from left to right), on which you have to collect money/diamonds in order to advance to the next level. Your main attack is a … er, a fart (yeah, not joking here, check last snap), it’s used for breaking objects and kill enemies. There is also another button, the character puts blades on his feet and moves faster, but it costs a lot of  “power points” (also used by the farting).&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;I think it’s not a bad game per-se, it’s at least original in game design (for a 1983 game, obviously). If it rings a bell to anybody about what it could truly be let us know, thanks.&lt;/p&gt;</content>
		<author>
			<name>Kale</name>
			<uri>http://mamedev.emulab.it/kale</uri>
		</author>
		<source>
			<title type="html">Kale's Mame Wip</title>
			<subtitle type="html">Multiple Arcade Machine Emulator</subtitle>
			<link rel="self" href="http://mamedev.emulab.it/kale/?feed=atom"/>
			<id>http://mamedev.emulab.it/kale/?feed=atom</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">adp driver</title>
		<link href="http://mamedev.emulab.it/robiza/?p=150"/>
		<id>http://mamedev.emulab.it/robiza/?p=150</id>
		<updated>2010-02-07T19:12:44+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;supponendo che la memory map del hd63484 (grazie a dox e alle sue note nel driver sigmab52) sia:&lt;span style=&quot;font-size: x-small;&quot;&gt; 00000-3ffff = RAM&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;40000-7ffff = ROM&lt;/p&gt;
&lt;p&gt;80000-bffff = unused&lt;/p&gt;
&lt;p&gt;c0000-fffff = unused&lt;/p&gt;
&lt;p&gt;tramite accesso alla videoram si vedono queste schermate:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mamedev.emulab.it/robiza/wp-content/uploads/2010/02/0009.png&quot;&gt;&lt;img src=&quot;http://mamedev.emulab.it/robiza/wp-content/uploads/2010/02/0009-300x218.png&quot; title=&quot;0009&quot; height=&quot;218&quot; width=&quot;300&quot; alt=&quot;&quot; class=&quot;alignnone size-medium wp-image-147&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mamedev.emulab.it/robiza/wp-content/uploads/2010/02/00001.png&quot;&gt;&lt;img src=&quot;http://mamedev.emulab.it/robiza/wp-content/uploads/2010/02/00001-300x218.png&quot; title=&quot;0000&quot; height=&quot;218&quot; width=&quot;300&quot; alt=&quot;&quot; class=&quot;alignnone size-medium wp-image-148&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mamedev.emulab.it/robiza/wp-content/uploads/2010/02/00002.png&quot;&gt;&lt;img src=&quot;http://mamedev.emulab.it/robiza/wp-content/uploads/2010/02/00002-300x218.png&quot; title=&quot;0000&quot; height=&quot;218&quot; width=&quot;300&quot; alt=&quot;&quot; class=&quot;alignnone size-medium wp-image-149&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</content>
		<author>
			<name>Robiza</name>
			<uri>http://mamedev.emulab.it/robiza</uri>
		</author>
		<source>
			<title type="html">Robiza's MAME blog</title>
			<subtitle type="html">Benvenuti nel MAME-Blog di Robiza</subtitle>
			<link rel="self" href="http://mamedev.emulab.it/robiza/?feed=atom"/>
			<id>http://mamedev.emulab.it/robiza/?feed=atom</id>
		</source>
	</entry>

	<entry>
		<title type="html">Math problem #1 - piecewise approximating functions</title>
		<link href="http://avoidspikes.blogspot.com/2010/02/math-problem-1-piecewise-approximating.html"/>
		<id>tag:blogger.com,1999:blog-5824590.post-6565849977356832709</id>
		<updated>2010-02-07T03:43:54+00:00</updated>
		<content type="html">I'm the kind of person that can get very interested in things that others might not notice.  For me, his seems to occur from time to time with math problems.  I'll be thinking about an engineering problem, and I will get caught up with some mathematical aspect of it.  Usually, it's some problem which is easy to state but not obvious to solve.  (Then again, I'm not a mathematician)&lt;br /&gt;&lt;br /&gt;Over the years, I've gathered up a list of these problems.  And now, I'd like to share some of them on this blog.  I hope some of you, at least, will find them as interesting as I do.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;Today's problem is fairly simple to state - and I thought about it for the first time many years ago.  Suppose I have a continuous function y=f(x), defined on an interval from x0 to xn.  I know _everything_ there is to know about the function.  Now, for some reason, I need to approximate the function using a &quot;piecewise-linear&quot; function.  This is just a set of straight lines connected together at &quot;break&quot; points.  (You can also think of this as an approximation based on splines.)&lt;br /&gt;&lt;br /&gt;For say, a fixed number of break points, what is the &quot;best&quot; way to approximate the function?  (BTW - this is something that is practically done all the time, in embedded computer programs, using &quot;table lookups&quot; to approximate functions)&lt;br /&gt;&lt;br /&gt;Some clues:&lt;br /&gt;&lt;br /&gt;For a given set of breakpoints located at each x_i, you can start by picking the breakpoints at (x_i, f(x_i)).  In other words, points on the curve f(x), and connecting the points with straight lines.  However, you will quickly notice that the approximation is biased, based on the concavity of the curve.&lt;br /&gt;&lt;br /&gt;A better way for a given set of points at x_i, is to solve the linear least-squares problem to find the optimal y values, which minimize the error between the approximate curve and the actual one.&lt;br /&gt;&lt;br /&gt;But the key question seems to be - how do I locate my points in x?  I see no easy way to do this, without non-linear iteration.  It seems strange that it is trivial to locate the points in Y given X values, but hard to locate the X values.  I can imagine some heuristic rules like &quot;I should use more breakpoints where the function is 'curvier'&quot;.  But it's not at all clear what this means :)  Maybe I need to think about the meaning of &quot;best&quot; a bit more.&lt;br /&gt;&lt;br /&gt;So, to summarize, we have a situation where we have a function which we know everything about, and a simple space of approximating functions, but we seem unable to match the two together, without resorting to nonlinear iteration.&lt;br /&gt;&lt;br /&gt;If this one is too easy for you, feel free to handle extensions to this problem with higher order piecewise splines, and/or multidimensional functions. :)  I can imagine practical applications for a good algorithm in this area.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/5824590-6565849977356832709?l=avoidspikes.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Knarfian</name>
			<email>noreply@blogger.com</email>
			<uri>http://avoidspikes.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Avoid Spikes</title>
			<link rel="self" href="http://www.blogger.com/feeds/5824590/posts/default"/>
			<id>tag:blogger.com,1999:blog-5824590</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Astro Corp. (part 2)</title>
		<link href="http://www.lucaelia.com/mame.php/2010/Astro-Corp-part-2"/>
		<id>http://www.lucaelia.com/mame.php/2010/Astro-Corp-part-2</id>
		<updated>2010-01-30T23:00:00+00:00</updated>
		<content type="html">&lt;p&gt;
Here's another game running on &lt;a href=&quot;http://www.lucaelia.com/mame.php/drivers#astrocorp&quot;&gt;astrocorp.c&lt;/a&gt; hardware (see also &lt;a href=&quot;http://www.lucaelia.com/mame.php/2008/Astro-Corp&quot;&gt;part 1&lt;/a&gt;). It's called &lt;em&gt;Skill Drop Georgia&lt;/em&gt;:
&lt;/p&gt;


	
		&lt;div class=&quot;img-shadow&quot;&gt;
&lt;a href=&quot;http://www.lucaelia.com/images/mame_snaps/skilldrp_0002.png&quot;&gt;&lt;img src=&quot;http://www.lucaelia.com/images/mame_snaps/skilldrp_0002.png&quot; alt=&quot;Skill Drop Georgia&quot; height=&quot;276&quot; title=&quot;Skill Drop Georgia&quot; width=&quot;368&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;

		&lt;div class=&quot;img-shadow&quot;&gt;
&lt;a href=&quot;http://www.lucaelia.com/images/mame_snaps/skilldrp_0008.png&quot;&gt;&lt;img src=&quot;http://www.lucaelia.com/images/mame_snaps/skilldrp_0008.png&quot; alt=&quot;Skill Drop Georgia&quot; height=&quot;276&quot; title=&quot;Skill Drop Georgia&quot; width=&quot;368&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;

	
	
		&lt;div class=&quot;img-shadow&quot;&gt;
&lt;a href=&quot;http://www.lucaelia.com/images/mame_snaps/skilldrp_0006.png&quot;&gt;&lt;img src=&quot;http://www.lucaelia.com/images/mame_snaps/skilldrp_0006.png&quot; alt=&quot;Skill Drop Georgia&quot; height=&quot;276&quot; title=&quot;Skill Drop Georgia&quot; width=&quot;368&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;

		&lt;div class=&quot;img-shadow&quot;&gt;
&lt;a href=&quot;http://www.lucaelia.com/images/mame_snaps/skilldrp_0003.png&quot;&gt;&lt;img src=&quot;http://www.lucaelia.com/images/mame_snaps/skilldrp_0003.png&quot; alt=&quot;Skill Drop Georgia&quot; height=&quot;276&quot; title=&quot;Skill Drop Georgia&quot; width=&quot;368&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;

	


&lt;p&gt;
Apart from having double the resolution, it uses the hardware in a slightly different way than &lt;em&gt;Show Hand&lt;/em&gt;, revealing several features of the sprite chip that were either unemulated or incorrectly implemented. Namely wrap around, negative coordinates, end of sprite list and the need for a frame buffer.
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;Thanks to Smitdogg, Brian Troha and &lt;a href=&quot;http://smitdogg.mameworld.info/du/donate.html&quot;&gt;The Dumping Union&lt;/a&gt;&lt;/em&gt;
&lt;/p&gt;</content>
		<author>
			<name>Luca Elia</name>
			<uri>http://www.lucaelia.com/mame.php</uri>
		</author>
		<source>
			<title type="html">Luca's MAME Drivers</title>
			<subtitle type="html">My work-in-progress emulation developments</subtitle>
			<link rel="self" href="http://www.lucaelia.com/feed.php?cat=mame"/>
			<id>http://www.lucaelia.com/mame.php</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Back of the Net</title>
		<link href="http://mamedev.emulab.it/haze/2010/01/18/back-of-the-net/"/>
		<id>http://mamedev.emulab.it/haze/?p=510</id>
		<updated>2010-01-18T21:01:25+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;With the redumped ROMs from Japump / Dumping Union, and a few tweaks the the driver Versus Net Soccer is looking a lot better.&lt;/p&gt;
&lt;p&gt;There are still some 1 frame sprite glitches (like the other GX Type 4 games), and a problem with the background layer not wrapping properly (see the crowd, Rushing Heroes suffers from the same issue), bad sound (the sound rom is still bad), and the only the left screen working properly, but it’s basically fully playable for the first time, as can be seen below.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;center&gt;&lt;br /&gt;
&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_2.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_3.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_4.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_5.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_6.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_7.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_8.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_9.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_10.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_11.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_12.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_13.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_14.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_15.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_16.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_17.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_18.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_19.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_20.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_21.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_22.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_23.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_24.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/haze/news2010/vsnet_newer_25.png&quot; alt=&quot;Versus Net Soccer&quot; height=&quot;224/&quot; width=&quot;640&quot; /&gt;&lt;br /&gt;
&lt;/p&gt;&lt;/center&gt;&lt;p&gt;&lt;/p&gt;</content>
		<author>
			<name>Haze</name>
			<uri>http://mamedev.emulab.it/haze</uri>
		</author>
		<source>
			<title type="html">David Haywood's MAME(tm) WIP</title>
			<subtitle type="html">Independent MAME Work In Progress</subtitle>
			<link rel="self" href="http://mamedev.emulab.it/haze/feed/atom/"/>
			<id>http://mamedev.emulab.it/haze/feed/atom/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Unification pt.2</title>
		<link href="http://mamedev.emulab.it/haze/2010/01/11/unification-pt-2/"/>
		<id>http://mamedev.emulab.it/haze/?p=508</id>
		<updated>2010-01-11T00:10:49+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;&lt;a href=&quot;http://rbelmont.mameworld.info/?p=519&quot;&gt;R.Belmont&lt;/a&gt; recently made a post about upcoming changes in MAME 0.136u1.  The 0.136u1 update of MAME will be a major update for several reasons, not only will it be the first ever version to be compiled as C++ code (although the vast majority of the project is still written in C) it will also be the first version where the cross-platform SDLMame becomes an official target alongside the standard windows compile.&lt;/p&gt;
&lt;p&gt;That’s not the only unification that’s going on at the moment however.  As followers of this site may have noticed, I’ve always prefered the MAME style ’software lists’ over the open-ended approach taken by MESS with regards to loading software hence the creation of side-projects such as HazeMD and TinyCDI which serve to document both the hardware AND the software released on a platform.  Changes are underway in MESS right not to bring that concept to MESS alongside the existing open-ended loading (for homebrew etc.)&lt;/p&gt;
&lt;p&gt;This will bring MESS much closer inline with MAME’s level of documentation and policies, properly documenting what software was available for each system.  The MAME / MESS database format provides a more comprehensive way to document cartridges than the existing databases which are available, and will allow proper cart dumps, with proper rom naming to be supported just as easily as in MESS.  It will also inherit the parent/clone relationship system from MAME, and have fields for Manufacturer, and Year information, just as can be found in MAME.&lt;/p&gt;
&lt;p&gt;Hopefully with changes like this MESS can become the ultimate database for Console informaiton, much as MAME has become for Arcade systems.  The current databases are limited, and despite their intentions are unable to properly document some details about the cartdiges (such as the actual ROM labels, # of roms, sizes etc.) so assuming MESS can get some traction in this area it is more than capable of becoming a far better reference than those already out there.  This is something I’ve wanted to see for a long time because while the existing console ROM formats are great if you just want to play games in any given emulator they fail to actual document things the way MAME does.  As the games become older starts to become more of a priority, and isn’t something you can rely on the various rereleases on modern platforms because those are simply about playing the games, so it’s important for other people to document it.  There are other advantages to the MESS / MAME database too, for example, the development team make no claims of ownership over the database, once exported from the executable you’re free (and even encouraged) to use / import the information for use in your own emulator, so that things can be consistently and correctly supported.&lt;/p&gt;
&lt;p&gt;This should also lead to it being possible to create sites like &lt;a href=&quot;http://maws.mameworld.info/maws/&quot;&gt;The fantastic MAWS&lt;/a&gt; from the MESS database, and also easier set-name based bugtracking and regression testing as is used on &lt;a href=&quot;http://www.mametesters.org/&quot;&gt;Mametesters&lt;/a&gt;.  It’s a large undertaking, but as long as people can get behind the idea, and support it then it could be of great benefit to everybody who cares about the history of Computer / Console software, and the emulation of these systems.&lt;/p&gt;
&lt;p&gt;This could well be the start of a unified database system for Computers / Consoles, and the first step in the Console emulation scene growing up to be something that’s more than just about ‘playing the games’.  Here’s hoping.&lt;/p&gt;</content>
		<author>
			<name>Haze</name>
			<uri>http://mamedev.emulab.it/haze</uri>
		</author>
		<source>
			<title type="html">David Haywood's MAME(tm) WIP</title>
			<subtitle type="html">Independent MAME Work In Progress</subtitle>
			<link rel="self" href="http://mamedev.emulab.it/haze/feed/atom/"/>
			<id>http://mamedev.emulab.it/haze/feed/atom/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">cb2001: qualche progresso</title>
		<link href="http://mamedev.emulab.it/robiza/?p=138"/>
		<id>http://mamedev.emulab.it/robiza/?p=138</id>
		<updated>2010-01-03T16:30:25+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;una volta decrittati la maggior parte degli opcode ecco il primo risultato (un grazie a kale per la routine di tracciamento e per il consiglio sugli interrupt)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mamedev.emulab.it/robiza/wp-content/uploads/2010/01/0000.png&quot; title=&quot;0000&quot; height=&quot;256&quot; width=&quot;512&quot; alt=&quot;0000&quot; class=&quot;alignnone size-full wp-image-139&quot; /&gt;&lt;/p&gt;</content>
		<author>
			<name>Robiza</name>
			<uri>http://mamedev.emulab.it/robiza</uri>
		</author>
		<source>
			<title type="html">Robiza's MAME blog</title>
			<subtitle type="html">Benvenuti nel MAME-Blog di Robiza</subtitle>
			<link rel="self" href="http://mamedev.emulab.it/robiza/?feed=atom"/>
			<id>http://mamedev.emulab.it/robiza/?feed=atom</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Permalinks</title>
		<link href="http://www.lucaelia.com/mame.php/2010/Permalinks"/>
		<id>http://www.lucaelia.com/mame.php/2010/Permalinks</id>
		<updated>2010-01-02T23:00:00+00:00</updated>
		<content type="html">&lt;p&gt;
Small site update. I just implemented &lt;em&gt;Permalinks&lt;/em&gt;. Posts can now be individually linked, their URLs don't change over year boundaries, and they're more search-engines friendly. You can get the permanent links from the titles of the posts or from the menu on the right.
&lt;/p&gt;</content>
		<author>
			<name>Luca Elia</name>
			<uri>http://www.lucaelia.com/mame.php</uri>
		</author>
		<source>
			<title type="html">Luca's MAME Drivers</title>
			<subtitle type="html">My work-in-progress emulation developments</subtitle>
			<link rel="self" href="http://www.lucaelia.com/feed.php?cat=mame"/>
			<id>http://www.lucaelia.com/mame.php</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Rotten to the core</title>
		<link href="http://smf.mameworld.info/?p=55"/>
		<id>http://smf.mameworld.info/?p=55</id>
		<updated>2009-07-04T10:52:32+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;It’s been a while since I’ve emulated a game with the new system 573 protection, so it took me a little longer to get back into it.&lt;br /&gt;
Unlike the digital DDR games this is playable.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://smf.mameworld.info/img/gtrfrk8m.png&quot; alt=&quot;Guitar Freaks 8th Mix (G*C08 VER. JAA)&quot; /&gt;&lt;/p&gt;
&lt;p&gt;There are a few more in the pipeline, but they’ll have to wait a little while. This had problems booting, because of some known issues with the playstation emulation.&lt;br /&gt;
I need to verify the changes are correct, but it should help with some other games that I’ve had problems with in the past.&lt;/p&gt;</content>
		<author>
			<name>smf</name>
			<uri>http://smf.mameworld.info</uri>
		</author>
		<source>
			<title type="html">smf's blog</title>
			<subtitle type="html">The place to find random technical facts</subtitle>
			<link rel="self" href="http://smf.mameworld.info/wp-atom.php"/>
			<id>http://smf.mameworld.info</id>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Fishing in Japan</title>
		<link href="http://smf.mameworld.info/?p=54"/>
		<id>http://smf.mameworld.info/?p=54</id>
		<updated>2009-06-27T12:33:09+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;&lt;img src=&quot;http://smf.mameworld.info/img/bassang2.png&quot; alt=&quot;Bass Angler 2 (GE865 VER. JAA)&quot; /&gt;&lt;/p&gt;
&lt;p&gt;It’s Fisherman’s Bait 2 - A Bass Challenge, but in a different language.&lt;/p&gt;</content>
		<author>
			<name>smf</name>
			<uri>http://smf.mameworld.info</uri>
		</author>
		<source>
			<title type="html">smf's blog</title>
			<subtitle type="html">The place to find random technical facts</subtitle>
			<link rel="self" href="http://smf.mameworld.info/wp-atom.php"/>
			<id>http://smf.mameworld.info</id>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry>
		<title type="html">Wingboard Support</title>
		<link href="http://stolistic.blogspot.com/2009/01/wingboard-support.html"/>
		<id>tag:blogger.com,1999:blog-5785947376493681536.post-1509329063255974764</id>
		<updated>2009-01-09T00:50:22+00:00</updated>
		<content type="html">&lt;div&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_bVg1g8504p4/SWaZAwZX0AI/AAAAAAAAALg/0Vq3Z_zQslc/s1600-h/wingboard.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_bVg1g8504p4/SWaZAwZX0AI/AAAAAAAAALg/0Vq3Z_zQslc/s320/wingboard.png&quot; alt=&quot;&quot; style=&quot;FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 240px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5289083050663596034&quot; /&gt;&lt;/a&gt; Its been a while since I did any major updates to the peplus driver, but recently I decided to tackle a hardware add-on for the machine.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;The add-on is called a &quot;wingboard&quot; or daughterboard. Its purpose is to attach to a superboard pcb where you would normally place the CMOS RAM and DATA chips.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;By adding this board you are then able to add a special 5-in-1 game support. With the proper PROGRAM chip installed, the machine will read all 5 DATA chips and display a special Multi-Poker menu.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;This board functions similar to the 2 chip (non-wingboard) set XMP00006, but allows the user to swap out different chip sets instead of using the fixed list in the 2 chip set.&lt;/div&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_bVg1g8504p4/SWadOShUlBI/AAAAAAAAALw/xJKI5OKil7Q/s1600-h/wingtest1.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_bVg1g8504p4/SWadOShUlBI/AAAAAAAAALw/xJKI5OKil7Q/s320/wingtest1.png&quot; alt=&quot;&quot; style=&quot;FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 201px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5289087681208554514&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;The first challenge with making the wingboard work in MAME was discovering how the board functioned. The problem lies with the small PAL chip located on the board that controls the logic of banking to the proper DATA chips. After tracing the board by hand, I figured out a basic schematic and determined that the board switches DATA chips via a CMOS DATA write to the address 0x1FFF. The value written to this address is captured by the PAL chip and used to enable the output of the appropriate DATA chip on the address and data lines.&lt;/div&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_bVg1g8504p4/SWadcGSIBaI/AAAAAAAAAMA/zzhAwou2fLM/s1600-h/wingtest3.png&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_bVg1g8504p4/SWadcGSIBaI/AAAAAAAAAMA/zzhAwou2fLM/s320/wingtest3.png&quot; alt=&quot;&quot; style=&quot;FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 200px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5289087918441760162&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Once I understood how the wingboard worked, I added support to the peplus driver. Basically, I swap the internal superboard DATA region when address 0x1FFF is written.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Now that I had the game mostly working, I found that not all the graphics were painting correctly. This was due to the fact that the graphics chips are twice the size of any of the games I have added in the past. But I had to find what was triggering the machine to switch to the second half of the graphics chips and color proms. After some investigation, I found that there is a jumper on the superboard pcb (E16/E17) that controls the banking. This lead me to find that a bit on PORT3 is used to signal the machine to bank to the second half of the graphics.&lt;/div&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_bVg1g8504p4/SWadUb7N35I/AAAAAAAAAL4/esew5aLFErQ/s1600-h/wingtest4.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_bVg1g8504p4/SWadUb7N35I/AAAAAAAAAL4/esew5aLFErQ/s320/wingtest4.png&quot; alt=&quot;&quot; style=&quot;FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 201px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5289087786812301202&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;So after a little more cleanup, all things appear to be working fine.&lt;/div&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_bVg1g8504p4/SWadFqmpD0I/AAAAAAAAALo/LTa2lOiZtTA/s1600-h/wingtest7.png&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_bVg1g8504p4/SWadFqmpD0I/AAAAAAAAALo/LTa2lOiZtTA/s320/wingtest7.png&quot; alt=&quot;&quot; style=&quot;FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 200px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5289087533054496578&quot; /&gt;&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/5785947376493681536-1509329063255974764?l=stolistic.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Stolistic</name>
			<email>noreply@blogger.com</email>
			<uri>http://stolistic.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">PE+/S+ Emulation via MAME</title>
			<link rel="self" href="http://www.blogger.com/feeds/5785947376493681536/posts/default"/>
			<id>tag:blogger.com,1999:blog-5785947376493681536</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Binding a DropDownList to multiple properties and to nested properties</title>
		<link href="http://www.manuelabadia.com/blog/PermaLink,guid,0606d95f-56ae-4dd7-8458-69cd550fa356.aspx"/>
		<id>http://www.manuelabadia.com/blog/PermaLink,guid,0606d95f-56ae-4dd7-8458-69cd550fa356.aspx</id>
		<updated>2008-12-22T23:35:20+00:00</updated>
		<content type="html">&amp;lt;body xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&amp;gt;
        &lt;p&gt;
All controls that inherit from ListControl (BulletedList, CheckBoxList, DropDownList,
ListBox and RadioButtonList) have some annoying behavior in common: 
&lt;/p&gt;
        &lt;p&gt;
You can only bind the control to a single property using the DataTextField property.
For example, if you have a Customer class with properties Id, Name, Surname, etc and
you want to show the full name of a customer in any of the ListControls, you have
several options:
&lt;/p&gt;
        &lt;ol&gt;
          &lt;li&gt;
When you get the data from the database, return another column with the name and surname. 
&lt;/li&gt;
          &lt;li&gt;
Create a property (f.e. FullName) that returns what you want to show. 
&lt;/li&gt;
          &lt;li&gt;
Use a DataSet and add a computed column. 
&lt;/li&gt;
          &lt;li&gt;
Manually add ListItems with the appropriate values performing the data bind manually. 
&lt;/li&gt;
          &lt;li&gt;
Create a simple class that will be bound (instead of the original one) just to fix
the problem.&lt;/li&gt;
        &lt;/ol&gt;
        &lt;p&gt;
The truth is that I don’t like any of those options, all of them are hacks. 
&lt;/p&gt;
        &lt;p&gt;
For nested properties you have the similar problems. You can bind to Id or Name, but
you can’t bind to Address.City or Address.Zip.
&lt;/p&gt;
        &lt;p&gt;
Today I faced this problem again and I decided to investigate a more innovative solution.
The problem itself is in the controls that inherit from ListControl that are very
strict in the binding options. So I took a look of how the controls perform the binding
to see if I could do anything to overcome those limitations. At first sight I thought
I was loosing my time but after a deeper study I found that it was amazingly easy
to fix those problems in a very sleek way.
&lt;/p&gt;
        &lt;p&gt;
The data binding of the controls is performed in the PerformDataBinding method. The
code at ListControl.PerformDataBinding uses DataBinder.GetPropertyValue to retrieve
the value to show in the control if you set the DataTextField property. However, DataBinder.GetPropertyValue
doesn’t handle nested properties. DataBinder.Eval is a better choice because it does
handle nested properties. So using it we solve one problem. The other problem can
be solved easily as well. As we have two properties that control how the Text of each
ListItem will be extracted and shown from the data source, with a bit more of effort
we can handle the new functionality. I have come up with a very intuitive solution:
&lt;/p&gt;
        &lt;ul&gt;
          &lt;li&gt;
DataTextField allows one or more properties (that can be nested if needed) separated
by commas. 
&lt;/li&gt;
          &lt;li&gt;
DataTextFormatString can be used to control the formatting of the items, using {0},
{1}, {2}, {3}… as the value of the properties specified with DataTextField.&lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;
The code that performs the data binding is:
&lt;/p&gt;
        &lt;div style=&quot;BORDER-RIGHT: #d0d0d0 1px solid; BORDER-TOP: #d0d0d0 1px solid; BORDER-LEFT: #d0d0d0 1px solid; COLOR: #006; BORDER-BOTTOM: #d0d0d0 1px solid; FONT-FAMILY: monospace; BACKGROUND-COLOR: #f0f0f0;&quot; class=&quot;csharp&quot;&gt;
          &lt;span style=&quot;COLOR: #008080; FONT-STYLE: italic;&quot;&gt;///
&amp;lt;summary&amp;gt;Binds the data to the control.&amp;lt;/summary&amp;gt;&lt;/span&gt;
          &lt;br /&gt;
          &lt;span style=&quot;COLOR: #008080; FONT-STYLE: italic;&quot;&gt;/// &amp;lt;param name=&quot;ctrl&quot;&amp;gt;control
to bind.&amp;lt;/param&amp;gt;&lt;/span&gt;
          &lt;br /&gt;
          &lt;span style=&quot;COLOR: #008080; FONT-STYLE: italic;&quot;&gt;/// &amp;lt;param name=&quot;dataSource&quot;&amp;gt;data
to bind to the control.&amp;lt;/param&amp;gt;&lt;/span&gt;
          &lt;br /&gt;
          &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;public&lt;/span&gt;
          &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;static&lt;/span&gt;
          &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;void&lt;/span&gt; PerformDataBinding&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;ListControl
ctrl, IEnumerable dataSource&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;COLOR: #008080; FONT-STYLE: italic;&quot;&gt;// resets the selected
item&lt;/span&gt;&lt;br /&gt;
    ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;SelectedIndex&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
    ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;SelectedValue&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; null&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
    &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;dataSource &lt;span style=&quot;COLOR: #008000;&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;COLOR: #0600ff;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #ff0000;&quot;&gt;bool&lt;/span&gt; fieldInfoSet &lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; false&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #ff0000;&quot;&gt;bool&lt;/span&gt; dataTextFormatStringSet &lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; false&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #008080; FONT-STYLE: italic;&quot;&gt;// checks
if we have to clear the existing items&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;!&lt;/span&gt;ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;AppendDataBoundItems&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
            ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Items&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Clear&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #008080; FONT-STYLE: italic;&quot;&gt;// if
the data source is a collection, sets the capacity&lt;/span&gt;&lt;br /&gt;
        ICollection soureceCollection &lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; dataSource &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;as&lt;/span&gt; ICollection&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;soureceCollection &lt;span style=&quot;COLOR: #008000;&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;COLOR: #0600ff;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
            ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Items&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Capacity&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; soureceCollection.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Count&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;+&lt;/span&gt; ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Items&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Count&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #008080; FONT-STYLE: italic;&quot;&gt;// save
if the data text field of data value field has been set&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;DataTextField&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Length&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;DataValueField&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Length&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
            fieldInfoSet &lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; true&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #008080; FONT-STYLE: italic;&quot;&gt;// save
if the data text format string has been set&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;DataTextFormatString&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Length&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
            dataTextFormatStringSet &lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; true&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #008080; FONT-STYLE: italic;&quot;&gt;// iterates
through the data source creating the ListItems&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;foreach&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;object&lt;/span&gt; obj &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;in&lt;/span&gt; dataSource&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
            ListItem item &lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt;&lt;a style=&quot;COLOR: #000060;&quot; href=&quot;http://www.google.com/search?q=new+msdn.microsoft.com&quot;&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; ListItem&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
            &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;fieldInfoSet&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
                &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;DataTextField&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Length&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
                    &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;DataTextField&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;IndexOf&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: #666666;&quot;&gt;','&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
                       
item.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; DataBinder.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Eval&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;obj,
ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;DataTextField&lt;/span&gt;, ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;DataTextFormatString&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
                    &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;COLOR: #0600ff;&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
                        &lt;span style=&quot;COLOR: #008080; FONT-STYLE: italic;&quot;&gt;//
if the DataTextField property has a list of fields, get them to create the text of
the item&lt;/span&gt;&lt;br /&gt;
                        &lt;span style=&quot;COLOR: #ff0000;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;]&lt;/span&gt; fields &lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;DataTextField&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Split&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;&lt;a style=&quot;COLOR: #000060;&quot; href=&quot;http://www.google.com/search?q=new+msdn.microsoft.com&quot;&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;new&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;COLOR: #666666;&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;,
StringSplitOptions.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;RemoveEmptyEntries&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
                        &lt;span style=&quot;COLOR: #ff0000;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;]&lt;/span&gt; values &lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt;&lt;a style=&quot;COLOR: #000060;&quot; href=&quot;http://www.google.com/search?q=new+msdn.microsoft.com&quot;&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;new&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;[&lt;/span&gt;fields.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Length&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
                        &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;int&lt;/span&gt; i &lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt; i &lt;span style=&quot;COLOR: #008000;&quot;&gt;&amp;lt;&lt;/span&gt; fields.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Length&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt; i&lt;span style=&quot;COLOR: #008000;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
                       
    &lt;span style=&quot;COLOR: #ff0000;&quot;&gt;string&lt;/span&gt; field &lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; fields&lt;span style=&quot;COLOR: #000000;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;COLOR: #000000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
                       
    values&lt;span style=&quot;COLOR: #000000;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;COLOR: #000000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; DataBinder.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Eval&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;obj,
field&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
                        &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
                       
item.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;String&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Format&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;DataTextFormatString&lt;/span&gt;,
values&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
                    &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
                &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
                &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;DataValueField&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Length&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
                    item.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; DataBinder.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Eval&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;obj,
ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;DataValueField&lt;/span&gt;, &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
                &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
            &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;COLOR: #0600ff;&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
                &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;dataTextFormatStringSet&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
                    item.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;string&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Format&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;CultureInfo.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;CurrentCulture&lt;/span&gt;,
ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;DataTextFormatString&lt;/span&gt;, &lt;a style=&quot;COLOR: #000060;&quot; href=&quot;http://www.google.com/search?q=new+msdn.microsoft.com&quot;&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;new&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt; obj &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
                &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;COLOR: #0600ff;&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
                    item.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; obj.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;ToString&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
                &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
                item.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; obj.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;ToString&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
            &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
            
&lt;br /&gt;
            ctrl.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Items&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Add&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;item&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
        &lt;p&gt;
 
&lt;/p&gt;
        &lt;p&gt;
As we need to call this data binding code instead of the one from ListControl I needed
to subclass all controls that inherit from ListControl in order to fix them. So now
I have BulletedListEx, CheckBoxListEx, DropDownListEx, ListBoxEx and RadioButtonListEx.
&lt;/p&gt;
        &lt;p&gt;
I have created a simple example showing how to use them. Imagine that an Item can
be supplied by a set of suppliers, and each supplier sells the item with a different
price. The following image shows the properties of the 3 entities of the sample:
&lt;/p&gt;
        &lt;p&gt;
          &lt;img src=&quot;http://www.manuelabadia.com/blog/content/binary/listcontrolex_sample.png&quot; border=&quot;0&quot; /&gt;
        &lt;/p&gt;
        &lt;p&gt;
I have created a web page with a DropDownList with some items, and when you select
an item in the DropDownList you will see a ListBox with the all suppliers of that
item with the associated price for the item. Notice how I show the Id and the Name
in the DropDownList and how I show the price, supplier Id and supplier name in the
ListBox:
&lt;/p&gt;
        &lt;p&gt;
          &lt;img src=&quot;http://www.manuelabadia.com/blog/content/binary/listcontrolex_sample2.png&quot; border=&quot;0&quot; /&gt;
        &lt;/p&gt;
        &lt;p&gt;
The ASPX of the page follows:
&lt;/p&gt;
        &lt;div style=&quot;BORDER-RIGHT: #d0d0d0 1px solid; BORDER-TOP: #d0d0d0 1px solid; BORDER-LEFT: #d0d0d0 1px solid; COLOR: #006; BORDER-BOTTOM: #d0d0d0 1px solid; FONT-FAMILY: monospace; BACKGROUND-COLOR: #f0f0f0;&quot; class=&quot;xml&quot;&gt;
          &lt;span style=&quot;COLOR: #009900;&quot;&gt;
            &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;body&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
          &lt;/span&gt;
          &lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;form&lt;/span&gt;&lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;form1&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #000066;&quot;&gt;runat&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
        Choose an item to see the suppliers:&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
        Items:&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;manu:DropDownListEx&lt;/span&gt;&lt;span style=&quot;COLOR: #000066;&quot;&gt;ID&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;DropDownListEx1&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #000066;&quot;&gt;runat&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #000066;&quot;&gt;AutoPostBack&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;True&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #000066;&quot;&gt;Width&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;300px&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;COLOR: #009900;&quot;&gt;            &lt;span style=&quot;COLOR: #000066;&quot;&gt;DataTextField&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;Id,
Name&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;COLOR: #009900;&quot;&gt;            &lt;span style=&quot;COLOR: #000066;&quot;&gt;DataTextFormatString&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;[{0}]
- {1}&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;COLOR: #009900;&quot;&gt;            &lt;span style=&quot;COLOR: #000066;&quot;&gt;DataValueField&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;Id&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;COLOR: #009900;&quot;&gt;            &lt;span style=&quot;COLOR: #000066;&quot;&gt;OnSelectedIndexChanged&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;DropDownListEx1_SelectedIndexChanged&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #000066;&quot;&gt;AppendDataBoundItems&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;True&quot;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
            &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;asp:ListItem&lt;/span&gt;&lt;span style=&quot;COLOR: #000066;&quot;&gt;Selected&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;True&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #000066;&quot;&gt;Value&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;0&quot;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;Select
an Item&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/asp:ListItem&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/manu:DropDownListEx&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
        
&lt;br /&gt;
        Price and suppliers:&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
        
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;manu:ListBoxEx&lt;/span&gt;&lt;span style=&quot;COLOR: #000066;&quot;&gt;ID&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;ListBoxEx1&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #000066;&quot;&gt;runat&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #000066;&quot;&gt;Width&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;300px&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;COLOR: #009900;&quot;&gt;            &lt;span style=&quot;COLOR: #000066;&quot;&gt;DataTextField&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;Price,
Supplier.Id, Supplier.Name&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;COLOR: #009900;&quot;&gt;            &lt;span style=&quot;COLOR: #000066;&quot;&gt;DataTextFormatString&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;{0}
- [{1}] {2}&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;COLOR: #009900;&quot;&gt;            &lt;span style=&quot;COLOR: #000066;&quot;&gt;DataValueField&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;Supplier.Id&quot;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/manu:ListBoxEx&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/form&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/body&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
        &lt;p&gt;
 
&lt;/p&gt;
        &lt;p&gt;
As you can see, the solution is really clean and elegant, and backward compatible
with the current controls that inherit from ListControl.
&lt;/p&gt;
        &lt;p&gt;
That’s all for now,&lt;br /&gt;
Merry christmas!
&lt;/p&gt;
        &lt;p&gt;
          &lt;a href=&quot;http://www.manuelabadia.com/blog/content/binary/ListControlsEx_bin.zip&quot;&gt;ListControlsEx_bin.zip
(6.53 KB)&lt;/a&gt;
        &lt;/p&gt;
        &lt;a href=&quot;http://www.manuelabadia.com/blog/content/binary/ListControlsEx_sample.zip&quot;&gt;ListControlsEx_sample.zip
(33.75 KB)&lt;/a&gt;
        &lt;img src=&quot;http://www.manuelabadia.com/blog/aggbug.ashx?id=0606d95f-56ae-4dd7-8458-69cd550fa356&quot; height=&quot;0&quot; width=&quot;0&quot; /&gt;
      &amp;lt;/body&amp;gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?a=7I5vk_OAjkw:dBkwbiFnbRo:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?a=7I5vk_OAjkw:dBkwbiFnbRo:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?i=7I5vk_OAjkw:dBkwbiFnbRo:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?a=7I5vk_OAjkw:dBkwbiFnbRo:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?d=7Q72WNTAKBA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?a=7I5vk_OAjkw:dBkwbiFnbRo:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?i=7I5vk_OAjkw:dBkwbiFnbRo:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?a=7I5vk_OAjkw:dBkwbiFnbRo:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>Your DisplayName here!</name>
			<uri>http://www.manuelabadia.com/blog/</uri>
		</author>
		<source>
			<title type="html">Manuel Abadia's ASP.NET stuff</title>
			<link rel="self" href="http://feeds.feedburner.com/ManuelAbadia"/>
			<id>http://www.manuelabadia.com/blog/</id>
			<rights type="html">Manuel Abadia</rights>
		</source>
	</entry>

	<entry>
		<title type="html">CPS-3 (5)</title>
		<link href="http://andreasnaive.blogspot.com/2007/05/cps-3-5.html"/>
		<id>tag:blogger.com,1999:blog-21021461.post-7479154263836068959</id>
		<updated>2008-12-09T19:58:59+00:00</updated>
		<content type="html">Resumiré algunas pruebas realizadas durante los últimos días:&lt;br /&gt;&lt;br /&gt;Durante una charla informal con Haze, hablando de las zonas de memoria que están asignadas a la BIOS y a las ROMs 10 y 20, se me ocurrió cómo comprobar cuál era el primer bit que cambiaba en la dirección de comienzo de la BIOS y la ROM 10 (ya sabíamos que, aparentemente, en sfiii2, la BIOS está asignada a la dirección 0 y la ROM 10 a la dirección 0x06000000): si encontraba dos zonas en blanco en la BIOS y la ROM 10 que ocupasen la misma posición con respecto al inicio de la correspondiente ROM, podría inferirse algo de información sobre la diferencia entre las direcciones a las que están asignadas simplemente mirando qué bits coincidían (pues sabemos que f#4 muestra ciclos puros de periodo 2^19 máscaras, f#5 de periodo 20, y así...).&lt;br /&gt;&lt;br /&gt;Las zonas «en blanco» escasean en la BIOS (parece que ahí tuvieron mayor cuidado en no dejar «pistas»), pero finalmente fui capaz de encontrar dos tales zonas correspondientes en &lt;span style=&quot;font-style: italic;&quot;&gt;Warzard&lt;/span&gt; y en &lt;span style=&quot;font-style: italic;&quot;&gt;Sfiii&lt;/span&gt; (de 15 y 9 máscaras, respectivamente); se podía ver que, al comparar la BIOS con la ROM 10, en ambos casos los bits f#4, f#5, f#6, f#7 y f#8 eran idénticos, pero f#9 no. Ello indicaba que la diferencia de las direcciones de asignación de la ROM 10 y de la BIOS es un múltiplo impar de 0x02000000 (lo que es compatible con la hipótesis de que están ligadas a las direcciones 0 y 0x06000000 como en sfiii2, pero no la prueba).&lt;br /&gt;&lt;br /&gt;ElSemi llamó mi atención sobre la tabla de 256 bytes situada al final de la BIOS; tras un análsis de un par de tablas, resulta claro que: 1º) la tabla se ha generado usando algún tipo de algoritmo que funciona a nivel de octetos, pues el bit #1 de cada octeto muestra regularidades estadísticas significativas cuando se observa la tabla completa (en&lt;span style=&quot;font-style: italic;&quot;&gt; Jojo&lt;/span&gt;, de hecho, ese bit es siempre 0); 2º) por consiguiente, no es razonable suponer que esa tabla esté encriptada, sino que se trata de datos sin encriptar.&lt;br /&gt;&lt;br /&gt;Una hipótesis tentadora es considerar que se trata de una tabla de subclaves indexada de alguna manera; sin embargo, no disponemos por el momento de ningún argumento sólido a favor o en contra de esta hipótesis, por lo que no insistiré en ello por ahora. En todo caso, si así fuese y estuviese siendo indexada con bits de la dirección, yo esperaría que fuese con bits de la parte baja, pues los bits altos de la dirección muestran propiedades de difusión mucho peores, lo que no me cuadraría con el hecho de que usasen diferentes entradas de una tabla.&lt;br /&gt;&lt;br /&gt;Para tratar de validar el que una operación de tipo &lt;span style=&quot;font-style: italic;&quot;&gt;rotate_left(x,4) XOR (x AND ???)&lt;/span&gt; estuviese siendo hecha (ver &lt;a href=&quot;http://andreasnaive.blogspot.com/2007/05/cps-3-4.html&quot;&gt;CPS-3 (4)&lt;/a&gt;), se me ocurrió el siguiente experimento: al actuar, como operandos, una variable de 16 bits y ella misma desplazada 4 bits, se consigue que se creen cuatro clases de equivalencia en el conjunto de los 16 bits, perteneciendo a una misma clase aquellos que se afectan mutuamente por efecto del desplazamiento de 4 posiciones (de este modo, los bits #0, #4, #8 y #12 forman una clase, los bits #1, #5, #9 y #13 otra, y así con el resto). Si ahora estudiamos los números formados al juntar los cuatro bits de una misma clase, obtenemos una nueva variable x' y la operación se reduce a &lt;span style=&quot;font-style: italic;&quot;&gt;rotate_left(x',1) XOR (x' AND y)&lt;/span&gt;; y aquí empieza la fiesta: si, aun sabiendo que &lt;span style=&quot;font-style: italic;&quot;&gt;x'&lt;/span&gt; e &lt;span style=&quot;font-style: italic;&quot;&gt;y&lt;/span&gt; tienen que estar necesariamente correladas, suponemos que son lo suficientemente independientes una de la otra como para que la correlación sea pequeña, cabe suponer que la distribución de valores que sigan los datos reales nos dé información sobre si ese tipo de operación está siendo usada o no. Esto es así porque, si suponemos, en la operación anterior, que &lt;span style=&quot;font-style: italic;&quot;&gt;x'&lt;/span&gt; e &lt;span style=&quot;font-style: italic;&quot;&gt;y&lt;/span&gt; son totalmente independientes, y nos hacemos una tabla tabulando las 256 posibilidades según el resultado (de 0 a 15), obtenemos la siguiente distribución:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;17 15 15 17 15 17 17 15 15 17 17 15 17 15 15 17&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;está distribución también la tiene la operación &lt;span style=&quot;font-style: italic;&quot;&gt;rotate_left(x',1) XOR (x' OR y)&lt;/span&gt;, pero no así otras posibles operaciones compatibles con lo que ya sabemos (o, al menos, yo no he sido capaz de encontrarlas)&lt;br /&gt;&lt;br /&gt;Pues bien, al obtener las distribuciones reales para las cuatro clases de equivalencia correspondientes a &lt;span style=&quot;font-style: italic;&quot;&gt;JojoIm1&lt;/span&gt;, se obtiene lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;115163  134440  134684  123578  124325  119368  129136  138039  131465  123863  124014  134368  114033  128910  138950  132739&lt;br /&gt;138511  116005  117079  133371  120561  137598  132515  113767  121234  142936  135015  120354  139340  123419  117903  137467&lt;br /&gt; 97696  155678  150638  107566  144235  105896  104535  149136  147566  109552  104031  153598  100741  153822  148116  114269&lt;br /&gt;106225  149014  147978  108136  148715  110697  103607  151184  149013  112404  104923  149873  106272  145600  145167  108267&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Se puede ver que la distribución para la segunda clase de equivalencia muestra, aproximadamente, una proporcionalidad directa con la distribución de arriba, mientras que el resto de clases muestran una proporcionalidad inversa; lo mismo ocurre con &lt;span style=&quot;font-style: italic;&quot;&gt;JojobaIm1&lt;/span&gt; y con &lt;span style=&quot;font-style: italic;&quot;&gt;Sfiii3Im1&lt;/span&gt; (aunque, en este último caso, el cuarto grupo es directamente proporcional, y los otros tres inversamente proporcional). Este tipo de distribución es la que yo esperaría si, después de haber realizado una operación como las de arriba (&lt;span style=&quot;font-style: italic;&quot;&gt;rotate_left(x',1) XOR (x AND/OR y)&lt;/span&gt;, se hubiese efectuado un XOR con un número fijo; dependiendo de la paridad de ese número, se obtendría una proporcionalidad directa o inversa.&lt;br /&gt;&lt;br /&gt;Este experimento, de por sí, ya fue bastante interesante, pero no acabó ahí, pues, al día siguiente de haber hecho eso, tuve la feliz idea de tratar de obtener información sobre los términos &lt;span style=&quot;font-style: italic;&quot;&gt;x&lt;/span&gt;' e &lt;span style=&quot;font-style: italic;&quot;&gt;y&lt;/span&gt; haciendo uso de esa misma distribución. La idea fundamental es que el resultado de la operación te da información sobre los operandos, pues no todos los resultados se producen con la misma probabilidad; de esta forma, si uno dibuja la tabla de frecuencias que relaciona el resultado final (una fila por cada uno, de 0 a 15) con el término &lt;span style=&quot;font-style: italic;&quot;&gt;y&lt;/span&gt; que le dio origen (una columna asociada con cada uno, de 0 a 15), obtiene esto:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,},&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,},&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,},&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,},&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,},&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,},&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,},&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,},&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,},&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,},&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,},&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,},&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,},&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,},&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,},&lt;br /&gt;{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,},&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;y si hace los mismo relacionando el resultado con el término &lt;span style=&quot;font-style: italic;&quot;&gt;x'&lt;/span&gt;, esto otro:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;{16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,},&lt;br /&gt;{0,0,0,0,0,0,0,0,8,0,0,0,4,0,2,1,},&lt;br /&gt;{0,8,0,0,0,0,0,0,0,4,0,0,0,2,0,1,},&lt;br /&gt;{0,8,0,0,0,0,0,0,0,4,0,0,0,2,2,1,},&lt;br /&gt;{0,0,8,4,0,0,0,0,0,0,0,2,0,0,0,1,},&lt;br /&gt;{0,0,0,4,0,0,0,0,0,0,4,2,4,0,2,1,},&lt;br /&gt;{0,0,8,4,0,0,0,0,0,0,0,2,0,2,0,1,},&lt;br /&gt;{0,0,0,4,0,0,0,0,0,0,4,2,0,2,2,1,},&lt;br /&gt;{0,0,0,0,8,0,4,2,0,0,0,0,0,0,0,1,},&lt;br /&gt;{0,0,0,0,0,0,0,2,8,0,0,0,4,0,2,1,},&lt;br /&gt;{0,0,0,0,0,4,4,2,0,4,0,0,0,2,0,1,},&lt;br /&gt;{0,0,0,0,0,4,0,2,0,4,0,0,0,2,2,1,},&lt;br /&gt;{0,0,0,0,8,0,4,2,0,0,0,2,0,0,0,1,},&lt;br /&gt;{0,0,0,0,0,0,0,2,0,0,4,2,4,0,2,1,},&lt;br /&gt;{0,0,0,0,0,4,4,2,0,0,0,2,0,2,0,1,},&lt;br /&gt;{0,0,0,0,0,4,0,2,0,0,4,2,0,2,2,1,},&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;La primera tabla da algo de información, pero no mucha: dado un resultado, asigna sesgos distintos a la probabilidad de un operando &lt;span style=&quot;font-style: italic;&quot;&gt;y&lt;/span&gt; &lt;span style=&quot;font-weight: bold;&quot;&gt;únicamente&lt;/span&gt; en función del peso de &lt;span style=&quot;font-style: italic;&quot;&gt;y&lt;/span&gt; (número de bits puestos a 1). Ello hace que no se discrimine bien entre los valores para los bits individuales de ese término &lt;span style=&quot;font-style: italic;&quot;&gt;y&lt;/span&gt;, e imposibilita que se pueda usar con facilidad esa información para reconstruir los ciclos esperados de los bits del término &lt;span style=&quot;font-style: italic;&quot;&gt;y&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;La segunda tabla, en cambio, tiene un aspecto excelente :D Permite discriminar las probabilidades de los bits individuales de x'; así, si cogemos un bloque de 2^19 máscaras consecutivas de &lt;span style=&quot;font-style: italic;&quot;&gt;JojoIm1&lt;/span&gt;, calculamos el sesgo &lt;span style=&quot;font-style: italic;&quot;&gt;a priori&lt;/span&gt; (usando la tabla mencionada) de que f#0 valga 0 (valores positivos indican que es más probable que valga 0 que 1; valores negativos lo contrario) y hacemos un análisis de autocorrelación, obtenemos esto:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_JuyaeWA6kJU/Rkt-_PtD-3I/AAAAAAAAAAM/6Jy644YhU9E/s1600-h/test41_08.png&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_JuyaeWA6kJU/Rkt-_PtD-3I/AAAAAAAAAAM/6Jy644YhU9E/s400/test41_08.png&quot; alt=&quot;&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5065281830920649586&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Se observa claramente el ciclo de 2^15 máscaras que esperábamos.&lt;br /&gt;&lt;br /&gt;Empero, si tratamos de usar esa tabla de probabilidades condicionales para calcular el valor de ese mismo bit para cada una de las 2^15 posiciones del ciclo (es de esperar que x' muestre un ciclo puro), el resultado, siendo aceptable, no es espectacular: el número de datos disponible para cada posición no es suficiente para obtener resultados incontrovertibles para cada posición. Pero la fortuna nos sonríe, porque, si observamos con más detenimiento la tabla, veremos que hay filas (correspondientes a ciertos resultados de la operación) que sólo se pueden dar para ciertos valores de los bits del operando x'; por ejemplo, si el resultado de la operación es 2 (tercera fila de la tabla), entonces necesariamente el bit #0 de x' será 1.&lt;br /&gt;&lt;br /&gt;Esto nos permitiría recuperar los valores de algunos bits del ciclo, pero hay algo que debemos no perder de vista: dada la forma de la distribución, suponíamos que un XOR con un valor fijo estaba siendo efectuado después de la operación; cuando probé a recuperar esos bits para cada una de las máscaras XOR aceptables, otro hecho afortunado nos ayudó: al analizar los resultados, había una y sólo una máscara XOR que conseguía que en los bits del ciclo recuperados no se diesen valores idénticos separados por la mitad de tamaño del ciclo (algo que yo esperaba/deseaba, pues es una característica que es invariante ante bastantes de las operaciones que era probable encontrar antes de la que nos ocupa).&lt;br /&gt;&lt;br /&gt;Una vez dado el salto de suponer que, efectivamente, esa característica (ser la segunda mitad exactamente como la primera pero invertida) la comparten todos los bits de &lt;span style=&quot;font-style: italic;&quot;&gt;x&lt;/span&gt;, se obtiene, por una parte, la máscara XOR aplicada después (0xd86e en el caso de &lt;span style=&quot;font-style: italic;&quot;&gt;JojoIm1&lt;/span&gt; y &lt;span style=&quot;font-style: italic;&quot;&gt;JojobaIm1&lt;/span&gt;, y 0x54ca en el caso de &lt;span style=&quot;font-style: italic;&quot;&gt;Sfiii3&lt;/span&gt;) y, por otra, se pueden recuperar más bits de los ciclos (esta forma de obtener más bits y la anterior se retroalimentan). La escasez de máscaras disponibles no nos permite regenerar los ciclos completos, pero, al menos, obtenemos un porcentaje apreciable de algunos de ellos (los primeros bits, que muestran ciclos de longitud menor, son, por supuesto, los que pueden ser regenerados de forma más completa).&lt;br /&gt;&lt;br /&gt;Y esto, a su vez, ha hecho surgir interesantes conclusiones:&lt;br /&gt;- La parte del ciclo de tamaño 2^15 (del bit #0 de &lt;span style=&quot;font-style: italic;&quot;&gt;x&lt;/span&gt;) que se recupera encaja perfectamente con el que recuperábamos al estudiar f#5 módulo 2^15 (ver &lt;a href=&quot;http://andreasnaive.blogspot.com/2007/05/cps-3-3.html&quot;&gt;CPS-3 (3)&lt;/a&gt;). Esto ha supuesto una confirmación inesperada de algo que, si bien suponía, no encontraba manera de demostrar.   :D&lt;br /&gt;- Lo mismo ocurre con el ciclo de tamaño 2^16 pero invirtiendo los bits (lo cual es efecto de la operación XOR hecha después, por lo que no nos debe extrañar a estas alturas).&lt;br /&gt;- El disponer de reconstrucciones parciales de los ciclos de los bits de &lt;span style=&quot;font-style: italic;&quot;&gt;x'&lt;/span&gt; nos permite, a su vez, estudiar &lt;span style=&quot;font-style: italic;&quot;&gt;y&lt;/span&gt;; esta es la actual línea de ataque que estoy siguiendo, pero todavía queda trabajo por hacer antes de extraer conclusiones...&lt;br /&gt;&lt;br /&gt;Y este es el estado actual de las cosas... continuaré trabajando en esta línea, pero no será ahora. Hechos felices de la vida real (que algunos conocéis) van a alejarme de los ordenadores y de mi casa por espacio de dos o tres semanas; seguiremos con esto cuando vuelva.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21021461-7479154263836068959?l=andreasnaive.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Andreas Naive</name>
			<email>noreply@blogger.com</email>
			<uri>http://andreasnaive.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Notas de Andy</title>
			<link rel="self" href="http://www.blogger.com/feeds/21021461/posts/default"/>
			<id>tag:blogger.com,1999:blog-21021461</id>
		</source>
	</entry>

	<entry>
		<title type="html">Implementación de reglas</title>
		<link href="http://andreasnaive.blogspot.com/2007/11/implementacin-de-reglas.html"/>
		<id>tag:blogger.com,1999:blog-21021461.post-6215418938431431883</id>
		<updated>2008-12-09T19:58:58+00:00</updated>
		<content type="html">&lt;a href=&quot;http://4.bp.blogspot.com/_JuyaeWA6kJU/Ryn2W94NUbI/AAAAAAAAABQ/zywN9Rd5VAQ/s1600-h/jubatu4.png&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_JuyaeWA6kJU/Ryn2W94NUbI/AAAAAAAAABQ/zywN9Rd5VAQ/s400/jubatu4.png&quot; alt=&quot;&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5127900525165892018&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Últimamente no he dispuesto de demasiado tiempo libre, lo que me ha impedido trabajar en esto lo que me hubiese gustado... pero algo hemos avanzado:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tras muchas pruebas, creo que he fijado los modelos de las piezas; he cribado los vértices de los modelos de Morio hasta un punto en que el motor 3d pueda moverlos incluso sin aceleración hardware (en un ordenador relativamente moderno).&lt;/li&gt;&lt;li&gt;La iluminación también ha sido fijada, después de haber tenido bastantes problemas al hacer pruebas (se hace uso de sombreado Gouraud, por cierto).&lt;/li&gt;&lt;li&gt;Gracias a la amabilidad de &lt;a href=&quot;http://www.willmcgugan.com/&quot;&gt;Will McGugan&lt;/a&gt;, que me ha autorizado a utilizar su módulo python de ajedrez, me he ahorrado tener que implementar por mí mismo las reglas; puede que haya que corregir algunos errores, pero me encanta cómo está diseñado el módulo. ¡Gracias, Will!  ;)&lt;/li&gt;&lt;li&gt;He continuado con la implementación del protocolo de comunicación, y ya se pueden enviar los movimientos de un tablero al otro sin problemas.&lt;/li&gt;&lt;/ul&gt;Aún quedan muchas cosas por hacer, no obstante. Amén de terminar de implementar el protocolo (rendición, coronación de piezas, propuesta y aceptación de tablas, tablas reclamadas por un jugador, etc), hay que corregir algunos errores con los movimientos especiales, arreglar la selección de escaques (que, no sé debido a qué, está dando problemas), presentar las condiciones de finalización de partida al usuario, etc.&lt;br /&gt;&lt;br /&gt;Seguimos en la brecha. ;)&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21021461-6215418938431431883?l=andreasnaive.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Andreas Naive</name>
			<email>noreply@blogger.com</email>
			<uri>http://andreasnaive.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Notas de Andy</title>
			<link rel="self" href="http://www.blogger.com/feeds/21021461/posts/default"/>
			<id>tag:blogger.com,1999:blog-21021461</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Search Engine Optimization - Moving View State to the bottom of the page</title>
		<link href="http://www.manuelabadia.com/blog/PermaLink,guid,7924eaf8-b406-43af-9444-b816f6dfa246.aspx"/>
		<id>http://www.manuelabadia.com/blog/PermaLink,guid,7924eaf8-b406-43af-9444-b816f6dfa246.aspx</id>
		<updated>2008-12-04T19:26:16+00:00</updated>
		<content type="html">&lt;p&gt;
One of the greatest problems when trying to optimize an ASP.NET page to be more search
engine friendly is the view state hidden field. Most search engines give more score
to the content of the firsts thousands of bytes of the document so if your first 2
KB are view state junk your pages are penalized. So the goal here is to move the view
state data as down as possible. 
&lt;/p&gt;
&lt;p&gt;
I have seen some approaches to solve this problem rewriting the final HTML code of
the response. While this approach works I think that it wastes some precious processor
cycles that can be used to do other things. So I needed a way to do the same thing
without wasting that CPU time. After some large reflector sessions I found a way to
do it. My method uses the ASP.NET Control Adapter Architecture. 
&lt;/p&gt;
&lt;p&gt;
A control adapter is a class that can be used to control the HTML generated by the
control it adapts. Since the Page class is the responsible of rendering the view state
hidden field (Page.BeginFormRender calls Page.RenderViewStateFields), an adapter for
the Page is needed. However, the view state hidden field plays a key role in the ASP.NET
infrastructure (for example, the Page.IsPostBack property checks if the view state
hidden field has been posted) and it is difficult to modify the associated HTML. 
&lt;/p&gt;
&lt;p&gt;
A PageAdapter has a method called GetStatePersister() that returns an object that
inherits from PageStatePersister. The PageStatePersister is called when it is time
to load and save the view state. There are 2 classes that inherit from PageStatePersister:
HiddenFieldPageStatePersister and SessionPageStatePersister. The first one is the
default, which stores the view state in the hidden field called __VIEWSTATE. The second
one stores the view state in the session. So, we can easily create a custom PageStatePersister
to control the view state load and save process. The big problem is how to create
the hidden view state field before the closing form tag while being a fully transparent
solution. After some tries I came up with a solution that I was happy with. 
&lt;/p&gt;
&lt;p&gt;
I realized that it was impossible to completely remove the view state hidden field
from the top of the page, because it plays a key role in the ASP.NET infrastructure.
However, with any custom page state persister the ASP.NET infrastructure renders at
least an empty view state hidden field of only 70 bytes: 
&lt;/p&gt;
&lt;div style=&quot;BORDER-RIGHT: #d0d0d0 1px solid; BORDER-TOP: #d0d0d0 1px solid; BORDER-LEFT: #d0d0d0 1px solid; COLOR: #006; BORDER-BOTTOM: #d0d0d0 1px solid; FONT-FAMILY: monospace; BACKGROUND-COLOR: #f0f0f0;&quot; class=&quot;html4strict&quot;&gt;&lt;span style=&quot;COLOR: #009900;&quot;&gt;&amp;lt;&lt;a style=&quot;COLOR: #000060;&quot; href=&quot;http://december.com/html/4/element/input.html&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;input&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;COLOR: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;hidden&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;COLOR: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;__VIEWSTATE&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;COLOR: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;__VIEWSTATE&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;COLOR: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #66cc66;&quot;&gt;/&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;p&gt;
My page adapter adds a hidden field to the bottom of the form called __SEOVIEWSTATE
with the actual view state data, and the only limitation that it has it is that you
can not use &amp;lt;% %&amp;gt;expressions directly inside the asp.net form. However, this restriction
can be easily avoided putting the &amp;lt;% %&amp;gt;expression in a PlaceHolder control or inside
another control. For an in-depth explanation of this limitation take a look &lt;a href=&quot;http://www.west-wind.com/WebLog/posts/6148.aspx&quot;&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Let’s see an example of the adapter in action. The following ASP.NET page: 
&lt;/p&gt;
&lt;div style=&quot;BORDER-RIGHT: #d0d0d0 1px solid; BORDER-TOP: #d0d0d0 1px solid; BORDER-LEFT: #d0d0d0 1px solid; COLOR: #006; BORDER-BOTTOM: #d0d0d0 1px solid; FONT-FAMILY: monospace; BACKGROUND-COLOR: #f0f0f0;&quot; class=&quot;xml&quot;&gt;&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;&lt;/span&gt;%@
Page &lt;span style=&quot;COLOR: #000066;&quot;&gt;Language&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;C#&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;AutoEventWireup&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;true&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;CodeBehind&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;Default.aspx.cs&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;Inherits&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;SEOViewStateAdapterTest._Default&quot;&lt;/span&gt; %&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #00bbdd;&quot;&gt;&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&amp;gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;xmlns&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;http://www.w3.org/1999/xhtml&quot;&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;head&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;runat&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;title&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/title&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/head&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;body&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;form1&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;runat&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        Enter a message: &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;asp:TextBox&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;ID&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;txtMessage&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;runat&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/asp:TextBox&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;asp:Button&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;ID&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;bSaveMessage&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;runat&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;server&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;Text&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;Save
Message&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;onclick&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;bSaveMessage_Click&quot;&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;asp:Label&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;ID&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;lMessage&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;runat&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/asp:Label&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;p&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Page
generated at &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;asp:PlaceHolder&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;ID&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;PlaceHolder1&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;runat&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;&lt;/span&gt;%=
DateTime.Now.ToString&lt;span style=&quot;COLOR: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;hh:mm
dd/MM/yyy&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #66cc66;&quot;&gt;)&lt;/span&gt; %&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/asp:PlaceHolder&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/p&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/form&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/body&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/html&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
 
&lt;/div&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;p&gt;
With the associated code: 
&lt;/p&gt;
&lt;div style=&quot;BORDER-RIGHT: #d0d0d0 1px solid; BORDER-TOP: #d0d0d0 1px solid; BORDER-LEFT: #d0d0d0 1px solid; COLOR: #006; BORDER-BOTTOM: #d0d0d0 1px solid; FONT-FAMILY: monospace; BACKGROUND-COLOR: #f0f0f0;&quot; class=&quot;csharp&quot;&gt;&lt;span style=&quot;COLOR: #0600ff;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;COLOR: #008080;&quot;&gt;System&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #0600ff;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;COLOR: #008080;&quot;&gt;System.Collections.Generic&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #0600ff;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;COLOR: #008080;&quot;&gt;System.Web&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #0600ff;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;COLOR: #008080;&quot;&gt;System.Web.UI&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #0600ff;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;COLOR: #008080;&quot;&gt;System.Web.UI.WebControls&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #0600ff;&quot;&gt;namespace&lt;/span&gt; SEOViewStateAdapterTest&lt;br /&gt;
&lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;partial&lt;/span&gt; &lt;span style=&quot;COLOR: #ff0000;&quot;&gt;class&lt;/span&gt; _Default &lt;span style=&quot;COLOR: #008000;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;COLOR: #000000;&quot;&gt;System.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Web&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;UI&lt;/span&gt;&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Page&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;void&lt;/span&gt; Page_Load&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;object&lt;/span&gt; sender,
EventArgs e&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;
&lt;br /&gt;
            &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;!&lt;/span&gt;Page.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;IsPostBack&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;
&lt;br /&gt;
                ViewState&lt;span style=&quot;COLOR: #000000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;COLOR: #666666;&quot;&gt;&quot;previousMessage&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; txtMessage.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;
&lt;br /&gt;
            &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;COLOR: #0600ff;&quot;&gt;void&lt;/span&gt; bSaveMessage_Click&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;object&lt;/span&gt; sender,
EventArgs e&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #000000;&quot;&gt;{&lt;/span&gt;
&lt;br /&gt;
            lMessage.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Text&lt;/span&gt; &lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;COLOR: #ff0000;&quot;&gt;String&lt;/span&gt;.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Format&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: #666666;&quot;&gt;&quot;The
current message is '{0}'. The previous message was '{1}'&quot;&lt;/span&gt;, txtMessage.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Text&lt;/span&gt;, &lt;span style=&quot;COLOR: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;ViewState&lt;span style=&quot;COLOR: #000000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;COLOR: #666666;&quot;&gt;&quot;previousMessage&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;
&lt;br /&gt;
            ViewState&lt;span style=&quot;COLOR: #000000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;COLOR: #666666;&quot;&gt;&quot;previousMessage&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #000000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;COLOR: #008000;&quot;&gt;=&lt;/span&gt; txtMessage.&lt;span style=&quot;COLOR: #0000ff;&quot;&gt;Text&lt;/span&gt;&lt;span style=&quot;COLOR: #008000;&quot;&gt;;&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #000000;&quot;&gt;}&lt;/span&gt;
&lt;br /&gt;
 
&lt;/div&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;p&gt;
after a couple of postbacks, without using the adapter, the HTML looks like this: 
&lt;/p&gt;
&lt;div style=&quot;BORDER-RIGHT: #d0d0d0 1px solid; BORDER-TOP: #d0d0d0 1px solid; BORDER-LEFT: #d0d0d0 1px solid; COLOR: #006; BORDER-BOTTOM: #d0d0d0 1px solid; FONT-FAMILY: monospace; BACKGROUND-COLOR: #f0f0f0;&quot; class=&quot;xml&quot;&gt;&lt;span style=&quot;COLOR: #00bbdd;&quot;&gt;&amp;lt;!DOCTYPE
html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&amp;gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;xmlns&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;http://www.w3.org/1999/xhtml&quot;&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;head&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;title&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/title&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/head&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;body&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;form1&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;method&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;post&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;action&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;Default.aspx&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;form1&quot;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;hidden&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;__VIEWSTATE&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;__VIEWSTATE&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;/wEPDwUJc01l[...]VwP+cfdSWI6Q==&quot;&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;hidden&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;__EVENTVALIDATION&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;__EVENTVALIDATION&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;/wEWAwKb4uenCgK/1s7/DwKf8MMPfiUvZtKPSXk//XdxkLooz8QDI0Y=&quot;&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        Enter a message: &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;txtMessage&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;text&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;Message
2&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;txtMessage&quot;&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;bSaveMessage&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;Save
Message&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;bSaveMessage&quot;&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;span&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;lMessage&quot;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;The
current message is 'Message 2'. The previous message was 'Message 1'&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/span&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;p&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Page
generated at 08:13 04/12/2008&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/p&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/form&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/body&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/html&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;p&gt;
and after a couple of postbacks, using the adapter, the HTML looks like this: 
&lt;/p&gt;
&lt;div style=&quot;BORDER-RIGHT: #d0d0d0 1px solid; BORDER-TOP: #d0d0d0 1px solid; BORDER-LEFT: #d0d0d0 1px solid; COLOR: #006; BORDER-BOTTOM: #d0d0d0 1px solid; FONT-FAMILY: monospace; BACKGROUND-COLOR: #f0f0f0;&quot; class=&quot;xml&quot;&gt;&lt;span style=&quot;COLOR: #00bbdd;&quot;&gt;&amp;lt;!DOCTYPE
html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&amp;gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;xmlns&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;http://www.w3.org/1999/xhtml&quot;&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;head&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;title&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/title&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/head&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;body&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;form&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;form1&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;method&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;post&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;action&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;Default.aspx&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;form1&quot;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;hidden&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;__VIEWSTATE&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;__VIEWSTATE&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;hidden&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;__EVENTVALIDATION&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;__EVENTVALIDATION&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;/wEWAwL+raDpAgK/1s7/DwKf8MMPyF7nqN1AbwNwFBq8OAjEAQorsyo=&quot;&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        Enter a message: &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;txtMessage&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;text&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;Message
2&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;txtMessage&quot;&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;submit&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;bSaveMessage&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;Save
Message&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;bSaveMessage&quot;&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;span&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;lMessage&quot;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;The
current message is 'Message 2'. The previous message was 'Message 1'&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/span&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;br&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;p&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Page
generated at 08:11 04/12/2008&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/p&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/div&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;hidden&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;__SEOVIEWSTATE&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;__SEOVIEWSTATE&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;/wEPc01lc3[...]CdNY6AtgigHvU=&quot;&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/form&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/body&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/html&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;p&gt;
In order to use the adapter, you have to add a reference to the assembly and add a
file called SEOViewStateAdapter.browser (the name of the file does not matter. The
extension needs to be the same. Or also you could merge the contents to another file
if you already have one) to the App_Browsers folder. The content of the file should
be: 
&lt;/p&gt;
&lt;div style=&quot;BORDER-RIGHT: #d0d0d0 1px solid; BORDER-TOP: #d0d0d0 1px solid; BORDER-LEFT: #d0d0d0 1px solid; COLOR: #006; BORDER-BOTTOM: #d0d0d0 1px solid; FONT-FAMILY: monospace; BACKGROUND-COLOR: #f0f0f0;&quot; class=&quot;xml&quot;&gt;&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;browsers&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #808080; FONT-STYLE: italic;&quot;&gt;&amp;lt;!-- use the adapters
for all browsers --&amp;gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;browser&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;refID&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;Default&quot;&lt;/span&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;controlAdapters&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
            &lt;span style=&quot;COLOR: #808080; FONT-STYLE: italic;&quot;&gt;&amp;lt;!--
ths adapter is used to save the view and control state at the bottom of the form so
the page is more friendly to search engines --&amp;gt;&lt;/span&gt;
&lt;br /&gt;
            &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;adapter&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;controlType&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;System.Web.UI.Page&quot;&lt;/span&gt; &lt;span style=&quot;COLOR: #000066;&quot;&gt;adapterType&lt;/span&gt;=&lt;span style=&quot;COLOR: #ff0000;&quot;&gt;&quot;Manu.Web.Adapters.SEOFriendlyViewStatePageAdapter,
SEOViewStateAdapter&quot;&lt;/span&gt; &lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
        &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/controlAdapters&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
    &lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/browser&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;COLOR: #009900;&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;lt;/browsers&lt;span style=&quot;FONT-WEIGHT: bold; COLOR: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
 
&lt;/div&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;p&gt;
That’s all. Enjoy!
&lt;/p&gt;
&lt;a href=&quot;http://www.manuelabadia.com/blog/content/binary/SEOViewState.zip&quot;&gt;SEOViewState.zip
(29.67 KB)&lt;/a&gt;&lt;img src=&quot;http://www.manuelabadia.com/blog/aggbug.ashx?id=7924eaf8-b406-43af-9444-b816f6dfa246&quot; height=&quot;0&quot; width=&quot;0&quot; /&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?a=5zQS9jfe05c:8GmfRVgkYcc:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?a=5zQS9jfe05c:8GmfRVgkYcc:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?i=5zQS9jfe05c:8GmfRVgkYcc:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?a=5zQS9jfe05c:8GmfRVgkYcc:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?d=7Q72WNTAKBA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?a=5zQS9jfe05c:8GmfRVgkYcc:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?i=5zQS9jfe05c:8GmfRVgkYcc:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?a=5zQS9jfe05c:8GmfRVgkYcc:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ManuelAbadia?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>Your DisplayName here!</name>
			<uri>http://www.manuelabadia.com/blog/</uri>
		</author>
		<source>
			<title type="html">Manuel Abadia's ASP.NET stuff</title>
			<link rel="self" href="http://feeds.feedburner.com/ManuelAbadia"/>
			<id>http://www.manuelabadia.com/blog/</id>
			<rights type="html">Manuel Abadia</rights>
		</source>
	</entry>

	<entry>
		<title type="html">Yikes - more than 2 years without blogging!</title>
		<link href="http://avoidspikes.blogspot.com/2008/08/yikes-more-than-2-years-without.html"/>
		<id>tag:blogger.com,1999:blog-5824590.post-1845367338316564419</id>
		<updated>2008-08-14T19:28:39+00:00</updated>
		<content type="html">Not the kind of anniversary I wanted to celebrate.  Anyways, I'm in the middle of a move to a new house, and work is heating up.  So, hopefully around October, things will settle down...and I will try to post something more regularly.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/5824590-1845367338316564419?l=avoidspikes.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Knarfian</name>
			<email>noreply@blogger.com</email>
			<uri>http://avoidspikes.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Avoid Spikes</title>
			<link rel="self" href="http://www.blogger.com/feeds/5824590/posts/default"/>
			<id>tag:blogger.com,1999:blog-5824590</id>
		</source>
	</entry>

	<entry>
		<title type="html">Lots of Slots</title>
		<link href="http://stolistic.blogspot.com/2008/06/lots-of-slots.html"/>
		<id>tag:blogger.com,1999:blog-5785947376493681536.post-2522214937045566257</id>
		<updated>2008-06-12T01:30:02+00:00</updated>
		<content type="html">&lt;a href=&quot;http://bp3.blogger.com/_bVg1g8504p4/SFB7BlejDWI/AAAAAAAAAIA/yqBoYjQyBJ0/s1600-h/PS0716.PNG&quot;&gt;&lt;img src=&quot;http://bp3.blogger.com/_bVg1g8504p4/SFB7BlejDWI/AAAAAAAAAIA/yqBoYjQyBJ0/s320/PS0716.PNG&quot; alt=&quot;&quot; style=&quot;float: right; margin: 0 0 10px 10px; cursor: pointer; cursor: hand;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5210800036037987682&quot; /&gt;&lt;/a&gt;I decided to revisit the PE+ driver specifically to find out why all the video slots did not accepts coins.  I assumed the slots had some special code that maybe affected the coin-in timing, but after a lot of tracing, I couldn't find any differences.  Eventually, I noticed that the last page of the operator screens was blank and the Spin button was lit.  Pressing the Spin button didn't seem to do anything.  Using some experience I learned from the S+ slot machine, I figured this screen was used to show the reel stops.  Each time you press Spin you would see the next reel stop etc.&lt;br /&gt;&lt;a href=&quot;http://bp0.blogger.com/_bVg1g8504p4/SFB6-iWU0xI/AAAAAAAAAH4/iZX5nvX2N3E/s1600-h/PS0615.PNG&quot;&gt;&lt;img src=&quot;http://bp0.blogger.com/_bVg1g8504p4/SFB6-iWU0xI/AAAAAAAAAH4/iZX5nvX2N3E/s320/PS0615.PNG&quot; alt=&quot;&quot; style=&quot;float: right; margin: 0 0 10px 10px; cursor: pointer; cursor: hand;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5210799983658586898&quot; /&gt;&lt;/a&gt;&lt;br /&gt;But the screen wasn't painting the reels and seemed to be stuck in a loop.  After much tracing, I finally found that the Timer 1 interrupt at 0x001b stopped firing.  Without this interrupt, the game would basically sit in an endless loop waiting for the timer bit to update.&lt;br /&gt;&lt;a href=&quot;http://bp1.blogger.com/_bVg1g8504p4/SFB67Vh-61I/AAAAAAAAAHw/Gi3sXZhSEWs/s1600-h/PS0308.PNG&quot;&gt;&lt;img src=&quot;http://bp1.blogger.com/_bVg1g8504p4/SFB67Vh-61I/AAAAAAAAAHw/Gi3sXZhSEWs/s320/PS0308.PNG&quot; alt=&quot;&quot; style=&quot;float: right; margin: 0 0 10px 10px; cursor: pointer; cursor: hand;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5210799928678214482&quot; /&gt;&lt;/a&gt;&lt;br /&gt;It turns out that the split timer code in the i8051 core needed a small tweak.  Once the code was fixed, the reel stops showed up in the operator screen, and the game started accepting coins.&lt;br /&gt;&lt;a href=&quot;http://bp0.blogger.com/_bVg1g8504p4/SFB634FDC4I/AAAAAAAAAHo/h4Ti9_k1ptc/s1600-h/PS0045.PNG&quot;&gt;&lt;img src=&quot;http://bp0.blogger.com/_bVg1g8504p4/SFB634FDC4I/AAAAAAAAAHo/h4Ti9_k1ptc/s320/PS0045.PNG&quot; alt=&quot;&quot; style=&quot;float: right; margin: 0 0 10px 10px; cursor: pointer; cursor: hand;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5210799869232614274&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Now that I could see the slot games play properly, I found that PS0716 was not &quot;Quarter Mania&quot;, but rather &quot;River Gambler&quot;.&lt;br /&gt;&lt;a href=&quot;http://bp3.blogger.com/_bVg1g8504p4/SFB6zwYa7oI/AAAAAAAAAHg/RFLCnzSX5HY/s1600-h/PS0043.PNG&quot;&gt;&lt;img src=&quot;http://bp3.blogger.com/_bVg1g8504p4/SFB6zwYa7oI/AAAAAAAAAHg/RFLCnzSX5HY/s320/PS0043.PNG&quot; alt=&quot;&quot; style=&quot;float: right; margin: 0 0 10px 10px; cursor: pointer; cursor: hand;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5210799798446911106&quot; /&gt;&lt;/a&gt;&lt;br /&gt;With the video slots working, I added support for 5 new romsets to the driver:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;(PS0014) Super Joker Slots&lt;/li&gt;&lt;br /&gt;&lt;li&gt;(PS0022) Red White &amp;amp; Blue Slots&lt;/li&gt;&lt;br /&gt;&lt;li&gt;(PS0043) Double Diamond Slots&lt;/li&gt;&lt;br /&gt;&lt;li&gt;(PS0045) Red White &amp;amp; Blue Slots&lt;/li&gt;&lt;br /&gt;&lt;li&gt;(PS0308) Double Jackpot Slots&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a href=&quot;http://bp1.blogger.com/_bVg1g8504p4/SFB6vgVxHZI/AAAAAAAAAHY/chOcAW6-k0U/s1600-h/PS0022.PNG&quot;&gt;&lt;img src=&quot;http://bp1.blogger.com/_bVg1g8504p4/SFB6vgVxHZI/AAAAAAAAAHY/chOcAW6-k0U/s320/PS0022.PNG&quot; alt=&quot;&quot; style=&quot;float: right; margin: 0 0 10px 10px; cursor: pointer; cursor: hand;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5210799725421338002&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://bp1.blogger.com/_bVg1g8504p4/SFB6mGOXymI/AAAAAAAAAHQ/xOykLhhomEc/s1600-h/PS0014.png&quot;&gt;&lt;img src=&quot;http://bp1.blogger.com/_bVg1g8504p4/SFB6mGOXymI/AAAAAAAAAHQ/xOykLhhomEc/s320/PS0014.png&quot; alt=&quot;&quot; style=&quot;float: right; margin: 0 0 10px 10px; cursor: pointer; cursor: hand;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5210799563792173666&quot; /&gt;&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/5785947376493681536-2522214937045566257?l=stolistic.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Stolistic</name>
			<email>noreply@blogger.com</email>
			<uri>http://stolistic.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">PE+/S+ Emulation via MAME</title>
			<link rel="self" href="http://www.blogger.com/feeds/5785947376493681536/posts/default"/>
			<id>tag:blogger.com,1999:blog-5785947376493681536</id>
		</source>
	</entry>

	<entry>
		<title type="html">CPS2 not much left to do</title>
		<link href="http://mamelife.blogspot.com/2007/02/cps2-not-much-left-to-do.html"/>
		<id>tag:blogger.com,1999:blog-10457042.post-117171582069777064</id>
		<updated>2007-02-17T12:39:12+00:00</updated>
		<content type="html">When I originally wrote the key searching program, that was on the assumption that the key for the second Feistel network was 96 bits long.&lt;br /&gt;&lt;br /&gt;Each (E,D) pair reduces the key space by a factor of about 2&lt;sup&gt;16&lt;/sup&gt;, so to isolate the correct key with good confidence one would need at least 96/16 = 6 (E,D) pairs.&lt;br /&gt;&lt;br /&gt;The big problem is finding those pairs. Remember that they must be at compatible addresses, that is addresses whose bottom 17 bits are the same. This is a serious limitation, because the code of several games only covers a range of 0x80000 bytes, which would give a maximum of 4 pairs at any address. For the Super Puzzle Fighter 2 games, the range is just 0x40000 bytes, giving just 2 pairs per address.&lt;br /&gt;One can find hundreds, even thousands of of (E,D) pairs, but if they are not at compatible addresses they are of no use to find the key using this attack.&lt;br /&gt;&lt;br /&gt;However, now we know that the key actually has only 64 significant bits, some of which are repeated. I therefore rewrote the program to take that into account. This means that only 4 (E,D) pairs are needed to isolate the key.&lt;br /&gt;&lt;br /&gt;Also, I made several important optimisations that I missed the first time around, like caching intermediate results and speeding up the s-boxes calculations by using precalculated tables (this last optimisation also made into MAME so the decryption when loading a game is now faster).&lt;br /&gt;&lt;br /&gt;The end result is a program that is orders of magnitude faster than the previous one.&lt;br /&gt;Now it takes just 15 seconds to find the key given 8 (E,D) pairs. With 5 pairs, which was just plain impossible before, it takes 5 minutes. With 4 pairs, 35 minutes.&lt;br /&gt;&lt;br /&gt;These improvement made it simple to find most of the remaining keys, even for games that didn't have a matching revision already decrypted (most notably some of the Steeet Fighter Zero versions).&lt;br /&gt;&lt;br /&gt;But there's more: the program is now fast enough to go one step further, and look for the key with just 3 pairs. Of course 3 pairs are not enough to isolate the right key: they only reduce the key space by about 2&lt;sup&gt;48&lt;/sup&gt;, therefore leaving about 2&lt;sup&gt;16&lt;/sup&gt; keys which are compatible with the data. Once a 64-bit key for the second Feistel network is selected, the compatible 64-bit master keys can then be easily generated, and used to verify other (E,D) pairs at different addresses. This allows to find the correct key in less than one day, and I had to use this extended attack for a couple of the most problematic games.&lt;br /&gt;&lt;br /&gt;In the meantime, Andreas Naive has been busy implementing the attack he had &lt;a href=&quot;http://andreasnaive.blogspot.com/2007/02/cps-2-11.html&quot;&gt;described on his blog&lt;/a&gt;, and was able to find the keys for two of the Super Puzzle Fighter 2 games. Unfortunately, the attack failed on the third. Work is still in progress on that one, and there is some hope that the key will eventually be found.&lt;br /&gt;&lt;br /&gt;The only other games that are missing a key are the two CPS2 versions of Mega Man. There is no decrypted CPS2 version of that game to compare with, and the CPS1 version seems to be too different to be able to find good pairs.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/10457042-117171582069777064?l=mamelife.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Nicola Salmoria</name>
			<email>noreply@blogger.com</email>
			<uri>http://mamelife.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Nicola's MAME Ramblings</title>
			<link rel="self" href="http://www.blogger.com/feeds/10457042/posts/default"/>
			<id>tag:blogger.com,1999:blog-10457042</id>
		</source>
	</entry>

	<entry>
		<title type="html">CPS2 Key Bit Order</title>
		<link href="http://mamelife.blogspot.com/2007/01/cps2-key-bit-order.html"/>
		<id>tag:blogger.com,1999:blog-10457042.post-116937754701213882</id>
		<updated>2007-02-17T10:33:16+00:00</updated>
		<content type="html">As &lt;a href=&quot;http://mamelife.blogspot.com/2007/01/cps2-getting-closer.html&quot;&gt;previously mentioned&lt;/a&gt;, the 64-bit keys I'm currently using should be the same as the hardware ones, except for a fixed permutation of the bits.&lt;br /&gt;&lt;br /&gt;The permutation is actually irrelevant as far as the algorithm is concerned, since it is already taken into account when generating subkeys. The difference that it does make, however, is that there are strong suspicions that some of the keys are not random numbers, so what looks like random gibberish currently would show some order if we had the correct permutation.&lt;br /&gt;&lt;br /&gt;Take the ssf2 versions for example. There are currently 6 different versions supported: World, USA, Asia, Japan, Tournament World, Tournament Japan. Here are the keys (in a different order):&lt;br /&gt;&lt;br /&gt;3D9E1E15A58C32CE&lt;br /&gt;3599DF35AD98284C&lt;br /&gt;B74433502F4653D7&lt;br /&gt;8758E3923FFA1A50&lt;br /&gt;F0AE3D08420DD6BF&lt;br /&gt;6260014FD857F7A7&lt;br /&gt;&lt;br /&gt;there is something immediately obvious about those keys: they all contain exactly 32 0s and 32 1s.&lt;br /&gt;When picking one random 64-bit numbers, the likelihood of this happening is about 1 in 10, so it's ok. But the likelihood of it happening for SIX numbers is about 1 in 1 &lt;em&gt;million&lt;/em&gt;! So we can be pretty sure that those keys are &lt;strong&gt;not&lt;/strong&gt; random numbers.&lt;br /&gt;&lt;br /&gt;What is one particularly simple sequence that has exactly 32 1s? Well, of course 0123456789ABCDEF. And sure enough, after looking at the bits for a while and applying  an appropriate permutation, here is what the above keys become:&lt;br /&gt;&lt;br /&gt;0123456789ABCDEF&lt;br /&gt;1032547698BADCFE&lt;br /&gt;45673210CDEFAB89&lt;br /&gt;67451032FEDC98BA&lt;br /&gt;89ABDCEF45672301&lt;br /&gt;CDEFBA9823016754&lt;br /&gt;&lt;br /&gt;looks much better doesn't it?&lt;br /&gt;Though there's no way to tell how close it is to the real thing.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/10457042-116937754701213882?l=mamelife.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Nicola Salmoria</name>
			<email>noreply@blogger.com</email>
			<uri>http://mamelife.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Nicola's MAME Ramblings</title>
			<link rel="self" href="http://www.blogger.com/feeds/10457042/posts/default"/>
			<id>tag:blogger.com,1999:blog-10457042</id>
		</source>
	</entry>

</feed>
