<?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-2139098190329304711</id><updated>2012-02-16T13:26:01.824Z</updated><category term='Hardware'/><category term='GameDev'/><category term='Astronomy'/><category term='General'/><category term='XGS'/><category term='GID'/><title type='text'>Figment Games</title><subtitle type='html'>The ramblings of a game programmer.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default?start-index=26&amp;max-results=25'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-619891701086371354</id><published>2011-02-22T13:00:00.010Z</published><updated>2011-06-01T22:06:35.343+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>Page Turner Mk II</title><content type='html'>Using an LCD monitor + computer for sheet music display along with the first version of Page Turner has turned out to be a much nicer experience than struggling to page turn manually. However, the iPad lacks a serial port yet it makes for a great portable sheet music display.&lt;br /&gt;&lt;br /&gt;Enter Page Turner Mk II, a USB device that plugs into the iPad's camera connection kit and identifies itself as a USB keyboard device. It sends a page forward/backward keypress depending on which foot pedal is pressed.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-YU7dEamf7MU/TeQTwyNKLUI/AAAAAAAAAEA/nSXrt0WI-vE/s1600/picpedal02.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://2.bp.blogspot.com/-YU7dEamf7MU/TeQTwyNKLUI/AAAAAAAAAEA/nSXrt0WI-vE/s320/picpedal02.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/-ZLb9KN1O2Es/TeQTy1iK72I/AAAAAAAAAEI/UK4FeE_1v1o/s1600/picpedal04.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="212" src="http://1.bp.blogspot.com/-ZLb9KN1O2Es/TeQTy1iK72I/AAAAAAAAAEI/UK4FeE_1v1o/s320/picpedal04.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;The USB port shown in the photos is used to connect a standard USB cable to the iPad via the camera connection kit, as far as the iPad is concerned this is a normal USB keyboard. The two jack sockets on the opposite side of the box accept 3/4" foot pedal jacks to allowing both forward and reverse page turns.&lt;br /&gt;&lt;br /&gt;Holding the "forward" pedal down and plugging the device into a a PC will cause the bootloader to enter flashing mode, allowing new firmware to be downloaded to the device.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-3FJ_cgEqxAQ/TeQTvyQ8QcI/AAAAAAAAAD8/0SS6BGPGbeI/s1600/picpedal01.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://3.bp.blogspot.com/-3FJ_cgEqxAQ/TeQTvyQ8QcI/AAAAAAAAAD8/0SS6BGPGbeI/s320/picpedal01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/-Pnf9aiCj10I/TeQTyCfme3I/AAAAAAAAAEE/FIbdP4NvpCo/s1600/picpedal03.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="212" src="http://2.bp.blogspot.com/-Pnf9aiCj10I/TeQTyCfme3I/AAAAAAAAAEE/FIbdP4NvpCo/s320/picpedal03.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;Internally the device makes use of a PIC 18F4550 which includes a USB module and corresponding stack which avoids interfacing with a separate FTDI chip. A lower pin count PIC could have been used, but I had the 18F4550 spare at the time. Hardware wise, the device is pretty simple with just a few decoupling capacitors, a crystal to drive the PIC and interface connections for the two switches plus USB socket.&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;Since making this, the AirTurn bluetooth model is now on sale in the EU, I had planned to buy one when they became available, however I'm now tempted to make Page Turner Mk III with bluetooth instead :)&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/2139098190329304711-619891701086371354?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/619891701086371354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2011/02/page-turner-mk-ii.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/619891701086371354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/619891701086371354'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2011/02/page-turner-mk-ii.html' title='Page Turner Mk II'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-YU7dEamf7MU/TeQTwyNKLUI/AAAAAAAAAEA/nSXrt0WI-vE/s72-c/picpedal02.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-4579661519710952588</id><published>2010-01-14T18:58:00.005Z</published><updated>2011-06-03T23:48:11.065+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Astronomy'/><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>MX716/7C and SXV 64 Bit CCD Drivers</title><content type='html'>Last year I switched over to a 64bit operating system and realised there were no 64bit drivers available for the MX716 CCD camera I use for astrophotography. Unable to pass up the opportunity to learn about windows driver programming I spent a bit of spare time creating two drivers for the camera (firmware loader and blockIO driver).&lt;br /&gt;&lt;br /&gt;The Windows 7 64bit MX716/7C driver (v1.0.3.1) can be downloaded &lt;a href="https://docs.google.com/uc?export=download&amp;confirm=no_antivirus&amp;id=0B9L1KQlF936aODkzOTY0NTAtZGFlNC00MGEwLWFiZDEtNTk1ZTMwOWFlZDU0"&gt;here&lt;/a&gt;, installation instructions are included.&lt;br /&gt;&lt;br /&gt;The driver supports both the original StarlightXpress software, AstroArt and MaximDL. In addition, the MaximDL universal firmware may be used (see installation instructions for details).&lt;br /&gt;&lt;br /&gt;I've also created 64bit drivers for the newer Lodestar guiding camera and SXV USB2 range of CCDs, these are now available for download direct from the &lt;a href="http://www.starlight-xpress.co.uk/64bit.htm"&gt;Starlight Xpress&lt;/a&gt; site and are for Windows 7 64bit. &lt;br /&gt;&lt;br /&gt;My thanks to Terry from StarlightXpress for his assistance and openness on the SX hardware.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-4579661519710952588?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/4579661519710952588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2010/01/mx7167c-and-sxv-64-bit-ccd-drivers.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/4579661519710952588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/4579661519710952588'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2010/01/mx7167c-and-sxv-64-bit-ccd-drivers.html' title='MX716/7C and SXV 64 Bit CCD Drivers'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-3079431843891012282</id><published>2009-08-24T21:49:00.035+01:00</published><updated>2011-06-04T00:07:18.686+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>Page Turner</title><content type='html'>Its about a year and a half since I bought a Digital Piano and finally started practicing daily. In that time I've progressed quite well and the pieces I'm able to play (albeit still at the late-elementary / early intermediate level) are finally starting to increase in length to a few pages.&lt;br /&gt;&lt;br /&gt;This has brought about a problem I'd not really considered up to this point that I'm sure plagues all pianists. How to turn the page without interrupting your playing. Given time I'm sure I could get used to reaching up and turning the page and make do with copying a few measures from the next page to get me to a suitable place to turn the page, but I'd rather not :)&lt;br /&gt;&lt;br /&gt;A product called the AirTurn provides a solution to this problem. However, as a hardware hobbiest I decided to roll my own. Using a Laptop or LCD monitor to display the scores in either Adobe Reader or Music Reader and a serial connected foot pedal to fire off a PG Down event. &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/-7fM6RV2k3dI/Teai3yb-mxI/AAAAAAAAAEg/VGMBtQ2Bj2k/s1600/PedalSmall.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-7fM6RV2k3dI/Teai3yb-mxI/AAAAAAAAAEg/VGMBtQ2Bj2k/s320/PedalSmall.JPG" width="320" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/-Wji2tEJzqR8/Teai4Jg2CaI/AAAAAAAAAEk/OELxJPcvkpg/s1600/Capture2.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="157" src="http://4.bp.blogspot.com/-Wji2tEJzqR8/Teai4Jg2CaI/AAAAAAAAAEk/OELxJPcvkpg/s320/Capture2.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://blog.figmentgames.com/wp-content/uploads/2009/08/PedalSmall.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;Above is a picture of the final device and a screen shots of the pedal turner .NET application which monitors the serial port and sends out PAGE DOWN keyboard events to the activate application whenever the pedal is pushed down.&lt;br /&gt;&lt;br /&gt;The application and documentation, which also includes brief instructions on how to build your own serial connector (it's pretty simple!) can be &lt;a href="https://docs.google.com/uc?id=0B9L1KQlF936aMzI4YjIxY2ItYjJmYy00ZDc4LTg4NmUtYTc0YjU4MDk1NmQ0&amp;export=download&amp;hl=en_US"&gt;downloaded here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As a side benefit to going digital, there's no more printing out digital music from the various on-line stores and no more hunting around for a specific score amongst the thousands of downloadable public domain scores.&lt;br /&gt;&lt;br /&gt;With PDF Annotator or MusicReader, it's also possible to annotate the scores, adding fingering information and highlighting practice sections. Plus re-ordering pages so they're out of sequence is great for handling all those jumps back and forth in a piece. [Shortly after writing this blog I purchased MusicReader and have not regreted it.]&lt;br /&gt;&lt;br /&gt;I've demo'd several other apps, but mostly they're related to music notation rather than playing from a score. Theres some pretty cool OCR software available for music  that'll scan a score, convert it to various formats including MusicXML  and allow you to play it back. Unfortunately, all the apps that include that kind of feature do not seem to offer any kind of library management nor are they as suited to playing from and annotating scores as MusicReader is.&lt;br /&gt;&lt;br /&gt;From what little I've used of MusicReader so far, one feature I'd like to see added is a layer option. Having the ability to erase all annotations on a given layer whilst keeping marks made on other layers rather than having to be careful what you erase. Plus an option to toggle the visible layers.&lt;br /&gt;&lt;br /&gt;I guess I can't discuss paperless playing without mentioning &lt;a href="http://www.hughsung.com/blog/"&gt;Hugh Sung&lt;/a&gt;, who's blog and youtube videos put me onto MusicReader and the pedal page turning idea in the first place. His company produce the &lt;a href="http://www.airturn.com/"&gt;AirTurn&lt;/a&gt;, which is a USB device that allows you to connect a set of pedals to your PC without wires. His site is also responsible for the expensive notion of buying a table PC that I now have stuck in my head, hopefully the idea will remain there and not make it to my credit card ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-3079431843891012282?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/3079431843891012282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2009/08/page-turner.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/3079431843891012282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/3079431843891012282'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2009/08/page-turner.html' title='Page Turner'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-7fM6RV2k3dI/Teai3yb-mxI/AAAAAAAAAEg/VGMBtQ2Bj2k/s72-c/PedalSmall.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-199728641894279306</id><published>2009-07-02T22:18:00.000+01:00</published><updated>2011-06-01T22:52:48.580+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Astronomy'/><title type='text'>RA Clutch Slippage</title><content type='html'>Back in 2002 when I purchased my first telescope, an 8" LX90, the first month or so of usage brought up a very frustrating problem. When slewing the scope to a new target it would suddenly stop mid-slew, yet the motors continued to whir. The cause, the RA clutch had loosened and was no longer engaged, gotos were now ruined and after tightening the RA knob to engage the clutch I had to start the alignment process over again. Very frustrating.&lt;br /&gt;&lt;br /&gt;I solved the problem after receiving some useful suggestions from the LX90 yahoo group, not a single clutch slip in nearly 7 years usage :) Earlier today I received an email asking about how I fixed the issue so I thought I may as well type it up.&lt;br /&gt;&lt;br /&gt;The cause of the clutch slippage is pretty simple, as is the fix. The knob that you tighten on the base of the LX90 to engage the clutch is pushing against not only the clutch but the top of the LX90 base too. As the scope slews, the friction between the base and knob is sufficient to slowly unscrew and disengage the clutch. So the fix is simply to raise the knob off of the base of the LX90.&lt;br /&gt;&lt;br /&gt;To do so, use an Allen key to loosen the small screw on the side of the RA clutch knob. Then turn the knob anti-clockwise until it catches and starts to unscrew. It should eventually come fully off as the photo below shows.&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/-9ewEdpFy3IM/TeardbRm0WI/AAAAAAAAAEo/KSbPS8plwuA/s1600/ra_fix_1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-9ewEdpFy3IM/TeardbRm0WI/AAAAAAAAAEo/KSbPS8plwuA/s320/ra_fix_1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Notice the circular scratch marks from the RA knob contacting the base.&lt;br /&gt;&lt;br /&gt;Inserting a nylon or fibre washer (not metal) over the bolt that protrudes from the base, one that is small enough to fit &lt;b&gt;inside&lt;/b&gt; the hole, will raise the RA knob just enough to prevent contact occuring with the telescope base when the clutch is engaged. &lt;br /&gt;&lt;br /&gt;If you look at the base of the bolt, you should be able to make out the washer I've added. Here's a close up&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-5flwKmnHJGg/Teard4GCnmI/AAAAAAAAAEs/YCYKf9mxyIo/s1600/ra_fix_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-5flwKmnHJGg/Teard4GCnmI/AAAAAAAAAEs/YCYKf9mxyIo/s320/ra_fix_2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://blog.figmentgames.com/wp-content/uploads/2009/07/ra_fix_2.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Re-assembly is straight forward, just be sure the clutch is fully engaged before you tighten the tiny screw on the RA knob.&lt;br /&gt;&lt;br /&gt;With this simple fix, you only need to apply a little pressure when tightening the RA knob and engaging the clutch. Also, no matter how much you slew the scope, the knob should no longer contact the base and cause the clutch to slip.&lt;br /&gt;&lt;br /&gt;More recently, I've taken apart the DEC axis to fix a significant (when viewed through eyepiece) amount of slop of 5-10 degrees. When I get a spare moment, I'll upload photos of the disassembly. They show the amount of excess grease inside the dec axis and the cause of the slop, an over tightened screw on the worm gear!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-199728641894279306?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/199728641894279306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2009/07/ra-clutch-slippage.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/199728641894279306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/199728641894279306'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2009/07/ra-clutch-slippage.html' title='RA Clutch Slippage'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-9ewEdpFy3IM/TeardbRm0WI/AAAAAAAAAEo/KSbPS8plwuA/s72-c/ra_fix_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-2714608585241837276</id><published>2009-03-07T01:57:00.040Z</published><updated>2011-06-02T01:02:02.206+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Astronomy'/><title type='text'>CCD Image Processing</title><content type='html'>Its been a while since I've made an astronomy post, not because I haven't had the scope out imaging, but because I haven't been all that happy with recent results. My images have been showing a nasty central brightening that prevents fainter details been brought out in post processing.&lt;br /&gt;&lt;br /&gt;Why is this a problem? Take a look at the image below of M51. I've stretched the data a little to emphasise the brightening. The problem is that in order to bring out fainter details in the galaxy or the lower magnitude stars around the edges of the image, the data levels need adjusting. However, long before those stars are visible, the bright centre has spread across the entire image and ruined it.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-LKaNq_eMDsw/TeawO3zpWXI/AAAAAAAAAE4/h3ysM0tyIYg/s1600/m51_120s-001l_highstretch.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="246" src="http://2.bp.blogspot.com/-LKaNq_eMDsw/TeawO3zpWXI/AAAAAAAAAE4/h3ysM0tyIYg/s320/m51_120s-001l_highstretch.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;Vignetting&lt;/h3&gt;After doing some research, it turns out this is known as vignetting and is a problem caused by the telescope optics. &lt;a href="http://www.mapug-astronomy.net/ragreiner/vignetting.html"&gt;MAPUG-Astronomy&lt;/a&gt; describes this in great detail, but the important part is&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The image is brightest on axis, at the center of the field of view, and dimmer off axis. This is a classical case of vignetting. Note that this is not a sharp cut off of the image, but a gradual dimming of it. Unfortunately, it is a feature of folded telescope optics which cannot be avoided.&lt;/blockquote&gt;&lt;br /&gt;&lt;h3&gt;Flat Frames&lt;/h3&gt;Although nothing can be done to prevent vignetting, it turns out there's a way to account for the dimming and in turn remove it from the images. Enter the Light Box. By taking a photo of an evenly lit area, the dimming of pixels from vignetting can be isolated and then in turn removed from the light frame. &lt;br /&gt;&lt;br /&gt;I've built a light box using foamboard to construct the box and holders for the diffusers. Two sheets of opal perspex slot into the holders to diffuse the light (from four LEDs) and present a flatly lit front pane. The box is loosly based on the many designs posted throughout the net. It won't win any awards for construction, but it was cheap :) About £25 in materials which can likely be sourced for cheaper than that. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-okWNNGBLQnk/TeawNEBcc0I/AAAAAAAAAEw/WlxysUFiXig/s1600/lightbox_internal.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-okWNNGBLQnk/TeawNEBcc0I/AAAAAAAAAEw/WlxysUFiXig/s320/lightbox_internal.jpg" width="320" /&gt;&lt;/a&gt; &lt;a href="http://4.bp.blogspot.com/-96FGUTJSHOk/TeawOQ0yY9I/AAAAAAAAAE0/6h4Fmp5I7IE/s1600/lightbox_on.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-96FGUTJSHOk/TeawOQ0yY9I/AAAAAAAAAE0/6h4Fmp5I7IE/s320/lightbox_on.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;Here's an avi showing the light box image captured by the CCD in various rotated positions to ensure the field is evenly lit and that the dimming is due to vignetting and not shoddy light box construction ;)&lt;br /&gt;&lt;br /&gt;&lt;iframe class="youtube-player" type="text/html" width="640" height="494" src="http://www.youtube.com/embed/EstWih5R4q8" frameborder="0"&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=EstWih5R4q8"&gt;Flat Field YouTube&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Calibration&lt;/h3&gt;&lt;br /&gt;After calibrating the images with the flat field frames, here's the result.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/-Kl5fReDTOqc/TeawPj9Zk9I/AAAAAAAAAE8/AL4WtiRmuwg/s1600/m51_120s-001l_after_callibration.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="246" src="http://4.bp.blogspot.com/-Kl5fReDTOqc/TeawPj9Zk9I/AAAAAAAAAE8/AL4WtiRmuwg/s320/m51_120s-001l_after_callibration.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The bright gradient has now been eliminated. All that remains is a bit of signal noise which can be handled by stacking multiple short exposures. Below is the first stacked and calibrated image. I'm still working on alternative ways to process the fits data to improve the image, but a quick processing shows promising results. &lt;br /&gt;&lt;br /&gt;After a closer inspection of the combined frames, there is still a slight gradient from the bottom of the image moving upwards towards the centre. Whether this is due to the light box not providing a totally flat field frame or simply light pollution, I'm not yet certain.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;A Trio of Galaxies&lt;/h3&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: right;"&gt;&lt;a href="http://3.bp.blogspot.com/-LkiYKYKFwhA/TeawQGfzI1I/AAAAAAAAAFA/uVF6sg8lJNE/s1600/m51.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://3.bp.blogspot.com/-LkiYKYKFwhA/TeawQGfzI1I/AAAAAAAAAFA/uVF6sg8lJNE/s320/m51.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Exposure Time: 30x120s Avg&lt;/li&gt;&lt;li&gt;Date: 2009-03-05 03:06 UTC&lt;/li&gt;&lt;li&gt;CCD: Starlight XPress MX716&lt;/li&gt;&lt;li&gt;Scope: LX90 8"&lt;/li&gt;&lt;li&gt;Dark Frames: 10x120s Avg&lt;/li&gt;&lt;li&gt;Flat Frames: 10x0.8s Avg&lt;/li&gt;&lt;li&gt;Apparent Dimension: 11 x 7 arc min&lt;/li&gt;&lt;li&gt;Visual Brightness: 8.4 mag&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The centre of the image shows two galaxies, the first and larger NGC 5194 and just above it NGC 5195. The two colliding galaxies are better known as M51 the Whirlpool Galaxy.&lt;br /&gt;&lt;br /&gt;During processing I noticed a faint object in the lower right corner. According to the reference of bright galaxies, this is IC 4263, a magnitude 15 galaxy measuring only 2x0.4 arc minutes in size.&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/-IUiRWpEZDYc/TeawQtlsPaI/AAAAAAAAAFE/A9b5Ew-pjZc/s1600/m51_highpass.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="248" src="http://1.bp.blogspot.com/-IUiRWpEZDYc/TeawQtlsPaI/AAAAAAAAAFE/A9b5Ew-pjZc/s320/m51_highpass.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The image to the right has had a high pass filter applied as an attempt to sharpen the image a little. I'm still not sure which of the two I prefer most.&lt;br /&gt;&lt;br /&gt;I've glossed over all the details of calibrating images, but if you're interested in knowing more there's a few sites with more detailed descriptions. Such as &lt;a href="http://www.aavso.org/observing/programs/ccd/manual/3.shtml"&gt;AAVSO&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There's still a lot of room for improvement. Still, compared to my &lt;a href="http://blog.figmentgames.com/wp-content/uploads/2007/03/whirlpool.png"&gt;previous attempts&lt;/a&gt; at M51, I think the light box was worth every penny :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-2714608585241837276?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/2714608585241837276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2009/03/ccd-image-processing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/2714608585241837276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/2714608585241837276'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2009/03/ccd-image-processing.html' title='CCD Image Processing'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-LKaNq_eMDsw/TeawO3zpWXI/AAAAAAAAAE4/h3ysM0tyIYg/s72-c/m51_120s-001l_highstretch.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-2955290209163080494</id><published>2007-11-28T15:23:00.005Z</published><updated>2011-06-02T23:53:48.000+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Astronomy'/><title type='text'>Orion Nebula</title><content type='html'>Winter is usually a great time for astronomy with longer nights and the sun setting at a reasonable hour, with the forecast for last Friday as clear until 12am I thought I'd put in a few more hours imaging. I hadn't realised it was a waxing gibbous moon until after I'd lugging all the gear outside and started setting up.&lt;br /&gt;&lt;br /&gt;A nearly full moon, combined with a slightly hazy sky limited the choice of objects severely. The moon was out of the question, as I've yet to buy a moon filter, even on the lowest exposure setting of 0.001 seconds the ccd chip was becoming fully saturated. So I turned instead to the Orion Nebula, M42.&lt;br /&gt;&lt;br /&gt;At magnitude 4.0 the nebula is visible as a fuzzy gray blob to the naked eye, just below the belt of Orion. I took a total of 90 exposures (81 usable) at 15 seconds each in an attempt to not burn out the central core on the 15 second exposures, whilst bringing out the fainter detail.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ql_WzLjijXA/TegSdwJP_XI/AAAAAAAAAFU/GEFMlYysm60/s1600/m42.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="155" src="http://4.bp.blogspot.com/-ql_WzLjijXA/TegSdwJP_XI/AAAAAAAAAFU/GEFMlYysm60/s200/m42.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Exposure Time: 15x81s Avg&lt;/li&gt;&lt;li&gt;Date: 2007-11-23 23:47:55 UTC&lt;/li&gt;&lt;li&gt;CCD: Starlight XPress MX716&lt;/li&gt;&lt;li&gt;Scope: LX90 8"&lt;/li&gt;&lt;li&gt;Dark Frames: 15x15s Median&lt;/li&gt;&lt;li&gt;Apparent Dimension: 85x60 arc min&lt;/li&gt;&lt;li&gt;Visual Brightness: 4.0 mag&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Since it looked neat, I've uploaded a pseudo colour version, this isn't in anyway the true colour of the Orion Nebula, I don't have any colour filters yet :)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-JfCHVITmLp0/TegSeQyEXLI/AAAAAAAAAFY/6EgFK5zp6Mo/s1600/m42_pseudo_colour.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="155" src="http://4.bp.blogspot.com/-JfCHVITmLp0/TegSeQyEXLI/AAAAAAAAAFY/6EgFK5zp6Mo/s200/m42_pseudo_colour.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;I believe this is my best image to date. Although it's still not quite in focus, the exposure was perhaps too long resulting in a burnt out core. Not to mention the moon/haze made post processing a nightmare with a bright central light gradient to remove. &lt;br /&gt;&lt;br /&gt;Collimation of the scope is still slightly out. I spent an hour before taking this image to improve it a little, but it's going to take stabler skies before I can collimate at a reasonable magnification. I think the sky stability and lack of good collimation is partly to blame for the difficulty in achieving a good focus.&lt;br /&gt;&lt;br /&gt;I'm looking forward to re-imaging this object on a moonless night to see how big an improvement I can achieve.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-2955290209163080494?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/2955290209163080494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2007/11/orion-nebula.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/2955290209163080494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/2955290209163080494'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2007/11/orion-nebula.html' title='Orion Nebula'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-ql_WzLjijXA/TegSdwJP_XI/AAAAAAAAAFU/GEFMlYysm60/s72-c/m42.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-7509503972033696655</id><published>2007-09-12T13:27:00.002+01:00</published><updated>2011-06-03T00:20:07.684+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Astronomy'/><title type='text'>"My God, it's full of stars!"</title><content type='html'>The usual clouds that seem to be permanently situated above the UK parted for a few days, which finally coincided with a few evenings I had spare. The LX90 hasn't seen the night sky since way back in March, when I last had it pointing skyward for my first real attempts at collimation. &lt;br /&gt;&lt;br /&gt;The seeing over the last few nights, has still been poor, with stars twinkling away making achieving critical focus very difficult. The collimation adjustments from March do seem to have improved things, although I still think finer adjustments will be needed on a night with better seeing.&lt;br /&gt;&lt;br /&gt;On the first nights outing, Polar alignment was woeful and gotos were constantly 1/4 fov in the finder off. Still, I managed to image a few objects, the two most notable been a double star cluster in Persei and M33 a spiral Galaxy in Triangulum. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;h Persei Open Cluster&lt;/h3&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-a90rZgX2PIs/TegWVEewxgI/AAAAAAAAAFk/J3LQQLm3-SU/s1600/hpersei.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="155" src="http://4.bp.blogspot.com/-a90rZgX2PIs/TegWVEewxgI/AAAAAAAAAFk/J3LQQLm3-SU/s200/hpersei.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Exposure Time: 6x60s Avg&lt;/li&gt;&lt;li&gt;Date: 2007-09-08 02:44:37 UTC&lt;/li&gt;&lt;li&gt;CCD: Starlight XPress MX716&lt;/li&gt;&lt;li&gt;Scope: LX90 8"&lt;/li&gt;&lt;li&gt;Dark Frames: 7x60s Avg&lt;/li&gt;&lt;li&gt;Apparent Dimension: 30 arc min&lt;/li&gt;&lt;li&gt;Visual Brightness: 4.3 mag&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The image above is h Persei (NGC 869), which along with Chi Persei (NGC 884) forms a double cluster. The full double cluster was a little too large to fit into the tiny fov of my CCD camera, I've not calculated the exact fov yet, but it's somewhere around 30 to 60 arc minutes. &lt;br /&gt;&lt;br /&gt;Open clusters are interesting objects as they contain hundreds, sometimes thousands of stars, all of which were born around the same time and are still gravitationally bound (however loosely) to each other. This is in contrast to Globular Clusters (such as M15 which I imaged on Monday and will upload later) which are strongly bound and often contain millions of stars in a tightly packed ball, making them stunning visual objects.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;M33 Spiral Galaxy in Triangulm&lt;/h3&gt;&lt;a href="http://3.bp.blogspot.com/-dSce_PjcttY/TegWVgz-yMI/AAAAAAAAAFo/PJ-Hmp9eNlE/s1600/m33.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="155" src="http://3.bp.blogspot.com/-dSce_PjcttY/TegWVgz-yMI/AAAAAAAAAFo/PJ-Hmp9eNlE/s200/m33.jpg" width="200" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Exposure Time: 15x60s Avg&lt;/li&gt;&lt;li&gt;Date: 2007-09-08 02:12:17 UTC&lt;/li&gt;&lt;li&gt;CCD: Starlight XPress MX716&lt;/li&gt;&lt;li&gt;Scope: LX90 8"&lt;/li&gt;&lt;li&gt;Dark Frames: 7x60s Avg&lt;/li&gt;&lt;li&gt;Apparent Dimension: 70x45 arc min&lt;/li&gt;&lt;li&gt;Visual Brightness: 5.7 mag&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I'm quite pleased with the M33 image, the stars are reasonably well focused and the spiral arms are fairly visible. It's far from a perfect image, with a good proportion of the outer arms not visible, but considering the skies were a little hazy and how blurry my previous images have turned out, I think this is a huge improvement.&lt;br /&gt;&lt;br /&gt;Also just about visible on the edges of M33 is &lt;a href="http://seds.org/messier/more/m033_n604.html"&gt;NGC 604&lt;/a&gt; a diffuse nebula. &lt;br /&gt;&lt;br /&gt;I also imaged M31 the great Andromeda Galaxy, however after underestimating the sheer size of it, the image ended up containing only the bright core and a few dust lanes.&lt;br /&gt;&lt;br /&gt;At the start of this week I also managed a third night imaging several objects, M15, M101, NGC7780, NGC 281 (Pacman Nebula ;) as well as a poor image of M42 taking during early dawn. I should have these processed and the best uploaded to this post later this week.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;M15 Globular Cluster in Pegasus&lt;/h3&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-k7DnRiyqgag/TegWV88ygyI/AAAAAAAAAFs/txYtXgJ5XTo/s1600/m15.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="155" src="http://2.bp.blogspot.com/-k7DnRiyqgag/TegWV88ygyI/AAAAAAAAAFs/txYtXgJ5XTo/s200/m15.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Exposure Time: 15x60s Avg&lt;/li&gt;&lt;li&gt;Date: 2007-09-10 23:48:16 UTC&lt;/li&gt;&lt;li&gt;CCD: Starlight XPress MX716&lt;/li&gt;&lt;li&gt;Scope: LX90 8"&lt;/li&gt;&lt;li&gt;Dark Frames: 15x60s Avg&lt;/li&gt;&lt;li&gt;Apparent Dimension: 18 arc min&lt;/li&gt;&lt;li&gt;Visual Brightness: 6.2 mag&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-7509503972033696655?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/7509503972033696655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2007/09/god-it-full-of-stars.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/7509503972033696655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/7509503972033696655'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2007/09/god-it-full-of-stars.html' title='&amp;quot;My God, it&amp;#39;s full of stars!&amp;quot;'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-a90rZgX2PIs/TegWVEewxgI/AAAAAAAAAFk/J3LQQLm3-SU/s72-c/hpersei.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-8412684515718935559</id><published>2007-09-01T21:54:00.010+01:00</published><updated>2011-06-04T00:04:30.528+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GameDev'/><title type='text'>GID 23 - Brew Isles</title><content type='html'>GID 23 took place a few weeks ago on the 11th/12th of August. &lt;br /&gt;&lt;br /&gt;It all began at approximately 11:01.34pm Saturday night, with nearly half of GID#23 already gone and yet I still had no idea what to do. Tom suggested I team up with him to do something similar to the original &lt;a href="http://www.greatgamesexperiment.com/game/teaminator"&gt;Teaminator&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We had no idea what the game was going to be about only that it had to involve Tea. A large part of the core code was already in place from previous GID's Tom had done, which left us free to concentrate on more game specific issues. &lt;br /&gt;&lt;br /&gt;The result by the end of Sunday was larger than expected and shows clear signs of the games and tv show we drew inspiration from; Monkey Island, Dizzy and Open All Hours. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-toQB2AMdPeM/TegWvdSjgVI/AAAAAAAAAGA/Y2xs_vrk914/s1600/openallhours.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-toQB2AMdPeM/TegWvdSjgVI/AAAAAAAAAGA/Y2xs_vrk914/s1600/openallhours.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-dww-FXhL-4g/TegWwLFvNDI/AAAAAAAAAGI/YgxBGtFJeSA/s1600/dizzy-2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://4.bp.blogspot.com/-dww-FXhL-4g/TegWwLFvNDI/AAAAAAAAAGI/YgxBGtFJeSA/s200/dizzy-2.jpg" width="200" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/-14tl1EAa6Mg/TegWvxGDOOI/AAAAAAAAAGE/5vxv1KMcoq0/s1600/dizzy.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/-14tl1EAa6Mg/TegWvxGDOOI/AAAAAAAAAGE/5vxv1KMcoq0/s200/dizzy.jpg" width="200" /&gt;&amp;nbsp;&lt;/a&gt;&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/-AP9ViN4xo_w/TegchXNRIeI/AAAAAAAAAGQ/0RrBuoY8RHw/s1600/screen05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="125" src="http://1.bp.blogspot.com/-AP9ViN4xo_w/TegchXNRIeI/AAAAAAAAAGQ/0RrBuoY8RHw/s200/screen05.jpg" width="200" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/-q_SFiaDei4o/Tegcgn7NmLI/AAAAAAAAAGM/E-_BrEn949o/s1600/screen01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="125" src="http://4.bp.blogspot.com/-q_SFiaDei4o/Tegcgn7NmLI/AAAAAAAAAGM/E-_BrEn949o/s200/screen01.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I finally got around to playing Treasure Island Dizzy the other night, which I used to have for the C128 (or was it the Amiga, I forget which). It's strange going back and playing games which I played many years ago. Some games I remember as amazing, and yet on playing them again all the fond memories of how good the game was, which you've over the years raised onto a pedestal of "how games should be", comes crashing down as you suddenly realize you've built the game up to be more than it really was.  Fortunately that isn't the case with Dizzy nor Monkey Island (which I'm also part way through replaying) &lt;br /&gt;&lt;br /&gt;I had forgotten just how &lt;a href="http://www.gamasutra.com/view/feature/1640/game_design_essentials_20_.php"&gt;HARD older games really are&lt;/a&gt;. Most games these days you can pickup and play for some time before you die, try playing Dizzy for more than a minute without dieing several times!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ln-Sl6ZgYY0/TegWn4hIhTI/AAAAAAAAAF0/Xwbfm6rRNC8/s1600/screenshot_001-00003.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://2.bp.blogspot.com/-ln-Sl6ZgYY0/TegWn4hIhTI/AAAAAAAAAF0/Xwbfm6rRNC8/s200/screenshot_001-00003.jpg" width="200" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/-Bwre_fkDd-8/TegWoeBoESI/AAAAAAAAAF4/30PMi_6t-Fg/s1600/screenshot_001-00002.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://2.bp.blogspot.com/-Bwre_fkDd-8/TegWoeBoESI/AAAAAAAAAF4/30PMi_6t-Fg/s200/screenshot_001-00002.jpg" width="200" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/-L0y5jP6YJ20/TegWo_uf0SI/AAAAAAAAAF8/g0TCuCOsbkg/s1600/brew-isles-02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/-L0y5jP6YJ20/TegWo_uf0SI/AAAAAAAAAF8/g0TCuCOsbkg/s200/brew-isles-02.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The GID did highlight a few areas of the Engine which could do with improvements, which has resulted in a complete overhaul of the dialogue system to now use a node based tree structure. This enables dialogue to be constructed through a parent/child relationship of dialogue and dialogueItem nodes. &lt;br /&gt;&lt;br /&gt;Special purpose nodes can also be inserted into the tree allowing actions to be performed on the display of specific dialogue or the selection of a dialogue option. New node types will be added in the future to support a variety of actions, for example, enabling a quest, playing an animation or transitioning the camera. A general purpose callback node functions as a stop gap until new node types are available.&lt;br /&gt;&lt;br /&gt;The Quest system has also seen a significant improvement along with the addition of an &lt;a href="http://www.garagegames.com/blogs/22864/13423"&gt;NPC Editor&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Download the &lt;a href="https://docs.google.com/uc?id=0B9L1KQlF936aZWJmZjQ2MTgtNWNkNC00OTJlLTgxNTQtYmRjNGMxNzY0ZWRk&amp;export=download&amp;hl=en_US"&gt;Brew Isles prototype&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-8412684515718935559?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/8412684515718935559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2007/09/gid-23-brew-isles.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/8412684515718935559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/8412684515718935559'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2007/09/gid-23-brew-isles.html' title='GID 23 - Brew Isles'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-toQB2AMdPeM/TegWvdSjgVI/AAAAAAAAAGA/Y2xs_vrk914/s72-c/openallhours.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-7453662612315398451</id><published>2007-03-29T23:59:00.003+01:00</published><updated>2011-06-03T00:39:58.299+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Astronomy'/><title type='text'>A few images</title><content type='html'>For a change the skies were relatively clear on Monday night so I took the opportunity to take the scope out and take a few images. Unfortunately I made a few mistakes during setup that resulted in woeful polar alignment giving a 5 second max exposure time before star trailing became apparent, compared to the usual 5+ minutes I've acheived with previous drift aligning... With fog rolling in I had little time to correct it and instead made do.&lt;br /&gt;&lt;br /&gt;Despite using the fastest exposure time my ccd camera was capable of 0.001s, the moon was still over exposed. Really a filter will be needed to reduce the light gathered by the scope for future attempts. Still with a bit of post processing I've managed to isolate the overexposure to a smaller area.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-K0luPrvqwS0/Tege4YcHo8I/AAAAAAAAAGU/WnPaA3hwzuY/s1600/moon.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="153" src="http://2.bp.blogspot.com/-K0luPrvqwS0/Tege4YcHo8I/AAAAAAAAAGU/WnPaA3hwzuY/s200/moon.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a class="imagelink" href="http://blog.figmentgames.com/wp-content/uploads/2007/09/moon.png" title="Moon"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Exposure Time: 1 x 0.001s&lt;/li&gt;&lt;li&gt;Date: 2007-03-27 00:42:07 UTC&lt;/li&gt;&lt;li&gt;CCD: Starlight XPress MX716&lt;/li&gt;&lt;li&gt;Scope: LX90 8"&lt;/li&gt;&lt;li&gt;Dark Frames: 2x0.001s averaged&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The second image was taken through the first wave of fog and suffered for it, especially with it been a 1/2 moon and limited to 5 second exposure times :( If I'd noticed the fog coming in, I'd have packed up before the corrector plate became saturated, the dew heater didn't stand a chance :( &lt;br /&gt;&lt;br /&gt;Still, you can just about make out the spiral arms of M51 and the companion galaxy above as well as the effects of the moon and fog despite post processing attempts to clean it up ;) I plan to reimage this pair of galaxies on a fogless night with more suitable exposure times to really bring out the detail.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-tY3uk8XyR4M/Tege45_2CXI/AAAAAAAAAGY/XitXNjYOWYE/s1600/whirlpool.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="153" src="http://2.bp.blogspot.com/-tY3uk8XyR4M/Tege45_2CXI/AAAAAAAAAGY/XitXNjYOWYE/s200/whirlpool.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a class="imagelink" href="http://blog.figmentgames.com/wp-content/uploads/2007/03/whirlpool.png" title="M51 Whirlpool Galaxy"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Exposure Time: 20 x 5s aligned and stacked&lt;/li&gt;&lt;li&gt;Date: 2007-03-27 01:26:36 UTC&lt;/li&gt;&lt;li&gt;CCD: Starlight XPress MX716&lt;/li&gt;&lt;li&gt;Scope: LX90 8"&lt;/li&gt;&lt;li&gt;Dark Frames: 1x5s&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Tuesday was again a clear night, but yet again fog rolled in early. Knowing the nights imaging would be short, I decided against setting up for photography and instead spend the time collimating the scope to get the mirrors aligned correctly, which after allowing 90 minutes cooldown didn't leave all that long. &lt;br /&gt;&lt;br /&gt;Seeing was only good enough to collimate with a 12mm eyepiece, still I felt it improved views of Saturn and the moon considerably unless it was a placebo effect, guess I'll find out next time I the ccd camera is setup. I'm sure given a night with better seeing allowing a 6mm eyepiece to be used, I could improve on the collimating further, which I'm hoping will improve the problems I've been having achieving a good focus whilst imaging.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-7453662612315398451?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/7453662612315398451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2007/03/few-images.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/7453662612315398451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/7453662612315398451'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2007/03/few-images.html' title='A few images'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-K0luPrvqwS0/Tege4YcHo8I/AAAAAAAAAGU/WnPaA3hwzuY/s72-c/moon.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-461591689465084859</id><published>2006-12-23T01:09:00.003Z</published><updated>2011-06-03T00:50:43.382+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GameDev'/><title type='text'>Shelled Postmortem</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-TS_BSuGAMTs/TegfnZ6HmaI/AAAAAAAAAGc/Qa5_B5bxDcI/s1600/3504.shelledsnapshot.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-TS_BSuGAMTs/TegfnZ6HmaI/AAAAAAAAAGc/Qa5_B5bxDcI/s200/3504.shelledsnapshot.jpg" width="133" /&gt;&lt;/a&gt;&lt;/div&gt;For anyone that hasn't already seen it, I've posted a Shelled! postmortem over on the &lt;a href="http://www.garagegames.com/blogs/40653/11898"&gt;GarageGames Site&lt;/a&gt;. You can also download the &lt;a href="http://www.figmentgames.com/downloads/shelled/shelled_postmortem.pdf"&gt;PDF version&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hope you all have a Merry Christmas and a Happy New Year! &lt;br /&gt;&lt;br /&gt;PS: Guitar Hero ROCKS! Go buy it :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-461591689465084859?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/461591689465084859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2006/12/shelled-postmortem.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/461591689465084859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/461591689465084859'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2006/12/shelled-postmortem.html' title='Shelled Postmortem'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-TS_BSuGAMTs/TegfnZ6HmaI/AAAAAAAAAGc/Qa5_B5bxDcI/s72-c/3504.shelledsnapshot.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-8935227977407101430</id><published>2006-11-17T00:46:00.000Z</published><updated>2011-06-03T00:48:26.254+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GameDev'/><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Shelled Released!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-TS_BSuGAMTs/TegfnZ6HmaI/AAAAAAAAAGc/Qa5_B5bxDcI/s1600/3504.shelledsnapshot.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-TS_BSuGAMTs/TegfnZ6HmaI/AAAAAAAAAGc/Qa5_B5bxDcI/s320/3504.shelledsnapshot.jpg" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Shelled! is finally out the door and it's FREE! For those that don't know what I'm talking about, head over to &lt;a href="http://www.shelledgame.com/"&gt;www.shelledgame.com&lt;/a&gt; to read about the game and download it.&lt;br /&gt;&lt;br /&gt;I played for a few hours the other night, with 5 other people, great fun. Very easy for the odd grudge match to develop when you get shelled by another player ;) The poor AI always take a pounding in round 1 while everyone tries to stock up on cash for those nukes and high fives.&lt;br /&gt;&lt;br /&gt;Out of all the shell types, there are only two I find I don't use at the moment. Every other shell has its uses depending upon the terrain. Slider shells are useful on very hilly terrain, high fives are great for a quick fly by shelling, the machine gun works great as a defensive shell when your jets have overheated and you have a tank inbound. The use for the leveler isn't obvious at first, but it can give a slight advantage on a few levels, I'll leave you to figure our which and how but a hint is the rocket comes into its own on the same level.&lt;br /&gt;&lt;br /&gt;You could play Shelled! using nothing other than the default shell and do fairly well, but if you happen to play another human player that has discovered fly by high five shellings, you'll be in for a hard time making first place!&lt;br /&gt;&lt;br /&gt;The game has a few nice tactics, which may at first not be apparent, after a while though I'm sure most people will work them out. Remember the machine gun is your friend, turtles with rocket jets are meant to fly and although the nuke is costly, nothing says good night better than a direct hit with one :D&lt;br /&gt;&lt;br /&gt;I've had a great time developing Shelled! and wanted to say what a pleasure its been to work with Joshua, Andreas and everyone else on the Shelled team. &lt;br /&gt;&lt;br /&gt;Happy Shelling&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-8935227977407101430?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/8935227977407101430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2011/06/shelled-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/8935227977407101430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/8935227977407101430'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2011/06/shelled-released.html' title='Shelled Released!'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-TS_BSuGAMTs/TegfnZ6HmaI/AAAAAAAAAGc/Qa5_B5bxDcI/s72-c/3504.shelledsnapshot.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-3865118539141612453</id><published>2006-07-28T19:35:00.017+01:00</published><updated>2011-06-03T01:10:45.548+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XGS'/><title type='text'>XGS-FrameBuffer</title><content type='html'>I've been coding a basic line buffer renderer for the XGS, I say basic because firstly its black and white only (well black and a fixed colour) and secondly its still in need of a good optimisation. &lt;br /&gt;&lt;br /&gt;The current code takes up just under one page (&amp;lt;512 words), however with a lot of spare cycles there's the oppertunity to reduce the code size whilst still meeting the tight timing criteria. The largest chunk of the 512 words is taken up by the numerous uses of the DELAY macro in generating the HSYNC delays, shifting this to a subrouting would make quite a difference.&lt;br /&gt;&lt;br /&gt;The buffer itself handles 200 pixels with 4 pixel padding either side, giving a horizontal resolution of 200 active pixels and 8 overscan. Vertically it uses 208 active lines with 48/52 lines for top/bottom overscan and 4 vsync lines totalling 312 vertical lines. Although I'm considering reducing the overscan lines and increasing vsync to 10 lines to provide a greater number of spare cycles in one chunk for gameplay logic.&lt;br /&gt;&lt;br /&gt;The line buffer uses 25 bytes of internal RAM (banks 1 &amp;amp; 2) for storage with each byte holding 8 pixels (thus the reason for single colour only support atm)&lt;br /&gt;&lt;br /&gt;The line buffer is populated during each of the hsync periods utilising the spare cycles. During the active line period the code generates the required tv signal to output each pixel of the line buffer with only 20 cycles (250ns) per pixel available.&lt;br /&gt;&lt;br /&gt;Currently the biggest question is whether 900 cycles will be enough time to generate 200 pixels worth of data and cache it to the line buffer banks. With a player sprite, enemy sprites and missiles in the mix the cycle count could be quite tight.&lt;br /&gt;&lt;br /&gt;The main rendering loop still has quite a few cycles to spare, around 12 per pixel, however using these will mean tightly coupling the line buffer generation with the rendering, which is something I would like to avoid.&lt;br /&gt;&lt;br /&gt;Although not in place yet, the plan is the for game logic to run during vsync, which assuming we use 10 lines would provide just over 50,000 cycles for game logic. A further 420k cycles are available during the overscan generation which means there's plenty of room for gameplay logic and music.&lt;br /&gt;&lt;br /&gt;Part way through building the line buffer I attempted to generate a pal signal with the colour GREEN for an on pixel and BLACK for an off pixel. However, my TV would not recognise the signal as PAL with colour output when using the NTSC setting only.&lt;br /&gt;&lt;br /&gt;As the following &lt;a href="http://205.158.110.70/ubbcgi/ultimatebb.cgi?ubb=get_topic&amp;amp;f=20&amp;amp;t=001125"&gt;forum thread&lt;/a&gt; describes, PAL has a few extra requirements to NTSC.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1 - Colour burst on alternative lines must be phase shifted +- 45 degrees&lt;br /&gt;&lt;/li&gt;&lt;li&gt;2 - Each colour output must be phase shifted by 180 degrees on alternative lines &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;With James' help and a fair amount of time reading the PAL specs and XGS specs, the TV finally picked up on this been a PAL signal and displayed bars in all their colour :)&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-a5HFx3X-7Jc/Tegl9JSJGYI/AAAAAAAAAGk/g3CB3O1ZpCM/s1600/XGS_PAL.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="186" src="http://4.bp.blogspot.com/-a5HFx3X-7Jc/Tegl9JSJGYI/AAAAAAAAAGk/g3CB3O1ZpCM/s320/XGS_PAL.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Next step will be finalising the hsync callback code to render a player sprite under joystick control.&lt;br /&gt;&lt;br /&gt;At a later date I'll probably look into increasing the size of the line buffer to 100 bytes which would allow 200 pixels at a bit depth of 4. Then up'in the sprites from been an 8bit x 8bit block to support 4 bits of colour information per pixel. Using a palette this would allow for colours 16 colours.&lt;br /&gt;&lt;br /&gt;A larger bit depth is plausible especially if its moved out to the external SRAM, however doing so may require some creative thinking in order to meet the timing requirements of 20 cycles per pixel.&lt;br /&gt;&lt;br /&gt;Once the code is more functional and rendering a few sprites I'll get it uploaded, perhaps with a pdf explaining everything for any XGS owners that are interested :)  &lt;br /&gt;&lt;a href="http://www.xgamestation.com/?refid=figment"&gt;&lt;img "="" alt="XGameStation" class="centered cstbzxfmolrecxaqgfhd cstbzxfmolrecxaqgfhd cstbzxfmolrecxaqgfhd" src="http://00101010.figmentgames.com/wp-content/images/xgs/xgs_468x60.gif" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-3865118539141612453?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/3865118539141612453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2006/07/xgs-framebuffer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/3865118539141612453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/3865118539141612453'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2006/07/xgs-framebuffer.html' title='XGS-FrameBuffer'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-a5HFx3X-7Jc/Tegl9JSJGYI/AAAAAAAAAGk/g3CB3O1ZpCM/s72-c/XGS_PAL.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-6976014264111387863</id><published>2006-07-08T01:18:00.001+01:00</published><updated>2011-06-03T01:13:17.144+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GameDev'/><title type='text'>Procedural Texture Generation</title><content type='html'>CGEmpire, a new forum I've been reading, posted a challenge to code a procedural texture generator. After seeing some of the examples in the &lt;a href="http://www.cgempire.com/forum/competitions/454-cge-coding-challenge-1-texture-generation.html"&gt;challenge thread&lt;/a&gt; it looked interesting enough to have a go at.&lt;br /&gt;&lt;br /&gt;I've created a DirectX app with a choice between three different texture generation methods. The first two are very simple, random and linear. Random selects a colour for each x,y pixel randomly and as you would expect is pretty much random noise. Linear draws 5 pixel wide alternating white/black bars, again nothing worth showing.&lt;br /&gt;&lt;br /&gt;The third creates a cellular texture. This is my first attempt at generating a Cellular texture and aside from been extremely inefficient in the nearest coord calculation (brute force :( ) the results are quite pleasing. &lt;br /&gt;&lt;br /&gt;I'm going to try a few variations on the default cellular algorithm and will post any that are worth seeing, I'll probably also add a few more texture generators based on other methods such as Perlin noise etc. &lt;br /&gt;&lt;br /&gt;Anyhow, heres a screenshot of the first results. &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/-AaseT-M2ghA/Tegl9QJnIgI/AAAAAAAAAGo/Jsdq_3VvUAM/s1600/cellular1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="157" src="http://3.bp.blogspot.com/-AaseT-M2ghA/Tegl9QJnIgI/AAAAAAAAAGo/Jsdq_3VvUAM/s200/cellular1.jpg" width="200" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-jucbWaSO5Gs/Tegl-fxbaFI/AAAAAAAAAGw/ycZs-KBjIgI/s1600/cellular3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="158" src="http://3.bp.blogspot.com/-jucbWaSO5Gs/Tegl-fxbaFI/AAAAAAAAAGw/ycZs-KBjIgI/s200/cellular3.jpg" width="200" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/-0akvzrkhPjs/Tegl9_e_bfI/AAAAAAAAAGs/eRtSCni9NTU/s1600/cellular2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/-0akvzrkhPjs/Tegl9_e_bfI/AAAAAAAAAGs/eRtSCni9NTU/s200/cellular2.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Forum Link updated, thanks Fabricator.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-6976014264111387863?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/6976014264111387863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2006/07/procedural-texture-generation.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/6976014264111387863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/6976014264111387863'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2006/07/procedural-texture-generation.html' title='Procedural Texture Generation'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-AaseT-M2ghA/Tegl9QJnIgI/AAAAAAAAAGo/Jsdq_3VvUAM/s72-c/cellular1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-8223770631906847749</id><published>2006-05-25T17:05:00.005+01:00</published><updated>2011-06-03T01:18:40.008+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XGS'/><title type='text'>Black and White</title><content type='html'>No not the game Black and White (although it was a good game), I'm talking black and white TV, the next evolution of my console. I'd give it a name but it's currently too close (almost identical ;) ) to the Pico to warrant it. Besides, choosing a name can be a difficult business, I'll probably just not give it a seconds thought and pick anything, how about the "me", the "you", the "them", the "we"... Wii thats the ticket. Wait what do you mean its already taken? Yes I know the joke has passed, but I couldn't resist. Besides, I'm quite looking forward to it :)&lt;br /&gt;&lt;br /&gt;I spent the better part of last weekend reading up on nodal analysis to be able to calculate the voltage at each junction of the R-2R ladder that I've added. The calculations themselves are simple, just an application of Ohms law. Simplifying the network however took most of the time, at least until the method finally clicked. &lt;br /&gt;&lt;br /&gt;The Pico uses an R-2R ladder to convert the digital signal of the SX28 into an analogue signal ready for sending to a TV. Four pins on the SX28 allow 16 different voltages to be transmitted to the TV. The voltage levels are interpreted as intensity, however since the signal the TV uses 0.0v to sync on and 0.3v as black, that leaves around 10 voltage levels to play with.&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/-OUJkajJTIGg/TegnxlZHOwI/AAAAAAAAAG0/7agg2w6V9D0/s1600/Pico0.2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-OUJkajJTIGg/TegnxlZHOwI/AAAAAAAAAG0/7agg2w6V9D0/s320/Pico0.2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Since the previous blog entry, I've reshuffled the layout with the power regulator on its own in the top left of the image. Partially cut off is the main power switch (currently taped down :P). &lt;br /&gt;&lt;br /&gt;Looking at the main part of the image to the right of the SX28 you can see the R-2R resistor network used to convert the 4 bit digital signal into an analogue voltage which is adjusted to a 0-1.4v range via the bottom red potentiometer. Above the SX28 is the main external oscillator socket, the 80MHz oscillator is currently in the XGS. Just to the right of this, taped to the breadboard is a switch to select between the external oscillator and the 4 pin SX-Key header.&lt;br /&gt;&lt;br /&gt;The hardware above is still almost identical to the Pico, however it won't remain like this for long. The first divergance is probably going to come with the addition of joystick hardware. The Pico only supports a single joystick which is connected directly to the SX28. I'd like to have two ports (pong is two player afterall :P) so will be adding a serial interface for the joysticks.&lt;br /&gt;&lt;br /&gt;The second area is either going to be interfacing with an SRAM chip or adding extra graphics hardware to take some pressure off of the SX28. I'm not sure which way to go with that yet, nor how problematic the pin count may be &lt;br /&gt;&lt;br /&gt;To test the new hardware I created a quick test program that outputs a white bar at the top and bottom of the screen. The code used for signal generation is the "GID j - pixel in a day" code with the colour burst generation stripped out. Nothing fancy, but at least it's working :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xgamestation.com/?refid=figment"&gt;&lt;img "="" alt="XGameStation" class="centered cstbzxfmolrecxaqgfhd cstbzxfmolrecxaqgfhd cstbzxfmolrecxaqgfhd" src="http://00101010.figmentgames.com/wp-content/images/xgs/xgs_468x60.gif" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-8223770631906847749?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/8223770631906847749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2006/05/black-and-white.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/8223770631906847749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/8223770631906847749'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2006/05/black-and-white.html' title='Black and White'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-OUJkajJTIGg/TegnxlZHOwI/AAAAAAAAAG0/7agg2w6V9D0/s72-c/Pico0.2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-2784620425787833628</id><published>2006-05-11T22:11:00.002+01:00</published><updated>2011-06-03T01:22:21.528+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Astronomy'/><title type='text'>Schwassmann-Wachmann 3</title><content type='html'>&lt;div style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="Comet disintigration" src="http://newsimg.bbc.co.uk/media/images/41612000/jpg/_41612188_hubble_fragment_203i.jpg.jpg" /&gt;&lt;/div&gt;&lt;br /&gt;Schwassmann-Wachmann 3 otherwise known as Comet 73P is on perhaps its final voyage around the sun. A recent hubble image shows the disitrigration quite clearly&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;With a good clear night on Monday, I took the opportunity to take a photograph of the comet. Yes I know, its not quite up to hubble standards ;)&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/-g0RTu6fY2WA/TegnyU_azAI/AAAAAAAAAG8/jr081NC4eAc/s1600/comet-final.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="246" src="http://1.bp.blogspot.com/-g0RTu6fY2WA/TegnyU_azAI/AAAAAAAAAG8/jr081NC4eAc/s320/comet-final.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Considering how little experience I have imaging, I'm quite happy with how this image turned out. I'm sure someone with more experience (read - any experience) at image reduction could improve on this. &lt;br /&gt;&lt;br /&gt;In hindsight, I should have taken a lot more exposures for stacking and perhaps used a longer exposures time to help cut down on light pollution. &lt;br /&gt;&lt;br /&gt;For anyone that cares, here are the image details:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Exposure Time: 5 x 1.0s stacked&lt;/li&gt;&lt;li&gt;Date: 2006-05-10 02:19:44 UTC&lt;/li&gt;&lt;li&gt;CCD: Starlight XPress MX716&lt;/li&gt;&lt;li&gt;Scope: LX90 8"&lt;/li&gt;&lt;li&gt;Dark Frames: 5 x 1s median combined&lt;/li&gt;&lt;/ul&gt;I also managed to get an image of M57. 10x10s exposures stacked with 4 median combined dark frames. Comparing the image to my star charts, I've accounted for most of the brighter and dimmer stars but there's one star that shows quite brightly that isn't listed on my star chart, if anyone knows what it is please let me know.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-sHTGty6B-NQ/TegnyJTwHMI/AAAAAAAAAG4/avMo_tFfJhI/s1600/M57-annotated.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="246" src="http://1.bp.blogspot.com/-sHTGty6B-NQ/TegnyJTwHMI/AAAAAAAAAG4/avMo_tFfJhI/s320/M57-annotated.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The biggest problem I'm currently facing is the lack of accurate focus. I'm probably going to invest in a zero image shift microfocuser to help improve on that. I also think my scopes collimation is off, something to double check next time I get a clear sky. Fingers crossed I don't spend all night on it only to make it worse :P&lt;br /&gt;&lt;br /&gt;Hopefully with more practice I'll get a little closer to getting the most out of the scope. In the hands of an experienced user, the LX90 and MX716 are capable of much much better images.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-2784620425787833628?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/2784620425787833628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2006/05/schwassmann-wachmann-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/2784620425787833628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/2784620425787833628'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2006/05/schwassmann-wachmann-3.html' title='Schwassmann-Wachmann 3'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-g0RTu6fY2WA/TegnyU_azAI/AAAAAAAAAG8/jr081NC4eAc/s72-c/comet-final.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-1205511012735675863</id><published>2006-04-29T21:49:00.005+01:00</published><updated>2011-06-03T20:52:02.321+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XGS'/><title type='text'>We have a pulse</title><content type='html'>Continuing my adventures with the XGS I decided to make use of the larger breadboard bought the other week from maplins (along with a nice pre cut set of jumper leads). &lt;br /&gt;&lt;br /&gt;My long term plan is to build a simple games console capable of loading games from an external flash rom (possibly cartridge based on simply onboard via switching to access a handful of pre-loaded games). This is a lot more work than it sounds since the SX range of chips can only execute instructions from their internal rom, 2K on the SX28 and 4K on the SX52. There are ways around this which I'll cover at a later date. &lt;br /&gt;&lt;br /&gt;There are a lot of hurdles between now and the simple console I'm picturing, so the first versions of the console will be limited to 2K of ROM and 144 bytes of RAM, basically the onboard rom/ram for the SX28. The SX28 (parallax micro-processor) is going to be the heart of my games console. The reason, because thats what the XGS used which means I have a boat load of reference docs, manuals and papers about it plus a local supplier and I'm already slightly familiar with SX assembly. Also, the SX28 is available in a DIL package which makes prototyping much simpler than the surface mount versions of the SX48 and SX52 (although I've a few of those ready for a future project :)&lt;br /&gt;&lt;br /&gt;So the plan currently is to start very simple, and progressivly add more and more "features" to the console such as graphics/sounds/external flash rom &amp;amp; sram/joystick port etc If you've read the XGS ebook then you'll probably notice many similarities to the PICO and XGS which are been used as a base reference, however I plan to expand the feature set of the PICO much further. For example with the addition of graphics and sound hardware. How far this can be taken with just the SX28 and the limited output pins, I'm not sure. At the expensive of speed I can probably serialise a number of the systems although worst case scenario will be stepping the design up to use the SX48. Thats the rough plan anyway, I'm sure it will change as I learn more. &lt;br /&gt;&lt;br /&gt;Step one was getting a power supply up and running, actually very easy to do, a 7805 regulator did all the hard work plus theres quite a good section on power supply regulation in the XGS ebook :) I'm still not 100% certain on how the capacitors reduce the ripple in the DC supply, well I understand the concept but don't quite understand the calculations enough to work out which frequencys are getting through and which are filtered. Something to work on in the future.&lt;br /&gt;&lt;br /&gt;Anyhow, enough reading, heres a picture of a very basic SX28 project. In the top right of the picture can be seen the 7805 voltage regulator that takes a 9V DC supply and produces a 5V supply, along with the smoothing and noise filtering capacitors to clean up the 5V output.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-t6YeqkQc-Ms/Tek3A0L1fiI/AAAAAAAAAHM/g7nYClAklcg/s1600/sx28v0.1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-t6YeqkQc-Ms/Tek3A0L1fiI/AAAAAAAAAHM/g7nYClAklcg/s320/sx28v0.1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Located at the top/middle of the image is the SX28, the heart of this project. Pin one is the top right pin with pin 28 been the bottom right pin. The connection is pretty simple, pins 2 and 4 provide +5V and GND along with decoupling capacitors. On the other side of the chip pins 26 and 27 carry the oscillator 1 and 2 lines which are connected to the pin header in the top left of the photo where the SX Key Programmer connects. Pin 28 is the /mclr line used to reset the processor by grounding (via the connected reset switch). Finally pin 18 (output port RC.0) is connected to an LED to be used in testing whether the circuit actually works.&lt;br /&gt;&lt;br /&gt;Missing from the circuit is an external osciallator to provide an accurate clock to the SX28, I plan on ordering a selection of oscillators next week. In the mean time the SX28 has an internal oscillator that can provide frequencies in the range 31.25kHz to 4MHz, then there is also the SX Key which can generate a clock between 400kHz and 100Mhz more than enough for my purposes (although it can be less accurate than an external oscillator it will do for now). &lt;br /&gt;&lt;br /&gt;Programming the SX28 with this setup is simple, connect the SX Key to the pin header, program the chip then remove the SX Key and we're done. That is assuming we're running the chip via its internal osciallator, otherwise the SX Key remains connected to provide a clock source. Heres the program I used to test the hardware:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;; //////////////////////////////////////////////////////////////////////&lt;br /&gt;    ; SX28 - V0.1 LED Blink&lt;br /&gt;    ; (c) Gary Preston 29th April 2006&lt;br /&gt;    ; gary@figmentgames.com&lt;br /&gt;    ; //////////////////////////////////////////////////////////////////////&lt;br /&gt;    include "Setup28.inc"&lt;br /&gt;     &lt;br /&gt;    ; ----------------------------------------------------------------------&lt;br /&gt;    ; Global Data $08-$0F in all 8 banks on SX28&lt;br /&gt;    org $08&lt;br /&gt;    counter1  ds  1&lt;br /&gt;    counter2  ds  2&lt;br /&gt;    counter3  ds  3&lt;br /&gt;    ; ----------------------------------------------------------------------&lt;br /&gt;    ; Banked Data&lt;br /&gt;     &lt;br /&gt;    ; ----------------------------------------------------------------------&lt;br /&gt;    ; Main entry&lt;br /&gt;    ; ----------------------------------------------------------------------&lt;br /&gt;    Main&lt;br /&gt;      ; clear up mem avoiding 00-07 in each bank&lt;br /&gt;      clr fsr&lt;br /&gt;    :cleardata&lt;br /&gt;      sb  fsr.4                 ; skip if accessing $10 - $1F, $30 - 3F...&lt;br /&gt;      setb  fsr.3               ; offset by 8 bits to avoid first 8 mem locations&lt;br /&gt;      clr ind&lt;br /&gt;      ijnz fsr, :cleardata      ; keep looping until wrap around to $00&lt;br /&gt;     &lt;br /&gt;      mov W, #%11111110         ; RC.0 set to output&lt;br /&gt;      mov !RC, W               &lt;br /&gt;     &lt;br /&gt;      setb  RC.0                ; default to on&lt;br /&gt;     &lt;br /&gt;    :blink&lt;br /&gt;      mov W, /RC&lt;br /&gt;      mov RC, W&lt;br /&gt;      ; Running @ 1MHz one clock cycle = 1.0uS&lt;br /&gt;      ; 1023 cycles per loop = 525833 cycles = ~0.53 seconds&lt;br /&gt;     &lt;br /&gt;      mov counter3, #2&lt;br /&gt;    :loop&lt;br /&gt;      decsz counter1            ; 1/3&lt;br /&gt;        jmp :loop               ; 3&lt;br /&gt;      decsz counter2            ; 1/3&lt;br /&gt;        jmp :loop               ; 3&lt;br /&gt;      decsz counter3            ; 1/3&lt;br /&gt;        jmp :loop&lt;br /&gt;      jmp :blink   &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The layout of the board leaves a bit to be desired, I'll probably shuffle things around a little for the next itteration. A few months ago I wouldn't have had a clue what any of the above did, but today it actually looks quite simple (aside from circuit analysis of the capacitor filter frequency, but I'm working on that :P)&lt;br /&gt;&lt;br /&gt;The next task is to get graphics generation working and add an RCA output connected to the TV. How successful this will be using the SX Key as a clock source rather than a good osciallator remains to be seen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-1205511012735675863?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/1205511012735675863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2006/04/we-have-pulse.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/1205511012735675863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/1205511012735675863'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2006/04/we-have-pulse.html' title='We have a pulse'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-t6YeqkQc-Ms/Tek3A0L1fiI/AAAAAAAAAHM/g7nYClAklcg/s72-c/sx28v0.1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-5867377225243698375</id><published>2006-04-10T00:17:00.009+01:00</published><updated>2011-06-04T00:08:24.227+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XGS'/><category scheme='http://www.blogger.com/atom/ns#' term='GID'/><title type='text'>GID j - Mission Accomplished</title><content type='html'>Having only had a few hours Sunday night to work on the last part of the code I wasn't expecting to actually reach my goal of a pixel on the screen. In the end though, I managed to get a square block drawn in the center of the screen synced well enough to show flicker free on both my TV and Digital TV card in the PC.&lt;br /&gt;&lt;br /&gt;The actual TV picture is a nice vibrant yellow, the screen capture doesn't do it justice looking a little washed out. Oh, that reminds me, the colour burst wasn't that hard afterall, just a case of making sure the colour is set in the upper 4 bits and the luma in the lower 4 :)&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/-nToybEfCVWY/Tek7nk8VhPI/AAAAAAAAAHo/qSDK91ybfGI/s1600/big-pixel.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="242" src="http://3.bp.blogspot.com/-nToybEfCVWY/Tek7nk8VhPI/AAAAAAAAAHo/qSDK91ybfGI/s320/big-pixel.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Adding in the VSync and overscan code wasn't that difficult, the hard part was counting all the clock cycles to make sure they met the timing requirements. In fact the most trouble was with the comparison loop where I check whether the scanline is within the block and needs to be drawn in colour. This results in 3 possible code paths all of which had to have exactly the same number of cycles before reaching the final DEALY(174-3) instruction. A little fudging goes a long way though :)&lt;br /&gt;&lt;br /&gt;The theme for this GID was "Extreme Forces" well the forces exerted on my TV by all the badly formed signals I sent throughout Saturday were pretty extreme, does that count?&lt;br /&gt;&lt;br /&gt;For those that care the source code is zipped up and &lt;a href="https://docs.google.com/uc?id=0B9L1KQlF936aMjc0NjkxZGYtNzg3ZC00ZGZlLWI2NzMtMDY5YWQyNzVmNzdl&amp;export=download&amp;hl=en_US"&gt;available for download&lt;/a&gt;. Although it works fine on my TV that doesn't mean the code is correct so I'd love to hear back from any of the more experienced XGS users if you can see any obvious flaws. The final code weighed in at roughly 374 bytes (don't quote me on that ;) ) After looking at a few other peoples delay macros I can see a saving of several bytes there alone, so I'm sure this code can be optimised significantly, maybe another day :)&lt;br /&gt;&lt;br /&gt;Code Dump: Be aware the formatting is a little messed up &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;; //////////////////////////////////////////////////////////////////////&lt;br /&gt;    ; GID j - Pixel in a day entry&lt;br /&gt;    ; Gary Preston 8th April 2006&lt;br /&gt;    ; //////////////////////////////////////////////////////////////////////&lt;br /&gt;    include "Setup52.inc"&lt;br /&gt;    include "macros.inc"&lt;br /&gt;     &lt;br /&gt;    ; //////////////////////////////////////////////////////////////////////&lt;br /&gt;    ; Consts&lt;br /&gt;    ; //////////////////////////////////////////////////////////////////////&lt;br /&gt;    ;&lt;br /&gt;    BLACK_LEVEL EQU 6&lt;br /&gt;    WHITE_LEVEL EQU 15&lt;br /&gt;     &lt;br /&gt;     &lt;br /&gt;    ; Colors&lt;br /&gt;    VID_SYNC      EQU %11110000             ; No color + 0v&lt;br /&gt;    VID_BLACK   EQU (%11110000 + BLACK_LEVEL)     ; 0.25-0.3V&lt;br /&gt;    VID_WHITE   EQU (%11110000 + WHITE_LEVEL)      ; 1.0V&lt;br /&gt;    TEMP_COLOUR EQU 011111                                       ; yellow&lt;br /&gt;     &lt;br /&gt;    ; Color Burst signal&lt;br /&gt;    VID_COLORBURST_OFF EQU (%11110000 + BLACK_LEVEL)&lt;br /&gt;    VID_COLORBURST_ON EQU  (000000 + BLACK_LEVEL)&lt;br /&gt;     &lt;br /&gt;    ; //////////////////////////////////////////////////////////////////////&lt;br /&gt;    ; Variables&lt;br /&gt;    ; //////////////////////////////////////////////////////////////////////&lt;br /&gt;     &lt;br /&gt;    ;----------------------------------------------------------------------&lt;br /&gt;    ; $00 - 09 - registers (05-09 = ports RA-RE)&lt;br /&gt;    ; 0A - 0F - globals&lt;br /&gt;    ; Banks (00-0F, 10-1F, 20-2F ... F0-FF) bank 0 via semi-direct only&lt;br /&gt;     &lt;br /&gt;    ;----------------------------------------------------------------------&lt;br /&gt;    ; GLOBALS (Not available using semi-direct!)&lt;br /&gt;    ORG $0A        ; skip past global registers and banks 1-F&lt;br /&gt;    counter DS   1  ; counter required by delay macro&lt;br /&gt;     &lt;br /&gt;    ;----------------------------------------------------------------------&lt;br /&gt;    ; defines for TV Signal generation using Bank 1&lt;br /&gt;    ORG $10&lt;br /&gt;    BANK_VIDEO EQU $&lt;br /&gt;     &lt;br /&gt;    pixels    DS 1&lt;br /&gt;    scanline       DS 1&lt;br /&gt;     &lt;br /&gt;    ; //////////////////////////////////////////////////////////////////////&lt;br /&gt;    ; Program start&lt;br /&gt;    ; //////////////////////////////////////////////////////////////////////&lt;br /&gt;    main&lt;br /&gt;        ; Initialise ports for video (RE port tied to video hardware)&lt;br /&gt;        mov RE, #000000      ; clear port&lt;br /&gt;        mov !RE, #000000    ; set all pins to output&lt;br /&gt;     &lt;br /&gt;        ; --------------------------------------------------------------&lt;br /&gt;        ; Video Kernel (Colour upper nibble, Luma lower nibble)&lt;br /&gt;        ; VID_CSEL3 (b7) - VID_CSEL0 (b4)&lt;br /&gt;        ; VID_ISEL3 (b3) - VID_ISEL0 (b0)&lt;br /&gt;        ; Tied to port RE0-7&lt;br /&gt;        ; PAL 5Mhz&lt;br /&gt;        ;   312 scan lines&lt;br /&gt;        ;   pixel every 181.81ns approx 292 pixels per line (53.1us / 181.81ns)&lt;br /&gt;     &lt;br /&gt;        ; set bank&lt;br /&gt;        _bank   BANK_VIDEO&lt;br /&gt;     &lt;br /&gt;    vidloop  &lt;br /&gt;     &lt;br /&gt;        ; we have 312 lines potentially with pal but will use only 192 active&lt;br /&gt;        mov scanline, #206          ; 2&lt;br /&gt;    :scanline_loop&lt;br /&gt;        ;--------------------------------------------------------------&lt;br /&gt;        ; Horizontal signal component 274 active lines&lt;br /&gt;        ; blanking voltage 0.3V for 1.5us (front porch)&lt;br /&gt;        mov RE, #VID_BLACK                        ; 2&lt;br /&gt;        DELAY( 120-2 )&lt;br /&gt;     &lt;br /&gt;        ; horizontal sync 0V delay 4.7us&lt;br /&gt;        mov RE, #VID_SYNC                           ; 2&lt;br /&gt;        DELAY( 376-2 )&lt;br /&gt;     &lt;br /&gt;        ; pre burst breezeway 0.6us voltage 0.3V&lt;br /&gt;        mov RE, #VID_BLACK                  ; 2&lt;br /&gt;        DELAY( 48-2 )&lt;br /&gt;     &lt;br /&gt;        ; color burst 9-10cycles 0.3V for 2.5us (skipping data just delay for now)&lt;br /&gt;        mov RE, #VID_COLORBURST_ON            ; 2&lt;br /&gt;        DELAY( 200-2 )                              ; 200-2&lt;br /&gt;       &lt;br /&gt;        ; post burst blanking 0.3V 1.6us&lt;br /&gt;        mov RE, #VID_BLACK                ; 2&lt;br /&gt;        mov pixels, #255                              ; 2   &lt;br /&gt;        DELAY( 128-4 )&lt;br /&gt;     &lt;br /&gt;        ; All the 3 branches following MUST have the same execution time, thus&lt;br /&gt;      ; the extra jumps that don't go anywhere&lt;br /&gt;        ; black for 141 pixels (2037 cycles) and color for 12 (174 cycles)&lt;br /&gt;        mov RE, #VID_BLACK                ; 2&lt;br /&gt;     &lt;br /&gt;        ; color for 12 pixels (174 cycles)   &lt;br /&gt;        cjb scanline, #97, :skipcolor1        ; 4/6&lt;br /&gt;        cja scanline, #109, :skipcolor2   ; 4/6&lt;br /&gt;        DELAY(2037-10)&lt;br /&gt;        mov RE, #TEMP_COLOUR                            ; 2 setup pixel colour &lt;br /&gt;        jmp :color                        ; 3&lt;br /&gt;     &lt;br /&gt;    :skipcolor2&lt;br /&gt;        DELAY(2037-12)&lt;br /&gt;        nop &lt;br /&gt;        nop&lt;br /&gt;        jmp :color                        ; 3&lt;br /&gt;    :skipcolor1&lt;br /&gt;        DELAY(2037-6)&lt;br /&gt;        nop &lt;br /&gt;        nop&lt;br /&gt;        jmp :color                        ; 3&lt;br /&gt;    :color&lt;br /&gt;        DELAY( 174-5 )&lt;br /&gt;     &lt;br /&gt;        ; black for 141 pixels (2037 cycles)                           &lt;br /&gt;        mov RE, #VID_BLACK                              ; 2 setup pixel colour &lt;br /&gt;        DELAY(2037-6)            ; inc following jump&lt;br /&gt;     &lt;br /&gt;        djnz scanline, :scanline_loop   ; 2/4 (extra 2 from 4 is unaccounted for!)&lt;br /&gt;       &lt;br /&gt;      ; END of Horizontal Component (total scanline = 64us)&lt;br /&gt;      ; we're 2 clock cycles over!&lt;br /&gt;     &lt;br /&gt;    ; ---------------------------------------------------------------------------------------------&lt;br /&gt;    ; OVERSCAN BOTTOM&lt;br /&gt;    ; --------------------------------------------------------------------------------------------- &lt;br /&gt;        mov scanline, #50   ; 2&lt;br /&gt;    :o verscan_bottom&lt;br /&gt;        ;--------------------------------------------------------------&lt;br /&gt;        ; Horizontal signal component 274 active lines&lt;br /&gt;        ; blanking voltage 0.3V for 1.5us (front porch)&lt;br /&gt;        mov RE, #VID_BLACK                        ; 2&lt;br /&gt;        DELAY( 120-2 )&lt;br /&gt;     &lt;br /&gt;        ; horizontal sync 0V delay 4.7us&lt;br /&gt;        mov RE, #VID_SYNC                           ; 2&lt;br /&gt;        DELAY( 376-2 )&lt;br /&gt;     &lt;br /&gt;        ; pre burst breezeway 0.6us voltage 0.3V&lt;br /&gt;        mov RE, #VID_BLACK                  ; 2&lt;br /&gt;        DELAY( 48-2 )&lt;br /&gt;     &lt;br /&gt;        ; color burst 9-10cycles 0.3V for 2.5us (skipping data just delay for now)&lt;br /&gt;        mov RE, #VID_COLORBURST_ON            ; 2&lt;br /&gt;        DELAY( 200-2 )                              ; 200-2&lt;br /&gt;       &lt;br /&gt;        ; post burst blanking 0.3V 1.6us&lt;br /&gt;        mov RE, #VID_BLACK                ; 2&lt;br /&gt;        mov pixels, #255                              ; 2   &lt;br /&gt;        DELAY( 128-4 )&lt;br /&gt;     &lt;br /&gt;        ; draw full scanline (53.1us = 4248 cycles)&lt;br /&gt;        mov RE, #VID_BLACK    ; 2&lt;br /&gt;        DELAY( 2124-2 )  ; 4248 is one full scanline, delay function would overflow with that amount&lt;br /&gt;        DELAY( 2124-4 )  ; Really need to build a better delay function that supports longer delays&lt;br /&gt;        djnz scanline, :o verscan_bottom ; 2/4&lt;br /&gt;        ; full scanlein = 64us&lt;br /&gt;     &lt;br /&gt;    ; ---------------------------------------------------------------------------------------------&lt;br /&gt;    ; VSYNC LINES&lt;br /&gt;    ; ---------------------------------------------------------------------------------------------&lt;br /&gt;        mov scanline, #5        ; 2&lt;br /&gt;    :vsync&lt;br /&gt;        ; 4 sync lines&lt;br /&gt;        mov RE, #VID_SYNC      ; 2&lt;br /&gt;        DELAY( 2560-2 )  ; 4248 is one full scanline, delay function would overflow with that amount&lt;br /&gt;        DELAY( 2560-4 )  ; Really need to build a better delay function that supports longer delays&lt;br /&gt;        djnz scanline, :vsync   ; 2/4&lt;br /&gt;     &lt;br /&gt;    ; ---------------------------------------------------------------------------------------------&lt;br /&gt;    ; OVERSCAN TOP&lt;br /&gt;    ; --------------------------------------------------------------------------------------------- &lt;br /&gt;        mov scanline, #50   ; 2&lt;br /&gt;    :o verscan_top&lt;br /&gt;        ;--------------------------------------------------------------&lt;br /&gt;        ; Horizontal signal component 274 active lines&lt;br /&gt;        ; blanking voltage 0.3V for 1.5us (front porch)&lt;br /&gt;        mov RE, #VID_BLACK                        ; 2&lt;br /&gt;        DELAY( 120-2 )&lt;br /&gt;     &lt;br /&gt;        ; horizontal sync 0V delay 4.7us&lt;br /&gt;        mov RE, #VID_SYNC                           ; 2&lt;br /&gt;        DELAY( 376-2 )&lt;br /&gt;     &lt;br /&gt;        ; pre burst breezeway 0.6us voltage 0.3V&lt;br /&gt;        mov RE, #VID_BLACK                  ; 2&lt;br /&gt;        DELAY( 48-2 )&lt;br /&gt;     &lt;br /&gt;        ; color burst 9-10cycles 0.3V for 2.5us (skipping data just delay for now)&lt;br /&gt;        mov RE, #VID_COLORBURST_ON            ; 2&lt;br /&gt;        DELAY( 200-2 )                              ; 200-2&lt;br /&gt;       &lt;br /&gt;        ; post burst blanking 0.3V 1.6us&lt;br /&gt;        mov RE, #VID_BLACK                ; 2&lt;br /&gt;        mov pixels, #255                              ; 2   &lt;br /&gt;        DELAY( 128-4 )&lt;br /&gt;     &lt;br /&gt;        ; draw full scanline (53.1us = 4248 cycles)&lt;br /&gt;        mov RE, #VID_BLACK    ; 2&lt;br /&gt;        DELAY( 2124-2 )  ; 4248 is one full scanline, delay function would overflow with that amount&lt;br /&gt;        DELAY( 2124-4 )  ; Really need to build a better delay function that supports longer delays&lt;br /&gt;        djnz scanline, :o verscan_top    ; 2/4&lt;br /&gt;     &lt;br /&gt;        jmp     vidloop     ; 3&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-5867377225243698375?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/5867377225243698375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2006/04/gid-j-mission-accomplished.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/5867377225243698375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/5867377225243698375'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2006/04/gid-j-mission-accomplished.html' title='GID j - Mission Accomplished'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-nToybEfCVWY/Tek7nk8VhPI/AAAAAAAAAHo/qSDK91ybfGI/s72-c/big-pixel.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-4116364879568238661</id><published>2006-04-09T20:58:00.001+01:00</published><updated>2011-06-03T21:08:05.080+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XGS'/><category scheme='http://www.blogger.com/atom/ns#' term='GID'/><title type='text'>GID j - signal generation</title><content type='html'>Having nailed the delay code I've spent most of the evening reading up on the SX52 memory architecture and the PAL timing signal. To start with I've created the signal needed for each scanline (see previous blog with timing diagram)&lt;br /&gt;&lt;br /&gt;The first attempt didn't go too well&lt;br /&gt;&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/-ZBTHOkjOYts/Tek7m6RYmNI/AAAAAAAAAHg/wbgOPYyTnjI/s1600/signal-novsync1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="242" src="http://1.bp.blogspot.com/-ZBTHOkjOYts/Tek7m6RYmNI/AAAAAAAAAHg/wbgOPYyTnjI/s320/signal-novsync1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;It was only a few minutes though before I realise my timing was out by a few clock cycles. The reason? Well in order to generate say the SYNC pulse 0.0V on RE port for 4.7µs we need to delay for 4.7µs*1000/12.5ns = 376 clock cycles, so I did the following &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;mov RE, VID_SYNC&lt;br /&gt;DELAY(376)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The problem though is that really we've taken up 378 clock cycles and thus the code is executing for 25ns longer than we need it to. Couple this with all the other mov/delay statements for the other parts of the signal and we end up many cycles out of sync. The solution is simple, a mov takes 1 cycle or in the case of a compound mov (which this is) 2 cycles, so we just reduce the delay by 2 cycles to give&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;mov RE, VID_SYNC       ; 2&lt;br /&gt;DELAY(376-2)              ; 376-2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The result is a lot more promising, using VID_WHITE (1.0v) for the output port RE gives us a nice white screen, however we're not finished yet, since there is no handling of the vertical sync yet.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-0WMTMzIebEk/Tek7nBbKnMI/AAAAAAAAAHk/hn-mT0u77zI/s1600/signal-novsync2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="242" src="http://2.bp.blogspot.com/-0WMTMzIebEk/Tek7nBbKnMI/AAAAAAAAAHk/hn-mT0u77zI/s320/signal-novsync2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;So thats as far as I managed to get by the end of Saturday. I expected to have a good few hours sunday to work on getting the vsync sorted and plotting a specific pixel, but plans change. If I'm lucky I'll squeeze in a few more hours tonight and hopefully finish things off.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-4116364879568238661?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/4116364879568238661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2006/04/gid-j-signal-generation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/4116364879568238661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/4116364879568238661'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2006/04/gid-j-signal-generation.html' title='GID j - signal generation'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-ZBTHOkjOYts/Tek7m6RYmNI/AAAAAAAAAHg/wbgOPYyTnjI/s72-c/signal-novsync1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-922204099763252511</id><published>2006-04-08T19:16:00.001+01:00</published><updated>2011-06-03T21:10:42.218+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XGS'/><category scheme='http://www.blogger.com/atom/ns#' term='GID'/><title type='text'>GID j - Delay Debugging</title><content type='html'>As mentioned in the last blog entry, timing is cricical down to the cycle. In order to make sure all branches of code execute in the exact same amount of time I've created a delay macro. This isn't an optimal method, I'm sure there are ways to reduce the number of bytes this uses however it does the job.. at least it does after a little debugging.&lt;br /&gt;&lt;br /&gt;After coding up the above I programmed it into the SX52 and put the SXkey into debug mode which allows you to single step the processor one instruction at a time and view the programs memory/registers  and flags. Using various delays of 1, 7, 10, 14 etc I noticed the NOP repeat was only generating a single nop rather than the expected number, this turned out to be because missed the ending ENDR directive&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;;&lt;br /&gt;    ; DELAY for a specified number of clock cycles&lt;br /&gt;    ; EXPECTS:&lt;br /&gt;    ;    "counter" 1 byte variable defined&lt;br /&gt;    DELAY MACRO clocks&lt;br /&gt;      ; eat up clock cycles 10 at a time&lt;br /&gt;      IF ( (clocks / 10)&amp;gt; 0)&lt;br /&gt;        mov counter, #(clocks / 10)         ; 2&lt;br /&gt;    :loop&lt;br /&gt;        jmp $ + 1                   ; 3 jmp to next instruction&lt;br /&gt;        jmp $ + 1                   ; 3 jmp to next instruction&lt;br /&gt;        djnz counter, :loop                ; 2/4  (4 if &amp;lt;&amp;gt; zero)&lt;br /&gt;                                    ; 10 cycles per loop, 8 for last loop&lt;br /&gt;      ENDIF&lt;br /&gt;     &lt;br /&gt;      ; handle remaining delay 1-9 using nops&lt;br /&gt;      IF ( (clocks // 10)&amp;gt; 0)&lt;br /&gt;        REPT (clocks // 10)&lt;br /&gt;          NOP                   ; 1&lt;br /&gt;        ENDR&lt;br /&gt;      ENDIF&lt;br /&gt;    ENDM&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The following screenshot (click for a larger view) shows the debugger running the DELAY(14) code and circled in red the lone NOP instruction. A simple mistake putting an extra slash but one which would if not caught render the video output useless. Glad I caught it early, otherwise I might have wasted hours debugging my video code.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-wr2sneGSDzI/Tek7maUIkAI/AAAAAAAAAHc/hU0y3D_3cyo/s1600/delay-debug.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="259" src="http://2.bp.blogspot.com/-wr2sneGSDzI/Tek7maUIkAI/AAAAAAAAAHc/hU0y3D_3cyo/s320/delay-debug.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;With the delay loop out of the way, its time to final make a start on generating accurate h/v signals. Hopefully by the end of tonight :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-922204099763252511?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/922204099763252511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2006/04/gid-j-delay-debugging.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/922204099763252511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/922204099763252511'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2006/04/gid-j-delay-debugging.html' title='GID j - Delay Debugging'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-wr2sneGSDzI/Tek7maUIkAI/AAAAAAAAAHc/hU0y3D_3cyo/s72-c/delay-debug.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-7440219407177737133</id><published>2006-04-08T15:01:00.001+01:00</published><updated>2011-06-03T21:14:04.495+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XGS'/><category scheme='http://www.blogger.com/atom/ns#' term='GID'/><title type='text'>GID j - Attempt 1 snow</title><content type='html'>Satuday 2pm and I'm a little closer to understanding how to plot a pixel, although only a little. The first attempt to generate a video signal resulted in, well see for yourself, detune a tv channel and look at the white snow, thats pretty close to what I'm looking at right now :)&lt;br /&gt;&lt;br /&gt;The reason been, I've not setup any kind of timing for generating the video signal yet but I know that at least I'm outputting to the correct port to generate "a" signal. After a little digging through the XGS docs I've got the information on the PAL signal specs, the main bits of interest are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Front Porch 1.5µs&lt;/li&gt;&lt;li&gt;Active Video 53.1µs&lt;/li&gt;&lt;li&gt;Sync 0V&lt;/li&gt;&lt;li&gt;Black 0.3V&lt;/li&gt;&lt;li&gt;White 1.0V&lt;/li&gt;&lt;/ul&gt;Based on this we can calculate the number of pixels a PAL tv can cope with (@5.5Mhz), we can change the signal at a rate of 1/5.5Mhz = 182ns which gives us 53.1µs / 182ns = 292 pixels per scanline (best case; although I think my tv will do 720 due to extra bandwidth, but we'll go for a conservative value)&lt;br /&gt;&lt;br /&gt;So in order to get a pixel (assuming no colour) on the screen I need to generate a  video signal to display 312 scanlines each comprised of at most 292 pixels. Heres the full scanline signal needed for a PAL system. (I'm ignoring colour burst for now; image obtained from &lt;a href="http://home6.inet.tele.dk/haagen/palref.htm" title="Haagans website"&gt;Haagans website&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-3ApJe-ULdIs/TelAUm0K2YI/AAAAAAAAAHs/Cr2txqq0DpU/s1600/palref.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="http://2.bp.blogspot.com/-3ApJe-ULdIs/TelAUm0K2YI/AAAAAAAAAHs/Cr2txqq0DpU/s400/palref.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Once the horizontal signal is up and running the vertical signal should be a snap, its nothing more than another timing signal, so we'll be sending a H Sync signal for each line followed by 4-10 lines of vsync. I'm keeping this simple and going for 274 lines at 50Hz (50 frames per second) with 16 blank lines top/bottom to account for tv variations and the 6 lines of vsync giving a total of 312 lines.&lt;br /&gt;&lt;br /&gt;The key to this is the timing, with the SX52 processor that the XGS uses running at 80Mhz, 1 clock cycle = 12.5ns we need to ensure that the number of cycles used to generate the signal matches the above timing diagram.&lt;br /&gt;&lt;br /&gt;There is a whole lot more to the signal generation than the overview above, if you're really interested in the details either get the XGS and read the book (which in addition covers designing and building the actual video hardware) or google it.&lt;br /&gt;&lt;br /&gt;So the plan for the larger part of today is to get a suitable delay macro up and running and outputting the appropriate voltages to generate a stable H/V signal. Initially using a fixed value for each pixel (we'll get to plotting a single specific pixel later.. for now its a screen fill) Fingers crossed that is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-7440219407177737133?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/7440219407177737133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2006/04/gid-j-attempt-1-snow.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/7440219407177737133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/7440219407177737133'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2006/04/gid-j-attempt-1-snow.html' title='GID j - Attempt 1 snow'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-3ApJe-ULdIs/TelAUm0K2YI/AAAAAAAAAHs/Cr2txqq0DpU/s72-c/palref.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-8501729941570787869</id><published>2006-04-07T23:50:00.001+01:00</published><updated>2011-06-03T21:15:48.286+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XGS'/><category scheme='http://www.blogger.com/atom/ns#' term='GID'/><title type='text'>GID j - Black Pixels</title><content type='html'>Its that time of the month again, we're now on GID j, for a change I thought I'd code something for the XGS. I sense this GID is going to be rather painful just setting things up ready for tomorrows start brought problems.&lt;br /&gt;&lt;br /&gt;Lesson1: When routing the video/audio output through your digital tv card and you only get black and white check the Crystal. I'd forgot that the last time I used the XGS I'd hooked it up to my TV which supports PAL or NTSC and had been playing around with some of the NTSC only demos. I'd left the 3.57Mhz crystal in the XGS rather than the 4.43Mhz crystal needed for PAL output.&lt;br /&gt;&lt;br /&gt;Lesson2: Prepare for things to only get worse from here on in. This little voice keeps telling me this is a bad idea. Trying to learn the details of programming a chip such as the SX52 and assosiated hardware is bad enough, but considering how rusty my asm skills are we're in for a bumpy ride.&lt;br /&gt;&lt;br /&gt;The chances of a successful GID appear to be slim to say the least, so I'm lowering my expectation (and I mean reeeealy lowering) and instead doing a PID; pixel in a day (if you hadn't already guessed ). In other words, if I manage to get a pixel up on the screen within the time constraints of this GID I'll be happy, anything beyond that is a bonus. On a good note I've already written code to handle interfacing with the joystick port (see previous blog) so if we can get a pixel up, maybe we can get it moving, perhaps even a several pixels ;)&lt;br /&gt;&lt;br /&gt;Hey with 4k of direct memory who knows we may even get as far as displaying a sprite, maybe two but lets not get too carried away.&lt;br /&gt;&lt;br /&gt;Anyhow the XGS is rigged up with video/audio routed through my pc to make for easier screen grabs (erm that is assuming we get as far as displaying anything, otherwise you're in for some code dumps instead ;) ) so, for what remains of Friday night and a few hours of Saturday morning I'm going to hit the SX Programming manuals and read over the XGS hardware specs.&lt;br /&gt;&lt;br /&gt;I think this first calls for a fresh cuppa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-8501729941570787869?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/8501729941570787869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2006/04/gid-j-black-pixels.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/8501729941570787869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/8501729941570787869'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2006/04/gid-j-black-pixels.html' title='GID j - Black Pixels'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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-2139098190329304711.post-453490421692674754</id><published>2006-03-25T21:17:00.000Z</published><updated>2011-06-03T22:07:19.019+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GameDev'/><title type='text'>Ready, Fire, Aim</title><content type='html'>In a recent podcast Steve Pavlina talked about &lt;a href="http://www.stevepavlina.com/blog/2005/12/stevepavlinacom-podcast-009-kick-start-your-own-business/"&gt;kick starting your business&lt;/a&gt;, with advice aimed at turning a profit as soon as possible. One comment in particular made me think. He mentioned how when he started speaking about personal development as a business he didn't bother making a fancy website, designing a business logo, nor making fancy flyers or business cards instead he concentrated on the things that would make him money as soon as possible, eg the website content needed to draw in visitors.&lt;br /&gt;&lt;br /&gt;I have to wonder how many projects spent more time creating a flashy website than working on the game the site is promoting. In many cases the games never reached fruition making all the work on the website a waste.&lt;br /&gt;&lt;div align="left"&gt;How many people spent months designing their game only to realise its way too complicated when it came to implementation. Perhaps if they'd prototyped their ideas early and often they could have refined and expanded their original design over time rather than throwing it all out. As steve put it, "Ready, Fire, Aim" rather than "Ready, Aim, Aim, Aim, Aim...."&lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;This kind of thinking applies to most things including coding. Ask yourself how many times have you become hung up on the best way to solve a problem, turning what could have been a few hours thought and implementation into a day or more of procrastination.&lt;/div&gt;&lt;br /&gt;In some cases the extra up front thought is justified and can save you time in the long run, but in many cases I'd wager that after just a short amount of thought you'll have a solution worth implementing. It might not be optimal, but if it works and gets the job done you can always refine and improve later. The chances are you'll later find your solution was good enough after all and the time you've saved can be spent more on improving more critical areas.&lt;br /&gt;&lt;br /&gt;&lt;div align="left"&gt;Although his advice in this specific case wasn't anything new to me, he did put it in a much more general way than I've usually heard. A few times this week I caught myself about to embark on a new task, then thinking &lt;i&gt;do I really need to do this now, will it really help me achieve my current goals.&lt;/i&gt; In most of those cases I decided it wouldn't and put the task to one side or in the case of coding solutions, I went with a working solution rather than spending time coming up with an elegant reusable solution when realistically I'll probably never reuse the code. Besides if I need to I can always refactor it later.&lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;I guess I should take my own advice more often, having just spent a few hours "flashing" up my web blog. Oh well what would the world be like without hypocrisy.&lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-453490421692674754?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/453490421692674754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2011/06/ready-fire-aim.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/453490421692674754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/453490421692674754'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2011/06/ready-fire-aim.html' title='Ready, Fire, Aim'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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-2139098190329304711.post-7479358539860434903</id><published>2005-12-15T21:20:00.000Z</published><updated>2011-06-03T22:07:41.917+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GameDev'/><title type='text'>The Muse</title><content type='html'>The other day I subscribed to the &lt;a href="http://shouldwrite.blogspot.com/"&gt;"I should be writing"&lt;/a&gt;    podcast and downloaded a few of the previous weeks casts to get more of a feel for what it was like.&lt;br /&gt;&lt;br /&gt;One cast in particular struck a cord with me, &lt;a href="http://shouldwrite.podlot.com/isbw_051119.mp3"&gt;Show #13&lt;/a&gt;, this show featured an interview with &lt;a href="http://www.scottsigler.net/"&gt;Scott Sigler&lt;/a&gt;, author of the first PodCast novel EarthCore which I mentioned in I think my second ever blog post. Scott is now embarking upon his second PodCasted novel &lt;a href="http://www.project-daemon.net/"&gt;Ancestor&lt;/a&gt;    which I've just subscribed to and plan to catch up this weekend.&lt;br /&gt;&lt;br /&gt;So anyway, enough of plugging Scotts podcasts (did I mention how good they are? You have subscribed havn't you?) how does this writing podcast possibly relate to gamedev? &lt;br /&gt;&lt;br /&gt;Mur quotes a figure that 95% of Americans think they can write  a novel  yet only 3% of those ever finish one, let alone sell it. I'm not sure where the figures came from, however just straw polling family/friends will show it can't be that far off. Many people think they have what it takes to write a novel but in reality very few will ever finish a novel let alone sell it. Sound familiar? How many game players think they have the next best game idea, that they're going to develop the next hit RTS/FPS/MMORPG. Of those, how many actually manage to deliver? Very few! How many of those finished actually sell? Even fewer.&lt;br /&gt;&lt;br /&gt;There are many reasons for why projects fail, however a key one is down to the expectations of the project team. I've lost count of the number of projects that have created web sites to tout their grand idea, seeing a flurry of activity in the early days as new design features are added, prototypes built,  concept art and model screenshots uploaded, only to have the project grind to a halt and be abandoned. I have to admit, many of my hobby projects in the past have followed this exact trend.&lt;br /&gt;&lt;br /&gt;What happened? It could be one of several problems, but in my experience one seems to be the cause more often than any other. To draw a parallel with writing, they lost "the muse". That creative inspiration that drives you to work. In the early days of the project everyone has it, everyone finds it easier to work on the project than not. Then the muse leaves and slowly work on the project grinds to a halt as you losing interest. Development becomes sporadic with occasional bouts of activity as and when the muse returns, but for all intents and purposes the project is dead.&lt;br /&gt;&lt;br /&gt;So what separates that 3% from the 95%, those who finished their games from those who havn't. I think it all comes down to one factor. Self Discipline. Those who finish will most likely be the same people who day in day out work on their game, whether they're feeling the creative flow or not, some days work will fly by, on others its a real grind. Yet they keep at it. Those are the people who will succeed. &lt;br /&gt;&lt;br /&gt;To quote directly from the show, &lt;br /&gt;&lt;blockquote&gt;"I think too many people have the romantic view of writers and artists as just people who lay around and think great thoughts and wait for the muse to strike and when the muse strikes we create these wonderful works and when the muse doesn't strike, we go back to laying around."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;It's only when you really try to develop a game that you realise just how hard it can be. Not from a technical point of view, that's easily overcome by a few days research and work, but more the difficulty of working through those days when you can think of a million other things to do instead. It all comes down to pushing yourself, having a strong self discipline to work regularly and finish the projects you start. &lt;br /&gt;&lt;br /&gt;I made up my mind earlier in the year that game programming is what I want to do, even if it takes years of work before I've accumulated enough relevant experience to get a break. Who knows if game programming will be for me, you can't really tell until you've done it. What I do know is programming is incredibly enjoyable, even after 5 years full time developing information systems and countless hours spent on hobby projects. What I do know is that even the most tedious of game programming work I've done to date has still been more enjoyable than any IS programming I did in the years before. I think that may be due to games been a more challenging area of programming than standard information systems. Challenging work is always more enjoyable than easy work, at least in my opinion.&lt;br /&gt;&lt;br /&gt;Either way, there is one problem I've encountered more than any other this year. Its just too tempting to check your email every two minutes, read through the development forums to find better ways to code something, or read up on new development techniques. On going research and keeping up with technology is certainly a valid part of development, but doing too much can do more harm than good, especially when it eats into the time you've set aside for programming. (see show #13).&lt;br /&gt;&lt;br /&gt;I'm sure many people are struggling or have struggled with this problem, but with enough will power it is possible to force yourself through the days that feel like a grind. I find now that most days (excluding the first 10-20minutes work) I can easily slip into the coding mind set whilst managing to avoid over procrastinating, I'm more productive than I've ever been. I hadn't realised it at the time, but as Scott says in his interview, it's all a matter of &lt;b&gt;scheduling&lt;/b&gt;. It may not be anything new, nor is it a silver bullet for success, but it does make a difference.&lt;br /&gt;&lt;br /&gt;Listen to the interview and substitute writing for coding, novel for game and the parallels between novel writing and developing a game are striking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-7479358539860434903?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/7479358539860434903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2011/06/muse.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/7479358539860434903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/7479358539860434903'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2011/06/muse.html' title='The Muse'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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-2139098190329304711.post-8701303661645390823</id><published>2005-10-02T23:09:00.004+01:00</published><updated>2011-06-03T22:10:06.644+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Falcon 4</title><content type='html'>Over the years I've played a lots and lots of flightsims, the first I remember playing in any depth was F-117 Stealth Fighter and Chuck Yeagers Advanced Flight Trainer back on the Amiga, not to mention F29 Retaliator. I remember repeated attempts at breaking the altitude and speed records in Chuck Yeagers, a great sim with great graphics, well for the time :P&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/-4IbxAN-4ZsU/TelCQpbf6WI/AAAAAAAAAIA/CLW128cExGY/s1600/chuckyeageramiga.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-4IbxAN-4ZsU/TelCQpbf6WI/AAAAAAAAAIA/CLW128cExGY/s320/chuckyeageramiga.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I think the first flightsim I really played on the PC was called TFX, the graphics were a vast improvement over the Amiga, it wasn't until Janes F/A-18 and digital integrations F/A-18E SuperHornet that the Sim was really put into simulation. You could spend hours playing around with the flight model or sitting on the flight deck of an aircraft carrier watching the intricate takeoff and landing operations take place around you. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-kHhEcuw6TIc/TelCP1nEHfI/AAAAAAAAAH8/VPxeNtQyM8g/s1600/fa18e.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="263" src="http://4.bp.blogspot.com/-kHhEcuw6TIc/TelCP1nEHfI/AAAAAAAAAH8/VPxeNtQyM8g/s320/fa18e.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;However, most will agree that despite its dated graphics and many bugs nothing pushed the envelope more than the 1998 release of Falcon 4.0. Imagine my suprise last night to notice a review of Falcon 4 Allied Force, how I managed to avoid reading anything about this game including that it was even been developed, until shortly after its release, I'll never know. &lt;br /&gt;&lt;br /&gt;Although the graphics arn't bad, they're not really up to the same level of detail as Lock on modern air combat, but they're certainly good enough. Where Falcon 4.0 excelled was the realism of the simulation, and Allied Forces doesn't look like it will dissapoint.&lt;br /&gt;&lt;br /&gt;I've only been playing it for a few hours doing little more than taxiing, take-offs and some basic flight maneuvers including stalls and recovery. I've yet to test out the difficulty level of the AI in dogfights and campaigns having yet to figure out how the radar works :P Fair enough you could use the "easy" flight model, and play it more like an arcade game than a sim but wheres the fun in that? Whats the point of having and reading that 700 page pdf manual if you're not going to learn to play the game on its most accurate realism level.&lt;br /&gt;&lt;br /&gt;Theres a nice review of the game over on &lt;a href="http://www.simhq.com/_air5/air_160a.html"&gt;SimHQ&lt;/a&gt; a site that I've not been paying enough attention to over the past year or two, otherwise the development of a new Falcon 4 wouldn't have passed under my radar.&lt;br /&gt;&lt;br /&gt;I'm sure the depth of this flight sim will provide many months if not years of gameplay, especially if it gains as good a community following as the original Falcon 4.0 did. Anyhow, I'm off to work my way through the whopping 700 page manual (I really wish there was an option to purchase a bound/printed version as you could with LO-Mac) , so I'll leave you with a few screenshots.&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/-yiTHVdafkj0/TelCPTw_DPI/AAAAAAAAAH4/oTRY7YCoBUg/s1600/f16taxi.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-yiTHVdafkj0/TelCPTw_DPI/AAAAAAAAAH4/oTRY7YCoBUg/s320/f16taxi.jpg" width="320" /&gt;&lt;/a&gt; &lt;a href="http://4.bp.blogspot.com/-CBhkgszwbKQ/TelCPF-jLLI/AAAAAAAAAH0/dXLBL3s-1DI/s1600/f16flying.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-CBhkgszwbKQ/TelCPF-jLLI/AAAAAAAAAH0/dXLBL3s-1DI/s320/f16flying.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Oh, one last thing, having played battlefield 2 for just over a week now, I can honestly say it's great fun :) Hopefully the next patch will resolve a few of the more irratiting gameplay elements though, such as the constant respawn killing via air attacks on your one and only starting flag. If you havn't bought it yet, what are you waiting for, Quake4?? me too :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-8701303661645390823?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/8701303661645390823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2005/10/falcon-4.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/8701303661645390823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/8701303661645390823'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2005/10/falcon-4.html' title='Falcon 4'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-4IbxAN-4ZsU/TelCQpbf6WI/AAAAAAAAAIA/CLW128cExGY/s72-c/chuckyeageramiga.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2139098190329304711.post-899743614013481018</id><published>2005-09-27T20:53:00.001+01:00</published><updated>2011-06-03T21:24:17.891+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XGS'/><title type='text'>Transistor Logic</title><content type='html'>Another day, another circuit, this one is a little more complex than the LED/Resistor circuit I made the other week. Having read about transistors I decided to design and build a NAND gate. The final circuit is very similar to the one discussed in the &lt;a href="http://www.xgamestation.com/"&gt;XGS ebook&lt;/a&gt; (below is the original circuit schematic from the very same ebook - which I highly recommend; a print version will be out soon as well :) )&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-QCGiVWDhzbM/TelCuQLVl_I/AAAAAAAAAIE/P_LaRScwMlk/s1600/nandschematic.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="290" src="http://4.bp.blogspot.com/-QCGiVWDhzbM/TelCuQLVl_I/AAAAAAAAAIE/P_LaRScwMlk/s320/nandschematic.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Aside from been a little blury the photo below shows my version of the NAND gate circuit built from two transistors, 3 resistors,  two switches and an LED. The hardest part was finding a suitable 5V regulated power supply. I really need to buy a variable supply.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-i5XuRrPqF1I/TelCxx-dhPI/AAAAAAAAAII/BmaMwpds0Gw/s1600/nandgate.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-i5XuRrPqF1I/TelCxx-dhPI/AAAAAAAAAII/BmaMwpds0Gw/s320/nandgate.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The far right of the image is where the +5V power is sourced, the far left is used as GND. The LED is connected to the +5V line via a resistor which results in the LED been lit by default.  At the bottom right you should be able to make out the two switches, these connect the +5V supply to the base node of the two transistors (via one of the two 10Kohm resistors). Thus the switches control the input for the two transistors 1 or 0.&lt;br /&gt;&lt;br /&gt;The collector of the first transistor is connected to the same resistor as the LED, with the emitter of this transistor feeding the collector of the second transistor. Finally the emitter of the second transistor is connected to GND.&lt;br /&gt;&lt;br /&gt;The result of this is that when both switches are closed, the base of each transistor receives a sufficient voltage to start conducting from collector1 to emitter1 which feeds collector2 to emitter2 and finally running to GND.  This gives us a working NAND gate.  A 1 &amp;amp; 1 signal will result in a 0 i.e the LED will be off since both transistors are conducting to ground. Any other combination will result in a 1 as one (or both) transistor does not conduct, so we get a flow through the LED.&lt;br /&gt;&lt;br /&gt;To most this probably isn't the slightest bit impressive, its hard to appreciate the amount of background knowledge needed in order to understand how and why even simple circuit works, as well as analyse it; until you have done it yourself. So although it isn't much to look at, I'm please with myself none the less :)  &lt;br /&gt;&lt;br /&gt;One lesson to take away from this is that it's only once you begin to understand the basics that you start to finally realise how much more there is yet to learn. BTW I managed to get the joystick position to control the state of the LED that I mentioned in my previous XGS blog entry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2139098190329304711-899743614013481018?l=blog.figmentgames.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.figmentgames.com/feeds/899743614013481018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.figmentgames.com/2005/09/transistor-logic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/899743614013481018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2139098190329304711/posts/default/899743614013481018'/><link rel='alternate' type='text/html' href='http://blog.figmentgames.com/2005/09/transistor-logic.html' title='Transistor Logic'/><author><name>Gary</name><uri>http://www.blogger.com/profile/06769946959966851742</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/-QCGiVWDhzbM/TelCuQLVl_I/AAAAAAAAAIE/P_LaRScwMlk/s72-c/nandschematic.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
