More complicated test program that generates text, coloured sprites and sound.

Dependencies:   Gameduino mbed CommonTypes

Files at this revision

API Documentation at this revision

Comitter:
RichardE
Date:
Sat May 05 11:46:26 2012 +0000
Child:
1:c8ec5f958f3c
Commit message:
Got mbed communicating with Gameduino and basic initialisation and character functions appear to be working.

Changed in this revision

Gameduino.cpp Show annotated file Show diff for this revision Revisions of this file
Gameduino.h Show annotated file Show diff for this revision Revisions of this file
GameduinoTest.cpp Show annotated file Show diff for this revision Revisions of this file
GameduinoTest.h Show annotated file Show diff for this revision Revisions of this file
Types.h Show annotated file Show diff for this revision Revisions of this file
font8x8.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Gameduino.cpp	Sat May 05 11:46:26 2012 +0000
@@ -0,0 +1,228 @@
+/*
+ * SOURCE FILE : Gameduino.cpp
+ *
+ * Definition of class Gameduino.
+ * Each instance of this class allows communication with
+ * a Gameduino shield over an SPI communications link.
+ *
+ */
+
+#include "Gameduino.h"      // this module's prototypes
+#include "font8x8.h"        // default font
+
+/***************/
+/* CONSTRUCTOR */
+/***************/
+// Pass pointer to SPI datalink in spi.
+// Pass pointer to chip select in cs.
+Gameduino::Gameduino( SPI *spi, DigitalOut *cs ) :
+    spi( spi ),
+    cs( cs )
+{
+}
+
+/**************/
+/* DESTRUCTOR */
+/**************/
+Gameduino::~Gameduino() {
+}
+
+/*****************************************************/
+/* INITIALISE CONNECTION TO ADAPTER AND RESET THINGS */
+/*****************************************************/
+void Gameduino::begin() {
+    // Wait a bit to allow Gameduino to boot.
+    wait_ms( 250 );
+    // Deselect the Gameduino.
+    *cs = 1;
+    wr( J1_RESET, 1 );               // HALT coprocessor
+    wr( VIDEO_MODE, MODE_800x600_72 );
+    __wstart( RAM_SPR );             // Hide all sprites
+    for( int i = 0; i < 512; i++ ) {
+        xhide();
+    }
+    __end();
+    fill( RAM_PIC, 0, 1024 * 10 );  // Zero all character RAM
+    fill( RAM_SPRPAL, 0, 2048 );    // Sprite palletes black
+    fill( RAM_SPRIMG, 0, 64 * 256 );// Clear all sprite data
+    fill( VOICES, 0, 256 );         // Silence
+    fill( PALETTE16A, 0, 128 );     // Black 16-, 4-palletes and COMM
+    wr16( SCROLL_X, 0 );
+    wr16( SCROLL_Y, 0 );
+    wr( JK_MODE, 0 );
+    wr( SPR_DISABLE, 0 );
+    wr( SPR_PAGE, 0 );
+    wr( IOMODE, 0 );
+    wr16( BG_COLOR, 0 );
+    wr16( SAMPLE_L, 0 );
+    wr16( SAMPLE_R, 0 );
+    wr16( SCREENSHOT_Y, 0 );
+    wr( MODULATOR, 64 );
+}
+
+static const UInt8 stretch[16] = {
+  0x00, 0x03, 0x0c, 0x0f,
+  0x30, 0x33, 0x3c, 0x3f,
+  0xc0, 0xc3, 0xcc, 0xcf,
+  0xf0, 0xf3, 0xfc, 0xff
+};
+
+/***********************************************/
+/* SET DEFAULT ASCII CHARACTER SET AND PALETTE */
+/***********************************************/
+void Gameduino::ascii( void ) {
+    UInt8 b, h, l;
+    UInt16 address;
+    const UInt8 *ptr = font8x8;
+    for( UInt16 i = 0; i < 768; ++i ) {
+        b = *ptr++;
+        h = stretch[ b >> 4 ];
+        l = stretch[ b & 0xf ];
+        address = RAM_CHR + ( ' ' << 4 ) + ( i << 1 );
+        wr( address++, h );
+        wr( address, l );
+    }
+    for( UInt16 i = 0x20; i < 0x80; ++ i) {
+        setpal( 4 * i + 0, TRANSPARENT );
+        setpal( 4 * i + 3, RGB (255, 255, 255 ) );
+    }
+    fill( RAM_PIC, ' ', 4096 );
+}
+
+/****************************/
+/* START AN SPI TRANSACTION */
+/****************************/
+// Pass address to read or write to in address.
+// Bit 15 must be set for a write.
+void Gameduino::__start( UInt16 address ) {
+    *cs = 0;                                // select Gameduino
+    spi->write( ( address >> 8 ) & 0xFF );  // send bits 8 to 15 of address
+    spi->write( address & 0xFF );           // send bits 0 to 7 of address
+}
+
+/**********************************/
+/* START AN SPI WRITE TRANSACTION */
+/**********************************/
+// Pass address write to in address.
+void Gameduino::__wstart( UInt16 address ) {
+    __start( 0x8000 | address );
+}
+
+/*************************/
+/* TRANSFER BYTE VIA SPI */
+/*************************/
+// Use only after a call to __start or __wstart.
+// Pass data to send in data.
+UInt8 Gameduino::__tr8( UInt8 data ) {
+    return (UInt8)spi->write( data );
+}
+
+/********************************/
+/* TRANSFER 16 BIT WORD VIA SPI */
+/********************************/
+// Use only after a call to __start or __wstart.
+// Pass data to send in data.
+UInt8 Gameduino::__tr16( UInt16 data ) {
+    UInt16 result;
+    result = spi->write( data & 0xFF );                         // send and get bits 0 to 7
+    result |= ( spi->write( ( data >> 8 ) & 0xFF ) << 8 );      // send and get bits 8 to 15
+    return result;                          // return word read    
+}
+
+/**************************/
+/* END AN SPI TRANSACTION */
+/**************************/
+void Gameduino::__end( void ) {
+    *cs = 1;                                // deselect Gameduino
+}
+    
+/***************/
+/* READ A BYTE */
+/***************/
+// Pass address in Gameduino memory to read from.
+// Returns byte at that address.    
+UInt8 Gameduino::rd( UInt16 address ) {
+    __start( address );                     // start SPI read operation
+    UInt8 data = __tr8( 0 );                // read byte from Gameduino
+    __end();                                // end of SPI operation
+    return data;                            // return byte read
+}
+
+/**********************/
+/* READ A 16 BIT WORD */
+/**********************/
+// Pass address in Gameduino memory to read from.
+// Returns byte at that address.    
+UInt16 Gameduino::rd16( UInt16 address ) {
+    __start( address );                     // start SPI read operation
+    UInt16 data = __tr16( 0 );
+    __end();                                // end of SPI operation
+    return data;                            // return word read    
+}
+
+/****************/
+/* WRITE A BYTE */
+/****************/
+// Pass address to write to in address.
+// Pass data to write in data.
+void Gameduino::wr( UInt16 address, UInt8 data ) {
+    __wstart( address );                    // start SPI write operation
+    __tr8( data );
+    __end();                                // end of SPI operation
+}
+
+/***********************/
+/* WRITE A 16 BIT WORD */
+/***********************/
+// Pass address to write to in address.
+// Pass data to write in data.
+void Gameduino::wr16( UInt16 address, UInt16 data ) {
+    __wstart( address );
+    __tr16( data );
+    __end();
+}
+
+/*********************************/
+/* FILL AREA OF GAMEDUINO MEMORY */
+/*********************************/
+// Pass address to write to in address.
+// Pass data to write to entire area in data.
+// Pass number of bytes to write in count.
+void Gameduino::fill( UInt16 address, UInt8 data, UInt16 count ) {
+    __wstart( address );
+    while( count-- ) {
+        __tr8( data );
+    }
+    __end();
+}
+
+/*****************/
+/* HIDE A SPRITE */
+/*****************/
+// Use only after specifying address to write to.
+// Basically just writes 400 twice to SPI.
+void Gameduino::xhide( void ) {
+    __tr16( 400 );
+    __tr16( 400 );
+    spr++;
+}
+
+/***********************/
+/* CONSTRUCT RGB VALUE */
+/***********************/
+// Pass red level in r.
+// Pass green level in g.
+// Pass blue level in b.
+// Returns RGB value.
+UInt16 Gameduino::RGB( UInt8 r, UInt8 g, UInt8 b ) {
+    return ((((r) >> 3) << 10) | (((g) >> 3) << 5) | ((b) >> 3));
+}
+
+/*********************/
+/* SET PALETTE ENTRY */
+/*********************/
+// Pass pallete entry to set in pal.
+// Pass RGB value to store in rgb.
+void Gameduino::setpal( UInt16 pal, UInt16 rgb ) {
+    wr16( RAM_PAL + ( pal << 1 ), rgb );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Gameduino.h	Sat May 05 11:46:26 2012 +0000
@@ -0,0 +1,196 @@
+/*
+ * SOURCE FILE : Gameduino.h
+ *
+ * Definition of class Gameduino.
+ * Each instance of this class allows communication with
+ * a Gameduino shield over an SPI communications link.
+ *
+ */
+
+#ifndef GameduinoDefined
+
+  #define GameduinoDefined
+
+  #include "mbed.h"     // mbed library
+  #include "Types.h"    // integer types
+  
+  class Gameduino {
+
+  public :
+
+    // Registers on Gameduino.
+    enum Reg {
+        RAM_PIC         = 0x0000,    // Screen Picture, 64 x 64 = 4096 bytes
+        RAM_CHR         = 0x1000,    // Screen Characters, 256 x 16 = 4096 bytes
+        RAM_PAL         = 0x2000,    // Screen Character Palette, 256 x 8 = 2048 bytes
+        IDENT           = 0x2800,
+        REV             = 0x2801,
+        FRAME           = 0x2802,
+        VBLANK          = 0x2803,
+        SCROLL_X        = 0x2804,
+        SCROLL_Y        = 0x2806,
+        JK_MODE         = 0x2808,
+        J1_RESET        = 0x2809,
+        SPR_DISABLE     = 0x280a,
+        SPR_PAGE        = 0x280b,
+        IOMODE          = 0x280c,
+        BG_COLOR        = 0x280e,
+        SAMPLE_L        = 0x2810,
+        SAMPLE_R        = 0x2812,
+        MODULATOR       = 0x2814,
+        VIDEO_MODE      = 0x2815,
+        SCREENSHOT_Y    = 0x281e,
+        PALETTE16A      = 0x2840,   // 16-color palette RAM A, 32 bytes
+        PALETTE16B      = 0x2860,   // 16-color palette RAM B, 32 bytes
+        PALETTE4A       = 0x2880,   // 4-color palette RAM A, 8 bytes
+        PALETTE4B       = 0x2888,   // 4-color palette RAM A, 8 bytes
+        COMM            = 0x2890,   // Communication buffer
+        COLLISION       = 0x2900,   // Collision detection RAM, 256 bytes
+        VOICES          = 0x2a00,   // Voice controls
+        J1_CODE         = 0x2b00,   // J1 coprocessor microcode RAM
+        SCREENSHOT      = 0x2c00,   // screenshot line RAM
+        RAM_SPR         = 0x3000,   // Sprite Control, 512 x 4 = 2048 bytes
+        RAM_SPRPAL      = 0x3800,   // Sprite Palettes, 4 x 256 = 2048 bytes
+        RAM_SPRIMG      = 0x4000,   // Sprite Image, 64 x 256 = 16384 bytes
+    };
+
+    // Modes of operation.
+    enum Mode {
+          MODE_800x600_72  = 0,
+          MODE_800x600_60  = 1,
+    };
+
+    // Other constants.
+    enum {
+        TRANSPARENT     = ( 1 << 15 ),
+    };
+    
+    // Current sprite. Used by xsprite and xhide etc.
+    UInt8 spr;
+    
+    /***************/
+    /* CONSTRUCTOR */
+    /***************/
+    // Pass pointer to SPI datalink in spi.
+    // Pass pointer to chip select in cs.
+    Gameduino( SPI *spi, DigitalOut *cs );
+
+    /**************/
+    /* DESTRUCTOR */
+    /**************/
+    virtual ~Gameduino();
+    
+    /*****************************************************/
+    /* INITIALISE CONNECTION TO ADAPTER AND RESET THINGS */
+    /*****************************************************/
+    void begin();
+    
+    /***********************************************/
+    /* SET DEFAULT ASCII CHARACTER SET AND PALETTE */
+    /***********************************************/
+    void ascii( void );
+    
+    /****************************/
+    /* START AN SPI TRANSACTION */
+    /****************************/
+    // Pass address to read or write to in address.
+    // Bit 15 must be set for a write.
+    void __start( UInt16 address );
+    
+    /**********************************/
+    /* START AN SPI WRITE TRANSACTION */
+    /**********************************/
+    // Pass address write to in address.
+    void __wstart( UInt16 address );
+    
+    /*************************/
+    /* TRANSFER BYTE VIA SPI */
+    /*************************/
+    // Use only after a call to __start or __wstart.
+    // Pass data to send in data.
+    UInt8 __tr8( UInt8 data );
+    
+    /********************************/
+    /* TRANSFER 16 BIT WORD VIA SPI */
+    /********************************/
+    // Use only after a call to __start or __wstart.
+    // Pass data to send in data.
+    UInt8 __tr16( UInt16 data );
+
+    /**************************/
+    /* END AN SPI TRANSACTION */
+    /**************************/
+    void __end( void );
+    
+    /***************/
+    /* READ A BYTE */
+    /***************/
+    // Pass address in Gameduino memory to read from.
+    // Returns byte at that address.    
+    UInt8 rd( UInt16 address );
+    
+    /**********************/
+    /* READ A 16 BIT WORD */
+    /**********************/
+    // Pass address in Gameduino memory to read from.
+    // Returns byte at that address.    
+    UInt16 rd16( UInt16 address );
+    
+    /****************/
+    /* WRITE A BYTE */
+    /****************/
+    // Pass address to write to in address.
+    // Pass data to write in data.
+    void wr( UInt16 address, UInt8 data );
+    
+    /***********************/
+    /* WRITE A 16 BIT WORD */
+    /***********************/
+    // Pass address to write to in address.
+    // Pass data to write in data.
+    void wr16( UInt16 address, UInt16 data );
+
+    /*********************************/
+    /* FILL AREA OF GAMEDUINO MEMORY */
+    /*********************************/
+    // Pass address to write to in address.
+    // Pass data to write to entire area in data.
+    // Pass number of bytes to write in count.
+    void fill( UInt16 address, UInt8 data, UInt16 count );
+    
+    /*****************/
+    /* HIDE A SPRITE */
+    /*****************/
+    // Use only after specifying address to write to.
+    // Basically just writes 400 twice to SPI.
+    void xhide( void );
+
+    /***********************/
+    /* CONSTRUCT RGB VALUE */
+    /***********************/
+    // Pass red level in r.
+    // Pass green level in g.
+    // Pass blue level in b.
+    // Returns RGB value.
+    static UInt16 RGB( UInt8 r, UInt8 g, UInt8 b );
+
+    /*********************/
+    /* SET PALETTE ENTRY */
+    /*********************/
+    // Pass pallete entry to set in pal.
+    // Pass RGB value to store in rgb.
+    void setpal( UInt16 pal, UInt16 rgb );
+        
+  private :
+  
+    // Poitner to SPI datalink.
+    SPI *spi;
+    
+    // Pointer to chip select digital output.
+    DigitalOut *cs;  
+
+  };
+
+#endif
+
+/* END of Gameduino.h */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GameduinoTest.cpp	Sat May 05 11:46:26 2012 +0000
@@ -0,0 +1,62 @@
+/*
+ * SOURCE FILE : GameduinoTest.cpp
+ *
+ * Definition of class GameduinoTest.
+ * Tests a Gameduino object.
+ *
+ */
+
+#include "GameduinoTest.h"      // this module's prototypes
+#include "mbed.h"               // mbed library
+#include "Gameduino.h"          // for Gameduino class
+
+/***************/
+/* CONSTRUCTOR */
+/***************/
+GameduinoTest::GameduinoTest() {
+}
+
+/**************/
+/* DESTRUCTOR */
+/**************/
+GameduinoTest::~GameduinoTest() {
+}
+
+/****************/
+/* RUN THE TEST */
+/****************/
+void GameduinoTest::Run( void ) {
+    // Make a serial port for communicating with PC.
+    Serial pc( USBTX, USBRX );
+    // Sign on message.
+    pc.printf( "Up and running!\r\n" );
+    // Make a digital output for use with Gameduino.
+    DigitalOut cs( p8 );
+    // Initialise an SPI link for communications with Gameduino.
+    // Use pin 5 for MOSI.
+    // Use pin 6 for MISO.
+    // Use pin 7 for SCK.
+    SPI spi( p5, p6, p7 );
+    // 4MHz clock should be OK since this is default on an Arduino.
+    spi.frequency( 4000000 );
+    // Set SPI format to use.
+    // Use 8 bits per SPI frame.
+    // Use SPI mode 0.
+    spi.format( 8, 0 );
+    // Make a Gameduino and pass SPI link and digital output for chip select.
+    Gameduino gd( &spi, &cs );
+    // Reset the Gameduino.
+    gd.begin();
+    // Lets have a default ASCII character set.
+    gd.ascii();
+    // Read from ident register.
+    UInt8 id = gd.rd( Gameduino::IDENT );
+    // Report back to PC.
+    pc.printf( "Gameduino ID is 0x%02X.\r\n", (int)id );
+    // Write something to character memory.
+    gd.__wstart( Gameduino::RAM_PIC );
+    for( UInt8 c = 'A'; c <= 'Z'; ++c ) {
+        gd.__tr8( c );
+    }
+    gd.__end();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GameduinoTest.h	Sat May 05 11:46:26 2012 +0000
@@ -0,0 +1,37 @@
+/*
+ * SOURCE FILE : GameduinoTest.h
+ *
+ * Definition of class GameduinoTest.
+ * Tests a Gameduino object.
+ *
+ */
+
+#ifndef GameduinoTestDefined
+
+  #define GameduinoTestDefined
+
+  class GameduinoTest {
+
+  public :
+
+    /***************/
+    /* CONSTRUCTOR */
+    /***************/
+    GameduinoTest();
+
+    /**************/
+    /* DESTRUCTOR */
+    /**************/
+    virtual ~GameduinoTest();
+
+    /****************/
+    /* RUN THE TEST */
+    /****************/
+    void Run( void );
+    
+  };
+
+#endif
+
+/* END of GameduinoTest.h */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Types.h	Sat May 05 11:46:26 2012 +0000
@@ -0,0 +1,22 @@
+/*
+ * SOURCE FILE : Types.h
+ *
+ * Various types defined for portability.
+ *
+ */
+
+#ifndef TypesIncluded
+  
+  #define TypesIncluded
+
+  typedef unsigned char UInt8;
+  typedef signed char Int8;
+  typedef unsigned short UInt16;
+  typedef signed short Int16;
+  typedef unsigned long UInt32;
+  typedef signed long Int32;
+  
+#endif
+
+/* END of Types.h */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/font8x8.h	Sat May 05 11:46:26 2012 +0000
@@ -0,0 +1,53 @@
+static const UInt8 font8x8[] = {
+
+0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x18,  0x18,  0x18,  0x18,  0x18,  0x00,  0x18,  0x00, 
+0x6c,  0x6c,  0x6c,  0x00,  0x00,  0x00,  0x00,  0x00,  0x36,  0x36,  0x7f,  0x36,  0x7f,  0x36,  0x36,  0x00, 
+0x0c,  0x3f,  0x68,  0x3e,  0x0b,  0x7e,  0x18,  0x00,  0x60,  0x66,  0x0c,  0x18,  0x30,  0x66,  0x06,  0x00, 
+0x38,  0x6c,  0x6c,  0x38,  0x6d,  0x66,  0x3b,  0x00,  0x0c,  0x18,  0x30,  0x00,  0x00,  0x00,  0x00,  0x00, 
+0x0c,  0x18,  0x30,  0x30,  0x30,  0x18,  0x0c,  0x00,  0x30,  0x18,  0x0c,  0x0c,  0x0c,  0x18,  0x30,  0x00, 
+0x00,  0x18,  0x7e,  0x3c,  0x7e,  0x18,  0x00,  0x00,  0x00,  0x18,  0x18,  0x7e,  0x18,  0x18,  0x00,  0x00, 
+0x00,  0x00,  0x00,  0x00,  0x00,  0x18,  0x18,  0x30,  0x00,  0x00,  0x00,  0x7e,  0x00,  0x00,  0x00,  0x00, 
+0x00,  0x00,  0x00,  0x00,  0x00,  0x18,  0x18,  0x00,  0x00,  0x06,  0x0c,  0x18,  0x30,  0x60,  0x00,  0x00, 
+0x3c,  0x66,  0x6e,  0x7e,  0x76,  0x66,  0x3c,  0x00,  0x18,  0x38,  0x18,  0x18,  0x18,  0x18,  0x7e,  0x00, 
+0x3c,  0x66,  0x06,  0x0c,  0x18,  0x30,  0x7e,  0x00,  0x3c,  0x66,  0x06,  0x1c,  0x06,  0x66,  0x3c,  0x00, 
+0x0c,  0x1c,  0x3c,  0x6c,  0x7e,  0x0c,  0x0c,  0x00,  0x7e,  0x60,  0x7c,  0x06,  0x06,  0x66,  0x3c,  0x00, 
+0x1c,  0x30,  0x60,  0x7c,  0x66,  0x66,  0x3c,  0x00,  0x7e,  0x06,  0x0c,  0x18,  0x30,  0x30,  0x30,  0x00, 
+0x3c,  0x66,  0x66,  0x3c,  0x66,  0x66,  0x3c,  0x00,  0x3c,  0x66,  0x66,  0x3e,  0x06,  0x0c,  0x38,  0x00, 
+0x00,  0x00,  0x18,  0x18,  0x00,  0x18,  0x18,  0x00,  0x00,  0x00,  0x18,  0x18,  0x00,  0x18,  0x18,  0x30, 
+0x0c,  0x18,  0x30,  0x60,  0x30,  0x18,  0x0c,  0x00,  0x00,  0x00,  0x7e,  0x00,  0x7e,  0x00,  0x00,  0x00, 
+0x30,  0x18,  0x0c,  0x06,  0x0c,  0x18,  0x30,  0x00,  0x3c,  0x66,  0x0c,  0x18,  0x18,  0x00,  0x18,  0x00, 
+
+0x3c,  0x66,  0x6e,  0x6a,  0x6e,  0x60,  0x3c,  0x00,  0x3c,  0x66,  0x66,  0x7e,  0x66,  0x66,  0x66,  0x00, 
+0x7c,  0x66,  0x66,  0x7c,  0x66,  0x66,  0x7c,  0x00,  0x3c,  0x66,  0x60,  0x60,  0x60,  0x66,  0x3c,  0x00, 
+0x78,  0x6c,  0x66,  0x66,  0x66,  0x6c,  0x78,  0x00,  0x7e,  0x60,  0x60,  0x7c,  0x60,  0x60,  0x7e,  0x00, 
+0x7e,  0x60,  0x60,  0x7c,  0x60,  0x60,  0x60,  0x00,  0x3c,  0x66,  0x60,  0x6e,  0x66,  0x66,  0x3c,  0x00, 
+0x66,  0x66,  0x66,  0x7e,  0x66,  0x66,  0x66,  0x00,  0x7e,  0x18,  0x18,  0x18,  0x18,  0x18,  0x7e,  0x00, 
+0x3e,  0x0c,  0x0c,  0x0c,  0x0c,  0x6c,  0x38,  0x00,  0x66,  0x6c,  0x78,  0x70,  0x78,  0x6c,  0x66,  0x00, 
+0x60,  0x60,  0x60,  0x60,  0x60,  0x60,  0x7e,  0x00,  0x63,  0x77,  0x7f,  0x6b,  0x6b,  0x63,  0x63,  0x00, 
+0x66,  0x66,  0x76,  0x7e,  0x6e,  0x66,  0x66,  0x00,  0x3c,  0x66,  0x66,  0x66,  0x66,  0x66,  0x3c,  0x00, 
+0x7c,  0x66,  0x66,  0x7c,  0x60,  0x60,  0x60,  0x00,  0x3c,  0x66,  0x66,  0x66,  0x6a,  0x6c,  0x36,  0x00, 
+0x7c,  0x66,  0x66,  0x7c,  0x6c,  0x66,  0x66,  0x00,  0x3c,  0x66,  0x60,  0x3c,  0x06,  0x66,  0x3c,  0x00, 
+0x7e,  0x18,  0x18,  0x18,  0x18,  0x18,  0x18,  0x00,  0x66,  0x66,  0x66,  0x66,  0x66,  0x66,  0x3c,  0x00, 
+0x66,  0x66,  0x66,  0x66,  0x66,  0x3c,  0x18,  0x00,  0x63,  0x63,  0x6b,  0x6b,  0x7f,  0x77,  0x63,  0x00, 
+0x66,  0x66,  0x3c,  0x18,  0x3c,  0x66,  0x66,  0x00,  0x66,  0x66,  0x66,  0x3c,  0x18,  0x18,  0x18,  0x00, 
+0x7e,  0x06,  0x0c,  0x18,  0x30,  0x60,  0x7e,  0x00,  0x7c,  0x60,  0x60,  0x60,  0x60,  0x60,  0x7c,  0x00, 
+0x00,  0x60,  0x30,  0x18,  0x0c,  0x06,  0x00,  0x00,  0x3e,  0x06,  0x06,  0x06,  0x06,  0x06,  0x3e,  0x00, 
+0x18,  0x3c,  0x66,  0x42,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0xff, 
+
+0x1c,  0x36,  0x30,  0x7c,  0x30,  0x30,  0x7e,  0x00,  0x00,  0x00,  0x3c,  0x06,  0x3e,  0x66,  0x3e,  0x00, 
+0x60,  0x60,  0x7c,  0x66,  0x66,  0x66,  0x7c,  0x00,  0x00,  0x00,  0x3c,  0x66,  0x60,  0x66,  0x3c,  0x00, 
+0x06,  0x06,  0x3e,  0x66,  0x66,  0x66,  0x3e,  0x00,  0x00,  0x00,  0x3c,  0x66,  0x7e,  0x60,  0x3c,  0x00, 
+0x1c,  0x30,  0x30,  0x7c,  0x30,  0x30,  0x30,  0x00,  0x00,  0x00,  0x3e,  0x66,  0x66,  0x3e,  0x06,  0x3c, 
+0x60,  0x60,  0x7c,  0x66,  0x66,  0x66,  0x66,  0x00,  0x18,  0x00,  0x38,  0x18,  0x18,  0x18,  0x3c,  0x00, 
+0x18,  0x00,  0x38,  0x18,  0x18,  0x18,  0x18,  0x70,  0x60,  0x60,  0x66,  0x6c,  0x78,  0x6c,  0x66,  0x00, 
+0x38,  0x18,  0x18,  0x18,  0x18,  0x18,  0x3c,  0x00,  0x00,  0x00,  0x36,  0x7f,  0x6b,  0x6b,  0x63,  0x00, 
+0x00,  0x00,  0x7c,  0x66,  0x66,  0x66,  0x66,  0x00,  0x00,  0x00,  0x3c,  0x66,  0x66,  0x66,  0x3c,  0x00, 
+0x00,  0x00,  0x7c,  0x66,  0x66,  0x7c,  0x60,  0x60,  0x00,  0x00,  0x3e,  0x66,  0x66,  0x3e,  0x06,  0x07, 
+0x00,  0x00,  0x6c,  0x76,  0x60,  0x60,  0x60,  0x00,  0x00,  0x00,  0x3e,  0x60,  0x3c,  0x06,  0x7c,  0x00, 
+0x30,  0x30,  0x7c,  0x30,  0x30,  0x30,  0x1c,  0x00,  0x00,  0x00,  0x66,  0x66,  0x66,  0x66,  0x3e,  0x00, 
+0x00,  0x00,  0x66,  0x66,  0x66,  0x3c,  0x18,  0x00,  0x00,  0x00,  0x63,  0x6b,  0x6b,  0x7f,  0x36,  0x00, 
+0x00,  0x00,  0x66,  0x3c,  0x18,  0x3c,  0x66,  0x00,  0x00,  0x00,  0x66,  0x66,  0x66,  0x3e,  0x06,  0x3c, 
+0x00,  0x00,  0x7e,  0x0c,  0x18,  0x30,  0x7e,  0x00,  0x0c,  0x18,  0x18,  0x70,  0x18,  0x18,  0x0c,  0x00, 
+0x18,  0x18,  0x18,  0x00,  0x18,  0x18,  0x18,  0x00,  0x30,  0x18,  0x18,  0x0e,  0x18,  0x18,  0x30,  0x00, 
+0x31,  0x6b,  0x46,  0x00,  0x00,  0x00,  0x00,  0x00,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat May 05 11:46:26 2012 +0000
@@ -0,0 +1,18 @@
+/*
+ * SOURCE FILE : main.cpp
+ *
+ * Test program for a Gameduino.
+ *
+ */
+
+#include "mbed.h"
+#include "GameduinoTest.h"
+
+/****************/
+/* MAIN PROGRAM */
+/****************/
+int main() {
+    GameduinoTest test;
+    test.Run();
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.lib	Sat May 05 11:46:26 2012 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/projects/libraries/svn/mbed/trunk@43
\ No newline at end of file