<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-10995549</id><updated>2011-08-16T08:53:30.273-07:00</updated><title type='text'>Ball Computer Blog</title><subtitle type='html'>New to this blog?  Start reading at the &lt;a href=http://ballcomputer.blogspot.com/2005/02/introduction.html&gt;introduction&lt;/a&gt;, and it'll make a lot more sense.  Those of you who know what's going on might want to check out the &lt;a href=http://ballcomputer.blogspot.com/2005/02/image-reg-test.html&gt;register test state machine&lt;/a&gt; or the &lt;a href="http://ballcomputer.blogspot.com/2005/03/image-alu-test.html"&gt;ALU test state machine&lt;/a&gt;.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>54</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10995549.post-638276448722647658</id><published>2010-02-23T19:02:00.000-08:00</published><updated>2010-02-23T19:19:39.933-08:00</updated><title type='text'>3D Printing Rocks</title><content type='html'>I decided that, rather than do yet more simulation, I'd start trying to prototype my gates.&lt;br /&gt;&lt;br /&gt;The simplest way to do this seemed to be designing them in some CAD tool and having a 3D print done.  I spent a number of weekends going through Blender tutorials, only to figure out that it just wasn't the right tool for the job.  It's much more aimed at making cool pictures and animations, and not so good for constraints like "all walls must be at least 2mm thick".  After getting stumped there and working on other things for a while, some friends turned me on to &lt;a href="http://openscad.org/"&gt;OpenSCAD&lt;/a&gt;.  I'd just like to give a big shout out to &lt;a href="http://www.clifford.at/"&gt;Clifford Wolf&lt;/a&gt;, the author--it's a great tool, and I had my first design in about 1 day of work.  I tweaked it a bit more before I had the prints done, but still, it was &lt;span style="font-weight: bold;"&gt;really&lt;/span&gt; fast to work with.&lt;br /&gt;&lt;br /&gt;Here are a couple of shots of the gate I printed; I got one side in transparent plastic so that I could see what was going on inside, but I got the rest in white because it was much cheaper.  Big thanks to &lt;a href="http://www.blogger.com/shapeways.com"&gt;shapeways.com&lt;/a&gt; for getting me my parts in 9 days, upload-to-delivery, for half the price that I could have gotten it done in the U.S.&lt;br /&gt;&lt;br /&gt;Here's the fully-assembled gate, lacking only the metal axle, a 3/8" D-profile steel shaft.  The shaft's way bigger and heavier than I wanted, but apparently it's hard to find small, light shafts with that profile.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://img.photobucket.com/albums/v687/bbbrain/Prototype%20Parts/2010-02-10092851.jpg" target="_blank"&gt;&lt;img src="http://img.photobucket.com/albums/v687/bbbrain/Prototype%20Parts/th_2010-02-10092851.jpg" alt="Fully-assembled gate" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Here are the 3 parts laid out so that you can see inside.  Those circles and doughnuts on the transparent gate are actually on the far side; they're alignment pegs and sockets, and the white one has them too.  They're so that you can slap a whole stack of these gates together without worrying about binding on the axle.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://img.photobucket.com/albums/v687/bbbrain/Prototype%20Parts/2010-02-10092807.jpg" target="_blank"&gt;&lt;img src="http://img.photobucket.com/albums/v687/bbbrain/Prototype%20Parts/th_2010-02-10092807.jpg" alt="Gate parts laid out flat" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;I've already designed the next generation, about 2/3 the size and with a very different axle that I hope will reduce friction quite a bit.  I also picked up some tungsten carbide bearings to replace the steel ones I started with--doubling gravity may be cheating, but if it works, I'm for it.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-638276448722647658?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/638276448722647658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=638276448722647658' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/638276448722647658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/638276448722647658'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2010/02/3d-printing-rocks.html' title='3D Printing Rocks'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-7028392132591404950</id><published>2009-05-17T11:48:00.000-07:00</published><updated>2009-05-17T12:40:28.748-07:00</updated><title type='text'>1.0 is ready to go!</title><content type='html'>I've now completed the Ball Computer v1.0.  Woot!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ofb.net.nyud.net/%7Euranium/projects/bcd/CPU.html"&gt;Check it out in all its nearly-incomprehensible glory!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Let's have a quick review of the steps to getting it built, so that you can understand how far along I am, and how much further I have to go.  &lt;a href="http://ballcomputer.blogspot.com/2005/02/how-im-doing-it.html"&gt;Here's the old version of the steps to getting it built&lt;/a&gt;.  I'm going to update that, as plans have changed a little and I want to flesh out what I've done a bit more than I did the last time.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Prove it's possible by planning out the basic logic architecture.&lt;/li&gt;&lt;li&gt;Write the tool [BCD] needed for the design [ongoing, but it had to get good enough to use before starting step 3].&lt;/li&gt;&lt;li&gt;Design all the major components of the CPU, such as the ALU and RAM.  Build a state machine that tests each solo component to my satisfaction.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Hook the components together with additional logic to implement the instructions.  Write short tests that validate each individual instruction.&lt;strong&gt;This is what I've just completed.&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add a 3D interface to BCD so as to be able to show off what it might look like, do placement, and figure out how big it's going to be.&lt;/li&gt;&lt;li&gt;Prototype designs for all the physical gates.&lt;/li&gt;&lt;li&gt;Write a decent instruction test suite for real design verification.  [I may see if I can outsource this or adapt an existing suite if there's anything close.  Also, I'll have to improve BCD such that I can run a large suite efficiently via automation.]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Redesign everything for parallel operation [multiple balls in flight at a time, necessary for reasonable speed].  Here the test suite helps validate that nothing broke in the redesign.&lt;/li&gt;&lt;li&gt;Write a time+cost estimate for construction.  The size estimate from the 3D model helps here.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Find someone who wants one and someone to pay for it.&lt;/li&gt;&lt;/ol&gt;I see that I keep adding steps ahead of me, and have managed to put off any physical prototyping a bit longer.  That's a bit disturbing, but I'll keep an eye on it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-7028392132591404950?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/7028392132591404950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=7028392132591404950' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/7028392132591404950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/7028392132591404950'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2009/05/10-is-ready-to-go.html' title='1.0 is ready to go!'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-5362246403309050232</id><published>2009-05-07T21:15:00.000-07:00</published><updated>2009-05-07T21:27:20.663-07:00</updated><title type='text'>Multiply, Mac</title><content type='html'>OK, a bit of debugging and test-code writing later, I now have functional MUL, SMUL, MAC, and SMAC instructions:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;MUL  1111    1   dest   srcB 0 0   srcA&lt;br /&gt;SMUL 1111    1   dest   srcB 1 0   srcA&lt;br /&gt;MAC  1111    1   dest   srcB 0 1   srcA&lt;br /&gt;SMAC 1111    1   dest   srcB 1 1   srcA&lt;br /&gt;&lt;br /&gt;They all write their result's low byte back to the destination register at completion.  This does take time, so it might not be a good idea for MAC/SMAC, but it was simplest to do them all the same way, and this is all going to have to be redone when I parallelize the cpu anyway.&lt;br /&gt;&lt;br /&gt;There's currently no way to get at the top byte of the accumulator; that's going to be accessible through IO space, the one part of the machine as yet unimplemented.  Most of the machinery for it is already there, though; it's sharing most of the memory access logic, state machines, and instruction decode apparatus.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ballcomputer.blogspot.com/2005/02/how-im-doing-it.html"&gt;Step 3&lt;/a&gt; is dangerously close to complete.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-5362246403309050232?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/5362246403309050232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=5362246403309050232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/5362246403309050232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/5362246403309050232'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2009/05/multiply-mac.html' title='Multiply, Mac'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-4508605199836261003</id><published>2009-05-03T21:52:00.001-07:00</published><updated>2009-05-03T22:01:58.082-07:00</updated><title type='text'>Yes, I'm still alive</title><content type='html'>I haven't got any new diagrams to show you, but I have actually done a little work on the machine since my last post oh-so-long ago.&lt;br /&gt;&lt;br /&gt;In November I put in a long-needed randomizer, so that simulated gates get set to a random position at startup if not explicitly set to a value.  This of course shook out a few bugs [generally of the "I completely forgot to hook that gate up" type], and it also pointed out some UI improvements that BCD needed in order to make it clear what was initialized to zero and what was just defaulting to zero.&lt;br /&gt;&lt;br /&gt;Yesterday I dug back in to familiarize myself with the system, then did a bit of cleanup of the &lt;span style=";font-family:courier new;font-size:100%;"  &gt;load immediate&lt;/span&gt; instruction's implementation.&lt;br /&gt;&lt;br /&gt;Today I implemented the 4 multiply instructions [&lt;span style="font-family: courier new;"&gt;mul&lt;/span&gt;/&lt;span style="font-family: courier new;"&gt;mac&lt;/span&gt;/&lt;span style="font-family: courier new;"&gt;smul&lt;/span&gt;/&lt;span style="font-family: courier new;"&gt;smac&lt;/span&gt;], but have yet to begin debugging them.  I wrote a quick test ROM for mul, and it failed, but I'm not going to start debugging tonight.  That seems like a good place to start next time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-4508605199836261003?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/4508605199836261003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=4508605199836261003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/4508605199836261003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/4508605199836261003'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2009/05/yes-im-still-alive.html' title='Yes, I&apos;m still alive'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-3757154305129343470</id><published>2007-01-15T18:15:00.000-08:00</published><updated>2007-01-15T18:35:58.652-08:00</updated><title type='text'>It's alive!</title><content type='html'>As of this weekend, I've implemented:&lt;ul&gt;&lt;li&gt;Load Immediate&lt;/li&gt;&lt;li&gt;A basic disassembler&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Binary_GCD_algorithm"&gt;Euclid's algorithm&lt;/a&gt; in Ball Computer assembly code.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;...and it &lt;strong&gt;&lt;a href="http://img.photobucket.com/albums/v687/bbbrain/Disassembly/Screenshot.png"&gt;ran&lt;/a&gt;!&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Well, not &lt;strong&gt;first&lt;/strong&gt; try, obviously.  Hence the disassembler.  But it ran.&lt;br /&gt;&lt;br /&gt;That's all hand-assembled machine code, BTW, as I haven't yet figured out the assembler that A. wrote for me over a year ago.  I guess I'll have reason to, now; I should write up a reasonable test suite for it, to make sure I haven't missed any corner cases.  First I've got to learn enough &lt;a href="http://www.cs.uu.nl/~daan/parsec.html"&gt;Parsec&lt;/a&gt; to bring it up to date with the changes in machine code since I gave A. the instruction set documentation.&lt;br /&gt;&lt;br /&gt;Still to be completed for Ball Computer 1.0 are the I/O instructions and MUL/MAC [or whatever I decide to implement there].  Currently the only thing off in I/O space is the multiplier, but there may eventually be some actual I/O [for displays, input of parameters, etc.], so I'm going to make it reasonably general.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-3757154305129343470?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/3757154305129343470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=3757154305129343470' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/3757154305129343470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/3757154305129343470'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2007/01/its-alive.html' title='It&apos;s alive!'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-115197779212392225</id><published>2006-07-03T18:46:00.000-07:00</published><updated>2006-07-03T18:57:14.833-07:00</updated><title type='text'>When I say jump...</title><content type='html'>After far more struggling than it should have taken, I've gotten all the jump and branch instructions in.  What took so long was that I realized that I could make these instructions much more efficient than the ones I'd put in already...and that I could optimize many of the earlier ones in similar ways.  However, since lots of the earlier logic is a bit snarled, I ended up breaking everything and having to back out half of my changes.  So the new instructions are fast [and could be a bit faster], and the old instructions are waiting to be optimized.  I'm not sure whether I'll do that yet; it may wait until I'm ready to do BC 2.0 [with parallel calculations instead of the current one-ball-at-a-time serialized ones].&lt;br /&gt;&lt;br /&gt;Down:&lt;ul&gt;&lt;li&gt;addc&lt;/li&gt;&lt;li&gt;addci&lt;/li&gt;&lt;li&gt;add&lt;/li&gt;&lt;li&gt;addi&lt;/li&gt;&lt;li&gt;subc&lt;/li&gt;&lt;li&gt;subci&lt;/li&gt;&lt;li&gt;sub&lt;/li&gt;&lt;li&gt;subi&lt;/li&gt;&lt;li&gt;or&lt;/li&gt;&lt;li&gt;ori&lt;/li&gt;&lt;li&gt;xor&lt;/li&gt;&lt;li&gt;xori&lt;/li&gt;&lt;li&gt;and&lt;/li&gt;&lt;li&gt;andi&lt;/li&gt;&lt;li&gt;sh&lt;/li&gt;&lt;li&gt;shi&lt;/li&gt;&lt;li&gt;lbr&lt;/li&gt;&lt;li&gt;lba&lt;/li&gt;&lt;li&gt;sbr&lt;/li&gt;&lt;li&gt;sba&lt;/li&gt;&lt;li&gt;b&lt;/li&gt;&lt;li&gt;bc&lt;/li&gt;&lt;li&gt;bal&lt;/li&gt;&lt;li&gt;j&lt;/li&gt;&lt;li&gt;jc&lt;/li&gt;&lt;li&gt;jal&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;To Go:&lt;ul&gt;&lt;li&gt;lsbr&lt;/li&gt;&lt;li&gt;lsba&lt;/li&gt;&lt;li&gt;ssbr&lt;/li&gt;&lt;li&gt;ssba&lt;/li&gt;&lt;li&gt;li&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The multiplier will be accessed via instructions such as [ls]sb[ar]: load/store special byte to [immediate address/register address].  It's essentially off in IO space, or in a coprocessor, if you will.&lt;br /&gt;&lt;br /&gt;Hmm...I may get rid of the 'b' in all those load+store instructions; it's a bit silly on an 8-bit machine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-115197779212392225?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/115197779212392225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=115197779212392225' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/115197779212392225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/115197779212392225'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2006/07/when-i-say-jump.html' title='When I say jump...'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-115128103002893978</id><published>2006-06-25T17:12:00.000-07:00</published><updated>2006-06-25T17:17:10.040-07:00</updated><title type='text'>Memory</title><content type='html'>I've now implemented and tested the 4 memory-access instructions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;lba - Load a byte from an immediate 8-bit address&lt;/li&gt;&lt;br /&gt;&lt;li&gt;sba - Store a byte to an immediate 8-bit address&lt;/li&gt;&lt;br /&gt;&lt;li&gt;lbr - Load a byte from an address that's the sum of the contents of a register and a 5-bit offset&lt;/li&gt;&lt;br /&gt;&lt;li&gt;sbr - Store a byte to an address that's the sum of the contents of a register and a 5-bit offset&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The offset is currently unsigned, but I can see that it might be more useful as a signed value.  I could easily sign-extend it in the memory address unit, but I haven't yet decided whether I should.  There remains the question of whether it will ever get used at all, of course.  Will programs that fit in 256 instructions actually feel the need for stack-pointer-relative local variables?  We shall see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-115128103002893978?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/115128103002893978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=115128103002893978' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/115128103002893978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/115128103002893978'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2006/06/memory.html' title='Memory'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-115008589446669891</id><published>2006-06-11T21:14:00.000-07:00</published><updated>2006-06-11T21:33:51.256-07:00</updated><title type='text'>Scripting tools</title><content type='html'>I've not done any more logic design since my last post, but my tools have gotten a great upgrade.  My tests are now completely self-verifying, and can be scripted [to a certain extent].  Bcd can now, under scripted control: load a design file, create a simulator, set values in it, run it for some number of cycles, and check the results.  Script files can include other script files, so I have one master test that runs each of my opcode tests in sequence without having to reload the design.  This is a big time-saver, as loading the CPU design takes about 30 seconds, but creating, running, and cleaning up the simulator takes only about a second.&lt;br /&gt;&lt;br /&gt;I've also done most of the markup I mentioned last post, and therefore can set and test values by byte [by word for the ROM] instead of bit-by-bit.  The values also show up in the GUI at the top level, so I don't have to drill down 3 levels deep to read out the registers.  &lt;a href=http://img.photobucket.com/albums/v687/bbbrain/Valueref%20Demo/CPU.png&gt;Here's what the ROM looks like.&lt;/a&gt;  It's really got 256 words, but if I show only the first 32, it's easier to read.  Plus I haven't had any need to show more than the first word so far, but I have high hopes of needing more some day ;'&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-115008589446669891?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/115008589446669891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=115008589446669891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/115008589446669891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/115008589446669891'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2006/06/scripting-tools.html' title='Scripting tools'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-114885472458774851</id><published>2006-05-28T15:17:00.000-07:00</published><updated>2006-05-28T15:31:15.633-07:00</updated><title type='text'>Shifting the night away</title><content type='html'>After making a small change which could easily have killed all the instructions I'd gotten working so far [but didn't], I now have the shift instructions [immediate or register shift amount, left or right, logical or arithmetic] working.&lt;br /&gt;&lt;br /&gt;I'm not sure which instructions I'll work on next.  There's a bunch of design work that's going to have to be done for either the memory or PC stuff, and I want to see if I can possibly reuse the ALU state machines.&lt;br /&gt;&lt;br /&gt;However, before I do that I want to add to the code that lets me load in tests and helps me visualize data within the simulator.  Currently I have to enter tests bit-by-bit, and I'd like to be able to simplify my input files such that I can just input bytes.  Similarly, I need to mark up my design files a bit in order to see more of what's going on inside the simulator.  The code for that part's already in, but I should add a bunch of annotations to the XML source of the design to make use of it.&lt;br /&gt;&lt;br /&gt;Further down the line, I'll be building on that to have self-verifying tests.  I'm not sure I'll get that far before getting back to logic design, though.&lt;br /&gt;&lt;br /&gt;Down:&lt;ul&gt;&lt;li&gt;addc&lt;/li&gt;&lt;li&gt;addci&lt;/li&gt;&lt;li&gt;add&lt;/li&gt;&lt;li&gt;addi&lt;/li&gt;&lt;li&gt;subc&lt;/li&gt;&lt;li&gt;subci&lt;/li&gt;&lt;li&gt;sub&lt;/li&gt;&lt;li&gt;subi&lt;/li&gt;&lt;li&gt;or&lt;/li&gt;&lt;li&gt;ori&lt;/li&gt;&lt;li&gt;xor&lt;/li&gt;&lt;li&gt;xori&lt;/li&gt;&lt;li&gt;and&lt;/li&gt;&lt;li&gt;andi&lt;/li&gt;&lt;li&gt;sh&lt;/li&gt;&lt;li&gt;shi&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;To Go:&lt;ul&gt;&lt;li&gt;lbr&lt;/li&gt;&lt;li&gt;lba&lt;/li&gt;&lt;li&gt;lsbr&lt;/li&gt;&lt;li&gt;lsba&lt;/li&gt;&lt;li&gt;sbr&lt;/li&gt;&lt;li&gt;sba&lt;/li&gt;&lt;li&gt;ssbr&lt;/li&gt;&lt;li&gt;ssba&lt;/li&gt;&lt;li&gt;b&lt;/li&gt;&lt;li&gt;bc&lt;/li&gt;&lt;li&gt;bal&lt;/li&gt;&lt;li&gt;jal&lt;/li&gt;&lt;li&gt;jmp&lt;/li&gt;&lt;li&gt;li&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-114885472458774851?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/114885472458774851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=114885472458774851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/114885472458774851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/114885472458774851'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2006/05/shifting-night-away.html' title='Shifting the night away'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-114404665254148469</id><published>2006-04-02T23:42:00.000-07:00</published><updated>2006-04-02T23:53:44.856-07:00</updated><title type='text'>I'm back again.</title><content type='html'>After another long hiatus, and moving back from Norway, I've started work again.&lt;br /&gt;&lt;br /&gt;Today I got all of the other ALU instructions working, and put in a first pass at the shifter logic.  I've found one bug in it so far, and I don't think I'm going to get through it tonight.&lt;br /&gt;&lt;br /&gt;Down:&lt;ul&gt;&lt;li&gt;addc&lt;/li&gt;&lt;li&gt;addci&lt;/li&gt;&lt;li&gt;add&lt;/li&gt;&lt;li&gt;addi&lt;/li&gt;&lt;li&gt;subc&lt;/li&gt;&lt;li&gt;subci&lt;/li&gt;&lt;li&gt;sub&lt;/li&gt;&lt;li&gt;subi&lt;/li&gt;&lt;li&gt;or&lt;/li&gt;&lt;li&gt;ori&lt;/li&gt;&lt;li&gt;xor&lt;/li&gt;&lt;li&gt;xori&lt;/li&gt;&lt;li&gt;and&lt;/li&gt;&lt;li&gt;andi&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;To Go:&lt;ul&gt;&lt;li&gt;sh&lt;/li&gt;&lt;li&gt;shi&lt;/li&gt;&lt;li&gt;lbr&lt;/li&gt;&lt;li&gt;lba&lt;/li&gt;&lt;li&gt;lsbr&lt;/li&gt;&lt;li&gt;lsba&lt;/li&gt;&lt;li&gt;sbr&lt;/li&gt;&lt;li&gt;sba&lt;/li&gt;&lt;li&gt;ssbr&lt;/li&gt;&lt;li&gt;ssba&lt;/li&gt;&lt;li&gt;b&lt;/li&gt;&lt;li&gt;bc&lt;/li&gt;&lt;li&gt;bal&lt;/li&gt;&lt;li&gt;jal&lt;/li&gt;&lt;li&gt;jmp&lt;/li&gt;&lt;li&gt;li&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-114404665254148469?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/114404665254148469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=114404665254148469' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/114404665254148469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/114404665254148469'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2006/04/im-back-again.html' title='I&apos;m back again.'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-113674927602722630</id><published>2006-01-08T11:36:00.000-08:00</published><updated>2006-01-08T11:48:11.970-08:00</updated><title type='text'>I'm back!</title><content type='html'>After spending a lot of time adding data-visualization tools to BCD, then moving to Norway and dropping the whole project for months, I've finally started work again.  It generally went something like this: try the instruction, and see that it doesn't work.  Find the logic error, but while fixing it, find that BCD malfunctions.  Chase that misbehavior, but find that in adding debugging code, you've managed to invoke some little-used code path that turns out to have a crashing bug in it.&lt;br /&gt;&lt;br /&gt;Ugh.&lt;br /&gt;&lt;br /&gt;At any rate, I managed to fix my way back up that stack far enough to get all the instructions I've tried working [at least for trivial tests], and that feels like a good place to stop for the night.  &lt;br /&gt;&lt;br /&gt;Down:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;addi&lt;/li&gt;&lt;li&gt;subi&lt;/li&gt;&lt;li&gt;addci&lt;/li&gt;&lt;li&gt;subci&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;To Go:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;lots&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-113674927602722630?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/113674927602722630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=113674927602722630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/113674927602722630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/113674927602722630'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2006/01/im-back.html' title='I&apos;m back!'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-113013507590537586</id><published>2005-10-23T23:17:00.000-07:00</published><updated>2005-10-23T23:25:48.683-07:00</updated><title type='text'>First light!</title><content type='html'>Two weeks ago, on the evening of Friday, October seventh, the Ball Computer executed its first full instruction [an "addi"].  Whee!  That includes reading the program counter, fetching the instruction from ROM, reading a value from a register, adding a constant to it, dealing with the CCR, doing the register writeback, incrementing the PC, and getting ready to run the next instruction.&lt;br /&gt;&lt;br /&gt;I was quite pleased to find that it only took a few hours of debugging to get it working, and that the errors were pretty minor: one place where I'd swapped bit 12 and 14 of the opcode, and a number of connections that I'd just forgotten to hook up [all but one of them just the ball return for junk outputs].&lt;br /&gt;&lt;br /&gt;I'm now taking a break from debugging ALU ops in order to improve visibility into values within bcd.  This should make it much faster and easier to debug the rest of the opcodes.&lt;br /&gt;&lt;br /&gt;Incidentally, the instruction took a whopping 1600 gate delays [and therefore 1600 wire delays] to execute.  If each of those delays is on the order of 0.5 seconds in real hardware, we're talking about 25 minutes per instruction!  However, I'm pretty sure I can improve on that by a factor of 10 with fast gates and the parallelization of processing that I've got planned for version 2.0 of the CPU.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-113013507590537586?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/113013507590537586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=113013507590537586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/113013507590537586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/113013507590537586'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/10/first-light.html' title='First light!'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-112844372471289774</id><published>2005-10-04T09:25:00.000-07:00</published><updated>2005-10-04T09:51:32.930-07:00</updated><title type='text'>Back on the horse</title><content type='html'>What with my vacation, far too many weddings, work, and general busyness, I haven't managed a single post in just over 2 months.  Nor have I managed to do any work and just not post about it.  However, that's all over now...for a bit.&lt;br /&gt;&lt;br /&gt;Sunday night I got back to work on the cpu design, and am now able to report great progress.  Why?  Because I was clever enough not to test what I had designed!  Had I in fact run a simulation, I would have found that none of it worked, stayed up until all hours trying to fix it, and perhaps ended the night dissatisfied and with it all still broken.  Not having done any testing, I can report that I've made lots of progress, and that it merely needs a bit of debugging.  Isn't that great?&lt;br /&gt;&lt;br /&gt;Anyway, what I got in on Sunday is the rest of the ALU operation state machines. That means absolutely everything needed in order to execute any type of ADD, SUB, AND, OR, or XOR instruction [immediate or register arguments, carry-in from CCR or not, writeback to a register, CCR bits CVZS set as appropriate afterwards, increment the PC and turn off the stove when you're done].  Whee!  Actual instructions, and they might even work!&lt;br /&gt;&lt;br /&gt;Anyway, &lt;a href="http://img.photobucket.com/albums/v687/bbbrain/CPU%20Teasers/CPU-small.png"&gt;here is an image of the top-level design&lt;/a&gt;, shrunk down to the point where you really can't see anything. For those of you with more time on your hands, &lt;a href="http://img.photobucket.com/albums/v687/bbbrain/CPU%20Teasers/CPU-big.png"&gt;here is a much bigger image of same&lt;/a&gt;, blown up to the point where you can just about read my notes if you squint.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-112844372471289774?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/112844372471289774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=112844372471289774' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/112844372471289774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/112844372471289774'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/10/back-on-horse.html' title='Back on the horse'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-112287589167062285</id><published>2005-07-31T22:56:00.000-07:00</published><updated>2005-07-31T22:58:11.676-07:00</updated><title type='text'>I's quietly proud.</title><content type='html'>As of this week, I have acquired my first minion.  My friend A. has begun to write an assembler for the Ball Computer, in Haskell.  An instruction-set simulator will follow shortly thereafter.&lt;br /&gt;&lt;br /&gt;Mua-ha-ha-ha!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-112287589167062285?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/112287589167062285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=112287589167062285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/112287589167062285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/112287589167062285'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/07/is-quietly-proud.html' title='I&apos;s quietly proud.'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-112166941060519771</id><published>2005-07-17T23:44:00.000-07:00</published><updated>2005-07-17T23:57:03.546-07:00</updated><title type='text'>Teaser--the first view of the CPU</title><content type='html'>After much preparation, I've finally started to assemble the &lt;a href="http://img.photobucket.com/albums/v687/bbbrain/CPU%20Teasers/CPU.png"&gt;CPU&lt;/a&gt;.  Sorry for the teaser, but this diagram is 1) completely nonfunctional; it'd just start dropping balls on the floor shortly after starting up, and 2) not an imagemap.  Given that it doesn't work anyway, and most of its components are already documented, I didn't bother setting up all the links for each of the subcomponent definitions.&lt;br /&gt;&lt;br /&gt;What I've done here is mainly just plunk down the components I've designed so far and make the obvious connections between them.  The less-obvious connections, which is to say those which will vary based on the particular instruction, are still missing.  As I put in the instruction decode logic, I'll be able to add and test a few instructions at a time until the &lt;a href="http://img.photobucket.com/albums/v687/bbbrain/CPU%20Teasers/CPU.png"&gt;CPU&lt;/a&gt; is complete.&lt;br /&gt;&lt;br /&gt;As I bolt things together, I've been finding small changes that need to be made in some of the components.  In some cases it's as simple as deleting functionality that's going to be taken care of more efficiently elsewhere, but generally it's just rearranging ports such that more internal information is exposed to the enclosing scope.  Many of the components toss all setup balls out a single "junk" output when they're done with them, which throws away such information as "what values were input?" and "was that the last of the setup balls?".  These turn out to be quite handy for the controlling state machines, who then don't need to waste time and gates maintaining the same data themselves.&lt;br /&gt;&lt;br /&gt;Incidentally, I expect that I'll do the branch and jump instructions first [unconditional first, then the conditional ones], as it's pretty hard to test a CPU if it doesn't have a working program counter, and the PC design is fairly closely tied to the branch and jump logic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-112166941060519771?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/112166941060519771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=112166941060519771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/112166941060519771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/112166941060519771'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/07/teaser-first-view-of-cpu.html' title='Teaser--the first view of the CPU'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-112097329685358273</id><published>2005-07-09T22:17:00.000-07:00</published><updated>2005-07-09T22:31:05.016-07:00</updated><title type='text'>The Shifter</title><content type='html'>OK, here's the latest version of the &lt;a href="http://img.photobucket.com/albums/v687/bbbrain/Shifter/Shifter.png"&gt;shifter&lt;/a&gt;.  I've altered its carry-out behavior such that Cout holds the value of the last ball shifted off the end.  This way it can be used for single-bit tests.  It's going to be much faster than an ALU operation, so that might come in handy.&lt;br /&gt;&lt;br /&gt;This shifter is basically set-up-and-flow-through.  Once you've input the shift amount, shift direction, and whether the shift is arithmetic or logical, the input balls just go straight to the appropriate outputs.  Balls shifted off the end get rotated all the way around, set to zero or one as appropriate to any needed sign extension, and inserted back into the byte.  The only awkwardness is in the need for one extra ball input after the first bit [the MSB] of the operand; I use that to set up the sign-extension logic.&lt;br /&gt;&lt;br /&gt;I've also made some modifications to the ALU, but haven't yet posted the new version.  They're not very big mods: I've added zero-detection [which may eventually get pulled out] and changed the interface a bit.  Now instead of having to pour balls into a port until being told to move on to the next phase of operation [several times], you just put one ball into each port until the last one, which always takes 11 for result readout [8 data bits, V, Z, and C].&lt;br /&gt;&lt;br /&gt;Now I really do just have to put it all together.  Yow!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-112097329685358273?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/112097329685358273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=112097329685358273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/112097329685358273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/112097329685358273'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/07/shifter.html' title='The Shifter'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111984069265241513</id><published>2005-06-26T19:37:00.000-07:00</published><updated>2005-06-26T19:51:32.653-07:00</updated><title type='text'>New improved ALU</title><content type='html'>Ever have to go back to the very first code you'd ever written in a language...code that you'd optimized quite a bit...code that you hadn't commented enough...and try to add in a tiny new feature?&lt;br /&gt;&lt;br /&gt;Sucks, don't it?&lt;br /&gt;&lt;br /&gt;Well, that's just what I've done here.  The ALU was my first major design using BCD.  It contains the most complicated logic of any design, and I stupidly optimized the heck out of it.  The design is quite contorted in various places...and I wasn't even that good at ball-logic-based design, so I ended up throwing away some of the benefits of the optimization through odd choices in other parts of the design.&lt;br /&gt;&lt;br /&gt;However, it works, so I'm not messing with it too much.  I've removed a couple of redundant gates, but otherwise all I did was add support for one new opcode: SubC.  This is the subtract-with-carry-in that you'd use to do a higher-byte subtraction, where the carry-in is from the condition code register.  On the bottom byte, you force it to be one [since we're doing twos-complement math].&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ballcomputer.blogspot.com/2005/06/image-alu-with-subc-test.html"&gt;Here it is&lt;/a&gt;, in all its twisted glory.  You have my apologies about the size of the images [especially that one page deeper than the above link], but if I make them any smaller, there's no way to read the details.  I recommend using a web browser that allows you to zoom in and out at will [I use Opera].&lt;br /&gt;&lt;br /&gt;Next up, I've got to fix the overflow behavior in the shifter.  Huh; I just went to make the word "shifter" a link, and realized that I've never put up any images of the two shifters I've designed.  Well, perhaps I'll use them as filler if I'm too busy to create the final version.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111984069265241513?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/111984069265241513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=111984069265241513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111984069265241513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111984069265241513'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/06/new-improved-alu.html' title='New improved ALU'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111983983852350727</id><published>2005-06-26T19:35:00.000-07:00</published><updated>2005-06-26T19:37:18.526-07:00</updated><title type='text'>[Image] ALU with SubC test</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/ALU%20with%20SubC/Aluuser.png usemap="#Aluuser_1119838288"/&gt;&lt;br /&gt;&lt;map name="Aluuser_1119838288"&gt;&lt;br /&gt; &lt;area shape=rect coords="89,631,885,1164" href="http://ballcomputer.blogspot.com/2005/06/image-alu-with-subc.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="278,427,321,457" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/1to4.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="608,201,749,244" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/1to8triggered.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="526,311,655,348" href="http://ballcomputer.blogspot.com/2005/03/image-1-to-16.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="705,368,834,405" href="http://ballcomputer.blogspot.com/2005/03/image-1-to-16.html"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111983983852350727?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111983983852350727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111983983852350727'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/06/image-alu-with-subc-test.html' title='[Image] ALU with SubC test'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111983969365161570</id><published>2005-06-26T19:30:00.000-07:00</published><updated>2005-06-26T19:34:53.656-07:00</updated><title type='text'>[Image] ALU with SubC</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/ALU%20with%20SubC/StatefulAdderTest.png usemap="#StatefulAdderTest_1119838438"/&gt;&lt;br /&gt;&lt;map name="StatefulAdderTest_1119838438"&gt;&lt;br /&gt; &lt;area shape=rect coords="2312,1169,3345,1683" href="http://ballcomputer.blogspot.com/2005/03/image-8-bit-adder.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1840,83,1921,138" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/1to4.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="3069,1056,3309,1125" href="http://ballcomputer.blogspot.com/2005/03/image-1-to-16.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1407,2037,1647,2106" href="http://ballcomputer.blogspot.com/2005/03/image-1-to-16.html"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111983969365161570?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111983969365161570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111983969365161570'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/06/image-alu-with-subc.html' title='[Image] ALU with SubC'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111882089689672899</id><published>2005-06-15T00:28:00.000-07:00</published><updated>2005-06-16T22:31:30.226-07:00</updated><title type='text'>The Signed Multiplier</title><content type='html'>Here's a &lt;a href="http://ballcomputer.blogspot.com/2005/06/image-signed-multiplier-test.html"&gt;test&lt;/a&gt; of a &lt;a href="http://ballcomputer.blogspot.com/2005/06/image-signed-multiplier.html"&gt;multiplier&lt;/a&gt; that can handle both signed and unsigned inputs, &lt;a href="http://ballcomputer.blogspot.com/2005/04/multiplier.html"&gt;as promised&lt;/a&gt;.  As I'd expected, there was an easier and faster way to do it than sign-extending the inputs.  Since the sign extension would have produced either an 8-bit -1 or an 8-bit zero, if each high bit is nonzero I just have to multiply the other byte by -1 [which is as easy as a complement-and-add-one] and shift it by 8 bits [which is trivially done in the routing].&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111882089689672899?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/111882089689672899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=111882089689672899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111882089689672899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111882089689672899'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/06/signed-multiplier.html' title='The Signed Multiplier'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111882027354860511</id><published>2005-06-15T00:17:00.000-07:00</published><updated>2005-06-15T00:24:33.550-07:00</updated><title type='text'>[Image] Signed Multiplier Test</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Signed%20Multiplier%20Test/MultiplierTest.png usemap="#MultiplierTest_1118819631"/&gt;&lt;br /&gt;&lt;map name="MultiplierTest_1118819631"&gt;&lt;br /&gt; &lt;area shape=rect coords="26,526,821,861" href="http://ballcomputer.blogspot.com/2005/06/image-signed-multiplier.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="384,319,451,367" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="171,270,238,318" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="640,446,743,475" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="431,159,544,194" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8triggered.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111882027354860511?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111882027354860511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111882027354860511'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/06/image-signed-multiplier-test.html' title='[Image] Signed Multiplier Test'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111881972195083975</id><published>2005-06-15T00:07:00.000-07:00</published><updated>2005-06-15T00:28:04.466-07:00</updated><title type='text'>[Image] Signed Multiplier</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Signed%20Multiplier%20Test/Multiplier.png usemap="#Multiplier_1118819630"/&gt;&lt;br /&gt;&lt;map name="Multiplier_1118819630"&gt;&lt;br /&gt; &lt;area shape=rect coords="1792,908,2023,1045" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/Accumulator8.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1785,606,1852,654" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1695,606,1762,654" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1605,606,1672,654" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1515,606,1582,654" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1425,606,1492,654" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1336,606,1403,654" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1246,606,1313,654" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1156,606,1223,654" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="989,1109,1220,1246" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/Accumulator8.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1445,225,1558,260" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8triggered.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="968,408,1042,459" href="http://img.photobucket.com/albums/v687/bbbrain/Signed%20Multiplier%20Test/1to8withtwooverflows.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1066,605,1140,656" href="http://img.photobucket.com/albums/v687/bbbrain/Signed%20Multiplier%20Test/1to8withtwooverflows.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1752,171,1823,195" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to4triggered.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111881972195083975?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111881972195083975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111881972195083975'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/06/image-signed-multiplier.html' title='[Image] Signed Multiplier'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111730707309165113</id><published>2005-05-28T11:49:00.000-07:00</published><updated>2005-05-28T12:04:48.793-07:00</updated><title type='text'>You thought the ROM was big?</title><content type='html'>You thought the &lt;a href="http://ballcomputer.blogspot.com/2005/03/image-rom-cell-256x16.html"&gt;ROM&lt;/a&gt; was big?  Meet the &lt;a href="http://ballcomputer.blogspot.com/2005/05/image-ram-test.html"&gt;RAM&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;That's actually a link to the state machine I used to test &lt;a href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-256x8.html"&gt;the RAM itself&lt;/a&gt;, so that you can see what its interface is like.&lt;br /&gt;&lt;br /&gt;Note that I'm using a ROM to hold a sequence of simple instructions [here just addresses and data], just as I did in the &lt;a href="http://ballcomputer.blogspot.com/2005/04/image-pcu-test.html"&gt;PCU test&lt;/a&gt;.  While my designs are getting bigger and more complicated, I'm able to leverage the components I already trust in order to test the new ones.&lt;br /&gt;&lt;br /&gt;With the creation of this component, I now have [in a half-assed way] all the parts that one would need to make a CPU.  All the rest is pretty much glue logic and some instruction-decode state machines.  However, most of the components need a little tweaking before I can really put them all together.  For example, the ALU doesn't have a carry-in signal yet, the multiplier doesn't give 16-bit results for signed inputs, the shifter doesn't produce the precise overflow behavior that I want, and they've got a variety of different control interfaces.&lt;br /&gt;&lt;br /&gt;My plan for the rest of &lt;a href="http://ballcomputer.blogspot.com/2005/02/how-im-doing-it.html"&gt;Step 3&lt;/a&gt; is:&lt;ul&gt;&lt;li&gt;Improve bcd's simulator interface, to make testing easier and faster;&lt;/li&gt;&lt;li&gt;Decide on a standard control paradigm for all components;&lt;/li&gt;&lt;li&gt;Go through all the components, one by one, and make the necessary improvements;&lt;/li&gt;&lt;li&gt;[Finally!] put it all together and proceed to Step 4: write+run test code for the complete CPU.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111730707309165113?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/111730707309165113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=111730707309165113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111730707309165113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111730707309165113'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/05/you-thought-rom-was-big.html' title='You thought the ROM was big?'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111730609129122620</id><published>2005-05-28T11:43:00.000-07:00</published><updated>2005-05-28T11:48:11.293-07:00</updated><title type='text'>[Image] RAM test</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMtest.png usemap="#RAMtest_1117304986"/&gt;&lt;br /&gt;&lt;map name="RAMtest_1117304986"&gt;&lt;br /&gt; &lt;area shape=rect coords="24,873,534,1143" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-256x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="45,395,519,581" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="181,94,385,130" href="http://ballcomputer.blogspot.com/2005/05/image-1-to-32.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="294,750,357,779" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/1to8.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111730609129122620?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111730609129122620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111730609129122620'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/05/image-ram-test.html' title='[Image] RAM test'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111730583496181328</id><published>2005-05-28T11:41:00.000-07:00</published><updated>2005-05-28T11:43:54.963-07:00</updated><title type='text'>[Image] RAM block 2 256x8</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMblock2256x8.png usemap="#RAMblock2256x8_1117305038"/&gt;&lt;br /&gt;&lt;map name="RAMblock2256x8_1117305038"&gt;&lt;br /&gt; &lt;area shape=rect coords="1547,590,1643,689" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1445,590,1541,689" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1238,589,1334,688" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1341,589,1437,688" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1135,589,1231,688" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1032,589,1128,688" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="928,589,1024,688" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="827,589,923,688" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="725,589,821,688" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="622,588,718,687" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="518,588,614,687" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="415,588,511,687" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="312,588,408,687" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="209,588,305,687" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="105,588,201,687" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="3,588,99,687" href="http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111730583496181328?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111730583496181328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111730583496181328'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-256x8.html' title='[Image] RAM block 2 256x8'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111730570841310348</id><published>2005-05-28T11:38:00.000-07:00</published><updated>2005-05-28T11:41:48.416-07:00</updated><title type='text'>[Image] RAM block 2 16x8</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMblock216x8.png usemap="#RAMblock216x8_1117305060"/&gt;&lt;br /&gt;&lt;map name="RAMblock216x8_1117305060"&gt;&lt;br /&gt; &lt;area shape=rect coords="467,190,522,229" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="469,246,524,285" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="467,300,522,339" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="467,356,522,395" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="466,410,521,449" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="466,463,521,502" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="467,513,522,552" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="467,563,522,602" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="469,976,524,1015" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="468,926,523,965" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="470,874,525,913" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="467,617,522,656" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="467,673,522,712" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="466,724,521,763" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="468,771,523,810" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="469,822,524,861" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/RAMcell2.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111730570841310348?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111730570841310348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111730570841310348'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/05/image-ram-block-2-16x8.html' title='[Image] RAM block 2 16x8'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111730551323446391</id><published>2005-05-28T11:36:00.000-07:00</published><updated>2005-05-28T11:38:33.240-07:00</updated><title type='text'>[Image] 1 to 32</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/1to32.png usemap="#1to32_1117304986"/&gt;&lt;br /&gt;&lt;map name="1to32_1117304986"&gt;&lt;br /&gt; &lt;area shape=rect coords="893,152,956,181" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/1to8.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="722,98,785,127" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/1to8.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1218,243,1281,272" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/1to8.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1055,190,1118,219" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/1to8.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="973,24,1007,48" href="http://img.photobucket.com/albums/v687/bbbrain/RAM%20Test/1to4.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111730551323446391?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111730551323446391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111730551323446391'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/05/image-1-to-32.html' title='[Image] 1 to 32'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111586730447867067</id><published>2005-05-11T20:04:00.000-07:00</published><updated>2005-05-28T11:49:31.950-07:00</updated><title type='text'>No new diagrams this week.</title><content type='html'>Nor for the next couple of weeks, I expect.  I've been improving bcd [my CAD program; it stands for Ball Computer Designer] instead of using it.&lt;br /&gt;&lt;br /&gt;When I was working on the &lt;a href="http://ballcomputer.blogspot.com/2005/03/image-rom-cell-256x16.html"&gt;huge ROM&lt;/a&gt; diagram [with all its thousand+ connections], I got so sick of connecting ports by hand that I ended up doing much of the work in the raw XML files in which I store my database.  What with all the vim macros, search-and-replace regexps, and copy-and-pasting, I'm not sure I actually saved any time.  Still, I think I made fewer mistakes that way than if I'd used bcd, and I had to do far less mousing.&lt;br /&gt;&lt;br /&gt;It occurred to me that much of the work in such a diagram is quite mechanical, and could be done automatically by a properly-trained tool.  Thus I've now added a connection-extrapolation feature to bcd.  I make and select two connections, and it guesses where the next [and subsequent] connections should go.  I'll probably do the same thing for ports and cell instances before I get back to work, as my next diagram will probably be the RAM.  Think: like the ROM, but with half again as many components and connections.  Whee!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111586730447867067?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/111586730447867067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=111586730447867067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111586730447867067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111586730447867067'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/05/no-new-diagrams-this-week.html' title='No new diagrams this week.'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111449759696627230</id><published>2005-04-25T23:25:00.000-07:00</published><updated>2005-04-25T23:39:56.966-07:00</updated><title type='text'>The Multiplier</title><content type='html'>Having looked at just how large the &lt;a href="http://ballcomputer.blogspot.com/2005/03/biggest-rom-ever-built.html"&gt;ROM&lt;/a&gt; [and, by implication, the forthcoming RAM] are going to be, suddenly another 350 gates for a dedicated multiplier don't seem so bad.  Of course, &lt;a href="http://ballcomputer.blogspot.com/2005/04/image-multiplier.html"&gt;this one&lt;/a&gt; only works for unsigned numbers, but it's not too hard to add in the hardware for signed multiplication as well.  I'll either do that by sign-extending the inputs or by something slightly more complex, but I don't quite have time to manage it tonight.&lt;br /&gt;&lt;br /&gt;You will note [and I use the word &lt;i&gt;will&lt;/i&gt; rather speculatively, I realize] that the multiplier is a bit more complex than it needs to be.  The accumulator is obvious and minimal, but the circuits that feed into it are actually optimized for speed.  I could just have done the simple 64-ball-paths crossbar of the 8 bits of each input.  That would always have completed its calculations in a predictable amount of time [(64 balls) + (arg input, reset, and readout)], but it would often have spent lots of its time multiplying zero by zero.  The design I decided to use instead recognizes zeroes in Op0 and skips all processing [including state machine reset] on those bits.  Of course, the state machines used to do that recognition aren't free.  The processing time is (10 balls per bit) + (the other stuff).  That gives us a worst case [multiplying by -1] of (80 balls) + (all the other stuff), but that'll be quite rare.  It's made rarer still by the fact that any constant -1 multiplications can just be replaced by complements, which should be significantly faster.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111449759696627230?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/111449759696627230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=111449759696627230' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111449759696627230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111449759696627230'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/04/multiplier.html' title='The Multiplier'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111449672289956541</id><published>2005-04-25T23:23:00.000-07:00</published><updated>2005-04-25T23:25:22.900-07:00</updated><title type='text'>[Image] Multiplier Test</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/MultiplierTest.png usemap="#MultiplierTest_1114495892"/&gt;&lt;br /&gt;&lt;map name="MultiplierTest_1114495892"&gt;&lt;br /&gt; &lt;area shape=rect coords="44,878,1370,1322" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/Multiplier.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="641,533,753,594" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="286,451,398,512" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1067,745,1239,794" href="http://ballcomputer.blogspot.com/2005/04/image-1-to-16.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="720,274,839,314" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to4triggered.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111449672289956541?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111449672289956541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111449672289956541'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/04/image-multiplier-test.html' title='[Image] Multiplier Test'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111449660805254394</id><published>2005-04-25T23:21:00.000-07:00</published><updated>2005-04-25T23:23:28.056-07:00</updated><title type='text'>[Image] Multiplier</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/Multiplier.png usemap="#Multiplier_1114495928"/&gt;&lt;br /&gt;&lt;map name="Multiplier_1114495928"&gt;&lt;br /&gt; &lt;area shape=rect coords="1992,704,2249,856" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/Accumulator8.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1983,368,2058,408" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1883,368,1958,408" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1783,368,1858,408" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1683,368,1758,408" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1583,368,1658,408" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1484,368,1559,408" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1384,368,1459,408" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1284,368,1359,408" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8withoverflow.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1099,928,1356,1080" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/Accumulator8.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1600,140,1726,179" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8triggered.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111449660805254394?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111449660805254394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111449660805254394'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/04/image-multiplier.html' title='[Image] Multiplier'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111449644907180061</id><published>2005-04-25T23:09:00.000-07:00</published><updated>2005-04-25T23:20:49.073-07:00</updated><title type='text'>[Image] 1 to 16</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to16.png usemap="#1to16_1114495892"/&gt;&lt;br /&gt;&lt;map name="1to16_1114495892"&gt;&lt;br /&gt; &lt;area shape=rect coords="872,183,977,232" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="551,115,656,164" href="http://img.photobucket.com/albums/v687/bbbrain/Multiplier%20Test/1to8.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111449644907180061?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111449644907180061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111449644907180061'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/04/image-1-to-16.html' title='[Image] 1 to 16'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111319853593703021</id><published>2005-04-10T22:37:00.000-07:00</published><updated>2005-04-10T23:11:59.893-07:00</updated><title type='text'>The Program Counter Unit</title><content type='html'>If the ALU is the heart of the CPU, then the &lt;a href="http://ballcomputer.blogspot.com/2005/04/image-pcu-test.html"&gt;PCU&lt;/a&gt; is surely the bit that nags you to get off your ass and do things.  Wait--no--maybe it's the brain.  Yeah, that's probably it.&lt;br /&gt;&lt;br /&gt;It's a bit awkward for me to try to abstract out a monolithic PCU block for testing.  At least in my design, the PCU is quite closely tied in to the master state machine that controls the entire CPU.   What I've ended with up here is therefore not a box labelled "PCU" that you just hook up to your ROM, RAM, ALU, etc.  It's a set of pieces:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The &lt;a href="http://img.photobucket.com/albums/v687/bbbrain/PCU%20Test/PCUEchoTop.png"&gt;readable register&lt;/a&gt; that's used to index into the &lt;a href="http://ballcomputer.blogspot.com/2005/03/image-rom-cell-256x16.html"&gt;instruction ROM&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;The &lt;a href="http://img.photobucket.com/albums/v687/bbbrain/PCU%20Test/PCUEchoBase.png"&gt; writable other half&lt;/a&gt; to that register, linked to it with &lt;a href="http://ballcomputer.blogspot.com/2005/02/how-to-get-state-uphill.html"&gt;pulleys&lt;/a&gt; in order to carry the state uphill; and&lt;/li&gt;&lt;li&gt;The &lt;a href="http://img.photobucket.com/albums/v687/bbbrain/PCU%20Test/PCUNextPC.png"&gt;Next PC register&lt;/a&gt;, used to increment the PC, hold the new value for a jump, or dump out PC+1 to the link register.&lt;/li&gt;&lt;/ul&gt;In this test I'm just displaying the link register's value rather than actually using it, and my opcodes are just:&lt;ul&gt;&lt;li&gt;&lt;code&gt;nop&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;branch to immediate value&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;branch-and-link to immediate value&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;In order to have a complete view of all sorts of different branching instructions, well...I'd have to have done a lot more work.  I'll get there, but for today at least I've tested all the basic parts I'll need.&lt;br /&gt;&lt;br /&gt;Incidentally, the two small text boxes in the &lt;a href="http://ballcomputer.blogspot.com/2005/04/image-pcu-test.html"&gt;screen shot&lt;/a&gt;, which are probably too small to read, contain the following text:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Phases of operation:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Read Next PC-&amp;gt;PC&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Increment PC&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Read PC-&amp;gt;ROM&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Process instruction&lt;br /&gt;&lt;br /&gt;Opcodes for this test [bits 15-14 only]:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x0000: No-op&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x4000: No-op&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x8000: branch to addr in bits 13-6&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xC000: branch-and-link to addr in 13-6&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111319853593703021?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/111319853593703021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=111319853593703021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111319853593703021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111319853593703021'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/04/program-counter-unit.html' title='The Program Counter Unit'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111319752191390833</id><published>2005-04-10T22:30:00.000-07:00</published><updated>2005-04-25T22:57:40.640-07:00</updated><title type='text'>[Image] PCU Test</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/PCU%20Test/PCUtest.png usemap="#map_PCU"/&gt;&lt;br /&gt;&lt;map name="map_PCU"&gt;&lt;br /&gt; &lt;area shape=rect coords="276,903,967,1091" href="http://img.photobucket.com/albums/v687/bbbrain/PCU%20Test/PCUNextPC.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1135,1356,1597,1436" href="http://img.photobucket.com/albums/v687/bbbrain/PCU%20Test/PCUEchoBase.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="807,345,1271,524" href="http://img.photobucket.com/albums/v687/bbbrain/PCU%20Test/PCUEchoTop.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="137,503,794,602" href="http://ballcomputer.blogspot.com/2005/04/image-1-to-16-triggered.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="977,263,1061,302" href="http://img.photobucket.com/albums/v687/bbbrain/PCU%20Test/1to8.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="349,702,945,758" href="http://ballcomputer.blogspot.com/2005/03/image-rom-cell-256x16.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="514,123,665,169" href="http://img.photobucket.com/albums/v687/bbbrain/PCU%20Test/1to8triggered.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="849,838,933,877" href="http://img.photobucket.com/albums/v687/bbbrain/PCU%20Test/1to8.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="732,838,816,877" href="http://img.photobucket.com/albums/v687/bbbrain/PCU%20Test/1to8.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111319752191390833?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111319752191390833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111319752191390833'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/04/image-pcu-test.html' title='[Image] PCU Test'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111319744913974247</id><published>2005-04-10T22:28:00.000-07:00</published><updated>2005-04-25T22:58:19.993-07:00</updated><title type='text'>[Image] 1 to 16 Triggered</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/PCU%20Test/1to16triggered.png usemap="#map_1_to_16"/&gt;&lt;br /&gt;&lt;map name="map_1_to_16"&gt;&lt;br /&gt; &lt;area shape=rect coords="1558,219,1709,265" href="http://img.photobucket.com/albums/v687/bbbrain/PCU%20Test/1to8triggered.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="860,135,1011,181" href="http://img.photobucket.com/albums/v687/bbbrain/PCU%20Test/1to8triggered.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111319744913974247?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111319744913974247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111319744913974247'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/04/image-1-to-16-triggered.html' title='[Image] 1 to 16 Triggered'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111198351390069854</id><published>2005-03-27T20:02:00.000-08:00</published><updated>2005-03-27T20:18:53.700-08:00</updated><title type='text'>The biggest ROM ever built.</title><content type='html'>Well, it will be, anyway, if I do manage to build it.  &lt;a href=http://ballcomputer.blogspot.com/2005/03/image-rom-cell-256x16.html&gt;This ROM&lt;/a&gt; is 256 words of 16 bits each: 0.5KB.  It will probably also comprise more than a ton of building materials.  It uses about 9180 gates and nearly 14000 connections.  Of course, you could remove 4096 gates and 8192 connections if you don't mind programming it by moving connections around, instead of just flipping gates.  If you rarely reprogram it, that might be a big win; it'd be just like the old electronic computers which were programmed by plugging wires into switchboards.&lt;br /&gt;&lt;br /&gt;This diagram is scaled way down from the others, and is the first that I've chosen to post with full-depth drawing turned on [so that you can see inside each of the smaller 16x16 ROM cells].&lt;br /&gt;&lt;br /&gt;Incidentally, speaking of scaling: I realized the other day that I've been posting mostly full-scale images.  The code that dumps out screen shots was supposed to have been putting out images scaled down to 60% of regular size, but it turned out that it was only scaling down the top-level diagram, and that all of the other images linked from there are full-scale.  I may go back and fix that up [now that I've fixed my code], but it's a bit of a pain to get it all set up, so that may take a while.  While the tool dumps out images and image maps for me, it's still a bit of manual scutwork to get it all into blogger + photobucket.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111198351390069854?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/111198351390069854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=111198351390069854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111198351390069854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111198351390069854'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/03/biggest-rom-ever-built.html' title='The biggest ROM ever built.'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111198106086085685</id><published>2005-03-27T19:34:00.000-08:00</published><updated>2005-04-25T22:59:36.746-07:00</updated><title type='text'>[Image] ROM cell 256x16</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell256x16.png usemap="#map_256_16_ROM"/&gt;&lt;br /&gt;&lt;map name="map_256_16_ROM"&gt;&lt;br /&gt; &lt;area shape=rect coords="2158,105,2279,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="2015,105,2136,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1871,105,1992,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1727,105,1848,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1584,105,1705,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1440,105,1561,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1297,105,1418,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1153,105,1274,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1009,105,1130,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="866,105,987,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="722,105,843,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="579,105,700,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="435,105,556,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="291,105,412,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="148,105,269,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="4,105,125,152" href="http://img.photobucket.com/albums/v687/bbbrain/ROM/ROMcell16x16.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111198106086085685?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111198106086085685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111198106086085685'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/03/image-rom-cell-256x16.html' title='[Image] ROM cell 256x16'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111043839134601965</id><published>2005-03-09T22:58:00.000-08:00</published><updated>2005-03-09T23:18:53.476-08:00</updated><title type='text'>The [almost-]complete ALU</title><content type='html'>I've just posted imagemaps of the latest revision of my &lt;a href="http://ballcomputer.blogspot.com/2005/03/image-alu-test.html"&gt;ALU&lt;/a&gt;.  It understands 5 opcodes [ADD, SUB, AND, OR, XOR] and produces both unsigned [C] and signed [V] overflow signals.  What it currently lacks is the ability to make use of a carry in.  Without that, you can't do 16-bit ADDs or SUBs efficiently.  I'll get there, but I wanted to put this up to show some progress.&lt;br /&gt;&lt;br /&gt;I've also got two different versions of the shifter [nearly] done.  I'll probably put one of them up next.  The reason that I'm not fully satisfied with either of them is, again, the carry stuff.  Do they need to take a carry in?  It's really useful if you want to do a 16-bit-wide, one-bit shift.  However, since my shifters are capable of doing 0-7-bit shifts, what does a carry [in &lt;span style="font-weight:bold;"&gt;or &lt;/span&gt;out] mean?  I figure I'll want to set the carry out flag by the first bit that comes out, no matter how far you shift [as long as that's at least one bit].  But what about the carry in, when you shift by more than one bit?&lt;br /&gt;&lt;br /&gt;There's another problem there, though--I've already written the instruction set, and I don't have a bit left for "does the shift take a carry in".  Oops...any thoughts on how important that is?&lt;br /&gt;&lt;br /&gt;Of course, that question would be easier to answer if you knew the rest of the instruction set.  I'll post it soon.  It's not set in stone, but it is guiding my design of the computer, and I'd love to get feedback on it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111043839134601965?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/111043839134601965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=111043839134601965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111043839134601965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111043839134601965'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/03/almost-complete-alu.html' title='The [almost-]complete ALU'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111043764935957576</id><published>2005-03-09T22:53:00.000-08:00</published><updated>2005-03-09T23:33:01.040-08:00</updated><title type='text'>[Image] ALU test</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/ALU/Aluuser.png usemap="#mapalutest"/&gt;&lt;br /&gt;&lt;map name="mapalutest"&gt;&lt;br /&gt; &lt;area shape=rect coords="142,1010,1363,1863" href="http://ballcomputer.blogspot.com/2005/03/image-alu.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="445,683,514,731" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/1to4.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="973,322,1199,392" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/1to8triggered.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="843,498,1049,557" href="http://ballcomputer.blogspot.com/2005/03/image-1-to-16.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1129,589,1335,648" href="http://ballcomputer.blogspot.com/2005/03/image-1-to-16.html"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111043764935957576?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111043764935957576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111043764935957576'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/03/image-alu-test.html' title='[Image] ALU test'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111043730314897225</id><published>2005-03-09T22:47:00.000-08:00</published><updated>2005-03-09T23:32:40.976-08:00</updated><title type='text'>[Image] ALU</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/ALU/StatefulAdderTest.png usemap="#mapalu"/&gt;&lt;br /&gt;&lt;map name="mapalu"&gt;&lt;br /&gt; &lt;area shape=rect coords="1983,1003,2869,1444" href="http://ballcomputer.blogspot.com/2005/03/image-8-bit-adder.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1494,153,1563,201" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/1to4.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="2632,905,2838,964" href="http://ballcomputer.blogspot.com/2005/03/image-1-to-16.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1207,1747,1413,1806" href="http://ballcomputer.blogspot.com/2005/03/image-1-to-16.html"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111043730314897225?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111043730314897225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111043730314897225'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/03/image-alu.html' title='[Image] ALU'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111043711566538045</id><published>2005-03-09T22:44:00.000-08:00</published><updated>2005-03-09T23:32:12.103-08:00</updated><title type='text'>[Image] 8-bit adder</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/ALU/8-bitadder.png usemap="#mapalu8bit"/&gt;&lt;br /&gt;&lt;map name="mapalu8bit"&gt;&lt;br /&gt; &lt;area shape=rect coords="2613,287,2827,363" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/adder.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="2412,429,2626,505" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/adder.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="2169,570,2383,646" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/adder.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1924,689,2138,765" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/adder.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="2107,180,2349,228" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/QuadRSInverter.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1680,813,1894,889" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/adder.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1437,944,1651,1020" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/adder.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1231,1079,1445,1155" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/adder.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="860,1342,1074,1418" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/adder.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="1291,586,1533,634" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/QuadRSInverter.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111043711566538045?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111043711566538045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111043711566538045'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/03/image-8-bit-adder.html' title='[Image] 8-bit adder'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-111043697186015753</id><published>2005-03-09T22:36:00.000-08:00</published><updated>2005-03-09T23:31:46.856-08:00</updated><title type='text'>[Image] 1 to 16</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/ALU/1to16.png usemap="#mapalu1to16"/&gt;&lt;br /&gt;&lt;map name="mapalu1to16"&gt;&lt;br /&gt; &lt;area shape=rect coords="1045,220,1171,279" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/1to8.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="661,138,787,197" href="http://img.photobucket.com/albums/v687/bbbrain/ALU/1to8.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-111043697186015753?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111043697186015753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/111043697186015753'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/03/image-1-to-16.html' title='[Image] 1 to 16'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-110945388551931071</id><published>2005-02-26T13:30:00.000-08:00</published><updated>2005-03-27T19:58:09.310-08:00</updated><title type='text'>Understanding the diagrams</title><content type='html'>Any post whose title begins with "[Image]" is a bcd circuit diagram.  Each box in the diagram represents a functional unit of a design, just like an IC in an electronic circuit diagram.  I've color-coded them by type, and each type has different attributes and displays different data during simulation.  The values shown in most images will be the default values, unless otherwise noted [for example, if I say that I'm showing a simulation in progress].&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;strong&gt;Basic Cells&lt;/strong&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Introduction/basiccell.png&gt;&lt;br /&gt;Each basic cell [always outlined in blue] is made up of one or more of the fundamental gates that make up the computer, described in the &lt;a href=http://ballcomputer.blogspot.com/2005/02/introduction.html&gt;introduction&lt;/a&gt; and in &lt;a href=http://ballcomputer.blogspot.com/2005/02/how-to-get-state-uphill.html&gt;this post&lt;/a&gt;.  All gates in a single basic cell are considered to share a single axis, so they'll all always be in the same state [0 or 1].  The state is displayed both in the position of the pink arms and by the large digit displayed at the right side of the gate.&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;strong&gt;Terminal Cells&lt;/strong&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Introduction/terminalcell.png&gt;&lt;br /&gt;Each terminal cell [always outlined in purple] represents a magical piece of machinery that I haven't designed yet.  There should be very few of these in the design, and most of them will go away when I hook all the components together.  Generally they're just dumb sources or sinks of balls [things that spit out balls or make them vanish], but I've also got special ones that spit out balls on demand [when tugged on via a pulley].  I have ideas for how they will work in physical form, but it's not relevant to the design, so I'll just deal with that during Step 5.&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;strong&gt;Container Cells&lt;/strong&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Introduction/containercell.png&gt;&lt;br /&gt;Each container cell [always outlined in yellow] represents a composite cell made up of other components.  It's just my way of reusing blocks of logic.  I will generally be uploading diagrams as clickable image maps, so that you can &lt;strong&gt;click on a container cell&lt;/strong&gt; and see the design that it represents.&lt;br /&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Introduction/container-full.png&gt;&lt;br /&gt;Here's another view of a container cell.  In this image I've turned on "full-depth" drawing, so you can see the cell's interior logic drawn on top of its normal image.  I generally keep this turned off to remove the clutter [and to speed up the designs that are big enough to matter], but it can come in handy during simulation [or just to show off how friggin' huge some of my designs are].&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;strong&gt;Ports&lt;/strong&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Introduction/ports.png&gt;&lt;br /&gt;Ports and connections are the means by which cells are connected.  They can represent attachment points for the tubes that will carry balls around [the red and blue ports, for inputs and outputs respectively] and for cords that connect pulleys [the yellow and green ports, for single-cord and double-cord pulleys, respectively].  The ports show up both as small boxes on cells and as larger boxes in the internal views of container cells.&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;strong&gt;Connections&lt;/strong&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Introduction/connections.png&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Introduction/delayconnection.png&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;Connections represent either tubes through which balls roll or cords attached to pulleys.  Both are shown in bcd as straight off-white lines [yellow if they've been selected].  Connections currently default to having no wire delays [balls flow through them in zero time]; I'll probably change that to one gate delay per connection later on.  When a connection has delays [i.e. is slow, such as a spiral tube that would take a ball a while to roll through], you'll see a rectangular box containing digits which are either '0' or '1'.  Each '1' represents a ball.  As the simulation clocks, the '1's shift from left to right through the box, and when they run off the end, the ball comes out of the connection into its output port.&lt;br /&gt;&lt;br /&gt;Sometimes it's useful to hide connections.  On designs with quite a few connections, it's often really hard to see one particular line on which you're trying to focus.  For these occasions, I will generally "stub out" the offending connections.  Here's what the stubs look like:&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Introduction/conn-stubs.png&gt;&lt;br /&gt;Note that connections turn yellow when selected, and may be drawn either on top of or beneath ports and cells.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Now that you understand all that, take a look at &lt;a href=http://ballcomputer.blogspot.com/2005/02/image-reg-test.html&gt;this diagram&lt;/a&gt;, which is a state machine that I built to test my 8-byte register file [the lowest byte of which always reads as 0].&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-110945388551931071?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/110945388551931071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=110945388551931071' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110945388551931071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110945388551931071'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/02/understanding-diagrams.html' title='Understanding the diagrams'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-110931933576226690</id><published>2005-02-25T00:06:00.000-08:00</published><updated>2005-02-26T15:24:27.910-08:00</updated><title type='text'>How to get state uphill</title><content type='html'>"But," I hear you thinking, "Gravity-driven balls are all very well and good for calculation, but at some point you're going to have to bring the results back uphill for storage."  Yes, that's true, but I've got it all figured out.  I'm going to do it with &lt;strike&gt;mirrors&lt;/strike&gt; pulleys.&lt;br /&gt;&lt;br /&gt;In fact, I may even use several kinds of pulleys.&lt;br /&gt;&lt;br /&gt;In the traditional pulley, two wheels are forced to move in lock-step by a loop of cord that goes completely around both of them.&lt;br /&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Introduction/pulley0.png&gt;&lt;br /&gt;&lt;br /&gt;We can make a similar pulley system that has pretty much the same behavior by using two rods, and connecting the ends of each to the corresponding ends of the other with 2 separate strings.  It doesn't have quite the range of motion of the traditional pulley, but I expect that it'll be enough for my gates, which require only 60&amp;deg; of rotation.&lt;br /&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Introduction/pulley1.png&gt;&lt;br /&gt;&lt;br /&gt;However, if we remove one of the strings, we get more interesting behavior.  For example, in the below diagram, the lower pulley can tip the upper one to the right by tipping to the right itself [thus pulling on the cord], but can't force it to tip to the left.&lt;br /&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Introduction/pulley2.png&gt;&lt;br /&gt;&lt;br /&gt;Likewise, the upper can tip the lower to the left, but not to the right.&lt;br /&gt;&lt;br /&gt;In bcd, I allow pulley connections that represent either double-corded pulleys or one of the two single-corded possibilities.  However, rather than think of them as left-connected or right-connected pulleys, I describe them in terms of their actions in relationship to the gates to which they are connected.  That is, when do they send a signal [tug on a cord], and what do they do when they receive a tug?&lt;br /&gt;&lt;br /&gt;The three types of pulleys are therefore:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;S&lt;/strong&gt; or SOSROR [Send On Set, Reset On Receive]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;strong&gt;R&lt;/strong&gt; or SORSOR [Send On Reset, Set On Receive]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;strong&gt;D&lt;/strong&gt; or DOUBLE [Send On Toggle, Toggle On Receive]&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;Obviously one can't connect a D pulley to an S or R pulley, but an S can connect to either an S or R, and vice-versa.&lt;br /&gt;&lt;br /&gt;&lt;a href=http://ballcomputer.blogspot.com/2005/02/understanding-diagrams.html&gt;Next&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-110931933576226690?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/110931933576226690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=110931933576226690' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110931933576226690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110931933576226690'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/02/how-to-get-state-uphill.html' title='How to get state uphill'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-110931738084527797</id><published>2005-02-24T23:32:00.000-08:00</published><updated>2005-02-26T15:25:25.110-08:00</updated><title type='text'>How I'm doing it</title><content type='html'>&lt;strong&gt;Step 1&lt;/strong&gt; was to prove to myself that it was all possible.&lt;br /&gt;&lt;br /&gt;Sure, I know that any digital computer can be built from the simplest gates [with some restrictions--I'm being approximate here].  That doesn't mean that I personally can come up with a reasonable design in finite time.  As it turned out, this became one of the many design projects that I would pick up now and then, think about for a couple of months, and then put down for a couple more.  I would frequently decide, "But what if, instead, I optimize for {ease of opcode decode, size of instruction, quantity of routing logic, etc.}?" and start from scratch again.&lt;br /&gt;One day, after about 4 years of this, I decided, "There are a lot of ways to do this.  I should just pick one".  The architecture and instruction set were done one week and 30 pages of notes later.&lt;br /&gt;&lt;br /&gt;At this point, the project had gotten further than any of my other design projects ever had, so I decided to proceed to:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 2&lt;/strong&gt;, in which I write a CAD tool, which I call Ball Computer Designer [&lt;strong&gt;bcd&lt;/strong&gt; for short], to enable me to test out designs.  Sure, I could have gone straight to physical construction, but as a software engineer [and someone who's helped tape out chips] I feel strongly that the best way to experiment is in simulation.  Plus, who's going to offer me funding to build the sculpture, and a place to put it, without some proof that I know what I'm talking about?  OK, so it's also possible that I could have adapted an existing CAD or simulation framework from electronic to ball logic, saving myself a whole heap of coding, but where would be the fun in that?&lt;br /&gt;&lt;br /&gt;Now, two additional years later, I now find myself the proud owner of 15000+ lines of C++ and 200+ lines of feature requests and bug descriptions.  However, the tool is now &lt;strong&gt;G&lt;/strong&gt;ood &lt;strong&gt;E&lt;/strong&gt;nough to start using, and so I proceed to:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 3&lt;/strong&gt;, in which I will design and test the actual gate-level logic of all components of the CPU.&lt;br /&gt;&lt;br /&gt;So far I've been quite pleased with how easy it is to put the components together.  My first attempt was a 4-bit proof-of-concept ALU, which could add, subtract, and, or, and xor [no overflow/negative/zero/carry checks in or out yet].  After that, I decided to go straight to full-scale components, and I've done a few of them in as many days.  That's days of actual work on the project, unfortunately, not calendar days.  I only get to work on this in my &lt;strong&gt;C&lt;/strong&gt;opious &lt;strong&gt;S&lt;/strong&gt;pare &lt;strong&gt;T&lt;/strong&gt;ime&amp;#153;.&lt;br /&gt;&lt;br /&gt;However, that being said, I've decided to start sharing what I've got, and hope to be updating this blog at least once every two weeks.  I'll be posting reports on my progress along with images taken from bcd.  They're not screen shots, since most of the designs don't fit on one screen.  Also, because the &lt;a href=http://www.fltk.org&gt;GUI library&lt;/a&gt; I'm using doesn't support writing images to files, I'm using &lt;a href=http://www.boutell.com/gd/&gt;a different one&lt;/a&gt; to write out the PNGs for this blog.&lt;br /&gt;&lt;br /&gt;After much struggling to try to get the PNGs to look good, I've determined that FLTK uses Xft for fonts, and GD uses FreeType fonts, and never the twain shall meet.  So the PNGs are a bit uglier than what I'm actually seeing at home; I'm sorry about that.  If you know an easy way to fix it, please do let me know.&lt;br /&gt;&lt;br /&gt;For future reference, &lt;strong&gt;Step 4&lt;/strong&gt; is writing test software to verify the design, &lt;strong&gt;Step 5&lt;/strong&gt; is prototyping and testing the physical gate designs and the structure needed to hold them all in place, &lt;strong&gt;Step 6&lt;/strong&gt; is to produce a total cost and time estimate for construction, and &lt;strong&gt;Step 7&lt;/strong&gt; is to find someone who wants one built.  I think it could be both&lt;ul&gt;&lt;li&gt;a terrific way to teach kids how computers work.&lt;/li&gt;&lt;li&gt;wicked cool.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a href=http://ballcomputer.blogspot.com/2005/02/how-to-get-state-uphill.html&gt;Next&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-110931738084527797?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/110931738084527797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=110931738084527797' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110931738084527797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110931738084527797'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/02/how-im-doing-it.html' title='How I&apos;m doing it'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-110903905444486018</id><published>2005-02-24T23:27:00.000-08:00</published><updated>2006-05-28T15:33:27.856-07:00</updated><title type='text'>Introduction</title><content type='html'>Have you ever seen any of the many kinetic sculptures that involve balls rolling down tracks?  &lt;a href=http://www.kugelbahn.ch/bahn_e.htm&gt;Here&lt;/a&gt; is an example.  I've loved them since I was a child, when I first saw the one in the Port Authority building in New York.&lt;br /&gt;&lt;br /&gt;These sculptures vary tremendously; some have all kinds of different structures which toss the ball around, make noises, or are themselves tossed around by the ball.  Others are made of very few components, but take each ball through a quite complex set of paths.&lt;br /&gt;&lt;br /&gt;In many of them, there is a deterministic decision-making structure.  As each ball goes through it, it is directed to one of two output paths.  Specifically, the one that the previous ball &lt;i&gt;didn't&lt;/i&gt; take.  The structure toggles back and forth, and its outputs alternate output paths.  It looks a bit like this:&lt;br /&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Introduction/togglegate.png&gt;&lt;br /&gt;&lt;br /&gt;The ball enters at the top, is guided to one side, flips the trigonal gate to that side, and exits at the bottom.  The next ball finds the gate flipped the other way, and so the reverse happens.&lt;br /&gt;&lt;br /&gt;Being a computer geek, I can't help looking at that gate as one bit of state, and noting that if one links several of them together, such that the left-hand output of each feeds into the next, one creates what looks suspiciously like a binary counter.  Furthermore, if one is allowed to drop balls into any of the gates directly, rather than just sending them in the top one, one can do twos-complement addition and subtraction!&lt;br /&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Introduction/cascadinggates.png&gt;&lt;br /&gt;&lt;br /&gt;There is a complication, of course, in that we can't read the state out without also writing to it.  However, we can alter this "toggle" gate a bit by breaking off its two lower arms, and then we can read the state out [noting which way the output ball went], but not write to it.  Also, we can break off only one of the two lower arms, and then we have a gate that a ball can flip one way, but not the other--just like the set or reset functionality of an electronic flip-flop.&lt;br /&gt;&lt;br /&gt;&lt;img src=http://img.photobucket.com/albums/v687/bbbrain/Introduction/othergates.png&gt;&lt;br /&gt;&lt;br /&gt;OK, now we have gates that we can toggle, query, set, and reset [I call them &lt;strong&gt;t&lt;/strong&gt;, &lt;strong&gt;q&lt;/strong&gt;, &lt;strong&gt;s&lt;/strong&gt;, and &lt;strong&gt;r&lt;/strong&gt; gates]--but not all at the same time.  That is, each has only a single function, so you can toggle a bit but not read it, or read a bit but not set it in the first place.  We can fix this by connecting several of these gates together, by attaching them all to a common axle, forcing them all to move in sync with each other.  Tada!  We now have the basic building block of digital logic...and more importantly, a tremendous time-sink for me.&lt;br /&gt;&lt;br /&gt;Why is it a time-sink?  Because, having figured out how to make these gates, I decided to build a ball sculpture that is simultaneously an entire computer [OK, an 8-bit CPU] out of them.&lt;br /&gt;&lt;br /&gt;&lt;a href=http://ballcomputer.blogspot.com/2005/02/how-im-doing-it.html&gt;Next&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-110903905444486018?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ballcomputer.blogspot.com/feeds/110903905444486018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10995549&amp;postID=110903905444486018' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110903905444486018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110903905444486018'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/02/introduction.html' title='Introduction'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-110905047336931909</id><published>2005-02-21T21:33:00.000-08:00</published><updated>2005-03-09T23:31:15.436-08:00</updated><title type='text'>[Image] Reg Test</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTest.png" usemap="#mapregtest"/&gt;&lt;br /&gt;&lt;map name="mapregtest"&gt;&lt;br /&gt; &lt;area shape=rect coords="52,620,685,834" href="http://ballcomputer.blogspot.com/2005/02/image-reg-testregister-file.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="184,210,253,258" href="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTest1to4.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-110905047336931909?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110905047336931909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110905047336931909'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/02/image-reg-test.html' title='[Image] Reg Test'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-110905026174181531</id><published>2005-02-21T21:28:00.000-08:00</published><updated>2005-03-09T23:30:44.986-08:00</updated><title type='text'>[Image] Reg Test:Register File</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTestRegisterFile.png" usemap="#mapregtestrf"/&gt;&lt;br /&gt;&lt;map name="mapregtestrf"&gt;&lt;br /&gt; &lt;area shape=rect coords="1603,590,2201,807" href="http://ballcomputer.blogspot.com/2005/02/image-reg-testregister-filer0.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="901,593,1508,810" href="http://ballcomputer.blogspot.com/2005/02/image-reg-testregister-filer1.html"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-110905026174181531?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110905026174181531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110905026174181531'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/02/image-reg-testregister-file.html' title='[Image] Reg Test:Register File'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-110905009969565596</id><published>2005-02-21T21:26:00.000-08:00</published><updated>2005-03-09T23:30:18.546-08:00</updated><title type='text'>[Image] Reg Test:Register File:R0</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTestRegisterFileR0.png" usemap="#mapregtestr0"/&gt;&lt;br /&gt;&lt;map name="mapregtestr0"&gt;&lt;br /&gt; &lt;area shape=rect coords="1429,601,1978,821" href="http://ballcomputer.blogspot.com/2005/02/image-reg-testregister-filer0r0.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="727,598,1282,822" href="http://ballcomputer.blogspot.com/2005/02/image-reg-testregister-filer0r1.html"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-110905009969565596?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110905009969565596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110905009969565596'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/02/image-reg-testregister-filer0.html' title='[Image] Reg Test:Register File:R0'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-110904998664655984</id><published>2005-02-21T21:24:00.000-08:00</published><updated>2005-03-09T23:25:43.356-08:00</updated><title type='text'>[Image] Reg Test:Register File:R0:R0</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTestRegisterFileR0R0.png" usemap="#mapregtestr0r0"/&gt;&lt;br /&gt;&lt;map name="mapregtestr0r0"&gt;&lt;br /&gt; &lt;area shape=rect coords="1167,618,1671,831" href="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTestRegisterFileR0R0R0.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="633,619,1137,829" href="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTestRegisterFileR0R0R1.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-110904998664655984?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110904998664655984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110904998664655984'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/02/image-reg-testregister-filer0r0.html' title='[Image] Reg Test:Register File:R0:R0'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-110904986968983152</id><published>2005-02-21T21:21:00.000-08:00</published><updated>2005-03-09T23:27:09.906-08:00</updated><title type='text'>[Image] Reg Test:Register File:R0:R1</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTestRegisterFileR0R1.png" usemap="#mapregtestr0r1"/&gt;&lt;br /&gt;&lt;map name="mapregtestr0r1"&gt;&lt;br /&gt; &lt;area shape=rect coords="1167,637,1671,847" href="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTestRegisterFileR0R1R0.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="633,638,1137,848" href="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTestRegisterFileR0R1R1.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-110904986968983152?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110904986968983152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110904986968983152'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/02/image-reg-testregister-filer0r1.html' title='[Image] Reg Test:Register File:R0:R1'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-110904959996075732</id><published>2005-02-21T21:16:00.000-08:00</published><updated>2005-03-09T23:28:55.433-08:00</updated><title type='text'>[Image] Reg Test:Register File:R1</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTestRegisterFileR1.png" usemap="#mapregtestr1"/&gt;&lt;br /&gt;&lt;map name="mapregtestr1"&gt;&lt;br /&gt; &lt;area shape=rect coords="1429,591,1984,815" href="http://ballcomputer.blogspot.com/2005/02/image-reg-testregister-filer1r0.html"/&gt;&lt;br /&gt; &lt;area shape=rect coords="727,594,1282,818" href="http://ballcomputer.blogspot.com/2005/02/image-reg-testregister-filer1r1.html"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-110904959996075732?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110904959996075732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110904959996075732'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/02/image-reg-testregister-filer1.html' title='[Image] Reg Test:Register File:R1'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-110904931948473447</id><published>2005-02-21T21:13:00.000-08:00</published><updated>2005-03-09T23:29:22.916-08:00</updated><title type='text'>[Image] Reg Test:Register File:R1:R0</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTestRegisterFileR1R0.png" usemap="#mapregtestr1r0"/&gt;&lt;br /&gt;&lt;map name="mapregtestr1r0"&gt;&lt;br /&gt; &lt;area shape=rect coords="1167,637,1671,847" href="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTestRegisterFileR1R0R0.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="633,638,1137,848" href="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTestRegisterFileR1R0R1.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-110904931948473447?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110904931948473447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110904931948473447'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/02/image-reg-testregister-filer1r0.html' title='[Image] Reg Test:Register File:R1:R0'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-10995549.post-110904833491300049</id><published>2005-02-21T20:54:00.000-08:00</published><updated>2005-03-09T23:29:50.566-08:00</updated><title type='text'>[Image] Reg Test:Register File:R1:R1</title><content type='html'>&lt;span style="font-size:130%;"&gt;Click on the &lt;/span&gt;&lt;span style="font-size:130%;color:yellow;"&gt;yellow&lt;/span&gt;&lt;span style="font-size:130%;"&gt; boxes to see inside them.&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;img src="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTestRegisterFileR1R1.png" usemap="#mapregtestr1r1"/&gt;&lt;br /&gt;&lt;map name="mapregtestr1r1"&gt;&lt;br /&gt; &lt;area shape=rect coords="1167,637,1671,847" href="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTestRegisterFileR1R1R0.png"/&gt;&lt;br /&gt; &lt;area shape=rect coords="633,638,1137,848" href="http://img.photobucket.com/albums/v687/bbbrain/Reg%20Test/RegTestRegisterFileR1R1R1.png"/&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10995549-110904833491300049?l=ballcomputer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110904833491300049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10995549/posts/default/110904833491300049'/><link rel='alternate' type='text/html' href='http://ballcomputer.blogspot.com/2005/02/image-reg-testregister-filer1r1.html' title='[Image] Reg Test:Register File:R1:R1'/><author><name>Eric Uhrhane</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
