<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>low-end.net</title>
	<atom:link href="http://low-end.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://low-end.net</link>
	<description>hardware research and other musings</description>
	<lastBuildDate>Mon, 20 Feb 2012 23:11:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>First successful code build.</title>
		<link>http://low-end.net/blog/2012/02/20/first-successful-code-build/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=first-successful-code-build</link>
		<comments>http://low-end.net/blog/2012/02/20/first-successful-code-build/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 23:05:28 +0000</pubDate>
		<dc:creator>takashi</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://low-end.net/?p=57</guid>
		<description><![CDATA[Here is the small, but significant, first step into programming the VT168. Using a standard build of the cc65 C compiler and a draft configuration file, I successfully mapped the memory and structure of the VT168 hardware. With that and &#8230; <a href="http://low-end.net/blog/2012/02/20/first-successful-code-build/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://low-end.net/wp-content/uploads/emuvt_coderun.png"><img class="alignnone size-full wp-image-58" title="emuvt_coderun" src="http://low-end.net/wp-content/uploads/emuvt_coderun.png" alt="" width="528" height="528" /></a></p>
<p>Here is the small, but significant, first step into programming the VT168. Using a standard build of the <a href="www.cc65.org">cc65 C compiler</a> and a draft configuration file, I successfully mapped the memory and structure of the VT168 hardware. With that and the available register documentation, I had a sample running in a few days. However, there is one glaring flaw in the main datasheet &#8211; it does not explain how to select color modes for the background layers. After a bit of head scratching, here is how it&#8217;s configured:</p>
<pre> Color Mode  BKx_Color
 ----------  ---
 16 colors   0 0
 16 colors?  0 1
 64 colors   1 0
 256 colors  1 1</pre>
<p>The BK1_Color and BK2_Color bits can be found in the 0&#215;2013 and 0&#215;2017 registers, respectively. One interesting feature of this SoC is that, while only 64Kb addressing space is available to the main CPU, with higher portions of the 8Mb memory visible by a mappable 32Kb segment starting at 0&#215;8000, the graphical unit fetches data from that memory space using automatic segment mapping. This makes graphical access very clean. There are a bunch of very clever things in this SoC, actually, and I hope to be able to show them off &#8211; that is, if they&#8217;re actually not horribly broken in the real hardware.</p>
<p><span id="more-57"></span>On that note, after careful consideration of how much work it would be to have a perfectly asyncronous parallel memory that was also multiplexed to the little amount of IO ports I had available on the base Nexys2 development board, I ordered an expansion board, that is a rather fetching piece of hardware:</p>
<p><a href="http://low-end.net/wp-content/uploads/P1030011.jpg"><img class="alignnone size-full wp-image-59" title="P1030011" src="http://low-end.net/wp-content/uploads/P1030011.jpg" alt="" width="800" height="534" /></a></p>
<p>This (and the neat cheap breadboard they included) allows me to connect all the 40 inputs directly to the FPGA, and from there to bridge it with the built-in SRAM memory of the prototype board. Aw, if only I had remembered to bring my VHDL books with me, because I am pretty darn rusty at it.</p>
]]></content:encoded>
			<wfw:commentRss>http://low-end.net/blog/2012/02/20/first-successful-code-build/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NJ Pocket memory reverse engineering.</title>
		<link>http://low-end.net/blog/2012/02/13/nj-pocket-memory-reverse-engineering/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nj-pocket-memory-reverse-engineering</link>
		<comments>http://low-end.net/blog/2012/02/13/nj-pocket-memory-reverse-engineering/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 00:39:29 +0000</pubDate>
		<dc:creator>takashi</dc:creator>
				<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">http://low-end.net/?p=46</guid>
		<description><![CDATA[I finally got around to figure out the pinout of the little Flash ROM board in the NJ Pocket. For that I had to remove it to check the bottom pins&#8230; and well, let&#8217;s say things didn&#8217;t went very well: &#8230; <a href="http://low-end.net/blog/2012/02/13/nj-pocket-memory-reverse-engineering/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I finally got around to figure out the pinout of the little Flash ROM board in the NJ Pocket. For that I had to remove it to check the bottom pins&#8230; and well, let&#8217;s say things didn&#8217;t went very well:<br />
<a href="http://low-end.net/wp-content/uploads/P1020989.jpg"><img class="alignnone size-full wp-image-47" title="P1020989" src="http://low-end.net/wp-content/uploads/P1020989.jpg" alt="" width="800" height="534" /></a></p>
<p>Despite my best efforts to safely remove it, the board is glued before the soldering. This complicated the job of removing the solder cleanly, and it led to a last ditch effort that resulted in way more damage than was needed. Luckily there are plenty of test pads and I haven&#8217;t damaged any additional hardware other than a slightly scratched ground track. As such, It might still be possible to connect some test hardware to the CPU &#8211; I already have a simple VHDL module ready for this and will get around to writing some code soon.</p>
<p>Click on to see the results of my efforts&#8230;</p>
<p><span id="more-46"></span>Before I put up the design, I have to say that this work wouldn&#8217;t have been possible without the valuable help of Sprite_tm of <a href="http://www.spritesmods.com">spritesmods.com</a>. He contacted me with a lot of valuable information and more important, he removed the epoxy from the CPU in his board and made it possible to see the connection pinout. With that information and the  (somewhat incorrect) preliminary datasheet, mapping everything was a breeze:</p>
<p><a href="http://low-end.net/wp-content/uploads/memVT1682_decoded.png"><img class="alignnone size-full wp-image-49" title="memVT1682_decoded" src="http://low-end.net/wp-content/uploads/memVT1682_decoded.png" alt="" width="1000" height="750" /></a></p>
<p>As I was finishing, it became obvious that the NJ Pocket might not use a Read/Write signal at all, treating it as a huge block of asynchronous SRAM. I also started decoding the memory board routes to the Flash chip:<br />
<a href="http://low-end.net/wp-content/uploads/decoded.jpg"><img class="alignnone size-full wp-image-52" title="decoded" src="http://low-end.net/wp-content/uploads/decoded.jpg" alt="" width="947" height="546" /></a></p>
<p>The green tracks there are individual paths that don&#8217;t connect to the main board. It&#8217;s very likely they were used while programming and might still be reusable. In particular, it might be used in some type of standard industrial Flash programming scheme, that I need to look into.</p>
<p>Anyway, this was a good week for this project, hope to bring more good news soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://low-end.net/blog/2012/02/13/nj-pocket-memory-reverse-engineering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Sprites With a Tile Based Display</title>
		<link>http://low-end.net/blog/2011/08/17/software-sprites-on-a-tile-based-display/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=software-sprites-on-a-tile-based-display</link>
		<comments>http://low-end.net/blog/2011/08/17/software-sprites-on-a-tile-based-display/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 00:51:08 +0000</pubDate>
		<dc:creator>takashi</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[sprites]]></category>
		<category><![CDATA[theory]]></category>

		<guid isPermaLink="false">http://low-end.net/?p=36</guid>
		<description><![CDATA[Earlier today, I was talking about the Sega Mega Drive and how it sometimes used software sprites (but mostly its predecessor, the Sega Master System). This made me think of the technique for a while and how I haven&#8217;t seen &#8230; <a href="http://low-end.net/blog/2011/08/17/software-sprites-on-a-tile-based-display/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Earlier today, I was talking about the Sega Mega Drive and how it sometimes used software sprites (but mostly its predecessor, the Sega Master System). This made me think of the technique for a while and how I haven&#8217;t seen it detailed in any length for a while. It was not that common, but still useful to make games that would defeat the sprite-limit in the hardware, or if the system had no sprite hardware at all in a given graphical mode.</p>
<p>First, let&#8217;s define a sprite. It&#8217;s going to be a simple one, a 8&#215;8 bullet. Let&#8217;s make it that it only has 2 colors, meaning it only needs 1-bit per pixel (we&#8217;ll get to why this example is important later):</p>
<pre>00111100
01000010
10011001
10100101
10100101 
10011001
01000010
00111100</pre>
<p>Let&#8217;s define a tiled screen made of several 8&#215;8 tiles. For clarity sake, let&#8217;s just make a 4&#215;4 one and name them using hexadecimal letters:</p>
<pre>    0   1   2   3
0 |0x0|0x1|0x2|0x3|
1 |0x4|0x5|0x6|0x7|
2 |0x8|0x9|0xA|0xB|
3 |0xC|0xD|0xE|0xF|</pre>
<p><span id="more-36"></span></p>
<p>So, this screen has a resolution of 32&#215;32 pixels. If you wanted this sprite to appear in a specific location, let&#8217;s say pixel position (21,19) for the top bit of the sprite, then you first would divide the number by 8 (by shifting the data right 3 bits):</p>
<pre> tile_pos_x = pos_x &gt;&gt; 3;
 tile_pos_y = pos_y &gt;&gt; 3;</pre>
<p>But this would just give, at best, the base location of our sprite, in this case, tile (2,1) or tile 0&#215;6 in the previous scheme. but here&#8217;s the nice part. let&#8217;s grab those lost three bytes with a mask and call it an offset:</p>
<pre>off_pos_x = pos_x &amp; 0x07;
off_pos_y = pos_y &amp; 0x07;</pre>
<p>this gives us (5, 3) &#8211; the specific offset of the sprite. So, to accommodate this change, we shift the bitmask of the sprite the given amount of data to the right, and at the same time move it downwards the specific amount:</p>
<pre>for (int i = off_pos_y; i &lt; 8; i++) tile_data0x6[i] =  sprite[i - off_pos_y] &gt;&gt; off_pos_x;</pre>
<p>This results in something like :</p>
<pre>00000000
00000000
00000000
00000001
00000010
00000100
00000101
00000101</pre>
<p>Well, now if you think about it, you just have to do the same for the next tile &#8211; in our case 0&#215;7, except you want to move in the opposite direction:</p>
<pre>for (int i = off_pos_y; i &lt; 8; i++) tile_data0x7[i] =  sprite[i - off_pos_y] &lt;&lt; (8-off_pos_x);</pre>
<p>So, we get:</p>
<pre>00000000
00000000
00000000
11100000
00010000
11001000
00101000
00101000</pre>
<p>It&#8217;s now logical that the bottom tiles (0xA and 0xB) are just a variant of this concept, displaying the missing bottom. Here&#8217;s a slightly organized pseudo-code:</p>
<pre>for (int i = off_pos_y; i &lt; 8; i++)
{
  tile_data0x6[i] =  sprite[i - off_pos_y] &gt;&gt; off_pos_x;
  tile_data0x7[i] =  sprite[i - off_pos_y] &lt;&lt; (8 - off_pos_x);
}
for (int i = 0; i &lt; 8 - offpos_y; i++)
{
  tile_data0x6[i] =  sprite[off_pos_y + i] &gt;&gt; off_pos_x;
  tile_data0x7[i] =  sprite[off_pos_y + i] &lt;&lt; (8 - off_pos_x);
}</pre>
<p>This shapes up to this</p>
<pre>  (0x6)    (0x7)
00000000 00000000
00000000 00000000
00000000 00000000
00000001 11100000
00000010 00010000
00000100 11001000
00000101 00101000
00000101 00101000
  (0xA)    (0xB)
00000100 11001000
00000010 00010000
00000001 11100000
00000000 00000000
00000000 00000000
00000000 00000000
00000000 00000000
00000000 00000000</pre>
<p>What is means is that you can use 4 tiles to draw a single, 8&#215;8 sprite anywhere on the screen. You&#8217;ll normally want to update it every frame, so the basic limit to this technique is, other than the CPU power, the amount of VRAM writes you can do to the hardware during a v-blank (updating only the altered tiles, of course). You also have to remember when several sprites take the same tile pattern, what can be solved with a simple sorting test and then ORing the final sprite results as the new tile pattern.</p>
<p>Now, about the whole color issue. Most consoles store the tile data in planar layers of bits. So a 2-bit sprite (meaning a 4 color sprite) would look like this:</p>
<pre>0 - 00111100
1 - 01000010
2 - 10011001
3 - 10100101
4 - 10100101
5 - 10011001
6 - 01000010
7 - 00111100
8 - 00111100
9 - 01111110
A - 11111111
B - 11100111
C - 11100111
D - 11111111
E - 01111110
F - 00111100</pre>
<p>This means that you&#8217;d grab line 0 and line 8 and then join them together bit-by-bit, then line 1 and 9 and so on &#8211; so in the end this is a representation of:</p>
<pre>00 00 11 11 11 11 00 00 = 00333300
00 11 01 01 01 01 11 00 = 03111130
11 01 01 11 11 01 01 11 = 31133113
11 01 11 00 00 11 01 11 = 31300313
11 01 11 00 00 11 01 11 = 31300313
11 01 01 11 11 01 01 11 = 31133113
00 11 01 01 01 01 11 00 = 03111130
00 00 11 11 11 11 00 00 = 00333300</pre>
<p>While this was mostly to simplify the hardware, it helps that you can still perform the same type of shifts &#8211; you just do it on a per-plane manner instead of having to take into account the bit-depth of the whole sprite.</p>
]]></content:encoded>
			<wfw:commentRss>http://low-end.net/blog/2011/08/17/software-sprites-on-a-tile-based-display/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VT1682 Schematic Symbols</title>
		<link>http://low-end.net/blog/2011/08/11/vt1682-schematic-symbols/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=vt1682-schematic-symbols</link>
		<comments>http://low-end.net/blog/2011/08/11/vt1682-schematic-symbols/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 18:09:38 +0000</pubDate>
		<dc:creator>takashi</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[VT1682 bSch Schematics]]></category>

		<guid isPermaLink="false">http://low-end.net/?p=29</guid>
		<description><![CDATA[I took a quick break to map the pinout of the VT1682 CPU unto a library for my favorite schematic editor. I use an old version of bSch i translated into English a couple of years ago. It runs fine, &#8230; <a href="http://low-end.net/blog/2011/08/11/vt1682-schematic-symbols/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://low-end.net/wp-content/uploads/vt1682.png"><img class="alignnone size-full wp-image-30" title="vt1682" src="http://low-end.net/wp-content/uploads/vt1682.png" alt="" width="1000" height="750" /></a>I took a quick break to map the pinout of the VT1682 CPU unto a library for my favorite schematic editor. I use an old version of <a href="http://www.suigyodo.com/online/oldedit.htm">bSch</a> i translated into English a couple of years ago. It runs fine, even on Windows 7, but the tools that convert the text files to the binary format used by the program are 16-bit apps, and hence unable to run on x64. Luckily they had no qualms about running under DosBox. There is also a short FlashROM symbol I rendered from the Application Note.</p>
<p><strong>Update:</strong> I found I was lacking the original measurements of the small board that holds Flash memory i mentioned in the last post, so I retook the measures and took the chance to build a small diagram. The pin order of the diagram mimics, somewhat, the expected physical position on the board, so this is a visual aid as well.</p>
<p><a href="http://low-end.net/wp-content/uploads/memvt1682.png"><img class="alignnone size-full wp-image-33" title="memvt1682" src="http://low-end.net/wp-content/uploads/memvt1682.png" alt="" width="1000" height="750" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://low-end.net/blog/2011/08/11/vt1682-schematic-symbols/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NJ Pocket initial signal analysis</title>
		<link>http://low-end.net/blog/2011/07/22/nj-pocket-initial-signal-analysis/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nj-pocket-initial-signal-analysis</link>
		<comments>http://low-end.net/blog/2011/07/22/nj-pocket-initial-signal-analysis/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 15:24:55 +0000</pubDate>
		<dc:creator>takashi</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[analysis]]></category>
		<category><![CDATA[NJ Pocket]]></category>

		<guid isPermaLink="false">http://low-end.net/?p=21</guid>
		<description><![CDATA[To add to my previous post, I ran my oscilloscope over the pins on the small board. It exposes 44 pins, and one would expect to see 16 data pins, and the full 21 addressing space. So a quick look &#8230; <a href="http://low-end.net/blog/2011/07/22/nj-pocket-initial-signal-analysis/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>To add to my <a title="Exploring the NJ Pocket" href="http://low-end.net/blog/2011/07/22/exploring-the-nj-pocket/">previous post</a>, I ran my oscilloscope over the pins on the small board. It exposes 44 pins, and one would expect to see 16 data pins, and the full 21 addressing space. So a quick look revealed 23 pins with a waveform like this:</p>
<p><a href="http://low-end.net/wp-content/uploads/ADS00003.png"><img class="alignnone size-full wp-image-22" title="ADS00003" src="http://low-end.net/wp-content/uploads/ADS00003.png" alt="" width="320" height="234" /></a></p>
<p>That seem to be address and control data from the CPU. Additionally 16 pins had a much sharper response, and are likely the data pins.</p>
<p><a href="http://low-end.net/wp-content/uploads/ADS00007.png"><img class="alignnone size-full wp-image-23" title="ADS00007" src="http://low-end.net/wp-content/uploads/ADS00007.png" alt="" width="320" height="234" /></a></p>
<p>Of the remaining 5 pins, one seemed to carry Vcc, three were grounded, and one had a negative-trigger behaviour:</p>
<p><a href="http://low-end.net/wp-content/uploads/ADS00012.png"><img class="alignnone size-full wp-image-24" title="ADS00012" src="http://low-end.net/wp-content/uploads/ADS00012.png" alt="" width="320" height="234" /></a></p>
<p>And is likely the /OE pin. So far so good. One of the test pads also carries a control signal, but until I remove the board it will impossible to determine which one. At any rate, it seems the basic signals required to dump the ROM are available, so that will be one of the first tasks. Once I&#8217;ll post about unsoldering and figure the pinout, I&#8217;ll detail my dumping hardware.</p>
]]></content:encoded>
			<wfw:commentRss>http://low-end.net/blog/2011/07/22/nj-pocket-initial-signal-analysis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exploring the NJ Pocket</title>
		<link>http://low-end.net/blog/2011/07/22/exploring-the-nj-pocket/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=exploring-the-nj-pocket</link>
		<comments>http://low-end.net/blog/2011/07/22/exploring-the-nj-pocket/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 03:37:16 +0000</pubDate>
		<dc:creator>takashi</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[NJ Pocket]]></category>
		<category><![CDATA[teardown]]></category>

		<guid isPermaLink="false">http://low-end.net/?p=5</guid>
		<description><![CDATA[To start this blog, I want to focus on a piece of hardware that has caught a bit of interest recently. It is the NJ-250A &#8220;NJ Pocket&#8221;, a very cheap (under $20) console that can be obtained from several internet &#8230; <a href="http://low-end.net/blog/2011/07/22/exploring-the-nj-pocket/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>To start this blog, I want to focus on a piece of hardware that has caught a bit of interest recently. It is the NJ-250A &#8220;NJ Pocket&#8221;, a very cheap (under $20) console that can be obtained from several internet retailers:<img class="alignnone" title="NJ Pocket front" src="https://lh6.googleusercontent.com/-QPgYsTKXa0I/TedrNplgJjI/AAAAAAAAAfE/-cU6sl2iHPQ/s640/P1020377.JPG" alt="" width="640" height="360" />The machine itself is manufactured by Shenzen Nanjing technologies. While a longer, more detailed post on them will be in order later on, SN is known to be a manufacturer of NES/Famicom pirate and original carts. However, this machine does not carry any NES games. In fact it rather carries 60 &#8220;original&#8221; games, and by that I mean games that despite using stolen art and audio, are original games and have the very bad gameplay to prove it.</p>
<p><object width="480" height="390" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/2NUzwkbd8xM?version=3&amp;hl=pt_PT" /><param name="allowfullscreen" value="true" /><embed width="480" height="390" type="application/x-shockwave-flash" src="http://www.youtube.com/v/2NUzwkbd8xM?version=3&amp;hl=pt_PT" allowFullScreen="true" allowscriptaccess="always" allowfullscreen="true" /></object></p>
<p>Never the less, it&#8217;s very obvious that the games look nothing like a NES. Something very different was inside.</p>
<p>The very fine folks at <a href="http://s4.zetaboards.com/PGC_Forums/index/">PGC Forums</a>, led me to the right path &#8211; the hardware inside is based on the V.R. Technology&#8217;s VT1682 solution, a completely original SoC, that while inspired by the NES hardware, has none of the custom parts. Even more interesting, VRT themselves offers  <a href="http://www.vrt.com.tw/admin/upload/datasheet/VT1682_Data%20Sheet_Eng_V1.1.pdf">detailed datasheets</a> (PDF) , <a href="http://www.vrt.com.tw/admin/upload/datasheet/VT1682%20Programming%20Guide%20V1.10_ENG.pdf">programming guides</a> (PDF)  and even a compiler/emulator for the hardware. The specifications are also interesting:</p>
<ul>
<li>Main CPU : 5.3Mhz 6502-based hardware. VRT claim to fame is the OneBus system, that replaces the NES CPU dual data bus paradigm for a single, software mappable bus that accesses up to 32Mbytes in data.</li>
<li>Sound CPU : 21Mhz 6502 with additional DAC outputs. Losing the 2A03-style sound chip is sad, but replacing it with a fast CPU pays off in flexibility. There is potential for synth or module/tracking audio, as well as using it as a co-processor.</li>
<li>Graphics PU :  A fully redesigned video chip with little similarity to the NES. Up to 240 16-color sprites per frame (16 by line), and two background layers with support for bitmap and high-color.</li>
<li>Memory : 8Kb PRAM with 4Kb shared between sound and main cpu. 4Kb VRAM supporting tiles and sprite data.</li>
<li>All the other bits and pieces that one expects from a microcontroller &#8211; LCD controllers, UART, etc:</li>
</ul>
<div><a href="http://low-end.net/wp-content/uploads/vt1682block.png"><img class="alignnone size-full wp-image-8" title="Block Diagram of SoC VT1682" src="http://low-end.net/wp-content/uploads/vt1682block.png" alt="" width="596" height="405" /></a></div>
<div>Interest piked, I went ahead and decided to tear down the device. It&#8217;s a pretty simple and uneventful job, with the same screws for every single part and 4 plastic tabs holding the case and boards. Beneath the LCD (a very bright but slightly low res screen), all one could find is the familiar epoxy blurb of the CPU and some shoddy patch soldering:</div>
<div><img class="alignnone" title="NJ Pocket board - Front" src="https://lh5.googleusercontent.com/-Oq7GZm8gTQg/TegT_NN82HI/AAAAAAAAAhs/sOSz3bFLUm4/s640/P1020386.JPG" alt="" width="640" height="427" /></div>
<div>Notice the test pads and jumpers. Hoping some of these lead to the serial port, but it&#8217;s too soon to say. However, turning the board around we get some good news: <img class="alignnone" title="NJ Pocket board - back" src="https://lh5.googleusercontent.com/-iSnL40SP3E0/TegTv0-dYbI/AAAAAAAAAhc/78RH_333Vc4/s640/P1020381.JPG" alt="" width="640" height="427" /></div>
<div>The flash chip isn&#8217;t coy to its origins, and reveals itself as a 256Mbit, 16-bit data bus Intel StrataFlash. With a nice, compreensive datasheet around, it seems the task of reading and writing to it isn&#8217;t impossible. In addition, the small board where it rests seems to have pads that could have been used for the original flashing process. The other two IC&#8217;s are also easily identified:</div>
<div>
<ul>
<li>Atmel AT24C02N &#8211; a 2048 bit serial memory</li>
<li>TDA2822M, a classic if cheap audio amp</li>
</ul>
<p>While the purpose of the later is obvious, the former confounds me. Best I can imagine is that it&#8217;s meant to hold some sort of save data. Next post will detail what I found out about the machine pinouts and my plans to dump the data.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://low-end.net/blog/2011/07/22/exploring-the-nj-pocket/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

