<?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-4323168899380287942</id><updated>2012-02-02T13:14:52.927+01:00</updated><category term='maintainence'/><category term='iphone'/><category term='tools'/><category term='Amiga'/><category term='3D'/><category term='muse'/><category term='spectrum'/><category term='Reaxion'/><category term='mastersystem'/><category term='68k'/><category term='sega'/><category term='sprogs'/><category term='music'/><category term='scrolltext'/><category term='iOS'/><category term='framework'/><category term='Windows'/><category term='z80'/><category term='c++'/><category term='Atari ST'/><category term='c64'/><category term='oldschool'/><title type='text'>On a bitplane</title><subtitle type='html'>Random experiments with bits of code for various machines</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-7241531193420223046</id><published>2012-02-02T13:13:00.003+01:00</published><updated>2012-02-02T13:14:52.934+01:00</updated><title type='text'>Zynga and originality.</title><content type='html'>Isn't this bloke just a class act?&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.youtube.com/embed/VbdURlfa3Wc?rel=0" allowfullscreen="" frameborder="0" height="360" width="480"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Moral of the story is this: If you see a Zynga game you would like to play don't bother - just Google it, find whatever they cloned to build it and go play that instead, thereby supporting the actual creative people who did the work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-7241531193420223046?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/7241531193420223046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2012/02/zynga-and-originality.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/7241531193420223046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/7241531193420223046'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2012/02/zynga-and-originality.html' title='Zynga and originality.'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/VbdURlfa3Wc/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-2303959995461643529</id><published>2012-01-19T15:38:00.004+01:00</published><updated>2012-01-19T15:47:49.423+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='Reaxion'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='iOS'/><title type='text'>Spending a little time on modern platforms - Reaxion lives on iOS</title><content type='html'>I haven't forgotten about Reaxion for the Spectrum - but time hasn't been on my side of late, but it's worked out easier to grab the odd moment here and there to put together a bit of C++ in windows. Problem is what I actually want to do is a smartphone game.&lt;br /&gt;&lt;br /&gt;What I now have is a small lightweight openGL-based framework running that massages windows events into a format similar to those that come from iOS, and provides just enough primitive functions to allow image loading, screen drawing and timing to be handled in a way that is abstracted from the bulk of my game code. Once I had this running under windows it was a small matter of porting this little chunk of code to IOS, merging the 2 projects into a common folder structure and this was the result:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.youtube.com/embed/pKuEg2Rg-xs?rel=0" allowfullscreen="" frameborder="0" height="360" width="640"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Now I have the advantage of being able to grab the odd minute that I find in front of a PC with visual studio installed to write and debug the game code, and then I can throw it all back onto my main machine and build for iOS. There are a few sacrifices in the way I've done this - multitouch isn't supported, I need to stub out gamecentre functions in the windows build and my current code is less than optimal, but it means I can hopefully get proof of concept games stuff done much quicker.&lt;br /&gt;&lt;br /&gt;I'm currently using 'Reaxion' as a testbed for this, but I'm still undecided about releasing it...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-2303959995461643529?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/2303959995461643529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2012/01/spending-little-time-on-modern.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/2303959995461643529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/2303959995461643529'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2012/01/spending-little-time-on-modern.html' title='Spending a little time on modern platforms - Reaxion lives on iOS'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/pKuEg2Rg-xs/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-1499239207207491252</id><published>2011-12-15T00:47:00.002+01:00</published><updated>2011-12-15T01:01:37.936+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='3D'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='68k'/><category scheme='http://www.blogger.com/atom/ns#' term='Amiga'/><title type='text'>Testing out Amiga algorithms the cheating way</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-mL7hpS3OhGs/Tuk15lLsP_I/AAAAAAAAAHE/mdRmUxcxyvw/s1600/amiga_framework_screenshot.jpg"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 326px; height: 184px;" src="http://2.bp.blogspot.com/-mL7hpS3OhGs/Tuk15lLsP_I/AAAAAAAAAHE/mdRmUxcxyvw/s400/amiga_framework_screenshot.jpg" alt="" id="BLOGGER_PHOTO_ID_5686135267881926642" border="0" /&gt;&lt;/a&gt;Despite working for a 3D graphics IP company I've never actually &lt;span style="font-style: italic;"&gt;tried&lt;/span&gt; coding any 3D stuff from the ground-up on an 8/16-bit machine and I figure I might want to give that a try someday.&lt;br /&gt;&lt;br /&gt;The problem is that there's all sorts of places an algorithm can go wrong. Is my maths shoddy to start with? Have a made a mistake converting it to fixed-point? Or have I just misunderstood some instruction?&lt;br /&gt;&lt;br /&gt;Although I grew up prodding around with an action replay (and to be fair using windbg on kernal mode drivers for windows isn't &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; much better) it's a bugger of a way of working, especially when the error might involving trashing memory so you've not got any way to investigate.&lt;br /&gt;&lt;br /&gt;To help me solve the problem of at least getting the algorithm right I've knocked up a framework. All it does is allow you to set up a palette (using Amiga colour values), give you 1-5 bitplanes (plane 0 providing the LSB) and allow you to read and write from them with bounds checking. Once your function (which should draw a single frame) returns it dumps the plane contents to binary files and spits out a .bmp with the output.&lt;br /&gt;&lt;br /&gt;So what does this mean? It means you can breakpoint, single-step and printf the smeg out of your code when you are developing it and write it all as C with floating point maths, just like a PC routine but with a wierd graphics configuration. Once I'm happy with that I can convert the algorithm to use fixed-point 16-bit maths and keep an eye on it as I go. When that's working fine I can subdivide the steps taken until it becomes pseudo-68k and all with pretty much the same level of comfort as debugging a windows application.&lt;br /&gt;&lt;br /&gt;By that point the remaining thing to do would be to convert it to 68k assembler (which should be a line-by-line translation if I've kept to the plan) and hope I don't introduce any bugs along the way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-1499239207207491252?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/1499239207207491252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2011/12/testing-out-amiga-algorithms-cheating.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/1499239207207491252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/1499239207207491252'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2011/12/testing-out-amiga-algorithms-cheating.html' title='Testing out Amiga algorithms the cheating way'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-mL7hpS3OhGs/Tuk15lLsP_I/AAAAAAAAAHE/mdRmUxcxyvw/s72-c/amiga_framework_screenshot.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-2915050708285838033</id><published>2011-12-09T22:43:00.001+01:00</published><updated>2011-12-09T22:46:35.524+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='muse'/><category scheme='http://www.blogger.com/atom/ns#' term='c64'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Taking a break to play with some C64 music</title><content type='html'>Bliss by Muse in 3 channels (Not easy):&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.youtube.com/embed/pBvKD5fHqWA" allowfullscreen="" width="420" frameborder="0" height="315"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-2915050708285838033?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/2915050708285838033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2011/12/taking-break-to-play-with-some-c64.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/2915050708285838033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/2915050708285838033'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2011/12/taking-break-to-play-with-some-c64.html' title='Taking a break to play with some C64 music'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/pBvKD5fHqWA/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-6671331049499425646</id><published>2011-11-30T10:08:00.004+01:00</published><updated>2011-11-30T10:17:55.809+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maintainence'/><category scheme='http://www.blogger.com/atom/ns#' term='Amiga'/><title type='text'>For those with dead A600 or A1200 internal floppy drives.</title><content type='html'>This bloke does a decent job at going through the process:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.youtube.com/embed/S-3PtSsn8YY#t=104s" allowfullscreen="" frameborder="0" height="480" width="853"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;There is a bit of the video missing though, but for that part:&lt;br /&gt;&lt;br /&gt;towards the front of the drive there are a couple of tabs which can gently be pushed outwards, allowing you to lift the second layer of the top of the casing. Once you've lifted the top part take care to lift the top read/write head clear before sliding the casing clear of the drive.&lt;br /&gt;&lt;br /&gt;And don't worry about the spring that infuriated the bloke in the video - you don't actually need to remove that at all.&lt;br /&gt;&lt;br /&gt;About 5 minutes with cotton wool buds and some cheap alcohol-based makeup remover and it was booting right up again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-6671331049499425646?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/6671331049499425646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2011/11/for-those-with-dead-a600-or-a1200.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/6671331049499425646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/6671331049499425646'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2011/11/for-those-with-dead-a600-or-a1200.html' title='For those with dead A600 or A1200 internal floppy drives.'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/S-3PtSsn8YY/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-1843927255078024983</id><published>2011-11-28T14:57:00.002+01:00</published><updated>2011-11-28T15:00:14.819+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='68k'/><category scheme='http://www.blogger.com/atom/ns#' term='Amiga'/><title type='text'>Hola Amiga. Cuanto tiempo!</title><content type='html'>It seems I'm now in possession of a stock A1200 with a second diskdrive (and the obligatory knackered mouse).&lt;br /&gt;&lt;br /&gt;Now to give it a compact flash card, some means of transferring stuff and ideally a little extra RAM...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-vHHW7j7FELg/TtOTle1kD6I/AAAAAAAAAEo/vy0e3uABbnw/s1600/a1200.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/-vHHW7j7FELg/TtOTle1kD6I/AAAAAAAAAEo/vy0e3uABbnw/s320/a1200.jpg" alt="" id="BLOGGER_PHOTO_ID_5680045827186495394" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-1843927255078024983?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/1843927255078024983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2011/11/hola-amiga-cuanto-tiempo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/1843927255078024983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/1843927255078024983'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2011/11/hola-amiga-cuanto-tiempo.html' title='Hola Amiga. Cuanto tiempo!'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-vHHW7j7FELg/TtOTle1kD6I/AAAAAAAAAEo/vy0e3uABbnw/s72-c/a1200.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-2711216407969231707</id><published>2011-11-02T00:27:00.000+01:00</published><updated>2011-11-02T00:28:55.474+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reaxion'/><category scheme='http://www.blogger.com/atom/ns#' term='spectrum'/><category scheme='http://www.blogger.com/atom/ns#' term='z80'/><title type='text'>Reaxion lives (on the ZX Spectrum)</title><content type='html'>&lt;iframe src="http://www.youtube.com/embed/0_Ro3EwT8gs" allowfullscreen="" frameborder="0" height="315" width="420"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-2711216407969231707?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/2711216407969231707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2011/11/reaxion-lives-on-zx-spectrum.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/2711216407969231707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/2711216407969231707'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2011/11/reaxion-lives-on-zx-spectrum.html' title='Reaxion lives (on the ZX Spectrum)'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/0_Ro3EwT8gs/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-2273384219199662990</id><published>2011-10-20T18:42:00.002+02:00</published><updated>2011-10-20T18:51:02.486+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reaxion'/><category scheme='http://www.blogger.com/atom/ns#' term='spectrum'/><category scheme='http://www.blogger.com/atom/ns#' term='z80'/><title type='text'>It's been a long time coming...</title><content type='html'>But I've nearly done it...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-xmrZ8tjjWpc/TqBRAFX_0JI/AAAAAAAAAD8/8SrZ7r8Yr4o/s1600/rxn_screenshot.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 299px; height: 230px;" src="http://2.bp.blogspot.com/-xmrZ8tjjWpc/TqBRAFX_0JI/AAAAAAAAAD8/8SrZ7r8Yr4o/s320/rxn_screenshot.gif" alt="" id="BLOGGER_PHOTO_ID_5665617393116762258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-thktOu8rQ0s/TqBRNPPmUQI/AAAAAAAAAEI/gIYTyz-i6F0/s1600/rxn_ingame.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 277px; height: 213px;" src="http://1.bp.blogspot.com/-thktOu8rQ0s/TqBRNPPmUQI/AAAAAAAAAEI/gIYTyz-i6F0/s320/rxn_ingame.gif" alt="" id="BLOGGER_PHOTO_ID_5665617619104190722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hopefully my next game won't get delayed by half a decade of life happening.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-2273384219199662990?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/2273384219199662990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2011/10/its-been-long-time-coming.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/2273384219199662990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/2273384219199662990'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2011/10/its-been-long-time-coming.html' title='It&apos;s been a long time coming...'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-xmrZ8tjjWpc/TqBRAFX_0JI/AAAAAAAAAD8/8SrZ7r8Yr4o/s72-c/rxn_screenshot.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-6557619711645702345</id><published>2011-09-26T23:13:00.001+02:00</published><updated>2011-09-26T23:15:35.702+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spectrum'/><category scheme='http://www.blogger.com/atom/ns#' term='z80'/><title type='text'>You have to love how accurate Spectrum emulators are</title><content type='html'>When you can just pipe the tape noise out of an emulator into a real machine and it loads perfectly every time (so long as you remember to emulate a machine with no YM soundchip, otherwise it gets confused)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-IiynzZ8Rdbo/ToDrGKKAu0I/AAAAAAAAAD0/oLriKv2uc1A/s1600/IMG_1150.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/-IiynzZ8Rdbo/ToDrGKKAu0I/AAAAAAAAAD0/oLriKv2uc1A/s320/IMG_1150.JPG" alt="" id="BLOGGER_PHOTO_ID_5656779623015430978" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-6557619711645702345?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/6557619711645702345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2011/09/you-have-to-love-how-accurate-spectrum.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/6557619711645702345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/6557619711645702345'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2011/09/you-have-to-love-how-accurate-spectrum.html' title='You have to love how accurate Spectrum emulators are'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-IiynzZ8Rdbo/ToDrGKKAu0I/AAAAAAAAAD0/oLriKv2uc1A/s72-c/IMG_1150.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-444675270810963578</id><published>2011-09-25T20:12:00.003+02:00</published><updated>2011-09-26T12:42:35.302+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='68k'/><category scheme='http://www.blogger.com/atom/ns#' term='Amiga'/><title type='text'>Back on with the 68K/Amiga</title><content type='html'>Seeing as I've passed my driving test I should now be able to nip off and pick up my* trusty Amiga 1200 and see if my code is as hardware-friendly as I hope it is. It's a stock 1200, but I'm hoping whatever I turn out will run on a stock Amiga 500 with 1Mb of RAM (I'm assuming 512k chip, 512k unknown).&lt;br /&gt;&lt;br /&gt;In the meantime I've gone back to my scrollcode and it worked okay, but it made no use of the Blitter. I've corrected that now, although it took a couple of attempts to decipher the documentation for the minterm stuff.&lt;br /&gt;&lt;br /&gt;The minterm docs run to a couple of pages and goes through boolean algebra and venn-diagrams, but it's really not as complicated as that. I reckon it should be explained like this:&lt;br /&gt;&lt;br /&gt;You have a truth table for the 3 possible inputs. Just write in the fourth column where you want a 1 or 0 to be generated, and put those into the bottom byte of bltcon0 with the first row as the lowest bit. So a direct copy from A to D would be:&lt;br /&gt;&lt;br /&gt;&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;A&lt;/td&gt;&lt;td&gt;B&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;D&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;so reading bottom-to-top the bottom byte of bltcon0 would be 11110000. Also, the 4 bits before that are the flags to use each channel, so those would be 1001 to use only channels A and D.&lt;br /&gt;&lt;br /&gt;All the other registers do exactly what they say on the tin and don't seem to hold any nasty surprises.&lt;br /&gt;&lt;br /&gt;problem is the scroller has a buffer that is just over 2 screens wide and draws each character twice, so once the buffer has hardware scrolled to the second half the first half should be visually identical, so I can snap back to the first half with no visible effects whatsoever. It uses a little extra memory and 2 blits, but it should perform better than shifting the entire buffer in one blit and then drawing a character in a second blit.&lt;br /&gt;&lt;br /&gt;My next Problem is that the code busy-waits on the first blit, and then carries on to do other things on the second blit, so it's wasting time it could potentially be using for other tasks and not making good use of the machine. My next task is to get the code to build a blit list and then have an interrupt handler to dispatch the jobs to the blitter when it's no longer busy. Definitely overkill for this little framework, but when I generalise it for a game engine I can run game logic and blitting in parallel and scrape more power out of the thing.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*Actually it belongs to my brother, but he's not using it...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-444675270810963578?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/444675270810963578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2011/09/back-on-with-68kamiga.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/444675270810963578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/444675270810963578'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2011/09/back-on-with-68kamiga.html' title='Back on with the 68K/Amiga'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-5046895496030951424</id><published>2011-07-05T17:34:00.006+02:00</published><updated>2011-07-05T17:49:21.208+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sprogs'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>It's not all retro you know...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-fKwPWSRJDEw/ThMvqVffwEI/AAAAAAAAADA/kernHlwuHyA/s1600/sprogs_homescreen.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 267px; height: 400px;" src="http://2.bp.blogspot.com/-fKwPWSRJDEw/ThMvqVffwEI/AAAAAAAAADA/kernHlwuHyA/s400/sprogs_homescreen.jpg" alt="" id="BLOGGER_PHOTO_ID_5625892763886141506" border="0" /&gt;&lt;/a&gt;..although  am coding this on an iPhone 3G, which some apple fanboys would consider oldschool.&lt;br /&gt;&lt;br /&gt;I'm using a load of old graphics and code from some old university 2D openGL game assignment I did, fixing the fact that it's a bit of a mess (I learned the pitfalls of writing code that survives compiler changes, endian switches and being 64-bit friendly afterwards) and fixing it up for openGL ES.&lt;br /&gt;&lt;br /&gt;Although I'm reusing some of the assets it is a different game (although inspired by a few 80s arcade machines) and hopefully should be a nice distraction worthy of the price of a pint of beer*&lt;br /&gt;&lt;br /&gt;At the moment it's just a mishmash of code that gives the right results if you stare at it in the debugger, but looks nothing like a game yet, but I'm currently sat at home in a Lemsip-induced haze working on this so hopefully something should come together soon enough.&lt;br /&gt;&lt;br /&gt;*half a pint if you live inside the M25.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-5046895496030951424?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/5046895496030951424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2011/07/its-not-all-retro-you-know.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/5046895496030951424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/5046895496030951424'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2011/07/its-not-all-retro-you-know.html' title='It&apos;s not all retro you know...'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-fKwPWSRJDEw/ThMvqVffwEI/AAAAAAAAADA/kernHlwuHyA/s72-c/sprogs_homescreen.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-5810172385577954111</id><published>2011-06-29T11:18:00.004+02:00</published><updated>2011-06-29T11:25:04.355+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oldschool'/><category scheme='http://www.blogger.com/atom/ns#' term='sega'/><category scheme='http://www.blogger.com/atom/ns#' term='mastersystem'/><category scheme='http://www.blogger.com/atom/ns#' term='scrolltext'/><category scheme='http://www.blogger.com/atom/ns#' term='z80'/><title type='text'>Sometimes rebuilding can take a while...</title><content type='html'>so I started playing with the previous code and knocked out a chunky scroller whilst I'm at it.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.youtube.com/embed/-1WQGi59sdY" allowfullscreen="" frameborder="0" height="349" width="560"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;The WIP version I have also has a chessboard zoomer in the background, but it's a bit dodgy (I think my interrupts are overrunning a bit), so I've disabled it for this video. If I can't fix up the interrupts I'll seperate them out into seperate parts, fix the scroll position or find some other workaround.&lt;br /&gt;&lt;br /&gt;Oddly enough the chessboard is less dependent on lookup tables than the one I did on the ST (It's generated from scratch) and uses a hell of a lot less rastertime to run. I think for a lot of what I want to do the SMS is more powerful than the ST :)&lt;br /&gt;&lt;br /&gt;or it could just be my shoddy 68K assembler abilities...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-5810172385577954111?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/5810172385577954111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2011/06/sometimes-rebuilding-can-take-while.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/5810172385577954111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/5810172385577954111'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2011/06/sometimes-rebuilding-can-take-while.html' title='Sometimes rebuilding can take a while...'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/-1WQGi59sdY/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-2525638161606603453</id><published>2011-06-22T12:53:00.003+02:00</published><updated>2011-09-25T20:37:45.452+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sega'/><category scheme='http://www.blogger.com/atom/ns#' term='mastersystem'/><category scheme='http://www.blogger.com/atom/ns#' term='z80'/><title type='text'></title><content type='html'>I've been playing with some Sega mastersystem coding. So far I've got a toolchain up and running that takes a level-sized bitmap, chunks it up, RLE compresses the columns of of tiledata and lets it run on the mastersystem.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.youtube.com/embed/Qz7eBKI_RL4" allowfullscreen="" frameborder="0" height="349" width="560"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;The levelmap and graphics are from 'Edge Grinder' - an 8-bit collaborative project hosted at &lt;a href="http://www.formatwar.net/"&gt;Format war&lt;/a&gt; led by Jason 'TMR' Kelk, and were designed for the C64, which is why all of the coloured pixels are double-width. They could be improved for the mastersystem and it's more liberal palette and 1x1 16 colour graphics mode, but at the moment I'm more concerned with getting the code up and running.&lt;br /&gt;&lt;br /&gt;Looking at the Sega Megadrive/genesis it looks like it's pretty much the same technique to get things going there, albeit with nicer graphics and a faster 68000 CPU so when I have enough to be going on with I'm going to port it all across.&lt;br /&gt;&lt;br /&gt;The sprites look like hassle though - I'm working with 8 sprites per line of 8 pixels width, as opposed to the 24 pixel wide ones on the C64 so it looks like things might get a little difficult.&lt;br /&gt;&lt;br /&gt;Maybe a bit of flicker or creative use of background characters might be in order...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-2525638161606603453?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/2525638161606603453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2011/06/ive-been-playing-with-some-sega.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/2525638161606603453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/2525638161606603453'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2011/06/ive-been-playing-with-some-sega.html' title=''/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/Qz7eBKI_RL4/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-5867948309761366087</id><published>2011-06-22T12:50:00.002+02:00</published><updated>2011-06-22T12:53:23.570+02:00</updated><title type='text'>So... what happened?</title><content type='html'>I started with good intentions, but then the whole financial crisis kicked in and it ended up being impossible for me to find a job in Spain, so I ended up on a flight back to the UK for an interview.&lt;br /&gt;&lt;br /&gt;I got the job, returned to Spain to collect my stuff and then started &lt;a href="http://www.imgtec.com/"&gt;working on graphics drivers&lt;/a&gt; which has kept me pretty damn busy until now. So I've ended up doing low-level coding but nothing I can talk about in public.&lt;br /&gt;&lt;br /&gt;I've just started finding time to do code in my free time again, so watch this space.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-5867948309761366087?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/5867948309761366087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2011/06/so-what-happened.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/5867948309761366087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/5867948309761366087'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2011/06/so-what-happened.html' title='So... what happened?'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-6238972029210935457</id><published>2009-09-21T11:15:00.000+02:00</published><updated>2009-09-21T11:33:33.428+02:00</updated><title type='text'>Taking a break from 68k</title><content type='html'>At least for a little while to write some tools. That's the beauty of crossdev - you can chew up relatively massive amounts of CPU time to distil your data into a form that is as close to being able to dump it straight into the hardware registers as possible. I prefer having my data this way because processing = time and time = limited. You could just go to google and look for native or crossdev tools that are out there already, but I couldn't find anything that did what I wanted (or in this case even &lt;span style="font-style: italic;"&gt;work&lt;/span&gt;) so I ended up rolling my own. Maybe when it does everything I think it needs to do I might put it out there to save others the hassle.&lt;br /&gt;&lt;br /&gt;First one up is the awe-inspiringly titled 'IFF Manager'.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Q_LcFl6cUXc/SrdGQja8fwI/AAAAAAAAAAc/vtqal8A7Qg8/s1600-h/IFFtool.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 214px;" src="http://4.bp.blogspot.com/_Q_LcFl6cUXc/SrdGQja8fwI/AAAAAAAAAAc/vtqal8A7Qg8/s320/IFFtool.gif" alt="" id="BLOGGER_PHOTO_ID_5383849129744826114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Okay... maybe the least awe-inspiring screen shot ever, but it &lt;span style="font-style: italic;"&gt;does actually work&lt;/span&gt;. I'm adding features as I need them but currently after unpacking an IFF picture file it can extract individual bitplanes in whole or rectangles for sprites (although at the moment the rectangles need to be byte-aligned) and output them as sequential bitplanes, interleaved to reduce Amiga blitter overhead or in ST screen format.&lt;br /&gt;&lt;br /&gt;The code is factored nicely so I can wrap it up as a command line tool, build a GUI on top of it or maybe make the tool LUA scriptable to automate the cycle of modifying the graphics file and exporting the relevant data. Not sure what people would like for the best. I suppose I could combine the LUA and GUI options so if you start it from a prompt with a NOGUI parameter it'll just run as a (slightly bloated) commandline tool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-6238972029210935457?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/6238972029210935457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2009/09/taking-break-from-68k.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/6238972029210935457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/6238972029210935457'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2009/09/taking-break-from-68k.html' title='Taking a break from 68k'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Q_LcFl6cUXc/SrdGQja8fwI/AAAAAAAAAAc/vtqal8A7Qg8/s72-c/IFFtool.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-6010576645197850576</id><published>2009-09-14T11:12:00.000+02:00</published><updated>2009-09-14T11:23:47.765+02:00</updated><title type='text'>Playing nice with the OS</title><content type='html'>I just had a quick count of what is needed to manage a graphics application on the 16/32 bit machines I've been playing with. The startup library contains exactly what is needed to leave the OS, get a working fullscreen display, wait for the vertical sync, swop the screen buffers and return to the operating system without killing other applications or causing a crash.&lt;br /&gt;&lt;br /&gt;These are the results at the moment.&lt;br /&gt;&lt;br /&gt;Amiga - about 120 lines of 68000, although a copperlist is needed on top of that, but that's application specific.&lt;br /&gt;&lt;br /&gt;Atari ST - about 90 lines of 68000&lt;br /&gt;&lt;br /&gt;Acorn Archimedes - 25 lines of ARM.&lt;br /&gt;&lt;br /&gt;RISC OS is nice like that, you just ignore the operating system apart from a couple of calls to swop buffers, pick a screenmode and check for input and it restores itself afterwards.&lt;br /&gt;The Amiga has the most heavyweight startup library, but even in the small example code I've knocked together I've saved more than the 30 lines difference between the ST and the Amiga (along with the associated rastertime).&lt;br /&gt;&lt;br /&gt;It's a damn shame the Arc was so underrated, it gives the ST a bit of a kicking, although it falls short of the Amiga. Quite a respectable second place I reckon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-6010576645197850576?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/6010576645197850576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2009/09/playing-nice-with-os.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/6010576645197850576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/6010576645197850576'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2009/09/playing-nice-with-os.html' title='Playing nice with the OS'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-4047698634710654547</id><published>2009-09-11T15:00:00.001+02:00</published><updated>2011-09-25T20:38:31.070+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='68k'/><category scheme='http://www.blogger.com/atom/ns#' term='scrolltext'/><category scheme='http://www.blogger.com/atom/ns#' term='Amiga'/><title type='text'>...And on to the Amiga</title><content type='html'>&lt;p&gt;Like many companies in the 1980s I decided to take my first steps onto the Amiga in the time-honoured traditional manner - by cutting and pasting my existing Atari ST code into Devpac Amiga and fiddling the screen output routines a bit. Okay it was &lt;em&gt;slightly&lt;/em&gt; more effort than that, but not much. Most of the effort was put into removing code rather than adding it.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Q_LcFl6cUXc/SqpKK4mbQqI/AAAAAAAAAAU/dKtbCEmLnxs/s1600-h/amigafirst.gif"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 240px; height: 189px;" src="http://3.bp.blogspot.com/_Q_LcFl6cUXc/SqpKK4mbQqI/AAAAAAAAAAU/dKtbCEmLnxs/s320/amigafirst.gif" alt="" id="BLOGGER_PHOTO_ID_5380194255700181666" border="0" /&gt;&lt;/a&gt;Although the screenshot doesn't seem to show much happening the screen is nicely divided up under the control of the copper coprocessor, with a 320x43x4 planes (16 colours) logo at the top, a 4-plane screenbuffer in the middle for rendering effects to (double buffered, naturally) and a 1-bitplane scrolling message along the bottom. There's also a protracker module playing in the background. Because the screen splits are all handled by the copper there's no interrupt uncertainty so the splits are 100% rock solid and no CPU time is lost.&lt;/p&gt;&lt;p&gt;The great thing here is the 'red bar of doom' code profiling method is in effect (turn the border red when your frameloop starts, turn it black when you're done and the thicker the red area the less CPU time you have) but there's nothing showing. If you remember I said the scroller alone on the ST used about 15% of the CPU time. In the Amiga code the bar doesn't even show.&lt;/p&gt;&lt;p&gt;This is what I love about the Amiga - the flexibility of the display hardware. It's a pain to set up (out of 3 days trying to get this going about half was spent just trying to get the screen setup without crashing the OS) but well worth it once you manage it. The ST version worked with an off-screen buffer 336 pixels wide (1 screen plus space for one character) and every frame each byte of graphics data had to be loaded, moved 2 bits to the left, the overflow put into the preceding byte and everything written back. It also had to be copied to the screen (not even using the fast block copies due to the annoying ST plane format) in the correct place.&lt;/p&gt;&lt;p&gt;The Amiga version is more cunning - the scroll buffer is now 84 bytes wide (twice as wide as it was) and each frame the hardware fine scroll is incremented by 2. when that overflows after moving 16 pixels the screen address is incremented 2 words until we've moved along to the right of the buffer. So where do we go then? well every 8 frames we draw the new character twice, so by the time we reach the right hand side of the buffer the left contains an identical copy of it so we can seamlessly snap back to the beginning. This means instead of moving 672 bytes left 2 pixels, then copying those 672 bytes to the screen as on the ST we're just writing 2 bytes every frame (for the fine scrolling), and 70 bytes every 8 frames (2 new characters to draw and to reset the graphics pointer).&lt;/p&gt;&lt;p&gt;Even with an increased resolution of 320x256 and an extra bitplane to bring us up to 32 colours it looks like there's going to be a lot more time on the Amiga for doing stuff.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;..and I haven't even touched the blitter yet.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-4047698634710654547?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/4047698634710654547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2009/09/and-on-to-amiga.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/4047698634710654547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/4047698634710654547'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2009/09/and-on-to-amiga.html' title='...And on to the Amiga'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Q_LcFl6cUXc/SqpKK4mbQqI/AAAAAAAAAAU/dKtbCEmLnxs/s72-c/amigafirst.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4323168899380287942.post-5291388161609562550</id><published>2009-09-11T14:13:00.001+02:00</published><updated>2011-09-25T20:39:00.199+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Atari ST'/><category scheme='http://www.blogger.com/atom/ns#' term='oldschool'/><category scheme='http://www.blogger.com/atom/ns#' term='68k'/><category scheme='http://www.blogger.com/atom/ns#' term='scrolltext'/><title type='text'>First steps in 68000</title><content type='html'>&lt;p&gt;During the late 80s/early 90s all the cool kids had an Amiga. Some pressed on with an ST but still they had their games. Then there was me. I rolled the dice once again and tried the time-tested 'It'll help me with my homework, dad!' line to get myself an Amiga.&lt;/p&gt;&lt;p&gt;He looked around the school computing room and came home with an Archimedes. Not the worst machine, but not exactly overflowing with games released on a weekly basis. Nevertheless it was a good machine for a coder - the ARM 2 wasn't bad, the 12mhz ARM250 was quite nice, the 256 colour palette was naff but it was a friendly machine to code for. And these days ARM is a pretty good skill to have all things considered - they're everywhere, just not that visible.&lt;/p&gt;&lt;p&gt;But coming from a commodore 64 with hardware sprites, rastersplits and videochip trickery I always longed for something with interesting hardware and a few tricks. So to occupy myself a little recently I decided to right the wrongs of the 1990s and jump in to starting out with 68000 assembler... More specifically the ST.&lt;/p&gt;&lt;p&gt;I started with the Atari because of the simpler architecture - A screenbuffer and... yup. That's about it really. It has a few things in common with the Amiga (planar graphics), the palette is only 16 colours and you don't have such fine control (unless you target the STe), no blitter (STe again) but I figured the less custom hardware to setup the less I could get wrong whilst learning the instruction set.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Q_LcFl6cUXc/SqpBaGsIoeI/AAAAAAAAAAM/MEFtYV5ngSE/s1600-h/stfirst.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 240px; height: 189px;" src="http://1.bp.blogspot.com/_Q_LcFl6cUXc/SqpBaGsIoeI/AAAAAAAAAAM/MEFtYV5ngSE/s320/stfirst.gif" alt="" id="BLOGGER_PHOTO_ID_5380184621575610850" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;And here we have the generic 1980s logo and scroller. Bit rough codewise because although it runs at 50hz there's 86 out of 200 lines taken up with static logos and the remaining chessboar area takes about 60% of the CPU time.&lt;/p&gt;&lt;p&gt;The 1-bitplane scroller has to be manually rotated and is then copied into the screen buffer, using another 15-ish percent of the frametime. Not a problem though because the screen is controlled by 2 interrupts - one just below the first logo to set the palette for the 'effect area', and a second below it which swops the video pointers (this doesn't take effect until the next frame), calls the music player (which basically streams out YM soundlog format data) and sets the logo palettes. Not exactly awe-inspiring but not bad for a first attempt and kinda smooth.&lt;/p&gt;&lt;p&gt;There's a youtube video of it in all it's 'glory' &lt;a href="http://www.youtube.com/watch?v=83I1JipzWq0"&gt;stashed away here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Now let's try the Amiga...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4323168899380287942-5291388161609562550?l=onabitplane.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onabitplane.blogspot.com/feeds/5291388161609562550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onabitplane.blogspot.com/2009/09/first-steps-in-68000.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/5291388161609562550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4323168899380287942/posts/default/5291388161609562550'/><link rel='alternate' type='text/html' href='http://onabitplane.blogspot.com/2009/09/first-steps-in-68000.html' title='First steps in 68000'/><author><name>sack</name><uri>http://www.blogger.com/profile/03048010056356310472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Q_LcFl6cUXc/SqpBaGsIoeI/AAAAAAAAAAM/MEFtYV5ngSE/s72-c/stfirst.gif' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
