Imrich Konkol / Mbed 2 deprecated lcd_tft_ssd2119

Dependencies:   EthernetNetIf mbed

Files at this revision

API Documentation at this revision

Comitter:
ikon
Date:
Sun Feb 27 23:39:10 2011 +0000
Parent:
1:c9dad7bc0795
Commit message:
1.0

Changed in this revision

Display.c Show annotated file Show diff for this revision Revisions of this file
Display.h Show annotated file Show diff for this revision Revisions of this file
EthernetNetIf.lib Show annotated file Show diff for this revision Revisions of this file
Fonts.h Show annotated file Show diff for this revision Revisions of this file
HTTPClient.lib 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.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Display.c	Sun Feb 27 23:39:10 2011 +0000
@@ -0,0 +1,615 @@
+// Display oriented routines in mBed Retro Picture Frame
+#include "mbed.h"
+#include "Display.h"
+#include "Fonts.h"
+
+SPI spi(p5, p6, p7);    // mosi, miso, sclk
+DigitalOut DCS(p8);     // Display chip select
+DigitalOut DRS(p15);    // Display reset
+DigitalOut DCD(p16);    // Display command/data
+DigitalOut DRD(p17);   // Display read
+DigitalOut DWR(p18);   // Display write
+
+//static uint16_t xx,yy;
+//static uint16_t BACKGROUND, FOREGROUND;
+
+// Global 256 colour palette arraysc
+uint16_t palette256[256];
+
+static uint16_t yy=0;
+static uint16_t xx=0;
+
+uint16_t BACKGROUND = WHITE;
+uint16_t FOREGROUND = BLACK;
+
+
+#define    HRES      320     // X axis # of pixels
+#define    VRES      240     // Y axis # of pixels
+
+// Essential display commands
+/*************************************************/
+void write_command(uint16_t command) {
+    uint8_t raw;
+
+    DRD = 1;
+    DCS = 0;
+    DCD = 0;
+
+    raw = command;
+    //raw &= 0x00FF;      // Keep bit9 low - means command
+    //printf("Raw data: %d\n",raw);
+    spi.write(raw);
+
+    DWR = 1;
+    DCS = 1;
+}
+
+/*************************************************/
+
+//typedef unsigned char u8;
+//typedef unsigned int u16;
+void write_data(uint16_t value) {
+    uint8_t raw;
+
+    DRD = 1;
+    DCD = 1;
+    DCS = 0;
+
+    raw = (value)>>8;
+    // raw &= 0x00FF;      // Keep bit9 high - means data
+    // raw |= 0x0100;
+    // printf("Raw data: %d\n",raw);
+    spi.write(raw);
+
+    DCS = 1;
+    //wait_ms(1);
+    DCS = 0;
+
+    raw = value;
+    // raw &= 0x00FF;      // Keep bit9 high - means data
+    // raw |= 0x0100;
+    // printf("Raw data: %d\n",raw);
+    spi.write(raw);
+
+    DCS = 1;
+}
+
+
+
+
+
+
+
+
+
+// Set X & Y axis of next pixel write
+void LcdSetPenXY(uint16_t x, uint16_t y) {
+    write_command(0x004F);    // RAM address set for Y axis
+    write_data(y);            // Page 58 of SSD2119 datasheet
+    write_command(0x004E);    // RAM address set for X axis
+    write_data(x);            // Page 58 of SSD2119 datasheet
+    write_command(0x0022);    // Return back to pixel write mode
+}
+
+
+/*-----------------------------------------------------------------------------
+  Name         :  LcdGotoXY
+  Description  :  Sets cursor location to xy location corresponding to basic
+                  font size.
+  Argument(s)  :  x, y -> Coordinate for new cursor position. Range: 0,0..VRES/6,HRES/8
+  Return value :  None.
+-----------------------------------------------------------------------------*/
+void LcdGotoXY ( uint8_t x, uint8_t y ) {
+    // uint16_t xx, yy;
+    xx = y * 8;
+    yy = x * 6;
+    //LcdCacheIdx = (x - 1) * HRES + (y - 1) * VRES;
+    LcdSetPenXY(xx,yy);
+}
+
+/*-----------------------------------------------------------------------------
+  Name         :  LcdGotoXY8
+  Description  :  Sets cursor location to xy location corresponding to basic
+                  font size 8x8 pixels (same as above but adjusted for S font).
+  Argument(s)  :  x, y -> Coordinate for new cursor position. Range: 0,0..HRES/8,VRES/8
+  Return value :  None.
+-----------------------------------------------------------------------------*/
+void LcdGotoXY8 ( uint8_t x, uint8_t y ) {
+    // uint16_t xx, yy;
+    xx = (HRES - 1) - ((x+1) * 8);
+    yy = y * 8;
+    //LcdCacheIdx = (x - 1) * HRES + (y - 1) * VRES;
+    LcdSetPenXY(xx,yy);
+}
+
+typedef enum {
+    FONT_1X = 1,
+    FONT_2X = 2
+
+} LcdFontSize;
+
+typedef enum {
+    PIXEL_OFF =  0,
+    PIXEL_ON  =  1,
+    PIXEL_XOR =  2
+
+} LcdPixelMode;
+
+
+// Added for horizontal print
+void LcdChr8x8 ( uint8_t ch) {
+    
+    uint8_t i,j,c;
+    
+    if ( (ch < 0x20) || (ch > 0x7F) ) {
+        //  Convert to a printable character.
+        ch = 0x80;
+    }
+    
+    for(i=0;i<8;i++) {
+        c = Font8x8[8*(ch-32)+i];
+    
+        for ( j = 0; j < 8; j++ ) {
+            if ( (c & 0x01) == 0x01 ) {
+                write_data(FOREGROUND);
+            } else {
+                write_data(BACKGROUND);
+            }
+            c >>= 1;
+        }
+        yy++;
+        write_command(0x004F);    // RAM address set for Y axis
+        write_data(yy);       // Page 58 of SSD2119 datasheet
+        write_command(0x0022);
+     }
+     yy-=8;
+     xx-=8;
+     LcdSetPenXY(xx,yy);
+}
+
+// Print 8*8 charset string
+void LcdStr8x8 (  char *dataPtr ) {
+    while ( *dataPtr ) {
+        LcdChr8x8( *dataPtr++ );
+    }
+}
+
+/*-----------------------------------------------------------------------------
+  Name         :  LcdChr
+  Description  :  Displays a character at current cursor location
+                  and increment cursor location.
+  Argument(s)  :  size -> Font size. See enum.
+                  ch   -> Character to write.
+  Return value :  None.
+-----------------------------------------------------------------------------*/
+void LcdChr (  uint8_t ch ) {
+    uint8_t i, j, c;
+
+    if ( (ch < 0x20) || (ch > 0x7F) ) {
+        //  Convert to a printable character.
+        ch = 0x80;
+    }
+
+    //write_command(0x0022);
+
+    for ( i = 0; i < 6; i++ ) {
+        if (i < 5) {
+            c = FontLookup[ch - 32][i];
+        } else {
+            c = 0x00;                   // Space after each character
+        }
+
+        for ( j = 0; j < 8; j++ ) {
+            if ( (c & 0x01) == 0x01 ) {
+                //printf("X");
+                write_data(FOREGROUND);
+            } else {
+                //printf(".");
+                write_data(BACKGROUND);
+            }
+            //printf("\n");
+            c >>= 1;
+        }
+        yy++;
+        write_command(0x004F);    // RAM address set for Y axis
+        write_data(yy);       // Page 58 of SSD2119 datasheet
+        write_command(0x0022);
+    }
+}
+
+
+/*-----------------------------------------------------------------------------
+  Name         :  LcdStr
+  Description  :  Displays a character at current cursor location and increment
+                  cursor location according to font size.
+  Argument(s)  :  size    -> Font size. See enum.
+                  dataPtr -> Pointer to null terminated ASCII string to display.
+  Return value :  None.
+-----------------------------------------------------------------------------*/
+void LcdStr (  char *dataPtr ) {
+    while ( *dataPtr ) {
+        LcdChr( *dataPtr++ );
+    }
+}
+
+
+/*************************************************/
+void initialization() {
+
+    // Setup the spi for 8 bit data, high steady state clock,
+    // second edge capture, with a 10 MHz clock rate
+    spi.format(8,3);         // CPOL=1, CPHA=1
+    spi.frequency(10000000); // SPI fastest possible
+    /*
+        SET_RD;
+        SET_WR;
+        SET_CS;
+        SET_CD;
+        PORTA=0x00;
+        PORTE=0x00;
+
+        CLR_RESET;
+        delay(200);
+        SET_RESET;
+        delay(500);
+    */
+    DRD = 1;
+    DWR = 1;
+    DCS = 1;
+    DCD = 1;
+
+    DRS = 0;
+    wait_ms(200);
+    DRS = 1;
+    wait_ms(500);
+
+    write_command(0x0028);    // VCOM OTP
+    write_data(0x0006);       // Page 55-56 of SSD2119 datasheet
+
+    write_command(0x0000);    // start Oscillator
+    write_data(0x0001);       // Page 36 of SSD2119 datasheet
+
+    write_command(0x0010);    // Sleep mode
+    write_data(0x0000);       // Page 49 of SSD2119 datasheet
+
+    write_command(0x0001);    // Driver Output Control
+    write_data(0x32EF);       // Page 36-39 of SSD2119 datasheet
+
+    write_command(0x0002);    // LCD Driving Waveform Control
+    write_data(0x0600);       // Page 40-42 of SSD2119 datasheet
+
+    write_command(0x0003);    // Power Control 1
+    write_data(0x6A38);       // Page 43-44 of SSD2119 datasheet
+
+    write_command(0x0011);    // Entry Mode
+    write_data(0x6870);       // Page 50-52 of SSD2119 datasheet
+
+    write_command(0x000F);    // Gate Scan Position
+    write_data(0x0000);       // Page 49 of SSD2119 datasheet
+
+    write_command(0x000B);    // Frame Cycle Control
+    write_data(0x5308);       // Page 45 of SSD2119 datasheet
+
+    write_command(0x000C);    // Power Control 2
+    write_data(0x0003);       // Page 47 of SSD2119 datasheet
+
+    write_command(0x000D);    // Power Control 3
+    write_data(0x000A);       // Page 48 of SSD2119 datasheet
+
+    write_command(0x000E);    // Power Control 4
+    write_data(0x2E00);       // Page 48 of SSD2119 datasheet
+
+    write_command(0x001E);    // Power Control 5
+    write_data(0x00BE);       // Page 53 of SSD2119 datasheet
+
+    write_command(0x0025);    // Frame Frequency Control
+    write_data(0x8000);       // Page 53 of SSD2119 datasheet
+
+    write_command(0x0026);    // Analog setting
+    write_data(0x7800);       // Page 54 of SSD2119 datasheet
+
+    write_command(0x004E);    // Ram Address Set
+    write_data(0x0000);       // Page 58 of SSD2119 datasheet
+
+    write_command(0x004F);    // Ram Address Set
+    write_data(0x0000);       // Page 58 of SSD2119 datasheet
+
+    write_command(0x0012);    // Sleep mode
+    write_data(0x08D9);       // Page 49 of SSD2119 datasheet
+
+    // Gamma Control (R30h to R3Bh) -- Page 56 of SSD2119 datasheet
+    write_command(0x0030);
+    write_data(0x0000);
+
+    write_command(0x0031);
+    write_data(0x0104);
+
+    write_command(0x0032);
+    write_data(0x0100);
+
+    write_command(0x0033);
+    write_data(0x0305);
+
+    write_command(0x0034);
+    write_data(0x0505);
+
+    write_command(0x0035);
+    write_data(0x0305);
+
+    write_command(0x0036);
+    write_data(0x0707);
+
+    write_command(0x0037);
+    write_data(0x0300);
+
+    write_command(0x003A);
+    write_data(0x1200);
+
+    write_command(0x003B);
+    write_data(0x0800);
+
+    write_command(0x0007);    // Display Control
+    write_data(0x0033);       // Page 45 of SSD2119 datasheet
+
+    wait_ms(150);
+
+    write_command(0x0022);    // RAM data write/read
+}
+
+/*************************************************/
+void Display_Home() {
+    xx = 0;
+    yy = 0;
+    write_command(0x004E);    // RAM address set
+    write_data(0x0000);       // Page 58 of SSD2119 datasheet
+    write_command(0x004F);    // RAM address set
+    write_data(0x0000);       // Page 58 of SSD2119 datasheet
+
+    write_command(0x0044);    // Vertical RAM address position
+    write_data(0xEF00);       // Page 57 of SSD2119 datasheet
+    write_command(0x0045);    // Horizontal RAM address position
+    write_data(0x0000);       // Page 57 of SSD2119 datasheet
+    write_command(0x0046);    // Horizontal RAM address position
+    write_data(0x013F);       // Page 57 of SSD2119 datasheet
+
+    write_command(0x0022);    // RAM data write/read
+}
+
+
+void display_rgb(unsigned int data) {
+    unsigned int i,j;
+    Display_Home();
+    for (i=0;i<HRES;i++) {
+        for (j=0;j<VRES;j++) {
+            write_data(data);
+        }
+    }
+}
+
+void LCD_test() {
+    //uint16_t i;
+    unsigned int i,j;
+    //bool b;
+    Display_Home();
+
+    printf("Disp home done.\n");
+    for (i=0; i<HRES;i++) {
+        //b = 0;
+        for (j=0;j<VRES;j++) {
+
+            /*
+            if (j < (VRES/2)) {
+                b = 0;
+            } else {
+                b = 1;
+            }
+            */
+            //if (j == 120) b=1;
+            //b=1;
+            if (i>279)write_data(BLACK);
+            else if (i>259) write_data(BLUE);    //{ if (b) { write_data(BLUE); } else { write_data(HBLUE); } }
+            else if (i>239) write_data(HBLUE);
+            else if (i>219) write_data(RED);     //{ if (b) { write_data(RED); } else { write_data(HRED); } }
+            else if (i>199) write_data(HRED);
+            else if (i>179) write_data(MAGENTA); //{ if (b) { write_data(MAGENTA); } else { write_data(HMAGENTA); } }
+            else if (i>159) write_data(HMAGENTA);
+            else if (i>139) write_data(GREEN);   //{ if (b) { write_data(GREEN); } else { write_data(HGREEN); } }
+            else if (i>119) write_data(HGREEN);
+            else if (i>99)  write_data(CYAN);    //{ if (b) { write_data(CYAN); } else { write_data(HCYAN); } }
+            else if (i>79)  write_data(HCYAN);
+            else if (i>59)  write_data(YELLOW);  //{ if (b) { write_data(YELLOW); } else { write_data(HYELLOW); } }
+            else if (i>39)  write_data(HYELLOW);
+            else if (i>19)  write_data(WHITE);
+            else write_data(HWHITE);             //{ if (b) { write_data(WHITE); } else { write_data(HWHITE); } }
+        }
+        //printf("Col = %d\n",i);
+    }
+}
+
+void cls() {
+    // write_command(0x22);
+    display_rgb(WHITE);
+}
+
+// Show Spectrum screen on the display
+unsigned char scr2lcd(char *scrfile) {
+    unsigned char a,ink,pap,pal;
+    uint16_t in=0,pa=7;
+    int c;
+    bool std=1;
+    unsigned int x,y,i,j,k,l,m;
+    unsigned char screen[6976];
+    uint16_t palette64[64];
+    char fullpath[30];
+
+    strcpy(fullpath,"/local/");
+    strcat(fullpath,scrfile);
+
+    printf("Opening File %s...\r\n",fullpath); // Drive should be marked as removed
+    FILE *fp = fopen(fullpath, "r");
+    if (!fp) {
+        printf("File %s could not be opened!\r\n",scrfile);
+        return(1);
+    }
+
+    //cls();        // Keep border, do not cls
+    Display_Home();
+    x=START_X;
+    y=START_Y;
+    LcdSetPenXY(x,y);
+
+    write_command(0x22);
+
+    i=0;
+    while (  ( ( c = fgetc(fp) ) != EOF ) && (i<6976) ) {
+        screen[i] = c;
+        i++;
+    }
+    
+    // Non-stanard screen
+    if (i != 6912) { 
+        
+        printf("ULAplus or other format.\n");
+        // ULAplus screen
+        std=0;
+        
+        for(i=0;i<64;i++) {
+            palette64[i] = palette256[screen[6912+i]];
+        }
+    } else 
+        std = 1;
+    
+    fclose(fp);
+    printf("Screen read done.\n");
+
+    for (j=0;j<3;j++) {              // Screen "third"
+        for (i=0;i<8;i++) {          // Line in third
+            for (k=0;k<8;k++) {      // Microline
+                for (l=32;l>0;l--) { // Byte
+                    c = screen[j * 2048 + k * 256 + i * 32 + (l-1)];        // Pixel byte 
+                    a = screen[6144 + j * 256 + i * 32 + (l-1)];            // Attr byte
+                    if (std) {                                              // Handle attributes as ULA
+                        ink = a & 0x07;
+                        pap = ( a >> 3 ) & 0x07;
+                        if ( (a & 0x40) == 0x40 ) {  // Bright1 - not for black (0)
+                            if ( ink != 0 ) ink += 7;
+                            if ( pap != 0 ) pap += 7;
+                        }
+                    } else {                                                // Otherwise treat as ULA+
+                        pal = a >> 6;                                       // Palette suffix
+                        ink = a & 0x07;
+                        pap = ( a >> 3 ) & 0x07;
+                        in = palette64[pal*16+ink];
+                        pa = palette64[pal*16+8+pap]; 
+                    } 
+                    
+                    for (m=0;m<8;m++) {                                     // Pixel
+
+                        if ( (c & 0x01) == 0x01 ) {
+                            if (std) 
+                                write_data(colors[ink]);
+                            else
+                                write_data(in);
+                        } else {
+                            if (std) 
+                                write_data(colors[pap]);
+                            else
+                                write_data(pa);
+                        }
+                        c >>= 1;
+                    }
+                }
+                y++;
+                x=START_X;
+                LcdSetPenXY(x,y);
+
+            }
+        }
+    }
+
+
+    return(0);
+}
+
+// List files on internal filesystem
+void Dir() {
+    unsigned int i=0, y=2;
+    char str[40];
+
+    DIR *d = opendir("/local");               // Opens the root directory of the local file system
+    struct dirent *p;
+    while ((p = readdir(d)) != NULL) {        // Print the names of the files in the local file system
+        //sprintf(str, "%s\n", p->d_name);        // to stdout.
+        LcdStr(p->d_name);
+        // LcdStr(p->filesize);
+        y++;
+        LcdGotoXY(0,y);
+        if ( strstr(p->d_name,".SCR") != NULL) {
+            i++;
+        }
+    }
+    closedir(d);
+    sprintf(str, "%d SCR files found!",i);
+    LcdStr(str);
+}
+
+// Slideshow - show all SCR files from mbed FS
+void SldShw() {
+    DIR *d = opendir("/local");               // Opens the root directory of the local file system
+    struct dirent *p;
+    while ((p = readdir(d)) != NULL) {        // Print the names of the files in the local file system
+        if ( strstr(p->d_name,".SCR") != NULL) {
+            scr2lcd(p->d_name);                   // Display SCR files from listing
+            wait(3.0);
+        }
+    }
+    closedir(d);
+}
+
+// Show 256 color palette on the display
+void ShowPalette256() {
+    uint16_t r,g,b,x,y,c;
+    uint16_t dr,dg,db,d;                 // Display data
+
+    cls();
+//    LcdSetPenXY(0,0);
+
+    for (r=0;r<8;r++) {
+        dr = r*36;
+        dr <<= 8;
+        dr &= 0xF800;
+        for (g=0;g<8;g++) {
+            dg = g*36;
+            dg <<= 3;
+            dg &= 0x07E0;
+
+            for (b=0;b<4;b++) {
+                // Color calculation
+                db = b*85;
+                db >>= 3;
+                db &= 0x001F;
+
+                d = dr | dg | db;
+
+                // printf("%d\n",d);    // Debug palette print
+                c = 32*g + 4*r + b;
+                palette256[c] = d;
+                
+                for (y=0;y<8;y++) {
+                    LcdSetPenXY(248-(8*(r*4+b)), (8*g)+y);
+                    write_command(0x22);
+
+                    for (x=0;x<8;x++) {
+                        write_data(d);
+                    } // endfor x
+
+                } // endfor y
+                
+            } // endfor b
+        } // endfor g
+    } // endfor b
+
+} // end function ShowPalette
+
+// Terminal emulator
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Display.h	Sun Feb 27 23:39:10 2011 +0000
@@ -0,0 +1,43 @@
+// color definitions (H = half)
+#define    BLACK     0x0000
+#define    HBLUE     0x0015
+#define    BLUE      0x001F
+#define    HRED      0xB800
+#define    RED       0xF800
+#define    HGREEN    0x05E0
+#define    GREEN     0x07E0
+#define    HCYAN     0x05F5
+#define    CYAN      0x07FF
+#define    HMAGENTA  0x8010
+#define    MAGENTA   0xB815
+#define    HYELLOW   0xC5E0
+#define    YELLOW    0xFFE0
+#define    HWHITE    0xC5F5
+#define    WHITE     0xFFFF
+
+// Define Spectrum colors
+static const uint16_t colors [15] = {
+    BLACK,HBLUE,HRED,HMAGENTA,HGREEN,HCYAN,HYELLOW,HWHITE,BLUE,RED,MAGENTA,GREEN,CYAN,YELLOW,WHITE
+};
+
+#define    HRES      320     // X axis # of pixels
+#define    VRES      240     // Y axis # of pixels
+
+#define    START_X   31
+#define    START_Y   23
+
+void cls(void);
+void Display_Home(void);
+void LcdGotoXY( uint8_t x,  uint8_t y);
+void LcdGotoXY8( uint8_t x,  uint8_t y);
+void LcdChr8x8 ( uint8_t ch);
+void LcdStr8x8 (  char *dataPtr );
+void LcdChr (  uint8_t ch );
+void LcdStr (  char *dataPtr );
+unsigned char scr2lcd(char *scrfile);
+void display_rgb(unsigned int data);
+void ShowPalette256(void);
+void Dir(void);
+void SldShw(void);
+void LCD_test(void);
+void initialization(void);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EthernetNetIf.lib	Sun Feb 27 23:39:10 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/donatien/code/EthernetNetIf/#bc7df6da7589
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Fonts.h	Sun Feb 27 23:39:10 2011 +0000
@@ -0,0 +1,169 @@
+#define FONT8X8_LEN 768
+static const uint8_t Font8x8[]=
+ {
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,
+  0x00,0x10,0x00,0x00,0x24,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x24,
+  0x7e,0x24,0x24,0x7e,0x24,0x00,0x00,0x08,0x3e,0x28,0x3e,0x0a,0x3e,
+  0x08,0x00,0x62,0x64,0x08,0x10,0x26,0x46,0x00,0x00,0x10,0x28,0x10,
+  0x2a,0x44,0x3a,0x00,0x00,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x04,0x08,0x08,0x08,0x08,0x04,0x00,0x00,0x20,0x10,0x10,0x10,0x10,
+  0x20,0x00,0x00,0x00,0x14,0x08,0x3e,0x08,0x14,0x00,0x00,0x00,0x08,
+  0x08,0x3e,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x10,
+  0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x18,0x18,0x00,0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00,0x3c,
+  0x46,0x4a,0x52,0x62,0x3c,0x00,0x00,0x18,0x28,0x08,0x08,0x08,0x3e,
+  0x00,0x00,0x3c,0x42,0x02,0x3c,0x40,0x7e,0x00,0x00,0x3c,0x42,0x0c,
+  0x02,0x42,0x3c,0x00,0x00,0x08,0x18,0x28,0x48,0x7e,0x08,0x00,0x00,
+  0x7e,0x40,0x7c,0x02,0x42,0x3c,0x00,0x00,0x3c,0x40,0x7c,0x42,0x42,
+  0x3c,0x00,0x00,0x7e,0x02,0x04,0x08,0x10,0x10,0x00,0x00,0x3c,0x42,
+  0x3c,0x42,0x42,0x3c,0x00,0x00,0x3c,0x42,0x42,0x3e,0x02,0x3c,0x00,
+  0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,
+  0x10,0x10,0x20,0x00,0x00,0x04,0x08,0x10,0x08,0x04,0x00,0x00,0x00,
+  0x00,0x3e,0x00,0x3e,0x00,0x00,0x00,0x00,0x10,0x08,0x04,0x08,0x10,
+  0x00,0x00,0x3c,0x42,0x04,0x08,0x00,0x08,0x00,0x00,0x3c,0x4a,0x56,
+  0x5e,0x40,0x3c,0x00,0x00,0x3c,0x42,0x42,0x7e,0x42,0x42,0x00,0x00,
+  0x7c,0x42,0x7c,0x42,0x42,0x7c,0x00,0x00,0x3c,0x42,0x40,0x40,0x42,
+  0x3c,0x00,0x00,0x78,0x44,0x42,0x42,0x44,0x78,0x00,0x00,0x7e,0x40,
+  0x7c,0x40,0x40,0x7e,0x00,0x00,0x7e,0x40,0x7c,0x40,0x40,0x40,0x00,
+  0x00,0x3c,0x42,0x40,0x4e,0x42,0x3c,0x00,0x00,0x42,0x42,0x7e,0x42,
+  0x42,0x42,0x00,0x00,0x3e,0x08,0x08,0x08,0x08,0x3e,0x00,0x00,0x02,
+  0x02,0x02,0x42,0x42,0x3c,0x00,0x00,0x44,0x48,0x70,0x48,0x44,0x42,
+  0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x7e,0x00,0x00,0x42,0x66,0x5a,
+  0x42,0x42,0x42,0x00,0x00,0x42,0x62,0x52,0x4a,0x46,0x42,0x00,0x00,
+  0x3c,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x7c,0x42,0x42,0x7c,0x40,
+  0x40,0x00,0x00,0x3c,0x42,0x42,0x52,0x4a,0x3c,0x00,0x00,0x7c,0x42,
+  0x42,0x7c,0x44,0x42,0x00,0x00,0x3c,0x40,0x3c,0x02,0x42,0x3c,0x00,
+  0x00,0xfe,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x42,0x42,0x42,0x42,
+  0x42,0x3c,0x00,0x00,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,0x42,
+  0x42,0x42,0x42,0x5a,0x24,0x00,0x00,0x42,0x24,0x18,0x18,0x24,0x42,
+  0x00,0x00,0x82,0x44,0x28,0x10,0x10,0x10,0x00,0x00,0x7e,0x04,0x08,
+  0x10,0x20,0x7e,0x00,0x00,0x0e,0x08,0x08,0x08,0x08,0x0e,0x00,0x00,
+  0x00,0x40,0x20,0x10,0x08,0x04,0x00,0x00,0x70,0x10,0x10,0x10,0x10,
+  0x70,0x00,0x00,0x10,0x38,0x54,0x10,0x10,0x10,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0xff,0x00,0x1c,0x22,0x78,0x20,0x20,0x7e,0x00,
+  0x00,0x00,0x38,0x04,0x3c,0x44,0x3c,0x00,0x00,0x20,0x20,0x3c,0x22,
+  0x22,0x3c,0x00,0x00,0x00,0x1c,0x20,0x20,0x20,0x1c,0x00,0x00,0x04,
+  0x04,0x3c,0x44,0x44,0x3c,0x00,0x00,0x00,0x38,0x44,0x78,0x40,0x3c,
+  0x00,0x00,0x0c,0x10,0x18,0x10,0x10,0x10,0x00,0x00,0x00,0x3c,0x44,
+  0x44,0x3c,0x04,0x38,0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x00,0x00,
+  0x10,0x00,0x30,0x10,0x10,0x38,0x00,0x00,0x04,0x00,0x04,0x04,0x04,
+  0x24,0x18,0x00,0x20,0x28,0x30,0x30,0x28,0x24,0x00,0x00,0x10,0x10,
+  0x10,0x10,0x10,0x0c,0x00,0x00,0x00,0x68,0x54,0x54,0x54,0x54,0x00,
+  0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x00,0x00,0x00,0x38,0x44,0x44,
+  0x44,0x38,0x00,0x00,0x00,0x78,0x44,0x44,0x78,0x40,0x40,0x00,0x00,
+  0x3c,0x44,0x44,0x3c,0x04,0x06,0x00,0x00,0x1c,0x20,0x20,0x20,0x20,
+  0x00,0x00,0x00,0x38,0x40,0x38,0x04,0x78,0x00,0x00,0x10,0x38,0x10,
+  0x10,0x10,0x0c,0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x38,0x00,0x00,
+  0x00,0x44,0x44,0x28,0x28,0x10,0x00,0x00,0x00,0x44,0x54,0x54,0x54,
+  0x28,0x00,0x00,0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00,0x00,0x44,
+  0x44,0x44,0x3c,0x04,0x38,0x00,0x00,0x7c,0x08,0x10,0x20,0x7c,0x00,
+  0x00,0x0e,0x08,0x30,0x08,0x08,0x0e,0x00,0x00,0x08,0x08,0x08,0x08,
+  0x08,0x08,0x00,0x00,0x70,0x10,0x0c,0x10,0x10,0x70,0x00,0x00,0x14,
+  0x28,0x00,0x00,0x00,0x00,0x00,0x3c,0x42,0x99,0xa1,0xa1,0x99,0x42,
+  0x3c,0x3c
+  };
+  
+  /*-----------------------------------------------------------------------------
+                                 Character generator
+
+     This table defines the standard ASCII characters in a 5x7 dot format.
+-----------------------------------------------------------------------------*/
+static const uint8_t FontLookup [][5] = {
+    { 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp
+    { 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !
+    { 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
+    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
+    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
+    { 0xc4, 0xc8, 0x10, 0x26, 0x46 },   // %
+    { 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
+    { 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
+    { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
+    { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
+    { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
+    { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
+    { 0x00, 0x00, 0x50, 0x30, 0x00 },   // ,
+    { 0x10, 0x10, 0x10, 0x10, 0x10 },   // -
+    { 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
+    { 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
+    { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
+    { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
+    { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
+    { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
+    { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
+    { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
+    { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
+    { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
+    { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
+    { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
+    { 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
+    { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
+    { 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
+    { 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
+    { 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
+    { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
+    { 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
+    { 0x7E, 0x11, 0x11, 0x11, 0x7E },   // A
+    { 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
+    { 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
+    { 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
+    { 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
+    { 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
+    { 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
+    { 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
+    { 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
+    { 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
+    { 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
+    { 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
+    { 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
+    { 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
+    { 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
+    { 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
+    { 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
+    { 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
+    { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
+    { 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
+    { 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
+    { 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
+    { 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
+    { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
+    { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
+    { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
+    { 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
+    { 0x00, 0x06, 0x18, 0x60, 0x00 },    // backslash
+    { 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
+    { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
+    { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
+    { 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
+    { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
+    { 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
+    { 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
+    { 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
+    { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
+    { 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
+    { 0x0C, 0x52, 0x52, 0x52, 0x3E },   // g
+    { 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
+    { 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
+    { 0x20, 0x40, 0x44, 0x3D, 0x00 },   // j
+    { 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
+    { 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
+    { 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
+    { 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
+    { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
+    { 0x7C, 0x14, 0x14, 0x14, 0x08 },   // p
+    { 0x08, 0x14, 0x14, 0x18, 0x7C },   // q
+    { 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
+    { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
+    { 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
+    { 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
+    { 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
+    { 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
+    { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
+    { 0x0C, 0x50, 0x50, 0x50, 0x3C },   // y
+    { 0x44, 0x64, 0x54, 0x4C, 0x44 },   // z
+    { 0x08, 0x36, 0x41, 0x41, 0x00 },    // {
+    { 0x00, 0x00, 0x7F, 0x00, 0x00 },    // |
+    { 0x00, 0x41, 0x41, 0x36, 0x08 },    // }
+    { 0x01, 0x02, 0x01, 0x02, 0x00 },    // ~
+    { 0x3E, 0x5D, 0x55, 0x55, 0x3E },    // (c)
+    { 0x55, 0x2A, 0x55, 0x2A, 0x55 }    // 55
+};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HTTPClient.lib	Sun Feb 27 23:39:10 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/donatien/code/HTTPClient/#d0be6af2d1db
--- a/main.cpp	Wed Dec 01 21:01:31 2010 +0000
+++ b/main.cpp	Sun Feb 27 23:39:10 2011 +0000
@@ -26,513 +26,39 @@
 //              PC terminal prompt
 // 01.12.2010 bright fixed, slideshow added, terminal session start
 //            after slideshow finish
+// 04.12.2010 fixed non bright values (3/4 of intensity instead of 1/2)
+// 08.12.2010 added ULA+ format for slideshow (6912 + 64 bytes palette)
 // *********************************************************************
 #include "mbed.h"
-
-
-// color definitions (H = half)
-#define    BLACK     0x0000
-#define    HBLUE     0x0010
-#define    BLUE      0x001F
-#define    HRED      0x8000
-#define    RED       0xF800
-#define    HGREEN    0x0400
-#define    GREEN     0x07E0
-#define    HCYAN     0x0410
-#define    CYAN      0x07FF
-#define    HMAGENTA  0x8010
-#define    MAGENTA   0xF81F
-#define    HYELLOW   0x8400
-#define    YELLOW    0xFFE0
-#define    HWHITE    0x8410
-#define    WHITE     0xFFFF
-
-// Define Spectrum colors
-static const uint16_t colors [15] = {
-    BLACK,HBLUE,HRED,HMAGENTA,HGREEN,HCYAN,HYELLOW,HWHITE,BLUE,RED,MAGENTA,GREEN,CYAN,YELLOW,WHITE
-};
-
-#define    HRES      320     // X axis # of pixels
-#define    VRES      240     // Y axis # of pixels
-
-#define    START_X   31
-#define    START_Y   23
+#include "EthernetNetIf.h"
+#include "HTTPClient.h"
+#include "Display.h"
 
 LocalFileSystem local("local");
 
+/* SPI definitions moved to Display.c module
 SPI spi(p5, p6, p7); // mosi, miso, sclk
 DigitalOut DCS(p8);     // Display chip select
 DigitalOut DRS(p15);   // Display reset
 DigitalOut DCD(p16);   // Display command/data
 DigitalOut DRD(p17);   // Display read
 DigitalOut DWR(p18);   // Display write
-
+*/
 DigitalOut myled(LED1);
 
-
 Serial pc(USBTX, USBRX);    //debug info - see raw data being transferred back and forth as GBA is booting
 
-#define LCD_CACHE_SIZE 5
+EthernetNetIf eth;
+HTTPClient http;
+
 /*-----------------------------------------------------------------------------
                                       Global Variables
 -----------------------------------------------------------------------------*/
-//static uint8_t LcdCache [ LCD_CACHE_SIZE ];
-
-//static int   LcdCacheIdx;
-//static int   LoWaterMark;
-//static int   HiWaterMark;
-static uint16_t yy=0;
-static uint16_t xx=0;
-
-static uint16_t BACKGROUND = WHITE;
-static uint16_t FOREGROUND = BLACK;
-
-// Essential display commands
-/*************************************************/
-void write_command(uint16_t command) {
-    uint8_t raw;
-
-    DRD = 1;
-    DCS = 0;
-    DCD = 0;
-
-    raw = command;
-    //raw &= 0x00FF;      // Keep bit9 low - means command
-    //printf("Raw data: %d\n",raw);
-    spi.write(raw);
-
-    DWR = 1;
-    DCS = 1;
-}
-
-/*************************************************/
-
-//typedef unsigned char u8;
-//typedef unsigned int u16;
-void write_data(uint16_t value) {
-    uint8_t raw;
-
-    DRD = 1;
-    DCD = 1;
-    DCS = 0;
-
-    raw = (value)>>8;
-    // raw &= 0x00FF;      // Keep bit9 high - means data
-    // raw |= 0x0100;
-    // printf("Raw data: %d\n",raw);
-    spi.write(raw);
-
-    DCS = 1;
-    //wait_ms(1);
-    DCS = 0;
-
-    raw = value;
-    // raw &= 0x00FF;      // Keep bit9 high - means data
-    // raw |= 0x0100;
-    // printf("Raw data: %d\n",raw);
-    spi.write(raw);
-
-    DCS = 1;
-}
-
-
-// Font generator
-/*-----------------------------------------------------------------------------
-                                 Character generator
-
-     This table defines the standard ASCII characters in a 5x7 dot format.
------------------------------------------------------------------------------*/
-static const uint8_t FontLookup [][5] = {
-    { 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp
-    { 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !
-    { 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
-    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
-    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
-    { 0xc4, 0xc8, 0x10, 0x26, 0x46 },   // %
-    { 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
-    { 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
-    { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
-    { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
-    { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
-    { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
-    { 0x00, 0x00, 0x50, 0x30, 0x00 },   // ,
-    { 0x10, 0x10, 0x10, 0x10, 0x10 },   // -
-    { 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
-    { 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
-    { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
-    { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
-    { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
-    { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
-    { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
-    { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
-    { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
-    { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
-    { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
-    { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
-    { 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
-    { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
-    { 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
-    { 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
-    { 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
-    { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
-    { 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
-    { 0x7E, 0x11, 0x11, 0x11, 0x7E },   // A
-    { 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
-    { 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
-    { 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
-    { 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
-    { 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
-    { 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
-    { 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
-    { 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
-    { 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
-    { 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
-    { 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
-    { 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
-    { 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
-    { 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
-    { 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
-    { 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
-    { 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
-    { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
-    { 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
-    { 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
-    { 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
-    { 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
-    { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
-    { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
-    { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
-    { 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
-    { 0x00, 0x06, 0x18, 0x60, 0x00 },    // backslash
-    { 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
-    { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
-    { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
-    { 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
-    { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
-    { 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
-    { 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
-    { 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
-    { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
-    { 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
-    { 0x0C, 0x52, 0x52, 0x52, 0x3E },   // g
-    { 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
-    { 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
-    { 0x20, 0x40, 0x44, 0x3D, 0x00 },   // j
-    { 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
-    { 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
-    { 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
-    { 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
-    { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
-    { 0x7C, 0x14, 0x14, 0x14, 0x08 },   // p
-    { 0x08, 0x14, 0x14, 0x18, 0x7C },   // q
-    { 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
-    { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
-    { 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
-    { 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
-    { 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
-    { 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
-    { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
-    { 0x0C, 0x50, 0x50, 0x50, 0x3C },   // y
-    { 0x44, 0x64, 0x54, 0x4C, 0x44 },   // z
-    { 0x08, 0x36, 0x41, 0x41, 0x00 },    // {
-    { 0x00, 0x00, 0x7F, 0x00, 0x00 },    // |
-    { 0x00, 0x41, 0x41, 0x36, 0x08 },    // }
-    { 0x01, 0x02, 0x01, 0x02, 0x00 },    // ~
-    { 0x3E, 0x5D, 0x55, 0x55, 0x3E },    // (c)
-    { 0x55, 0x2A, 0x55, 0x2A, 0x55 }    // 55
-};
-
-// Set X & Y axis of next pixel write
-void LcdSetPenXY(uint16_t x, uint16_t y) {
-    write_command(0x004F);    // RAM address set for Y axis
-    write_data(y);            // Page 58 of SSD2119 datasheet
-    write_command(0x004E);    // RAM address set for X axis
-    write_data(x);            // Page 58 of SSD2119 datasheet
-    write_command(0x0022);    // Return back to pixel write mode
-}
-
-
-/*-----------------------------------------------------------------------------
-  Name         :  LcdGotoXY
-  Description  :  Sets cursor location to xy location corresponding to basic
-                  font size.
-  Argument(s)  :  x, y -> Coordinate for new cursor position. Range: 1,1..14,6
-  Return value :  None.
------------------------------------------------------------------------------*/
-void LcdGotoXY ( uint8_t x, uint8_t y ) {
-    // uint16_t xx, yy;
-    xx = y * 8;
-    yy = x * 6;
-    //LcdCacheIdx = (x - 1) * HRES + (y - 1) * VRES;
-    LcdSetPenXY(xx,yy);
-}
-
-typedef enum {
-    FONT_1X = 1,
-    FONT_2X = 2
-
-} LcdFontSize;
-
-typedef enum {
-    PIXEL_OFF =  0,
-    PIXEL_ON  =  1,
-    PIXEL_XOR =  2
-
-} LcdPixelMode;
-
-/*-----------------------------------------------------------------------------
-  Name         :  LcdChr
-  Description  :  Displays a character at current cursor location
-                  and increment cursor location.
-  Argument(s)  :  size -> Font size. See enum.
-                  ch   -> Character to write.
-  Return value :  None.
------------------------------------------------------------------------------*/
-void LcdChr (  uint8_t ch ) {
-    uint8_t i, j, c;
-
-    if ( (ch < 0x20) || (ch > 0x7F) ) {
-        //  Convert to a printable character.
-        ch = 0x80;
-    }
-
-    //write_command(0x0022);
-
-    for ( i = 0; i < 6; i++ ) {
-        if (i < 5) {
-            c = FontLookup[ch - 32][i];
-        } else {
-            c = 0x00;                   // Space after each character
-        }
-
-        for ( j = 0; j < 8; j++ ) {
-            if ( (c & 0x01) == 0x01 ) {
-                //printf("X");
-                write_data(FOREGROUND);
-            } else {
-                //printf(".");
-                write_data(BACKGROUND);
-            }
-            //printf("\n");
-            c >>= 1;
-        }
-        yy++;
-        write_command(0x004F);    // RAM address set for Y axis
-        write_data(yy);       // Page 58 of SSD2119 datasheet
-        write_command(0x0022);
-    }
-}
-
-/*-----------------------------------------------------------------------------
-  Name         :  LcdStr
-  Description  :  Displays a character at current cursor location and increment
-                  cursor location according to font size.
-  Argument(s)  :  size    -> Font size. See enum.
-                  dataPtr -> Pointer to null terminated ASCII string to display.
-  Return value :  None.
------------------------------------------------------------------------------*/
-void LcdStr (  char *dataPtr ) {
-    while ( *dataPtr ) {
-        LcdChr( *dataPtr++ );
-    }
-}
-
-
-/*************************************************/
-void initialization() {
-    /*
-        SET_RD;
-        SET_WR;
-        SET_CS;
-        SET_CD;
-        PORTA=0x00;
-        PORTE=0x00;
-
-        CLR_RESET;
-        delay(200);
-        SET_RESET;
-        delay(500);
-    */
-    DRD = 1;
-    DWR = 1;
-    DCS = 1;
-    DCD = 1;
-
-    DRS = 0;
-    wait_ms(200);
-    DRS = 1;
-    wait_ms(500);
-
-    write_command(0x0028);    // VCOM OTP
-    write_data(0x0006);       // Page 55-56 of SSD2119 datasheet
-
-    write_command(0x0000);    // start Oscillator
-    write_data(0x0001);       // Page 36 of SSD2119 datasheet
-
-    write_command(0x0010);    // Sleep mode
-    write_data(0x0000);       // Page 49 of SSD2119 datasheet
-
-    write_command(0x0001);    // Driver Output Control
-    write_data(0x32EF);       // Page 36-39 of SSD2119 datasheet
-
-    write_command(0x0002);    // LCD Driving Waveform Control
-    write_data(0x0600);       // Page 40-42 of SSD2119 datasheet
-
-    write_command(0x0003);    // Power Control 1
-    write_data(0x6A38);       // Page 43-44 of SSD2119 datasheet
-
-    write_command(0x0011);    // Entry Mode
-    write_data(0x6870);       // Page 50-52 of SSD2119 datasheet
-
-    write_command(0x000F);    // Gate Scan Position
-    write_data(0x0000);       // Page 49 of SSD2119 datasheet
-
-    write_command(0x000B);    // Frame Cycle Control
-    write_data(0x5308);       // Page 45 of SSD2119 datasheet
-
-    write_command(0x000C);    // Power Control 2
-    write_data(0x0003);       // Page 47 of SSD2119 datasheet
-
-    write_command(0x000D);    // Power Control 3
-    write_data(0x000A);       // Page 48 of SSD2119 datasheet
-
-    write_command(0x000E);    // Power Control 4
-    write_data(0x2E00);       // Page 48 of SSD2119 datasheet
-
-    write_command(0x001E);    // Power Control 5
-    write_data(0x00BE);       // Page 53 of SSD2119 datasheet
-
-    write_command(0x0025);    // Frame Frequency Control
-    write_data(0x8000);       // Page 53 of SSD2119 datasheet
-
-    write_command(0x0026);    // Analog setting
-    write_data(0x7800);       // Page 54 of SSD2119 datasheet
-
-    write_command(0x004E);    // Ram Address Set
-    write_data(0x0000);       // Page 58 of SSD2119 datasheet
-
-    write_command(0x004F);    // Ram Address Set
-    write_data(0x0000);       // Page 58 of SSD2119 datasheet
-
-    write_command(0x0012);    // Sleep mode
-    write_data(0x08D9);       // Page 49 of SSD2119 datasheet
-
-    // Gamma Control (R30h to R3Bh) -- Page 56 of SSD2119 datasheet
-    write_command(0x0030);
-    write_data(0x0000);
-
-    write_command(0x0031);
-    write_data(0x0104);
-
-    write_command(0x0032);
-    write_data(0x0100);
-
-    write_command(0x0033);
-    write_data(0x0305);
-
-    write_command(0x0034);
-    write_data(0x0505);
-
-    write_command(0x0035);
-    write_data(0x0305);
-
-    write_command(0x0036);
-    write_data(0x0707);
-
-    write_command(0x0037);
-    write_data(0x0300);
-
-    write_command(0x003A);
-    write_data(0x1200);
-
-    write_command(0x003B);
-    write_data(0x0800);
-
-    write_command(0x0007);    // Display Control
-    write_data(0x0033);       // Page 45 of SSD2119 datasheet
-
-    wait_ms(150);
-
-    write_command(0x0022);    // RAM data write/read
-}
-
-/*************************************************/
-void Display_Home() {
-    xx = 0;
-    yy = 0;
-    write_command(0x004E);    // RAM address set
-    write_data(0x0000);       // Page 58 of SSD2119 datasheet
-    write_command(0x004F);    // RAM address set
-    write_data(0x0000);       // Page 58 of SSD2119 datasheet
-
-    write_command(0x0044);    // Vertical RAM address position
-    write_data(0xEF00);       // Page 57 of SSD2119 datasheet
-    write_command(0x0045);    // Horizontal RAM address position
-    write_data(0x0000);       // Page 57 of SSD2119 datasheet
-    write_command(0x0046);    // Horizontal RAM address position
-    write_data(0x013F);       // Page 57 of SSD2119 datasheet
-
-    write_command(0x0022);    // RAM data write/read
-}
-
-
-void display_rgb(unsigned int data) {
-    unsigned int i,j;
-    Display_Home();
-    for (i=0;i<HRES;i++) {
-        for (j=0;j<VRES;j++) {
-            write_data(data);
-        }
-    }
-}
-
-void LCD_test() {
-    //uint16_t i;
-    unsigned int i,j;
-    //bool b;
-    Display_Home();
-
-    printf("Disp home done.\n");
-    for (i=0; i<HRES;i++) {
-        //b = 0;
-        for (j=0;j<VRES;j++) {
-
-            /*
-            if (j < (VRES/2)) {
-                b = 0;
-            } else {
-                b = 1;
-            }
-            */
-            //if (j == 120) b=1;
-            //b=1;
-            if (i>279)write_data(BLACK);
-            else if (i>259) write_data(BLUE);    //{ if (b) { write_data(BLUE); } else { write_data(HBLUE); } }
-            else if (i>239) write_data(HBLUE);
-            else if (i>219) write_data(RED);     //{ if (b) { write_data(RED); } else { write_data(HRED); } }
-            else if (i>199) write_data(HRED);
-            else if (i>179) write_data(MAGENTA); //{ if (b) { write_data(MAGENTA); } else { write_data(HMAGENTA); } }
-            else if (i>159) write_data(HMAGENTA);
-            else if (i>139) write_data(GREEN);   //{ if (b) { write_data(GREEN); } else { write_data(HGREEN); } }
-            else if (i>119) write_data(HGREEN);
-            else if (i>99)  write_data(CYAN);    //{ if (b) { write_data(CYAN); } else { write_data(HCYAN); } }
-            else if (i>79)  write_data(HCYAN);
-            else if (i>59)  write_data(YELLOW);  //{ if (b) { write_data(YELLOW); } else { write_data(HYELLOW); } }
-            else if (i>39)  write_data(HYELLOW);
-            else if (i>19)  write_data(WHITE);
-            else write_data(HWHITE);             //{ if (b) { write_data(WHITE); } else { write_data(HWHITE); } }
-        }
-        //printf("Col = %d\n",i);
-    }
-}
-
-void cls() {
-    // write_command(0x22);
-    display_rgb(WHITE);
-}
+extern uint16_t FOREGROUND, BACKGROUND;     // Display back and foreground - defined in Display.h
+int ShowType = 0;                           // What images to display: 0 - local, 1 - internet
 
 unsigned char cat(char *filename) {
-    char c;
+    int c;
     unsigned int x,y;
 
     printf("Opening File...\n"); // Drive should be marked as removed
@@ -571,237 +97,276 @@
 }
 
 
-unsigned char scr2lcd(char *scrfile) {
-    unsigned char c,a,ink,pap;
-    unsigned int x,y,i,j,k,l,m;
-    unsigned char screen[6912];
-    char fullpath[30];
-    
-    strcpy(fullpath,"/local/");
-    strcat(fullpath,scrfile);
-     
-    printf("Opening File %s...\n",fullpath); // Drive should be marked as removed
-    FILE *fp = fopen(fullpath, "r");
-    if (!fp) {
-        printf("File %s could not be opened!\n",scrfile);
-        return(1);
-    }
 
-    //cls();        // Keep border, do not cls
-    Display_Home();
-    x=START_X;
-    y=START_Y;
-    LcdSetPenXY(x,y);
-
-    write_command(0x22);
-
-    i=0;
-    while (  ( ( c = fgetc(fp) ) != EOF ) && (i<6912) ) {
-        screen[i] = c;
-        i++;
-    }
-    fclose(fp);
-    printf("Screen read done.");
-
-    for (j=0;j<3;j++) {              // Screen "third"
-        for (i=0;i<8;i++) {          // Line in third
-            for (k=0;k<8;k++) {      // Microline
-                for (l=32;l>0;l--) { // Byte
-                    c = screen[j * 2048 + k * 256 + i * 32 + (l-1)];
-                    for (m=0;m<8;m++) { // Pixel
-                        a = screen[6144+ j * 256 + i * 32 + (l-1)];
-                        ink = a & 0x07;
-                        pap = ( a >>=3 ) & 0x07;
-                        if ( (a & 0x08) == 0x08 ) {  // Bright1
-                            if ( ink != 0 ) ink += 7;
-                            if ( pap != 0 ) pap += 7;
-                        }
-
-                        if ( (c & 0x01) == 0x01 ) {
-                            write_data(colors[ink]);
-                        } else {
-                            write_data(colors[pap]);
-                        }
-                        c >>= 1;
-                    }
-                }
-                y++;
-                x=START_X;
-                LcdSetPenXY(x,y);
-
-            }
-        }
-    }
-
-
-    return(0);
-}
-// List files on internal filesystem
-void Dir()
-{
-    unsigned int i=0, y=12;
-    char str[40];
-    
-    DIR *d = opendir("/local");               // Opens the root directory of the local file system
-    struct dirent *p;
-    while((p = readdir(d)) != NULL) {         // Print the names of the files in the local file system
-      //sprintf(str, "%s\n", p->d_name);        // to stdout.
-      LcdStr(p->d_name);
-      y++;
-      LcdGotoXY(0,y);
-      if ( strstr(p->d_name,".SCR") != NULL) {
-        i++;
-      }
-    }
-    closedir(d);
-    sprintf(str, "%d SCR files found!",i);
-    LcdStr(str);
-}
-
-// Slideshow - show all SCR files from mbed FS
-void SldShw()
+void terminal() 
 {
-    DIR *d = opendir("/local");               // Opens the root directory of the local file system
-    struct dirent *p;
-    while((p = readdir(d)) != NULL) {         // Print the names of the files in the local file system
-      if ( strstr(p->d_name,".SCR") != NULL) {
-        scr2lcd(p->d_name);                   // Display SCR files from listing
-        wait(3.0);
-      }
-    }
-    closedir(d);
-}
-
-// Main loop starts here
-int main() {
-
-    uint8_t x,y;
-    char c,xc=' ';
-    unsigned int i;
-    char str[40];
+    int x, y, r=1;
+    char c, xc=' ';
     
-    //Configure the Fastest Baud Rate
-    pc.baud(115200);
-
-    printf("Program start.\n");
-
-    // Setup the spi for 8 bit data, high steady state clock,
-    // second edge capture, with a 10 MHz clock rate
-    spi.format(8,3);         // CPOL=1, CPHA=1
-    spi.frequency(10000000); // SPI fastest possible
-
-    printf("SPI initialized.\n");
-    myled = 0;
-
-    while (1) {
-
-        initialization();
-
-        printf("Display initialized.\n");
-
-        LCD_test();
-
-        printf("Display test.\n");
-
-        wait(1.0);
-
-        if (myled == 0) {
-            myled = 1;
-        } else {
-            myled = 0;
-        }
-
-        Display_Home();
-        LcdGotoXY(13,10);
-        LcdChr('H');
-        LcdGotoXY(14,10);
-        LcdChr('e');
-        LcdGotoXY(15,10);
-        LcdChr('l');
-        LcdGotoXY(16,10);
-        LcdChr('l');
-        LcdGotoXY(17,10);
-        LcdChr('o');
-
-        LcdStr(" World!");
-        
-        y = 11;
-        LcdGotoXY(0,y);
-        LcdStr("Local filesystem contains these files:");
-        y++;
-        LcdGotoXY(0,y);
-        Dir();
-       
-       for (i=5;i>0;i--)
-       {
-            LcdGotoXY(0,0);
-            sprintf(str, "Displaying images in %d seconds...", i);
-            switch (i) {
-                case 1:
-                    strcat(str,"/");
-                    break;
-                case 2:
-                    strcat(str,"|");
-                    break;
-                case 3:
-                    strcat(str,"\\");
-                    break;
-                case 4:
-                    strcat(str,"-");
-                    break;
-                default:
-                    break;
-              }
-                
-            LcdStr(str);
-            wait(1.0);
-        }
-        LCD_test();                                 // Restore rainbow background
-        SldShw();                                   // Slide show from ZX screens
-        
-        wait(5.0);
-        
-        
         FOREGROUND = GREEN;
         BACKGROUND = BLACK;
         display_rgb(BACKGROUND);
-         
+
         LcdGotoXY(4,1);
         LcdStr("Below you can see what you write");
         LcdGotoXY(12,2);
         LcdStr("in your PC terminal");
-
-       
+        
         x = 0;
         y = 3;
-        while (1) {
+        while (r == 1) 
+        {
             LcdGotoXY(x,y);
             c = pc.getc();
             if (c == 13) {
                 y++;
                 x=0;
-            };
+            }; // endif c==13
+            
             if (c == 8)  {
                 x--;
-            };
+            }; // endif c==8
 
             if (c > 31) {
                 LcdChr(c);
                 if ( (xc == '\\' ) && ( c == '\\' ) ) {
                     //scr2lcd("test.scr");
-                    LCD_test();
-                    SldShw();
+                    //LCD_test();
+                    //SldShw();
+                    r=0;
                 }
 
                 xc = c;
-            }
+            } // endif c>31
             x++;
             if (x>39) {
                 y++;
                 x=0;
                 if (y>39) y=0;
-            }
-        }
+            } // endif x>39
+        } // endwhile
+    
+}
+
+// Always print system messages on certain line of display
+void SysMsg(char *dataPtr) {
+
+        LcdGotoXY8(0,29);
+        LcdStr8x8( dataPtr );
+}        
+
+
+// Main loop starts here
+int main() {
+
+    // Variable definitions
+    uint8_t y;
+    //unsigned int i;
+    char str[40];
+    char err[40];       // Error message string
+    char url[256];       // Remote URL
+    char fname[80];      // Local filename
+    int c,w;
+    FILE *fl;
+    unsigned int i, j, a, rnd, last, blast;
+    const int num_files=300;
+    int names[num_files];
+    int lenghts[num_files];
+
+    // Variable initialization
+    a = 0;
+    i = 0;
+    last = 0;
+    blast = 0;
+   
+    //Configure the Fastest Baud Rate
+    pc.baud(115200);
+    printf("Program start.\n");
+
+    myled = 0;
+    initialization();       // Initialize LCD
+
+    printf("SPI and display initialized.\n");
+
+    LCD_test();             // Draw border
+    printf("Display test.\n");
+
+    wait(1.0);
+    if (myled == 0) {
+        myled = 1;
+    } else {
+        myled = 0;
+    }
+
+    // Show welcome message
+    Display_Home();
+    LcdGotoXY8(12,10);
+    LcdStr8x8("Welcome to mBed");
+    LcdGotoXY8(5,11);
+    LcdStr8x8("Retro Computing Picture Frame");
+    LcdGotoXY8(0,13);
+    LcdStr8x8("Based on SSD2119 controller& TFT 320x240");     
+    
+    SysMsg("Configuring Ethernet...");
+    
+    // Configure ethernet interface    
+    EthernetErr ethErr = eth.setup();
+    if(ethErr) {
+        sprintf(err,"Error %d in ETH setup.", ethErr);
+        SysMsg(err);
+        ShowType = 0;               // Local slideshow only
+    } else {
+        IpAddr ip = eth.getIp();
+        sprintf(err, "Setup OK, local IP: %d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
+        SysMsg(err);
+        ShowType = 1;               // Ethernet available - we can download pictures
     }
 
-}
+    // Do some common stuff for both ShowType modes
+    LCD_test();         // Show colorfull border again    
+    wait(2.0);
+    myled = 0;
+    Display_Home();
+    LcdGotoXY(13,0);
+    LcdChr('H');
+    LcdGotoXY(14,0);
+    LcdChr('e');
+    LcdGotoXY(15,0);
+    LcdChr('l');
+    LcdGotoXY(16,0);
+    LcdChr('l');
+    LcdGotoXY(17,0);
+    LcdChr('o');
+
+    LcdStr(" mBed World!");
+
+    y = 1;
+    LcdGotoXY(0,y);
+    LcdStr("Local filesystem contains these files:");
+    y++;
+    LcdGotoXY(0,y);
+    Dir();                  // Show directory listing
+
+    wait(1.0);
+
+    ShowPalette256();        // Show actual 256 colors palette
+
+    for (i=3;i>0;i--) 
+    {
+        LcdGotoXY(0,38);
+        sprintf(str, "Displaying images in %d seconds...", i);
+        switch (i) {
+            case 1:
+                strcat(str,"/");
+                break;
+            case 2:
+                strcat(str,"|");
+                break;
+            case 3:
+                strcat(str,"\\");
+                break;
+            case 4:
+                strcat(str,"-");
+                break;
+            default:
+                break;
+        }
+
+        LcdStr(str);
+        wait(1.0);
+    }
+    
+    
+    // Check if we have the list of files
+    if ( (fl = fopen("/local/scrnpath.txt","r") ) == NULL ) {              // Fl = FileList
+      printf("Unable to open file list! Fallback to local.\n");
+      ShowType = 0; // Local
+    } else {
+        while ( ( ( c = fgetc(fl) ) != EOF ) && ( a < num_files) ) {
+        i++;
+        if ( c == '\n') {
+            last = i;
+            if ( a == 0 ) {
+                names[a] = 0;
+                lenghts[a] = last;
+            } else {
+                names[a] = blast;
+                lenghts[a] = last - blast;
+            } // If2
+            blast = last;
+            a++;
+        } // If2
+
+        } // while
+    
+    } // Else
+    // Variable 'a' now holds number of pictures available
+
+    srand ( 99 );
+    LCD_test();                                 // Restore rainbow background    
+    
+    // Now distinguish between both modes and do different things
+    if ( ShowType == 0 ) { 
+        while (1) {
+            SldShw();                                   // Slide show from ZX screens
+            
+            if ( pc.readable() ) terminal();               // If key pressed start terminal
+            
+            wait(3.0);
+            } // loop forever
+        
+        } else {
+       
+       while (1) { 
+            // We do picture show from the net
+            for (j=0; j < 48; j++ ) {
+            // Pseudo Random Picture file selection
+            rnd = rand() % a;
+
+            printf("Picture[%d] Names[%d]   Lenghts[%d]\n", rnd, names[rnd], lenghts[rnd]);
+            printf("Random file: %d\n", rnd);
+            fseek(fl, names[rnd], SEEK_SET);
+
+            w = fgetc(fl);
+
+            sprintf(url, "http://wos.meulie.net/pub/spectrum/screens/load/%c/scr/%c", w+32, w);
+
+            for (i=2; i<lenghts[rnd]; i++) {
+                c = fgetc(fl);
+                sprintf(url, "%s%c", url, c);
+            }
+            printf("URL: %s\n",url);
+   
+            // Open a file to write.
+            sprintf(fname,"/local/%d.scr",j);
+            printf("Local file name: %s\n", fname);
+            HTTPFile file(fname);
+
+
+            // Insert the search term into the URL
+            //sprintf(url, "http://wos.meulie.net/pub/spectrum/screens/load/a/scr/ACZGeneralLedger2000.scr");
+
+            // Request a page and store it into a file.
+            HTTPResult r = http.get(url, &file);
+
+            if(r==HTTP_OK)
+            {
+                pc.printf("File fetched OK.\n"); //:\"%s\"\n", file.gets()); 
+            } else {
+                pc.printf("Error fetching file %d\n", r);
+            }
+            
+            sprintf(fname,"%d.scr",j);
+            scr2lcd(fname);
+            wait(2.0);
+            
+            } // For (j)
+
+       } // Loop Forever
+        
+       fclose(fl); // Close index file
+        
+       } // Else (ShowType)
+    
+} // End main()
+
--- a/mbed.bld	Wed Dec 01 21:01:31 2010 +0000
+++ b/mbed.bld	Sun Feb 27 23:39:10 2011 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e
+http://mbed.org/users/mbed_official/code/mbed/builds/9a9732ce53a1