<?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-8663568991897902833</id><updated>2011-11-11T18:26:37.219-08:00</updated><title type='text'>Machinations</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-8327062723605389394</id><published>2011-10-24T12:01:00.001-07:00</published><updated>2011-10-24T12:01:25.510-07:00</updated><title type='text'>Inspiration</title><content type='html'>This is perfect. Seriously perfect.&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-W4t0Ze5unjs/TqW2ALaxFcI/AAAAAAAAALU/xO4tTQrfk4c/s1600/YES..jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-W4t0Ze5unjs/TqW2ALaxFcI/AAAAAAAAALU/xO4tTQrfk4c/s320/YES..jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-8327062723605389394?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/8327062723605389394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2011/10/inspiration.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/8327062723605389394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/8327062723605389394'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2011/10/inspiration.html' title='Inspiration'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-W4t0Ze5unjs/TqW2ALaxFcI/AAAAAAAAALU/xO4tTQrfk4c/s72-c/YES..jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-8565761697911188374</id><published>2011-10-23T14:48:00.000-07:00</published><updated>2011-10-23T14:48:50.271-07:00</updated><title type='text'>TRSAC</title><content type='html'>...was EPIC. Seriously a great party :) . I made two things for it:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://2.gvt0.com/vi/4xDhgBWIqro/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4xDhgBWIqro&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/4xDhgBWIqro&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;A quick demo with music from Lug00ber; the entire thing was produced from scratch in 24 hours which was really fun!&lt;br /&gt;&lt;br /&gt;Also:&amp;nbsp;&lt;a href="http://soundcloud.com/yupferris/atmos"&gt;http://soundcloud.com/yupferris/atmos&lt;/a&gt;&amp;nbsp;Some wubwub that got me 2nd place in the music compo :) .&lt;br /&gt;&lt;br /&gt;I'll have pics and videos up soon, be patient :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-8565761697911188374?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/8565761697911188374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2011/10/trsac.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/8565761697911188374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/8565761697911188374'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2011/10/trsac.html' title='TRSAC'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-4195681999512780507</id><published>2011-08-16T15:22:00.001-07:00</published><updated>2011-08-16T15:22:48.308-07:00</updated><title type='text'>New Gameboy Track</title><content type='html'>..is&amp;nbsp;&lt;a href="https://8bc.org/music/Ferris/Revival/"&gt;HERE&lt;/a&gt;&amp;nbsp;:) .&lt;br /&gt;&lt;br /&gt;Until next time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-4195681999512780507?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/4195681999512780507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2011/08/new-gameboy-track.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/4195681999512780507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/4195681999512780507'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2011/08/new-gameboy-track.html' title='New Gameboy Track'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-6241913707674632702</id><published>2011-08-08T04:37:00.001-07:00</published><updated>2011-08-08T04:37:37.833-07:00</updated><title type='text'>Chiptunez</title><content type='html'>Small update; got a new flash cart in my DMG and a small recording deck, so I took the opportunity to touch up some old stuff, which you can now find on my Soundcloud here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://soundcloud.com/yupferris/sets/old-dmg-remastered/"&gt;http://soundcloud.com/yupferris/sets/old-dmg-remastered/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-6241913707674632702?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/6241913707674632702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2011/08/chiptunez.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/6241913707674632702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/6241913707674632702'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2011/08/chiptunez.html' title='Chiptunez'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-5022505873483394987</id><published>2011-07-02T15:42:00.000-07:00</published><updated>2011-07-02T15:42:17.328-07:00</updated><title type='text'>Pixels</title><content type='html'>Always wanted to be able to do pixel art. Been studying it for a long time, actually, but never got up the guts to finish one of my test pieces.. until today :) . Nothing fantastically impressive, but a good first finished pic. Used 7 colors (which you can see at the top left of the pic):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-2fqbjKEWvJE/Tg-eoxlcU0I/AAAAAAAAAHg/KFQALr9a-jY/s1600/headophile.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-2fqbjKEWvJE/Tg-eoxlcU0I/AAAAAAAAAHg/KFQALr9a-jY/s1600/headophile.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Hopefully this is a skill I can improve on over time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-5022505873483394987?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/5022505873483394987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2011/07/pixels.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/5022505873483394987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/5022505873483394987'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2011/07/pixels.html' title='Pixels'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-2fqbjKEWvJE/Tg-eoxlcU0I/AAAAAAAAAHg/KFQALr9a-jY/s72-c/headophile.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-1148783781517196588</id><published>2011-05-21T13:01:00.000-07:00</published><updated>2011-05-21T13:03:04.398-07:00</updated><title type='text'>The Proper Way to Fill Useless Bytes in your Binary</title><content type='html'>No, I'm not bored, just hate using nop's to pad bytes. The result? This:&lt;div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-VMjdCbaGN8U/TdgaYfWRbcI/AAAAAAAAAHc/0xSqkFZHK5w/s1600/noshame.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="11" src="http://1.bp.blogspot.com/-VMjdCbaGN8U/TdgaYfWRbcI/AAAAAAAAAHc/0xSqkFZHK5w/s320/noshame.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You know you love it.&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/8663568991897902833-1148783781517196588?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/1148783781517196588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2011/05/proper-way-to-fill-useless-bytes-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/1148783781517196588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/1148783781517196588'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2011/05/proper-way-to-fill-useless-bytes-in.html' title='The Proper Way to Fill Useless Bytes in your Binary'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-VMjdCbaGN8U/TdgaYfWRbcI/AAAAAAAAAHc/0xSqkFZHK5w/s72-c/noshame.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-1558473581811665002</id><published>2011-05-01T11:27:00.000-07:00</published><updated>2011-05-24T05:43:51.725-07:00</updated><title type='text'>Milk and Compressors</title><content type='html'>Late last December,&amp;nbsp;&lt;a href="http://beskrajnost.com/"&gt;Decipher&lt;/a&gt;&amp;nbsp;and I had plans to complete a highly massive 64k intro for &lt;a href="http://gathering.org/"&gt;The Gathering&lt;/a&gt;. Around January, we started on tool/framework development, and had a pretty good start. We made one mistake, however: We assumed that once we had the technology, the creative aspect of the intro would be trivial. Because of this, we developed highly capable tools and such, but in the end had nothing to show. In other words, we failed :) . On a side note, I was also busy preparing to move to Norway to work for &lt;a href="http://outracks.no/"&gt;a fantastic startup company&lt;/a&gt;&amp;nbsp;founded by former demoscene group&amp;nbsp;&lt;a href="http://www.outracks.net/"&gt;Outracks&lt;/a&gt;&amp;nbsp;and finish up my current semester at&amp;nbsp;&lt;a href="http://wit.edu/"&gt;WIT&lt;/a&gt;, and Decipher was tied up in work projects at Nokia. Excuses, excuses ;) .&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Needing a backup project to avoid arriving at TG empty-handed and deal with the stress I had encountered, I decided in the last three weeks to produce a 1k intro. Problem was, the version of&amp;nbsp;&lt;a href="http://crinkler.net/"&gt;Crinkler&lt;/a&gt;&amp;nbsp;1k that we had on-hand was an older test version that wasn't very compatible yet (and do to mistakes we had made the previous year, we didn't want to request a new version unless we absolutely had to). So, I wanted to produce a prototype of &lt;i&gt;Juicer&lt;/i&gt;; a 1k compressor that Decipher and I had planned to produce many times before but never got around to finishing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, [re-]development of Juicer began. It started with producing some sort of dumbed-down version, as a proof of concept (and to refresh my very dated data compression experience). For this, I chose to develop a packer for Commodore 64, simply because the executable format is much simpler (no header besides a 16-bit load address, as opposed to the Windows PE header, which is a real pain), and I just love coding for that system. In about five hours or so composed of researching compression techniques, coding, and testing, I had a working lz77-based C64 intro packer. The compression wasn't very good, but the decompressor (including autostart stub) occupied only 87 bytes, without optimization. Unfortunately, I don't have the original packer, as my beloved flash drive was lost in the move, so I can only show an unworking version that I have left over here:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Sgz7w5TQ1OY/Tb2DtJxAdzI/AAAAAAAAAG4/YDfklqrBLSc/s1600/sadness.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="161" src="http://3.bp.blogspot.com/-Sgz7w5TQ1OY/Tb2DtJxAdzI/AAAAAAAAAG4/YDfklqrBLSc/s320/sadness.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Go ahead and laugh :) . But yes, this &lt;i&gt;was&lt;/i&gt;&amp;nbsp;a success (at one point). Also allowed me to write a nice little class I call bitbuf (bitwise data buffer). Self-explanatory ;) .&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next was to do it in Windows. If you read my previous posts, you'll know I've had plenty of trial-and-error experience with PE hacking, so this part was nothing new :) . Once I had the systems (and virtual machines) to test on, I had a working, handmade PE header in assembly in a few hours. The compressor was much harder, though.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The first thing I tried was based on the C64 lz77 scheme, but with some lzma-based modifications. I had decent results on ASCII text (namely, size-optimized GLSL code), but it didn't work very well on binary data. So, I read up on what Crinkler was doing. As described in the Crinkler manual,&amp;nbsp;&lt;a href="http://code4k.blogspot.com/2010/12/crinkler-secrets-4k-intro-executable.html"&gt;this blog post&lt;/a&gt;, and a few other sources, Crinkler is doing a (very strange, mind you) 33-bit arithmetic encoder with order-8 context modelling. These buzzwords are too complex to explain here (and that's what Google's for, you know), so I won't :) . But basically, I delved into these methods myself....and I can't yet share my results until the project's finished, so let's move on a bit ;) .&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Long story short, three weeks simply isn't enough (at least for me, hehe) to beat such an efficient compressor as Crinkler 1k with a decent decompressor size. Not to mention I lost two days from TG stuck at the airport in Boston, but that's another story.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, we had nothing to show at The Gathering, except perhaps a nice effect I planned to squeeze in the 1k. Which I was going to save until we did a proper packer, until Duckers/Outracks called us 30 minutes before the intro compo saying, "If you don't release something, we have to drop the compo because of the number of entries." So, with 30 minutes to do an intro, you do what you can with what you have :) .&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And, what we did was this;&amp;nbsp;&lt;a href="http://pouet.net/prod.php?which=56915"&gt;Milk by The Compo Xaviours&lt;/a&gt;&amp;nbsp;(a group name coined by the group&amp;nbsp;&lt;a href="http://www.playpsyco.com/"&gt;PlayPsyCo&lt;/a&gt;&amp;nbsp;from last year's TG, when they saved the same compo with another entry):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://pouet.net/screenshots/56915.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://pouet.net/screenshots/56915.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's the 1k content I had planned, with Decipher's C framework and a quick tune with my 4k synth. The visuals are kindof cool, so I'd like to break them down for you. Here is the code:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Vertex shader:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;varying float t2;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;void main(){&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;t2=gl_Color.x*2222222;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;gl_Position=ftransform();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="font-family: 'Times New Roman'; font-size: medium;"&gt;Fragment shader:&lt;/div&gt;&lt;div style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;varying float t2;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;float t=t2-fract(t2*.4),d,c=cos(t*.6)*4;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;vec3 r(vec3 x,float t){&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;for(float v=0.;v&amp;lt;3.;v++)t*=.8,x=vec3(cos(t)*x.x+sin(t)*x.z,cos(t)*x.z-sin(t)*x.x,x.y);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;return x;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;void main(){&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;vec3 x,a,z=vec3(0),y=r(normalize(vec3((gl_FragCoord.xy-vec2(320,180))/300,1)),c);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;for(float v=0.;v&amp;lt;3.;v+=.06){&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;x=abs(a=r(abs(z-r(&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;vec3(sin(t*.4),0,3.5+sin(t)+t*.05)// Camera&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;,c))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;-vec3(clamp(t-20,0.,1.5))// Mirror displacement&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;max(t-10,0.)*1.2// Mirror rotation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;d=min(max(max(x.x,x.y),x.z)-1,8.-length(x));&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;for(float v=0.;v&amp;lt;3.;v++){&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;x=abs(fract(a*pow(3.,v))-.5);// Subdivision&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;d=max(d,mix(&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;.17-min(min(max(x.x,x.y),max(x.x,x.z)),max(x.y,x.z)),// Cubes&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;length(x)-.6,// Spheres&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;.5-cos(t*.07)*.5&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;gl_FragColor=mix(vec4(1.1,1,1.2,1),vec4(1,1.1,1.2,1),y.y+.5)*v*.3;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if(d&amp;lt;=0)break;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;z+=y*max(d,.0001);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: 'Courier New', Courier, monospace; font-size: small;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;..unobfuscated, that is. Basically, it's the popular sphere tracing technique, but with some neat little tricks. Let's break some of it down. We start with this:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-WDjG7gf-Gio/Tb2h82o6QsI/AAAAAAAAAG8/HWllv7oHB6s/s1600/milkstart.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://2.bp.blogspot.com/-WDjG7gf-Gio/Tb2h82o6QsI/AAAAAAAAAG8/HWllv7oHB6s/s320/milkstart.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This image really only has two objects; a cube and a background sphere. These just look like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-A6SzzMJRcoQ/Tb2iR7CQhKI/AAAAAAAAAHA/rRYnA_33Vc0/s1600/milkstart.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://4.bp.blogspot.com/-A6SzzMJRcoQ/Tb2iR7CQhKI/AAAAAAAAAHA/rRYnA_33Vc0/s320/milkstart.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then, I intersect the two volumes with a repetitive cutout cube. This looks like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-5ltVjl66yE4/Tb2ilUkubxI/AAAAAAAAAHE/hj5c50pEfec/s1600/milkstart.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://4.bp.blogspot.com/-5ltVjl66yE4/Tb2ilUkubxI/AAAAAAAAAHE/hj5c50pEfec/s320/milkstart.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Simple enough. Now, do this with multiple iterations, where you decrease the size of each cutout and increase the frequency, and you have the original image. The next trick is the cube deformation, seen here:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-zR8SBC2AQqY/Tb2jAP7rk3I/AAAAAAAAAHI/uEAs7Z3CpcE/s1600/milkstart.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://4.bp.blogspot.com/-zR8SBC2AQqY/Tb2jAP7rk3I/AAAAAAAAAHI/uEAs7Z3CpcE/s320/milkstart.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is MUCH simpler than it looks, actually. Let's remove the "sponginess," for clarity:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-6LRAIIWsuIg/Tb2jeIqQuMI/AAAAAAAAAHM/kuE-TVN5Yw0/s1600/milkstart.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://3.bp.blogspot.com/-6LRAIIWsuIg/Tb2jeIqQuMI/AAAAAAAAAHM/kuE-TVN5Yw0/s320/milkstart.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this shot, it's actually quite obvious what it is that I'm doing. I'm tracing just the cube and sphere normally, except for one thing: mirroring. Imagine 3 mirrors, set on each axis, and all facing the upper-right corner. This is the entire trick. Everything you see is just a mirror of the upper-right corner (1st domain). So, this deformation is just a matter of rotating the cube. That's all :) . Camera operations still work normally, so it looks quite nice.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The next trick, if you look at the original screenshot of the prod (with the four spherical things), is that the cube separates into four more cube-like structures. This is actually the same trick as before; the mirrors. All I do is move the cube outwards diagonally, and the mirrors follow. The demoscene really is all smoke and mirrors, anyways ;) .&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My next trick explains why the objects in the main screenshot are spherical. This is simple, too. As the intro progresses, the cube cutouts actually transform into spherical cutouts. And, well, that's actually enough explanation :) . Instead of cutting out cubes, we cut out spheres. Blend from cube to sphere, and you have the main timeline for the intro.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally, we have the "multiple camera angles." Actually, we don't :) . This is the simplest part of the intro, and one of the most rewarding. Instead of cutting multiple cameras, we just create one that's very dynamic. After that, just cut &lt;i&gt;time&lt;/i&gt;&amp;nbsp;instead. The result looks like multiple angles, when in reality it's multiple instances of time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, that's it for the intro. The 1k version uses some more nasty hacks to get it smaller, but the posted code (obfuscated, of course) is exactly what made it into the actual prod. Had it been 1k, I think I'd've gladly used the&amp;nbsp;&lt;a href="http://youth-uprising.com/"&gt;Youth Uprising&lt;/a&gt;&amp;nbsp;label, but it was just too insignificant as a 2.5k I think :) .&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Speaking of YUP, I'd like to mention, we have a new member, Gunda. He released his first production at The Gathering in the demo compo,&amp;nbsp;&lt;a href="http://pouet.net/prod.php?which=56903"&gt;Nitesco&lt;/a&gt;. A cool firstie; he did all code and design, while I did the music and framework, and helped out here and there. Look forward to his next releases - he's bound to progress quite fast (as he did during the making of this prod).&lt;br /&gt;&lt;br /&gt;And finally, I released a 4k intro starter kit and seminar at TG. The kit can be found&amp;nbsp;&lt;a href="http://youth-uprising.com/tg11/"&gt;here&lt;/a&gt;&amp;nbsp;and the seminar video is&amp;nbsp;&lt;a href="http://tv.gathering.org/page/1/view/5100886"&gt;here&lt;/a&gt;. Won't say anything more about that; you can just check the links :) .&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Until next time :) .&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-1558473581811665002?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/1558473581811665002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2011/05/milk-and-compressors.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/1558473581811665002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/1558473581811665002'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2011/05/milk-and-compressors.html' title='Milk and Compressors'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Sgz7w5TQ1OY/Tb2DtJxAdzI/AAAAAAAAAG4/YDfklqrBLSc/s72-c/sadness.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-5911327802923085517</id><published>2011-02-13T22:01:00.000-08:00</published><updated>2011-02-13T22:02:18.077-08:00</updated><title type='text'>New Chiptune!!!</title><content type='html'>Hey guys, been busy the past few days with many things. One of which I think you'll quite like :) . It's my first Gameboy track featuring vocals (by &lt;a href="http://www.myspace.com/farishamusic"&gt;Farisha&lt;/a&gt;) and a proper sampled kick drum. The song is here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dl.dropbox.com/u/4646373/breathe_master.mp3"&gt;Ferris - Breathe&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is a recording straight from the Gameboy itself, plus a little mastering. Enjoy :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-5911327802923085517?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/5911327802923085517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2011/02/new-chiptune.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/5911327802923085517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/5911327802923085517'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2011/02/new-chiptune.html' title='New Chiptune!!!'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-729379091747092710</id><published>2011-01-08T00:26:00.001-08:00</published><updated>2011-01-08T00:26:31.414-08:00</updated><title type='text'>Breathing Inspiration</title><content type='html'>Ah, what to say here. Not much more to add after that title :) . I suppose I can say that YUP is hard at work on our Easter prod(s) already. Been feeling rather inspired and motivated. Hopefully it turns out alright!&lt;br /&gt;&lt;br /&gt;Back to slaving over code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-729379091747092710?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/729379091747092710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2011/01/breathing-inspiration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/729379091747092710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/729379091747092710'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2011/01/breathing-inspiration.html' title='Breathing Inspiration'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-3795557803621046656</id><published>2010-12-28T03:59:00.000-08:00</published><updated>2010-12-28T04:09:28.334-08:00</updated><title type='text'>DMG, How I Loveth Thee</title><content type='html'>While working on our upcoming C64 demo (upcoming as in, the one we've had in the works for about a year, and it may be another year before the dang thing's finished, hehe), I realized all the SID tunes I had done myself were rather mediocre. I started looking for other sources of inspiration (aside from the usual C64 prods I've seen far too many times). What did I find? Gameboy demos. They had the flavor of C64 demos but a nicer pace, and the sound had something special to me. This is not to say I'd give up on the C64 prod - far from it. But of course, I started looking into this alien system.&lt;br /&gt;&lt;br /&gt;Codename &lt;b&gt;DMG&lt;/b&gt;&amp;nbsp;- &lt;b&gt;D&lt;/b&gt;ot &lt;b&gt;M&lt;/b&gt;atrix &lt;b&gt;G&lt;/b&gt;ame, this little beast boasts a 25x25 character screen (similar to that of the C64), something like 40 sprites, 4-colors with a square pixel ratio, and my personal favorite: 4-channel audio. More specifically, the audio consists of two pulse wave generators, a sampler-like wavetable channel, and a white noise generator. This sure doesn't sound like much, especially compared to the extensive capabilities of the C64's SID channels, but as I said before, it had something special.&lt;br /&gt;&lt;br /&gt;I started looking into more of this DMG chip music stuff and found a few artists I really liked, including cTrix (whom I had met at @Party, though hadn't realized his influence on the modern chip scene until now), Nordloef, Sabrepulse, Anamanaguchi, and others. Each of these artists brought something unique to the table, but everything marked "LSDj" still caught my eye. So, I looked into that aswell.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.littlesounddj.com/lsd/"&gt;&lt;b&gt;LSDj&lt;/b&gt;&amp;nbsp;- &lt;b&gt;L&lt;/b&gt;ittle &lt;b&gt;S&lt;/b&gt;ound &lt;b&gt;Dj&lt;/b&gt;&lt;/a&gt;&amp;nbsp;is a DMG program that allows you to produce music in a tracker-style interface on the system itself, which I thought was really cool. Not to mention that I had started my demoscene music career with good old Modplug Tracker (now called&amp;nbsp;&lt;a href="http://openmpt.org/"&gt;OpenMPT&lt;/a&gt;), and I really do love trackers in general :) . I grabbed a DMG emulator and the LSDj demo and, within hours, had fell in love. At the risk of sounding like a cheesy 3AM infomercial, this program was a total dream to work with; I found the interface navigation to be very intuitive and the features of the program were impressively extensive. Pictures:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.littlesounddj.com/lsd/shots/instr.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.littlesounddj.com/lsd/shots/instr.gif" /&gt;&lt;/a&gt;&lt;a href="http://www.littlesounddj.com/lsd/shots/phrase.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.littlesounddj.com/lsd/shots/phrase.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;&lt;i&gt;Pictures from&amp;nbsp;&lt;a href="http://www.littlesounddj.com/lsd/"&gt;http://www.littlesounddj.com/lsd/&lt;/a&gt;&amp;nbsp;.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The closest experience I can relate it to is actually my 4K synth, Sonant 2, which is nice, since the workflow in my synth was designed for my needs specifically. Being that they were so similar, I had picked up the software quite rapidly. Within days I had my own full copy of LSDj and a DMG USB cart in the mail :) .&lt;br /&gt;&lt;br /&gt;The results? Well, among others,&amp;nbsp;&lt;a href="http://dl.dropbox.com/u/4646373/sidchain.mp3"&gt;Sidchain&lt;/a&gt;&amp;nbsp;is a song that I'm quite proud of. For using LSDj for less than two weeks, I'm very much happy with what I've accomplished. In addition, it looks like I'll be playing my tracks at a little house party on the 30th, which is very exciting for me :) . It will be my first electronic performance ever, and I must say I'm honored to go into battle wielding the infamous grey brick. Obviously, pictures/videos (whichever I end up with, hehe) will be posted :) .&lt;br /&gt;&lt;br /&gt;Until next time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-3795557803621046656?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/3795557803621046656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2010/12/dmg-how-i-loveth-thee.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/3795557803621046656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/3795557803621046656'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2010/12/dmg-how-i-loveth-thee.html' title='DMG, How I Loveth Thee'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-543460872530908366</id><published>2010-11-18T12:06:00.000-08:00</published><updated>2010-11-18T12:11:18.818-08:00</updated><title type='text'>Finally Broke Five</title><content type='html'>4:56.21s. That's my new record for rubik's cube blindfolded :) . This is a pretty nice achievement for me, though it's not exactly competitive. For those readers who don't know what this time means, it means that in under five minutes I memorized a rubik's cube, donned a blindfold, and solved it. I'm quite proud!&lt;br /&gt;&lt;br /&gt;The cube is broken down into corner and edge pieces (as the centers never move relative to each other). There are then 12 edge pieces and 8 corner pieces. Normally, when solving the cube, you use a layer-based approach. This means you don't go side-by-side, but instead, solve the first side and its edges, then fill in the middle slice, then solve the last layer. In my speed case, I use a &lt;b&gt;CFOP&lt;/b&gt; (&lt;b&gt;C&lt;/b&gt;ross, &lt;b&gt;F&lt;/b&gt;2L, &lt;b&gt;O&lt;/b&gt;rient last layer, &lt;b&gt;P&lt;/b&gt;ermute last layer) approach. For more information you should check out&amp;nbsp;&lt;a href="http://cubefreak.net/speed/cfop/index.html"&gt;this link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For blindfolded solving, though, the method for actually solving the cube is much simpler. It relies on basic principles of the cube and is intended to minimize the amount of thinking required to actually solve it, in order to improve memorization and retention. My blindfold method goes through simple steps: First, I &lt;i&gt;orient&lt;/i&gt; the corners. This means I make sure they're either facing up or down. After that, I &lt;i&gt;permute&lt;/i&gt; the corners, which places them in their respective positions. After that, I orient and permute the edges in one step. After all is said and done, the only thing I'm left with is possibly to re-orient an edge or two, and fix &lt;i&gt;parity&lt;/i&gt;, or a special case where two edges and two corners must be moved at the same time, when necessary.&lt;br /&gt;&lt;br /&gt;For you cube buffs out there, this method goes like this: Commutators fix corner orientation, then I use the Pochmann method for corners (but shooting to UFR instead of RFD using the normal Y-Perm). If there's an odd parity, at this point, I also execute a Y-Perm, swapping UBL and UFR and fixing the UL and UB edges. I resolve this later. Then, I use Pochmann's M2 method to fix edges. If we had parity earlier, I do this algorithm: M2DS2-(Y-Perm)-S2D'. After that, I finish off possible edge orientation left over from shooting to the M slice during M2 or edges that may have been correctly placed but oriented wrong in the beginning.&lt;br /&gt;&lt;br /&gt;Interestingly, I memorize all of this information backwards. That is, I memorize my edges first, then corner permutation, then corner orientation. This is because of the way I memorize them. I memorize edges in pairs of letters, and as I go along, these pairs are converted into words. At the end of my edge memorization, I have a sentence (usually nonsense) that I'm unlikely to forget. Then, corner permutation is a sequence of numbers. I can't really leave this in my head, but I can repeat it to myself while I memorize and solve the next part. Corner orientation is memorized visually, either in pairs of corners, where one needs to be turned clockwise and the other counterclockwise, or as triplets where all three corners need to be turned clockwise or counterclockwise. If I must, I tap their faces to help me. This way, the information I am most likely to forget is taken care of first.&lt;br /&gt;&lt;br /&gt;This system, though a bit complicated, works out well for me. I hope to improve it and improve my memory over time.&lt;br /&gt;&lt;br /&gt;On another note, YUP has released two prods this month! Pics:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://pouet.net/screenshots/56211.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="159" src="http://pouet.net/screenshots/56211.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://pouet.net/screenshots/56293.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://pouet.net/screenshots/56293.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The top one was a co-op with&amp;nbsp;&lt;a href="http://www.outracks.net/"&gt;Outracks&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.kvasigen.demoscene.no/"&gt;Kvasigen&lt;/a&gt;, and an invite to The Gathering 2011 in Hamar, Norway. You can download that&amp;nbsp;&lt;a href="http://pouet.net/prod.php?which=56211"&gt;here on Pouet&lt;/a&gt;. The other one was a small noise demo. For some reason tons of people are producing TV noise effects, for fun I suppose :) . We did one, and yes, it was fun!! That's&amp;nbsp;&lt;a href="http://pouet.net/prod.php?which=56293"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;All for now, see you guys :) .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-543460872530908366?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/543460872530908366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2010/11/finally-broke-five.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/543460872530908366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/543460872530908366'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2010/11/finally-broke-five.html' title='Finally Broke Five'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-4237487980392444339</id><published>2010-10-13T22:03:00.000-07:00</published><updated>2010-10-13T22:03:18.660-07:00</updated><title type='text'>Painting Revisited</title><content type='html'>Over a year has passed since I've painted (mostly for emotional reasons), but today, I had a little taste of what I've missed. I must admit that I'm a bit of an oil fanboy; however, living the poor college life has forced me to resort to a mix of ink and watercolors, but it's definitely enough to get me by until I can reunite with my oils back in Idaho.&lt;br /&gt;&lt;br /&gt;So far all I've done is some test subjects (creepy animals, Victorian-era furniture, twisted trees), but it's gone quite well. They have more of an illustrator quality than I would like, but I'm still certainly pleased with my gimped medium. Not to say watercolors are lesser than other media, per say, but I just don't feel quite at home with them :) . Nevertheless, the feeling has definitely been missed, and I'm quite pleased.&lt;br /&gt;&lt;br /&gt;Pictures up soon when I get some decent works finished!! Now to sleep and await the arrival of my midi keyboard (&lt;a href="http://www.m-audio.com/products/en_us/Axiom25New.html"&gt;M-Audio Axiom 25&lt;/a&gt;, an older [special-edition] version), here:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://img3.musiciansfriend.com/dbase/pics/products/2/8/1/575281.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="185" src="http://img3.musiciansfriend.com/dbase/pics/products/2/8/1/575281.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span class="Apple-style-span" style="color: #474b4e; font-family: Georgia, Times, serif; font-size: 11px; line-height: 15px;"&gt;&lt;em&gt;&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;Image from &lt;a href="http://www.kvraudio.com/forum/viewtopic.php?t=238861"&gt;http://www.kvraudio.com/forum/viewtopic.php?t=238861&lt;/a&gt;.&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I'm also waiting for some clothes and other random things :) . Until next time!!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-4237487980392444339?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/4237487980392444339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2010/10/painting-revisited.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/4237487980392444339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/4237487980392444339'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2010/10/painting-revisited.html' title='Painting Revisited'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-1727400594292390510</id><published>2010-09-18T09:33:00.000-07:00</published><updated>2010-09-18T09:33:45.941-07:00</updated><title type='text'>Thoughts</title><content type='html'>Well, in the last post, I promised some Studio4 screenshots, so let's get that up and out of the way :) .&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_HgJpBCw7XIg/TJTnl6w8grI/AAAAAAAAAFU/PEtJ3YQdx6k/s1600/s4ss.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_HgJpBCw7XIg/TJTnl6w8grI/AAAAAAAAAFU/PEtJ3YQdx6k/s320/s4ss.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;OK, so maybe just one screenshot ;) . This is the tool in action, and you can see that's our 4K "Ethos" (which can be downloaded&amp;nbsp;&lt;a href="http://pouet.net/prod.php?which=55228"&gt;here&lt;/a&gt;). It's a nice little tool, though it doesn't support our latest developments, so a lot of it will actually be re-done. And, as far as SNESAsm goes, it's pretty much dead.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since my last post I've moved to Boston, Massachusetts, to study computer science at&amp;nbsp;&lt;a href="http://wit.edu/"&gt;Wentworth Institute of Technology&lt;/a&gt;. It's a pretty sweet place, and I'm loving the college life. And, as always, I have tons of small projects to keep me sane through it all :) . One of which is a raycast engine (among other 3D works) on a certain hacked Casio calculator; the model of which I must keep quiet because I plan to be the first to release a demo for it. Speaking of which, we already have three other projects that are on track to be released this Easter - the forementioned C64 demo, a project led by Decipher, and another one I can't really speak much of ;) . Gotta love demoscene secrets!!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another of my projects lately has been music production. Throughout my demoscene career I've done tons of songs, but ever since the release of&amp;nbsp;&lt;a href="http://pouet.net/prod.php?which=51461"&gt;Rarefaction&lt;/a&gt;, all the music I've released has been in 4K's. Coincidence? No, this was on purpose. At NVScene Gloom and Gargaj told me I needed to learn mastering, and I've spent two years now doing so in the background of my other projects. I'm getting there, I think, but as always it still needs a lot of work. It's a fun process though, and I'm always game for learning new things. Someday I hope to release an EP actually, though that's in the somewhat distant future. For a sample, you can listen to&amp;nbsp;&lt;a href="http://dl.dropbox.com/u/4646373/ambient01.mp3"&gt;this track&lt;/a&gt;&amp;nbsp;and let me know what you think :) .&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's all for now, see you guys.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-1727400594292390510?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/1727400594292390510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2010/09/thoughts.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/1727400594292390510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/1727400594292390510'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2010/09/thoughts.html' title='Thoughts'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_HgJpBCw7XIg/TJTnl6w8grI/AAAAAAAAAFU/PEtJ3YQdx6k/s72-c/s4ss.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-7328638985604382787</id><published>2010-05-12T17:14:00.000-07:00</published><updated>2010-05-12T17:16:38.003-07:00</updated><title type='text'>2010 Thus Far</title><content type='html'>A list of YUP updates:&lt;br /&gt;&lt;a href="http://pouet.net/prod.php?which=54659"&gt;Magnus&lt;/a&gt; - 4k intro - 1st at TG10 combined intro compo (this means two first-place 4k intros in a row; watch out &amp;nbsp;;) )&lt;br /&gt;&lt;a href="http://pouet.net/prod.php?which=54663"&gt;JenterErForetrukket&lt;/a&gt; - 1k intro - 2nd at TG10 combined intro compo&lt;br /&gt;&lt;a href="http://pouet.net/prod.php?which=54552"&gt;Simulacra&lt;/a&gt; - 4k intro - no party&lt;br /&gt;&lt;br /&gt;And, a list of current projects:&lt;br /&gt;&lt;b&gt;Studio4&lt;/b&gt; - 4k intro development tool, all-in-one. Screenshots and development progress will be posted when I'm less busy.&lt;br /&gt;&lt;b&gt;SNESAsm&lt;/b&gt; - A cute little IDE I started about a year ago for SNES development. I abandoned the project after moving to C64 (SNES was too complicated for me at the time, sadly) and realizing that things like RichEdit controls are a total pain to work with just with C++ and WinAPI directly. I've restarted the project using VC++ (which I've since switched to), and it's funny; I've made exactly as much progress on the tool in a night using .NET and forms as it took me over a week to do last year with WinAPI and GCC. Haha. To see progress I made before abandoning, you can check out &lt;a href="http://www.dbfinteractive.com/forum/index.php/topic,4095.0.html"&gt;this link&lt;/a&gt;, and I'll probably keep updating stuff there...but you'll just have to wait and see how it goes :) .&lt;br /&gt;...And, there are a few other projects, too, but they're minor for now and school sucks so not alot of development time.&lt;br /&gt;&lt;br /&gt;Anyways, sorry to be so brief for now, but I've got things to do :) .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-7328638985604382787?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/7328638985604382787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2010/05/2010-thus-far.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/7328638985604382787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/7328638985604382787'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2010/05/2010-thus-far.html' title='2010 Thus Far'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-1382999845387772204</id><published>2010-02-21T20:04:00.000-08:00</published><updated>2010-02-21T20:04:34.507-08:00</updated><title type='text'>Update</title><content type='html'>So, it's been almost a month since I last posted. Due to incredible business (mainly from involvement in my high school's FIRST Robotics team) I haven't had any time to work on my microcontroller business (besides making some blinking lights. Pfft). On a lighter note, however, I resurrected an old 1K intro, which I plan to release when I go to Norway for&amp;nbsp;&lt;a href="http://gathering.org/"&gt;The Gathering&lt;/a&gt;&amp;nbsp;this year :) .&lt;br /&gt;&lt;br /&gt;The progress has been VERY good. Originally, it had a softsynth (the first on Earth for a 1K), but it only played the same instrument (saw wave) at two octaves; a rather cheap trick to get multiple patches. So, I tried midi. About 100 bytes smaller and now 4 instruments (including a percussion track!), midi is DEFINITELY the way to go in 1K. I suppose if you had no visuals and just played a song you could get away with doing a pretty cool little synthesizer, but really - what good are 1K's with no animation :) ?&lt;br /&gt;&lt;br /&gt;I've also been doing some hardcore pe file hacking. PE - Portable Executable - is the Windows .exe format. It's bloated, crappy, and can be described with many other colorful words...the worst part is, much of the data (30-40%!!!) is even skipped by the Windows loader, rendering it useless.&lt;br /&gt;&lt;br /&gt;Useless? Or, is it?&lt;br /&gt;&lt;br /&gt;Not really :) . Anyone who's done anything in Assembler should know that we can squeeze a few opcodes here and there throughout the header :) . By hacking like this with the help of&amp;nbsp;&lt;a href="http://www.ollydbg.de/"&gt;a nice debugger&lt;/a&gt;&amp;nbsp;(thanks, Mentor!), I'm now down to 269 bytes, which is fully XP/Vista compatible (haven't yet tested 7, but it's likely to work), and about 40% nop's. Doesn't seem too exciting (269 bytes is still pretty big it seems....guys have gotten a PE file into 97 bytes, but this relies on the fact that when it's loaded to memory all data after it for about 4 kilobytes are just zeros, which "replaces" data that SHOULD be in the PE file. Also, they clear a major chunk from the file [about 144 bytes], which doesn't work with Vista, so no go), but I have some really good ideas to fill it.&lt;br /&gt;&lt;br /&gt;What's this for?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Juicer&lt;/b&gt;. A 1K-intro compressor for Windows. Decipher/YUP and I started the project over the summer and I got hung up doing this PE hacking...worked just fine on the retry, so I suppose it's back in business :) . It'll have to be halted to keep up with all the demo work we're doing for Breakpoint and TG in April, but I'd bet the guys developing&amp;nbsp;&lt;a href="http://www.crinkler.net/"&gt;Crinkler&lt;/a&gt;&amp;nbsp;(and the secret Crinkler 1K ;) ) would appreciate some nice competition.&lt;br /&gt;&lt;br /&gt;'Till next time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-1382999845387772204?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/1382999845387772204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2010/02/update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/1382999845387772204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/1382999845387772204'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2010/02/update.html' title='Update'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-3526111807298491450</id><published>2010-01-23T22:28:00.000-08:00</published><updated>2010-01-23T22:29:34.368-08:00</updated><title type='text'>Adventures in LPT Part II.V</title><content type='html'>I know, I keep bumping back part III, mainly because of school and other projects.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Basically, here's where I am now:&lt;/b&gt; The parallel port sucks in Windows. It's impossible to poll the C64's serial communication fast enough in any multitasking OS, which is a huge setback.&lt;br /&gt;&lt;br /&gt;However.&lt;br /&gt;&lt;br /&gt;I've been looking into using a microcontroller board so that a MCU can handle the serial communications, and a Windows program will run a 6510 emulator, thus the entire apparatus will emulate a 1541 disk drive. This will still use the&amp;nbsp;parallel port, but everything should work correctly...if not, I still get a microcontroller to play with :) .&amp;nbsp;After I get that working (if it's even possible) the project will move to USB. Basically, it'll be&amp;nbsp;like &lt;a href="http://rdist.root.org/2009/01/21/introducing-xum1541-the-fast-c64-floppy-usb-adapter/"&gt;this guy's project&lt;/a&gt;, except backwards and&amp;nbsp;I plan to try to get it working all on one ATMega168 MCU. This should actually be pretty simple, or totally not depending on how fast everything is (as I know the USB interface will run in low-speed mode; which is still pretty fast for what we're doing though).&lt;br /&gt;&lt;br /&gt;Hopefully all this will work, and hopefully I'll get some money with which to buy the hardware :) .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-3526111807298491450?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/3526111807298491450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2010/01/adventures-in-lpt-part-iiv.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/3526111807298491450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/3526111807298491450'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2010/01/adventures-in-lpt-part-iiv.html' title='Adventures in LPT Part II.V'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-1287777678583227805</id><published>2010-01-23T07:02:00.000-08:00</published><updated>2010-01-23T07:11:35.580-08:00</updated><title type='text'>What? A Short Post??</title><content type='html'>Surprising, I know :P .&lt;br /&gt;&lt;br /&gt;Anyways, I'm kinda nervous. In fifteen minutes I take my SAT (for you europeans out there, this is the Scholastic Aptitude Test; a big general college admissions test). I'm a bit late taking mine, but I'm taking it nonetheless. I feel confident that I'll do well, but how well is important; as I applied to MIT :) . Nevertheless, wish me luck!! If all goes well I'll definitely post more here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-1287777678583227805?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/1287777678583227805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2010/01/what-short-post.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/1287777678583227805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/1287777678583227805'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2010/01/what-short-post.html' title='What? A Short Post??'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-5918412721445546317</id><published>2010-01-19T21:00:00.000-08:00</published><updated>2010-01-19T21:06:42.212-08:00</updated><title type='text'>C64 Advantage</title><content type='html'>Any retro gamer understands the importance of one thing - &lt;strong&gt;The Joystick&lt;/strong&gt;. U/D/L/R &amp;amp; Fire, what more could one ask for?? Well, I needed one for my C64. My first plan was to rip apart an old SNES controller (My SNES, mind you, is probably my most beloved old system, so this would be painful for me..), and use the d-pad and one of the buttons.&amp;nbsp;So, I looked through my game controller cabinet, and found something even better...&lt;br /&gt;&lt;br /&gt;Anyone ever heard of something called the &lt;em&gt;NES Advantage?&lt;/em&gt; It's basically a beefed-up NES controller, with a joystick(!!) to replace the d-pad and some features like turbo and slow button mashing. Well, it just so happens I had one laying around :) .&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://sinfoniafantastica.files.wordpress.com/2007/07/a_nes-advantage.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" mt="true" src="http://sinfoniafantastica.files.wordpress.com/2007/07/a_nes-advantage.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;em&gt;&lt;span style="font-size: xx-small;"&gt;Image from &lt;a href="http://sinfoniafantastica.wordpress.com/2009/03/10/la-evolucion-de-los-controles/"&gt;http://sinfoniafantastica.wordpress.com/2009/03/10/la-evolucion-de-los-controles/&lt;/a&gt; . I also have an SNES equivalent...but that's beside the point :) .&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now, like all of my systems, I love my NES dearly, so I didn't want to open this&amp;nbsp;thing and just ruin it...besides, wouldn't it be cooler if I added a DB9 port, making it compatible with &lt;em&gt;both&lt;/em&gt; systems? Yeah, I thought so too :) .&lt;br /&gt;&lt;br /&gt;It just so happens that the pinout and functionality of the C64 joystick port is SUPER simple. Simply ground any of the 5 input pins (up, down, left, right, and fire), and the button's pressed. This is perfect for any controller to be modded :) . The pinout on the left (DB9) shows the pinout for this port:&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.zimmers.net/anonftp/pub/cbm/documents/projects/interfaces/plus4joy/figure1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="232" mt="true" src="http://www.zimmers.net/anonftp/pub/cbm/documents/projects/interfaces/plus4joy/figure1.gif" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;&lt;em&gt;&lt;a href="http://zimmers.net/anonftp/pub/cbm/documents/projects/interfaces/plus4joy/plus4joy.html"&gt;http://zimmers.net/anonftp/pub/cbm/documents/projects/interfaces/plus4joy/plus4joy.html&lt;/a&gt; ; Thanks Zimmers :) .&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And so it began. First, I had to open the controller, which actually took more work than I had expected...turns out they used to put screws under the feet for these things :P . Blast.&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_HgJpBCw7XIg/S1aLDdvFHOI/AAAAAAAAADo/oRJInDRJHXM/s1600-h/0117002017.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" mt="true" src="http://3.bp.blogspot.com/_HgJpBCw7XIg/S1aLDdvFHOI/AAAAAAAAADo/oRJInDRJHXM/s320/0117002017.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The layout of the two boards in here were pretty simple (at least for my purposes). I really didn't care much about the extra features of the controller; I just wanted the joystick to work and use the A-button for Fire. This way, I really just had to solder the right wires - one for ground, and five for the inputs. For the connection wires, I just spliced an old Ethernet cable, then just crimped the DB9 connector pins to one end and popped them into the connector:&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_HgJpBCw7XIg/S1aLp6W_wUI/AAAAAAAAADw/YKdTk2dfals/s1600-h/0117002027.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" mt="true" src="http://3.bp.blogspot.com/_HgJpBCw7XIg/S1aLp6W_wUI/AAAAAAAAADw/YKdTk2dfals/s320/0117002027.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1aL04g5BqI/AAAAAAAAAD4/0gxQM6tSXCU/s1600-h/0117002058.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" mt="true" src="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1aL04g5BqI/AAAAAAAAAD4/0gxQM6tSXCU/s320/0117002058.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;With that end of the cable taken care of, I remembered I'd need to cut out part of the case to mount the connector. I had my friend Stephen help me with that (as I'd never used a dremel before)...Honestly, he just did it for me :P . Turned out a bit sketchy, but hey - it was his first day with the tool, so I'd say that's pretty good :) .&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_HgJpBCw7XIg/S1aMYoWXpUI/AAAAAAAAAEA/bWbeEHv3Duw/s1600-h/0117002204.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" mt="true" src="http://2.bp.blogspot.com/_HgJpBCw7XIg/S1aMYoWXpUI/AAAAAAAAAEA/bWbeEHv3Duw/s320/0117002204.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Then came the soldering. Turns out, the U/D/L/R controls were all labelled on the PCB, which made that part rediculously simple; the Fire connections were found by sight and confirmed with a multimeter. Once soldered, the rest was just reassembling everything:&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_HgJpBCw7XIg/S1aMtFz3RiI/AAAAAAAAAEI/sJ41_0Akx74/s1600-h/0118000117.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" mt="true" src="http://4.bp.blogspot.com/_HgJpBCw7XIg/S1aMtFz3RiI/AAAAAAAAAEI/sJ41_0Akx74/s320/0118000117.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1aMwe4TgBI/AAAAAAAAAEQ/ZAA4lqqgVUg/s1600-h/0118000129.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" mt="true" src="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1aMwe4TgBI/AAAAAAAAAEQ/ZAA4lqqgVUg/s320/0118000129.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;So, very easy :) . Here's what it looked like just before I tested it (the new port is on the left; the black cables on the right&amp;nbsp;are the original NES inputs):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_HgJpBCw7XIg/S1aNOMU-eJI/AAAAAAAAAEY/g0WrDecgKVY/s1600-h/0118000137.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" mt="true" src="http://3.bp.blogspot.com/_HgJpBCw7XIg/S1aNOMU-eJI/AAAAAAAAAEY/g0WrDecgKVY/s320/0118000137.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;...and here's what it looked like as it worked first try :D !!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1aNTpi6oZI/AAAAAAAAAEg/7IRvlJNKrGw/s1600-h/0118000143.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" mt="true" src="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1aNTpi6oZI/AAAAAAAAAEg/7IRvlJNKrGw/s320/0118000143.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Don't you just love the sweet smell of soldering success :) ? By the&amp;nbsp;way, you can't really tell because of my crappy phone camera...but the game I'm playing there is&amp;nbsp;called Delta :) . You can find details here: &lt;a href="http://en.wikipedia.org/wiki/Delta_(video_game)"&gt;http://en.wikipedia.org/wiki/Delta_(video_game)&lt;/a&gt; . If you like&amp;nbsp;retro games, especially side-shooters and space games, check this one out; it's definitely one of my favorite arcade-style games ever. Well, I suppose that's all for now...see you next time :) !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-5918412721445546317?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/5918412721445546317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2010/01/c64-advantage.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/5918412721445546317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/5918412721445546317'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2010/01/c64-advantage.html' title='C64 Advantage'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_HgJpBCw7XIg/S1aLDdvFHOI/AAAAAAAAADo/oRJInDRJHXM/s72-c/0117002017.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-605656676442262951</id><published>2010-01-18T19:24:00.000-08:00</published><updated>2010-01-23T06:58:38.874-08:00</updated><title type='text'>Hardware Hacking 101</title><content type='html'>&lt;em&gt;&lt;strong&gt;DISCLAIMER: &lt;/strong&gt;Yes, this IS another&amp;nbsp;post about my C64 :P Get over it :) .&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;My C64, recently, has been overheating, which is pretty unfortunate...so I wanted to fix it :) .&lt;br /&gt;&lt;br /&gt;And by the way, my girlfriend Courtney took a couple of pictures while I was working on it and I like them :) . So, here those are:&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_HgJpBCw7XIg/S1Uijj8ZnfI/AAAAAAAAACY/63EI97Hc26Q/s1600-h/0111001959.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://3.bp.blogspot.com/_HgJpBCw7XIg/S1Uijj8ZnfI/AAAAAAAAACY/63EI97Hc26Q/s320/0111001959.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_HgJpBCw7XIg/S1UiksKNtzI/AAAAAAAAACg/asXxN6JsSVA/s1600-h/0111002203.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://3.bp.blogspot.com/_HgJpBCw7XIg/S1UiksKNtzI/AAAAAAAAACg/asXxN6JsSVA/s320/0111002203.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Anyways, back to the Commodore. I opened 'er up and started feeling which chips might be the ones getting hot and causing the screen to fill with random characters. I knew it was obviously one that shares the same data bus as the VIC (yeah, THAT narrows it down, considering they all share the same bus :P). At first, I suspected&amp;nbsp;the PLA, since that chip seems like a pretty common one to fail...however, that chip was the coolest one there!!&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-size: xx-small;"&gt;On later inspection, I noticed the PLA was actually made 5 years after the rest of the system, which means it was replaced at some point.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;To my surprise, it was the SID. Also, the CPU and CIA chips were a bit warm, but not enough to really worry about it. So, how to fix it?&lt;br /&gt;&lt;br /&gt;I could replace the chip, but it sounded just fine when it ran. Not garbled, all 3 voices played correctly...this seemed fine. Then I checked my power supply, since I thought it might be pumping out too much voltage for the system. Foiled again!! Both the DC5V and the AC9V outputs were consistently putting out their ratings (with an error margin of about 1/100th of a volt). I was actually pretty happy about this, since I'd hate to have to replace anything :) .&lt;br /&gt;&lt;br /&gt;Yet the problem was still there...So I decided to go a modern route: add a fan :) . I had a small DC12V fan lying around from ripping apart dead computers at some point. Then, I just had to figure out where to mount it and where to wire it...And on top of that, adding a fan gave me a green light to do some other aesthetic mod's to the machine :) . More on those later...here's the fan I wanted to use:&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1UjZ40q5bI/AAAAAAAAACo/uMNMTCL1Q9g/s1600-h/0113002055.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1UjZ40q5bI/AAAAAAAAACo/uMNMTCL1Q9g/s320/0113002055.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;As it turns out, I figured I could steal some power from the SID for the fan. This should drop the voltage to the chip, which would be good since overheating is usually a sign of too much power input. Also, the fan would pump some air through the system, which would be good for the other warm chips aswell.&lt;br /&gt;&lt;br /&gt;I checked the pinouts for the SID. I got them from my copy of the Commodore 64 Programmer's Reference Guide, but to show you, I also found this one on Wikipedia:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/3/36/MOS6581.svg/301px-MOS6581.svg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" ps="true" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/36/MOS6581.svg/301px-MOS6581.svg.png" width="251" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The chip has one ground lead (GND; pin 14)&amp;nbsp;and two voltage input leads: VCC (pin 25) and VDD (pin 28). I checked the voltages on these, and VCC is for the logic circuits, running at 5V. VDD is for the rest of the chip, and it runs at 12V.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I turned the C64 on and touched the fan first to GND and VDD, since my fan was rated at 12V. &lt;strong&gt;BAD IDEA&lt;/strong&gt;. The screen went brighter and there were weird characters all over the screen...apparently this line is shared with the VIC's voltage input, so by somewhat shorting this line, the VIC seemed to get overloaded. I could be completely wrong with what really happened, but this explanation makes sense to me :) .&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;So, I reset the system - nothing broken, whew. So I tried it again :) . Don't worry; I used the 5V VCC this time...success :) . C64 still ran fine, and the fan went at a nice (and quiet) speed. So, I left the C64 going with clips holding the wires in place, and the fan just sitting on top of the SID for about an hour. Usually, the machine craps out in about 20 minutes, but not this time!! It lasted the full hour, with the SID still at a decent temperature :) Ladies and gentlemen, we've solved our problem :D .&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Now for those aesthetic mod's I mentioned earlier :) . My main desktop is black with blue lights...see where I'm goin' with this ;) ? Why not make them match? I went out and bought some semi-gloss black spraypaint (I chose semi-gloss after a long internal debate between high gloss and flat black :P), and some blue painter's tape. I figured I'd start the painting first since I could do everything else as it dries.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1UhgJYVDPI/AAAAAAAAACI/diiqS8DfeQk/s1600-h/0113001743.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1UhgJYVDPI/AAAAAAAAACI/diiqS8DfeQk/s320/0113001743.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I have to admit that taping off the two C64 logos and the model sticker on the bottom of the case was pretty annoying and/or difficult to do...but it was worth it :)&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The LED replacement was pretty trivial, so no need for the details...just a picture :) :&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1Uh8KXtqjI/AAAAAAAAACQ/l7qoyT3rqVo/s1600-h/0113001915.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1Uh8KXtqjI/AAAAAAAAACQ/l7qoyT3rqVo/s320/0113001915.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify" class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="center" style="text-align: justify;"&gt;Blue LED's kick so much tuchus :D .&lt;br /&gt;&lt;/div&gt;&lt;div align="center" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="center" style="text-align: justify;"&gt;Now, when I installed the fan, I ended up just soldering the fan wires directly to the pins of the SID. I figured it'd be the right thing to do since my test had the wires held there anyways :) . Here's how it looked running without the case (I couldn't resist; I had to play some games while the case dried!!):&lt;br /&gt;&lt;/div&gt;&lt;div align="center" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1UjoXish5I/AAAAAAAAACw/8Pjf2B17A-k/s1600-h/0113002025.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1UjoXish5I/AAAAAAAAACw/8Pjf2B17A-k/s320/0113002025.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="center" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="center" style="text-align: justify;"&gt;Next I just had to permanently mount the fan. I figured I'd just hot glue it on top of the chips that it was already resting on :) . This would be quick and easy...so I taped it down and took care of that. Oh, and one more thing - at some point when I was prodding around with a multimeter I had it on a DC setting instead of AC, and it blew the C64's fuse :P . Anxious to get it back together and working again, I ended up just bridging the connection by soldering a normal wire to it...&lt;strong&gt;NEVER FOLLOW THIS EXAMPLE&lt;/strong&gt;. Hehe :) .&lt;br /&gt;&lt;/div&gt;&lt;div align="center" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1Uk0GZlRmI/AAAAAAAAAC4/ya4dTv9EHCg/s1600-h/0114001544.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://1.bp.blogspot.com/_HgJpBCw7XIg/S1Uk0GZlRmI/AAAAAAAAAC4/ya4dTv9EHCg/s320/0114001544.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_HgJpBCw7XIg/S1Uk1ANLu8I/AAAAAAAAADA/f_PZ5wVE-eU/s1600-h/0114001606.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://3.bp.blogspot.com/_HgJpBCw7XIg/S1Uk1ANLu8I/AAAAAAAAADA/f_PZ5wVE-eU/s320/0114001606.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="center" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="center" style="text-align: justify;"&gt;The rest of the project was pretty much just reassembling and some minor details...then testing, and still to this day the C64's been functioning happily :) .&lt;br /&gt;&lt;/div&gt;&lt;div align="center" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_HgJpBCw7XIg/S1UlnnI8TDI/AAAAAAAAADI/iG_W8r4Flvk/s1600-h/0114001504.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_HgJpBCw7XIg/S1UlnnI8TDI/AAAAAAAAADI/iG_W8r4Flvk/s320/0114001504.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_HgJpBCw7XIg/S1UlrI6WoRI/AAAAAAAAADQ/WPO8SUUOIbk/s1600-h/0114001525.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_HgJpBCw7XIg/S1UlrI6WoRI/AAAAAAAAADQ/WPO8SUUOIbk/s320/0114001525.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_HgJpBCw7XIg/S1UlsEjuFLI/AAAAAAAAADY/7Dlb-lIjorI/s1600-h/0114001613.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_HgJpBCw7XIg/S1UlsEjuFLI/AAAAAAAAADY/7Dlb-lIjorI/s320/0114001613.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_HgJpBCw7XIg/S1UltPZauaI/AAAAAAAAADg/pOPALiwFjBw/s1600-h/0114001613a.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_HgJpBCw7XIg/S1UltPZauaI/AAAAAAAAADg/pOPALiwFjBw/s320/0114001613a.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="center" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="center" style="text-align: justify;"&gt;As you can see, the mod was pretty straightforward and went really nicely. I mean, as far as mod's go, it's pretty amateur; but I solved the problem and really enjoyed doing it. Something about playing with code or wires or anything like that just gets me...expect some more mod's in the future to my C64 and my other systems I have laying around :) . Until next time!!&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-605656676442262951?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/605656676442262951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2010/01/hardware-hacking-101.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/605656676442262951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/605656676442262951'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2010/01/hardware-hacking-101.html' title='Hardware Hacking 101'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_HgJpBCw7XIg/S1Uijj8ZnfI/AAAAAAAAACY/63EI97Hc26Q/s72-c/0111001959.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-238920683878189973</id><published>2010-01-07T07:03:00.000-08:00</published><updated>2010-01-19T20:32:58.126-08:00</updated><title type='text'>Some GLSL Wizardry</title><content type='html'>I was browsing through my pictures at some point and I came accross an interesting one:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_HgJpBCw7XIg/S0X1yQDWK5I/AAAAAAAAACA/9OUReEodXsY/s1600-h/rr.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_HgJpBCw7XIg/S0X1yQDWK5I/AAAAAAAAACA/9OUReEodXsY/s320/rr.PNG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Doesn't seem like too much, does it? Well, this is actually pretty cool.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Last August, after winning Assembly Summer '09's 4k intro compo with &lt;a href="http://pouet.net/prod.php?which=53605"&gt;Muon Baryon&lt;/a&gt;, Decipher and I renounced raymarching for good. Yup, we're done with it.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;What next?&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Well this was just one answer to that question (among the many that I had). This image itself isn't much at the surface. But, then, why did I show it? Simple: The code is awesome :) . Look at the reflections on the objects: there's a room there. Now notice the background - no room. How can this be?&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Well, back then I had this really neat idea to synthesize a room out of simple vector math, which even used the vectors already present in the Phong lighting model to compute. Needless to say, it worked beautifully :) . And you'd be surprised at how small this room actually is in code. Well, I'll show you :) . The code to generate this reflected room in GLSL is:&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;pre&gt;c+=pow(max(max(abs(r.x),.4-r.y),abs(r.z))-.4,2.); &lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;Boom. One line of GLSL is one whole reflected room. Now, normally in a blog post, I'd tell you all the little details of every little bit...But this time, I won't :P . Sorry; a bit too valuable ;) .&lt;br /&gt;&lt;br /&gt;Now, I'm going to school. Bye!! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-238920683878189973?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/238920683878189973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2010/01/some-glsl-wizardry.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/238920683878189973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/238920683878189973'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2010/01/some-glsl-wizardry.html' title='Some GLSL Wizardry'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_HgJpBCw7XIg/S0X1yQDWK5I/AAAAAAAAACA/9OUReEodXsY/s72-c/rr.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-4355746296217764695</id><published>2010-01-06T22:00:00.000-08:00</published><updated>2010-01-06T22:27:20.540-08:00</updated><title type='text'>Adventures in LPT - Part II</title><content type='html'>&lt;div style="text-align: justify;"&gt;In the last post, I mentioned the &lt;i&gt;XE1541&lt;/i&gt; cable and the fact that it can be used to connect the C64 to a PC, where an emulator runs on the PC and through the LPT acts like a C64 disk drive. This is a pretty cool idea...but to do so, I'd either need to download someone else's emulator, or write my own.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Most of the emulators around now have a couple major flaws that I just can't live with: the free ones are DOS (I'll get into why later), and most of them only have the most basic implementations of the 1541's DOS. Pretty much all they allow are use of the C64's kernal LOAD and SAVE commands, and &lt;i&gt;sometimes&lt;/i&gt; they can load a .d64's table of contents to the C64's BASIC memory (thus allowing one to display them on the machine with a LIST command). That's just not enough. If I really want to utilize the C64's hardware, I'm gonna need something that at least supports a basic IRQ loader.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;i&gt;&lt;span style="font-size: xx-small;"&gt;For those of you who don't know, an IRQ loader is a C64 routine that allows data to be loaded into RAM from a disk drive while other things are happening on screen. This is extremely valuable for demos, since one effect can be playing from one chunk of memory while another effect or picture is loaded into a different part of memory, almost simultaneously. EXTREMELY cool :) .&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;The fact is, I want a freely-available, Windows-compatible, cycle-exact 1541 emulator. So, I'm making my own :) . Which means I need to figure out how all this works...the connections, how each piece of hardware is supposed to act and when, pinouts, the LPT, and more. This should be fun :) .&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Well....I have a confession to make. That last paragraph said I have to figure it all out, as if I hadn't done so...now, that's not &lt;i&gt;entirely&lt;/i&gt; true ;) . I HAVE actually done quite a bit of research into the topic (but that was probably obvious in the last post, hehe).&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;To start, let's talk about the LPT.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;This is a DB25 parallel port. It has 8 data lines (input/output), 4 control lines (output), and 5 status lines (input). Though I'll admit the pinout isn't completely logical, it's still a pretty simple port to use and understand. Here's a pretty simple picture of the port and its pins:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://slotcars.carlsoncomputers.com/Articles/lpttest/lpt02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="211" src="http://slotcars.carlsoncomputers.com/Articles/lpttest/lpt02.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;i&gt;Picture: &lt;a href="http://slotcars.carlsoncomputers.com/Articles/lpttest/lpttest.asp"&gt;http://slotcars.carlsoncomputers.com/Articles/lpttest/lpttest.asp&lt;/a&gt; .&lt;/i&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;Note that the unlabeled green pins are all &lt;b&gt;ground&lt;/b&gt; lines, and I'll get to what "D", "S", and "C" stand for in a moment. As you can see, though some of the pins seem out of order, this is an incredibly easy port to design hardware for. "High" voltage always runs at (with negligible error of course) +5v, so an average LED is safe with just a 100kΩ resistor, and most MCU's are safe at this voltage even without any resistors at all.&lt;/span&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;So, this port is simple to wire...but what about programming? The "D" from earlier stands for "Data". These lines make up an 8-bit input/output port. the "S" stands for "Status"; a 5-bit input port. Finally, the "C" stands for "Control"; a 4-bit output port. But why these names?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;Remember, the port is called "LPT" - Line Print Terminal. This is a printer port. The PC sends the printer a command over the control lines, then the printer sends its status back in the status lines, and they transfer data to each other in the data lines. OK, that's pretty simple...but still doesn't explain how to code the dang thing.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;Well, it's remarkably simple. Each LPT in a machine (on normal PC's, usually 1 is present, and sometimes 2) has a base address which can be read from the system's BIOS from address 0000:0408. This points directly to the data register. The byte after that? The status register. And the one after? Yup, you guessed it - control register.&lt;i&gt;&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&lt;span style="font-size: xx-small;"&gt;Fun fact: the serial COM ports' addresses reside at 0000:0400.&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;Now, we could always be safe and read these whenever we want to use the port, but c'mon. Unsafe is always more fun :D !! See, in almost every currently-used computer LPT1 resides at 0000:0378, and LPT2 at 0000:0278. This means that in pretty much every case we'll encounter, our data register for our port (we'll assume we're gonna use LPT1) is at 0000:0378, status at 0000:0379, and control at 0000:037a. Awesome :) We'll use those.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;Only one problem - &lt;b&gt;since the release of Windows NT, direct access to these ports has been banhammerred for security reasons&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Ouch.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;This is why most emulators are written for DOS (told you I'd mention it later). But I want WINDOWS. &lt;b&gt;WINDOWS!!!&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;So, we need a kernal mode driver. Once again - I either find a free one online, or a write my own. Luckily though, in this case, the guys at&amp;nbsp;&lt;a href="http://logix4u.net/"&gt;http://logix4u.net&lt;/a&gt; have developed the perfect .dll to get around this issue: Inpout32.dll. This .dll has a pretty simple architecture: on load, it checks if we're running under Win9x. If so, no driver is necessary. Otherwise, it automagically installs a very lightweight driver itself and directs all port processes through that. The only change then to the code is to use this .dll instead of direct writing to the ports. This sent a red flag in my head: &lt;b&gt;SLOW BLOATWARE ALERT&lt;/b&gt;. But nope!! These guys did quite well. The source code to both the driver and the .dll are included in the .dll package. A quick glance at the [very clean] C code reassurred me that this is a great .dll :) . Awesome work, guys.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;So now I have a simple way to code for the port and I have the pinouts. What's next? I'll tell you: &lt;b&gt;my first real soldering project!!&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;I decided I'd make a little board to test the port :) Nothing too fancy...just need to display the control register with 4 LED's and wire 4 switches for the status register tests. Awesome :) .&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;Now, you may have noticed that I didn't include the data register or the 3rd status bit...this is because the &lt;i&gt;XE1541&lt;/i&gt; doesn't use these...not only that, but it made the project more lightweight and easier to build. The concepts are the same so I figured no extra work was really necessary. Besides, until my actual cable arrives from Europe (I ordered it on Dec. 27th, my birthday hehe), this should be more than enough to hold me off.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;I took a trip to Radio Shack and bought myself a wonderful little soldering iron, solder, a male DB25 connector, a basic printed circuit board, and some helping hands. The rest of the stuff I had around since I like to play with a breadboard :) . I then did a YouTube search to find out how to solder, and sure enough, found this wonderful video, which was all I needed:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;&lt;object height="313" width="384"&gt;&lt;param name="movie" value="http://www.youtube.com/v/I_NU2ruzyc4&amp;hl=en_US&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/I_NU2ruzyc4&amp;hl=en_US&amp;fs=1" type="application/x-shockwave-flash" width="384" height="313" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: small;"&gt;Wonderful :) Anyways, I'm rambling quite a bit, so I'll just post some pictures of the project. Sorry for the crappy quality, too...took them with my cell phone:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_HgJpBCw7XIg/S0V3tAxpS_I/AAAAAAAAABI/4kwLZ4Uy_Vk/s1600-h/0103001954.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_HgJpBCw7XIg/S0V3tAxpS_I/AAAAAAAAABI/4kwLZ4Uy_Vk/s320/0103001954.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_HgJpBCw7XIg/S0V3wfe3AZI/AAAAAAAAABQ/qwsxIpFUdAc/s1600-h/0103001955.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_HgJpBCw7XIg/S0V3wfe3AZI/AAAAAAAAABQ/qwsxIpFUdAc/s320/0103001955.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://3.bp.blogspot.com/_HgJpBCw7XIg/S0V3yP0bl1I/AAAAAAAAABY/v3szuEEWmsA/s1600-h/0103002105.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_HgJpBCw7XIg/S0V3yP0bl1I/AAAAAAAAABY/v3szuEEWmsA/s320/0103002105.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://3.bp.blogspot.com/_HgJpBCw7XIg/S0V30n7l6SI/AAAAAAAAABg/tvwQRAC7SEk/s1600-h/0103002125.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_HgJpBCw7XIg/S0V30n7l6SI/AAAAAAAAABg/tvwQRAC7SEk/s320/0103002125.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://2.bp.blogspot.com/_HgJpBCw7XIg/S0V32bMxSuI/AAAAAAAAABo/NtDn2ltKOfc/s1600-h/0103002147.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_HgJpBCw7XIg/S0V32bMxSuI/AAAAAAAAABo/NtDn2ltKOfc/s320/0103002147.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://2.bp.blogspot.com/_HgJpBCw7XIg/S0V33tCsmII/AAAAAAAAABw/LIQqSYmMpbA/s1600-h/0103002206.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_HgJpBCw7XIg/S0V33tCsmII/AAAAAAAAABw/LIQqSYmMpbA/s320/0103002206.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://2.bp.blogspot.com/_HgJpBCw7XIg/S0V34_UjzNI/AAAAAAAAAB4/GiCnU3Pq7xA/s1600-h/0103002207.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_HgJpBCw7XIg/S0V34_UjzNI/AAAAAAAAAB4/GiCnU3Pq7xA/s320/0103002207.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;So, yeah :) . Not too complicated, in fact ridiculously simple...but I had tons of fun making this :) . Now, I must admit, I'm pretty tired, so I should head to bed...next time I'll talk about programming and testing this little bugger :) .&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;Goodnight!&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-4355746296217764695?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/4355746296217764695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2010/01/adventures-in-lpt-part-ii.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/4355746296217764695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/4355746296217764695'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2010/01/adventures-in-lpt-part-ii.html' title='Adventures in LPT - Part II'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_HgJpBCw7XIg/S0V3tAxpS_I/AAAAAAAAABI/4kwLZ4Uy_Vk/s72-c/0103001954.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-1524881704304073952</id><published>2009-12-31T23:18:00.000-08:00</published><updated>2010-01-06T18:19:57.457-08:00</updated><title type='text'>Adventures in LPT - Part I</title><content type='html'>An integral part of cross-developing for any platform is obvious: &lt;em&gt;how do we transfer our work to the real hardware?&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;In the world of the Commodore 64, a few decent solutions have been proposed:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. Install a 5.25" floppy drive into your PC.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2. Create a C64 cartridge that emulates a C64 disk drive and takes an SD card (or similar) as input.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3. Create a cable to communicate between the C64 and a PC.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;And yes, there are others that I didn't mention. But by far, my personal favorite is the third option. But what kind of cable do we use, and how does it work?&lt;br /&gt;&lt;br /&gt;A few cables have been designed, my favorite being the &lt;em&gt;XE1541&lt;/em&gt; cable, invented by Nicolas Welte and Wolfgang Moser:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://amigakit.leamancomputing.com/catalog/images/1541-transfer-cable.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://amigakit.leamancomputing.com/catalog/images/1541-transfer-cable.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-size: xx-small;"&gt;This image from&amp;nbsp;&lt;a href="http://amigakit.leamancomputing.com/catalog/images/1541-transfer-cable.jpg"&gt;http://amigakit.leamancomputing.com/catalog/images/1541-transfer-cable.jpg&lt;/a&gt;&amp;nbsp;, if you didn't catch the watermark ;) .&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;This cable connects the 6-pin serial DIN port on the C64 to a standard 25-pin LPT (Line Print Terminal) on a PC. In this way, the two can be connected in such a way that the PC will act just like any peripheral device that could be connected to the C64. Specifically, we can write a program for the PC so that it will act exactly like a CBM 1541 floppy disk drive (or any C64-compatible&amp;nbsp;floppy disk drive, really).&lt;br /&gt;&lt;br /&gt;Astute and/or experienced readers will notice something. The C64's port is &lt;em&gt;serial&lt;/em&gt;, but the LPT is &lt;em&gt;parallel&lt;/em&gt;. How can this be, and why wouldn't we just connect the right lines to a serial COM&amp;nbsp;port on the PC?&lt;br /&gt;&lt;br /&gt;You have to remember here that the C64 is over twenty years old. The significance of this is that the transfer rate of its serial port is WAAAAAAAAAAAAY slower than that of modern COM ports. In addition,&amp;nbsp;there are lines in the C64 serial port that can't be checked with a modern COM port without direct&amp;nbsp;pinout control.&amp;nbsp;This means that with hardware-controlled serial encoders and decoders on the COM ports, we can't slow the PC's connection down enough to effectively communicate with the C64. However, we &lt;em&gt;can&lt;/em&gt; connect certain lines of the C64 to corresponding control and status register lines of the LPT. In this way, we can connect lines that weren't available to us by using a COM port. More importantly, though, we can simply continuously&amp;nbsp;output or&amp;nbsp;poll with correct timing the necessary values to/from the C64.&lt;br /&gt;&lt;br /&gt;That's all for now I think :) . In the next parts of this series, I'll get into the specifics of the &lt;em&gt;XE1541&lt;/em&gt; cable, with schematics, some connector pinouts, etc :) .&amp;nbsp;For now, wish me luck, as I finally submitted my MIT application! Also bring on 2010...YUP's got some big things planned; are you ready? ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-1524881704304073952?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/1524881704304073952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2009/12/adventures-in-lpt-part-i.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/1524881704304073952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/1524881704304073952'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2009/12/adventures-in-lpt-part-i.html' title='Adventures in LPT - Part I'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-8480778005224761161</id><published>2009-12-31T03:14:00.000-08:00</published><updated>2009-12-31T03:39:03.314-08:00</updated><title type='text'>YUP Commodore 64 Demo - Introduction</title><content type='html'>Yes, it's true. The demoscene's youngest group is making&amp;nbsp;a demo&amp;nbsp;on the demoscene's oldest machine&amp;nbsp;:)&amp;nbsp;. Why, you might be wondering?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. The C64's CPU is a MOS 6510.&lt;/strong&gt; It's basically a 6502 but with an extra 6-bit I/O port. The instruction set for this ~1mhz tiny titan contains only 56 instructions (mostly 8-bit with some [limited] 16-bit support; as was the case with many microprocessors of its time) and very few addressing modes...not to mention a wonderful list of illegal opcodes supported by many assemblers out there :) . This is an extremely nice little processor to program.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-size: xx-small;"&gt;More info on the MOS 65xx processors can be found here: &lt;a href="http://www.masswerk.at/6502/6502_instruction_set.html"&gt;http://www.masswerk.at/6502/6502_instruction_set.html&lt;/a&gt;&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;strong&gt;2. The color palette is completely different from most of the 8-bit computers at the time.&lt;/strong&gt; Most of the C64's competitors used a typical "generic" 8-colors-at-two-brightness-settings sort of palette, just like in less-recent versions of MS-Paint...also like the Sinclair ZX Spectrum, whose palette can be seen here:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.retro-sanctuary.com/Images/ZXSpectrum_palette.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://www.retro-sanctuary.com/Images/ZXSpectrum_palette.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;But strangely, when the C64's video chip (the VIC-II) was designed, they completely threw out convention and went their own unique direction for colors...well, except for black and white :) . This lovely palette can be seen here:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.retro-sanctuary.com/Images/Commodore64_palette.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://www.retro-sanctuary.com/Images/Commodore64_palette.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;em&gt;Thanks to the guys at &lt;/em&gt;&lt;/span&gt;&lt;a href="http://www.retro-sanctuary.com/"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;em&gt;http://www.retro-sanctuary.com/&lt;/em&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: xx-small;"&gt;&lt;em&gt; for those images, by the way.&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;strong&gt;3. Well, um...I don't really have a third reason.&lt;/strong&gt; I guess I could admit that I have a soft spot for vintage computers...but that's too cheesy, right? :)&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;So, yeah. We're doin' it. And no, we're not coding it for PAL machines, because I'm from the US where NTSC is the only way to go. Progress has been painfully slow, as [thus far] I've done all the development myself. This includes music, code, and graphics (if you'd even call crappy hardcoded bitmaps graphics)...though, I'm proud to say I've managed to do some nice technical things that most beginners in the C64 scene are too afraid to even attempt :) . All in all it's been a fun ride, except for music developmet. Mainly, this is because the only cross-development&amp;nbsp;tracker for the C64 currently is a program called GoatTracker. Originally, it was written for DOS, and later it was ported to&amp;nbsp;Windows, taking its confusing&amp;nbsp;and dated user interface along with it. Maybe I'll end up doing my own someday to make this process more bearable. On the code side, I've been using&amp;nbsp;Notepad++, C64Asm, and batch files for assembling. This works pretty well..though I'll most likely switch to an assembler like ACME, which supports scripting so I won't have to unroll speed-critical loops&amp;nbsp;by hand.&amp;nbsp;I suppose a couple screenshots for you wouldn't hurt, either:&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_HgJpBCw7XIg/SzyF_E_lc-I/AAAAAAAAAA0/8Wfyu4E0y7A/s1600-h/meh1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://4.bp.blogspot.com/_HgJpBCw7XIg/SzyF_E_lc-I/AAAAAAAAAA0/8Wfyu4E0y7A/s320/meh1.PNG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_HgJpBCw7XIg/SzyGA6h0q7I/AAAAAAAAAA8/1SbhkhNq0go/s1600-h/meh2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_HgJpBCw7XIg/SzyGA6h0q7I/AAAAAAAAAA8/1SbhkhNq0go/s320/meh2.PNG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: justify;"&gt;...Nothing too impressive, really...mainly because I really didn't show you much at all ;) Not to mention that first screenshot is nowhere near finished...but I like the colors, so why not show it? :)&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: justify;"&gt;I suppose that's all for now. Wish us luck in finishing this beast someday :)&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-8480778005224761161?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/8480778005224761161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2009/12/yup-commodore-64-demo-introduction.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/8480778005224761161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/8480778005224761161'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2009/12/yup-commodore-64-demo-introduction.html' title='YUP Commodore 64 Demo - Introduction'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_HgJpBCw7XIg/SzyF_E_lc-I/AAAAAAAAAA0/8Wfyu4E0y7A/s72-c/meh1.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8663568991897902833.post-4696043863419464844</id><published>2009-12-31T00:58:00.000-08:00</published><updated>2009-12-31T02:09:59.645-08:00</updated><title type='text'>New Blog!</title><content type='html'>Hey guys, Ferris here. After [far too much] nagging by [too many] friends of mine, I finally started a blog. Within a few days here you'll start seeing some progress for many of my current projects, including a new 4k synth system, a Commodore 64 demo, and more. For now, I'll spend several hours (or at least until my lappy dies on me)&amp;nbsp;perfecting the layout; though we all know as a scener I'll never be truly happy with it ;) .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8663568991897902833-4696043863419464844?l=yupferris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yupferris.blogspot.com/feeds/4696043863419464844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yupferris.blogspot.com/2009/12/new-blog.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/4696043863419464844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8663568991897902833/posts/default/4696043863419464844'/><link rel='alternate' type='text/html' href='http://yupferris.blogspot.com/2009/12/new-blog.html' title='New Blog!'/><author><name>Ferris / YUP</name><uri>http://www.blogger.com/profile/04514706189570643048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_HgJpBCw7XIg/TPQ4Xj6CHGI/AAAAAAAAAF8/duE_4Nzt98I/S220/Snapshot%2Bof%2Bme%2B17.png'/></author><thr:total>1</thr:total></entry></feed>
