Color libraries

Understanding the language, error messages, etc.

Color libraries

Postby Duhjoker » Sun Jan 15, 2017 2:27 am

All right guys I've got several color libraries depending on what hardware you want use. We have one working for the inhaos lcd2000_7755 that should work with any teensy. We have one for MCUfriend that works with up to a teensy3.2 and T3.5-6 I also have one that uses KurtE and Paul S' optimized ili9341 library. And I'm working on a couple more so there's gonna be a variety ways to go color.

But let me ask a question.........

What would you guys like to see and have in a color library? What would make it worth it?

I've got a ton of bitmap versions including tilemap, adafruit, SD and push colors. I have the collision built in as well.

Let me know what you guys think and what you would like!!!!

Update::::::

Ok so I've got two libraries that claim to work with any board and most of the popular screens.

First we have the MCU_friend library that works with almost all the arduinos and all the teensy's it took some doing since it wasn't meant for any teensy over 3.2, so I had to do some code modifying to get it to compile and to work. Any way it also works for most of the ili93xx screens and some of the st77xx screens.

Now I also took SumoToys rocket fast ili93XX library and gamebuino'd it as well. Now this one works with a ton of arduinos and all the teensy's. It also works on the popular ili93xx and some st77xx version Tft's.

So both these libraries will work with most the popular and well documented and distributed screens of right now and they are every where. You don't have to use a teensy if don't want to either as they have SD capability. Rather do a black/grey/white game go ahead it's possible. Just use several real grey colors.

But if you have a color screen you would like to use and it's not covered by the code libraries above, feel free to ask and send me your screens "driver" library and I will set you up in a couple days.
User avatar
Duhjoker
 
Posts: 446
Joined: Sat Jul 02, 2016 4:57 am
Location: Where Palm trees grow

Re: Color libraries

Postby Duhjoker » Tue Jan 17, 2017 3:56 am

here are the libraries. Wanted to pretty them up and add some tweaks. The MVU version includes bitmap pushcolor named drawBitmapPC and the ili934xx has a draw image command I assume works like the pushcolor bitmap.

i left everything else pretty much untouched for now so everything should be in there. the regular examples will not compile since i have everything set up for Gamebuino. But any Gamebuino example will work just declare the colors you want to use in the sketch and give a color name to the end of the parameters in the () of youe draw commands. That's it!!!!!

If theres something you want included let me know.
Attachments
Gamebuino_mcu_WORKING.zip
(175.45 KiB) Downloaded 290 times
Gamebuino_93XX_working.zip
(223.62 KiB) Downloaded 295 times
User avatar
Duhjoker
 
Posts: 446
Joined: Sat Jul 02, 2016 4:57 am
Location: Where Palm trees grow

Re: Color libraries

Postby naed » Tue Jan 17, 2017 8:07 am

Any chance of seeing this in action? Screenshots? Video?
User avatar
naed
 
Posts: 140
Joined: Tue May 31, 2016 3:18 pm

Re: Color libraries

Postby Duhjoker » Tue Jan 17, 2017 9:40 am

Soon my friend. Im trying to get the wiring sorted out so i can try to at least display bitmaps. Then ill do buttons. Hopefully by next week about this time.

Take a look though and tell me what you think.

Getting anxious myself!!
User avatar
Duhjoker
 
Posts: 446
Joined: Sat Jul 02, 2016 4:57 am
Location: Where Palm trees grow

Re: Color libraries

Postby Duhjoker » Tue Jan 17, 2017 10:32 am

Ok so how do i actually use the drawbitmap from SD function from mougino in the library from his example. How are the bitmaps stored and what format do they need to be in for it to read and display them? Text, raw,..etc.
User avatar
Duhjoker
 
Posts: 446
Joined: Sat Jul 02, 2016 4:57 am
Location: Where Palm trees grow

Re: Color libraries

Postby naed » Tue Jan 17, 2017 6:24 pm

Can you link me to that drawbitmap from sd function?
User avatar
naed
 
Posts: 140
Joined: Tue May 31, 2016 3:18 pm

Re: Color libraries

Postby Duhjoker » Tue Jan 17, 2017 9:25 pm

Sorry just got your message.

Sure can

The drawBitMapfrom Sd command is included in the library or you could download mouginos example file from here.......

viewtopic.php?f=12&t=787&hilit=read+from+sd&start=10#p10556

Or here it is.......

Code: Select all
#include <SPI.h>
#include <Gamebuino.h>
#include <petit_fatfs.h>

//#define debug // Comment for live conditions (Gamebuino+SD). Uncomment for demo conditions (simulator)

PROGMEM const unsigned char title[] = { 32,32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x7F,0xF8,0x00,0x00,0xE0,0x1E,0x00,0x03,0x00,0x83,0x80,0x06,0x01,0xC0,0xC0,0x0C,0x03,0xE0,0x60,0x08,0x03,0xE0,0x20,0x18,0xE1,0xC0,0x30,0x19,0xF0,0x02,0x10,0x19,0xF0,0x07,0x98,0x38,0xE0,0x08,0xD8,0x30,0x40,0x08,0x58,0x30,0x00,0x08,0x58,0x30,0x00,0x0C,0xD8,0x30,0x00,0x07,0x18,0x30,0x40,0x00,0x18,0x38,0xE0,0xF8,0x30,0x19,0xF0,0xCC,0x60,0x19,0xF1,0x83,0xC0,0x18,0xE1,0x80,0x00,0x0C,0x03,0x00,0x00,0x0E,0x07,0x00,0x00,0x07,0x1E,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };

#ifdef debug // Below are the bitmaps data dumped to PROGMEM (made possible with my "FileToArray.exe" util) for debug in simulator
PROGMEM const char ff[] = { 0x42,0x4d,0x32,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x04,0x00,0x00,0x28,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0x40,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x42,0x4d,0x32,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x04,0x00,0x00,0x00,0x00,0xb0,0x48,0xac,0x00,0x24,0x05,0x00,0x00,0x34,0x04,0x00,0x00,0x0f,0x00,0x85,0x01,0x96,0x11,0x01,0x95,0x3a,0x08,0x05,0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaf,0x60,0x20,0x00,0x20,0x2f,0x14,0x00,0xdc,0x64,0xb1,0x00,0x22,0x02,0xfb,0x7f,0x26,0x00,0x00,0x00,0x78,0xae,0x14,0x00,0x30,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0xd4,0x4b,0x77,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0xd8,0x64,0xb1,0x00,0x98,0xf5,0x12,0x00,0x44,0x4a,0x0e,0x77,0x34,0x60,0x5c,0x77,0xd8,0x64,0xb1,0x00,0xa0,0x7b,0x21,0x00,0x84,0xf7,0x12,0x00,0xd8,0x64,0xb1,0x00,0x80,0x00,0x00,0x00,0xac,0xf5,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xdc,0x64,0xb1,0x00,0x40,0xf9,0x12,0x00,0x32,0xc8,0x20,0x00,0x00,0x00,0x00,0x00,0xcc,0xf5,0x12,0x00,0x3f,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0xf7,0x12,0x00,0x40,0xf9,0x12,0x00,0x9f,0x4f,0x20,0x00,0x88,0xf7,0x12,0x00,0x36,0x04,0x28,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf4,0xb3,0x14,0x00,0x5a,0x3a,0x5c,0x41,0x72,0x64,0x75,0x69,0x6e,0x6f,0x20,0x4c,0x44,0x56,0x45,0x4c,0x48,0x20,0x4d,0x61,0x6b,0x65,0x72,0x5c,0x44,0x46,0x30,0x31,0x5c,0x74,0x69,0x74,0x6c,0x65,0x2e,0x62,0x6d,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdc,0x3d,0x20,0x00,0xc0,0x12,0x3f,0x7e,0x78,0x67,0x4b,0x00,0x58,0xf9,0x12,0x00,0xa1,0x7b,0x21,0x00,0xf5,0xb3,0x14,0x00,0xcf,0x4e,0x20,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7c,0xff,0xff,0xc0,0x00,0x03,0xff,0xff,0xdf,0xbf,0xe0,0x03,0xff,0xf0,0x0f,0xff,0xff,0xe8,0x07,0xff,0x78,0xfd,0xe1,0xff,0xfb,0xf0,0x1f,0xe7,0xf9,0xf8,0xf1,0xff,0xfe,0xfc,0x03,0x63,0xff,0xf8,0xfe,0xff,0xc0,0x3f,0x07,0xe0,0x00,0x01,0xf8,0xf8,0x4f,0xcf,0xc0,0x00,0x00,0x08,0x0a,0xe2,0x3f,0xc7,0xa0,0x00,0x00,0x08,0x0e,0x03,0xe5,0xf3,0xf8,0x00,0x00,0xe8,0x1f,0x3f,0xe6,0x05,0x7e,0x00,0x01,0xd4,0x45,0x3f,0xf8,0x14,0xfb,0x00,0x06,0x68,0x23,0x07,0x00,0x03,0xaf,0xe0,0x30,0x40,0x7b,0xa7,0x00,0x00,0xbb,0xb8,0xbe,0x41,0xf7,0xdf,0x80,0x00,0x31,0xfe,0x05,0x04,0xcf,0xef,0xc0,0x00,0x34,0xe0,0x0e,0x0c,0x5f,0xf6,0x20,0x01,0x39,0xeb,0x90,0x1e,0x7f,0xfc,0x10,0x47,0x6e,0x0c,0x20,0x19,0xff,0xfe,0x7c,0x02,0xc0,0x84,0x04,0x0f,0xff,0xff,0x3e,0x10,0x80,0xec,0x03,0x1f,0xff,0xff,0xd4,0x00,0x00,0x04,0xe0,0xff,0xff,0xff,0xf2,0x70,0x00,0x9c,0x38,0x0f,0xff,0xff,0xff,0x4f,0x06,0x71,0xfe,0x07,0xff,0xff,0xff,0xef,0xbf,0x07,0xfe,0x05,0xff,0xff,0xff,0xf8,0x01,0xff,0xff,0xc6,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc3,0xff };
PROGMEM const char d2[] = { 0x42,0x4d,0x5a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xc4,0x0e,0x00,0x00,0xc4,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
PROGMEM const char d4[] = { 0x42,0x4d,0x5a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xc4,0x0e,0x00,0x00,0xc4,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
PROGMEM const char i358[] = { 0x42,0x4d,0x82,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x04,0x00,0x00,0x28,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0x54,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x42,0x4d,0x82,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x04,0x00,0x00,0x00,0x00,0x60,0x2f,0x31,0x00,0x74,0x06,0x00,0x00,0x34,0x04,0x00,0x00,0x0f,0x00,0x85,0x01,0x37,0x1c,0x01,0x8e,0x7b,0x1c,0x05,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaf,0x60,0x20,0x00,0x00,0x3e,0xfb,0x76,0x54,0xf4,0x04,0x07,0x18,0xf4,0x13,0x00,0x1f,0x3e,0xfb,0x76,0x00,0x00,0x18,0x00,0x90,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xf4,0x13,0x00,0x3e,0x52,0x38,0x77,0x44,0x23,0x0d,0x77,0x50,0xf4,0x04,0x07,0x34,0xf6,0x13,0x00,0xa0,0x7b,0x21,0x00,0x81,0x52,0x38,0x77,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x7c,0x2e,0x72,0x1b,0x5c,0xf4,0x13,0x00,0xe7,0x51,0x38,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc5,0x85,0xae,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xf6,0x13,0x00,0x6c,0x05,0x20,0x00,0x50,0xf4,0x13,0x00,0x00,0x00,0x00,0x00,0x3f,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xf6,0x13,0x00,0xf0,0xf7,0x13,0x00,0x9f,0x4f,0x20,0x00,0x38,0xf6,0x13,0x00,0x6c,0x05,0x20,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x2b,0x11,0x04,0x5a,0x3a,0x5c,0x47,0x61,0x6d,0x65,0x62,0x75,0x69,0x6e,0x6f,0x20,0x4c,0x44,0x56,0x45,0x4c,0x48,0x20,0x4d,0x61,0x6b,0x65,0x72,0x5c,0x44,0x46,0x30,0x31,0x5c,0x33,0x35,0x38,0x2e,0x62,0x6d,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdc,0x3d,0x20,0x00,0x10,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xa1,0x7b,0x21,0x00,0x1d,0x2b,0x11,0x04,0xcf,0x4e,0x20,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xf6,0x80,0x75,0x7f,0x80,0x40,0x14,0x60,0x6a,0xb3,0x00,0x00,0xf3,0x00,0x33,0x7e,0x95,0x00,0x10,0x57,0x9a,0x2f,0x10,0x00,0xff,0xc0,0x07,0x5e,0xb0,0x40,0xb0,0x18,0x0b,0x3f,0x10,0x00,0xfe,0xe0,0x0e,0x98,0x84,0x41,0x20,0x91,0x07,0x0a,0x10,0x00,0x00,0xc0,0x0e,0x80,0xb0,0x00,0x20,0x93,0x30,0x06,0xa0,0x00,0xff,0x80,0x0b,0x3e,0x13,0x00,0x00,0x18,0x35,0x84,0x80,0x00,0x7f,0x1a,0x03,0x08,0xc2,0xa0,0x00,0x54,0x25,0x4d,0x90,0x00,0xbe,0x01,0x02,0xd1,0x13,0xa4,0x05,0x58,0x35,0x69,0x30,0x00,0x3c,0x00,0x02,0x7f,0xa9,0x88,0x14,0x90,0x37,0x61,0x30,0x00,0xf8,0x00,0x0a,0x9f,0x40,0x44,0x1d,0x18,0x13,0x42,0x70,0x00,0xf0,0x00,0x01,0x40,0x29,0x0e,0x1d,0x18,0xa1,0x66,0xf0,0x00,0xe0,0xc0,0x02,0x6f,0x99,0x1e,0x7f,0x88,0xd3,0x65,0xf0,0x00,0xc1,0x88,0x05,0xf5,0xf1,0x4c,0x0f,0x8a,0xc7,0xbb,0xf0,0x00,0x87,0x8c,0x0d,0xfb,0x80,0x2b,0xbf,0xd2,0x85,0x93,0xf0,0x00,0x0f,0x0f,0x0b,0xfd,0x33,0x1c,0x0e,0xc8,0x4d,0xf3,0xf0,0x00,0x3f,0x1f,0xf7,0xfe,0xc0,0x58,0x07,0xc1,0x6a,0x73,0xf0,0x00,0xf3,0x1f,0xfb,0x3f,0x01,0x5e,0x1f,0x48,0x73,0x77,0xf0,0x00,0xeb,0x3f,0xf0,0xff,0xa1,0x57,0xbf,0x68,0x18,0x17,0xf0,0x00,0xda,0x78,0xf2,0xff,0xe0,0x5f,0x36,0x60,0x1a,0xef,0xf0,0x00,0xe6,0x71,0x05,0xff,0xe6,0x78,0xc7,0x62,0x39,0x2f,0xf0,0x00,0x5a,0xed,0xf3,0xff,0xc5,0x7d,0xe5,0xe8,0x3a,0xdf,0xf0,0x00,0x92,0xed,0xff,0xff,0xf1,0x7d,0x4f,0xe8,0x38,0xdf,0xf0,0x00,0xb7,0xf6,0x7f,0xbe,0xfe,0x7f,0x7e,0xc0,0x54,0xff,0xf0,0x00,0x90,0xf5,0xff,0x07,0x82,0x5f,0xff,0x86,0x6f,0xbf,0xf0,0x00,0xfe,0xf5,0xfe,0x53,0x64,0x3f,0x7f,0xe2,0xf2,0x7f,0xf0,0x00,0xfa,0xef,0xfd,0x80,0x49,0xbb,0x77,0xea,0x1d,0xff,0xf0,0x00,0xfe,0x5f,0xe0,0x9f,0xc9,0x7f,0xdb,0xe0,0x92,0xff,0xf0,0x00,0xfe,0xcf,0xe4,0xff,0xfd,0xf9,0x49,0xe5,0xe3,0xff,0xf0,0x00,0xff,0xff,0x41,0xff,0xf2,0xe1,0x60,0x28,0x3f,0xff,0xf0,0x00,0xff,0xfe,0x67,0xff,0xf8,0xa8,0xd8,0xb1,0xff,0xff,0xf0,0x00,0xff,0xfc,0x2f,0xff,0xf8,0xc1,0x03,0x7a,0xff,0xff,0xf0,0x00,0xff,0xfc,0x2f,0xff,0xf8,0xfb,0xf8,0x60,0xff,0xff,0xf0,0x00,0xff,0xfc,0x1f,0xff,0xfa,0xd7,0xff,0xb8,0xff,0xff,0xf0,0x00,0xff,0xfe,0xdf,0xff,0xf8,0xaf,0xff,0x20,0xff,0xff,0xf0,0x00,0xff,0xfe,0x1f,0xff,0xf9,0xff,0xde,0x70,0xff,0xff,0xf0,0x00,0xff,0xff,0xcf,0xff,0xf8,0xff,0xff,0xec,0xff,0xff,0xf0,0x00,0xff,0xff,0x3f,0x03,0xf2,0xbc,0x19,0xf8,0xff,0xff,0xf0,0x00,0xff,0xff,0x38,0xbd,0xf8,0xbf,0xff,0xe1,0xff,0xff,0xf0,0x00,0xff,0xff,0x67,0x6b,0xf8,0xff,0x3f,0xe1,0xff,0xff,0xf0,0x00,0xff,0xff,0xa9,0x43,0xf8,0xf7,0x3f,0xc9,0xff,0xff,0xf0,0x00,0xff,0xff,0x94,0x42,0xfa,0xef,0x31,0xa3,0xff,0xff,0xf0,0x00,0xff,0xff,0xe5,0x4d,0xfc,0x6e,0x19,0x93,0xff,0xff,0xf0,0x00,0xff,0xff,0xf1,0xb1,0xf8,0x01,0x19,0x5b,0xff,0xff,0xf0,0x00,0xff,0xff,0xfa,0x11,0xf8,0xce,0x24,0xd7,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0x03,0xfc,0x24,0x04,0xef,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xff,0xff,0x18,0x2b,0x1f,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xff,0xff,0xc5,0x24,0xbf,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xff,0xff,0xf8,0x01,0xff,0xff,0xff,0xf0,0x00 };
PROGMEM const char i383[] = { 0x42,0x4d,0x82,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x04,0x00,0x00,0x28,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0x54,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x42,0x4d,0x82,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x04,0x00,0x00,0x00,0x00,0x60,0x2f,0x31,0x00,0x74,0x06,0x00,0x00,0x34,0x04,0x00,0x00,0x0f,0x00,0x85,0x01,0x37,0x1c,0x01,0xfd,0x05,0x1d,0x05,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaf,0x60,0x20,0x00,0x00,0x3e,0xfb,0x76,0x14,0xee,0x04,0x07,0x18,0xf4,0x13,0x00,0x1f,0x3e,0xfb,0x76,0x00,0x00,0x18,0x00,0x30,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xf4,0x13,0x00,0x3e,0x52,0x38,0x77,0x44,0x23,0x0d,0x77,0x10,0xee,0x04,0x07,0x34,0xf6,0x13,0x00,0xa0,0x7b,0x21,0x00,0x81,0x52,0x38,0x77,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x7c,0x2e,0x72,0x1b,0x5c,0xf4,0x13,0x00,0xe7,0x51,0x38,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc5,0x85,0xae,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xf6,0x13,0x00,0x6c,0x05,0x21,0x00,0x50,0xf4,0x13,0x00,0x00,0x00,0x00,0x00,0x3f,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xf6,0x13,0x00,0xf0,0xf7,0x13,0x00,0x9f,0x4f,0x20,0x00,0x38,0xf6,0x13,0x00,0x6c,0x05,0x21,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c,0x08,0x2f,0x00,0x5a,0x3a,0x5c,0x47,0x61,0x6d,0x65,0x62,0x75,0x69,0x6e,0x6f,0x20,0x4c,0x44,0x56,0x45,0x4c,0x48,0x20,0x4d,0x61,0x6b,0x65,0x72,0x5c,0x44,0x46,0x30,0x31,0x5c,0x33,0x38,0x33,0x2e,0x62,0x6d,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdc,0x3d,0x20,0x00,0x10,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xa1,0x7b,0x21,0x00,0x6d,0x08,0x2f,0x00,0xcf,0x4e,0x20,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xff,0xfc,0x7b,0xff,0xe4,0x00,0x40,0x00,0x3f,0xc7,0xf0,0x00,0xe0,0x3e,0x7d,0xff,0xe0,0x20,0x60,0x04,0x3c,0x7e,0x00,0x00,0x07,0x82,0x7e,0xff,0xe0,0x1c,0x40,0x02,0x3f,0xc0,0x00,0x00,0xff,0xfe,0x7e,0x7f,0x87,0xe0,0x5c,0x04,0xb8,0xff,0xf0,0x00,0x82,0x06,0x7f,0x7f,0x90,0x02,0xe0,0x08,0x3f,0xe0,0x00,0x00,0xfe,0xfc,0x7f,0x7f,0x98,0x10,0xf0,0x04,0xbe,0x0f,0xf0,0x00,0x3f,0xe8,0x7f,0x80,0x01,0x00,0x6f,0xc0,0x3f,0xf0,0x60,0x00,0xc2,0x7c,0x40,0x00,0x09,0x00,0x40,0xf8,0x3e,0x00,0x00,0x00,0xff,0xe6,0x7e,0x7f,0xe1,0x1f,0x20,0x06,0x3b,0xff,0xf0,0x00,0xe0,0x7c,0x7f,0x7f,0xff,0x82,0xa0,0x40,0x3f,0xc0,0x00,0x00,0x1e,0x06,0x7f,0xbf,0xff,0xe0,0x00,0x00,0x3f,0x0e,0x70,0x00,0xe6,0x78,0x7f,0x9f,0xf8,0xe1,0x04,0x00,0x3b,0xff,0x30,0x00,0x06,0x0e,0x7f,0xdf,0xf6,0x00,0x10,0x03,0xbf,0xf0,0x10,0x00,0xff,0xf8,0x7f,0xe0,0x01,0x9e,0x1e,0x00,0x3e,0x1f,0xf0,0x00,0x06,0x1e,0x7f,0x00,0x61,0xdf,0x80,0x00,0x39,0xf0,0x30,0x00,0xff,0xf8,0x00,0xff,0xe8,0xe7,0xc0,0x18,0xb8,0x3f,0xf0,0x00,0x06,0xce,0x07,0xff,0xc0,0x51,0x80,0x00,0xba,0x80,0x00,0x00,0xff,0xe2,0x7f,0xff,0x81,0x5c,0x10,0xfc,0x3c,0xff,0xf0,0x00,0xc6,0x1e,0x7f,0xff,0x00,0x0e,0x01,0xff,0xb7,0x80,0x00,0x00,0x3c,0x0a,0x00,0x07,0x00,0x06,0x03,0xff,0xbe,0x0f,0xf0,0x00,0xff,0xfe,0x7e,0x40,0x30,0x06,0x00,0x7f,0xbf,0xfe,0x00,0x00,0x00,0xd6,0x7f,0xf8,0x64,0x0c,0x00,0x01,0xbc,0x00,0x20,0x00,0xff,0xfe,0x7f,0xfe,0x2d,0x04,0x47,0xe0,0x3f,0xff,0x00,0x00,0x04,0x0e,0x7f,0xfc,0x4f,0x84,0x00,0x7f,0xb8,0x07,0xf0,0x00,0xff,0xfe,0x70,0x1b,0x8f,0x8e,0x00,0x1f,0xbe,0x1f,0x40,0x00,0xfe,0x1a,0x7f,0x03,0x8f,0xce,0x1f,0x03,0xb8,0x03,0xf0,0x00,0x04,0x7e,0x00,0x01,0x9f,0xc2,0x07,0xe0,0x3f,0xff,0xf0,0x00,0xff,0xfe,0x7e,0xf0,0xb5,0xe2,0x83,0xfc,0x3f,0x00,0x00,0x00,0x04,0x0e,0x7e,0xf4,0x40,0x70,0x98,0x0f,0x3b,0x07,0xf0,0x00,0x07,0xfe,0x7f,0xf0,0x30,0x7e,0x18,0x01,0xbf,0x81,0x00,0x00,0xff,0x5e,0x7f,0x60,0xe0,0x30,0x43,0xe0,0x39,0xff,0xf0,0x00,0x00,0x1e,0x7f,0xe8,0xe0,0x24,0x03,0xf4,0x3f,0xff,0x00,0x00,0xff,0xf6,0x7f,0xaf,0xe0,0x0f,0x73,0xf3,0xbf,0xff,0xf0,0x00,0x00,0x1e,0x7f,0xaf,0xb0,0x0f,0x71,0xfb,0xbf,0xff,0xe0,0x00,0xff,0xfe,0x7f,0xa7,0xb8,0x5f,0x79,0xfb,0xb8,0x00,0x00,0x00,0xfe,0x0e,0x43,0x87,0xff,0x9f,0x71,0xfb,0xbf,0xff,0xf0,0x00,0x00,0x7e,0x00,0x07,0xff,0xbf,0xf4,0xfb,0xbf,0xff,0xc0,0x00,0xff,0xfe,0x7f,0xfb,0xff,0xbf,0xbd,0xfb,0xbf,0x80,0xf0,0x00,0xff,0xce,0x3f,0xf9,0xff,0x9f,0x8d,0xfb,0xbf,0xff,0xc0,0x00,0x00,0xfe,0x00,0x00,0xff,0xef,0x98,0x73,0xbe,0x0f,0xf0,0x00,0xff,0xfe,0x7c,0x00,0x7f,0xf0,0xf8,0x00,0xbf,0xff,0xe0,0x00,0xff,0xee,0x7f,0xff,0x3f,0xff,0xf3,0xfe,0x38,0xe0,0x00,0x00,0x03,0xfe,0x78,0x1f,0x9f,0xff,0xf0,0x0f,0xbf,0xff,0xf0,0x00,0xff,0xfe,0x7f,0xe0,0x0f,0xff,0xe0,0x01,0xb9,0xff,0x80,0x00,0xff,0xd6,0x7f,0xff,0xe3,0xff,0xc7,0xf0,0x3f,0xff,0xf0,0x00,0x00,0xde,0x70,0x00,0x18,0xff,0x8f,0xff,0x3d,0x87,0x00,0x00,0xff,0xfe,0x7f,0x00,0x00,0x7f,0x9f,0xff,0xbf,0xc1,0xb0,0x00,0xff,0x2e,0x00,0x3f,0xff,0x80,0x38,0x5b,0xbc,0x06,0x00,0x00 };
PROGMEM const char i400[] = { 0x42,0x4d,0x82,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x04,0x00,0x00,0x28,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0x54,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x42,0x4d,0x82,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x04,0x00,0x00,0x00,0x00,0xc0,0x22,0x17,0x01,0x74,0x06,0x00,0x00,0x34,0x04,0x00,0x00,0x0f,0x00,0x85,0x01,0x39,0x0e,0x01,0x0c,0x7b,0x0e,0x05,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaf,0x60,0x20,0x00,0x00,0x3e,0x29,0x77,0xb4,0x09,0x8b,0x03,0x98,0xf6,0x13,0x00,0x1f,0x3e,0x29,0x77,0x00,0x00,0x18,0x00,0xfc,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xf6,0x13,0x00,0x3e,0x52,0x99,0x76,0x44,0x23,0x3b,0x77,0xb0,0x09,0x8b,0x03,0xb4,0xf8,0x13,0x00,0xa0,0x7b,0x21,0x00,0x81,0x52,0x99,0x76,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x54,0x9f,0x64,0xa9,0xdc,0xf6,0x13,0x00,0xe7,0x51,0x99,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xda,0x61,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb8,0xf8,0x13,0x00,0x28,0x05,0x06,0x00,0xd0,0xf6,0x13,0x00,0x00,0x00,0x00,0x00,0x3f,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb8,0xf8,0x13,0x00,0x70,0xfa,0x13,0x00,0x9f,0x4f,0x20,0x00,0xb8,0xf8,0x13,0x00,0x28,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xf8,0x1b,0x01,0x5a,0x3a,0x5c,0x47,0x61,0x6d,0x65,0x62,0x75,0x69,0x6e,0x6f,0x20,0x4c,0x44,0x56,0x45,0x4c,0x48,0x20,0x4d,0x61,0x6b,0x65,0x72,0x5c,0x44,0x46,0x30,0x31,0x5c,0x34,0x30,0x30,0x2e,0x62,0x6d,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdc,0x3d,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa1,0x7b,0x21,0x00,0xc5,0xf8,0x1b,0x01,0xcf,0x4e,0x20,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x1f,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xff,0xfe,0x0f,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xff,0x8c,0x21,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xff,0x02,0xec,0x7f,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xff,0x76,0xec,0x3f,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xff,0x8e,0xed,0x4f,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xf8,0x7e,0xed,0x73,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xfa,0xfe,0x28,0x7c,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xfa,0x7d,0x08,0x7f,0x0f,0xff,0xff,0xf0,0x00,0xff,0xff,0xfe,0x2c,0xf8,0x81,0x3f,0xa1,0xff,0xff,0xf0,0x00,0xff,0xff,0xfe,0x9f,0x14,0xe1,0x3f,0x0d,0xff,0xff,0xf0,0x00,0xff,0xff,0xfe,0x3e,0x52,0xe1,0x3f,0x90,0xff,0xff,0xf0,0x00,0xff,0xff,0xfc,0x30,0x02,0xe1,0x3f,0x1c,0x7f,0xff,0xf0,0x00,0xff,0xff,0xfd,0xb0,0x82,0xe1,0x01,0x0d,0x0f,0xff,0xf0,0x00,0xff,0xff,0xfd,0xa3,0x82,0xe1,0x4e,0x8d,0x47,0xff,0xf0,0x00,0xff,0xff,0xfd,0xb3,0x82,0xe1,0x4e,0x0d,0x57,0xff,0xf0,0x00,0xff,0xff,0xfd,0x83,0x82,0xe1,0x4e,0x0d,0x57,0xff,0xf0,0x00,0xff,0xff,0xfd,0x83,0x02,0xe1,0x4e,0x0d,0x07,0xff,0xf0,0x00,0xff,0xff,0xfd,0x83,0x82,0xe5,0x4d,0x8d,0x03,0xff,0xf0,0x00,0xff,0xff,0xfd,0x83,0xe6,0xe5,0x4e,0x4c,0x93,0xff,0xf0,0x00,0xff,0xff,0xf5,0x83,0xe6,0x45,0x4e,0x2c,0x57,0xff,0xf0,0x00,0xff,0xff,0xf9,0x83,0xe6,0x04,0x4f,0x2c,0x57,0xff,0xf0,0x00,0xff,0xff,0xfd,0x83,0xe4,0xe4,0x47,0xe8,0x57,0xff,0xf0,0x00,0xff,0xff,0xfd,0x8f,0xe2,0x00,0x47,0xe9,0x57,0xff,0xf0,0x00,0xff,0xff,0xfc,0x9f,0x30,0x80,0x80,0x69,0x57,0xff,0xf0,0x00,0xff,0xff,0xfc,0x09,0x88,0x00,0x08,0x09,0x57,0xff,0xf0,0x00,0xff,0xff,0xfc,0x00,0x00,0x01,0x00,0x00,0xd7,0xff,0xf0,0x00,0xff,0xff,0xfe,0x20,0x40,0x00,0x00,0x00,0x47,0xff,0xf0,0x00,0xff,0xff,0xf8,0x03,0x40,0x00,0x00,0x00,0x87,0xff,0xf0,0x00,0xff,0xff,0xeb,0x80,0x10,0x00,0x00,0x00,0x3f,0xff,0xf0,0x00,0xff,0xff,0xda,0xf2,0x84,0x0a,0x00,0x0c,0xff,0xff,0xf0,0x00,0xff,0xff,0xba,0x00,0x40,0x90,0x07,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0x7c,0x06,0xc0,0x00,0x83,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0x74,0x01,0x00,0x00,0x09,0xff,0xff,0xff,0xf0,0x00,0xff,0xfe,0xf4,0x00,0x40,0x00,0x11,0xff,0xff,0xff,0xf0,0x00,0xff,0xfe,0xf4,0x00,0x0e,0x00,0x03,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xf0,0x01,0x3e,0x01,0x8f,0xff,0xff,0xff,0xf0,0x00,0xff,0xfd,0xe8,0x1f,0xbf,0x81,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xfd,0xe8,0x7f,0xff,0xc1,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xfd,0xe8,0xfb,0x1f,0xc1,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xfd,0xe9,0xfe,0x6f,0xc1,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xfd,0xf1,0xfc,0xef,0xc3,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xfd,0xd3,0xfc,0xaf,0xc3,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xd7,0xfd,0xaf,0xc3,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xfe,0xd7,0xfd,0xa0,0x03,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0x50,0x01,0xe8,0x03,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0x00,0x01,0x27,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xf8,0x0f,0xff,0xff,0xff,0xff,0xff,0xf0,0x00 };
PGM_P bmp;
#endif

// drawBitmapFromSd() return values
#define BMP_OK       0 // ok
#define BMP_NO_FILE  1 // error: bitmap file not found on SD
#define BMP_NOT_WBM  2 // error: not a Windows Bitmap
#define BMP_NOT_1BPP 3 // error: not a monochrome bitmap
#define BMP_ERR_CMP  4 // error: compressed bitmap
#define BMP_TOO_BIG  5 // error: bitmap width > Gamebuino screen

// Various macros
#define WORD(AR,PO) (byte)AR[PO]+0x100L*(byte)AR[PO+1] // read word from char array AR at position PO
#define LONG(AR,PO) (byte)AR[PO]+0x100L*(byte)AR[PO+1]+0x10000L*(byte)AR[PO+2]+0x1000000L*(byte)AR[PO+3]

Gamebuino gb;

// Following two functions are needed by petit_fatfs
byte rx() { SPDR=0xFF; loop_until_bit_is_set(SPSR, SPIF); return SPDR; }
void tx(byte d) { SPDR=d; loop_until_bit_is_set(SPSR, SPIF); }

// Read 'n' bytes of bitmap data starting at position 'start' and put them in buffer buf[]
void readNCharsAt(byte n, word start, char *buf) {
  #ifdef debug // use PROGMEM dump of bitmap data
  for(byte i=0; i<n; i++) { buf[i]=pgm_read_byte(&(bmp[start+i])); }
  #else        // open real bitmap on SD
  WORD br; pf_lseek(start); pf_read((void*)&buf[0], n, &br);
  #endif
}

// Draw inverted-color bitmap from SRAM char array
void drawBitmap(byte x, byte y, char *bitmap) { // where bitmap[] is the char array containing bitmap data
  byte w=bitmap[0];
  byte h=bitmap[1];
  byte i,j,byteNum,bitNum,byteWidth=(w+7)>>3;
  for(i=0; i<w; i++) {
    byteNum=i/8; bitNum=i%8;
    for(j=0; j<h; j++) {
      if(!((bitmap[2+j*byteWidth+byteNum]) & (B10000000>>bitNum))) gb.display.drawPixel(x+i, y+j);
    }
  }
}

// Draw bitmap from SD at position x0, y0
int drawBitmapFromSd(byte x0, byte y0, char *bitmap) { // where bitmap[] is the name of the bitmap file on SD
  char buf[13]; // max 2 bytes for W/H + 11 bytes of data to cover the 84 pixel width of the  Gamebuino screen
  // 1. open bitmap file
  #ifdef debug // use PROGMEM dump of bitmap data
  if(bitmap=="ff.bmp") bmp=ff;
  else if(bitmap=="d2.bmp") bmp=d2;
  else if(bitmap=="d4.bmp") bmp=d4;
  else if(bitmap=="358.bmp") bmp=i358;
  else if(bitmap=="383.bmp") bmp=i383;
  else if(bitmap=="400.bmp") bmp=i400;
  else return BMP_NO_FILE;
  #else        // open real bitmap on SD
  if(pf_open(bitmap)) return BMP_NO_FILE;
  #endif
  // 2a. read information from bitmap header > identifier
  readNCharsAt(2,0,buf); // BMP.wIdentifier
  buf[2]=NULL;
  if(strcmp(buf,"BM")) return BMP_NOT_WBM;
  // 2b. read information from bitmap header > bpp, compression and data size
  readNCharsAt(10,28,buf); // BMP.wBitsPerPixel + BMP.dwCompression + BMP.dwDataSize
  if(WORD(buf,0)!=1) return BMP_NOT_1BPP; // not a 1bpp bitmap
  if(LONG(buf,2)) return BMP_ERR_CMP; // not an UNcompressed bitmap
  word datasize=WORD(buf,6);
  // 2c. read information from bitmap header > data offset
  readNCharsAt(4,10,buf); // BMP.dwDataOffset
  word offset=WORD(buf,0);
  // 2d. read information from bitmap header > dimensions
  readNCharsAt(8,18,buf); // BMP.dwWidth + BMP.dwHeight
  byte w=(byte)buf[0];
  if(w>LCDWIDTH) return BMP_TOO_BIG;
  byte h=(byte)buf[4];
  byte datalen=datasize/h;
  // 3. read and draw bitmap data
  buf[0]=w; buf[1]=1; // get bitmap data line by line
  for(byte y=0; y<h; y++) {
    readNCharsAt(datalen,offset+y*datalen,buf+2);
    drawBitmap(x0, y0+(h-1)-y, buf); // and draw it!
  }
  return BMP_OK;
}

byte slide;

void updateSlide() {
  int err;
  gb.display.clear();
  switch(slide) {
    case 0:
      err=drawBitmapFromSd(10,0,"ff.bmp");
      break;
    case 1:
      err=drawBitmapFromSd(10,5,"d2.bmp");
      err=drawBitmapFromSd(10,LCDHEIGHT-22,"d4.bmp");
      err=drawBitmapFromSd(LCDWIDTH-17,5,"d4.bmp");
      err=drawBitmapFromSd(LCDWIDTH-17,LCDHEIGHT-22,"d2.bmp");
      break;
    case 2:
      err=drawBitmapFromSd(0,0,"358.bmp");
      break;
    case 3:
      err=drawBitmapFromSd(0,0,"383.bmp");
      break;
    case 4:
      err=drawBitmapFromSd(0,0,"400.bmp");
      break;
  } // switch(slide)
  switch(err) {
    case BMP_NO_FILE: gb.display.println(F("bitmap not found")); break;
    case BMP_NOT_WBM: gb.display.println(F("not a Windows bitmap")); break;
    case BMP_NOT_1BPP: gb.display.println(F("not a monochrome bmp")); break;
    case BMP_ERR_CMP: gb.display.println(F("compressed bitmap")); break;
    case BMP_TOO_BIG: gb.display.println(F("bitmap too big")); break;
    case BMP_OK: default: break;
  } // switch(err)
  gb.display.cursorX=0; gb.display.cursorY=LCDHEIGHT-gb.display.fontHeight;
  gb.display.print(F("next bitmap \020 press \025"));
}

void setup() {
  // put your setup code here, to run once:
  gb.begin();
  #ifndef debug
  Serial.begin(9600); PFFS.begin(10, rx, tx); // initialize petit_fatfs
  #endif
  gb.titleScreen(F(" Draw bitmap from SD"), title);
  gb.setFrameRate(10);
  gb.display.persistence=true; // stop clearing screen at every gb.update()
  updateSlide();
}

void loop() {
  // put your main code here, to run repeatedly:
  if(gb.update() && gb.buttons.pressed(BTN_A)) { slide=(slide+1)%5; updateSlide(); }
} // loop()

User avatar
Duhjoker
 
Posts: 446
Joined: Sat Jul 02, 2016 4:57 am
Location: Where Palm trees grow


Return to Programming Questions

Who is online

Users browsing this forum: Google [Bot] and 11 guests

cron