- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
*/
#include "lcd.h"
#include "fonty.h"
-#include "global.h"
#include "fonts/charset.info"
#include "fonts/charset.bits"
-
+/*
#include "fonts/smooth.info"
#include "fonts/smooth.bits"
-
-extern unsigned char drawbuf[2][128];
-extern unsigned int is_drawing;
-
+*/
static unsigned char tx, ty, coff, dbl;
unsigned char *font_bits, *font_info, font_dlines;
unsigned char *font_bitsUM, *font_bitsUL, *font_bitsMM, *font_bitsML, *font_bitsLM, *font_bitsLL;
-unsigned char activefont;
void set_font(unsigned char f)
-{
- activefont = f;
+{
switch(f)
{
- case SMOOTHFONT:
- coff = 0;
- dbl = 16;
- font_info = (unsigned char*) smooth_info;
- font_bitsUM = (unsigned char*) smooth_mt_bits;
- font_bitsUL = (unsigned char*) smooth_lt_bits;
- font_bitsLM = (unsigned char*) smooth_mb_bits;
- font_bitsLL = (unsigned char*) smooth_lb_bits;
- font_dlines = smooth_dlines;
- break;
- case BOLDDOUBLEFONT:
- coff = 96;
- dbl = 1;
- font_bits = (unsigned char*) charset_bits;
- font_info = (unsigned char*) charset_info;
- font_dlines = charset_dlines;
- break;
- case BOLDFONT:
- coff = 96;
- dbl = 0;
- font_bits = (unsigned char*) charset_bits;
- font_info = (unsigned char*) charset_info;
- font_dlines = charset_dlines;
- break;
- case DOUBLEFONT:
- coff = 0;
- dbl = 1;
- font_bits = (unsigned char*) charset_bits;
- font_info = (unsigned char*) charset_info;
- font_dlines = charset_dlines;
- break;
+/*
+ case 2:
+ coff = 0;
+ dbl = 16;
+ font_info = (unsigned char*) smooth_info;
+ font_bitsUM = (unsigned char*) smooth_mt_bits;
+ font_bitsUL = (unsigned char*) smooth_lt_bits;
+ font_bitsLM = (unsigned char*) smooth_mb_bits;
+ font_bitsLL = (unsigned char*) smooth_lb_bits;
+ font_dlines = smooth_dlines;
+ break;
+*/
+ case 1:
+ coff = 0;
+ dbl = 1;
+ font_bits = (unsigned char*) charset_bits;
+ font_info = (unsigned char*) charset_info;
+ font_dlines = charset_dlines;
+ break;
default:
- coff = 0;
- dbl = 0;
- font_bits = (unsigned char*) charset_bits;
- font_info = (unsigned char*) charset_info;
- font_dlines = charset_dlines;
- break;
+ coff = 0;
+ dbl = 0;
+ font_bits = (unsigned char*) charset_bits;
+ font_info = (unsigned char*) charset_info;
+ font_dlines = charset_dlines;
+ break;
}
}
@@ -84,7 +66,6 @@ void _draw_char(unsigned int ch, unsigned char c, unsigned char m)
{
unsigned char p,q,r,s,t;
unsigned int cpos, cnt;
- is_drawing++;
cpos = 0;
@@ -241,7 +222,7 @@ void _draw_char(unsigned int ch, unsigned char c, unsigned char m)
}
do_rcu(tx,ty+16,p,m);
- } // if (ty & 0x07)
+ }
else
{
p <<= 1;
@@ -305,11 +286,12 @@ void _draw_char(unsigned int ch, unsigned char c, unsigned char m)
drawbuf[1][r-1] = s;
}
do_rcu(tx,ty+8,p,m);
- } // else if (ty & 0x07)
+ }
tx += p+2;
- } // if (dbl == 1)
+ }
else
{
+
if(ty & 0x07)
{
s = ty & 0x07;
@@ -341,7 +323,7 @@ void _draw_char(unsigned int ch, unsigned char c, unsigned char m)
drawbuf[1][p-cnt-1] = 0x00;
}
do_rcu(tx,ty+8,p,m);
- } // if (ty & 0x07)
+ }
else
{
for(cnt=0;cnt> (8-s);
- drawbuf[1][p-cnt-1] = font_bitsUL[cpos+cnt] >> (8-s);
- }
- do_rcu (tx,ty+8,p,m);
- for (cnt=0;cnt
> (8-s);
- drawbuf[1][p-cnt-1] = font_bitsLL[cpos+cnt] >> (8-s);
- }
- do_rcu (tx,ty+16,p,m);
- } // if (ty & 0x07)
- else
- {
for(cnt=0;cnt
>1];
- if((st[cp]+coff) & 0x01)
- {
- p &= 0x0F;
- }
- else
- {
- p >>= 4;
- }
- p +=1;
- if(dbl == 1)
- p <<= 1;
- }
- else
- {
- p = font_info[(unsigned char)(st[cp]+coff)];
- p+=1;
- }
- }
- width += p;
- cp++;
}
- width=max(width,prevwidth);
- if (width)
- width--;
- return width;
-}
-
-unsigned short get_stringheight (const char *st)
-{
- unsigned char cp;
- unsigned short height;
-
- if(!dbl)
- height = 8;
else
- height = 16;
-
- cp = 0;
-
- while(st[cp] != 0)
{
- if(st[cp] == '\n')
+ while(st[cp] != 0)
{
- if(!dbl)
- height += 9;
- else
- height += 18;
+ _draw_charB(st[cp]+coff, c, m);
+ cp++;
}
- cp++;
}
-
- return height;
}
extern char hval[16];
void draw_hexC(unsigned char x, unsigned char y, const unsigned char v, unsigned char c, unsigned char m)
{
- is_drawing++;
tx = x;
ty = y;
_draw_char(hval[v>>4]+coff, c, m);
_draw_char(hval[v & 0x0F]+coff, c, m);
- is_drawing--;
}
void draw_hexS(unsigned char x, unsigned char y, const unsigned short v, unsigned char c, unsigned char m)
{
- is_drawing++;
tx = x;
ty = y;
draw_hexC(x, y, v >> 8, c, m);
draw_hexC(tx, ty, v & 0xFF, c, m);
- is_drawing--;
}
void draw_hexW(unsigned char x, unsigned char y, const unsigned long v, unsigned char c, unsigned char m)
{
- is_drawing++;
draw_hexS(x, y, v >> 16, c, m);
draw_hexS(tx, ty, v & 0xFFFF, c, m);
- is_drawing--;
-}
-
-static unsigned long u_longval;
-static unsigned char pos, inc;
-static unsigned char num[12];
-
-void get_digit(unsigned long tval)
-{
- unsigned char count;
- count = 0;
- while(u_longval >= tval)
- {
- count++;
- u_longval -= tval;
- }
-
- num[pos] = '0' + count;
- if(count)
- inc = 1;
- pos += inc;
-}
-
-void draw_numU(unsigned char x, unsigned char y, const unsigned long v, unsigned char z, unsigned char c, unsigned char m)
-{
- is_drawing++;
- pos = 0;
- u_longval = v;
-
- if(z)
- inc = 1;
- else
- inc = 0;
-
- get_digit(1000000000);
- get_digit(100000000);
- get_digit(10000000);
- get_digit(1000000);
- get_digit(100000);
- get_digit(10000);
- get_digit(1000);
- get_digit(100);
- get_digit(10);
- inc = 1;
- get_digit(1);
- num[pos] = 0x00;
- draw_string(x, y, (char*)num, c, m);
- is_drawing--;
}
diff --git a/boop/display/fonty.h b/boop/fonty.h
similarity index 70%
rename from boop/display/fonty.h
rename to boop/fonty.h
index 7e35b30..ca274b4 100644
--- a/boop/display/fonty.h
+++ b/boop/fonty.h
@@ -19,21 +19,7 @@
#ifndef FONTY_H
#define FONTY_H
-#define SMALLFONT 0
-#define DOUBLEFONT 1
-#define BOLDFONT 2
-#define BOLDDOUBLEFONT 3
-#define SMOOTHFONT 4
-
-#define SMALLFONT_HEIGHT 8
-#define DOUBLEFONT_HEIGHT 16
-#define BOLDFONT_HEIGHT 8
-#define BOLDDOUBLEFONT_HEIGHT 16
-#define SMOOTHFONT_HEIGHT 16
-
-#define tabstep 24
-
-unsigned char activefont;
+extern unsigned char drawbuf[2][128];
void set_font(unsigned char f);
void draw_char(unsigned char x, unsigned char y, unsigned char ch, unsigned char c, unsigned char m);
@@ -42,8 +28,4 @@ void draw_hexC(unsigned char x, unsigned char y, const unsigned char v, unsigned
void draw_hexS(unsigned char x, unsigned char y, const unsigned short v, unsigned char c, unsigned char m);
void draw_hexW(unsigned char x, unsigned char y, const unsigned long v, unsigned char c, unsigned char m);
-void draw_numU(unsigned char x, unsigned char y, const unsigned long v, unsigned char z, unsigned char c, unsigned char m);
-unsigned short get_stringwidth (const char *st);
-unsigned short get_stringheight (const char *st);
-
#endif
diff --git a/boop/games/Make.conf b/boop/games/Make.conf
deleted file mode 100644
index 5777587..0000000
--- a/boop/games/Make.conf
+++ /dev/null
@@ -1 +0,0 @@
-THUMBSRCS := gamesmenu.c tic_tac_toe.c sokoban.c connect4.c
diff --git a/boop/games/c4_map.h b/boop/games/c4_map.h
deleted file mode 100644
index 1996802..0000000
--- a/boop/games/c4_map.h
+++ /dev/null
@@ -1,64 +0,0 @@
-const signed char map[7][6][14] =
-{
- {
- { 0, 24, 45, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 4, 24, 25, 49, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 8, 24, 25, 26, 53, -1, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 12, 24, 25, 26, 60, -1, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 16, 25, 26, 64, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 20, 26, 68, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- },
- {
- { 0, 1, 27, 46, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 4, 5, 27, 28, 45, 50, -1, 0, 0, 0, 0, 0, 0, 0 },
- { 8, 9, 27, 28, 29, 49, 54, 60, -1, 0, 0, 0, 0, 0 },
- { 12, 13, 27, 28, 29, 53, 59, 64, -1, 0, 0, 0, 0, 0 },
- { 16, 17, 28, 29, 63, 68, -1, 0, 0, 0, 0, 0, 0, 0 },
- { 20, 21, 29, 67, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- },
- {
- { 0, 1, 2, 30, 47, -1, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 4, 5, 6, 30, 31, 46, 51, 60, -1, 0, 0, 0, 0, 0 },
- { 8, 9, 10, 30, 31, 32, 45, 50, 55, 59, 64, -1, 0, 0 },
- { 12, 13, 14, 30, 31, 32, 49, 54, 58, 63, 68, -1, 0, 0 },
- { 16, 17, 18, 31, 32, 53, 62, 67, -1, 0, 0, 0, 0, 0 },
- { 20, 21, 22, 32, 66, -1, 0, 0, 0, 0, 0, 0, 0, 0 },
- },
- {
- { 0, 1, 2, 3, 33, 48, 60, -1, 0, 0, 0, 0, 0, 0 },
- { 4, 5, 6, 7, 33, 34, 47, 52, 59, 64, -1, 0, 0, 0 },
- { 8, 9, 10, 11, 33, 34, 35, 46, 51, 56, 58, 63, 68, -1 },
- { 12, 13, 14, 15, 33, 34, 35, 45, 50, 55, 57, 62, 67, -1 },
- { 16, 17, 18, 19, 34, 35, 49, 54, 61, 66, -1, 0, 0, 0 },
- { 20, 21, 22, 23, 35, 53, 65, -1, 0, 0, 0, 0, 0, 0 },
- },
- {
- { 1, 2, 3, 36, 59, -1, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 5, 6, 7, 36, 37, 48, 58, 63, -1, 0, 0, 0, 0, 0 },
- { 9, 10, 11, 36, 37, 38, 47, 52, 57, 62, 67, -1, 0, 0 },
- { 13, 14, 15, 36, 37, 38, 46, 51, 56, 61, 66, -1, 0, 0 },
- { 17, 18, 19, 37, 38, 50, 55, 65, -1, 0, 0, 0, 0, 0 },
- { 21, 22, 23, 38, 54, -1, 0, 0, 0, 0, 0, 0, 0, 0 },
- },
- {
- { 2, 3, 39, 58, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 6, 7, 39, 40, 57, 62, -1, 0, 0, 0, 0, 0, 0, 0 },
- { 10, 11, 39, 40, 41, 48, 61, 66, -1, 0, 0, 0, 0, 0 },
- { 14, 15, 39, 40, 41, 47, 52, 65, -1, 0, 0, 0, 0, 0 },
- { 18, 19, 40, 41, 51, 56, -1, 0, 0, 0, 0, 0, 0, 0 },
- { 22, 23, 41, 55, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- },
- {
- { 3, 42, 57, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 7, 42, 43, 61, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 11, 42, 43, 44, 65, -1, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 15, 42, 43, 44, 48, -1, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 19, 43, 44, 52, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 23, 44, 56, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- }
-};
-
-const signed char drop_order[7] =
-{
- 3, 4, 2, 5, 1, 6, 0
-};
diff --git a/boop/games/connect4.c b/boop/games/connect4.c
deleted file mode 100644
index 8f98a55..0000000
--- a/boop/games/connect4.c
+++ /dev/null
@@ -1,965 +0,0 @@
-/*
- connect4.c - game
-
- the bulk of this file is code reused from:
- * Connect-4 Algorithm
- * Version 3.10
- * By Keith Pomakis
- * (pomakis@pobox.com)
- *April, 2005
-
- modifications & adoption to boop:
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "lcd.h"
-#include "fonty.h"
-#include "keyboard.h"
-#include "timerfuncs.h"
-#include "backlight.h"
-#include "connect4.h"
-
-extern unsigned char autorepeat;
-
-unsigned int seed;
-
-unsigned char c4_abort;
-
-#define other(x) ((x) ^ 1)
-#define real_player(x) ((x) & 1)
-
-#define pop_state() \
- (current_state = &state_stack[--depth])
-
-/* The "goodness" of the current state with respect to a player is the */
-/* score of that player minus the score of the player's opponent. A */
-/* positive value will result if the specified player is in a better */
-/* situation than his/her opponent. */
-
-#define goodness_of(player) \
- (current_state->score[player] - current_state->score[other(player)])
-
-/* A local struct which defines the state of a game. */
-
-#define C4_SIZEX 7
-#define C4_SIZEY 6
-#define C4_TOTALSIZE (C4_SIZEX*C4_SIZEY)
-
-#define C4_MAGICWIN (1 << 4)
-
-#define C4_WINPLACES 69
-
-typedef int(*ev_fn)(int player, int level, int alpha, int beta);
-typedef void(*ps_fn)(void);
-typedef int(*dp_fn)(int player, int column);
-typedef void(*mc_fn)(char *d, char *s, unsigned int cnt);
-
-static ev_fn evaluate;
-static ps_fn push_state;
-static dp_fn drop_piece;
-static mc_fn mcpy;
-
-typedef struct {
-
- char board[C4_SIZEX][C4_SIZEY]; /* The board configuration of the game state. */
- /* board[x][y] specifies the position of the */
- /* xth column and the yth row of the board, */
- /* where column and row numbering starts at 0. */
- /* (The 0th row is the bottom row.) */
- /* A value of 0 specifies that the position is */
- /* occupied by a piece owned by player 0, a */
- /* value of 1 specifies that the position is */
- /* occupied by a piece owned by player 1, and */
- /* a value of C4_NONE specifies that the */
- /* position is unoccupied. */
-
- int score_array[2][C4_WINPLACES]; /* An array specifying statistics on both */
- /* players. score_array[0] specifies the */
- /* statistics for player 0, while */
- /* score_array[1] specifies the statistics for */
- /* player 1. */
-
- int score[2]; /* The actual scores of each player, deducible */
- /* from score_array, but kept separately for */
- /* efficiency. The score of player x is the */
- /* sum of score_array[x]. A score is */
- /* basically a function of how many winning */
- /* positions are still available to the */
- /* and how close he/she is to achieving each */
- /* of these positions. */
-
- short int winner; /* The winner of the game - either 0, 1 or */
- /* C4_NONE. Deducible from score_array, but */
- /* kept separately for efficiency. */
-
- int num_of_pieces; /* The number of pieces currently occupying */
- /* board spaces. Deducible from board, but */
- /* kept separately for efficiency. */
-
-} Game_state;
-
-/* Static global variables. */
-
-#include "c4_map.h"
-
-static Game_state *state_stack; //[C4_MAX_LEVEL+1];
-static Game_state *current_state;
-static int depth;
-static int states_allocated = 0;
-//static int drop_order[7];
-
-
-unsigned long int rand31(void)
-{
- unsigned long int hi, lo;
- lo = 16807 * (seed & 0xFFFF);
- hi = 16807 * (seed >> 16);
- lo += (hi & 0x7FFF) << 16;
- lo += hi >> 15;
- if(lo > 0x7FFFFFFF) lo -= 0x7FFFFFFF;
- return(seed = (long)lo);
-}
-
-/****************************************************************************/
-/** **/
-/** This function sets up a new game. This must be called exactly once **/
-/** before each game is started. Before it can be called a second time, **/
-/** end_game() must be called to destroy the previous game. **/
-/** **/
-/** width and height are the desired dimensions of the game board, while **/
-/** num is the number of pieces required to connect in a row in order to **/
-/** win the game. **/
-/** **/
-/****************************************************************************/
-
-void
-c4_new_game(int width, int height, int num)
-{
- register int i, j;
-
- depth = 0;
- current_state = &state_stack[0];
-
- for (i=0; iboard[i][j] = C4_NONE;
- }
-
- for (i=0; iscore_array[0][i] = 1;
- current_state->score_array[1][i] = 1;
- }
-
- current_state->score[0] = current_state->score[1] = C4_WINPLACES;
- current_state->winner = C4_NONE;
- current_state->num_of_pieces = 0;
-
- states_allocated = 1;
-}
-
-/****************************************************************************/
-/** **/
-/** This function updates the score of the specified player in the **/
-/** context of the current state, given that the player has just placed **/
-/** a game piece in column x, row y. **/
-/** **/
-/****************************************************************************/
-
-static void
-update_score(int player, int x, int y)
-{
- register int i;
- int win_index;
- int this_difference = 0, other_difference = 0;
- int other_player = other(player);
-
- for (i=0; map[x][y][i] != -1; i++) {
- win_index = map[x][y][i];
- this_difference += current_state->score_array[player][win_index];
- other_difference += current_state->score_array[other_player][win_index];
-
- current_state->score_array[player][win_index] <<= 1;
- current_state->score_array[other_player][win_index] = 0;
-
- if (current_state->score_array[player][win_index] == C4_MAGICWIN)
- if (current_state->winner == C4_NONE)
- current_state->winner = player;
- }
-
- current_state->score[player] += this_difference;
- current_state->score[other_player] -= other_difference;
-}
-
-/****************************************************************************/
-/** **/
-/** This function drops a piece of the specified player into the **/
-/** specified column. The row where the piece ended up is returned, or **/
-/** -1 if the drop was unsuccessful (i.e., the specified column is full). **/
-/** **/
-/****************************************************************************/
-
-static int
-_drop_piece(int player, int column)
-{
- int y = 0;
-
- while (current_state->board[column][y] != C4_NONE && ++y < C4_SIZEY)
- ;
-
- if (y == C4_SIZEY)
- return -1;
-
- current_state->board[column][y] = player;
- current_state->num_of_pieces++;
- update_score(player, column, y);
-
- return y;
-}
-
-/****************************************************************************/
-/** **/
-/** This function drops a piece of the specified player into the **/
-/** specified column. A value of TRUE is returned if the drop is **/
-/** successful, or FALSE otherwise. A drop is unsuccessful if the **/
-/** specified column number is invalid or full. If the drop is **/
-/** successful and row is a non-NULL pointer, the row where the piece **/
-/** ended up is returned through the row pointer. Note that column and **/
-/** row numbering start at 0. **/
-/** **/
-/****************************************************************************/
-
-Boolean
-c4_make_move(int player, int column, int *row)
-{
- int result;
-
- if (column >= C4_SIZEX || column < 0)
- return FALSE;
-
- result = drop_piece(real_player(player), column);
- if (row && result >= 0)
- *row = result;
- return (result >= 0);
-}
-
-void __attribute__ ((section(".text.fastcode")))
-_mcpy(char *d, char *s, unsigned int cnt)
-{
- unsigned int c = cnt;
- do
- {
- d[c] = s[c];
- } while(c--);
-}
-
-/****************************************************************************/
-/** **/
-/** This function pushes the current state onto a stack. pop_state() **/
-/** is used to pop from this stack. **/
-/** **/
-/** Technically what it does, since the current state is considered to **/
-/** be the top of the stack, is push a copy of the current state onto **/
-/** the stack right above it. The stack pointer (depth) is then **/
-/** incremented so that the new copy is considered to be the current **/
-/** state. That way, all pop_state() has to do is decrement the stack **/
-/** pointer. **/
-/** **/
-/** For efficiency, memory for each stack state used is only allocated **/
-/** once per game, and reused for the remainder of the game. **/
-/** **/
-/****************************************************************************/
-
-static void __attribute__ ((section(".text.fastcode")))
-_push_state(void)
-{
- register int i;
- Game_state *old_state, *new_state;
- old_state = &state_stack[depth++];
- new_state = &state_stack[depth];
-
- /* Copy the board */
-
- for (i=0; iboard[i], (char*)old_state->board[i], C4_SIZEY);
-
- /* Copy the score array */
-
-
- mcpy((char*)new_state->score_array[0], (char*)old_state->score_array[0],
- C4_WINPLACES*4);
- mcpy((char*)new_state->score_array[1], (char*)old_state->score_array[1],
- C4_WINPLACES*4);
-
- new_state->score[0] = old_state->score[0];
- new_state->score[1] = old_state->score[1];
- new_state->winner = old_state->winner;
- new_state->num_of_pieces = old_state->num_of_pieces;
-
- current_state = new_state;
-}
-
-/****************************************************************************/
-/** **/
-/** This recursive function determines how good the current state may **/
-/** turn out to be for the specified player. It does this by looking **/
-/** ahead level moves. It is assumed that both the specified player and **/
-/** the opponent may make the best move possible. alpha and beta are **/
-/** used for alpha-beta cutoff so that the game tree can be pruned to **/
-/** avoid searching unneccessary paths. **/
-/** **/
-/** The specified poll function (if any) is called at the appropriate **/
-/** intervals. **/
-/** **/
-/** The worst goodness that the current state can produce in the number **/
-/** of moves (levels) searched is returned. This is the best the **/
-/** specified player can hope to achieve with this state (since it is **/
-/** assumed that the opponent will make the best moves possible). **/
-/** **/
-/****************************************************************************/
-
-static int __attribute__ ((section(".text.fastcode")))
-_evaluate(int player, int level, int alpha, int beta)
-{
- int i, goodness, best, maxab;
-
- if (current_state->winner == player)
- return 0x7FFFFFFF - depth;
- else if (current_state->winner == other(player))
- return -(0x7FFFFFFF - depth);
- else if (current_state->num_of_pieces == C4_TOTALSIZE)
- return 0; /* a tie */
- else if (level == depth)
- return goodness_of(player);
- else {
- /* Assume it is the other player's turn. */
- best = -(0x7FFFFFFF);
- maxab = alpha;
- for(i=0; iboard[drop_order[i]][C4_SIZEY-1] != C4_NONE)
- continue; /* The column is full. */
- push_state();
- drop_piece(other(player), drop_order[i]);
- goodness = evaluate(other(player), level, -beta, -maxab);
- if (goodness > best) {
- best = goodness;
- if (best > maxab)
- maxab = best;
- }
- pop_state();
- if (best > beta)
- break;
- }
-
- /* What's good for the other player is bad for this one. */
- return -best;
- }
-}
-
-/****************************************************************************/
-/** **/
-/** This function instructs the computer to make a move for the specified **/
-/** player. level specifies the number of levels deep the computer **/
-/** should search the game tree in order to make its decision. This **/
-/** corresponds to the number of "moves" in the game, where each player's **/
-/** turn is considered a move. A value of TRUE is returned if a move was **/
-/** made, or FALSE otherwise (i.e. if the board is full). If a move was **/
-/** made, the column and row where the piece ended up is returned through **/
-/** the column and row pointers (unless a pointer is NULL, in which case **/
-/** it won't be used to return any information). Note that column and **/
-/** row numbering start at 0. Also note that for a standard 7x6 game of **/
-/** Connect-4, the computer is brain-dead at levels of three or less, **/
-/** while at levels of four or more the computer provides a challenge. **/
-/** **/
-/****************************************************************************/
-
-Boolean
-c4_auto_move(int player, int level, int *column, int *row)
-{
- int i, best_column = -1, goodness = 0, best_worst = -(0x7FFFFFFF);
- int num_of_equal = 0, real_player, current_column, result;
-
- real_player = real_player(player);
-
- /* It has been proven that the best first move for a standard 7x6 game */
- /* of connect-4 is the center column. See Victor Allis' masters thesis */
- /* ("ftp://ftp.cs.vu.nl/pub/victor/connect4.ps") for this proof. */
-
- if (current_state->num_of_pieces < 2 && (current_state->num_of_pieces == 0 ||
- current_state->board[3][0] != C4_NONE)) {
- if (column)
- *column = 3;
- if (row)
- *row = current_state->num_of_pieces;
- drop_piece(real_player, 3);
- return TRUE;
- }
-
- /* Simulate a drop in each of the columns and see what the results are. */
-
- for (i=0; iwinner == real_player) {
- best_column = current_column;
- pop_state();
- break;
- }
-
- /* Otherwise, look ahead to see how good this move may turn out */
- /* to be (assuming the opponent makes the best moves possible). */
- else {
-// next_poll = clock() + poll_interval;
- goodness = evaluate(real_player, level, -(0x7FFFFFFF), -best_worst);
- }
-
- /* If this move looks better than the ones previously considered, */
- /* remember it. */
- if (goodness > best_worst) {
- best_worst = goodness;
- best_column = current_column;
- num_of_equal = 1;
- }
-
- /* If two moves are equally as good, make a random decision. */
- else if (goodness == best_worst) {
- num_of_equal++;
- if ((rand31()>>4) % num_of_equal == 0)
- best_column = current_column;
- }
-
- pop_state();
- if(c4_abort)
- return 0;
- }
-
- /* Drop the piece in the column decided upon. */
-
- if (best_column >= 0) {
- result = drop_piece(real_player, best_column);
- if (column)
- *column = best_column;
- if (row)
- *row = result;
- return TRUE;
- }
- else
- return FALSE;
-}
-
-/****************************************************************************/
-/** **/
-/** This function returns the "score" of the specified player. This **/
-/** score is a function of how many winning positions are still available **/
-/** to the player and how close he/she is to achieving each of these **/
-/** positions. The scores of both players can be compared to observe how **/
-/** well they are doing relative to each other. **/
-/** **/
-/****************************************************************************/
-
-int
-c4_score_of_player(int player)
-{
- return current_state->score[real_player(player)];
-}
-
-
-/****************************************************************************/
-/** **/
-/** This function returns TRUE if the specified player has won the game, **/
-/** and FALSE otherwise. **/
-/** **/
-/****************************************************************************/
-
-Boolean
-c4_is_winner(int player)
-{
- return (current_state->winner == real_player(player));
-}
-
-
-/****************************************************************************/
-/** **/
-/** This function returns TRUE if the board is completely full without a **/
-/** winner, and FALSE otherwise. **/
-/** **/
-/****************************************************************************/
-
-Boolean
-c4_is_tie(void)
-{
- return (current_state->num_of_pieces == C4_TOTALSIZE &&
- current_state->winner == C4_NONE);
-}
-
-
-/****************************************************************************/
-/** **/
-/** This function returns the coordinates of the winning connections of **/
-/** the winning player. It is assumed that a player has indeed won the **/
-/** game. The coordinates are returned in x1, y1, x2, y2, where (x1, y1) **/
-/** specifies the lower-left piece of the winning connection, and **/
-/** (x2, y2) specifies the upper-right piece of the winning connection. **/
-/** If more than one winning connection exists, only one will be **/
-/** returned. **/
-/** **/
-/****************************************************************************/
-
-
-void
-c4_win_coords(int *x1, int *y1, int *x2, int *y2)
-{
- register int i, j, k;
- int winner, win_pos = 0;
- Boolean found;
-
- winner = current_state->winner;
-
- while (current_state->score_array[winner][win_pos] != C4_MAGICWIN)
- win_pos++;
-
- found = FALSE;
- for (j=0; j=0 && !found; j--)
- for (i=C4_SIZEX-1; i>=0 && !found; i--)
- for (k=0; map[i][j][k] != -1; k++)
- if (map[i][j][k] == win_pos) {
- *x2 = i;
- *y2 = j;
- found = TRUE;
- break;
- }
-}
-
-
-/****************************************************************************/
-/** **/
-/** This function ends the current game. It is assumed that a game is **/
-/** in progress. It is illegal to call any other game function **/
-/** immediately after this one except for c4_new_game(), c4_poll() and **/
-/** c4_reset(). **/
-/** **/
-/****************************************************************************/
-
-void
-c4_end_game(void)
-{
- states_allocated = 0;
-}
-
-
-/****************************************************************************/
-/** **/
-/** This function resets the state of the algorithm to the starting state **/
-/** (i.e., no game in progress and a NULL poll function). There should **/
-/** no reason to call this function unless for some reason the calling **/
-/** algorithm loses track of the game state. It is illegal to call any **/
-/** other game function immediately after this one except for **/
-/** c4_new_game(), c4_poll() and c4_reset(). **/
-/** **/
-/****************************************************************************/
-
-void
-c4_reset(void)
-{
- c4_end_game();
-}
-
-int row, col, ccol;
-unsigned int c4_cb, c4_wcb;
-unsigned char c4_player, c4_moves, c4_level;
-
-void draw_stone(unsigned char x, unsigned char y, unsigned char p)
-{
-
- unsigned char xx, yy;
- xx = 10+(x*18);
- yy = 46+(y*18);
-
- switch(p)
- {
- case 0:
- draw_disc(xx, yy, 7, 2, DRAW_PUT);
- draw_disc(xx, yy, 5, 3, DRAW_XOR);
- draw_disc(xx, yy, 2, 3, DRAW_XOR);
- break;
-
- case 1:
- draw_disc(xx, yy, 7, 3, DRAW_PUT);
- draw_disc(xx, yy, 5, 1, DRAW_ERASE);
- draw_disc(xx, yy, 2, 1, DRAW_PUT);
- break;
-
- case 2:
- draw_disc(xx, yy, 8, 3, DRAW_ERASE);
- break;
-
- case 3:
- draw_disc(x, y, 7, 2, DRAW_PUT);
- draw_disc(x, y, 5, 3, DRAW_XOR);
- draw_disc(x, y, 2, 3, DRAW_XOR);
- break;
-
- case 4:
- draw_disc(x, y, 7, 3, DRAW_PUT);
- draw_disc(x, y, 5, 1, DRAW_ERASE);
- draw_disc(x, y, 2, 1, DRAW_PUT);
- break;
-
- case 5:
- draw_disc(xx, yy, 7, 3, DRAW_XOR);
- break;
- }
-}
-
-void progress_callback(unsigned int cb)
-{
- static unsigned char step = 0;
- unsigned char x;
- if(keys[0] || keys[1])
- {
- setBacklight(BL_AUTO);
- if(KEY_Exit)
- c4_abort = 1;
- }
-
- for(x=0;x<6;x++)
- {
- draw_char(40+(x<<3),24,224+step,3,DRAW_NORCU);
- }
- draw_hline(40,24,48,3,DRAW_PUT);
- step--;
- step &= 0x07;
-}
-
-void win_callback(unsigned int cb)
-{
- int x1, y1, x2, y2;
-
- c4_win_coords(&x1, &y1, &x2, &y2);
-
- if(x1 > x2)
- x1 = 1;
- else if(x1 < x2)
- x1 = -1;
- else
- x1 = 0;
-
- if(y1 > y2)
- y1 = 1;
- else if(y1 < y2)
- y1 = -1;
- else
- y1 = 0;
-
- draw_stone(x2,5-y2,5);
- x2+=x1;
- y2+=y1;
- draw_stone(x2,5-y2,5);
- x2+=x1;
- y2+=y1;
- draw_stone(x2,5-y2,5);
- x2+=x1;
- y2+=y1;
- draw_stone(x2,5-y2,5);
- x2+=x1;
- y2+=y1;
-}
-
-void draw_marker(void)
-{
- draw_stone(10+(col*18), 22,c4_player+3);
- draw_arrow(7+(col*18), 31, ARROW_DOWN, ARROW_LEN, 3, DRAW_PUT);
- draw_arrow( 0, 152, ARROW_LEFT, ARROW_LEN, 3, DRAW_PUT);
- draw_arrow( 6, 152, ARROW_RIGHT, ARROW_LEN, 3, DRAW_PUT);
- draw_string(12,152,"Select",3,DRAW_PUT);
- draw_arrow( 75, 153, ARROW_DOWN, ARROW_LEN, 3, DRAW_PUT);
- draw_string(84,152,"Play move",3,DRAW_PUT);
-}
-
-void delete_marker(void)
-{
- draw_disc(10+(col*18), 22, 7, 3, DRAW_ERASE);
- draw_arrow(7+(col*18), 31, ARROW_DOWN, ARROW_LEN, 3, DRAW_ERASE);
- draw_block(0, 152, 128, 8, 3, DRAW_ERASE);
-}
-
-int checkwin(void)
-{
- if(c4_is_winner(0) || c4_is_winner(1) || c4_is_tie())
- {
- if(!c4_is_tie())
- {
- startCB(c4_wcb);
- }
- draw_block(0, 152, 128, 8, 3, DRAW_ERASE);
- delete_marker();
- set_font(BOLDFONT);
- if(c4_is_winner(c4_player))
- draw_string(19,14,"Spieler gewinnt!",3,DRAW_PUT);
- else if(c4_is_tie())
- draw_string(24,14,"Unentschieden!",3,DRAW_PUT);
- else
- draw_string(13,14,"Computer gewinnt!",3,DRAW_PUT);
-
- draw_string(2,25,"OK: Nochmal Exit: Ende",3,DRAW_PUT);
- return 1;
- }
- return 0;
-}
-
-void move(unsigned char p)
-{
- unsigned char pp;
- if(p)
- {
- p = 1;
- pp = 0;
- }
- else
- pp = 1;
-
- if(c4_make_move(p, col, &row))
- {
- draw_stone(col, 5-row, p);
- draw_disc(10+(col*18), 23, 7, 3, DRAW_ERASE);
- delete_marker();
- if(!checkwin())
- {
- set_font(BOLDFONT);
- draw_frame(35,13,57,22,5,5,3,DRAW_PUT);
- draw_block(40,18,47,12,3,DRAW_PUT);
- draw_string(40, 15, "Berechne", 3, DRAW_ERASE);
- draw_string(0, 152, "Exit: Spiel abbrechen", 3, DRAW_PUT);
- set_font(SMALLFONT);
- progress_callback(0xff);
- startCB(c4_cb);
- c4_abort = 0;
- c4_auto_move(~p, c4_level, &ccol, &row);
- setBacklight(BL_AUTO);
- stopCB(c4_cb);
- draw_block(0,13,128,22,3,DRAW_ERASE);
- draw_block(0, 152, 128, 8, 3, DRAW_ERASE);
- draw_stone(ccol, 5-row, pp);
- }
- draw_marker();
- c4_moves++;
- checkwin();
- }
-}
-
-void c4_selplayer(unsigned char p)
-{
- draw_string(30, 15, "Chooose Your", 3, DRAW_PUT);
- draw_string(25, 26, "Colour & Level", 3, DRAW_PUT);
- draw_arrow( 0, 154, ARROW_UP, ARROW_LEN, 3, DRAW_PUT);
- draw_arrow(1 * 6, 154, ARROW_DOWN, ARROW_LEN, 3, DRAW_PUT);
- draw_string(15,152,"Level",3,DRAW_PUT);
-
- draw_arrow( 82, 153, ARROW_LEFT, ARROW_LEN, 3, DRAW_PUT);
- draw_arrow( 88, 153, ARROW_RIGHT, ARROW_LEN, 3, DRAW_PUT);
- draw_string(94,152,"Colour",3,DRAW_PUT);
-
- draw_frame(1, 15, 19, 19, 1, 3, 3, DRAW_PUT);
- draw_frame(108,15, 19, 19, 1, 3, 3, DRAW_PUT);
-
- draw_disc(10, 24, 7, 3, DRAW_ERASE);
- draw_stone(10, 24, p+3);
- draw_disc(117, 24, 7, 3, DRAW_ERASE);
- draw_stone(117,24, p+3);
-}
-
-void start_connect4(void)
-{
- unsigned char x,y;
-
- Game_state s_stk[C4_MAX_LEVEL+1];
- state_stack = s_stk;
-
- evaluate = _evaluate;
- push_state = _push_state;
- drop_piece = _drop_piece;
- mcpy = _mcpy;
-
- seed = 0x86f2a981;
-
- c4_cb = addTimerCB(progress_callback, 35);
- c4_wcb = addTimerCB(win_callback, 100);
-
- row = 0; ccol = 0;
- c4_player = 0;
- c4_level = 3;
- lcd_fill(0);//Clr screen
-
- set_font(BOLDFONT);
- draw_string(0, 0, "Connect4", 3, DRAW_PUT);
-
- draw_block(0,10,128,2,3,DRAW_PUT);
- draw_block(0,149,128,2,3,DRAW_PUT);
-
- draw_frame(1,37,127,109,9,9,3,DRAW_PUT);
- draw_block(10,46,109,91,3,DRAW_PUT);
-
-restart:
- stopCB(c4_wcb);
- col = 3;
- draw_block(0,14,128,20,3,DRAW_ERASE);
- draw_block(0, 152, 128, 8, 3, DRAW_ERASE);
- c4_selplayer(c4_player);
- draw_numU(48,152,c4_level,0,3,DRAW_PUT);
-
- c4_moves = 0;
-
- for(x=0;x<7;x++)
- {
- for(y=0;y<6;y++)
- {
- draw_disc(10+(x*18), 46+(y*18),8,3,DRAW_ERASE);
- }
- }
-
- c4_reset();
- c4_new_game(C4_SIZEX, C4_SIZEY, 4);
-
- while(1)
- {
-wait4c:
- waitKeyUpDown();
-
- if((KEY_OK || KEY_0) && (c4_is_winner(0) || c4_is_winner(1) || c4_is_tie()) && (c4_moves != 0)) goto restart;
- else if(KEY_0)
- goto restart;
- if(KEY_Exit)
- {
- stopCB(c4_cb);
- stopCB(c4_wcb);
- removeTimerCB(c4_cb);
- removeTimerCB(c4_wcb);
- return;
- }
- else if(c4_moves == 0)
- {
- if(KEY_Left || KEY_Right)
- {
- if(c4_player) c4_player=0; else c4_player = 1;
- c4_selplayer(c4_player);
- }
- else if(KEY_OK && c4_player == 1)
- {
- delete_marker();
- c4_auto_move(0, c4_level, &ccol, &row);
- draw_stone(ccol, 5-row, 0);
- draw_marker();
- }
- else if(KEY_Up)
- {
- draw_numU(48,152,c4_level,0,3,DRAW_ERASE);
- c4_level++;
- if(c4_level > C4_MAX_LEVEL)
- c4_level = 1;
- draw_numU(48,152,c4_level,0,3,DRAW_PUT);
- }
- else if(KEY_Down)
- {
- draw_numU(48,152,c4_level,0,3,DRAW_ERASE);
- c4_level--;
- if(c4_level < 1)
- c4_level = C4_MAX_LEVEL;
- draw_numU(48,152,c4_level,0,3,DRAW_PUT);
- }
- if(KEY_OK)
- {
- c4_moves++;
- draw_block(0, 152, 128, 8, 3, DRAW_ERASE);
- delete_marker();
- draw_block(0,13,128,22,3,DRAW_ERASE);
- set_font(SMALLFONT);
- draw_marker();
- }
- goto wait4c;
- }
- else if(!c4_is_winner(0) && !c4_is_winner(1) && !c4_is_tie())
- {
- if(KEY_1 || KEY_2 || KEY_3 || KEY_4 || KEY_5 || KEY_6 || KEY_7)
- {
- delete_marker();
- if(KEY_1)
- col = 0;
- else if(KEY_2)
- col = 1;
- else if(KEY_3)
- col = 2;
- else if(KEY_4)
- col = 3;
- else if(KEY_5)
- col = 4;
- else if(KEY_6)
- col = 5;
- else if(KEY_7)
- col = 6;
- draw_marker();
-
- move(c4_player);
- }
- else if(KEY_Left || KEY_Right)
- {
- delete_marker();
- if(KEY_Left)
- col--;
- else if(KEY_Right)
- col++;
-
- if(col > 6)
- col = 0;
- else if(col < 0)
- col = 6;
- draw_marker();
- }
- else if(KEY_Down || KEY_OK)
- {
- move(c4_player);
- if(c4_abort)
- {
- c4_abort = 0;
- goto restart;
- }
- }
- }
- }
-}
-
diff --git a/boop/games/connect4.h b/boop/games/connect4.h
deleted file mode 100644
index 5962d9d..0000000
--- a/boop/games/connect4.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- connect4.c - game
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef CONNECT4_H
-#define CONNECT4_H
-
-#ifndef Boolean
-#define Boolean char
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#define C4_NONE 2
-#define C4_MAX_LEVEL 20
-
-void start_connect4(void);
-
-#endif
diff --git a/boop/games/gamesmenu.c b/boop/games/gamesmenu.c
deleted file mode 100644
index 230db87..0000000
--- a/boop/games/gamesmenu.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- testmenu.c - testmenu for menuing system
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "menu.h"
-#include "tic_tac_toe.h"
-#include "sokoban.h"
-#include "connect4.h"
-
-const struct MENU_ENTRY gamesMenuEntries[] =
-{
- { &GameTicTacToe, 0, FUNCENTRY, "TicTacToe", "Play TicTacToe" },
- { &GameSokoban, 0, FUNCENTRY, "Sokoban", "Play Sokoban" },
- { &start_connect4, 0, FUNCENTRY, "Connect4", "Play Connect4" }
-};
-
-
-const struct MENU gamesMenu =
-{
- 3, (MENU_ENTRY*)&gamesMenuEntries, "Games"
-};
diff --git a/boop/games/gamesmenu.h b/boop/games/gamesmenu.h
deleted file mode 100644
index d84df17..0000000
--- a/boop/games/gamesmenu.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- mainmenu.h - the main menu for boop
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef MAINMENU_H
-#define MAINMENU_H
-
-extern const struct MENU gamesMenu;
-
-#endif
diff --git a/boop/games/sokoban.c b/boop/games/sokoban.c
deleted file mode 100644
index db0305b..0000000
--- a/boop/games/sokoban.c
+++ /dev/null
@@ -1,614 +0,0 @@
-/*
- sokoban.c - game
- Copyright (C) 2007 Colibri
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "lcd.h"
-#include "fonty.h"
-#include "keyboard.h"
-
-#include "sokoban.h"
-#include "sokoban_levels.h"
-
-//#include "stdio.h"
-
-void GameSokoban_InitGameField(struct _SokobanGameInfo *pGI)
-{
- int SizeX;
- int SizeY;
- int x;
- int y;
- int Pos;
- int i;
-
- if((pGI->Level < 1) || (pGI->Level > SOKOBAN_LEVELS))
- {
- //Invalid level
- pGI->Level = 1;
- }
-
- //Empty the game field
- for(x=0; xG[x][y] = SPACE;
- }
- }
-
- //Find the position to searched level
- Pos = 0;
- i = 1;
- while(iLevel)
- {
- SizeX = Sokoban_Levels[Pos++];
- SizeY = Sokoban_Levels[Pos++];
- Pos += SizeY * ((SizeX+1)/2);
- i++;
- }
-
- //Copy the (may be smaller) level to the center of the game field
- SizeX = Sokoban_Levels[Pos++];
- SizeY = Sokoban_Levels[Pos++];
- for(y=0; y lo nibble
- pGI->G[x+((SOKOBAN_CELLS_X-SizeX)/2)][y+((SOKOBAN_CELLS_Y-SizeY)/2)] = Sokoban_Levels[Pos + (y * ((SizeX+1)/2)) + (x/2)] & 0x0F;
- }
- else
- {
- //Even x -> hi nibble
- pGI->G[x+((SOKOBAN_CELLS_X-SizeX)/2)][y+((SOKOBAN_CELLS_Y-SizeY)/2)] = (Sokoban_Levels[Pos + (y * ((SizeX+1)/2)) + (x/2)] >> 4) & 0x0F;
- }
- }
- }
-}
-
-
-BOOL GameSokoban_IsSolved(BYTE G[SOKOBAN_CELLS_X][SOKOBAN_CELLS_Y])
-{
- //Return true=Solved
- int x;
- int y;
-
- for(x=0; xMoves = 0;
- pGI->UndoCount = 0;
-
- GameSokoban_InitGameField(pGI);
-
- //Game field to display
- for(x=0; xG[x][y]);
- if(pGI->G[x][y] & PUSHER)
- {
- pGI->PusherX = x;
- pGI->PusherY = y;
- }
- }
- }
-}
-
-void GameSokoban_Move(struct _SokobanGameInfo *pGI)
-{
- if(KEY_Up)
- {
- if(!(pGI->G[pGI->PusherX][pGI->PusherY - 1] & WALL))
- {
- //No wall
- if(!(pGI->G[pGI->PusherX][pGI->PusherY - 1] & PACKET))
- {
- //No wall and no packet
- GameSokoban_SaveUndo(pGI, 2, SOKOBAN_UNDO_DIR_UP);
-
- //Move pusher
- pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER;
- pGI->G[pGI->PusherX][pGI->PusherY-1] ^= PUSHER;
-
- //Draw changed cells
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]);
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY-1, pGI->G[pGI->PusherX][pGI->PusherY-1]);
-
- pGI->PusherY--;
- pGI->Moves++;
- }
- else
- {
- //Packet -> check if it is space behind the packet
- if(!(pGI->G[pGI->PusherX][pGI->PusherY - 2] & (PACKET | WALL)))
- {
- //No packet or wall behind the packet
- GameSokoban_SaveUndo(pGI, 3, SOKOBAN_UNDO_DIR_UP);
- //Move pusher
- pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER;
- pGI->G[pGI->PusherX][pGI->PusherY - 1] ^= PUSHER;
-
- //Move packet
- pGI->G[pGI->PusherX][pGI->PusherY-1] ^= PACKET;
- pGI->G[pGI->PusherX][pGI->PusherY-2] ^= PACKET;
-
- //Draw changed cells
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]);
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY-1, pGI->G[pGI->PusherX][pGI->PusherY-1]);
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY-2, pGI->G[pGI->PusherX][pGI->PusherY-2]);
-
- pGI->PusherY--;
- pGI->Moves++;
- }
- }
- }
- }
- if(KEY_Down)
- {
- if(!(pGI->G[pGI->PusherX][pGI->PusherY + 1] & WALL))
- {
- //No wall
- if(!(pGI->G[pGI->PusherX][pGI->PusherY + 1] & PACKET))
- {
- //No wall and no packet
- GameSokoban_SaveUndo(pGI, 2, SOKOBAN_UNDO_DIR_DOWN);
- //Move pusher
- pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER;
- pGI->G[pGI->PusherX][pGI->PusherY+1] ^= PUSHER;
-
- //Draw changed cells
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]);
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY+1, pGI->G[pGI->PusherX][pGI->PusherY+1]);
-
- pGI->PusherY++;
- pGI->Moves++;
- }
- else
- {
- //Packet -> check if it is space behind the packet
- if(!(pGI->G[pGI->PusherX][pGI->PusherY + 2] & (PACKET | WALL)))
- {
- //No packet or wall behind the packet
- GameSokoban_SaveUndo(pGI, 3, SOKOBAN_UNDO_DIR_DOWN);
- //Move pusher
- pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER;
- pGI->G[pGI->PusherX][pGI->PusherY + 1] ^= PUSHER;
-
- //Move packet
- pGI->G[pGI->PusherX][pGI->PusherY+1] ^= PACKET;
- pGI->G[pGI->PusherX][pGI->PusherY+2] ^= PACKET;
-
- //Draw changed cells
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]);
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY+1, pGI->G[pGI->PusherX][pGI->PusherY+1]);
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY+2, pGI->G[pGI->PusherX][pGI->PusherY+2]);
-
- pGI->PusherY++;
- pGI->Moves++;
- }
- }
- }
- }
- if(KEY_Left)
- {
- if(!(pGI->G[pGI->PusherX - 1][pGI->PusherY] & WALL))
- {
- //No wall
- if(!(pGI->G[pGI->PusherX - 1][pGI->PusherY] & PACKET))
- {
- //No wall and no packet
- GameSokoban_SaveUndo(pGI, 2, SOKOBAN_UNDO_DIR_LEFT);
- //Move pusher
- pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER;
- pGI->G[pGI->PusherX - 1][pGI->PusherY] ^= PUSHER;
-
- //Draw changed cells
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]);
- GameSokoban_DrawCell(pGI->PusherX - 1, pGI->PusherY, pGI->G[pGI->PusherX - 1][pGI->PusherY]);
-
- pGI->PusherX--;
- pGI->Moves++;
- }
- else
- {
- //Packet -> check if it is space behind the packet
- if(!(pGI->G[pGI->PusherX - 2][pGI->PusherY] & (PACKET | WALL)))
- {
- //No packet or wall behind the packet
- GameSokoban_SaveUndo(pGI, 3, SOKOBAN_UNDO_DIR_LEFT);
- //Move pusher
- pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER;
- pGI->G[pGI->PusherX - 1][pGI->PusherY] ^= PUSHER;
-
- //Move packet
- pGI->G[pGI->PusherX - 1][pGI->PusherY] ^= PACKET;
- pGI->G[pGI->PusherX - 2][pGI->PusherY] ^= PACKET;
-
- //Draw changed cells
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]);
- GameSokoban_DrawCell(pGI->PusherX - 1, pGI->PusherY, pGI->G[pGI->PusherX - 1][pGI->PusherY]);
- GameSokoban_DrawCell(pGI->PusherX - 2, pGI->PusherY, pGI->G[pGI->PusherX - 2][pGI->PusherY]);
-
- pGI->PusherX--;
- pGI->Moves++;
- }
- }
- }
- }
- if(KEY_Right)
- {
- if(!(pGI->G[pGI->PusherX + 1][pGI->PusherY] & WALL))
- {
- //No wall
- if(!(pGI->G[pGI->PusherX + 1][pGI->PusherY] & PACKET))
- {
- //No wall and no packet
- GameSokoban_SaveUndo(pGI, 2, SOKOBAN_UNDO_DIR_RIGHT);
- //Move pusher
- pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER;
- pGI->G[pGI->PusherX + 1][pGI->PusherY] ^= PUSHER;
-
- //Draw changed cells
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]);
- GameSokoban_DrawCell(pGI->PusherX + 1, pGI->PusherY, pGI->G[pGI->PusherX + 1][pGI->PusherY]);
-
- pGI->PusherX++;
- pGI->Moves++;
- }
- else
- {
- //Packet -> check if it is space behind the packet
- if(!(pGI->G[pGI->PusherX + 2][pGI->PusherY] & (PACKET | WALL)))
- {
- //No packet or wall behind the packet
- GameSokoban_SaveUndo(pGI, 3, SOKOBAN_UNDO_DIR_RIGHT);
- //Move pusher
- pGI->G[pGI->PusherX][pGI->PusherY] ^= PUSHER;
- pGI->G[pGI->PusherX + 1][pGI->PusherY] ^= PUSHER;
-
- //Move packet
- pGI->G[pGI->PusherX + 1][pGI->PusherY] ^= PACKET;
- pGI->G[pGI->PusherX + 2][pGI->PusherY] ^= PACKET;
-
- //Draw changed cells
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY, pGI->G[pGI->PusherX][pGI->PusherY]);
- GameSokoban_DrawCell(pGI->PusherX + 1, pGI->PusherY, pGI->G[pGI->PusherX + 1][pGI->PusherY]);
- GameSokoban_DrawCell(pGI->PusherX + 2, pGI->PusherY, pGI->G[pGI->PusherX + 2][pGI->PusherY]);
-
- pGI->PusherX++;
- pGI->Moves++;
- }
- }
- }
- }
-
-}
-
-void GameSokoban_UndoAMove(struct _SokobanGameInfo *pGI)
-{
- //3 Byte UndoBuffer:
- //[ 0 ][ 1 ][ 2 ]
- //765432107654321076543210
- //\-x-/\-y-/\/\o0/\o1/\o2/
-
- BYTE Object[3];
- BYTE Dir;
- int i;
- int Count;
-
- if(pGI->UndoCount <= 0)
- {
- return;//No more undos available
- }
-
- pGI->UndoCount--;
-
- pGI->PusherX = (pGI->UndoBuffer[pGI->UndoCount][0] >> 3) & 0x1F;
- pGI->PusherY = (pGI->UndoBuffer[pGI->UndoCount][0] << 2) & 0x1F;
- pGI->PusherY |= (pGI->UndoBuffer[pGI->UndoCount][1] >> 6) & 0x03;
- Dir = (pGI->UndoBuffer[pGI->UndoCount][1] >> 4) & 0x03;
- Object[0] = pGI->UndoBuffer[pGI->UndoCount][1] & 0x0F;
- Object[1] = (pGI->UndoBuffer[pGI->UndoCount][2] >> 4) & 0x0F;
- Object[2] = pGI->UndoBuffer[pGI->UndoCount][2] & 0x0F;
-
- Count = (Object[2] == 0x0F) ? 2 : 3;
-
- for(i=0; iG[pGI->PusherX - i][pGI->PusherY] = Object[i];
- GameSokoban_DrawCell(pGI->PusherX - i, pGI->PusherY, pGI->G[pGI->PusherX - i][pGI->PusherY]);
- break;
- case SOKOBAN_UNDO_DIR_RIGHT:
- pGI->G[pGI->PusherX + i][pGI->PusherY] = Object[i];
- GameSokoban_DrawCell(pGI->PusherX + i, pGI->PusherY, pGI->G[pGI->PusherX + i][pGI->PusherY]);
- break;
- case SOKOBAN_UNDO_DIR_UP:
- pGI->G[pGI->PusherX][pGI->PusherY - i] = Object[i];
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY - i, pGI->G[pGI->PusherX][pGI->PusherY - i]);
- break;
- case SOKOBAN_UNDO_DIR_DOWN:
- pGI->G[pGI->PusherX][pGI->PusherY + i] = Object[i];
- GameSokoban_DrawCell(pGI->PusherX, pGI->PusherY + i, pGI->G[pGI->PusherX][pGI->PusherY + i]);
- break;
- }
- }
-
- pGI->Moves--;
-}
-
-void GameSokoban_SaveUndo(struct _SokobanGameInfo *pGI, BYTE Count, BYTE Dir)
-{
- //3 Byte UndoBuffer:
- //[ 0 ][ 1 ][ 2 ]
- //765432107654321076543210
- //\-x-/\-y-/\/\o0/\o1/\o2/
-
- BYTE Object[3];
- int i;
-
-// ASSERT((Count == 2) || (Count == 3));
-
- Object[2] = 0x0F;//Default value for not used
-
- for(i=0; iG[pGI->PusherX - i][pGI->PusherY];
- break;
- case SOKOBAN_UNDO_DIR_RIGHT:
- Object[i] = pGI->G[pGI->PusherX + i][pGI->PusherY];
- break;
- case SOKOBAN_UNDO_DIR_UP:
- Object[i] = pGI->G[pGI->PusherX][pGI->PusherY - i];
- break;
- case SOKOBAN_UNDO_DIR_DOWN:
- Object[i] = pGI->G[pGI->PusherX][pGI->PusherY + i];
- break;
- }
- }
-
- if(pGI->UndoCount >= SOKOBAN_MAX_UNDOS)
- {
- //Undo buffer is full -> free oldest
- for(i=0; i<(SOKOBAN_MAX_UNDOS-1); i++)
- {
- pGI->UndoBuffer[i][0] = pGI->UndoBuffer[i+1][0];
- pGI->UndoBuffer[i][1] = pGI->UndoBuffer[i+1][1];
- pGI->UndoBuffer[i][2] = pGI->UndoBuffer[i+1][2];
- }
- pGI->UndoCount--;
- }
-
- pGI->UndoBuffer[pGI->UndoCount][0] = (pGI->PusherX & 0x1F) << 3;
- pGI->UndoBuffer[pGI->UndoCount][0] |= ((pGI->PusherY & 0x1F) >> 2) & 0x07;
-
- pGI->UndoBuffer[pGI->UndoCount][1] = (pGI->PusherY & 0x1F) << 6;
- pGI->UndoBuffer[pGI->UndoCount][1] |= (Dir & 3) << 4;
- pGI->UndoBuffer[pGI->UndoCount][1] |= Object[0] & 0x0F;
-
- pGI->UndoBuffer[pGI->UndoCount][2] = (Object[1] & 0x0F) << 4;
- pGI->UndoBuffer[pGI->UndoCount][2] |= Object[2] & 0x0F;
-
- pGI->UndoCount++;
-}
-
-void GameSokoban()
-{
- struct _SokobanGameInfo GI;
- int i;
-
- GI.Level = 1;
-restart:
- //Init the display
- lcd_fill(0);//Clr screen
-
- //Title
- draw_string(0, 0, "Sokoban", LCD_COLOR_B, DRAW_PUT);
-
- //Grid
- for(i=0; i<=SOKOBAN_CELLS_X; i++)
- {
- draw_vline(i*(SOKOBAN_CELL_SIZE+1),16,SOKOBAN_CELLS_Y*(SOKOBAN_CELL_SIZE+1)+1, LCD_COLOR_LG, DRAW_PUT);
- }
- for(i=0; i<=SOKOBAN_CELLS_Y; i++)
- {
- draw_hline(0, 16 + i*(SOKOBAN_CELL_SIZE+1),SOKOBAN_CELLS_X*(SOKOBAN_CELL_SIZE+1)+1, LCD_COLOR_LG, DRAW_PUT);
- }
-
- draw_string(0, 8, "Level: Moves:", LCD_COLOR_B, DRAW_PUT);
- draw_char(98,8,'0',LCD_COLOR_B,DRAW_PUT);
- draw_string(0, LCD_SIZE_Y - (8*3), "Program +/-:", LCD_COLOR_B, DRAW_PUT);
- draw_string(65, LCD_SIZE_Y - (8*3), "Level +/- 1", LCD_COLOR_B, DRAW_PUT);
- draw_string(0, LCD_SIZE_Y - (8*2), "Volume +/-:", LCD_COLOR_B, DRAW_PUT);
- draw_string(65, LCD_SIZE_Y - (8*2), "Level +/- 20", LCD_COLOR_B, DRAW_PUT);
- draw_arrow( 0, LCD_SIZE_Y - 8, ARROW_UP, ARROW_LEN, LCD_COLOR_B, DRAW_PUT);
- draw_arrow(1 * 6, LCD_SIZE_Y - 8, ARROW_DOWN, ARROW_LEN, LCD_COLOR_B, DRAW_PUT);
- draw_arrow(2 * 6, LCD_SIZE_Y - 8, ARROW_LEFT, ARROW_LEN, LCD_COLOR_B, DRAW_PUT);
- draw_arrow(3 * 6, LCD_SIZE_Y - 8, ARROW_RIGHT, ARROW_LEN, LCD_COLOR_B, DRAW_PUT);
- draw_string(32, LCD_SIZE_Y - 8, "Bewegen", LCD_COLOR_B, DRAW_PUT);
-
-again:
- GameSokoban_InitDisplayForNewGame(&GI);
- draw_block(32, 8, 30, 8, LCD_COLOR_B, DRAW_ERASE);
- draw_numU(32,8,GI.Level,0,LCD_COLOR_B,DRAW_PUT);
-
- while(1)
- {
- if(KEY_Up || KEY_Down || KEY_Left || KEY_Right || KEY_8)
- {
- draw_block(98, 8, 30, 8, LCD_COLOR_B, DRAW_ERASE);
- if(KEY_8)
- GameSokoban_UndoAMove(&GI);
- else
- GameSokoban_Move(&GI);
-
- if(GameSokoban_IsSolved(GI.G) && !KEY_8)
- {
- //Solved
- GI.Level++;//Next level
- if(GI.Level > SOKOBAN_LEVELS)
- {
- GI.Level = 1;
- }
- waitKeyUp();
- goto restart;
- }
- draw_numU(98,8,GI.Moves,0,LCD_COLOR_B,DRAW_PUT);
- }
-
-
- //Footer
- if(GI.Moves == 1)
- {
- draw_block(0, LCD_SIZE_Y - (8*3), LCD_SIZE_X, 16, LCD_COLOR_B, DRAW_ERASE);
- draw_string(0, LCD_SIZE_Y - (8*3), "0", LCD_COLOR_B, DRAW_PUT);
- draw_string(32, LCD_SIZE_Y - (8*3), "Neues Spiel", LCD_COLOR_B, DRAW_PUT);
- draw_string(0, LCD_SIZE_Y - (8*2), "Exit", LCD_COLOR_B, DRAW_PUT);
- draw_string(32, LCD_SIZE_Y - (8*2), "Spiel beenden", LCD_COLOR_B, DRAW_PUT);
- }
-
- waitKeyUpDown();
-
- if(GI.Moves == 0)
- {
- if(KEY_Pplus || KEY_Pminus || KEY_Vplus || KEY_Vminus)
- {
- //Change level
- //Program keys +/- 1
- if(KEY_Pplus)
- {
- GI.Level++;
- }
- if(KEY_Pminus)
- {
- GI.Level--;
- }
- //Volume keys +/- 20
- if(KEY_Vplus)
- {
- GI.Level += 20;
- }
- if(KEY_Vminus)
- {
- GI.Level -= 20;
- }
- //Wrap around if necessary
- if(GI.Level < 1)
- {
- GI.Level += SOKOBAN_LEVELS;
- }
- if(GI.Level > SOKOBAN_LEVELS)
- {
- GI.Level -= SOKOBAN_LEVELS;
- }
- //New game
- goto again;
- }
- }
- if(KEY_0) goto restart;
- if(KEY_Exit) return;
- }
-}
-
diff --git a/boop/games/sokoban.h b/boop/games/sokoban.h
deleted file mode 100644
index fe5621a..0000000
--- a/boop/games/sokoban.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- sokoban.h - game
- Copyright (C) 2007 Colibri
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef SOKOBAN_H
-#define SOKOBAN_H
-
-#include "../global.h"
-
-#define SOKOBAN_MAX_UNDOS 100
-#define SOKOBAN_UNDO_DIR_LEFT 0
-#define SOKOBAN_UNDO_DIR_RIGHT 1
-#define SOKOBAN_UNDO_DIR_UP 2
-#define SOKOBAN_UNDO_DIR_DOWN 3
-
-#define SPACE 0
-#define GOAL 1
-#define PUSHER 2
-#define PACKET 4
-#define WALL 8
-#define PUSHER_ON_GOAL (PUSHER | GOAL)
-#define PACKET_ON_GOAL (PACKET | GOAL)
-
-#define SOKOBAN_CELLS_X 21
-#define SOKOBAN_CELLS_Y 19
-//Size without grid
-#define SOKOBAN_CELL_SIZE 5
-
-struct _SokobanGameInfo
-{
- BYTE G[SOKOBAN_CELLS_X][SOKOBAN_CELLS_Y];
- short Level;
- int PusherX;
- int PusherY;
- WORD Moves;
- WORD UndoCount;
- BYTE UndoBuffer[SOKOBAN_MAX_UNDOS][3];
-};
-
-void GameSokoban(void);
-void GameSokoban_InitGameField(struct _SokobanGameInfo *pGI);
-void GameSokoban_DrawCell(int x, int y, BYTE Object);
-BOOL GameSokoban_IsSolved(BYTE G[SOKOBAN_CELLS_X][SOKOBAN_CELLS_Y]);
-void GameSokoban_InitDisplayForNewGame(struct _SokobanGameInfo *pGI);
-void GameSokoban_Move(struct _SokobanGameInfo *pGI);
-void GameSokoban_SaveUndo(struct _SokobanGameInfo *pGI, BYTE Count, BYTE Dir);
-void GameSokoban_UndoAMove(struct _SokobanGameInfo *pGI);
-
-
-#endif
diff --git a/boop/games/sokoban_levels.h b/boop/games/sokoban_levels.h
deleted file mode 100644
index 437c9e1..0000000
--- a/boop/games/sokoban_levels.h
+++ /dev/null
@@ -1,4968 +0,0 @@
-/*
- sokoban.h - game
- Copyright (C) 2007 Colibri
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef SOKOBAN_LEVELS_H
-#define SOKOBAN_LEVELS_H
-
-#ifndef DEBUGMODE
-#define SOKOBAN_LEVELS 375
-const unsigned char Sokoban_Levels[] = {
-//Level: 1
-0x13, 0x0B,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // #####
-0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // # #
-0x00, 0x00, 0x84, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // #$ #
-0x00, 0x88, 0x80, 0x04, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // ### $##
-0x00, 0x80, 0x04, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, // # $ $ #
-0x88, 0x80, 0x80, 0x88, 0x08, 0x00, 0x08, 0x88, 0x88, 0x80, //### # ## # ######
-0x80, 0x00, 0x80, 0x88, 0x08, 0x88, 0x88, 0x00, 0x11, 0x80, //# # ## ##### ..#
-0x80, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x80, //# $ $ ..#
-0x88, 0x88, 0x80, 0x88, 0x80, 0x82, 0x88, 0x00, 0x11, 0x80, //##### ### #@## ..#
-0x00, 0x00, 0x80, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // # #########
-0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // #######
-//Level: 2
-0x0E, 0x0A,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //############
-0x81, 0x10, 0x08, 0x00, 0x00, 0x08, 0x88, //#.. # ###
-0x81, 0x10, 0x08, 0x04, 0x00, 0x40, 0x08, //#.. # $ $ #
-0x81, 0x10, 0x08, 0x48, 0x88, 0x80, 0x08, //#.. #$#### #
-0x81, 0x10, 0x00, 0x02, 0x08, 0x80, 0x08, //#.. @ ## #
-0x81, 0x10, 0x08, 0x08, 0x00, 0x40, 0x88, //#.. # # $ ##
-0x88, 0x88, 0x88, 0x08, 0x84, 0x04, 0x08, //###### ##$ $ #
-0x00, 0x80, 0x40, 0x04, 0x04, 0x04, 0x08, // # $ $ $ $ #
-0x00, 0x80, 0x00, 0x08, 0x00, 0x00, 0x08, // # # #
-0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, // ############
-//Level: 3
-0x11, 0x0A,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, // ########
-0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x28, 0x00, // # @#
-0x00, 0x00, 0x00, 0x00, 0x80, 0x48, 0x40, 0x88, 0x00, // # $#$ ##
-0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x04, 0x80, 0x00, // # $ $#
-0x00, 0x00, 0x00, 0x00, 0x88, 0x40, 0x40, 0x80, 0x00, // ##$ $ #
-0x88, 0x88, 0x88, 0x88, 0x80, 0x40, 0x80, 0x88, 0x80, //######### $ # ###
-0x81, 0x11, 0x10, 0x08, 0x80, 0x40, 0x04, 0x00, 0x80, //#.... ## $ $ #
-0x88, 0x11, 0x10, 0x00, 0x04, 0x00, 0x40, 0x00, 0x80, //##... $ $ #
-0x81, 0x11, 0x10, 0x08, 0x88, 0x88, 0x88, 0x88, 0x80, //#.... ##########
-0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //########
-//Level: 4
-0x0B, 0x0A,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###########
-0x80, 0x00, 0x08, 0x00, 0x00, 0x80, //# # #
-0x80, 0x42, 0x44, 0x44, 0x40, 0x80, //# $@$$$$$ #
-0x80, 0x00, 0x00, 0x00, 0x00, 0x80, //# #
-0x88, 0x88, 0x80, 0x88, 0x88, 0x80, //##### #####
-0x00, 0x08, 0x10, 0x08, 0x00, 0x00, // #. #
-0x00, 0x08, 0x10, 0x08, 0x00, 0x00, // #. #
-0x00, 0x08, 0x11, 0x18, 0x00, 0x00, // #...#
-0x00, 0x08, 0x10, 0x08, 0x00, 0x00, // #. #
-0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // #####
-//Level: 5
-0x0E, 0x0D,//Size x and y
-0x88, 0x88, 0x88, 0x00, 0x88, 0x88, 0x80, //###### #####
-0x80, 0x00, 0x08, 0x00, 0x80, 0x00, 0x80, //# # # #
-0x80, 0x40, 0x08, 0x88, 0x80, 0x40, 0x80, //# $ #### $ #
-0x80, 0x40, 0x00, 0x00, 0x04, 0x00, 0x80, //# $ $ #
-0x80, 0x08, 0x88, 0x28, 0x88, 0x40, 0x80, //# ###@###$ #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x08, 0x88, //########## ###
-0x81, 0x10, 0x00, 0x88, 0x00, 0x00, 0x08, //#.. ## #
-0x81, 0x10, 0x00, 0x88, 0x40, 0x00, 0x08, //#.. ##$ #
-0x81, 0x10, 0x00, 0x88, 0x04, 0x00, 0x08, //#.. ## $ #
-0x81, 0x10, 0x00, 0x88, 0x04, 0x00, 0x08, //#.. ## $ #
-0x81, 0x10, 0x00, 0x00, 0x40, 0x40, 0x08, //#.. $ $ #
-0x88, 0x80, 0x08, 0x88, 0x88, 0x88, 0x88, //### #########
-0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ####
-//Level: 6
-0x0B, 0x10,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###########
-0x80, 0x00, 0x00, 0x80, 0x00, 0x80, //# # #
-0x80, 0x00, 0x40, 0x04, 0x00, 0x80, //# $ $ #
-0x88, 0x88, 0x80, 0x80, 0x00, 0x80, //##### # #
-0x88, 0x88, 0x80, 0x88, 0x81, 0x80, //##### ###.#
-0x80, 0x08, 0x00, 0x00, 0x81, 0x80, //# # #.#
-0x80, 0x40, 0x00, 0x40, 0x81, 0x80, //# $ $ #.#
-0x80, 0x08, 0x88, 0x08, 0x81, 0x80, //# ### ##.#
-0x88, 0x08, 0x88, 0x00, 0x81, 0x80, //## ### #.#
-0x80, 0x40, 0x00, 0x40, 0x81, 0x80, //# $ $ #.#
-0x80, 0x00, 0x88, 0x00, 0x81, 0x80, //# ## #.#
-0x88, 0x80, 0x88, 0x88, 0x81, 0x80, //### #####.#
-0x88, 0x80, 0x80, 0x00, 0x20, 0x80, //### # @ #
-0x80, 0x04, 0x00, 0x00, 0x40, 0x80, //# $ $ #
-0x80, 0x00, 0x08, 0x80, 0x00, 0x80, //# ## #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###########
-//Level: 7
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x88, 0x02, 0x88, //#### @##
-0x88, 0x88, 0x00, 0x08, //#### #
-0x81, 0x08, 0x44, 0x08, //#. #$$ #
-0x80, 0x00, 0x00, 0x88, //# ##
-0x81, 0x00, 0x48, 0x88, //#. $###
-0x88, 0x10, 0x08, 0x88, //##. ###
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 8
-0x0C, 0x06,//Size x and y
-0x08, 0x88, 0x80, 0x08, 0x88, 0x88, // #### #####
-0x88, 0x00, 0x80, 0x08, 0x00, 0x08, //## # # #
-0x80, 0x40, 0x88, 0x88, 0x40, 0x08, //# $ ####$ #
-0x80, 0x04, 0x11, 0x11, 0x04, 0x08, //# $.... $ #
-0x88, 0x00, 0x00, 0x80, 0x20, 0x88, //## # @ ##
-0x08, 0x88, 0x88, 0x88, 0x88, 0x80, // ##########
-//Level: 9
-0x07, 0x06,//Size x and y
-0x88, 0x88, 0x88, 0x80, //#######
-0x80, 0x04, 0x01, 0x80, //# $ .#
-0x80, 0x02, 0x40, 0x80, //# @$ #
-0x80, 0x08, 0x41, 0x80, //# #$.#
-0x80, 0x01, 0x08, 0x80, //# . ##
-0x88, 0x88, 0x88, 0x00, //######
-//Level: 10
-0x07, 0x08,//Size x and y
-0x00, 0x88, 0x88, 0x00, // ####
-0x88, 0x80, 0x08, 0x80, //### ##
-0x80, 0x00, 0x40, 0x80, //# $ #
-0x80, 0x81, 0x82, 0x80, //# #.#@#
-0x80, 0x84, 0x01, 0x80, //# #$ .#
-0x80, 0x01, 0x40, 0x80, //# .$ #
-0x88, 0x00, 0x08, 0x80, //## ##
-0x08, 0x88, 0x88, 0x00, // #####
-//Level: 11
-0x09, 0x09,//Size x and y
-0x88, 0x88, 0x00, 0x00, 0x00, //####
-0x80, 0x08, 0x88, 0x80, 0x00, //# ####
-0x80, 0x00, 0x00, 0x88, 0x80, //# ###
-0x80, 0x08, 0x40, 0x10, 0x80, //# #$ . #
-0x88, 0x08, 0x18, 0x40, 0x80, //## #.#$ #
-0x80, 0x08, 0x02, 0x50, 0x80, //# # @* #
-0x80, 0x00, 0x50, 0x08, 0x80, //# * ##
-0x88, 0x88, 0x00, 0x88, 0x00, //#### ##
-0x00, 0x08, 0x88, 0x80, 0x00, // ####
-//Level: 12
-0x09, 0x08,//Size x and y
-0x00, 0x88, 0x88, 0x00, 0x00, // ####
-0x00, 0x82, 0x08, 0x00, 0x00, // #@ #
-0x88, 0x80, 0x08, 0x88, 0x80, //### ####
-0x80, 0x01, 0x50, 0x00, 0x80, //# .* #
-0x80, 0x41, 0x10, 0x40, 0x80, //# $.. $ #
-0x88, 0x80, 0x48, 0x88, 0x80, //### $####
-0x00, 0x80, 0x08, 0x00, 0x00, // # #
-0x00, 0x88, 0x88, 0x00, 0x00, // ####
-//Level: 13
-0x0D, 0x11,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x00, 0x00, 0x00, // ###
-0x00, 0x00, 0x88, 0x18, 0x80, 0x00, 0x00, // ##.##
-0x00, 0x00, 0x81, 0x11, 0x80, 0x00, 0x00, // #...#
-0x00, 0x88, 0x81, 0x12, 0x88, 0x80, 0x00, // ###..@###
-0x00, 0x80, 0x01, 0x11, 0x00, 0x80, 0x00, // # ... #
-0x88, 0x80, 0x88, 0x18, 0x80, 0x88, 0x80, //### ##.## ###
-0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, //# $ #
-0x80, 0x08, 0x00, 0x40, 0x08, 0x00, 0x80, //# # $ # #
-0x88, 0x48, 0x48, 0x88, 0x48, 0x48, 0x80, //##$#$###$#$##
-0x80, 0x08, 0x00, 0x40, 0x08, 0x00, 0x80, //# # $ # #
-0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, //# $ #
-0x88, 0x80, 0x08, 0x08, 0x00, 0x88, 0x80, //### # # ###
-0x00, 0x80, 0x88, 0x08, 0x80, 0x80, 0x00, // # ## ## #
-0x00, 0x80, 0x04, 0x04, 0x00, 0x80, 0x00, // # $ $ #
-0x00, 0x80, 0x88, 0x08, 0x80, 0x80, 0x00, // # ## ## #
-0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, // # #
-0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, // #########
-//Level: 14
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x80, 0x21, 0x80, 0x08, //# @.# #
-0x80, 0x14, 0x01, 0x08, //# .$ . #
-0x80, 0x08, 0x40, 0x08, //# #$ #
-0x80, 0x04, 0x00, 0x88, //# $ ##
-0x88, 0x80, 0x08, 0x80, //### ##
-0x00, 0x80, 0x08, 0x00, // # #
-0x00, 0x88, 0x88, 0x00, // ####
-//Level: 15
-0x09, 0x09,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x00, //########
-0x80, 0x00, 0x00, 0x08, 0x00, //# #
-0x80, 0x84, 0x40, 0x08, 0x00, //# #$$ #
-0x80, 0x11, 0x18, 0x08, 0x00, //# ...# #
-0x88, 0x11, 0x14, 0x08, 0x80, //##...$ ##
-0x08, 0x08, 0x80, 0x40, 0x80, // # ## $ #
-0x08, 0x40, 0x04, 0x00, 0x80, // #$ $ #
-0x08, 0x00, 0x80, 0x02, 0x80, // # # @#
-0x08, 0x88, 0x88, 0x88, 0x80, // ########
-//Level: 16
-0x0B, 0x09,//Size x and y
-0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // #####
-0x00, 0x80, 0x00, 0x80, 0x00, 0x00, // # #
-0x88, 0x84, 0x14, 0x88, 0x88, 0x80, //###$.$#####
-0x80, 0x00, 0x10, 0x40, 0x00, 0x80, //# . $ #
-0x80, 0x88, 0x48, 0x80, 0x20, 0x80, //# ##$## @ #
-0x80, 0x00, 0x10, 0x88, 0x88, 0x80, //# . #####
-0x88, 0x80, 0x10, 0x80, 0x00, 0x00, //### . #
-0x00, 0x80, 0x00, 0x80, 0x00, 0x00, // # #
-0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // #####
-//Level: 17
-0x0C, 0x0B,//Size x and y
-0x88, 0x88, 0x88, 0x00, 0x88, 0x80, //###### ###
-0x81, 0x10, 0x08, 0x08, 0x82, 0x88, //#.. # ##@##
-0x81, 0x10, 0x08, 0x88, 0x00, 0x08, //#.. ### #
-0x81, 0x10, 0x00, 0x00, 0x44, 0x08, //#.. $$ #
-0x81, 0x10, 0x08, 0x08, 0x04, 0x08, //#.. # # $ #
-0x81, 0x18, 0x88, 0x08, 0x04, 0x08, //#..### # $ #
-0x88, 0x88, 0x04, 0x08, 0x40, 0x08, //#### $ #$ #
-0x00, 0x08, 0x00, 0x48, 0x04, 0x08, // # $# $ #
-0x00, 0x08, 0x04, 0x00, 0x40, 0x08, // # $ $ #
-0x00, 0x08, 0x00, 0x88, 0x00, 0x08, // # ## #
-0x00, 0x08, 0x88, 0x88, 0x88, 0x88, // #########
-//Level: 18
-0x10, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //#######
-0x80, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, //# ##########
-0x80, 0x00, 0x00, 0x80, 0x00, 0x08, 0x00, 0x88, //# # # ##
-0x80, 0x40, 0x00, 0x80, 0x00, 0x40, 0x40, 0x08, //# $ # $ $ #
-0x80, 0x04, 0x00, 0x80, 0x04, 0x08, 0x80, 0x08, //# $ # $ ## #
-0x80, 0x44, 0x00, 0x88, 0x40, 0x40, 0x00, 0x08, //# $$ ##$ $ #
-0x88, 0x08, 0x00, 0x88, 0x08, 0x88, 0x88, 0x88, //## # ## #######
-0x88, 0x08, 0x00, 0x88, 0x00, 0x00, 0x11, 0x18, //## # ## ...#
-0x80, 0x08, 0x40, 0x00, 0x00, 0x00, 0x11, 0x18, //# #$ ...#
-0x80, 0x00, 0x44, 0x00, 0x00, 0x00, 0x11, 0x18, //# $$ ...#
-0x80, 0x00, 0x00, 0x88, 0x28, 0x00, 0x11, 0x18, //# ##@# ...#
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //################
-//Level: 19
-0x0D, 0x0C,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ############
-0x08, 0x00, 0x00, 0x10, 0x80, 0x00, 0x80, // # . # #
-0x08, 0x00, 0x04, 0x50, 0x80, 0x40, 0x80, // # $* # $ #
-0x08, 0x00, 0x08, 0x10, 0x80, 0x88, 0x80, // # #. # ###
-0x08, 0x00, 0x88, 0x18, 0x00, 0x08, 0x00, // # ##.# #
-0x88, 0x00, 0x88, 0x18, 0x04, 0x08, 0x80, //## ##.# $ ##
-0x80, 0x00, 0x80, 0x18, 0x48, 0x00, 0x80, //# # .#$# #
-0x80, 0x20, 0x80, 0x10, 0x00, 0x40, 0x80, //# @ # . $ #
-0x80, 0x08, 0x80, 0x54, 0x48, 0x00, 0x80, //# ## *$$# #
-0x80, 0x00, 0x80, 0x10, 0x00, 0x08, 0x80, //# # . ##
-0x80, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, //# ########
-0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //#####
-//Level: 20
-0x0D, 0x0C,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x00, // #######
-0x00, 0x00, 0x08, 0x00, 0x80, 0x08, 0x00, // # # #
-0x00, 0x00, 0x08, 0x00, 0x44, 0x08, 0x00, // # $$ #
-0x88, 0x88, 0x88, 0x04, 0x80, 0x08, 0x00, //###### $# #
-0x81, 0x11, 0x88, 0x80, 0x80, 0x08, 0x80, //#...### # ##
-0x81, 0x00, 0x80, 0x04, 0x08, 0x00, 0x80, //#. # $ # #
-0x81, 0x00, 0x00, 0x40, 0x40, 0x40, 0x80, //#. $ $ $ #
-0x81, 0x00, 0x80, 0x04, 0x08, 0x00, 0x80, //#. # $ # #
-0x81, 0x11, 0x88, 0x80, 0x80, 0x08, 0x80, //#...### # ##
-0x88, 0x88, 0x88, 0x04, 0x00, 0x08, 0x00, //###### $ #
-0x00, 0x00, 0x08, 0x20, 0x80, 0x08, 0x00, // #@ # #
-0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x00, // #######
-//Level: 21
-0x08, 0x08,//Size x and y
-0x00, 0x88, 0x88, 0x00, // ####
-0x00, 0x81, 0x18, 0x00, // #..#
-0x08, 0x80, 0x18, 0x80, // ## .##
-0x08, 0x00, 0x41, 0x80, // # $.#
-0x88, 0x04, 0x00, 0x88, //## $ ##
-0x80, 0x08, 0x44, 0x08, //# #$$ #
-0x80, 0x02, 0x00, 0x08, //# @ #
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 22
-0x09, 0x09,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-0x88, 0x00, 0x00, 0x08, 0x80, //## ##
-0x80, 0x81, 0x40, 0x40, 0x80, //# #.$ $ #
-0x80, 0x15, 0x14, 0x00, 0x80, //# .*.$ #
-0x80, 0x41, 0x81, 0x40, 0x80, //# $.#.$ #
-0x80, 0x04, 0x18, 0x10, 0x80, //# $.#. #
-0x80, 0x40, 0x41, 0x80, 0x80, //# $ $.# #
-0x88, 0x00, 0x20, 0x08, 0x80, //## @ ##
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-//Level: 23
-0x10, 0x0C,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, // #########
-0x88, 0x88, 0x88, 0x88, 0x28, 0x80, 0x01, 0x18, //########@## ..#
-0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x18, //# $ ..#
-0x80, 0x40, 0x84, 0x08, 0x48, 0x80, 0x01, 0x18, //# $ #$ #$## ..#
-0x88, 0x08, 0x80, 0x00, 0x08, 0x88, 0x81, 0x18, //## ## ####..#
-0x08, 0x04, 0x04, 0x88, 0x08, 0x00, 0x88, 0x88, // # $ $## # ####
-0x08, 0x08, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, // # ## # #
-0x88, 0x08, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, //## # ##
-0x80, 0x04, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, //# $ ##
-0x80, 0x08, 0x84, 0x08, 0x00, 0x00, 0x00, 0x00, //# ##$ #
-0x80, 0x08, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, //# ## #
-0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, //########
-//Level: 24
-0x0F, 0x09,//Size x and y
-0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // #####
-0x00, 0x80, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // # #########
-0x00, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 0x80, // # $ $ #
-0x88, 0x88, 0x80, 0x04, 0x08, 0x44, 0x00, 0x80, //##### $ #$$ #
-0x80, 0x00, 0x80, 0x88, 0x00, 0x00, 0x88, 0x80, //# # ## ###
-0x81, 0x11, 0x00, 0x08, 0x80, 0x04, 0x80, 0x00, //#... ## $#
-0x81, 0x11, 0x84, 0x40, 0x04, 0x00, 0x80, 0x00, //#...#$$ $ #
-0x81, 0x11, 0x80, 0x02, 0x80, 0x08, 0x80, 0x00, //#...# @# ##
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, //############
-//Level: 25
-0x09, 0x08,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x00, // #######
-0x08, 0x02, 0x11, 0x18, 0x00, // # @...#
-0x08, 0x00, 0x08, 0x88, 0x80, // # ####
-0x88, 0x84, 0x00, 0x00, 0x80, //###$ #
-0x80, 0x00, 0x84, 0x80, 0x80, //# #$# #
-0x80, 0x40, 0x80, 0x00, 0x80, //# $ # #
-0x80, 0x00, 0x88, 0x88, 0x80, //# #####
-0x88, 0x88, 0x80, 0x00, 0x00, //#####
-//Level: 26
-0x0F, 0x0D,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###############
-0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, //# # # #
-0x80, 0x44, 0x00, 0x40, 0x00, 0x40, 0x40, 0x80, //# $$ $ $ $ #
-0x80, 0x04, 0x08, 0x88, 0x88, 0x80, 0x80, 0x80, //# $ ###### # #
-0x80, 0x44, 0x08, 0x20, 0x08, 0x00, 0x40, 0x80, //# $$ #@ # $ #
-0x80, 0x00, 0x08, 0x00, 0x40, 0x00, 0x08, 0x80, //# # $ ##
-0x88, 0x88, 0x88, 0x48, 0x80, 0x08, 0x81, 0x80, //######$## ##.#
-0x08, 0x00, 0x08, 0x04, 0x00, 0x08, 0x11, 0x80, // # # $ #..#
-0x08, 0x00, 0x00, 0x40, 0x00, 0x81, 0x11, 0x80, // # $ #...#
-0x08, 0x80, 0x88, 0x88, 0x08, 0x01, 0x11, 0x80, // ## #### # ...#
-0x08, 0x00, 0x40, 0x00, 0x45, 0x11, 0x11, 0x80, // # $ $*....#
-0x08, 0x00, 0x08, 0x00, 0x08, 0x10, 0x01, 0x80, // # # #. .#
-0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ##############
-//Level: 27
-0x09, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x00, 0x00, //######
-0x80, 0x00, 0x08, 0x00, 0x00, //# #
-0x80, 0x44, 0x48, 0x80, 0x00, //# $$$##
-0x80, 0x08, 0x11, 0x88, 0x80, //# #..###
-0x88, 0x00, 0x11, 0x40, 0x80, //## ..$ #
-0x08, 0x02, 0x00, 0x00, 0x80, // # @ #
-0x08, 0x88, 0x88, 0x88, 0x80, // ########
-//Level: 28
-0x0E, 0x09,//Size x and y
-0x88, 0x88, 0x88, 0x00, 0x08, 0x88, 0x88, //###### #####
-0x80, 0x00, 0x08, 0x88, 0x08, 0x00, 0x18, //# ### # .#
-0x80, 0x04, 0x04, 0x08, 0x08, 0x11, 0x18, //# $ $ # #...#
-0x80, 0x80, 0x04, 0x08, 0x88, 0x00, 0x18, //# # $ ### .#
-0x80, 0x04, 0x44, 0x00, 0x04, 0x02, 0x18, //# $$$ $ @.#
-0x88, 0x80, 0x04, 0x00, 0x48, 0x00, 0x18, //### $ $# .#
-0x00, 0x80, 0x04, 0x84, 0x08, 0x11, 0x18, // # $#$ #...#
-0x00, 0x88, 0x00, 0x00, 0x08, 0x00, 0x18, // ## # .#
-0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, // ###########
-//Level: 29
-0x09, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x80, 0x00, //#######
-0x80, 0x01, 0x40, 0x88, 0x80, //# .$ ###
-0x80, 0x14, 0x14, 0x00, 0x80, //# .$.$ #
-0x85, 0x41, 0x41, 0x20, 0x80, //#*$.$.@ #
-0x80, 0x14, 0x14, 0x08, 0x80, //# .$.$ ##
-0x80, 0x01, 0x40, 0x08, 0x00, //# .$ #
-0x88, 0x88, 0x88, 0x88, 0x00, //########
-//Level: 30
-0x0A, 0x09,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-0x81, 0x11, 0x88, 0x00, 0x80, //#...## #
-0x81, 0x51, 0x00, 0x42, 0x80, //#.*. $@#
-0x80, 0x04, 0x80, 0x08, 0x80, //# $# ##
-0x88, 0x80, 0x88, 0x08, 0x88, //### ## ###
-0x80, 0x00, 0x40, 0x00, 0x08, //# $ #
-0x80, 0x04, 0x88, 0x48, 0x08, //# $##$# #
-0x80, 0x00, 0x04, 0x00, 0x18, //# $ .#
-0x88, 0x88, 0x88, 0x88, 0x88, //##########
-//Level: 31
-0x08, 0x07,//Size x and y
-0x00, 0x88, 0x88, 0x80, // #####
-0x88, 0x80, 0x02, 0x80, //### @#
-0x80, 0x04, 0x10, 0x88, //# $. ##
-0x80, 0x01, 0x41, 0x08, //# .$. #
-0x88, 0x80, 0x54, 0x08, //### *$ #
-0x00, 0x80, 0x00, 0x88, // # ##
-0x00, 0x88, 0x88, 0x80, // #####
-//Level: 32
-0x0E, 0x0D,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, // ####
-0x88, 0x88, 0x88, 0x88, 0x00, 0x88, 0x88, //######## ####
-0x80, 0x00, 0x88, 0x11, 0x11, 0x10, 0x08, //# ##..... #
-0x80, 0x04, 0x00, 0x88, 0x11, 0x18, 0x08, //# $ ##...# #
-0x88, 0x00, 0x40, 0x08, 0x88, 0x08, 0x08, //## $ ### # #
-0x08, 0x08, 0x04, 0x00, 0x80, 0x00, 0x08, // # # $ # #
-0x08, 0x00, 0x80, 0x40, 0x08, 0x00, 0x08, // # # $ # #
-0x08, 0x00, 0x08, 0x04, 0x00, 0x80, 0x08, // # # $ # #
-0x08, 0x00, 0x00, 0x80, 0x40, 0x80, 0x88, // # # $ # ##
-0x08, 0x88, 0x80, 0x08, 0x04, 0x00, 0x80, // #### # $ #
-0x00, 0x00, 0x88, 0x00, 0x80, 0x40, 0x80, // ## # $ #
-0x00, 0x00, 0x08, 0x82, 0x80, 0x00, 0x80, // ##@# #
-0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // #######
-//Level: 33
-0x0A, 0x08,//Size x and y
-0x00, 0x88, 0x88, 0x80, 0x00, // #####
-0x88, 0x80, 0x00, 0x88, 0x88, //### ####
-0x80, 0x00, 0x40, 0x40, 0x08, //# $ $ #
-0x80, 0x40, 0x00, 0x40, 0x28, //# $ $ @#
-0x88, 0x84, 0x48, 0x88, 0x88, //###$$#####
-0x00, 0x80, 0x01, 0x18, 0x00, // # ..#
-0x00, 0x81, 0x11, 0x18, 0x00, // #....#
-0x00, 0x88, 0x88, 0x88, 0x00, // ######
-//Level: 34
-0x09, 0x0C,//Size x and y
-0x88, 0x88, 0x08, 0x88, 0x80, //#### ####
-0x80, 0x08, 0x88, 0x00, 0x80, //# ### #
-0x80, 0x00, 0x04, 0x00, 0x80, //# $ #
-0x80, 0x08, 0x08, 0x00, 0x80, //# # # #
-0x88, 0x08, 0x08, 0x48, 0x80, //## # #$##
-0x80, 0x08, 0x18, 0x00, 0x80, //# #.# #
-0x80, 0x05, 0x15, 0x02, 0x80, //# *.* @#
-0x80, 0x08, 0x18, 0x08, 0x80, //# #.# ##
-0x88, 0x88, 0x00, 0x08, 0x00, //#### #
-0x00, 0x08, 0x08, 0x48, 0x00, // # #$#
-0x00, 0x08, 0x00, 0x08, 0x00, // # #
-0x00, 0x08, 0x88, 0x88, 0x00, // #####
-//Level: 35
-0x0A, 0x06,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-0x80, 0x40, 0x11, 0x00, 0x80, //# $ .. #
-0x82, 0x44, 0x11, 0x04, 0x88, //#@$$.. $##
-0x80, 0x40, 0x11, 0x04, 0x08, //# $ .. $ #
-0x88, 0x88, 0x88, 0x00, 0x08, //###### #
-0x00, 0x00, 0x08, 0x88, 0x88, // #####
-//Level: 36
-0x0F, 0x07,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ######
-0x88, 0x88, 0x80, 0x00, 0x08, 0x88, 0x88, 0x80, //##### ######
-0x80, 0x00, 0x80, 0x00, 0x20, 0x08, 0x00, 0x80, //# # @ # #
-0x80, 0x04, 0x15, 0x55, 0x55, 0x51, 0x40, 0x80, //# $.******.$ #
-0x88, 0x88, 0x00, 0x00, 0x80, 0x08, 0x00, 0x80, //#### # # #
-0x00, 0x08, 0x80, 0x00, 0x80, 0x00, 0x08, 0x80, // ## # ##
-0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ##########
-//Level: 37
-0x09, 0x09,//Size x and y
-0x00, 0x88, 0x88, 0x80, 0x00, // #####
-0x88, 0x80, 0x20, 0x88, 0x80, //### @ ###
-0x80, 0x04, 0x04, 0x00, 0x80, //# $ $ #
-0x80, 0x51, 0x51, 0x50, 0x80, //# *.*.* #
-0x80, 0x14, 0x04, 0x10, 0x80, //# .$ $. #
-0x80, 0x51, 0x51, 0x50, 0x80, //# *.*.* #
-0x80, 0x04, 0x04, 0x00, 0x80, //# $ $ #
-0x88, 0x88, 0x88, 0x00, 0x80, //###### #
-0x00, 0x00, 0x08, 0x88, 0x80, // ####
-//Level: 38
-0x11, 0x0E,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // #######
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x11, 0x80, // # ...#
-0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x01, 0x11, 0x80, // ##### ...#
-0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x01, 0x80, // # . .#
-0x00, 0x00, 0x00, 0x80, 0x08, 0x80, 0x01, 0x11, 0x80, // # ## ...#
-0x00, 0x00, 0x00, 0x88, 0x08, 0x80, 0x01, 0x11, 0x80, // ## ## ...#
-0x00, 0x00, 0x08, 0x88, 0x08, 0x88, 0x88, 0x88, 0x80, // ### ########
-0x00, 0x00, 0x08, 0x04, 0x44, 0x08, 0x80, 0x00, 0x00, // # $$$ ##
-0x08, 0x88, 0x88, 0x00, 0x40, 0x40, 0x88, 0x88, 0x80, // ##### $ $ #####
-0x88, 0x00, 0x08, 0x40, 0x40, 0x00, 0x80, 0x00, 0x80, //## #$ $ # #
-0x82, 0x04, 0x00, 0x40, 0x00, 0x04, 0x00, 0x40, 0x80, //#@ $ $ $ $ #
-0x88, 0x88, 0x88, 0x04, 0x40, 0x40, 0x88, 0x88, 0x80, //###### $$ $ #####
-0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // # #
-0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ########
-//Level: 39
-0x0A, 0x07,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x80, // ######
-0x08, 0x88, 0x00, 0x00, 0x80, // ### #
-0x88, 0x10, 0x48, 0x80, 0x88, //##. $## ##
-0x81, 0x14, 0x04, 0x00, 0x28, //#..$ $ @#
-0x81, 0x10, 0x40, 0x40, 0x88, //#.. $ $ ##
-0x88, 0x88, 0x80, 0x00, 0x80, //##### #
-0x00, 0x00, 0x88, 0x88, 0x80, // #####
-//Level: 40
-0x11, 0x0D,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, // ########
-0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, 0x00, // # #
-0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0x04, 0x08, 0x00, // # $ $ #
-0x08, 0x88, 0x88, 0x88, 0x80, 0x40, 0x40, 0x08, 0x00, // ######## $ $ #
-0x88, 0x11, 0x10, 0x08, 0x88, 0x80, 0x88, 0x08, 0x00, //##... #### ## #
-0x81, 0x11, 0x10, 0x00, 0x00, 0x00, 0x88, 0x08, 0x00, //#.... ## #
-0x88, 0x11, 0x10, 0x08, 0x80, 0x44, 0x88, 0x08, 0x80, //##... ## $$## ##
-0x08, 0x88, 0x88, 0x88, 0x80, 0x40, 0x00, 0x02, 0x80, // ######## $ @#
-0x00, 0x00, 0x00, 0x88, 0x80, 0x88, 0x88, 0x08, 0x80, // ### #### ##
-0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x00, 0x08, 0x00, // # $ $ #
-0x00, 0x00, 0x00, 0x80, 0x04, 0x08, 0x88, 0x88, 0x00, // # $ #####
-0x00, 0x00, 0x00, 0x88, 0x00, 0x08, 0x00, 0x00, 0x00, // ## #
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // #####
-//Level: 41
-0x07, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x80, //#######
-0x80, 0x00, 0x00, 0x80, //# #
-0x80, 0x00, 0x00, 0x80, //# #
-0x80, 0x08, 0x00, 0x80, //# # #
-0x84, 0x44, 0x44, 0x80, //#$$$$$#
-0x81, 0x13, 0x11, 0x80, //#..+..#
-0x88, 0x88, 0x88, 0x80, //#######
-//Level: 42
-0x0E, 0x0C,//Size x and y
-0x08, 0x88, 0x88, 0x80, 0x88, 0x88, 0x80, // ###### #####
-0x88, 0x28, 0x00, 0x88, 0x80, 0x00, 0x88, //##@# ### ##
-0x80, 0x00, 0x04, 0x00, 0x80, 0x40, 0x08, //# $ # $ #
-0x80, 0x04, 0x00, 0x80, 0x00, 0x04, 0x08, //# $ # $ #
-0x88, 0x80, 0x88, 0x88, 0x88, 0x00, 0x08, //### ###### #
-0x88, 0x80, 0x88, 0x00, 0x88, 0x48, 0x88, //### ## ##$###
-0x80, 0x40, 0x08, 0x88, 0x80, 0x11, 0x80, //# $ #### ..#
-0x80, 0x40, 0x40, 0x40, 0x01, 0x11, 0x80, //# $ $ $ ...#
-0x80, 0x00, 0x08, 0x88, 0x81, 0x11, 0x80, //# ####...#
-0x80, 0x44, 0x08, 0x00, 0x81, 0x11, 0x80, //# $$ # #...#
-0x80, 0x08, 0x88, 0x00, 0x88, 0x88, 0x80, //# ### #####
-0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //####
-//Level: 43
-0x07, 0x09,//Size x and y
-0x88, 0x88, 0x88, 0x80, //#######
-0x80, 0x05, 0x02, 0x80, //# * @#
-0x80, 0x45, 0x40, 0x80, //# $*$ #
-0x80, 0x01, 0x00, 0x80, //# . #
-0x80, 0x45, 0x40, 0x80, //# $*$ #
-0x84, 0x15, 0x10, 0x80, //#$.*. #
-0x81, 0x01, 0x41, 0x80, //#. .$.#
-0x80, 0x41, 0x00, 0x80, //# $. #
-0x88, 0x88, 0x88, 0x80, //#######
-//Level: 44
-0x13, 0x0C,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ###########
-0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, // # #
-0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x40, 0x40, 0x08, 0x00, // # $ $ #
-0x88, 0x88, 0x88, 0x08, 0x04, 0x08, 0x88, 0x88, 0x08, 0x00, //###### # $ ##### #
-0x80, 0x00, 0x08, 0x88, 0x88, 0x04, 0x00, 0x88, 0x48, 0x00, //# ##### $ ##$#
-0x80, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x08, 0x00, //# $ $ #
-0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x88, 0x08, 0x00, //# ## ## #
-0x80, 0x00, 0x08, 0x82, 0x88, 0x88, 0x80, 0x88, 0x08, 0x00, //# ##@##### ## #
-0x80, 0x00, 0x08, 0x88, 0x80, 0x00, 0x80, 0x88, 0x08, 0x80, //# #### # ## ##
-0x81, 0x11, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x80, //#....# # $ #
-0x81, 0x11, 0x18, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, //#....# # #
-0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, //###### #######
-//Level: 45
-0x12, 0x0C,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x88, 0x88, // ##### ####
-0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x88, 0x80, 0x08, // # #### #
-0x08, 0x88, 0x88, 0x88, 0x08, 0x00, 0x04, 0x04, 0x08, // ####### # $ $ #
-0x08, 0x00, 0x08, 0x80, 0x04, 0x08, 0x80, 0x80, 0x08, // # ## $ ## # #
-0x08, 0x04, 0x00, 0x01, 0x18, 0x18, 0x80, 0x40, 0x88, // # $ ..#.## $ ##
-0x08, 0x04, 0x08, 0x81, 0x11, 0x10, 0x40, 0x80, 0x80, // # $ ##.... $ # #
-0x08, 0x08, 0x00, 0x41, 0x11, 0x18, 0x80, 0x40, 0x80, // # # $....## $ #
-0x88, 0x44, 0x08, 0x81, 0x81, 0x10, 0x00, 0x40, 0x80, //##$$ ##.#.. $ #
-0x80, 0x08, 0x08, 0x80, 0x40, 0x08, 0x80, 0x20, 0x80, //# # ## $ ## @ #
-0x80, 0x00, 0x00, 0x40, 0x80, 0x88, 0x88, 0x88, 0x80, //# $ # #######
-0x80, 0x08, 0x88, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, //# #### #
-0x88, 0x88, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, //#### #####
-//Level: 46
-0x0A, 0x07,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x00, // #######
-0x08, 0x00, 0x00, 0x08, 0x88, // # ###
-0x88, 0x48, 0x88, 0x00, 0x08, //##$### #
-0x80, 0x20, 0x40, 0x04, 0x08, //# @ $ $ #
-0x80, 0x11, 0x80, 0x40, 0x88, //# ..# $ ##
-0x88, 0x11, 0x80, 0x00, 0x80, //##..# #
-0x08, 0x88, 0x88, 0x88, 0x80, // ########
-//Level: 47
-0x11, 0x0C,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ########
-0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // # #
-0x00, 0x80, 0x04, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // # $ #####
-0x00, 0x88, 0x88, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, // #### $ #
-0x00, 0x80, 0x08, 0x84, 0x80, 0x40, 0x08, 0x00, 0x00, // # ##$# $ #
-0x00, 0x80, 0x00, 0x02, 0x80, 0x80, 0x88, 0x88, 0x80, // # @# # #####
-0x08, 0x80, 0x88, 0x04, 0x04, 0x04, 0x40, 0x00, 0x80, // ## ## $ $ $$ #
-0x08, 0x00, 0x08, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, // # # # # #
-0x88, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //## ############
-0x81, 0x11, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#....#
-0x81, 0x11, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#....#
-0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //######
-//Level: 48
-0x0F, 0x0D,//Size x and y
-0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // #########
-0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, // # #
-0x00, 0x00, 0x00, 0x84, 0x04, 0x44, 0x00, 0x80, // #$ $$$ #
-0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x40, 0x80, // # # $ #
-0x00, 0x00, 0x00, 0x80, 0x00, 0x42, 0x40, 0x80, // # $@$ #
-0x00, 0x00, 0x88, 0x84, 0x04, 0x08, 0x08, 0x80, // ###$ $ # ##
-0x00, 0x00, 0x80, 0x00, 0x48, 0x48, 0x08, 0x00, // # $#$# #
-0x88, 0x88, 0x80, 0x80, 0x08, 0x00, 0x08, 0x00, //##### # # #
-0x81, 0x11, 0x00, 0x80, 0x48, 0x08, 0x88, 0x00, //#... # $# ###
-0x81, 0x11, 0x11, 0x00, 0x08, 0x08, 0x00, 0x00, //#..... # #
-0x81, 0x11, 0x11, 0x80, 0x48, 0x08, 0x00, 0x00, //#.....# $# #
-0x88, 0x88, 0x88, 0x88, 0x00, 0x08, 0x00, 0x00, //######## #
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // #####
-//Level: 49
-0x0C, 0x07,//Size x and y
-0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // #####
-0x00, 0x80, 0x00, 0x88, 0x88, 0x88, // # ######
-0x88, 0x84, 0x81, 0x00, 0x00, 0x08, //###$#. #
-0x80, 0x40, 0x11, 0x18, 0x04, 0x08, //# $ ...# $ #
-0x82, 0x04, 0x18, 0x54, 0x00, 0x08, //#@ $.#*$ #
-0x88, 0x88, 0x00, 0x00, 0x88, 0x88, //#### ####
-0x00, 0x08, 0x88, 0x88, 0x80, 0x00, // ######
-//Level: 50
-0x07, 0x07,//Size x and y
-0x08, 0x88, 0x88, 0x80, // ######
-0x88, 0x01, 0x02, 0x80, //## . @#
-0x80, 0x40, 0x40, 0x80, //# $ $ #
-0x81, 0x05, 0x01, 0x80, //#. * .#
-0x80, 0x40, 0x40, 0x80, //# $ $ #
-0x80, 0x01, 0x08, 0x80, //# . ##
-0x88, 0x88, 0x88, 0x00, //######
-//Level: 51
-0x08, 0x07,//Size x and y
-0x00, 0x00, 0x88, 0x88, // ####
-0x00, 0x00, 0x82, 0x08, // #@ #
-0x88, 0x88, 0x80, 0x18, //##### .#
-0x80, 0x40, 0x40, 0x48, //# $ $ $#
-0x80, 0x00, 0x10, 0x08, //# . #
-0x88, 0x80, 0x10, 0x08, //### . #
-0x00, 0x88, 0x88, 0x88, // ######
-//Level: 52
-0x13, 0x0D,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // #################
-0x88, 0x82, 0x88, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x80, //###@## ...#
-0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x80, //# # ...#
-0x80, 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x80, //# $ # ...#
-0x80, 0x44, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x80, //# $$ # ...#
-0x88, 0x04, 0x08, 0x88, 0x48, 0x88, 0x88, 0x88, 0x88, 0x80, //## $ ###$##########
-0x08, 0x08, 0x88, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, // # ### $ #
-0x88, 0x00, 0x04, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, //## $ $ #
-0x80, 0x04, 0x08, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, //# $ # $ #
-0x80, 0x40, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //# $ # #
-0x80, 0x04, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //# $ # #
-0x80, 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //# # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //###########
-//Level: 53
-0x10, 0x0C,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // ######
-0x00, 0x08, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, // # ##
-0x00, 0x08, 0x04, 0x04, 0x08, 0x80, 0x00, 0x00, // # $ $ ##
-0x88, 0x88, 0x08, 0x48, 0x00, 0x88, 0x88, 0x00, //#### #$# ####
-0x80, 0x40, 0x00, 0x04, 0x00, 0x80, 0x08, 0x88, //# $ $ # ###
-0x80, 0x00, 0x04, 0x08, 0x04, 0x11, 0x11, 0x18, //# $ # $.....#
-0x88, 0x80, 0x80, 0x88, 0x88, 0x11, 0x11, 0x18, //### # ####.....#
-0x08, 0x80, 0x84, 0x04, 0x00, 0x11, 0x88, 0x88, // ## #$ $ ..####
-0x08, 0x00, 0x80, 0x00, 0x48, 0x00, 0x80, 0x00, // # # $# #
-0x08, 0x24, 0x00, 0x40, 0x08, 0x88, 0x80, 0x00, // #@$ $ ####
-0x08, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // # ######
-0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // ####
-//Level: 54
-0x0C, 0x06,//Size x and y
-0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // ####
-0x00, 0x00, 0x00, 0x80, 0x08, 0x88, // # ###
-0x88, 0x88, 0x88, 0x80, 0x00, 0x08, //####### #
-0x80, 0x40, 0x51, 0x05, 0x14, 0x28, //# $ *. *.$@#
-0x80, 0x00, 0x00, 0x80, 0x00, 0x08, //# # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############
-//Level: 55
-0x0D, 0x0C,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, // #####
-0x08, 0x88, 0x88, 0x88, 0x00, 0x08, 0x80, // ####### ##
-0x88, 0x08, 0x02, 0x88, 0x04, 0x40, 0x80, //## # @## $$ #
-0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, //# $ #
-0x80, 0x04, 0x00, 0x88, 0x80, 0x00, 0x80, //# $ ### #
-0x88, 0x80, 0x88, 0x88, 0x84, 0x88, 0x80, //### #####$###
-0x80, 0x40, 0x08, 0x88, 0x01, 0x18, 0x00, //# $ ### ..#
-0x80, 0x40, 0x40, 0x40, 0x11, 0x18, 0x00, //# $ $ $ ...#
-0x80, 0x00, 0x08, 0x88, 0x11, 0x18, 0x00, //# ###...#
-0x80, 0x44, 0x08, 0x08, 0x11, 0x18, 0x00, //# $$ # #...#
-0x80, 0x08, 0x88, 0x08, 0x88, 0x88, 0x00, //# ### #####
-0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //####
-//Level: 56
-0x0D, 0x0F,//Size x and y
-0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, // ####
-0x00, 0x88, 0x88, 0x80, 0x08, 0x00, 0x00, // ##### #
-0x08, 0x80, 0x00, 0x00, 0x48, 0x00, 0x00, // ## $#
-0x88, 0x04, 0x00, 0x88, 0x08, 0x88, 0x00, //## $ ## ###
-0x82, 0x40, 0x40, 0x80, 0x40, 0x08, 0x00, //#@$ $ # $ #
-0x88, 0x88, 0x08, 0x80, 0x00, 0x48, 0x00, //#### ## $#
-0x08, 0x11, 0x11, 0x84, 0x04, 0x08, 0x00, // #....#$ $ #
-0x08, 0x11, 0x11, 0x80, 0x00, 0x48, 0x00, // #....# $#
-0x08, 0x11, 0x11, 0x00, 0x44, 0x08, 0x80, // #.... $$ ##
-0x08, 0x11, 0x10, 0x80, 0x40, 0x00, 0x80, // #... # $ #
-0x08, 0x88, 0x88, 0x84, 0x04, 0x00, 0x80, // ######$ $ #
-0x00, 0x00, 0x00, 0x80, 0x00, 0x88, 0x80, // # ###
-0x00, 0x00, 0x00, 0x84, 0x08, 0x88, 0x00, // #$ ###
-0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, // # #
-0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, // ####
-//Level: 57
-0x0A, 0x08,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x00, // #######
-0x08, 0x11, 0x11, 0x08, 0x00, // #.... #
-0x88, 0x81, 0x11, 0x48, 0x88, //###...$###
-0x80, 0x04, 0x84, 0x04, 0x08, //# $#$ $ #
-0x80, 0x44, 0x00, 0x84, 0x08, //# $$ #$ #
-0x80, 0x00, 0x08, 0x00, 0x08, //# # #
-0x88, 0x88, 0x02, 0x08, 0x88, //#### @ ###
-0x00, 0x08, 0x88, 0x88, 0x00, // #####
-//Level: 58
-0x0D, 0x0A,//Size x and y
-0x88, 0x88, 0x88, 0x00, 0x88, 0x88, 0x80, //###### #####
-0x80, 0x00, 0x08, 0x88, 0x80, 0x00, 0x80, //# #### #
-0x80, 0x40, 0x00, 0x40, 0x00, 0x80, 0x80, //# $ $ # #
-0x88, 0x00, 0x80, 0x88, 0x80, 0x40, 0x80, //## # ### $ #
-0x08, 0x44, 0x00, 0x88, 0x84, 0x80, 0x80, // #$$ ###$# #
-0x88, 0x00, 0x08, 0x00, 0x11, 0x10, 0x80, //## # ... #
-0x80, 0x08, 0x04, 0x00, 0x41, 0x11, 0x80, //# # $ $...#
-0x80, 0x08, 0x88, 0x88, 0x11, 0x88, 0x80, //# #####..###
-0x80, 0x28, 0x00, 0x08, 0x88, 0x80, 0x00, //# @# ####
-0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //####
-//Level: 59
-0x0E, 0x0C,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, // #######
-0x00, 0x00, 0x88, 0x88, 0x11, 0x11, 0x18, // ####.....#
-0x88, 0x88, 0x80, 0x00, 0x11, 0x11, 0x18, //##### .....#
-0x80, 0x00, 0x80, 0x08, 0x10, 0x11, 0x18, //# # #. ...#
-0x80, 0x42, 0x88, 0x08, 0x88, 0x08, 0x88, //# $@## ### ###
-0x80, 0x04, 0x00, 0x04, 0x00, 0x44, 0x08, //# $ $ $$ #
-0x80, 0x00, 0x84, 0x00, 0x04, 0x00, 0x08, //# #$ $ #
-0x80, 0x40, 0x80, 0x88, 0x40, 0x04, 0x08, //# $ # ##$ $ #
-0x88, 0x80, 0x00, 0x04, 0x08, 0x80, 0x08, //### $ ## #
-0x00, 0x80, 0x40, 0x40, 0x40, 0x00, 0x88, // # $ $ $ ##
-0x00, 0x88, 0x80, 0x00, 0x08, 0x88, 0x80, // ### ####
-0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, // ######
-//Level: 60
-0x0B, 0x0A,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x80, 0x00, // ######
-0x88, 0x88, 0x80, 0x00, 0x80, 0x00, //##### #
-0x80, 0x40, 0x01, 0x00, 0x80, 0x00, //# $ . #
-0x80, 0x40, 0x11, 0x88, 0x80, 0x00, //# $ ..###
-0x82, 0x40, 0x44, 0x88, 0x80, 0x00, //#@$ $$###
-0x88, 0x80, 0x14, 0x10, 0x88, 0x80, //### .$. ###
-0x08, 0x84, 0x11, 0x14, 0x00, 0x80, // ##$...$ #
-0x08, 0x04, 0x18, 0x80, 0x00, 0x80, // # $.## #
-0x08, 0x00, 0x08, 0x88, 0x88, 0x80, // # ######
-0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // #####
-//Level: 61
-0x07, 0x08,//Size x and y
-0x88, 0x88, 0x80, 0x00, //#####
-0x80, 0x00, 0x88, 0x80, //# ###
-0x80, 0x04, 0x00, 0x80, //# $ #
-0x88, 0x44, 0x01, 0x80, //##$$ .#
-0x08, 0x20, 0x10, 0x80, // #@ . #
-0x08, 0x80, 0x80, 0x80, // ## # #
-0x00, 0x80, 0x01, 0x80, // # .#
-0x00, 0x88, 0x88, 0x80, // #####
-//Level: 62
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x80, 0x00, 0x80, 0x08, //# # #
-0x80, 0x81, 0x40, 0x48, //# #.$ $#
-0x80, 0x00, 0x40, 0x08, //# $ #
-0x88, 0x88, 0x81, 0x08, //#####. #
-0x00, 0x80, 0x00, 0x28, // # @#
-0x00, 0x80, 0x00, 0x18, // # .#
-0x00, 0x88, 0x88, 0x88, // ######
-//Level: 63
-0x08, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x80, 0x08, 0x00, 0x08, //# # #
-0x80, 0x41, 0x14, 0x08, //# $..$ #
-0x82, 0x41, 0x50, 0x88, //#@$.* ##
-0x80, 0x41, 0x14, 0x08, //# $..$ #
-0x80, 0x08, 0x00, 0x08, //# # #
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 64
-0x0F, 0x0E,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // #####
-0x00, 0x08, 0x88, 0x00, 0x08, 0x00, 0x00, 0x00, // ### #
-0x00, 0x08, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, // # # #
-0x08, 0x88, 0x00, 0x40, 0x08, 0x88, 0x88, 0x80, // ### $ ######
-0x08, 0x00, 0x84, 0x80, 0x08, 0x00, 0x00, 0x80, // # #$# # #
-0x08, 0x40, 0x40, 0x88, 0x00, 0x04, 0x00, 0x80, // #$ $ ## $ #
-0x88, 0x00, 0x80, 0x00, 0x04, 0x44, 0x88, 0x80, //## # $$$###
-0x80, 0x00, 0x08, 0x88, 0x40, 0x00, 0x80, 0x00, //# ###$ #
-0x80, 0x48, 0x44, 0x11, 0x18, 0x88, 0x80, 0x00, //# $#$$...####
-0x80, 0x00, 0x08, 0x11, 0x11, 0x80, 0x00, 0x00, //# #....#
-0x80, 0x80, 0x20, 0x81, 0x11, 0x80, 0x00, 0x00, //# # @ #...#
-0x80, 0x00, 0x00, 0x41, 0x11, 0x80, 0x00, 0x00, //# $...#
-0x88, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, //## # #
-0x08, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ##########
-//Level: 65
-0x0B, 0x0A,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x80, 0x00, //#########
-0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //# #
-0x80, 0x04, 0x04, 0x04, 0x80, 0x00, //# $ $ $#
-0x88, 0x08, 0x48, 0x80, 0x80, 0x00, //## #$## #
-0x08, 0x01, 0x10, 0x11, 0x88, 0x00, // # .. ..##
-0x08, 0x81, 0x10, 0x11, 0x08, 0x00, // ##.. .. #
-0x00, 0x80, 0x88, 0x48, 0x08, 0x80, // # ##$# ##
-0x00, 0x84, 0x04, 0x04, 0x00, 0x80, // #$ $ $ #
-0x00, 0x80, 0x00, 0x00, 0x02, 0x80, // # @#
-0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // #########
-//Level: 66
-0x09, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x00, //########
-0x81, 0x11, 0x11, 0x18, 0x00, //#......#
-0x80, 0x04, 0x08, 0x08, 0x80, //# $ # ##
-0x80, 0x40, 0x80, 0x40, 0x80, //# $ # $ #
-0x88, 0x40, 0x40, 0x40, 0x80, //##$ $ $ #
-0x08, 0x00, 0x20, 0x00, 0x80, // # @ #
-0x08, 0x88, 0x88, 0x88, 0x80, // ########
-//Level: 67
-0x0A, 0x08,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x88, // #####
-0x88, 0x88, 0x88, 0x11, 0x18, //######...#
-0x80, 0x00, 0x42, 0x04, 0x88, //# $@ $##
-0x80, 0x04, 0x08, 0x04, 0x08, //# $ # $ #
-0x81, 0x04, 0x08, 0x40, 0x08, //#. $ #$ #
-0x80, 0x88, 0x88, 0x08, 0x18, //# #### #.#
-0x81, 0x00, 0x00, 0x04, 0x18, //#. $.#
-0x88, 0x88, 0x88, 0x88, 0x88, //##########
-//Level: 68
-0x0B, 0x07,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x88, 0x80, // ########
-0x88, 0x88, 0x20, 0x00, 0x10, 0x80, //####@ . #
-0x80, 0x04, 0x04, 0x04, 0x10, 0x80, //# $ $ $. #
-0x80, 0x01, 0x88, 0x80, 0x18, 0x80, //# .### .##
-0x80, 0x41, 0x40, 0x40, 0x08, 0x00, //# $.$ $ #
-0x80, 0x01, 0x00, 0x88, 0x88, 0x00, //# . ####
-0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //#######
-//Level: 69
-0x08, 0x08,//Size x and y
-0x00, 0x08, 0x88, 0x88, // #####
-0x00, 0x08, 0x02, 0x08, // # @ #
-0x08, 0x88, 0x00, 0x08, // ### #
-0x08, 0x04, 0x04, 0x88, // # $ $##
-0x88, 0x04, 0x00, 0x80, //## $ #
-0x81, 0x00, 0x80, 0x80, //#. # #
-0x81, 0x10, 0x00, 0x80, //#.. #
-0x88, 0x88, 0x88, 0x80, //#######
-//Level: 70
-0x10, 0x0E,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, // ##########
-0x00, 0x08, 0x11, 0x00, 0x80, 0x00, 0x80, 0x00, // #.. # #
-0x00, 0x08, 0x11, 0x00, 0x00, 0x00, 0x80, 0x00, // #.. #
-0x00, 0x08, 0x11, 0x00, 0x80, 0x08, 0x88, 0x80, // #.. # ####
-0x00, 0x88, 0x88, 0x88, 0x80, 0x08, 0x00, 0x88, // ####### # ##
-0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, // # #
-0x00, 0x80, 0x08, 0x00, 0x88, 0x00, 0x80, 0x08, // # # ## # #
-0x88, 0x88, 0x08, 0x80, 0x08, 0x88, 0x80, 0x88, //#### ## #### ##
-0x80, 0x04, 0x00, 0x88, 0x88, 0x80, 0x80, 0x08, //# $ ##### # #
-0x80, 0x80, 0x40, 0x04, 0x00, 0x80, 0x40, 0x08, //# # $ $ # $ #
-0x80, 0x24, 0x00, 0x40, 0x00, 0x80, 0x00, 0x88, //# @$ $ # ##
-0x88, 0x88, 0x08, 0x80, 0x88, 0x88, 0x88, 0x80, //#### ## #######
-0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, // # #
-0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // ######
-//Level: 71
-0x0A, 0x09,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x88, // ########
-0x00, 0x80, 0x00, 0x81, 0x08, // # #. #
-0x08, 0x80, 0x04, 0x11, 0x18, // ## $...#
-0x08, 0x00, 0x40, 0x85, 0x18, // # $ #*.#
-0x88, 0x08, 0x84, 0x80, 0x88, //## ##$# ##
-0x80, 0x00, 0x40, 0x04, 0x08, //# $ $ #
-0x80, 0x00, 0x80, 0x00, 0x08, //# # #
-0x88, 0x88, 0x88, 0x82, 0x08, //#######@ #
-0x00, 0x00, 0x00, 0x88, 0x88, // ####
-//Level: 72
-0x13, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, //#############
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, //# #
-0x80, 0x88, 0x80, 0x44, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, //# ### $$ #
-0x80, 0x00, 0x80, 0x40, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, //# # $ $ #
-0x80, 0x04, 0x88, 0x88, 0x48, 0x88, 0x88, 0x80, 0x00, 0x00, //# $####$######
-0x80, 0x40, 0x88, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, //# $ ## #####
-0x80, 0x04, 0x40, 0x40, 0x00, 0x00, 0x00, 0x01, 0x11, 0x80, //# $$ $ ...#
-0x88, 0x80, 0x88, 0x04, 0x48, 0x00, 0x00, 0x01, 0x11, 0x80, //### ## $$# ...#
-0x00, 0x80, 0x88, 0x00, 0x08, 0x00, 0x00, 0x01, 0x11, 0x80, // # ## # ...#
-0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x11, 0x80, // # # ...#
-0x00, 0x88, 0x82, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ###@#############
-0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ###
-//Level: 73
-0x11, 0x0D,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ######
-0x08, 0x88, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // #### #
-0x08, 0x00, 0x00, 0x88, 0x08, 0x00, 0x00, 0x00, 0x00, // # ## #
-0x08, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // # $ #
-0x88, 0x80, 0x88, 0x88, 0x08, 0x88, 0x88, 0x88, 0x80, //### #### ########
-0x80, 0x04, 0x00, 0x04, 0x08, 0x80, 0x01, 0x11, 0x80, //# $ $ ## ...#
-0x80, 0x00, 0x44, 0x04, 0x40, 0x00, 0x01, 0x11, 0x80, //# $$ $$ ...#
-0x80, 0x00, 0x04, 0x00, 0x48, 0x80, 0x01, 0x11, 0x80, //# $ $## ...#
-0x88, 0x28, 0x80, 0x88, 0x08, 0x80, 0x01, 0x11, 0x80, //##@## ## ## ...#
-0x08, 0x88, 0x00, 0x40, 0x08, 0x88, 0x88, 0x88, 0x80, // ### $ ########
-0x08, 0x00, 0x04, 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, // # $$ #
-0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, // # # #
-0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // #########
-//Level: 74
-0x0F, 0x0F,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###############
-0x80, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x80, //# ##### #
-0x80, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x80, //# . . #
-0x81, 0x81, 0x88, 0x08, 0x81, 0x88, 0x80, 0x80, //#.#.## ##.### #
-0x81, 0x11, 0x00, 0x40, 0x01, 0x11, 0x10, 0x80, //#... $ .... #
-0x88, 0x11, 0x08, 0x08, 0x01, 0x18, 0x80, 0x80, //##.. # # ..## #
-0x88, 0x88, 0x88, 0x08, 0x88, 0x88, 0x80, 0x80, //###### ###### #
-0x80, 0x00, 0x08, 0x08, 0x00, 0x00, 0x80, 0x80, //# # # # #
-0x80, 0x44, 0x08, 0x48, 0x04, 0x40, 0x80, 0x80, //# $$ #$# $$ # #
-0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, //# $ $ $ $ $ # #
-0x80, 0x44, 0x08, 0x48, 0x04, 0x40, 0x80, 0x80, //# $$ #$# $$ # #
-0x80, 0x00, 0x08, 0x28, 0x00, 0x00, 0x80, 0x80, //# #@# # #
-0x80, 0x88, 0x88, 0x08, 0x88, 0x08, 0x80, 0x80, //# #### ### ## #
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###############
-//Level: 75
-0x09, 0x09,//Size x and y
-0x88, 0x88, 0x80, 0x00, 0x00, //#####
-0x82, 0x00, 0x80, 0x00, 0x00, //#@ #
-0x80, 0x44, 0x80, 0x88, 0x80, //# $$# ###
-0x80, 0x40, 0x80, 0x81, 0x80, //# $ # #.#
-0x88, 0x80, 0x88, 0x81, 0x80, //### ###.#
-0x08, 0x80, 0x00, 0x01, 0x80, // ## .#
-0x08, 0x00, 0x08, 0x00, 0x80, // # # #
-0x08, 0x00, 0x08, 0x88, 0x80, // # ####
-0x08, 0x88, 0x88, 0x00, 0x00, // #####
-//Level: 76
-0x0A, 0x09,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, //##########
-0x81, 0x10, 0x00, 0x00, 0x08, //#.. #
-0x81, 0x14, 0x00, 0x80, 0x08, //#..$ # #
-0x80, 0x08, 0x48, 0x80, 0x88, //# #$## ##
-0x80, 0x40, 0x00, 0x00, 0x80, //# $ #
-0x88, 0x88, 0x80, 0x80, 0x80, //##### # #
-0x00, 0x80, 0x40, 0x20, 0x80, // # $ @ #
-0x00, 0x80, 0x00, 0x00, 0x80, // # #
-0x00, 0x88, 0x88, 0x88, 0x80, // #######
-//Level: 77
-0x0C, 0x0D,//Size x and y
-0x08, 0x88, 0x80, 0x00, 0x00, 0x00, // ####
-0x08, 0x00, 0x88, 0x88, 0x88, 0x00, // # ######
-0x08, 0x00, 0x00, 0x04, 0x28, 0x00, // # $@#
-0x88, 0x08, 0x81, 0x88, 0x48, 0x00, //## ##.##$#
-0x80, 0x08, 0x01, 0x08, 0x08, 0x88, //# # . # ###
-0x80, 0x00, 0x51, 0x18, 0x00, 0x08, //# *..# #
-0x88, 0x08, 0x01, 0x04, 0x08, 0x08, //## # . $ # #
-0x88, 0x08, 0x81, 0x80, 0x04, 0x08, //## ##.# $ #
-0x80, 0x08, 0x81, 0x80, 0x88, 0x88, //# ##.# ####
-0x80, 0x44, 0x04, 0x80, 0x08, 0x00, //# $$ $# #
-0x80, 0x08, 0x00, 0x00, 0x08, 0x00, //# # #
-0x88, 0x88, 0x88, 0x80, 0x08, 0x00, //####### #
-0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // ####
-//Level: 78
-0x0D, 0x0A,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // #####
-0x00, 0x88, 0x80, 0x00, 0x88, 0x80, 0x00, // ### ###
-0x08, 0x81, 0x40, 0x00, 0x00, 0x88, 0x00, // ##.$ ##
-0x08, 0x10, 0x44, 0x44, 0x40, 0x08, 0x00, // #. $$$$$ #
-0x88, 0x00, 0x80, 0x00, 0x80, 0x08, 0x80, //## # # ##
-0x80, 0x08, 0x58, 0x28, 0x58, 0x00, 0x80, //# #*#@#*# #
-0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, //# # # #
-0x88, 0x01, 0x44, 0x44, 0x41, 0x08, 0x80, //## .$$$$$. ##
-0x08, 0x81, 0x11, 0x11, 0x11, 0x88, 0x00, // ##.......##
-0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, // #########
-//Level: 79
-0x10, 0x09,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, // #####
-0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, // # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x05, 0x08, 0x88, //########## * ###
-0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, //# . #
-0x80, 0x44, 0x44, 0x55, 0x55, 0x41, 0x11, 0x28, //# $$$$****$...@#
-0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, //# . #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x05, 0x08, 0x88, //########## * ###
-0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, // # #
-0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, // #####
-//Level: 80
-0x11, 0x0D,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //################
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, //# #
-0x80, 0x80, 0x88, 0x88, 0x88, 0x00, 0x00, 0x08, 0x00, //# # ###### #
-0x80, 0x80, 0x04, 0x04, 0x04, 0x04, 0x80, 0x08, 0x00, //# # $ $ $ $# #
-0x80, 0x80, 0x00, 0x42, 0x40, 0x00, 0x88, 0x08, 0x80, //# # $@$ ## ##
-0x80, 0x80, 0x04, 0x04, 0x04, 0x88, 0x81, 0x11, 0x80, //# # $ $ $###...#
-0x80, 0x80, 0x00, 0x40, 0x40, 0x08, 0x81, 0x11, 0x80, //# # $ $ ##...#
-0x80, 0x88, 0x84, 0x44, 0x04, 0x08, 0x81, 0x11, 0x80, //# ###$$$ $ ##...#
-0x80, 0x00, 0x00, 0x80, 0x88, 0x08, 0x81, 0x11, 0x80, //# # ## ##...#
-0x88, 0x88, 0x80, 0x00, 0x88, 0x08, 0x81, 0x11, 0x80, //##### ## ##...#
-0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x88, 0x80, // ##### ###
-0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, // # #
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, // #######
-//Level: 81
-0x06, 0x08,//Size x and y
-0x08, 0x88, 0x80, // ####
-0x88, 0x00, 0x80, //## #
-0x82, 0x40, 0x80, //#@$ #
-0x88, 0x40, 0x88, //##$ ##
-0x88, 0x04, 0x08, //## $ #
-0x81, 0x40, 0x08, //#.$ #
-0x81, 0x15, 0x18, //#..*.#
-0x88, 0x88, 0x88, //######
-//Level: 82
-0x0E, 0x0C,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, // ######
-0x00, 0x88, 0x80, 0x00, 0x08, 0x88, 0x00, // ### ###
-0x00, 0x80, 0x00, 0x84, 0x00, 0x08, 0x88, // # #$ ###
-0x00, 0x80, 0x00, 0x40, 0x00, 0x44, 0x08, // # $ $$ #
-0x00, 0x80, 0x44, 0x08, 0x40, 0x00, 0x08, // # $$ #$ #
-0x00, 0x88, 0x00, 0x04, 0x00, 0x04, 0x08, // ## $ $ #
-0x88, 0x88, 0x88, 0x08, 0x48, 0x88, 0x88, //###### #$#####
-0x81, 0x12, 0x08, 0x40, 0x08, 0x00, 0x00, //#..@ #$ #
-0x81, 0x81, 0x10, 0x04, 0x88, 0x00, 0x00, //#.#.. $##
-0x81, 0x11, 0x14, 0x80, 0x80, 0x00, 0x00, //#....$# #
-0x81, 0x11, 0x10, 0x00, 0x80, 0x00, 0x00, //#.... #
-0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //#########
-//Level: 83
-0x0D, 0x0A,//Size x and y
-0x00, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, // ####
-0x88, 0x88, 0x00, 0x88, 0x88, 0x88, 0x00, //#### ######
-0x80, 0x00, 0x00, 0x88, 0x00, 0x08, 0x00, //# ## #
-0x80, 0x48, 0x04, 0x00, 0x00, 0x48, 0x00, //# $# $ $#
-0x88, 0x08, 0x88, 0x04, 0x80, 0x08, 0x00, //## ### $# #
-0x08, 0x04, 0x04, 0x00, 0x88, 0x08, 0x00, // # $ $ ## #
-0x08, 0x00, 0x04, 0x08, 0x80, 0x08, 0x80, // # $ ## ##
-0x08, 0x40, 0x81, 0x11, 0x50, 0x40, 0x80, // #$ #...* $ #
-0x08, 0x02, 0x80, 0x11, 0x11, 0x11, 0x80, // # @# ......#
-0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ############
-//Level: 84
-0x08, 0x08,//Size x and y
-0x00, 0x88, 0x88, 0x00, // ####
-0x00, 0x80, 0x08, 0x00, // # #
-0x00, 0x80, 0x08, 0x88, // # ###
-0x88, 0x80, 0x11, 0x08, //### .. #
-0x80, 0x04, 0x80, 0x08, //# $# #
-0x80, 0x01, 0x44, 0x08, //# .$$ #
-0x88, 0x88, 0x02, 0x08, //#### @ #
-0x00, 0x08, 0x88, 0x88, // #####
-//Level: 85
-0x08, 0x08,//Size x and y
-0x08, 0x88, 0x88, 0x80, // ######
-0x08, 0x20, 0x00, 0x88, // #@ ##
-0x08, 0x84, 0x00, 0x08, // ##$ #
-0x88, 0x80, 0x10, 0x08, //### . #
-0x80, 0x40, 0x84, 0x88, //# $ #$##
-0x80, 0x10, 0x01, 0x80, //# . .#
-0x88, 0x88, 0x00, 0x80, //#### #
-0x00, 0x08, 0x88, 0x80, // ####
-//Level: 86
-0x0F, 0x0F,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, //#########
-0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, //# #
-0x80, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, //# ####
-0x88, 0x08, 0x88, 0x80, 0x80, 0x08, 0x00, 0x00, //## #### # #
-0x88, 0x08, 0x28, 0x80, 0x00, 0x08, 0x00, 0x00, //## #@## #
-0x80, 0x44, 0x40, 0x40, 0x04, 0x48, 0x00, 0x00, //# $$$ $ $$#
-0x80, 0x08, 0x08, 0x80, 0x40, 0x08, 0x00, 0x00, //# # ## $ #
-0x80, 0x08, 0x08, 0x80, 0x04, 0x08, 0x88, 0x80, //# # ## $ ####
-0x88, 0x88, 0x00, 0x44, 0x40, 0x48, 0x00, 0x80, //#### $$$ $# #
-0x08, 0x00, 0x08, 0x80, 0x00, 0x11, 0x11, 0x80, // # ## ....#
-0x08, 0x08, 0x00, 0x08, 0x08, 0x11, 0x01, 0x80, // # # # #.. .#
-0x08, 0x00, 0x08, 0x08, 0x08, 0x81, 0x11, 0x80, // # # # ##...#
-0x08, 0x88, 0x88, 0x04, 0x00, 0x81, 0x11, 0x80, // ##### $ #...#
-0x00, 0x00, 0x08, 0x80, 0x00, 0x88, 0x88, 0x80, // ## #####
-0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // #####
-//Level: 87
-0x13, 0x0F,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // #####
-0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x08, 0x80, 0x00, // ## ##
-0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x80, 0x00, // ## #
-0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x44, 0x00, 0x80, 0x00, // ## $$ #
-0x00, 0x00, 0x00, 0x08, 0x80, 0x44, 0x00, 0x40, 0x80, 0x00, // ## $$ $ #
-0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x40, 0x80, 0x00, // # $ $ #
-0x88, 0x88, 0x00, 0x08, 0x00, 0x04, 0x40, 0x88, 0x88, 0x80, //#### # $$ #####
-0x80, 0x08, 0x88, 0x88, 0x88, 0x80, 0x88, 0x00, 0x00, 0x80, //# ######## ## #
-0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x42, 0x80, //#. $$$@#
-0x81, 0x80, 0x88, 0x88, 0x88, 0x80, 0x88, 0x00, 0x08, 0x80, //#.# ####### ## ##
-0x81, 0x80, 0x88, 0x88, 0x88, 0x81, 0x08, 0x40, 0x48, 0x80, //#.# #######. #$ $##
-0x81, 0x11, 0x11, 0x11, 0x11, 0x11, 0x08, 0x00, 0x00, 0x80, //#........... # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x40, 0x80, //############## $ #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x08, 0x80, // ## ##
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // ####
-//Level: 88
-0x0D, 0x0D,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //#############
-0x80, 0x01, 0x01, 0x01, 0x01, 0x00, 0x80, //# . . . . #
-0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //# # # # # # #
-0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //# # # # # # #
-0x81, 0x40, 0x80, 0x40, 0x80, 0x41, 0x80, //#.$ # $ # $.#
-0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //# # # # # # #
-0x80, 0x84, 0x44, 0x84, 0x44, 0x80, 0x80, //# #$$$#$$$# #
-0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //# # # # # # #
-0x81, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, //#.$ # $ # $ #
-0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, //# # # # # #.#
-0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //# # # # # # #
-0x80, 0x01, 0x01, 0x21, 0x01, 0x00, 0x80, //# . .@. . #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //#############
-//Level: 89
-0x0A, 0x06,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x88, // #########
-0x88, 0x20, 0x00, 0x00, 0x08, //##@ #
-0x80, 0x00, 0x84, 0x84, 0x08, //# #$#$ #
-0x80, 0x44, 0x00, 0x14, 0x18, //# $$ .$.#
-0x80, 0x08, 0x88, 0x11, 0x18, //# ###...#
-0x88, 0x88, 0x08, 0x88, 0x88, //#### #####
-//Level: 90
-0x11, 0x0D,//Size x and y
-0x88, 0x88, 0x88, 0x80, 0x88, 0x88, 0x88, 0x88, 0x80, //####### #########
-0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x88, 0x00, 0x80, //# # # ## #
-0x80, 0x88, 0x80, 0x80, 0x80, 0x00, 0x40, 0x00, 0x80, //# ### # # $ #
-0x80, 0x80, 0x40, 0x88, 0x80, 0x00, 0x40, 0x00, 0x80, //# # $ ### $ #
-0x80, 0x00, 0x44, 0x00, 0x00, 0x00, 0x88, 0x40, 0x80, //# $$ ##$ #
-0x80, 0x00, 0x08, 0x88, 0x80, 0x00, 0x88, 0x00, 0x80, //# #### ## #
-0x82, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x08, 0x80, //#@############ ##
-0x88, 0x81, 0x10, 0x00, 0x08, 0x88, 0x88, 0x40, 0x80, //###.. #####$ #
-0x00, 0x81, 0x10, 0x00, 0x08, 0x88, 0x80, 0x00, 0x80, // #.. #### #
-0x00, 0x81, 0x10, 0x00, 0x00, 0x00, 0x44, 0x00, 0x80, // #.. $$ #
-0x00, 0x81, 0x10, 0x00, 0x08, 0x88, 0x80, 0x40, 0x80, // #.. #### $ #
-0x00, 0x81, 0x10, 0x00, 0x08, 0x00, 0x80, 0x00, 0x80, // #.. # # #
-0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x88, 0x88, 0x80, // ######## #####
-//Level: 91
-0x10, 0x0D,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, // #########
-0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, // # #
-0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, // # # # # #
-0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x48, 0x08, // # $ $# #
-0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x08, // # $ #
-0x00, 0x00, 0x00, 0x08, 0x80, 0x40, 0x48, 0x08, // ## $ $# #
-0x08, 0x88, 0x00, 0x00, 0x80, 0x40, 0x40, 0x08, // ### # $ $ #
-0x88, 0x18, 0x88, 0x88, 0x80, 0x88, 0x88, 0x88, //##.###### ######
-0x81, 0x11, 0x00, 0x80, 0x40, 0x40, 0x80, 0x00, //#... # $ $ #
-0x88, 0x11, 0x00, 0x00, 0x04, 0x00, 0x80, 0x00, //##.. $ #
-0x81, 0x11, 0x00, 0x80, 0x02, 0x88, 0x80, 0x00, //#... # @###
-0x88, 0x18, 0x88, 0x80, 0x08, 0x80, 0x00, 0x00, //##.#### ##
-0x08, 0x88, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // ### ####
-//Level: 92
-0x12, 0x0F,//Size x and y
-0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ###########
-0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x88, // # # ##
-0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x01, 0x18, // # $ ..#
-0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x84, 0x81, 0x18, // # #$#..#
-0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x01, 0x18, // ########### ..#
-0x00, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x18, // # $ ..#
-0x00, 0x80, 0x80, 0x80, 0x48, 0x80, 0x80, 0x81, 0x18, // # # # $## # #..#
-0x00, 0x80, 0x00, 0x84, 0x00, 0x00, 0x80, 0x01, 0x18, // # #$ # ..#
-0x08, 0x84, 0x80, 0x40, 0x88, 0x88, 0x88, 0x80, 0x08, // ##$# $ ####### #
-0x88, 0x00, 0x04, 0x00, 0x80, 0x00, 0x08, 0x04, 0x08, //## $ # # $ #
-0x80, 0x00, 0x48, 0x00, 0x80, 0x00, 0x08, 0x00, 0x08, //# $# # # #
-0x80, 0x04, 0x00, 0x08, 0x80, 0x00, 0x08, 0x88, 0x88, //# $ ## #####
-0x80, 0x48, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //# $#####
-0x80, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //# @#
-0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //####
-//Level: 93
-0x12, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //##################
-0x80, 0x00, 0x00, 0x00, 0x00, 0x88, 0x08, 0x11, 0x18, //# ## #...#
-0x80, 0x40, 0x44, 0x80, 0x00, 0x04, 0x08, 0x11, 0x18, //# $ $$# $ #...#
-0x80, 0x40, 0x00, 0x84, 0x88, 0x44, 0x08, 0x11, 0x18, //# $ #$##$$ #...#
-0x80, 0x44, 0x84, 0x00, 0x00, 0x00, 0x02, 0x11, 0x18, //# $$#$ @...#
-0x80, 0x40, 0x40, 0x48, 0x40, 0x88, 0x88, 0x00, 0x18, //# $ $ $#$ #### .#
-0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x04, 0x11, 0x18, //# ## $...#
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //##################
-//Level: 94
-0x0A, 0x0A,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-0x80, 0x00, 0x88, 0x00, 0x80, //# ## #
-0x80, 0x80, 0x40, 0x40, 0x80, //# # $ $ #
-0x80, 0x05, 0x18, 0x00, 0x80, //# *.# #
-0x88, 0x08, 0x12, 0x18, 0x80, //## #.@.##
-0x88, 0x48, 0x88, 0x58, 0x88, //##$###*###
-0x80, 0x00, 0x00, 0x00, 0x08, //# #
-0x80, 0x00, 0x88, 0x08, 0x08, //# ## # #
-0x88, 0x88, 0x88, 0x00, 0x08, //###### #
-0x00, 0x00, 0x08, 0x88, 0x88, // #####
-//Level: 95
-0x0E, 0x0D,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // ########
-0x00, 0x80, 0x00, 0x80, 0x08, 0x88, 0x00, // # # ###
-0x88, 0x80, 0x80, 0x40, 0x04, 0x08, 0x88, //### # $ $ ###
-0x80, 0x00, 0x08, 0x44, 0x08, 0x00, 0x08, //# #$$ # #
-0x80, 0x88, 0x48, 0x00, 0x20, 0x04, 0x08, //# ##$# @ $ #
-0x80, 0x00, 0x04, 0x48, 0x88, 0x40, 0x88, //# $$###$ ##
-0x80, 0x00, 0x48, 0x08, 0x80, 0x08, 0x80, //# $# ## ##
-0x80, 0x84, 0x08, 0x01, 0x11, 0x88, 0x00, //# #$ # ...##
-0x80, 0x40, 0x81, 0x11, 0x11, 0x80, 0x00, //# $ #.....#
-0x88, 0x00, 0x11, 0x11, 0x18, 0x80, 0x00, //## .....##
-0x08, 0x04, 0x80, 0x88, 0x88, 0x00, 0x00, // # $# ####
-0x08, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, // ## #
-0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // #####
-//Level: 96
-0x0C, 0x08,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, // #####
-0x88, 0x88, 0x88, 0x88, 0x00, 0x08, //######## #
-0x80, 0x11, 0x11, 0x11, 0x40, 0x08, //# ......$ #
-0x80, 0x08, 0x48, 0x88, 0x00, 0x08, //# #$### #
-0x88, 0x04, 0x24, 0x08, 0x00, 0x08, //## $@$ # #
-0x08, 0x04, 0x04, 0x08, 0x00, 0x08, // # $ $ # #
-0x08, 0x00, 0x00, 0x08, 0x88, 0x88, // # #####
-0x08, 0x88, 0x88, 0x88, 0x00, 0x00, // #######
-//Level: 97
-0x14, 0x09,//Size x and y
-0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //######
-0x80, 0x00, 0x08, 0x88, 0x00, 0x00, 0x08, 0x88, 0x88, 0x80, //# ### ######
-0x80, 0x80, 0x04, 0x08, 0x00, 0x88, 0x88, 0x00, 0x11, 0x80, //# # $ # #### ..#
-0x80, 0x80, 0x04, 0x08, 0x88, 0x82, 0x88, 0x00, 0x11, 0x88, //# # $ ####@## ..##
-0x80, 0x04, 0x44, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x18, //# $$$ $ ...#
-0x88, 0x80, 0x04, 0x00, 0x48, 0x88, 0x88, 0x00, 0x11, 0x88, //### $ $##### ..##
-0x00, 0x84, 0x04, 0x04, 0x08, 0x00, 0x08, 0x00, 0x11, 0x80, // #$ $ $ # # ..#
-0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x08, 0x88, 0x88, 0x80, // # # ######
-0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // ########
-//Level: 98
-0x0F, 0x0E,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // #####
-0x88, 0x88, 0x80, 0x00, 0x88, 0x88, 0x88, 0x00, //##### ######
-0x80, 0x00, 0x00, 0x80, 0x08, 0x80, 0x08, 0x80, //# # ## ##
-0x80, 0x80, 0x44, 0x00, 0x04, 0x00, 0x00, 0x80, //# # $$ $ #
-0x80, 0x08, 0x00, 0x08, 0x80, 0x80, 0x80, 0x80, //# # ## # # #
-0x80, 0x40, 0x80, 0x88, 0x00, 0x04, 0x00, 0x80, //# $ # ## $ #
-0x80, 0x00, 0x04, 0x04, 0x00, 0x08, 0x08, 0x80, //# $ $ # ##
-0x88, 0x04, 0x08, 0x00, 0x84, 0x88, 0x08, 0x00, //## $ # #$## #
-0x08, 0x88, 0x00, 0x80, 0x80, 0x80, 0x48, 0x00, // ### # # # $#
-0x00, 0x08, 0x04, 0x00, 0x20, 0x11, 0x18, 0x00, // # $ @ ...#
-0x00, 0x08, 0x04, 0x88, 0x48, 0x11, 0x18, 0x00, // # $##$#...#
-0x00, 0x08, 0x80, 0x00, 0x11, 0x11, 0x88, 0x00, // ## ....##
-0x00, 0x00, 0x88, 0x80, 0x11, 0x18, 0x80, 0x00, // ### ...##
-0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, // ######
-//Level: 99
-0x0B, 0x0A,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x88, 0x00, // #########
-0x08, 0x00, 0x00, 0x00, 0x08, 0x80, // # ##
-0x08, 0x40, 0x88, 0x88, 0x00, 0x80, // #$ #### #
-0x88, 0x08, 0x01, 0x50, 0x80, 0x80, //## # .* # #
-0x80, 0x00, 0x45, 0x10, 0x80, 0x80, //# $*. # #
-0x80, 0x84, 0x21, 0x50, 0x80, 0x80, //# #$@.* # #
-0x80, 0x00, 0x04, 0x00, 0x00, 0x80, //# $ #
-0x88, 0x88, 0x48, 0x84, 0x08, 0x80, //####$##$ ##
-0x00, 0x08, 0x01, 0x11, 0x08, 0x00, // # ... #
-0x00, 0x08, 0x88, 0x88, 0x88, 0x00, // #######
-//Level: 100
-0x09, 0x0C,//Size x and y
-0x00, 0x88, 0x88, 0x80, 0x00, // #####
-0x00, 0x80, 0x20, 0x80, 0x00, // # @ #
-0x00, 0x80, 0x40, 0x80, 0x00, // # $ #
-0x88, 0x80, 0x10, 0x88, 0x80, //### . ###
-0x80, 0x00, 0x50, 0x00, 0x80, //# * #
-0x80, 0x55, 0x55, 0x50, 0x80, //# ***** #
-0x80, 0x00, 0x50, 0x00, 0x80, //# * #
-0x88, 0x84, 0x54, 0x88, 0x80, //###$*$###
-0x00, 0x80, 0x10, 0x80, 0x00, // # . #
-0x00, 0x80, 0x50, 0x80, 0x00, // # * #
-0x00, 0x80, 0x10, 0x80, 0x00, // # . #
-0x00, 0x88, 0x88, 0x80, 0x00, // #####
-//Level: 101
-0x11, 0x0D,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // #####
-0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x88, 0x88, 0x80, // # #####
-0x00, 0x00, 0x00, 0x00, 0x80, 0x84, 0x88, 0x00, 0x80, // # #$## #
-0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, // # $ #
-0x88, 0x88, 0x88, 0x88, 0x80, 0x88, 0x80, 0x00, 0x80, //######### ### #
-0x81, 0x11, 0x10, 0x08, 0x80, 0x40, 0x04, 0x88, 0x80, //#.... ## $ $###
-0x81, 0x11, 0x10, 0x00, 0x04, 0x04, 0x40, 0x88, 0x00, //#.... $ $$ ##
-0x81, 0x11, 0x10, 0x08, 0x84, 0x00, 0x40, 0x28, 0x00, //#.... ##$ $ @#
-0x88, 0x88, 0x88, 0x88, 0x80, 0x04, 0x00, 0x88, 0x00, //######### $ ##
-0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x08, 0x00, // # $ $ #
-0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x88, 0x08, 0x00, // ### ## #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x08, 0x00, // # #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, // ######
-//Level: 102
-0x13, 0x0F,//Size x and y
-0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // #####
-0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // # #
-0x08, 0x08, 0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // # # #######
-0x08, 0x00, 0x00, 0x00, 0x42, 0x88, 0x88, 0x88, 0x00, 0x00, // # $@######
-0x08, 0x04, 0x08, 0x84, 0x08, 0x88, 0x00, 0x08, 0x00, 0x00, // # $ ##$ ### #
-0x08, 0x08, 0x88, 0x80, 0x40, 0x00, 0x04, 0x08, 0x00, 0x00, // # #### $ $ #
-0x08, 0x08, 0x88, 0x88, 0x08, 0x00, 0x84, 0x08, 0x88, 0x80, // # ##### # #$ ####
-0x88, 0x00, 0x88, 0x88, 0x08, 0x84, 0x00, 0x00, 0x00, 0x80, //## #### ##$ #
-0x80, 0x04, 0x80, 0x04, 0x00, 0x80, 0x88, 0x08, 0x80, 0x80, //# $# $ # ## ## #
-0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0x11, 0x80, 0x80, //# # #...# #
-0x88, 0x88, 0x88, 0x00, 0x88, 0x80, 0x01, 0x11, 0x00, 0x80, //###### ### ... #
-0x00, 0x00, 0x08, 0x88, 0x80, 0x80, 0x81, 0x11, 0x80, 0x80, // #### # #...# #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x88, 0x80, 0x80, 0x80, // # ### # #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, // # #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // #########
-//Level: 103
-0x08, 0x07,//Size x and y
-0x00, 0x88, 0x88, 0x88, // ######
-0x00, 0x80, 0x00, 0x08, // # #
-0x88, 0x84, 0x44, 0x08, //###$$$ #
-0x82, 0x04, 0x11, 0x08, //#@ $.. #
-0x80, 0x41, 0x11, 0x88, //# $...##
-0x88, 0x88, 0x00, 0x80, //#### #
-0x00, 0x08, 0x88, 0x80, // ####
-//Level: 104
-0x0C, 0x10,//Size x and y
-0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //#######
-0x80, 0x11, 0x11, 0x80, 0x00, 0x00, //# ....#
-0x80, 0x11, 0x11, 0x80, 0x00, 0x00, //# ....#
-0x80, 0x11, 0x11, 0x80, 0x00, 0x00, //# ....#
-0x88, 0x48, 0x88, 0x88, 0x88, 0x88, //##$#########
-0x80, 0x40, 0x40, 0x00, 0x00, 0x08, //# $ $ #
-0x80, 0x00, 0x80, 0x00, 0x00, 0x08, //# # #
-0x88, 0x80, 0x80, 0x44, 0x04, 0x08, //### # $$ $ #
-0x00, 0x80, 0x80, 0x00, 0x84, 0x08, // # # #$ #
-0x00, 0x80, 0x80, 0x44, 0x00, 0x08, // # # $$ #
-0x00, 0x80, 0x80, 0x80, 0x44, 0x08, // # # # $$ #
-0x00, 0x80, 0x80, 0x04, 0x08, 0x88, // # # $ ###
-0x00, 0x80, 0x88, 0x80, 0x08, 0x00, // # ### #
-0x00, 0x80, 0x00, 0x08, 0x28, 0x00, // # #@#
-0x00, 0x88, 0x88, 0x00, 0x08, 0x00, // #### #
-0x00, 0x00, 0x08, 0x88, 0x88, 0x00, // #####
-//Level: 105
-0x0E, 0x0D,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x88, 0x80, 0x00, // ######
-0x00, 0x08, 0x88, 0x00, 0x00, 0x88, 0x00, // ### ##
-0x00, 0x08, 0x00, 0x08, 0x80, 0x08, 0x00, // # ## #
-0x08, 0x88, 0x48, 0x80, 0x08, 0x08, 0x00, // ###$## # #
-0x88, 0x00, 0x00, 0x01, 0x18, 0x08, 0x00, //## ..# #
-0x80, 0x04, 0x84, 0x85, 0x18, 0x08, 0x00, //# $#$#*.# #
-0x80, 0x44, 0x20, 0x81, 0x58, 0x08, 0x88, //# $$@ #.*# ###
-0x80, 0x04, 0x40, 0x81, 0x18, 0x00, 0x08, //# $$ #..# #
-0x88, 0x00, 0x00, 0x81, 0x14, 0x00, 0x08, //## #..$ #
-0x08, 0x88, 0x48, 0x81, 0x08, 0x08, 0x88, // ###$##. # ###
-0x00, 0x08, 0x00, 0x88, 0x80, 0x08, 0x00, // # ### #
-0x00, 0x08, 0x80, 0x00, 0x00, 0x88, 0x00, // ## ##
-0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, // #######
-//Level: 106
-0x0D, 0x0B,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, // #####
-0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, // # #
-0x88, 0x88, 0x88, 0x88, 0x80, 0x80, 0x80, //######### # #
-0x80, 0x40, 0x40, 0x40, 0x40, 0x00, 0x80, //# $ $ $ $ #
-0x80, 0x81, 0x81, 0x81, 0x82, 0x48, 0x80, //# #.#.#.#@$##
-0x81, 0x11, 0x11, 0x11, 0x00, 0x08, 0x00, //#....... #
-0x80, 0x80, 0x80, 0x80, 0x84, 0x88, 0x80, //# # # # #$###
-0x80, 0x40, 0x40, 0x40, 0x40, 0x00, 0x80, //# $ $ $ $ #
-0x88, 0x88, 0x88, 0x88, 0x80, 0x80, 0x80, //######### # #
-0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, // # #
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, // #####
-//Level: 107
-0x08, 0x08,//Size x and y
-0x08, 0x88, 0x80, 0x00, // ####
-0x08, 0x20, 0x88, 0x80, // #@ ###
-0x08, 0x04, 0x00, 0x80, // # $ #
-0x88, 0x80, 0x80, 0x88, //### # ##
-0x81, 0x80, 0x80, 0x08, //#.# # #
-0x81, 0x40, 0x08, 0x08, //#.$ # #
-0x81, 0x00, 0x04, 0x08, //#. $ #
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 108
-0x0B, 0x0D,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x80, // ####
-0x00, 0x00, 0x00, 0x08, 0x20, 0x80, // #@ #
-0x00, 0x08, 0x88, 0x88, 0x00, 0x80, // ##### #
-0x88, 0x88, 0x00, 0x00, 0x00, 0x80, //#### #
-0x80, 0x00, 0x18, 0x88, 0x08, 0x80, //# .### ##
-0x80, 0x80, 0x80, 0x00, 0x08, 0x80, //# # # ##
-0x80, 0x80, 0x40, 0x48, 0x10, 0x80, //# # $ $#. #
-0x80, 0x80, 0x05, 0x00, 0x80, 0x80, //# # * # #
-0x80, 0x18, 0x40, 0x40, 0x80, 0x80, //# .#$ $ # #
-0x88, 0x00, 0x00, 0x80, 0x80, 0x80, //## # # #
-0x08, 0x08, 0x88, 0x10, 0x00, 0x80, // # ###. #
-0x08, 0x00, 0x00, 0x08, 0x88, 0x80, // # ####
-0x08, 0x88, 0x88, 0x88, 0x00, 0x00, // #######
-//Level: 109
-0x11, 0x0D,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // #########
-0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // # #
-0x00, 0x00, 0x84, 0x40, 0x44, 0x80, 0x88, 0x88, 0x00, // #$$ $$# ####
-0x88, 0x88, 0x80, 0x08, 0x00, 0x40, 0x80, 0x08, 0x00, //##### # $ # #
-0x81, 0x18, 0x00, 0x88, 0x04, 0x00, 0x40, 0x08, 0x00, //#..# ## $ $ #
-0x81, 0x18, 0x04, 0x40, 0x00, 0x00, 0x80, 0x08, 0x00, //#..# $$ # #
-0x81, 0x18, 0x00, 0x88, 0x48, 0x88, 0x80, 0x88, 0x00, //#..# ##$#### ##
-0x81, 0x18, 0x80, 0x88, 0x00, 0x00, 0x80, 0x80, 0x00, //#..## ## # #
-0x81, 0x11, 0x00, 0x08, 0x80, 0x88, 0x80, 0x88, 0x80, //#... ## ### ###
-0x80, 0x00, 0x88, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, //# ## $ #
-0x88, 0x88, 0x88, 0x28, 0x00, 0x08, 0x80, 0x80, 0x80, //######@# ## # #
-0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x80, 0x00, 0x80, // ######## #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, // #####
-//Level: 110
-0x0F, 0x0D,//Size x and y
-0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // #####
-0x88, 0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, //### ##
-0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //# #
-0x80, 0x44, 0x08, 0x48, 0x88, 0x88, 0x88, 0x80, //# $$ #$########
-0x88, 0x08, 0x40, 0x40, 0x40, 0x80, 0x00, 0x80, //## #$ $ $ # #
-0x81, 0x11, 0x18, 0x00, 0x04, 0x00, 0x00, 0x80, //#....# $ #
-0x81, 0x11, 0x12, 0x80, 0x08, 0x88, 0x48, 0x80, //#....@# ###$##
-0x81, 0x11, 0x14, 0x80, 0x00, 0x40, 0x40, 0x80, //#....$# $ $ #
-0x81, 0x11, 0x14, 0x04, 0x80, 0x00, 0x00, 0x80, //#....$ $# #
-0x88, 0x88, 0x80, 0x00, 0x80, 0x48, 0x48, 0x80, //##### # $#$##
-0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x40, 0x80, // ##### $ #
-0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x80, // ### #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, // #####
-//Level: 111
-0x0A, 0x08,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x88, // #####
-0x08, 0x88, 0x88, 0x00, 0x08, // ##### #
-0x08, 0x01, 0x10, 0x48, 0x08, // # .. $# #
-0x08, 0x08, 0x15, 0x00, 0x08, // # #.* #
-0x88, 0x05, 0x18, 0x40, 0x88, //## *.#$ ##
-0x80, 0x40, 0x04, 0x00, 0x80, //# $ $ #
-0x80, 0x00, 0x88, 0x02, 0x80, //# ## @#
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-//Level: 112
-0x0E, 0x0F,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // #########
-0x08, 0x11, 0x11, 0x00, 0x08, 0x80, 0x00, // #.... ##
-0x08, 0x18, 0x18, 0x00, 0x40, 0x88, 0x00, // #.#.# $ ##
-0x88, 0x11, 0x11, 0x80, 0x80, 0x28, 0x80, //##....# # @##
-0x80, 0x11, 0x11, 0x80, 0x08, 0x00, 0x88, //# ....# # ##
-0x80, 0x00, 0x00, 0x84, 0x08, 0x84, 0x08, //# #$ ##$ #
-0x88, 0x08, 0x88, 0x00, 0x40, 0x00, 0x08, //## ### $ #
-0x08, 0x40, 0x04, 0x04, 0x04, 0x80, 0x08, // #$ $ $ $# #
-0x08, 0x08, 0x00, 0x40, 0x40, 0x88, 0x08, // # # $ $ ## #
-0x08, 0x00, 0x88, 0x80, 0x08, 0x80, 0x08, // # ### ## #
-0x08, 0x00, 0x00, 0x88, 0x08, 0x80, 0x88, // # ## ## ##
-0x08, 0x00, 0x40, 0x80, 0x04, 0x00, 0x80, // # $ # $ #
-0x08, 0x88, 0x40, 0x40, 0x00, 0x88, 0x80, // ###$ $ ###
-0x00, 0x08, 0x00, 0x88, 0x88, 0x80, 0x00, // # #####
-0x00, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, // ####
-//Level: 113
-0x0E, 0x0C,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // #########
-0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // # #
-0x08, 0x04, 0x04, 0x40, 0x48, 0x00, 0x00, // # $ $$ $#
-0x88, 0x80, 0x80, 0x04, 0x08, 0x00, 0x00, //### # $ #
-0x81, 0x80, 0x00, 0x44, 0x08, 0x80, 0x00, //#.# $$ ##
-0x81, 0x88, 0x80, 0x00, 0x40, 0x80, 0x00, //#.### $ #
-0x81, 0x81, 0x04, 0x08, 0x80, 0x88, 0x88, //#.#. $ ## ####
-0x81, 0x11, 0x00, 0x48, 0x80, 0x40, 0x08, //#... $## $ #
-0x81, 0x11, 0x40, 0x00, 0x40, 0x00, 0x08, //#...$ $ #
-0x81, 0x18, 0x88, 0x48, 0x88, 0x08, 0x28, //#..###$### #@#
-0x81, 0x18, 0x08, 0x00, 0x00, 0x08, 0x88, //#..# # ###
-0x88, 0x88, 0x08, 0x88, 0x88, 0x88, 0x00, //#### #######
-//Level: 114
-0x07, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x80, //#######
-0x81, 0x14, 0x11, 0x80, //#..$..#
-0x81, 0x18, 0x11, 0x80, //#..#..#
-0x80, 0x44, 0x40, 0x80, //# $$$ #
-0x80, 0x04, 0x00, 0x80, //# $ #
-0x80, 0x44, 0x40, 0x80, //# $$$ #
-0x80, 0x08, 0x20, 0x80, //# #@ #
-0x88, 0x88, 0x88, 0x80, //#######
-//Level: 115
-0x08, 0x0B,//Size x and y
-0x00, 0x08, 0x88, 0x88, // #####
-0x00, 0x08, 0x00, 0x08, // # #
-0x88, 0x88, 0x40, 0x08, //####$ #
-0x81, 0x10, 0x40, 0x08, //#.. $ #
-0x81, 0x14, 0x00, 0x88, //#..$ ##
-0x81, 0x18, 0x04, 0x80, //#..# $#
-0x80, 0x18, 0x40, 0x88, //# .#$ ##
-0x88, 0x88, 0x04, 0x08, //#### $ #
-0x00, 0x80, 0x40, 0x08, // # $ #
-0x00, 0x80, 0x02, 0x08, // # @ #
-0x00, 0x88, 0x88, 0x88, // ######
-//Level: 116
-0x0C, 0x05,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############
-0x80, 0x00, 0x01, 0x11, 0x04, 0x08, //# ... $ #
-0x80, 0x44, 0x45, 0x55, 0x04, 0x28, //# $$$*** $@#
-0x80, 0x00, 0x01, 0x11, 0x04, 0x08, //# ... $ #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############
-//Level: 117
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x80, 0x02, 0x00, 0x08, //# @ #
-0x80, 0x88, 0x48, 0x08, //# ##$# #
-0x80, 0x40, 0x04, 0x08, //# $ $ #
-0x88, 0x40, 0x08, 0x88, //##$ ###
-0x08, 0x14, 0x01, 0x80, // #.$ .#
-0x08, 0x11, 0x01, 0x80, // #.. .#
-0x08, 0x88, 0x88, 0x80, // ######
-//Level: 118
-0x08, 0x08,//Size x and y
-0x08, 0x88, 0x88, 0x88, // #######
-0x88, 0x00, 0x01, 0x08, //## . #
-0x80, 0x40, 0x04, 0x28, //# $ $@#
-0x81, 0x41, 0x88, 0x88, //#.$.####
-0x80, 0x08, 0x80, 0x00, //# ##
-0x80, 0x08, 0x00, 0x00, //# #
-0x80, 0x08, 0x00, 0x00, //# #
-0x88, 0x88, 0x00, 0x00, //####
-//Level: 119
-0x13, 0x0D,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, // #####
-0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x80, // ########## #
-0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, // # # #
-0x00, 0x00, 0x08, 0x00, 0x40, 0x40, 0x00, 0x04, 0x40, 0x80, // # $ $ $$ #
-0x00, 0x00, 0x08, 0x08, 0x88, 0x88, 0x08, 0x80, 0x40, 0x80, // # ##### ## $ #
-0x00, 0x00, 0x08, 0x44, 0x00, 0x08, 0x48, 0x80, 0x40, 0x80, // #$$ #$## $ #
-0x00, 0x00, 0x08, 0x08, 0x88, 0x08, 0x08, 0x84, 0x00, 0x80, // # ### # ##$ #
-0x88, 0x88, 0x88, 0x08, 0x88, 0x04, 0x04, 0x00, 0x00, 0x80, //###### ### $ $ #
-0x81, 0x11, 0x10, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x80, //#.... ## #
-0x81, 0x11, 0x10, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x80, //#.... ######
-0x81, 0x11, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, //#.... #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x82, 0x88, 0x00, 0x00, 0x00, //###########@##
-0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, // ###
-//Level: 120
-0x10, 0x0D,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //##############
-0x80, 0x00, 0x08, 0x88, 0x00, 0x08, 0x18, 0x00, //# ### #.#
-0x80, 0x40, 0x00, 0x00, 0x40, 0x08, 0x18, 0x00, //# $ $ #.#
-0x80, 0x40, 0x08, 0x08, 0x00, 0x08, 0x18, 0x80, //# $ # # #.##
-0x88, 0x08, 0x88, 0x08, 0x84, 0x88, 0x11, 0x88, //## ### ##$##..##
-0x80, 0x40, 0x08, 0x48, 0x00, 0x08, 0x02, 0x18, //# $ #$# # @.#
-0x80, 0x04, 0x04, 0x00, 0x04, 0x00, 0x11, 0x18, //# $ $ $ ...#
-0x80, 0x40, 0x08, 0x48, 0x00, 0x08, 0x11, 0x08, //# $ #$# #.. #
-0x88, 0x08, 0x88, 0x08, 0x80, 0x88, 0x11, 0x88, //## ### ## ##..##
-0x80, 0x04, 0x08, 0x08, 0x04, 0x08, 0x18, 0x80, //# $ # # $ #.##
-0x80, 0x44, 0x00, 0x00, 0x04, 0x08, 0x18, 0x00, //# $$ $ #.#
-0x80, 0x00, 0x08, 0x88, 0x00, 0x08, 0x18, 0x00, //# ### #.#
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //##############
-//Level: 121
-0x0F, 0x0C,//Size x and y
-0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // #########
-0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, // # #
-0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, // # # # # #
-0x00, 0x00, 0x00, 0x80, 0x04, 0x04, 0x80, 0x80, // # $ $# #
-0x88, 0x88, 0x88, 0x80, 0x00, 0x40, 0x00, 0x80, //####### $ #
-0x81, 0x18, 0x00, 0x88, 0x04, 0x04, 0x80, 0x80, //#..# ## $ $# #
-0x81, 0x10, 0x00, 0x88, 0x04, 0x04, 0x00, 0x80, //#.. ## $ $ #
-0x81, 0x18, 0x00, 0x88, 0x08, 0x88, 0x88, 0x80, //#..# ## ######
-0x81, 0x18, 0x08, 0x04, 0x04, 0x08, 0x00, 0x00, //#..# # $ $ #
-0x81, 0x10, 0x00, 0x00, 0x40, 0x08, 0x00, 0x00, //#.. $ #
-0x80, 0x08, 0x88, 0x02, 0x08, 0x88, 0x00, 0x00, //# ### @ ###
-0x88, 0x88, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, //#### #####
-//Level: 122
-0x0E, 0x0D,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, // #########
-0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, // # #
-0x00, 0x00, 0x08, 0x00, 0x48, 0x48, 0x08, // # $#$# #
-0x08, 0x88, 0x88, 0x80, 0x08, 0x04, 0x08, // ###### # $ #
-0x08, 0x00, 0x08, 0x04, 0x00, 0x40, 0x08, // # # $ $ #
-0x88, 0x04, 0x00, 0x00, 0x08, 0x88, 0x08, //## $ ### #
-0x80, 0x00, 0x84, 0x88, 0x88, 0x00, 0x08, //# #$#### #
-0x80, 0x00, 0x04, 0x08, 0x88, 0x08, 0x88, //# $ ### ###
-0x88, 0x88, 0x81, 0x10, 0x28, 0x08, 0x80, //#####.. @# ##
-0x00, 0x08, 0x11, 0x14, 0x04, 0x40, 0x80, // #...$ $$ #
-0x00, 0x08, 0x11, 0x18, 0x00, 0x00, 0x80, // #...# #
-0x00, 0x08, 0x11, 0x18, 0x88, 0x88, 0x80, // #...######
-0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // #####
-//Level: 123
-0x0D, 0x0A,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // ####
-0x88, 0x88, 0x88, 0x00, 0x88, 0x88, 0x80, //###### #####
-0x82, 0x40, 0x00, 0x04, 0x00, 0x40, 0x80, //#@$ $ $ #
-0x84, 0x88, 0x80, 0x40, 0x80, 0x80, 0x80, //#$### $ # # #
-0x80, 0x08, 0x00, 0x80, 0x40, 0x00, 0x80, //# # # $ #
-0x80, 0x48, 0x00, 0x00, 0x80, 0x88, 0x80, //# $# # ###
-0x80, 0x04, 0x08, 0x48, 0x00, 0x08, 0x00, //# $ #$# #
-0x81, 0x11, 0x11, 0x11, 0x11, 0x08, 0x00, //#......... #
-0x88, 0x88, 0x88, 0x88, 0x00, 0x08, 0x00, //######## #
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, // #####
-//Level: 124
-0x09, 0x09,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-0x82, 0x00, 0x00, 0x00, 0x80, //#@ #
-0x80, 0x41, 0x41, 0x40, 0x80, //# $.$.$ #
-0x80, 0x14, 0x14, 0x10, 0x80, //# .$.$. #
-0x80, 0x41, 0x51, 0x40, 0x80, //# $.*.$ #
-0x80, 0x14, 0x14, 0x10, 0x80, //# .$.$. #
-0x80, 0x41, 0x41, 0x40, 0x80, //# $.$.$ #
-0x80, 0x00, 0x00, 0x00, 0x80, //# #
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-//Level: 125
-0x09, 0x08,//Size x and y
-0x08, 0x88, 0x88, 0x80, 0x00, // ######
-0x88, 0x00, 0x12, 0x88, 0x00, //## .@##
-0x80, 0x50, 0x80, 0x08, 0x80, //# * # ##
-0x80, 0x00, 0x80, 0x00, 0x80, //# # #
-0x80, 0x48, 0x80, 0x80, 0x80, //# $## # #
-0x80, 0x04, 0x04, 0x51, 0x80, //# $ $*.#
-0x80, 0x01, 0x80, 0x00, 0x80, //# .# #
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-//Level: 126
-0x13, 0x06,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###################
-0x80, 0x00, 0x11, 0x10, 0x02, 0x00, 0x11, 0x10, 0x00, 0x80, //# ... @ ... #
-0x80, 0x44, 0x40, 0x08, 0x88, 0x88, 0x00, 0x44, 0x40, 0x80, //# $$$ ##### $$$ #
-0x88, 0x00, 0x08, 0x88, 0x00, 0x08, 0x88, 0x00, 0x08, 0x80, //## ### ### ##
-0x08, 0x80, 0x08, 0x00, 0x00, 0x00, 0x08, 0x80, 0x08, 0x00, // ## # ## #
-0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // #### ####
-//Level: 127
-0x10, 0x10,//Size x and y
-0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // ####
-0x00, 0x80, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, // # ###########
-0x00, 0x80, 0x00, 0x04, 0x00, 0x04, 0x04, 0x08, // # $ $ $ #
-0x00, 0x80, 0x48, 0x04, 0x08, 0x00, 0x40, 0x08, // # $# $ # $ #
-0x00, 0x80, 0x04, 0x04, 0x00, 0x80, 0x00, 0x08, // # $ $ # #
-0x88, 0x80, 0x48, 0x08, 0x00, 0x88, 0x88, 0x08, //### $# # #### #
-0x82, 0x84, 0x04, 0x04, 0x00, 0x88, 0x00, 0x08, //#@#$ $ $ ## #
-0x80, 0x00, 0x04, 0x08, 0x48, 0x00, 0x08, 0x08, //# $ #$# # #
-0x80, 0x00, 0x40, 0x00, 0x04, 0x04, 0x04, 0x08, //# $ $ $ $ #
-0x88, 0x88, 0x80, 0x08, 0x88, 0x88, 0x88, 0x88, //##### #########
-0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // # #
-0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // # #
-0x00, 0x81, 0x11, 0x11, 0x18, 0x00, 0x00, 0x00, // #......#
-0x00, 0x81, 0x11, 0x11, 0x18, 0x00, 0x00, 0x00, // #......#
-0x00, 0x81, 0x11, 0x11, 0x18, 0x00, 0x00, 0x00, // #......#
-0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ########
-//Level: 128
-0x0B, 0x0B,//Size x and y
-0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // ####
-0x88, 0x88, 0x88, 0x80, 0x28, 0x00, //####### @#
-0x80, 0x00, 0x00, 0x40, 0x08, 0x00, //# $ #
-0x80, 0x00, 0x48, 0x80, 0x48, 0x00, //# $## $#
-0x88, 0x48, 0x11, 0x18, 0x08, 0x00, //##$#...# #
-0x08, 0x04, 0x11, 0x10, 0x08, 0x00, // # $... #
-0x08, 0x08, 0x10, 0x18, 0x08, 0x80, // # #. .# ##
-0x08, 0x00, 0x08, 0x08, 0x40, 0x80, // # # #$ #
-0x08, 0x40, 0x04, 0x00, 0x00, 0x80, // #$ $ #
-0x08, 0x00, 0x88, 0x88, 0x88, 0x80, // # #######
-0x08, 0x88, 0x80, 0x00, 0x00, 0x00, // ####
-//Level: 129
-0x11, 0x10,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ############
-0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, // # ##
-0x00, 0x00, 0x80, 0x08, 0x08, 0x44, 0x04, 0x00, 0x80, // # # #$$ $ #
-0x00, 0x00, 0x84, 0x08, 0x48, 0x00, 0x88, 0x02, 0x80, // #$ #$# ## @#
-0x00, 0x08, 0x80, 0x88, 0x08, 0x04, 0x08, 0x08, 0x80, // ## ## # $ # ##
-0x00, 0x08, 0x00, 0x04, 0x08, 0x40, 0x08, 0x08, 0x00, // # $ #$ # #
-0x00, 0x08, 0x00, 0x08, 0x04, 0x00, 0x08, 0x08, 0x00, // # # $ # #
-0x00, 0x08, 0x80, 0x40, 0x40, 0x00, 0x88, 0x08, 0x00, // ## $ $ ## #
-0x00, 0x08, 0x00, 0x80, 0x08, 0x80, 0x04, 0x08, 0x00, // # # ## $ #
-0x00, 0x08, 0x00, 0x00, 0x88, 0x04, 0x48, 0x08, 0x00, // # ## $$# #
-0x88, 0x88, 0x88, 0x44, 0x00, 0x08, 0x00, 0x08, 0x00, //######$$ # #
-0x81, 0x11, 0x18, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, //#....# ########
-0x81, 0x81, 0x11, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, //#.#... ##
-0x81, 0x11, 0x10, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //#.... #
-0x81, 0x11, 0x10, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //#.... #
-0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //#########
-//Level: 130
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, //# ###
-0x80, 0x48, 0x00, 0x04, 0x08, 0x80, 0x04, 0x00, 0x00, 0x88, //# $# $ ## $ ##
-0x80, 0x00, 0x04, 0x88, 0x80, 0x00, 0x08, 0x04, 0x40, 0x88, //# $### # $$ ##
-0x81, 0x88, 0x80, 0x00, 0x00, 0x40, 0x40, 0x88, 0x00, 0x88, //#.### $ $ ## ##
-0x81, 0x11, 0x80, 0x08, 0x00, 0x80, 0x00, 0x08, 0x40, 0x08, //#...# # # #$ #
-0x81, 0x18, 0x84, 0x48, 0x88, 0x80, 0x40, 0x08, 0x00, 0x08, //#..##$$#### $ # #
-0x81, 0x11, 0x80, 0x00, 0x00, 0x04, 0x08, 0x80, 0x08, 0x88, //#...# $ ## ###
-0x81, 0x11, 0x40, 0x08, 0x88, 0x00, 0x80, 0x00, 0x08, 0x08, //#...$ ### # # #
-0x88, 0x11, 0x00, 0x48, 0x00, 0x88, 0x00, 0x08, 0x82, 0x08, //##.. $# ## ##@ #
-0x88, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, //###.# #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 131
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x81, 0x11, 0x18, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, //#....### #
-0x81, 0x11, 0x18, 0x88, 0x88, 0x08, 0x00, 0x84, 0x80, 0x88, //#....##### # #$# ##
-0x81, 0x11, 0x18, 0x88, 0x00, 0x08, 0x40, 0x04, 0x00, 0x08, //#....### #$ $ #
-0x81, 0x11, 0x18, 0x88, 0x00, 0x00, 0x40, 0x08, 0x44, 0x88, //#....### $ #$$##
-0x88, 0x00, 0x88, 0x88, 0x04, 0x80, 0x08, 0x40, 0x40, 0x08, //## #### $# #$ $ #
-0x88, 0x00, 0x88, 0x88, 0x00, 0x40, 0x04, 0x00, 0x80, 0x08, //## #### $ $ # #
-0x82, 0x00, 0x88, 0x88, 0x48, 0x88, 0x48, 0x80, 0x40, 0x08, //#@ ####$###$## $ #
-0x88, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x40, 0x08, //## # # $ #
-0x88, 0x00, 0x08, 0x88, 0x00, 0x80, 0x04, 0x00, 0x88, 0x88, //## ### # $ ####
-0x88, 0x88, 0x88, 0x88, 0x00, 0x80, 0x08, 0x00, 0x00, 0x08, //######## # # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 132
-0x0C, 0x07,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x88, 0x88, // ##########
-0x88, 0x82, 0x00, 0x10, 0x00, 0x08, //###@ . #
-0x80, 0x00, 0x88, 0x48, 0x80, 0x08, //# ##$## #
-0x80, 0x04, 0x10, 0x10, 0x14, 0x88, //# $. . .$##
-0x88, 0x04, 0x88, 0x48, 0x80, 0x80, //## $##$## #
-0x08, 0x00, 0x00, 0x10, 0x00, 0x80, // # . #
-0x08, 0x88, 0x88, 0x88, 0x88, 0x80, // ##########
-//Level: 133
-0x08, 0x07,//Size x and y
-0x00, 0x88, 0x88, 0x80, // #####
-0x88, 0x80, 0x00, 0x80, //### #
-0x80, 0x40, 0x80, 0x88, //# $ # ##
-0x80, 0x41, 0x41, 0x08, //# $.$. #
-0x80, 0x88, 0x10, 0x08, //# ##. #
-0x80, 0x02, 0x08, 0x88, //# @ ###
-0x88, 0x88, 0x88, 0x00, //######
-//Level: 134
-0x0A, 0x09,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x00, // ######
-0x00, 0x80, 0x00, 0x08, 0x88, // # ###
-0x00, 0x80, 0x40, 0x00, 0x08, // # $ #
-0x88, 0x80, 0x40, 0x88, 0x08, //### $ ## #
-0x81, 0x11, 0x04, 0x00, 0x08, //#... $ #
-0x81, 0x11, 0x48, 0x40, 0x88, //#...$#$ ##
-0x88, 0x88, 0x08, 0x04, 0x08, //#### # $ #
-0x00, 0x08, 0x00, 0x20, 0x08, // # @ #
-0x00, 0x08, 0x88, 0x88, 0x88, // #######
-//Level: 135
-0x13, 0x0F,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // ####
-0x88, 0x88, 0x88, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, //###### #
-0x80, 0x00, 0x04, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //# $ ###########
-0x80, 0x88, 0x04, 0x00, 0x88, 0x00, 0x80, 0x11, 0x11, 0x80, //# ## $ ## # ....#
-0x80, 0x40, 0x40, 0x04, 0x00, 0x00, 0x80, 0x11, 0x11, 0x80, //# $ $ $ # ....#
-0x80, 0x80, 0x04, 0x40, 0x88, 0x80, 0x80, 0x11, 0x11, 0x80, //# # $$ ### # ....#
-0x80, 0x24, 0x40, 0x00, 0x08, 0x80, 0x80, 0x11, 0x11, 0x80, //# @$$ ## # ....#
-0x88, 0x88, 0x00, 0x80, 0x08, 0x00, 0x88, 0x08, 0x88, 0x80, //#### # # ## ####
-0x00, 0x08, 0x04, 0x88, 0x88, 0x00, 0x00, 0x08, 0x00, 0x00, // # $#### #
-0x00, 0x08, 0x40, 0x40, 0x88, 0x88, 0x48, 0x08, 0x00, 0x00, // #$ $ ####$# #
-0x00, 0x88, 0x08, 0x00, 0x80, 0x08, 0x08, 0x08, 0x00, 0x00, // ## # # # # #
-0x00, 0x80, 0x04, 0x44, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // # $$$ #
-0x00, 0x80, 0x00, 0x00, 0x88, 0x88, 0x80, 0x08, 0x00, 0x00, // # ##### #
-0x00, 0x80, 0x08, 0x88, 0x80, 0x00, 0x88, 0x88, 0x00, 0x00, // # #### ####
-0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ####
-//Level: 136
-0x0B, 0x09,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x88, 0x00, // #########
-0x08, 0x00, 0x08, 0x00, 0x08, 0x00, // # # #
-0x08, 0x04, 0x44, 0x44, 0x08, 0x00, // # $$$$$ #
-0x88, 0x04, 0x04, 0x04, 0x08, 0x00, //## $ $ $ #
-0x80, 0x40, 0x02, 0x00, 0x08, 0x00, //# $ @ #
-0x80, 0x40, 0x88, 0x88, 0x08, 0x80, //# $ #### ##
-0x80, 0x08, 0x11, 0x11, 0x10, 0x80, //# #..... #
-0x88, 0x00, 0x11, 0x11, 0x10, 0x80, //## ..... #
-0x08, 0x88, 0x88, 0x88, 0x88, 0x80, // ##########
-//Level: 137
-0x0E, 0x0B,//Size x and y
-0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // #######
-0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x88, // ## ##
-0x00, 0x00, 0x88, 0x00, 0x48, 0x80, 0x08, // ## $## #
-0x00, 0x00, 0x80, 0x08, 0x00, 0x04, 0x08, // # # $ #
-0x00, 0x00, 0x80, 0x80, 0x08, 0x08, 0x08, // # # # # #
-0x00, 0x00, 0x80, 0x40, 0x40, 0x04, 0x08, // # $ $ $ #
-0x88, 0x88, 0x88, 0x80, 0x84, 0x80, 0x08, //####### #$# #
-0x80, 0x04, 0x04, 0x00, 0x00, 0x00, 0x88, //# $ $ ##
-0x82, 0x11, 0x40, 0x55, 0x18, 0x88, 0x80, //#@..$ **.####
-0x88, 0x11, 0x11, 0x11, 0x88, 0x00, 0x00, //##......##
-0x08, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ########
-//Level: 138
-0x0D, 0x0B,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // #####
-0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, // # #
-0x08, 0x88, 0x80, 0x80, 0x88, 0x88, 0x80, // #### # #####
-0x88, 0x00, 0x04, 0x04, 0x00, 0x00, 0x80, //## $ $ #
-0x80, 0x48, 0x08, 0x11, 0x18, 0x40, 0x80, //# $# #...#$ #
-0x82, 0x40, 0x01, 0x11, 0x80, 0x08, 0x80, //#@$ ...# ##
-0x80, 0x48, 0x01, 0x18, 0x04, 0x00, 0x80, //# $# ..# $ #
-0x88, 0x00, 0x01, 0x80, 0x00, 0x00, 0x80, //## .# #
-0x08, 0x88, 0x04, 0x04, 0x08, 0x00, 0x80, // ### $ $ # #
-0x00, 0x08, 0x88, 0x00, 0x08, 0x88, 0x80, // ### ####
-0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // #####
-//Level: 139
-0x09, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x00, 0x00, //######
-0x80, 0x00, 0x28, 0x00, 0x00, //# @#
-0x80, 0x40, 0x08, 0x88, 0x80, //# $ ####
-0x80, 0x45, 0x11, 0x50, 0x80, //# $*..* #
-0x80, 0x51, 0x15, 0x40, 0x80, //# *..*$ #
-0x88, 0x88, 0x00, 0x40, 0x80, //#### $ #
-0x00, 0x08, 0x00, 0x00, 0x80, // # #
-0x00, 0x08, 0x88, 0x88, 0x80, // ######
-//Level: 140
-0x09, 0x09,//Size x and y
-0x08, 0x88, 0x88, 0x80, 0x00, // ######
-0x88, 0x00, 0x00, 0x88, 0x00, //## ##
-0x80, 0x08, 0x80, 0x08, 0x00, //# ## #
-0x80, 0x80, 0x08, 0x08, 0x00, //# # # #
-0x81, 0x00, 0x18, 0x48, 0x80, //#. .#$##
-0x80, 0x80, 0x50, 0x40, 0x80, //# # * $ #
-0x80, 0x80, 0x50, 0x42, 0x80, //# # * $@#
-0x80, 0x01, 0x10, 0x40, 0x80, //# .. $ #
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-//Level: 141
-0x0B, 0x09,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x88, 0x00, // #########
-0x08, 0x00, 0x88, 0x00, 0x08, 0x00, // # ## #
-0x08, 0x00, 0x04, 0x00, 0x08, 0x00, // # $ #
-0x08, 0x40, 0x88, 0x80, 0x48, 0x00, // #$ ### $#
-0x08, 0x08, 0x11, 0x18, 0x08, 0x00, // # #...# #
-0x88, 0x08, 0x11, 0x18, 0x08, 0x80, //## #...# ##
-0x80, 0x40, 0x04, 0x00, 0x40, 0x80, //# $ $ $ #
-0x80, 0x00, 0x00, 0x80, 0x20, 0x80, //# # @ #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###########
-//Level: 142
-0x0E, 0x0D,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // #####
-0x00, 0x00, 0x08, 0x20, 0x08, 0x88, 0x80, // #@ ####
-0x00, 0x88, 0x88, 0x84, 0x00, 0x00, 0x80, // #####$ #
-0x00, 0x81, 0x11, 0x80, 0x08, 0x04, 0x88, // #...# # $##
-0x00, 0x81, 0x51, 0x84, 0x08, 0x40, 0x08, // #.*.#$ #$ #
-0x88, 0x81, 0x11, 0x04, 0x08, 0x08, 0x08, //###... $ # # #
-0x80, 0x01, 0x18, 0x84, 0x80, 0x00, 0x08, //# ..##$# #
-0x80, 0x08, 0x88, 0x80, 0x08, 0x04, 0x08, //# #### # $ #
-0x88, 0x00, 0x04, 0x00, 0x08, 0x44, 0x08, //## $ #$$ #
-0x08, 0x00, 0x88, 0x08, 0x80, 0x00, 0x88, // # ## ## ##
-0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x80, // ##### #
-0x00, 0x00, 0x08, 0x00, 0x88, 0x88, 0x80, // # #####
-0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // ####
-//Level: 143
-0x11, 0x0F,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // #####
-0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x08, 0x00, 0x00, // ##### #
-0x00, 0x00, 0x88, 0x04, 0x00, 0x40, 0x08, 0x88, 0x80, // ## $ $ ####
-0x88, 0x88, 0x80, 0x40, 0x04, 0x04, 0x08, 0x81, 0x80, //##### $ $ $ ##.#
-0x80, 0x00, 0x00, 0x00, 0x44, 0x00, 0x88, 0x11, 0x80, //# $$ ##..#
-0x80, 0x08, 0x88, 0x88, 0x80, 0x88, 0x81, 0x10, 0x80, //# ###### ###.. #
-0x88, 0x08, 0x00, 0x80, 0x00, 0x08, 0x11, 0x10, 0x80, //## # # #... #
-0x80, 0x40, 0x00, 0x80, 0x00, 0x08, 0x11, 0x10, 0x80, //# $ # #... #
-0x82, 0x08, 0x40, 0x88, 0x08, 0x88, 0x81, 0x11, 0x80, //#@ #$ ## ####...#
-0x88, 0x88, 0x00, 0x40, 0x44, 0x00, 0x88, 0x11, 0x80, //#### $ $$ ##..#
-0x00, 0x08, 0x80, 0x04, 0x04, 0x00, 0x41, 0x11, 0x80, // ## $ $ $...#
-0x00, 0x00, 0x80, 0x44, 0x00, 0x40, 0x80, 0x01, 0x80, // # $$ $ # .#
-0x00, 0x00, 0x80, 0x00, 0x40, 0x40, 0x08, 0x88, 0x80, // # $ $ ####
-0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x08, 0x00, 0x00, // ###### #
-0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // #####
-//Level: 144
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x00, 0x00, 0x01, 0x11, 0x18, 0x00, 0x00, 0x88, 0x88, //# ....# ####
-0x80, 0x00, 0x00, 0x01, 0x11, 0x10, 0x00, 0x00, 0x00, 0x08, //# .... #
-0x80, 0x80, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x08, //# # ########## #
-0x80, 0x84, 0x00, 0x08, 0x00, 0x00, 0x00, 0x88, 0x81, 0x18, //# #$ # ###..#
-0x80, 0x04, 0x00, 0x08, 0x44, 0x88, 0x80, 0x00, 0x81, 0x18, //# $ #$$### #..#
-0x80, 0x40, 0x88, 0x80, 0x40, 0x00, 0x40, 0x00, 0x81, 0x18, //# $ ### $ $ #..#
-0x80, 0x40, 0x80, 0x00, 0x40, 0x40, 0x80, 0x08, 0x81, 0x18, //# $ # $ $ # ##..#
-0x80, 0x08, 0x00, 0x44, 0x08, 0x04, 0x08, 0x80, 0x00, 0x88, //# # $$ # $ ## ##
-0x82, 0x88, 0x04, 0x80, 0x04, 0x00, 0x40, 0x00, 0x00, 0x88, //#@## $# $ $ ##
-0x88, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x80, 0x08, 0x88, //## ## # ###
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 145
-0x11, 0x0A,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //################
-0x80, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x08, 0x00, //# #@ # #
-0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x04, 0x48, 0x00, //# # # # # $ $$#
-0x80, 0x81, 0x11, 0x80, 0x84, 0x44, 0x00, 0x08, 0x00, //# #...# #$$$ #
-0x80, 0x01, 0x11, 0x80, 0x80, 0x40, 0x04, 0x48, 0x80, //# ...# # $ $$##
-0x80, 0x88, 0x18, 0x80, 0x80, 0x88, 0x00, 0x00, 0x80, //# ##.## # ## #
-0x80, 0x81, 0x11, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, //# #... $ #
-0x80, 0x88, 0x08, 0x88, 0x00, 0x88, 0x88, 0x88, 0x80, //# ## ### #######
-0x80, 0x00, 0x08, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, //# # ####
-0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //######
-//Level: 146
-0x0A, 0x08,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x88, // #######
-0x00, 0x88, 0x00, 0x80, 0x28, // ## # @#
-0x00, 0x80, 0x00, 0x80, 0x08, // # # #
-0x00, 0x84, 0x04, 0x04, 0x08, // #$ $ $ #
-0x00, 0x80, 0x48, 0x80, 0x08, // # $## #
-0x88, 0x80, 0x40, 0x80, 0x88, //### $ # ##
-0x81, 0x11, 0x11, 0x00, 0x80, //#..... #
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-//Level: 147
-0x11, 0x12,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // #######
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x11, 0x80, // # ...#
-0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x01, 0x11, 0x80, // ##### ...#
-0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x11, 0x80, // # ...#
-0x00, 0x00, 0x00, 0x80, 0x08, 0x80, 0x01, 0x11, 0x80, // # ## ...#
-0x00, 0x00, 0x00, 0x88, 0x08, 0x80, 0x01, 0x11, 0x80, // ## ## ...#
-0x00, 0x00, 0x08, 0x88, 0x08, 0x88, 0x88, 0x88, 0x80, // ### ########
-0x00, 0x00, 0x08, 0x04, 0x44, 0x08, 0x80, 0x00, 0x00, // # $$$ ##
-0x08, 0x88, 0x88, 0x00, 0x40, 0x40, 0x88, 0x88, 0x80, // ##### $ $ #####
-0x88, 0x00, 0x08, 0x40, 0x40, 0x00, 0x80, 0x00, 0x80, //## #$ $ # #
-0x82, 0x04, 0x00, 0x40, 0x00, 0x04, 0x00, 0x40, 0x80, //#@ $ $ $ $ #
-0x88, 0x88, 0x88, 0x04, 0x40, 0x40, 0x88, 0x88, 0x80, //###### $$ $ #####
-0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x80, 0x00, 0x00, // # $ #
-0x00, 0x00, 0x08, 0x88, 0x80, 0x88, 0x80, 0x00, 0x00, // #### ###
-0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, // # #
-0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, // # #
-0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, // # #
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // ####
-//Level: 148
-0x11, 0x0D,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // #########
-0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x80, 0x00, 0x80, // ### # #
-0x00, 0x00, 0x00, 0x82, 0x40, 0x04, 0x04, 0x40, 0x80, // #@$ $ $$ #
-0x88, 0x80, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x80, //### ###### #
-0x81, 0x88, 0x80, 0x00, 0x88, 0x00, 0x88, 0x40, 0x80, //#.### ## ##$ #
-0x81, 0x11, 0x11, 0x51, 0x00, 0x88, 0x04, 0x00, 0x80, //#.....*. ## $ #
-0x80, 0x58, 0x80, 0x08, 0x40, 0x80, 0x04, 0x00, 0x80, //# *## #$ # $ #
-0x80, 0x00, 0x80, 0x04, 0x00, 0x11, 0x11, 0x11, 0x80, //# # $ ......#
-0x88, 0x04, 0x88, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, //## $## #########
-0x08, 0x04, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // # $ ####
-0x08, 0x04, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, // # $ $ #
-0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, // # #
-0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // #######
-//Level: 149
-0x0B, 0x0A,//Size x and y
-0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // #####
-0x08, 0x02, 0x08, 0x88, 0x88, 0x80, // # @ ######
-0x08, 0x08, 0x11, 0x50, 0x00, 0x80, // # #..* #
-0x08, 0x01, 0x11, 0x80, 0x00, 0x80, // # ...# #
-0x88, 0x48, 0x80, 0x40, 0x40, 0x80, //##$## $ $ #
-0x80, 0x00, 0x84, 0x88, 0x88, 0x80, //# #$#####
-0x80, 0x00, 0x40, 0x00, 0x80, 0x00, //# $ #
-0x88, 0x88, 0x80, 0x80, 0x80, 0x00, //##### # #
-0x00, 0x00, 0x80, 0x00, 0x80, 0x00, // # #
-0x00, 0x00, 0x88, 0x88, 0x80, 0x00, // #####
-//Level: 150
-0x07, 0x09,//Size x and y
-0x88, 0x88, 0x88, 0x80, //#######
-0x80, 0x01, 0x02, 0x80, //# . @#
-0x80, 0x41, 0x40, 0x80, //# $.$ #
-0x80, 0x51, 0x40, 0x80, //# *.$ #
-0x81, 0x45, 0x41, 0x80, //#.$*$.#
-0x80, 0x41, 0x50, 0x80, //# $.* #
-0x80, 0x41, 0x40, 0x80, //# $.$ #
-0x80, 0x01, 0x00, 0x80, //# . #
-0x88, 0x88, 0x88, 0x80, //#######
-//Level: 151
-0x09, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-0x82, 0x00, 0x50, 0x00, 0x80, //#@ * #
-0x80, 0x41, 0x41, 0x40, 0x80, //# $.$.$ #
-0x80, 0x14, 0x14, 0x10, 0x80, //# .$.$. #
-0x80, 0x01, 0x41, 0x40, 0x80, //# .$.$ #
-0x80, 0x00, 0x50, 0x00, 0x80, //# * #
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-//Level: 152
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x88, 0x02, 0x88, //#### @##
-0x80, 0x05, 0x40, 0x88, //# *$ ##
-0x80, 0x00, 0x00, 0x88, //# ##
-0x88, 0x01, 0x88, 0x88, //## .####
-0x88, 0x40, 0x88, 0x88, //##$ ####
-0x88, 0x01, 0x88, 0x88, //## .####
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 153
-0x09, 0x0C,//Size x and y
-0x08, 0x88, 0x80, 0x00, 0x00, // ####
-0x08, 0x00, 0x88, 0x88, 0x00, // # ####
-0x08, 0x40, 0x20, 0x08, 0x00, // #$ @ #
-0x88, 0x00, 0x88, 0x48, 0x80, //## ##$##
-0x80, 0x58, 0x18, 0x00, 0x80, //# *#.# #
-0x80, 0x11, 0x54, 0x40, 0x80, //# ..*$$ #
-0x80, 0x18, 0x18, 0x00, 0x80, //# .#.# #
-0x88, 0x00, 0x08, 0x08, 0x80, //## # ##
-0x08, 0x88, 0x04, 0x00, 0x80, // ### $ #
-0x00, 0x08, 0x08, 0x00, 0x80, // # # #
-0x00, 0x08, 0x00, 0x08, 0x80, // # ##
-0x00, 0x08, 0x88, 0x88, 0x00, // #####
-//Level: 154
-0x0C, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############
-0x81, 0x11, 0x08, 0x00, 0x00, 0x08, //#... # #
-0x81, 0x10, 0x08, 0x08, 0x80, 0x08, //#.. # ## #
-0x81, 0x10, 0x00, 0x00, 0x80, 0x08, //#.. # #
-0x81, 0x10, 0x08, 0x04, 0x88, 0x08, //#.. # $## #
-0x81, 0x11, 0x08, 0x40, 0x40, 0x08, //#... #$ $ #
-0x88, 0x88, 0x88, 0x00, 0x44, 0x08, //###### $$ #
-0x08, 0x80, 0x04, 0x04, 0x40, 0x08, // ## $ $$ #
-0x08, 0x20, 0x44, 0x40, 0x08, 0x08, // #@ $$$ # #
-0x08, 0x80, 0x40, 0x88, 0x00, 0x08, // ## $ ## #
-0x00, 0x80, 0x00, 0x00, 0x00, 0x08, // # #
-0x00, 0x88, 0x88, 0x88, 0x88, 0x88, // ##########
-//Level: 155
-0x0B, 0x0B,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //##########
-0x80, 0x00, 0x00, 0x80, 0x08, 0x00, //# # #
-0x80, 0x04, 0x04, 0x80, 0x08, 0x80, //# $ $# ##
-0x80, 0x08, 0x81, 0x80, 0x00, 0x80, //# ##.# #
-0x88, 0x48, 0x81, 0x88, 0x40, 0x80, //##$##.##$ #
-0x80, 0x41, 0x11, 0x11, 0x00, 0x80, //# $..... #
-0x82, 0x48, 0x81, 0x88, 0x48, 0x80, //#@$##.##$##
-0x88, 0x08, 0x81, 0x80, 0x00, 0x80, //## ##.# #
-0x80, 0x00, 0x40, 0x40, 0x00, 0x80, //# $ $ #
-0x80, 0x00, 0x80, 0x00, 0x88, 0x80, //# # ###
-0x88, 0x88, 0x88, 0x88, 0x80, 0x00, //#########
-//Level: 156
-0x0F, 0x0C,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // #####
-0x88, 0x88, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, //##### #
-0x80, 0x00, 0x40, 0x20, 0x80, 0x00, 0x00, 0x00, //# $ @ #
-0x80, 0x04, 0x08, 0x18, 0x88, 0x88, 0x00, 0x00, //# $ #.#####
-0x88, 0x40, 0x88, 0x18, 0x80, 0x08, 0x88, 0x80, //##$ ##.## ####
-0x08, 0x00, 0x11, 0x11, 0x10, 0x48, 0x00, 0x80, // # ..... $# #
-0x08, 0x04, 0x88, 0x18, 0x80, 0x08, 0x40, 0x80, // # $##.## #$ #
-0x08, 0x00, 0x08, 0x18, 0x80, 0x00, 0x00, 0x80, // # #.## #
-0x08, 0x88, 0x04, 0x08, 0x88, 0x88, 0x08, 0x80, // ### $ ##### ##
-0x00, 0x08, 0x08, 0x40, 0x00, 0x00, 0x40, 0x80, // # #$ $ #
-0x00, 0x08, 0x00, 0x00, 0x88, 0x80, 0x00, 0x80, // # ### #
-0x00, 0x08, 0x88, 0x88, 0x80, 0x88, 0x88, 0x80, // ###### #####
-//Level: 157
-0x12, 0x10,//Size x and y
-0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ####
-0x00, 0x80, 0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // # #########
-0x08, 0x80, 0x08, 0x80, 0x08, 0x00, 0x08, 0x00, 0x00, // ## ## # #
-0x08, 0x00, 0x48, 0x04, 0x24, 0x00, 0x08, 0x88, 0x80, // # $# $@$ ####
-0x08, 0x40, 0x04, 0x00, 0x80, 0x40, 0x48, 0x00, 0x88, // #$ $ # $ $# ##
-0x88, 0x00, 0x48, 0x80, 0x84, 0x04, 0x00, 0x00, 0x08, //## $## #$ $ #
-0x80, 0x08, 0x00, 0x80, 0x80, 0x00, 0x44, 0x40, 0x08, //# # # # $$$ #
-0x80, 0x40, 0x00, 0x04, 0x00, 0x48, 0x80, 0x88, 0x88, //# $ $ $## ####
-0x80, 0x40, 0x40, 0x84, 0x80, 0x08, 0x00, 0x80, 0x00, //# $ $ #$# # #
-0x88, 0x00, 0x88, 0x80, 0x08, 0x88, 0x40, 0x80, 0x00, //## ### ###$ #
-0x08, 0x00, 0x81, 0x11, 0x10, 0x00, 0x00, 0x80, 0x00, // # #.... #
-0x08, 0x88, 0x81, 0x11, 0x11, 0x18, 0x88, 0x80, 0x00, // ####......####
-0x00, 0x08, 0x11, 0x11, 0x88, 0x88, 0x00, 0x00, 0x00, // #....####
-0x00, 0x08, 0x11, 0x18, 0x80, 0x00, 0x00, 0x00, 0x00, // #...##
-0x00, 0x08, 0x11, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, // #...#
-0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // #####
-//Level: 158
-0x09, 0x0C,//Size x and y
-0x08, 0x88, 0x80, 0x00, 0x00, // ####
-0x08, 0x00, 0x80, 0x00, 0x00, // # #
-0x08, 0x40, 0x88, 0x80, 0x00, // #$ ###
-0x08, 0x00, 0x02, 0x80, 0x00, // # @#
-0x88, 0x08, 0x10, 0x88, 0x80, //## #. ###
-0x80, 0x08, 0x51, 0x40, 0x80, //# #*.$ #
-0x80, 0x44, 0x11, 0x80, 0x80, //# $$..# #
-0x88, 0x08, 0x81, 0x00, 0x80, //## ##. #
-0x08, 0x04, 0x00, 0x88, 0x80, // # $ ###
-0x08, 0x00, 0x88, 0x80, 0x00, // # ###
-0x08, 0x00, 0x80, 0x00, 0x00, // # #
-0x08, 0x88, 0x80, 0x00, 0x00, // ####
-//Level: 159
-0x0F, 0x0D,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // #######
-0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x80, // ##### #
-0x08, 0x88, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, // #### $ $ $ $ #
-0x08, 0x00, 0x80, 0x04, 0x08, 0x88, 0x00, 0x80, // # # $ ### #
-0x08, 0x00, 0x00, 0x20, 0x00, 0x08, 0x40, 0x80, // # @ #$ #
-0x08, 0x08, 0x88, 0x08, 0x88, 0x00, 0x00, 0x80, // # ### ### #
-0x08, 0x08, 0x11, 0x11, 0x18, 0x04, 0x40, 0x80, // # #.....# $$ #
-0x08, 0x08, 0x11, 0x11, 0x18, 0x00, 0x48, 0x80, // # #.....# $##
-0x88, 0x48, 0x11, 0x11, 0x14, 0x00, 0x08, 0x00, //##$#.....$ #
-0x80, 0x00, 0x08, 0x80, 0x80, 0x08, 0x88, 0x00, //# ## # ###
-0x80, 0x40, 0x40, 0x00, 0x44, 0x08, 0x00, 0x00, //# $ $ $$ #
-0x88, 0x00, 0x88, 0x88, 0x80, 0x08, 0x00, 0x00, //## ##### #
-0x08, 0x88, 0x80, 0x00, 0x88, 0x88, 0x00, 0x00, // #### ####
-//Level: 160
-0x10, 0x0C,//Size x and y
-0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, //#####
-0x81, 0x11, 0x80, 0x88, 0x88, 0x80, 0x00, 0x00, //#...# #####
-0x81, 0x11, 0x88, 0x80, 0x00, 0x80, 0x00, 0x00, //#...### #
-0x81, 0x11, 0x10, 0x00, 0x44, 0x88, 0x88, 0x80, //#.... $$#####
-0x81, 0x11, 0x10, 0x08, 0x00, 0x80, 0x00, 0x88, //#.... # # ##
-0x81, 0x18, 0x48, 0x88, 0x80, 0x84, 0x80, 0x08, //#..#$#### #$# #
-0x88, 0x04, 0x00, 0x80, 0x00, 0x00, 0x44, 0x08, //## $ # $$ #
-0x80, 0x04, 0x80, 0x20, 0x40, 0x44, 0x80, 0x08, //# $# @ $ $$# #
-0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x40, 0x88, //# $ $ $ # $ ##
-0x80, 0x00, 0x80, 0x04, 0x08, 0x80, 0x00, 0x80, //# # $ ## #
-0x88, 0x88, 0x88, 0x00, 0x08, 0x88, 0x88, 0x80, //###### ######
-0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // #####
-//Level: 161
-0x13, 0x0E,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x80, // ########
-0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x11, 0x11, 0x80, // # ....#
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x11, 0x11, 0x80, //############ ....#
-0x80, 0x00, 0x08, 0x00, 0x40, 0x40, 0x00, 0x11, 0x11, 0x80, //# # $ $ ....#
-0x80, 0x44, 0x48, 0x40, 0x04, 0x08, 0x00, 0x11, 0x11, 0x80, //# $$$#$ $ # ....#
-0x80, 0x04, 0x00, 0x00, 0x04, 0x08, 0x00, 0x11, 0x11, 0x80, //# $ $ # ....#
-0x80, 0x44, 0x08, 0x40, 0x40, 0x48, 0x88, 0x88, 0x88, 0x80, //# $$ #$ $ $########
-0x80, 0x04, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //# $ # #
-0x88, 0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, //## #########
-0x80, 0x00, 0x08, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, //# # ##
-0x80, 0x00, 0x00, 0x40, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, //# $ ##
-0x80, 0x04, 0x48, 0x44, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, //# $$#$$ @#
-0x80, 0x00, 0x08, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, //# # ##
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //###########
-//Level: 162
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x00, 0x00, 0x80, 0x00, 0x88, 0x88, 0x80, 0x00, 0x08, //# # ##### #
-0x88, 0x04, 0x00, 0x80, 0x00, 0x88, 0x88, 0x00, 0x40, 0x08, //## $ # #### $ #
-0x88, 0x88, 0x04, 0x40, 0x00, 0x81, 0x18, 0x00, 0x80, 0x08, //#### $$ #..# # #
-0x80, 0x04, 0x00, 0x40, 0x08, 0x81, 0x18, 0x88, 0x80, 0x88, //# $ $ ##..#### ##
-0x80, 0x40, 0x00, 0x88, 0x81, 0x11, 0x10, 0x00, 0x44, 0x08, //# $ ###.... $$ #
-0x80, 0x08, 0x48, 0x00, 0x01, 0x11, 0x18, 0x08, 0x04, 0x08, //# #$# ....# # $ #
-0x80, 0x80, 0x08, 0x04, 0x01, 0x18, 0x88, 0x48, 0x00, 0x08, //# # # $ ..###$# #
-0x80, 0x80, 0x00, 0x40, 0x81, 0x18, 0x00, 0x08, 0x80, 0x08, //# # $ #..# ## #
-0x80, 0x00, 0x48, 0x00, 0x88, 0x88, 0x00, 0x08, 0x04, 0x88, //# $# #### # $##
-0x80, 0x80, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x88, //# # # @# ##
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 163
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x18, 0x88, 0x18, //##.###.#
-0x88, 0x08, 0x00, 0x18, //## # .#
-0x88, 0x04, 0x40, 0x28, //## $$ @#
-0x88, 0x00, 0x40, 0x08, //## $ #
-0x88, 0x00, 0x80, 0x08, //## # #
-0x88, 0x00, 0x88, 0x88, //## ####
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 164
-0x0E, 0x0D,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //##############
-0x80, 0x00, 0x88, 0x01, 0x11, 0x11, 0x18, //# ## ......#
-0x80, 0x08, 0x88, 0x01, 0x18, 0x18, 0x08, //# ### ..#.# #
-0x80, 0x48, 0x00, 0x11, 0x88, 0x10, 0x18, //# $# ..##. .#
-0x88, 0x08, 0x04, 0x80, 0x80, 0x00, 0x08, //## # $# # #
-0x80, 0x40, 0x04, 0x00, 0x00, 0x80, 0x88, //# $ $ # ##
-0x80, 0x48, 0x08, 0x04, 0x88, 0x84, 0x08, //# $# # $###$ #
-0x82, 0x08, 0x08, 0x04, 0x00, 0x80, 0x08, //#@ # # $ # #
-0x80, 0x48, 0x08, 0x84, 0x80, 0x84, 0x08, //# $# ##$# #$ #
-0x80, 0x40, 0x00, 0x80, 0x00, 0x00, 0x08, //# $ # #
-0x88, 0x80, 0x00, 0x80, 0x88, 0x40, 0x88, //### # ##$ ##
-0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x80, // ##### #
-0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // #######
-//Level: 165
-0x0F, 0x09,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###############
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# #
-0x80, 0x41, 0x41, 0x41, 0x41, 0x41, 0x80, 0x80, //# $.$.$.$.$.# #
-0x80, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x80, //# .$.$.$.$.$ #
-0x80, 0x41, 0x41, 0x41, 0x41, 0x41, 0x82, 0x80, //# $.$.$.$.$.#@#
-0x80, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x80, //# .$.$.$.$.$ #
-0x80, 0x41, 0x41, 0x41, 0x41, 0x41, 0x80, 0x80, //# $.$.$.$.$.# #
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###############
-//Level: 166
-0x0F, 0x0B,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // #######
-0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // # #
-0x00, 0x08, 0x04, 0x04, 0x08, 0x80, 0x00, 0x00, // # $ $ ##
-0x00, 0x08, 0x88, 0x88, 0x11, 0x88, 0x88, 0x80, // #####..#####
-0x88, 0x88, 0x88, 0x11, 0x51, 0x00, 0x40, 0x80, //######..*. $ #
-0x80, 0x04, 0x24, 0x11, 0x11, 0x84, 0x40, 0x80, //# $@$....#$$ #
-0x80, 0x00, 0x40, 0x84, 0x88, 0x80, 0x00, 0x80, //# $ #$### #
-0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x88, 0x80, //##### ###
-0x00, 0x00, 0x88, 0x80, 0x08, 0x88, 0x80, 0x00, // ### ####
-0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, // # #
-0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // ####
-//Level: 167
-0x09, 0x07,//Size x and y
-0x00, 0x88, 0x88, 0x80, 0x00, // #####
-0x00, 0x80, 0x00, 0x88, 0x80, // # ###
-0x88, 0x81, 0x80, 0x00, 0x80, //###.# #
-0x80, 0x41, 0x40, 0x80, 0x80, //# $.$ # #
-0x80, 0x85, 0x04, 0x00, 0x80, //# #* $ #
-0x82, 0x01, 0x08, 0x88, 0x80, //#@ . ####
-0x88, 0x88, 0x88, 0x00, 0x00, //######
-//Level: 168
-0x13, 0x0E,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // #######
-0x00, 0x00, 0x80, 0x08, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // # # ####
-0x88, 0x88, 0x80, 0x48, 0x40, 0x80, 0x08, 0x80, 0x00, 0x00, //##### $#$ # ##
-0x81, 0x10, 0x80, 0x08, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, //#.. # # # #
-0x81, 0x10, 0x80, 0x48, 0x40, 0x80, 0x04, 0x88, 0x88, 0x00, //#.. # $#$ # $####
-0x81, 0x00, 0x80, 0x00, 0x00, 0x84, 0x00, 0x80, 0x08, 0x00, //#. # #$ # #
-0x81, 0x10, 0x00, 0x48, 0x00, 0x80, 0x40, 0x00, 0x08, 0x00, //#.. $# # $ #
-0x81, 0x12, 0x80, 0x08, 0x40, 0x84, 0x00, 0x80, 0x08, 0x00, //#..@# #$ #$ # #
-0x81, 0x10, 0x80, 0x48, 0x00, 0x00, 0x04, 0x80, 0x08, 0x00, //#.. # $# $# #
-0x81, 0x10, 0x80, 0x08, 0x44, 0x84, 0x00, 0x80, 0x08, 0x80, //#.. # #$$#$ # ##
-0x81, 0x10, 0x80, 0x48, 0x00, 0x80, 0x04, 0x84, 0x00, 0x80, //#.. # $# # $#$ #
-0x81, 0x10, 0x80, 0x08, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, //#.. # # # # #
-0x88, 0x10, 0x88, 0x88, 0x00, 0x88, 0x88, 0x80, 0x00, 0x80, //##. #### ##### #
-0x08, 0x88, 0x80, 0x08, 0x88, 0x80, 0x00, 0x88, 0x88, 0x80, // #### #### #####
-//Level: 169
-0x10, 0x0E,//Size x and y
-0x88, 0x88, 0x80, 0x88, 0x88, 0x00, 0x00, 0x00, //##### ####
-0x81, 0x11, 0x80, 0x80, 0x08, 0x88, 0x80, 0x00, //#...# # ####
-0x81, 0x11, 0x88, 0x80, 0x04, 0x00, 0x80, 0x00, //#...### $ #
-0x81, 0x11, 0x18, 0x80, 0x40, 0x04, 0x88, 0x80, //#....## $ $###
-0x88, 0x11, 0x11, 0x88, 0x00, 0x04, 0x00, 0x80, //##....## $ #
-0x88, 0x81, 0x11, 0x08, 0x80, 0x40, 0x40, 0x80, //###... ## $ $ #
-0x80, 0x88, 0x00, 0x00, 0x80, 0x04, 0x00, 0x80, //# ## # $ #
-0x80, 0x08, 0x80, 0x80, 0x88, 0x80, 0x88, 0x88, //# ## # ### ####
-0x80, 0x40, 0x80, 0x84, 0x00, 0x40, 0x00, 0x08, //# $ # #$ $ #
-0x80, 0x04, 0x02, 0x04, 0x00, 0x00, 0x40, 0x08, //# $ @ $ $ #
-0x80, 0x00, 0x80, 0x40, 0x44, 0x04, 0x08, 0x88, //# # $ $$ $ ###
-0x80, 0x08, 0x88, 0x88, 0x80, 0x08, 0x88, 0x00, //# ###### ###
-0x80, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, //# ## ####
-0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //###
-//Level: 170
-0x0D, 0x0D,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, // #########
-0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, // # #
-0x08, 0x84, 0x04, 0x04, 0x04, 0x88, 0x00, // ##$ $ $ $##
-0x88, 0x00, 0x40, 0x40, 0x40, 0x08, 0x80, //## $ $ $ ##
-0x80, 0x40, 0x08, 0x08, 0x00, 0x40, 0x80, //# $ # # $ #
-0x80, 0x00, 0x81, 0x11, 0x80, 0x00, 0x80, //# #...# #
-0x88, 0x08, 0x11, 0x11, 0x18, 0x08, 0x80, //## #.....# ##
-0x08, 0x08, 0x11, 0x11, 0x18, 0x08, 0x00, // # #.....# #
-0x08, 0x00, 0x81, 0x81, 0x80, 0x08, 0x00, // # #.#.# #
-0x08, 0x40, 0x40, 0x44, 0x40, 0x48, 0x00, // #$ $ $$$ $#
-0x08, 0x00, 0x80, 0x00, 0x80, 0x08, 0x00, // # # # #
-0x08, 0x88, 0x80, 0x28, 0x88, 0x88, 0x00, // #### @#####
-0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // ####
-//Level: 171
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x82, 0x00, 0x00, 0x08, 0x88, 0x00, 0x08, 0x00, 0x80, 0x08, //#@ ### # # #
-0x80, 0x80, 0x80, 0x08, 0x00, 0x40, 0x04, 0x00, 0x00, 0x08, //# # # # $ $ #
-0x88, 0x88, 0x80, 0x00, 0x00, 0x80, 0x40, 0x48, 0x48, 0x08, //##### # $ $#$# #
-0x81, 0x81, 0x18, 0x00, 0x00, 0x88, 0x40, 0x40, 0x00, 0x08, //#.#..# ##$ $ #
-0x81, 0x11, 0x11, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x88, //#..... $ # ##
-0x81, 0x11, 0x11, 0x00, 0x00, 0x88, 0x84, 0x88, 0x48, 0x88, //#..... ###$##$###
-0x81, 0x81, 0x18, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x08, //#.#..# $ # #
-0x88, 0x88, 0x80, 0x00, 0x00, 0x80, 0x08, 0x40, 0x04, 0x08, //##### # #$ $ #
-0x88, 0x88, 0x80, 0x08, 0x00, 0x40, 0x00, 0x04, 0x04, 0x08, //##### # $ $ $ #
-0x88, 0x88, 0x80, 0x08, 0x00, 0x80, 0x08, 0x00, 0x80, 0x08, //##### # # # # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 172
-0x0E, 0x0E,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ##########
-0x08, 0x80, 0x08, 0x00, 0x80, 0x08, 0x80, // ## # # ##
-0x88, 0x00, 0x48, 0x00, 0x00, 0x00, 0x88, //## $# ##
-0x80, 0x00, 0x00, 0x04, 0x80, 0x40, 0x08, //# $# $ #
-0x80, 0x44, 0x08, 0x11, 0x80, 0x40, 0x08, //# $$ #..# $ #
-0x88, 0x80, 0x83, 0x51, 0x18, 0x80, 0x88, //### #+*..## ##
-0x80, 0x00, 0x15, 0x88, 0x11, 0x40, 0x08, //# .*##..$ #
-0x80, 0x04, 0x11, 0x88, 0x51, 0x40, 0x08, //# $..##*.$ #
-0x88, 0x08, 0x81, 0x15, 0x58, 0x08, 0x88, //## ##..**# ###
-0x80, 0x44, 0x08, 0x11, 0x80, 0x04, 0x08, //# $$ #..# $ #
-0x80, 0x00, 0x08, 0x00, 0x04, 0x00, 0x08, //# # $ #
-0x88, 0x00, 0x00, 0x40, 0x84, 0x00, 0x88, //## $ #$ ##
-0x08, 0x80, 0x08, 0x00, 0x80, 0x08, 0x80, // ## # # ##
-0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ##########
-//Level: 173
-0x0F, 0x10,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###############
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# #
-0x80, 0x40, 0x08, 0x04, 0x08, 0x00, 0x00, 0x80, //# $ # $ # #
-0x80, 0x40, 0x80, 0x48, 0x40, 0x80, 0x00, 0x80, //# $ # $#$ # #
-0x80, 0x48, 0x04, 0x00, 0x04, 0x00, 0x00, 0x80, //# $# $ $ #
-0x80, 0x00, 0x40, 0x00, 0x80, 0x48, 0x00, 0x80, //# $ # $# #
-0x84, 0x80, 0x40, 0x08, 0x00, 0x40, 0x84, 0x80, //#$# $ # $ #$#
-0x80, 0x08, 0x40, 0x80, 0x00, 0x40, 0x00, 0x80, //# #$ # $ #
-0x80, 0x00, 0x04, 0x00, 0x04, 0x08, 0x40, 0x80, //# $ $ #$ #
-0x80, 0x00, 0x80, 0x48, 0x40, 0x80, 0x40, 0x80, //# # $#$ # $ #
-0x80, 0x00, 0x08, 0x04, 0x08, 0x00, 0x40, 0x80, //# # $ # $ #
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# #
-0x80, 0x88, 0x88, 0x82, 0x88, 0x88, 0x80, 0x80, //# #####@##### #
-0x81, 0x11, 0x11, 0x01, 0x11, 0x11, 0x11, 0x80, //#..... .......#
-0x81, 0x11, 0x11, 0x01, 0x11, 0x11, 0x11, 0x80, //#..... .......#
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###############
-//Level: 174
-0x0A, 0x0C,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x88, // #######
-0x08, 0x88, 0x00, 0x00, 0x08, // ### #
-0x88, 0x00, 0x08, 0x08, 0x08, //## # # #
-0x80, 0x08, 0x14, 0x44, 0x08, //# #.$$$ #
-0x80, 0x81, 0x58, 0x08, 0x88, //# #.*# ###
-0x80, 0x01, 0x18, 0x08, 0x00, //# ..# #
-0x88, 0x81, 0x14, 0x08, 0x80, //###..$ ##
-0x00, 0x81, 0x80, 0x40, 0x80, // #.# $ #
-0x08, 0x80, 0x80, 0x82, 0x80, // ## # #@#
-0x08, 0x04, 0x00, 0x40, 0x80, // # $ $ #
-0x08, 0x00, 0x00, 0x08, 0x80, // # ##
-0x08, 0x88, 0x88, 0x88, 0x00, // #######
-//Level: 175
-0x0A, 0x09,//Size x and y
-0x08, 0x88, 0x80, 0x00, 0x00, // ####
-0x08, 0x00, 0x88, 0x88, 0x80, // # #####
-0x88, 0x40, 0x88, 0x00, 0x80, //##$ ## #
-0x80, 0x04, 0x24, 0x00, 0x80, //# $@$ #
-0x80, 0x00, 0x88, 0x40, 0x80, //# ##$ #
-0x88, 0x81, 0x88, 0x08, 0x88, //###.## ###
-0x08, 0x11, 0x14, 0x04, 0x08, // #...$ $ #
-0x08, 0x81, 0x10, 0x00, 0x08, // ##.. #
-0x00, 0x88, 0x88, 0x88, 0x88, // ########
-//Level: 176
-0x0B, 0x09,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // #####
-0x00, 0x08, 0x02, 0x08, 0x00, 0x00, // # @ #
-0x00, 0x08, 0x04, 0x08, 0x00, 0x00, // # $ #
-0x00, 0x08, 0x41, 0x48, 0x00, 0x00, // #$.$#
-0x00, 0x88, 0x14, 0x18, 0x80, 0x00, // ##.$.##
-0x88, 0x81, 0x41, 0x41, 0x88, 0x80, //###.$.$.###
-0x80, 0x04, 0x14, 0x14, 0x00, 0x80, //# $.$.$ #
-0x80, 0x00, 0x01, 0x00, 0x00, 0x80, //# . #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###########
-//Level: 177
-0x0B, 0x0B,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // #####
-0x00, 0x08, 0x00, 0x08, 0x00, 0x00, // # #
-0x00, 0x08, 0x04, 0x48, 0x00, 0x00, // # $$#
-0x88, 0x88, 0x01, 0x08, 0x88, 0x80, //#### . ####
-0x80, 0x40, 0x51, 0x50, 0x00, 0x80, //# $ *.* #
-0x80, 0x41, 0x11, 0x11, 0x40, 0x80, //# $.....$ #
-0x80, 0x00, 0x51, 0x50, 0x40, 0x80, //# *.* $ #
-0x88, 0x88, 0x01, 0x08, 0x88, 0x80, //#### . ####
-0x00, 0x08, 0x44, 0x48, 0x00, 0x00, // #$$$#
-0x00, 0x08, 0x02, 0x08, 0x00, 0x00, // # @ #
-0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // #####
-//Level: 178
-0x08, 0x08,//Size x and y
-0x00, 0x88, 0x88, 0x80, // #####
-0x88, 0x80, 0x00, 0x88, //### ##
-0x80, 0x01, 0x05, 0x08, //# . * #
-0x80, 0x14, 0x18, 0x28, //# .$.#@#
-0x88, 0x08, 0x04, 0x08, //## # $ #
-0x08, 0x04, 0x08, 0x08, // # $ # #
-0x08, 0x88, 0x00, 0x08, // ### #
-0x00, 0x08, 0x88, 0x88, // #####
-//Level: 179
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x80, 0x00, //#####
-0x80, 0x00, 0x88, 0x88, //# ####
-0x80, 0x44, 0x00, 0x08, //# $$ #
-0x80, 0x18, 0x10, 0x08, //# .#. #
-0x80, 0x08, 0x80, 0x88, //# ## ##
-0x80, 0x08, 0x84, 0x80, //# ##$#
-0x80, 0x20, 0x01, 0x80, //# @ .#
-0x88, 0x88, 0x88, 0x80, //#######
-//Level: 180
-0x14, 0x0D,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // ####
-0x88, 0x88, 0x88, 0x88, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, //######## #####
-0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, //# # #
-0x80, 0x00, 0x08, 0x08, 0x80, 0x08, 0x00, 0x88, 0x88, 0x00, //# # ## # ####
-0x88, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, 0x88, //## # # ###
-0x08, 0x00, 0x08, 0x80, 0x00, 0x80, 0x44, 0x48, 0x00, 0x08, // # ## # $$$# #
-0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x04, 0x08, // # # $ $ #
-0x08, 0x00, 0x80, 0x08, 0x08, 0x08, 0x48, 0x02, 0x80, 0x88, // # # # # #$# @# ##
-0x08, 0x88, 0x80, 0x04, 0x04, 0x08, 0x00, 0x04, 0x00, 0x80, // #### $ $ # $ #
-0x00, 0x80, 0x40, 0x88, 0x88, 0x80, 0x88, 0x80, 0x48, 0x80, // # $ ##### ### $##
-0x00, 0x80, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x08, 0x00, // # ........... #
-0x00, 0x88, 0x80, 0x08, 0x88, 0x88, 0x88, 0x00, 0x88, 0x00, // ### ####### ##
-0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, // #### ####
-//Level: 181
-0x0A, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x00, 0x00, //######
-0x80, 0x00, 0x08, 0x00, 0x00, //# #
-0x80, 0x04, 0x08, 0x88, 0x80, //# $ ####
-0x80, 0x44, 0x08, 0x00, 0x88, //# $$ # ##
-0x80, 0x80, 0x88, 0x40, 0x08, //# # ##$ #
-0x81, 0x11, 0x00, 0x11, 0x08, //#... .. #
-0x88, 0x88, 0x88, 0x80, 0x88, //####### ##
-0x80, 0x00, 0x88, 0x00, 0x08, //# ## #
-0x82, 0x40, 0x00, 0x14, 0x08, //#@$ .$ #
-0x80, 0x00, 0x88, 0x00, 0x08, //# ## #
-0x80, 0x00, 0x88, 0x88, 0x88, //# ######
-0x88, 0x88, 0x80, 0x00, 0x00, //#####
-//Level: 182
-0x13, 0x0D,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // #########
-0x00, 0x88, 0x00, 0x08, 0x80, 0x08, 0x88, 0x88, 0x80, 0x00, // ## ## ######
-0x88, 0x80, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x88, 0x80, //### # # ###
-0x80, 0x04, 0x08, 0x40, 0x80, 0x08, 0x00, 0x11, 0x10, 0x80, //# $ #$ # # ... #
-0x80, 0x80, 0x48, 0x24, 0x88, 0x08, 0x08, 0x18, 0x10, 0x80, //# # $#@$## # #.#. #
-0x80, 0x08, 0x08, 0x40, 0x08, 0x00, 0x00, 0x10, 0x10, 0x80, //# # #$ # . . #
-0x80, 0x40, 0x00, 0x04, 0x08, 0x08, 0x08, 0x18, 0x10, 0x80, //# $ $ # # #.#. #
-0x80, 0x00, 0x88, 0x00, 0x88, 0x40, 0x40, 0x10, 0x10, 0x80, //# ## ##$ $ . . #
-0x80, 0x40, 0x80, 0x00, 0x80, 0x08, 0x48, 0x18, 0x10, 0x80, //# $ # # #$#.#. #
-0x88, 0x04, 0x00, 0x40, 0x00, 0x40, 0x04, 0x11, 0x10, 0x80, //## $ $ $ $... #
-0x08, 0x40, 0x88, 0x88, 0x88, 0x00, 0x00, 0x88, 0x00, 0x80, // #$ ###### ## #
-0x08, 0x00, 0x80, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x80, // # # ##########
-0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ####
-//Level: 183
-0x11, 0x0F,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //#################
-0x80, 0x00, 0x00, 0x00, 0x81, 0x11, 0x11, 0x11, 0x80, //# #.......#
-0x80, 0x44, 0x40, 0x80, 0x41, 0x81, 0x11, 0x11, 0x80, //# $$$ # $.#.....#
-0x80, 0x08, 0x04, 0x01, 0x11, 0x11, 0x18, 0x11, 0x80, //# # $ ......#..#
-0x80, 0x40, 0x08, 0x08, 0x88, 0x18, 0x11, 0x00, 0x80, //# $ # ###.#.. #
-0x80, 0x04, 0x04, 0x40, 0x80, 0x00, 0x00, 0x00, 0x80, //# $ $$ # #
-0x80, 0x08, 0x04, 0x00, 0x04, 0x40, 0x08, 0x00, 0x80, //# # $ $$ # #
-0x80, 0x88, 0x00, 0x80, 0x80, 0x80, 0x08, 0x80, 0x80, //# ## # # # ## #
-0x80, 0x40, 0x48, 0x80, 0x80, 0x88, 0x00, 0x00, 0x80, //# $ $## # ## #
-0x80, 0x42, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x80, //# $@$ $ # #
-0x80, 0x40, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, //# $ $ # #
-0x80, 0x08, 0x84, 0x40, 0x80, 0x08, 0x80, 0x00, 0x80, //# ##$$ # ## #
-0x80, 0x44, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x80, //# $$ $ # #
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //#################
-//Level: 184
-0x0F, 0x10,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, //#############
-0x81, 0x11, 0x18, 0x00, 0x88, 0x00, 0x80, 0x00, //#....# ## #
-0x81, 0x10, 0x18, 0x04, 0x04, 0x40, 0x80, 0x00, //#.. .# $ $$ #
-0x81, 0x11, 0x11, 0x20, 0x88, 0x00, 0x80, 0x00, //#.....@ ## #
-0x81, 0x11, 0x18, 0x80, 0x80, 0x08, 0x80, 0x00, //#....## # ##
-0x88, 0x18, 0x88, 0x84, 0x80, 0x08, 0x00, 0x00, //##.####$# #
-0x80, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, //# # #
-0x80, 0x40, 0x04, 0x08, 0x88, 0x48, 0x88, 0x80, //# $ $ ###$####
-0x88, 0x08, 0x88, 0x00, 0x00, 0x40, 0x00, 0x80, //## ### $ #
-0x80, 0x40, 0x80, 0x48, 0x08, 0x80, 0x40, 0x80, //# $ # $# ## $ #
-0x80, 0x00, 0x04, 0x00, 0x40, 0x88, 0x08, 0x80, //# $ $ ## ##
-0x88, 0x88, 0x88, 0x80, 0x04, 0x88, 0x08, 0x80, //####### $## ##
-0x00, 0x00, 0x88, 0x84, 0x04, 0x00, 0x00, 0x80, // ###$ $ #
-0x00, 0x00, 0x80, 0x00, 0x04, 0x80, 0x00, 0x80, // # $# #
-0x00, 0x00, 0x80, 0x00, 0x00, 0x88, 0x88, 0x80, // # #####
-0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // #######
-//Level: 185
-0x0B, 0x0A,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x88, 0x80, // ######
-0x08, 0x88, 0x88, 0x10, 0x00, 0x80, // #####. #
-0x08, 0x00, 0x81, 0x18, 0x80, 0x80, // # #..## #
-0x08, 0x00, 0x41, 0x10, 0x00, 0x80, // # $.. #
-0x08, 0x00, 0x80, 0x18, 0x08, 0x80, // # # .# ##
-0x88, 0x80, 0x88, 0x48, 0x00, 0x80, //### ##$# #
-0x80, 0x40, 0x00, 0x04, 0x40, 0x80, //# $ $$ #
-0x80, 0x84, 0x80, 0x08, 0x00, 0x80, //# #$# # #
-0x82, 0x00, 0x88, 0x88, 0x88, 0x80, //#@ #######
-0x88, 0x88, 0x80, 0x00, 0x00, 0x00, //#####
-//Level: 186
-0x07, 0x09,//Size x and y
-0x88, 0x88, 0x88, 0x80, //#######
-0x82, 0x05, 0x00, 0x80, //#@ * #
-0x80, 0x41, 0x04, 0x80, //# $. $#
-0x84, 0x05, 0x00, 0x80, //#$ * #
-0x81, 0x51, 0x51, 0x80, //#.*.*.#
-0x80, 0x01, 0x40, 0x80, //# .$ #
-0x80, 0x41, 0x40, 0x80, //# $.$ #
-0x80, 0x05, 0x00, 0x80, //# * #
-0x88, 0x88, 0x88, 0x80, //#######
-//Level: 187
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x00, 0x80, 0x08, 0x28, 0x08, 0x80, 0x08, 0x88, 0x88, //# # #@# ## #####
-0x80, 0x80, 0x80, 0x04, 0x00, 0x00, 0x40, 0x08, 0x88, 0x88, //# # # $ $ #####
-0x80, 0x80, 0x00, 0x08, 0x88, 0x88, 0x80, 0x40, 0x08, 0x88, //# # ###### $ ###
-0x80, 0x00, 0x80, 0x08, 0x11, 0x11, 0x80, 0x04, 0x40, 0x08, //# # #....# $$ #
-0x88, 0x48, 0x84, 0x88, 0x11, 0x11, 0x80, 0x00, 0x00, 0x08, //##$##$##....# #
-0x80, 0x00, 0x00, 0x08, 0x11, 0x11, 0x88, 0x48, 0x84, 0x88, //# #....##$##$##
-0x80, 0x04, 0x40, 0x08, 0x11, 0x11, 0x80, 0x00, 0x00, 0x08, //# $$ #....# #
-0x80, 0x40, 0x04, 0x00, 0x80, 0x08, 0x00, 0x88, 0x80, 0x08, //# $ $ # # ### #
-0x88, 0x88, 0x80, 0x04, 0x00, 0x04, 0x00, 0x00, 0x40, 0x08, //##### $ $ $ #
-0x88, 0x88, 0x80, 0x80, 0x00, 0x08, 0x00, 0x80, 0x00, 0x88, //##### # # # ##
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 188
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x08, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x88, //# # # # ##
-0x80, 0x48, 0x04, 0x04, 0x08, 0x81, 0x11, 0x40, 0x04, 0x08, //# $# $ $ ##...$ $ #
-0x80, 0x04, 0x00, 0x80, 0x88, 0x11, 0x11, 0x80, 0x40, 0x08, //# $ # ##....# $ #
-0x80, 0x88, 0x04, 0x08, 0x81, 0x11, 0x18, 0x00, 0x04, 0x08, //# ## $ ##....# $ #
-0x80, 0x40, 0x00, 0x08, 0x11, 0x11, 0x88, 0x04, 0x00, 0x08, //# $ #....## $ #
-0x80, 0x48, 0x80, 0x08, 0x11, 0x18, 0x00, 0x00, 0x00, 0x08, //# $## #...# #
-0x80, 0x00, 0x44, 0x48, 0x84, 0x88, 0x00, 0x88, 0x80, 0x88, //# $$$##$## ### ##
-0x80, 0x80, 0x80, 0x08, 0x00, 0x08, 0x00, 0x80, 0x00, 0x08, //# # # # # # #
-0x80, 0x40, 0x80, 0x04, 0x00, 0x88, 0x00, 0x00, 0x00, 0x08, //# $ # $ ## #
-0x80, 0x00, 0x08, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x08, //# # #@ #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 189
-0x0F, 0x0E,//Size x and y
-0x88, 0x88, 0x80, 0x00, 0x00, 0x08, 0x88, 0x80, //##### ####
-0x82, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x80, //#@ ######## #
-0x88, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x80, //## $ $ #
-0x08, 0x08, 0x08, 0x00, 0x88, 0x88, 0x00, 0x80, // # # # #### #
-0x08, 0x00, 0x40, 0x00, 0x88, 0x88, 0x48, 0x80, // # $ ####$##
-0x08, 0x40, 0x88, 0x08, 0x04, 0x04, 0x08, 0x00, // #$ ## # $ $ #
-0x88, 0x04, 0x00, 0x48, 0x00, 0x00, 0x08, 0x00, //## $ $# #
-0x80, 0x00, 0x80, 0x00, 0x00, 0x08, 0x08, 0x00, //# # # #
-0x80, 0x00, 0x88, 0x88, 0x84, 0x88, 0x88, 0x00, //# #####$####
-0x88, 0x88, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, //##### # #
-0x00, 0x00, 0x81, 0x11, 0x00, 0x40, 0x80, 0x00, // #... $ #
-0x00, 0x00, 0x81, 0x11, 0x18, 0x00, 0x80, 0x00, // #....# #
-0x00, 0x00, 0x81, 0x11, 0x18, 0x88, 0x80, 0x00, // #....####
-0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ######
-//Level: 190
-0x14, 0x10,//Size x and y
-0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ####
-0x88, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //## ###
-0x82, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#@$ #
-0x88, 0x80, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //### $ #
-0x08, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // # #######
-0x08, 0x00, 0x40, 0x11, 0x11, 0x88, 0x88, 0x00, 0x00, 0x00, // # $ ....####
-0x08, 0x00, 0x88, 0x81, 0x11, 0x00, 0x08, 0x88, 0x88, 0x80, // # ###... ######
-0x08, 0x80, 0x88, 0x01, 0x11, 0x80, 0x08, 0x00, 0x00, 0x88, // ## ## ...# # ##
-0x08, 0x04, 0x88, 0x01, 0x11, 0x80, 0x88, 0x00, 0x40, 0x08, // # $## ...# ## $ #
-0x08, 0x00, 0x00, 0x88, 0x88, 0x80, 0x88, 0x80, 0x84, 0x08, // # ##### ### #$ #
-0x08, 0x00, 0x80, 0x08, 0x08, 0x80, 0x80, 0x00, 0x80, 0x08, // # # # ## # # #
-0x08, 0x88, 0x88, 0x00, 0x00, 0x80, 0x84, 0x08, 0x04, 0x08, // ##### # #$ # $ #
-0x00, 0x00, 0x08, 0x80, 0x80, 0x00, 0x00, 0x40, 0x40, 0x08, // ## # $ $ #
-0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x84, 0x04, 0x04, 0x08, // ### #$ $ $ #
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x80, 0x08, // ##### # #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, // ########
-//Level: 191
-0x0F, 0x0D,//Size x and y
-0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //####
-0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //# #
-0x80, 0x08, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, //# ##########
-0x80, 0x00, 0x08, 0x80, 0x00, 0x00, 0x80, 0x00, //# ## #
-0x81, 0x18, 0x00, 0x00, 0x44, 0x80, 0x80, 0x00, //#..# $$# #
-0x81, 0x10, 0x08, 0x80, 0x00, 0x40, 0x88, 0x80, //#.. ## $ ###
-0x81, 0x18, 0x00, 0x88, 0x48, 0x04, 0x00, 0x80, //#..# ##$# $ #
-0x81, 0x10, 0x00, 0x80, 0x24, 0x04, 0x00, 0x80, //#.. # @$ $ #
-0x81, 0x18, 0x00, 0x80, 0x40, 0x40, 0x00, 0x80, //#..# # $ $ #
-0x80, 0x10, 0x00, 0x80, 0x40, 0x40, 0x88, 0x80, //# . # $ $ ###
-0x80, 0x08, 0x00, 0x80, 0x00, 0x88, 0x80, 0x00, //# # # ###
-0x80, 0x08, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, //# # ###
-0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, //#########
-//Level: 192
-0x08, 0x07,//Size x and y
-0x00, 0x08, 0x88, 0x88, // #####
-0x88, 0x88, 0x01, 0x08, //#### . #
-0x80, 0x52, 0x01, 0x08, //# *@ . #
-0x80, 0x40, 0x80, 0x08, //# $ # #
-0x80, 0x80, 0x04, 0x08, //# # $ #
-0x80, 0x00, 0x88, 0x88, //# ####
-0x88, 0x88, 0x80, 0x00, //#####
-//Level: 193
-0x13, 0x0B,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // #######
-0x00, 0x00, 0x88, 0x88, 0x80, 0x08, 0x00, 0x88, 0x88, 0x00, // ##### # ####
-0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x40, 0x00, 0x08, 0x00, // # # $ #
-0x08, 0x88, 0x80, 0x84, 0x40, 0x88, 0x08, 0x80, 0x08, 0x00, // #### #$$ ## ## #
-0x88, 0x00, 0x00, 0x00, 0x80, 0x80, 0x08, 0x80, 0x88, 0x80, //## # # ## ###
-0x80, 0x08, 0x88, 0x04, 0x84, 0x00, 0x40, 0x04, 0x00, 0x80, //# ### $#$ $ $ #
-0x81, 0x11, 0x00, 0x00, 0x80, 0x88, 0x00, 0x80, 0x00, 0x80, //#... # ## # #
-0x81, 0x11, 0x80, 0x00, 0x02, 0x08, 0x08, 0x88, 0x08, 0x80, //#...# @ # ### ##
-0x81, 0x11, 0x80, 0x08, 0x88, 0x00, 0x40, 0x04, 0x00, 0x80, //#...# ### $ $ #
-0x88, 0x88, 0x88, 0x88, 0x08, 0x80, 0x00, 0x80, 0x00, 0x80, //######## ## # #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // #########
-//Level: 194
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x80, 0x01, 0x88, //### .##
-0x80, 0x40, 0x80, 0x88, //# $ # ##
-0x80, 0x54, 0x00, 0x88, //# *$ ##
-0x80, 0x18, 0x20, 0x88, //# .#@ ##
-0x80, 0x00, 0x08, 0x88, //# ###
-0x80, 0x00, 0x88, 0x88, //# ####
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 195
-0x10, 0x0F,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ######
-0x00, 0x00, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, // # #
-0x00, 0x88, 0x80, 0x88, 0x08, 0x00, 0x00, 0x00, // ### ## #
-0x88, 0x80, 0x04, 0x00, 0x48, 0x88, 0x88, 0x88, //### $ $#######
-0x80, 0x00, 0x40, 0x40, 0x08, 0x00, 0x11, 0x18, //# $ $ # ...#
-0x80, 0x84, 0x08, 0x00, 0x48, 0x00, 0x11, 0x18, //# #$ # $# ...#
-0x80, 0x80, 0x08, 0x40, 0x00, 0x00, 0x11, 0x18, //# # #$ ...#
-0x80, 0x84, 0x08, 0x00, 0x08, 0x00, 0x11, 0x18, //# #$ # # ...#
-0x80, 0x80, 0x48, 0x04, 0x48, 0x00, 0x11, 0x18, //# # $# $$# ...#
-0x80, 0x82, 0x08, 0x40, 0x08, 0x88, 0x88, 0x88, //# #@ #$ #######
-0x80, 0x80, 0x40, 0x40, 0x88, 0x00, 0x00, 0x00, //# # $ $ ##
-0x80, 0x80, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, //# # $ #
-0x80, 0x88, 0x80, 0x88, 0x80, 0x00, 0x00, 0x00, //# ### ###
-0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //# #
-0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //#######
-//Level: 196
-0x0C, 0x0C,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, // #####
-0x00, 0x88, 0x88, 0x88, 0x00, 0x08, // ###### #
-0x88, 0x80, 0x00, 0x01, 0x04, 0x08, //### . $ #
-0x80, 0x40, 0x08, 0x41, 0x84, 0x88, //# $ #$.#$##
-0x80, 0x08, 0x00, 0x21, 0x80, 0x08, //# # @.# #
-0x88, 0x08, 0x88, 0x81, 0x00, 0x08, //## ####. #
-0x08, 0x04, 0x00, 0x85, 0x88, 0x88, // # $ #*####
-0x08, 0x08, 0x80, 0x81, 0x00, 0x80, // # ## #. #
-0x08, 0x00, 0x00, 0x01, 0x80, 0x80, // # .# #
-0x08, 0x88, 0x40, 0x00, 0x00, 0x80, // ###$ #
-0x00, 0x08, 0x00, 0x88, 0x88, 0x80, // # #####
-0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // ####
-//Level: 197
-0x0E, 0x0D,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x80, // ##########
-0x88, 0x88, 0x11, 0x11, 0x11, 0x00, 0x80, //####...... #
-0x80, 0x00, 0x11, 0x11, 0x18, 0x00, 0x80, //# .....# #
-0x80, 0x08, 0x11, 0x11, 0x11, 0x08, 0x80, //# #...... ##
-0x88, 0x08, 0x88, 0x84, 0x88, 0x48, 0x00, //## ####$##$#
-0x82, 0x40, 0x04, 0x04, 0x00, 0x08, 0x88, //#@$ $ $ ###
-0x80, 0x44, 0x00, 0x00, 0x88, 0x00, 0x08, //# $$ ## #
-0x80, 0x80, 0x04, 0x48, 0x80, 0x08, 0x08, //# # $$## # #
-0x80, 0x00, 0x40, 0x08, 0x04, 0x40, 0x08, //# $ # $$ #
-0x80, 0x04, 0x00, 0x40, 0x00, 0x84, 0x08, //# $ $ #$ #
-0x88, 0x88, 0x00, 0x08, 0x04, 0x04, 0x08, //#### # $ $ #
-0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x08, // # # #
-0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, // ###########
-//Level: 198
-0x0F, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, //########
-0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //# #
-0x80, 0x44, 0x00, 0x08, 0x88, 0x00, 0x00, 0x00, //# $$ ###
-0x80, 0x04, 0x04, 0x44, 0x08, 0x88, 0x88, 0x00, //# $ $$$ #####
-0x88, 0x08, 0x80, 0x11, 0x10, 0x00, 0x08, 0x80, //## ## ... ##
-0x08, 0x08, 0x28, 0x11, 0x18, 0x88, 0x40, 0x80, // # #@#...###$ #
-0x08, 0x08, 0x04, 0x11, 0x10, 0x00, 0x00, 0x80, // # # $... #
-0x88, 0x08, 0x04, 0x11, 0x14, 0x08, 0x08, 0x80, //## # $...$ # ##
-0x80, 0x08, 0x88, 0x88, 0x08, 0x88, 0x08, 0x00, //# ##### ### #
-0x80, 0x00, 0x00, 0x04, 0x00, 0x04, 0x08, 0x00, //# $ $ #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x08, 0x00, //########### #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // ####
-//Level: 199
-0x13, 0x0D,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // ###########
-0x00, 0x00, 0x08, 0x00, 0x10, 0x08, 0x00, 0x08, 0x00, 0x00, // # . # #
-0x00, 0x00, 0x08, 0x08, 0x10, 0x00, 0x02, 0x08, 0x00, 0x00, // # #. @ #
-0x08, 0x88, 0x88, 0x08, 0x81, 0x18, 0x08, 0x88, 0x80, 0x00, // ##### ##..# ####
-0x88, 0x00, 0x80, 0x11, 0x88, 0x80, 0x00, 0x00, 0x88, 0x80, //## # ..### ###
-0x80, 0x40, 0x81, 0x11, 0x00, 0x04, 0x08, 0x00, 0x40, 0x80, //# $ #... $ # $ #
-0x80, 0x00, 0x01, 0x10, 0x88, 0x00, 0x88, 0x08, 0x80, 0x80, //# .. ## ## ## #
-0x88, 0x88, 0x48, 0x84, 0x80, 0x40, 0x80, 0x00, 0x80, 0x80, //####$##$# $ # # #
-0x00, 0x88, 0x08, 0x00, 0x00, 0x84, 0x04, 0x40, 0x80, 0x80, // ## # #$ $$ # #
-0x00, 0x80, 0x04, 0x08, 0x08, 0x00, 0x80, 0x48, 0x80, 0x80, // # $ # # # $## #
-0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, // # #
-0x00, 0x80, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x80, // # ########### #
-0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, // #### ####
-//Level: 200
-0x0F, 0x0C,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // #######
-0x08, 0x00, 0x80, 0x08, 0x88, 0x88, 0x00, 0x00, // # # #####
-0x88, 0x00, 0x80, 0x08, 0x11, 0x18, 0x88, 0x00, //## # #...###
-0x80, 0x04, 0x80, 0x08, 0x11, 0x10, 0x08, 0x00, //# $# #... #
-0x80, 0x40, 0x84, 0x40, 0x11, 0x10, 0x08, 0x00, //# $ #$$ ... #
-0x80, 0x04, 0x80, 0x08, 0x11, 0x10, 0x18, 0x00, //# $# #... .#
-0x80, 0x00, 0x80, 0x48, 0x88, 0x88, 0x88, 0x80, //# # $########
-0x88, 0x40, 0x00, 0x00, 0x00, 0x40, 0x40, 0x80, //##$ $ $ #
-0x88, 0x00, 0x80, 0x04, 0x40, 0x80, 0x00, 0x80, //## # $$ # #
-0x08, 0x88, 0x88, 0x80, 0x08, 0x84, 0x42, 0x80, // ###### ##$$@#
-0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, 0x80, // # ##
-0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, // ########
-//Level: 201
-0x13, 0x0F,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //###########
-0x81, 0x11, 0x11, 0x10, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, //#...... #########
-0x81, 0x11, 0x11, 0x10, 0x00, 0x80, 0x08, 0x80, 0x00, 0x80, //#...... # ## #
-0x81, 0x18, 0x88, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, //#..### $ $ #
-0x81, 0x11, 0x04, 0x04, 0x08, 0x00, 0x08, 0x80, 0x00, 0x80, //#... $ $ # ## #
-0x81, 0x11, 0x84, 0x88, 0x88, 0x80, 0x00, 0x08, 0x00, 0x80, //#...#$##### # #
-0x88, 0x80, 0x00, 0x08, 0x00, 0x08, 0x40, 0x08, 0x40, 0x80, //### # #$ #$ #
-0x00, 0x80, 0x04, 0x40, 0x40, 0x40, 0x04, 0x88, 0x00, 0x80, // # $$ $ $ $## #
-0x00, 0x80, 0x04, 0x00, 0x08, 0x48, 0x40, 0x88, 0x40, 0x80, // # $ #$#$ ##$ #
-0x00, 0x88, 0x80, 0x88, 0x08, 0x00, 0x00, 0x88, 0x00, 0x80, // ### ## # ## #
-0x00, 0x08, 0x00, 0x40, 0x40, 0x88, 0x08, 0x88, 0x88, 0x80, // # $ $ ## ######
-0x00, 0x08, 0x00, 0x00, 0x40, 0x04, 0x00, 0x80, 0x00, 0x00, // # $ $ #
-0x00, 0x08, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, // ## # # #
-0x00, 0x00, 0x88, 0x88, 0x82, 0x88, 0x88, 0x80, 0x00, 0x00, // #####@#####
-0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // ###
-//Level: 202
-0x10, 0x0C,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // #########
-0x08, 0x00, 0x80, 0x00, 0x08, 0x88, 0x88, 0x88, // # # #######
-0x08, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x08, // # $ # #
-0x88, 0x18, 0x88, 0x80, 0x40, 0x42, 0x48, 0x08, //##.#### $ $@$# #
-0x81, 0x11, 0x18, 0x88, 0x00, 0x88, 0x04, 0x08, //#....### ## $ #
-0x81, 0x11, 0x18, 0x88, 0x84, 0x08, 0x00, 0x08, //#....####$ # #
-0x81, 0x11, 0x10, 0x00, 0x00, 0x00, 0x04, 0x08, //#.... $ #
-0x88, 0x80, 0x88, 0x88, 0x48, 0x04, 0x04, 0x08, //### ####$# $ $ #
-0x80, 0x00, 0x00, 0x00, 0x08, 0x80, 0x08, 0x88, //# ## ###
-0x80, 0x44, 0x04, 0x08, 0x88, 0x88, 0x88, 0x00, //# $$ $ #######
-0x80, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, //# #####
-0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //####
-//Level: 203
-0x0E, 0x0C,//Size x and y
-0x08, 0x88, 0x88, 0x08, 0x88, 0x88, 0x80, // ##### ######
-0x08, 0x00, 0x08, 0x88, 0x00, 0x00, 0x80, // # ### #
-0x88, 0x04, 0x04, 0x08, 0x40, 0x84, 0x80, //## $ $ #$ #$#
-0x80, 0x04, 0x02, 0x04, 0x00, 0x40, 0x88, //# $ @ $ $ ##
-0x80, 0x80, 0x08, 0x80, 0x81, 0x11, 0x18, //# # ## #....#
-0x80, 0x08, 0x80, 0x40, 0x81, 0x88, 0x18, //# ## $ #.##.#
-0x88, 0x00, 0x40, 0x00, 0x01, 0x11, 0x18, //## $ ....#
-0x08, 0x04, 0x40, 0x84, 0x81, 0x11, 0x18, // # $$ #$#....#
-0x08, 0x00, 0x08, 0x00, 0x08, 0x40, 0x88, // # # #$ ##
-0x08, 0x88, 0x88, 0x04, 0x00, 0x00, 0x80, // ##### $ #
-0x00, 0x00, 0x08, 0x88, 0x80, 0x08, 0x80, // #### ##
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // ####
-//Level: 204
-0x0E, 0x0C,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x88, 0x80, 0x00, // ######
-0x08, 0x88, 0x88, 0x00, 0x00, 0x80, 0x00, // ##### #
-0x08, 0x00, 0x80, 0x04, 0x04, 0x80, 0x00, // # # $ $#
-0x08, 0x00, 0x40, 0x80, 0x40, 0x88, 0x80, // # $ # $ ###
-0x88, 0x00, 0x80, 0x08, 0x00, 0x40, 0x88, //## # # $ ##
-0x80, 0x48, 0x00, 0x20, 0x80, 0x00, 0x08, //# $# @ # #
-0x80, 0x00, 0x04, 0x04, 0x80, 0x44, 0x08, //# $ $# $$ #
-0x80, 0x04, 0x08, 0x41, 0x51, 0x08, 0x88, //# $ #$.*. ###
-0x88, 0x00, 0x80, 0x41, 0x11, 0x88, 0x00, //## # $...##
-0x08, 0x88, 0x80, 0x81, 0x11, 0x18, 0x00, // #### #....#
-0x00, 0x00, 0x80, 0x01, 0x11, 0x18, 0x00, // # ....#
-0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, // ########
-//Level: 205
-0x07, 0x09,//Size x and y
-0x88, 0x88, 0x88, 0x80, //#######
-0x80, 0x41, 0x02, 0x80, //# $. @#
-0x80, 0x01, 0x00, 0x80, //# . #
-0x84, 0x45, 0x40, 0x80, //#$$*$ #
-0x81, 0x15, 0x11, 0x80, //#..*..#
-0x80, 0x45, 0x40, 0x80, //# $*$ #
-0x80, 0x41, 0x40, 0x80, //# $.$ #
-0x80, 0x01, 0x00, 0x80, //# . #
-0x88, 0x88, 0x88, 0x80, //#######
-//Level: 206
-0x0B, 0x0A,//Size x and y
-0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //#######
-0x80, 0x28, 0x00, 0x88, 0x88, 0x80, //# @# #####
-0x80, 0x44, 0x00, 0x40, 0x00, 0x80, //# $$ $ #
-0x80, 0x08, 0x18, 0x84, 0x80, 0x80, //# #.##$# #
-0x88, 0x48, 0x11, 0x10, 0x00, 0x80, //##$#... #
-0x88, 0x01, 0x11, 0x88, 0x48, 0x80, //## ...##$##
-0x80, 0x08, 0x81, 0x88, 0x00, 0x80, //# ##.## #
-0x80, 0x04, 0x00, 0x40, 0x00, 0x80, //# $ $ #
-0x80, 0x08, 0x00, 0x08, 0x00, 0x80, //# # # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###########
-//Level: 207
-0x13, 0x0D,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // #################
-0x08, 0x11, 0x10, 0x00, 0x80, 0x00, 0x08, 0x00, 0x08, 0x80, // #... # # ##
-0x88, 0x11, 0x11, 0x10, 0x04, 0x88, 0x08, 0x08, 0x40, 0x80, //##..... $## # #$ #
-0x81, 0x11, 0x11, 0x18, 0x00, 0x40, 0x08, 0x00, 0x00, 0x80, //#......# $ # #
-0x81, 0x11, 0x11, 0x18, 0x00, 0x80, 0x08, 0x08, 0x00, 0x80, //#......# # # # #
-0x88, 0x88, 0x88, 0x88, 0x80, 0x40, 0x04, 0x04, 0x00, 0x80, //######### $ $ $ #
-0x00, 0x80, 0x00, 0x00, 0x84, 0x88, 0x40, 0x88, 0x48, 0x80, // # #$##$ ##$##
-0x08, 0x80, 0x00, 0x40, 0x00, 0x08, 0x04, 0x00, 0x00, 0x80, // ## $ # $ #
-0x08, 0x00, 0x88, 0x08, 0x88, 0x08, 0x00, 0x88, 0x40, 0x80, // # ## ### # ##$ #
-0x08, 0x04, 0x04, 0x40, 0x00, 0x00, 0x40, 0x04, 0x00, 0x80, // # $ $$ $ $ #
-0x08, 0x04, 0x00, 0x00, 0x48, 0x84, 0x08, 0x88, 0x88, 0x80, // # $ $##$ ######
-0x08, 0x88, 0x88, 0x88, 0x00, 0x20, 0x88, 0x00, 0x00, 0x00, // ####### @ ##
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // ######
-//Level: 208
-0x10, 0x0F,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // ####
-0x00, 0x00, 0x00, 0x08, 0x00, 0x88, 0x00, 0x00, // # ##
-0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x80, 0x00, // # ##
-0x00, 0x00, 0x00, 0x08, 0x04, 0x40, 0x88, 0x00, // # $$ ##
-0x00, 0x00, 0x08, 0x88, 0x40, 0x04, 0x08, 0x80, // ###$ $ ##
-0x00, 0x88, 0x88, 0x00, 0x00, 0x40, 0x00, 0x80, // #### $ #
-0x88, 0x80, 0x08, 0x08, 0x88, 0x88, 0x00, 0x80, //### # ##### #
-0x80, 0x00, 0x08, 0x08, 0x11, 0x11, 0x40, 0x80, //# # #....$ #
-0x80, 0x80, 0x00, 0x40, 0x11, 0x11, 0x80, 0x80, //# # $ ....# #
-0x80, 0x04, 0x08, 0x08, 0x15, 0x11, 0x80, 0x80, //# $ # #.*..# #
-0x88, 0x80, 0x08, 0x88, 0x80, 0x88, 0x80, 0x80, //### #### ### #
-0x00, 0x88, 0x88, 0x02, 0x40, 0x08, 0x84, 0x88, // #### @$ ##$##
-0x00, 0x00, 0x08, 0x88, 0x04, 0x00, 0x00, 0x08, // ### $ #
-0x00, 0x00, 0x00, 0x08, 0x00, 0x88, 0x00, 0x08, // # ## #
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, // #########
-//Level: 209
-0x13, 0x0D,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ######
-0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x08, 0x88, 0x88, 0x80, // # # ######
-0x00, 0x88, 0x88, 0x80, 0x80, 0x04, 0x08, 0x11, 0x11, 0x80, // ##### # $ #....#
-0x08, 0x80, 0x00, 0x88, 0x80, 0x08, 0x08, 0x11, 0x11, 0x80, // ## ### # #....#
-0x08, 0x04, 0x04, 0x08, 0x84, 0x88, 0x08, 0x11, 0x11, 0x80, // # $ $ ##$## #....#
-0x08, 0x00, 0x80, 0x08, 0x00, 0x08, 0x08, 0x11, 0x11, 0x80, // # # # # #....#
-0x08, 0x40, 0x40, 0x04, 0x24, 0x08, 0x08, 0x80, 0x08, 0x80, // #$ $ $@$ # ## ##
-0x08, 0x04, 0x80, 0x08, 0x80, 0x88, 0x00, 0x80, 0x08, 0x00, // # $# ## ## # #
-0x88, 0x00, 0x04, 0x48, 0x00, 0x88, 0x80, 0x80, 0x08, 0x00, //## $$# ### # #
-0x80, 0x04, 0x00, 0x08, 0x04, 0x40, 0x00, 0x00, 0x08, 0x00, //# $ # $$ #
-0x80, 0x40, 0x04, 0x08, 0x00, 0x88, 0x88, 0x00, 0x88, 0x00, //# $ $ # #### ##
-0x80, 0x00, 0x08, 0x88, 0x88, 0x80, 0x08, 0x88, 0x80, 0x00, //# ###### ####
-0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //######
-//Level: 210
-0x10, 0x12,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, // #########
-0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, // # #
-0x00, 0x00, 0x00, 0x08, 0x04, 0x44, 0x44, 0x08, // # $$$$$ #
-0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0x00, 0x08, // # $ $ #
-0x00, 0x08, 0x88, 0x88, 0x00, 0x40, 0x40, 0x08, // ##### $ $ #
-0x00, 0x08, 0x00, 0x08, 0x88, 0x80, 0x88, 0x88, // # #### ####
-0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, // # #
-0x00, 0x08, 0x88, 0x08, 0x88, 0x80, 0x08, 0x00, // ### #### #
-0x00, 0x00, 0x81, 0x11, 0x18, 0x80, 0x88, 0x00, // #....## ##
-0x00, 0x00, 0x81, 0x11, 0x18, 0x00, 0x80, 0x00, // #....# #
-0x00, 0x00, 0x81, 0x11, 0x18, 0x00, 0x80, 0x00, // #....# #
-0x88, 0x88, 0x81, 0x88, 0x80, 0x00, 0x80, 0x00, //#####.### #
-0x80, 0x08, 0x80, 0x80, 0x80, 0x88, 0x80, 0x00, //# ## # # ###
-0x80, 0x48, 0x84, 0x88, 0x80, 0x08, 0x80, 0x00, //# $##$### ##
-0x80, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, //# $ #
-0x80, 0x48, 0x00, 0x08, 0x80, 0x08, 0x00, 0x00, //# $# ## #
-0x88, 0x28, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, //##@#########
-0x08, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ###
-//Level: 211
-0x0D, 0x09,//Size x and y
-0x88, 0x88, 0x80, 0x88, 0x88, 0x88, 0x80, //##### #######
-0x80, 0x00, 0x88, 0x80, 0x08, 0x00, 0x80, //# ### # #
-0x80, 0x40, 0x00, 0x00, 0x40, 0x20, 0x80, //# $ $ @ #
-0x88, 0x08, 0x48, 0x81, 0x88, 0x00, 0x80, //## #$##.## #
-0x08, 0x00, 0x11, 0x15, 0x10, 0x40, 0x80, // # ...*. $ #
-0x08, 0x04, 0x80, 0x81, 0x80, 0x80, 0x80, // # $# #.# # #
-0x08, 0x80, 0x00, 0x04, 0x00, 0x00, 0x80, // ## $ #
-0x00, 0x80, 0x08, 0x88, 0x88, 0x88, 0x80, // # ########
-0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ####
-//Level: 212
-0x07, 0x09,//Size x and y
-0x88, 0x88, 0x88, 0x80, //#######
-0x80, 0x01, 0x00, 0x80, //# . #
-0x80, 0x01, 0x40, 0x80, //# .$ #
-0x80, 0x45, 0x10, 0x80, //# $*. #
-0x85, 0x01, 0x45, 0x80, //#* .$*#
-0x80, 0x55, 0x40, 0x80, //# **$ #
-0x80, 0x01, 0x40, 0x80, //# .$ #
-0x80, 0x41, 0x02, 0x80, //# $. @#
-0x88, 0x88, 0x88, 0x80, //#######
-//Level: 213
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x00, //######
-0x80, 0x00, 0x28, 0x00, //# @#
-0x80, 0x48, 0x08, 0x88, //# $# ###
-0x80, 0x50, 0x40, 0x08, //# * $ #
-0x80, 0x00, 0x88, 0x08, //# ## #
-0x88, 0x10, 0x01, 0x08, //##. . #
-0x08, 0x80, 0x00, 0x88, // ## ##
-0x00, 0x88, 0x88, 0x80, // #####
-//Level: 214
-0x10, 0x0E,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // #####
-0x08, 0x88, 0x80, 0x00, 0x88, 0x08, 0x88, 0x88, // #### ## #####
-0x08, 0x00, 0x40, 0x00, 0x08, 0x88, 0x00, 0x08, // # $ ### #
-0x08, 0x04, 0x24, 0x04, 0x00, 0x00, 0x40, 0x08, // # $@$ $ $ #
-0x08, 0x08, 0x48, 0x88, 0x88, 0x88, 0x80, 0x88, // # #$######## ##
-0x08, 0x08, 0x00, 0x40, 0x08, 0x00, 0x00, 0x08, // # # $ # #
-0x08, 0x08, 0x04, 0x04, 0x08, 0x08, 0x00, 0x08, // # # $ $ # # #
-0x88, 0x08, 0x00, 0x48, 0x08, 0x08, 0x88, 0x88, //## # $# # #####
-0x80, 0x08, 0x80, 0x00, 0x08, 0x00, 0x00, 0x08, //# ## # #
-0x80, 0x00, 0x04, 0x08, 0x08, 0x88, 0x00, 0x08, //# $ # ### #
-0x88, 0x88, 0x80, 0x88, 0x00, 0x81, 0x11, 0x18, //##### ## #....#
-0x80, 0x00, 0x04, 0x00, 0x00, 0x01, 0x11, 0x18, //# $ ....#
-0x80, 0x00, 0x00, 0x00, 0x00, 0x81, 0x11, 0x18, //# #....#
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //################
-//Level: 215
-0x10, 0x0D,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, //########
-0x80, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, //# # #
-0x80, 0x40, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, //# $ ####
-0x88, 0x08, 0x84, 0x08, 0x20, 0x88, 0x88, 0x88, //## ##$ #@ ######
-0x08, 0x00, 0x40, 0x48, 0x84, 0x00, 0x80, 0x08, // # $ $##$ # #
-0x08, 0x08, 0x00, 0x40, 0x80, 0x40, 0x11, 0x18, // # # $ # $ ...#
-0x08, 0x04, 0x08, 0x40, 0x00, 0x08, 0x11, 0x18, // # $ #$ #...#
-0x08, 0x00, 0x00, 0x08, 0x80, 0x48, 0x11, 0x18, // # ## $#...#
-0x08, 0x88, 0x04, 0x08, 0x00, 0x40, 0x11, 0x18, // ### $ # $ ...#
-0x00, 0x08, 0x88, 0x08, 0x00, 0x48, 0x11, 0x18, // ### # $#...#
-0x00, 0x00, 0x80, 0x04, 0x40, 0x08, 0x88, 0x88, // # $$ #####
-0x00, 0x00, 0x80, 0x00, 0x00, 0x88, 0x00, 0x00, // # ##
-0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // #######
-//Level: 216
-0x0E, 0x0E,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //##############
-0x80, 0x00, 0x00, 0x00, 0x88, 0x80, 0x08, //# ### #
-0x80, 0x44, 0x04, 0x00, 0x00, 0x44, 0x08, //# $$ $ $$ #
-0x80, 0x00, 0x00, 0x40, 0x88, 0x80, 0x08, //# $ ### #
-0x88, 0x48, 0x88, 0x88, 0x00, 0x80, 0x88, //##$##### # ##
-0x88, 0x08, 0x01, 0x11, 0x11, 0x80, 0x08, //## # .....# #
-0x88, 0x08, 0x01, 0x11, 0x81, 0x80, 0x08, //## # ...#.# #
-0x80, 0x00, 0x81, 0x11, 0x11, 0x84, 0x08, //# #.....#$ #
-0x80, 0x00, 0x81, 0x51, 0x11, 0x42, 0x88, //# #.*...$@##
-0x80, 0x40, 0x80, 0x08, 0x88, 0x08, 0x88, //# $ # ### ###
-0x80, 0x40, 0x88, 0x80, 0x40, 0x40, 0x08, //# $ ### $ $ #
-0x80, 0x44, 0x40, 0x00, 0x00, 0x44, 0x08, //# $$$ $$ #
-0x80, 0x00, 0x88, 0x80, 0x00, 0x00, 0x08, //# ### #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //##############
-//Level: 217
-0x0E, 0x0E,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, // ####
-0x00, 0x88, 0x88, 0x88, 0x80, 0x08, 0x80, // ####### ##
-0x00, 0x80, 0x00, 0x08, 0x80, 0x00, 0x80, // # ## #
-0x00, 0x80, 0x80, 0x00, 0x41, 0x80, 0x88, // # # $.# ##
-0x00, 0x80, 0x00, 0x40, 0x81, 0x02, 0x08, // # $ #. @ #
-0x00, 0x88, 0x00, 0x88, 0x11, 0x10, 0x08, // ## ##... #
-0x00, 0x08, 0x84, 0x04, 0x11, 0x10, 0x88, // ##$ $... ##
-0x00, 0x88, 0x00, 0x88, 0x15, 0x18, 0x80, // ## ##.*.##
-0x88, 0x80, 0x40, 0x00, 0x08, 0x88, 0x00, //### $ ###
-0x80, 0x44, 0x08, 0x48, 0x48, 0x80, 0x00, //# $$ #$#$##
-0x80, 0x80, 0x00, 0x00, 0x40, 0x80, 0x00, //# # $ #
-0x80, 0x00, 0x08, 0x80, 0x00, 0x80, 0x00, //# ## #
-0x88, 0x80, 0x08, 0x88, 0x88, 0x80, 0x00, //### ######
-0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ####
-//Level: 218
-0x0E, 0x0D,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // ####
-0x08, 0x88, 0x80, 0x08, 0x88, 0x80, 0x00, // #### ####
-0x08, 0x00, 0x80, 0x00, 0x40, 0x88, 0x88, // # # $ ####
-0x08, 0x11, 0x10, 0x48, 0x40, 0x80, 0x08, // #... $#$ # #
-0x88, 0x18, 0x10, 0x08, 0x00, 0x04, 0x08, //##.#. # $ #
-0x81, 0x11, 0x11, 0x08, 0x88, 0x40, 0x08, //#..... ###$ #
-0x81, 0x11, 0x18, 0x48, 0x00, 0x40, 0x88, //#....#$# $ ##
-0x88, 0x84, 0x88, 0x04, 0x40, 0x00, 0x80, //###$## $$ #
-0x08, 0x00, 0x08, 0x00, 0x00, 0x40, 0x80, // # # $ #
-0x08, 0x04, 0x00, 0x24, 0x00, 0x88, 0x80, // # $ @$ ###
-0x08, 0x88, 0x84, 0x80, 0x88, 0x80, 0x00, // ####$# ###
-0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, // # #
-0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // #####
-//Level: 219
-0x0E, 0x0E,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ############
-0x88, 0x00, 0x08, 0x00, 0x80, 0x00, 0x88, //## # # ##
-0x80, 0x20, 0x48, 0x04, 0x04, 0x04, 0x08, //# @ $# $ $ $ #
-0x80, 0x04, 0x00, 0x00, 0x80, 0x40, 0x08, //# $ # $ #
-0x80, 0x44, 0x08, 0x11, 0x80, 0x04, 0x08, //# $$ #..# $ #
-0x88, 0x80, 0x81, 0x11, 0x18, 0x80, 0x88, //### #....## ##
-0x80, 0x00, 0x11, 0x88, 0x11, 0x04, 0x08, //# ..##.. $ #
-0x80, 0x40, 0x11, 0x88, 0x11, 0x00, 0x08, //# $ ..##.. #
-0x88, 0x08, 0x81, 0x11, 0x18, 0x08, 0x88, //## ##....# ###
-0x80, 0x40, 0x08, 0x11, 0x80, 0x40, 0x08, //# $ #..# $ #
-0x80, 0x04, 0x08, 0x00, 0x04, 0x04, 0x08, //# $ # $ $ #
-0x80, 0x40, 0x40, 0x40, 0x80, 0x40, 0x08, //# $ $ $ # $ #
-0x88, 0x00, 0x08, 0x00, 0x80, 0x00, 0x88, //## # # ##
-0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ############
-//Level: 220
-0x10, 0x0D,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // ##########
-0x00, 0x80, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, // # # #
-0x00, 0x80, 0x48, 0x00, 0x04, 0x08, 0x00, 0x00, // # $# $ #
-0x00, 0x80, 0x40, 0x48, 0x48, 0x08, 0x00, 0x00, // # $ $#$# #
-0x08, 0x88, 0x18, 0x11, 0x10, 0x08, 0x88, 0x88, // ###.#... #####
-0x88, 0x00, 0x11, 0x11, 0x84, 0x08, 0x00, 0x08, //## ....#$ # #
-0x80, 0x48, 0x18, 0x85, 0x80, 0x04, 0x44, 0x08, //# $#.##*# $$$ #
-0x80, 0x00, 0x11, 0x11, 0x12, 0x80, 0x40, 0x08, //# .....@# $ #
-0x80, 0x08, 0x18, 0x11, 0x10, 0x04, 0x04, 0x08, //# #.#... $ $ #
-0x80, 0x44, 0x00, 0x48, 0x48, 0x00, 0x40, 0x08, //# $$ $#$# $ #
-0x80, 0x00, 0x80, 0x08, 0x00, 0x80, 0x00, 0x88, //# # # # ##
-0x88, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x80, //###### #####
-0x00, 0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, // ######
-//Level: 221
-0x09, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x00, //########
-0x80, 0x08, 0x11, 0x08, 0x80, //# #.. ##
-0x80, 0x41, 0x24, 0x50, 0x80, //# $.@$* #
-0x80, 0x04, 0x04, 0x00, 0x80, //# $ $ #
-0x80, 0x54, 0x01, 0x40, 0x80, //# *$ .$ #
-0x88, 0x01, 0x18, 0x00, 0x80, //## ..# #
-0x08, 0x88, 0x88, 0x88, 0x80, // ########
-//Level: 222
-0x09, 0x08,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x00, // #####
-0x00, 0x08, 0x00, 0x08, 0x00, // # #
-0x00, 0x08, 0x10, 0x48, 0x00, // #. $#
-0x00, 0x08, 0x04, 0x08, 0x00, // # $ #
-0x88, 0x88, 0x11, 0x08, 0x80, //####.. ##
-0x80, 0x40, 0x55, 0x00, 0x80, //# $ ** #
-0x80, 0x10, 0x02, 0x40, 0x80, //# . @$ #
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-//Level: 223
-0x0E, 0x0F,//Size x and y
-0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //#####
-0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, //# ##
-0x80, 0x00, 0x08, 0x00, 0x88, 0x88, 0x00, //# # ####
-0x80, 0x40, 0x08, 0x88, 0x80, 0x08, 0x00, //# $ #### #
-0x80, 0x04, 0x40, 0x40, 0x00, 0x48, 0x00, //# $$ $ $#
-0x88, 0x82, 0x08, 0x40, 0x00, 0x08, 0x80, //###@ #$ ##
-0x08, 0x00, 0x88, 0x00, 0x40, 0x40, 0x88, // # ## $ $ ##
-0x08, 0x04, 0x00, 0x88, 0x08, 0x80, 0x18, // # $ ## ## .#
-0x08, 0x00, 0x84, 0x88, 0x40, 0x08, 0x18, // # #$##$ #.#
-0x08, 0x88, 0x00, 0x04, 0x11, 0x88, 0x18, // ### $..##.#
-0x00, 0x80, 0x00, 0x08, 0x15, 0x11, 0x18, // # #.*...#
-0x00, 0x80, 0x44, 0x08, 0x11, 0x11, 0x18, // # $$ #.....#
-0x00, 0x80, 0x08, 0x88, 0x88, 0x88, 0x88, // # #########
-0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, // # #
-0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ####
-//Level: 224
-0x13, 0x10,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ######
-0x00, 0x80, 0x00, 0x28, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // # @####
-0x88, 0x88, 0x80, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //##### $ #
-0x80, 0x00, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, //# ## ####
-0x80, 0x40, 0x80, 0x08, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, //# $ # ## #
-0x80, 0x40, 0x80, 0x08, 0x88, 0x88, 0x08, 0x00, 0x00, 0x00, //# $ # ##### #
-0x88, 0x04, 0x00, 0x40, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, //## $ $ # #
-0x88, 0x04, 0x04, 0x08, 0x88, 0x08, 0x08, 0x00, 0x00, 0x00, //## $ $ ### # #
-0x88, 0x08, 0x00, 0x40, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, //## # $ # # #
-0x88, 0x08, 0x08, 0x48, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, //## # #$# # #
-0x88, 0x08, 0x88, 0x00, 0x08, 0x08, 0x08, 0x88, 0x88, 0x80, //## ### # # ######
-0x80, 0x04, 0x00, 0x88, 0x88, 0x08, 0x08, 0x11, 0x11, 0x80, //# $ #### # #....#
-0x80, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x11, 0x81, 0x80, //# $ $ ..#.#
-0x88, 0x88, 0x40, 0x04, 0x80, 0x40, 0x00, 0x11, 0x11, 0x80, //####$ $# $ ....#
-0x80, 0x00, 0x00, 0x00, 0x80, 0x08, 0x80, 0x11, 0x11, 0x80, //# # ## ....#
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###################
-//Level: 225
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x20, 0x80, 0x08, //# # #@ # #
-0x80, 0x44, 0x00, 0x84, 0x48, 0x08, 0x08, 0x00, 0x88, 0x08, //# $$ #$$# # # ## #
-0x80, 0x08, 0x04, 0x04, 0x08, 0x44, 0x08, 0x00, 0x00, 0x08, //# # $ $ #$$ # #
-0x88, 0x08, 0x00, 0x80, 0x08, 0x08, 0x08, 0x00, 0x80, 0x08, //## # # # # # # #
-0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, //# ## # #
-0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x80, 0x00, 0x80, 0x08, //# # $ # # # #
-0x80, 0x40, 0x84, 0x08, 0x00, 0x08, 0x00, 0x40, 0x81, 0x18, //# $ #$ # # $ #..#
-0x88, 0x40, 0x80, 0x08, 0x88, 0x80, 0x00, 0x08, 0x11, 0x18, //##$ # #### #...#
-0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x11, 0x18, //# $ #....#
-0x80, 0x00, 0x80, 0x08, 0x00, 0x00, 0x08, 0x11, 0x11, 0x18, //# # # #.....#
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 226
-0x11, 0x10,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //#############
-0x81, 0x11, 0x11, 0x11, 0x18, 0x88, 0x80, 0x00, 0x00, //#........####
-0x81, 0x11, 0x88, 0x88, 0x08, 0x00, 0x88, 0x88, 0x80, //#...#### # #####
-0x81, 0x11, 0x80, 0x08, 0x88, 0x00, 0x00, 0x40, 0x80, //#...# ### $ #
-0x81, 0x11, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x80, //#...$$ $ $ #
-0x80, 0x01, 0x80, 0x04, 0x04, 0x80, 0x40, 0x08, 0x80, //# .# $ $# $ ##
-0x81, 0x11, 0x80, 0x84, 0x80, 0x00, 0x40, 0x08, 0x00, //#...# #$# $ #
-0x81, 0x80, 0x80, 0x40, 0x00, 0x40, 0x00, 0x08, 0x00, //#.# # $ $ #
-0x81, 0x00, 0x84, 0x88, 0x84, 0x88, 0x88, 0x48, 0x00, //#. #$###$####$#
-0x88, 0x00, 0x80, 0x00, 0x40, 0x40, 0x00, 0x08, 0x00, //## # $ $ #
-0x08, 0x00, 0x80, 0x04, 0x24, 0x00, 0x80, 0x08, 0x00, // # # $@$ # #
-0x08, 0x00, 0x80, 0x88, 0x88, 0x04, 0x00, 0x48, 0x00, // # # #### $ $#
-0x08, 0x00, 0x80, 0x00, 0x08, 0x88, 0x00, 0x08, 0x00, // # # ### #
-0x08, 0x00, 0x80, 0x44, 0x08, 0x08, 0x88, 0x88, 0x00, // # # $$ # #####
-0x08, 0x00, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, // # # #
-0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // #########
-//Level: 227
-0x0F, 0x0E,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###############
-0x80, 0x00, 0x00, 0x08, 0x11, 0x11, 0x11, 0x80, //# #......#
-0x80, 0x44, 0x08, 0x04, 0x18, 0x11, 0x11, 0x80, //# $$ # $.#....#
-0x80, 0x00, 0x80, 0x48, 0x20, 0x81, 0x11, 0x80, //# # $#@ #...#
-0x80, 0x48, 0x04, 0x08, 0x04, 0x08, 0x11, 0x80, //# $# $ # $ #..#
-0x80, 0x00, 0x40, 0x08, 0x44, 0x00, 0x11, 0x80, //# $ #$$ ..#
-0x80, 0x40, 0x84, 0x08, 0x00, 0x81, 0x41, 0x80, //# $ #$ # #.$.#
-0x80, 0x08, 0x00, 0x40, 0x40, 0x08, 0x11, 0x80, //# # $ $ #..#
-0x80, 0x80, 0x40, 0x08, 0x00, 0x00, 0x80, 0x80, //# # $ # # #
-0x80, 0x00, 0x08, 0x08, 0x48, 0x00, 0x44, 0x80, //# # #$# $$#
-0x80, 0x00, 0x80, 0x48, 0x00, 0x80, 0x00, 0x80, //# # $# # #
-0x80, 0x08, 0x00, 0x04, 0x40, 0x08, 0x00, 0x80, //# # $$ # #
-0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x80, //# # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###############
-//Level: 228
-0x0B, 0x0A,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x00, 0x00, // #####
-0x08, 0x88, 0x00, 0x08, 0x88, 0x00, // ### ###
-0x88, 0x02, 0x04, 0x04, 0x08, 0x00, //## @ $ $ #
-0x80, 0x08, 0x80, 0x88, 0x08, 0x80, //# ## ## ##
-0x80, 0x41, 0x81, 0x40, 0x00, 0x80, //# $.#.$ #
-0x80, 0x81, 0x85, 0x80, 0x00, 0x80, //# #.#*# #
-0x80, 0x41, 0x11, 0x00, 0x88, 0x80, //# $... ###
-0x88, 0x84, 0x80, 0x88, 0x80, 0x00, //###$# ###
-0x00, 0x80, 0x00, 0x80, 0x00, 0x00, // # #
-0x00, 0x88, 0x88, 0x80, 0x00, 0x00, // #####
-//Level: 229
-0x0F, 0x0F,//Size x and y
-0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //####
-0x80, 0x08, 0x88, 0x80, 0x08, 0x88, 0x88, 0x00, //# #### #####
-0x80, 0x40, 0x00, 0x88, 0x88, 0x00, 0x08, 0x00, //# $ #### #
-0x80, 0x40, 0x00, 0x08, 0x80, 0x00, 0x08, 0x00, //# $ ## #
-0x80, 0x88, 0x84, 0x04, 0x00, 0x40, 0x08, 0x80, //# ###$ $ $ ##
-0x80, 0x80, 0x40, 0x04, 0x08, 0x80, 0x00, 0x80, //# # $ $ ## #
-0x80, 0x04, 0x08, 0x44, 0x80, 0x00, 0x80, 0x80, //# $ #$$# # #
-0x88, 0x00, 0x08, 0x00, 0x84, 0x00, 0x00, 0x80, //## # #$ #
-0x08, 0x80, 0x08, 0x80, 0x04, 0x08, 0x08, 0x80, // ## ## $ # ##
-0x88, 0x88, 0x18, 0x88, 0x00, 0x48, 0x08, 0x00, //####.### $# #
-0x80, 0x08, 0x18, 0x11, 0x08, 0x00, 0x08, 0x00, //# #.#.. # #
-0x80, 0x08, 0x11, 0x11, 0x02, 0x08, 0x88, 0x00, //# #.... @ ###
-0x80, 0x40, 0x11, 0x11, 0x80, 0x88, 0x00, 0x00, //# $ ....# ##
-0x80, 0x00, 0x88, 0x11, 0x00, 0x80, 0x00, 0x00, //# ##.. #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //###########
-//Level: 230
-0x09, 0x08,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x00, // #####
-0x88, 0x88, 0x00, 0x28, 0x80, //#### @##
-0x80, 0x40, 0x40, 0x00, 0x80, //# $ $ #
-0x80, 0x81, 0x51, 0x80, 0x80, //# #.*.# #
-0x80, 0x81, 0x51, 0x80, 0x80, //# #.*.# #
-0x80, 0x00, 0x40, 0x40, 0x80, //# $ $ #
-0x88, 0x00, 0x08, 0x88, 0x80, //## ####
-0x08, 0x88, 0x88, 0x00, 0x00, // #####
-//Level: 231
-0x0A, 0x09,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x00, // ######
-0x88, 0x80, 0x00, 0x18, 0x00, //### .#
-0x80, 0x04, 0x18, 0x88, 0x88, //# $.#####
-0x80, 0x44, 0x18, 0x20, 0x08, //# $$.#@ #
-0x80, 0x00, 0x88, 0x44, 0x08, //# ##$$ #
-0x80, 0x01, 0x41, 0x00, 0x08, //# .$. #
-0x88, 0x84, 0x08, 0x88, 0x18, //###$ ###.#
-0x00, 0x81, 0x08, 0x08, 0x88, // #. # ###
-0x00, 0x88, 0x88, 0x00, 0x00, // ####
-//Level: 232
-0x08, 0x08,//Size x and y
-0x08, 0x88, 0x88, 0x80, // ######
-0x88, 0x21, 0x00, 0x80, //##@. #
-0x80, 0x44, 0x50, 0x80, //# $$* #
-0x80, 0x08, 0x00, 0x88, //# # ##
-0x80, 0x08, 0x00, 0x18, //# # .#
-0x88, 0x88, 0x08, 0x08, //#### # #
-0x00, 0x08, 0x00, 0x08, // # #
-0x00, 0x08, 0x88, 0x88, // #####
-//Level: 233
-0x13, 0x0F,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // ####
-0x00, 0x00, 0x08, 0x88, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, // #### # #
-0x00, 0x08, 0x88, 0x02, 0x88, 0x84, 0x08, 0x00, 0x00, 0x00, // ### @###$ #
-0x00, 0x88, 0x00, 0x00, 0x00, 0x40, 0x08, 0x00, 0x00, 0x00, // ## $ #
-0x08, 0x80, 0x04, 0x04, 0x48, 0x80, 0x88, 0x00, 0x00, 0x00, // ## $ $$## ##
-0x08, 0x00, 0x84, 0x88, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // # #$## #
-0x08, 0x08, 0x04, 0x04, 0x40, 0x80, 0x88, 0x80, 0x00, 0x00, // # # $ $$ # ###
-0x08, 0x00, 0x04, 0x08, 0x00, 0x80, 0x40, 0x88, 0x88, 0x80, // # $ # # $ #####
-0x88, 0x88, 0x00, 0x00, 0x80, 0x04, 0x40, 0x80, 0x00, 0x80, //#### # $$ # #
-0x88, 0x88, 0x08, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, //#### ## $ #
-0x81, 0x00, 0x00, 0x88, 0x80, 0x08, 0x88, 0x88, 0x88, 0x80, //#. ### ########
-0x81, 0x10, 0x11, 0x80, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, //#.. ..# ####
-0x81, 0x11, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#...#.#
-0x81, 0x11, 0x11, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#.....#
-0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#######
-//Level: 234
-0x12, 0x0B,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // ####
-0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x88, 0x00, 0x00, // ######### ##
-0x88, 0x00, 0x40, 0x00, 0x00, 0x04, 0x08, 0x88, 0x88, //## $ $ #####
-0x80, 0x00, 0x88, 0x08, 0x80, 0x00, 0x88, 0x11, 0x18, //# ## ## ##...#
-0x80, 0x84, 0x40, 0x40, 0x44, 0x84, 0x88, 0x11, 0x18, //# #$$ $ $$#$##...#
-0x80, 0x80, 0x00, 0x20, 0x00, 0x80, 0x00, 0x11, 0x18, //# # @ # ...#
-0x80, 0x04, 0x80, 0x88, 0x84, 0x40, 0x00, 0x11, 0x18, //# $# ###$$ ...#
-0x80, 0x40, 0x04, 0x40, 0x04, 0x08, 0x81, 0x11, 0x18, //# $ $$ $ ##....#
-0x88, 0x84, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, //###$ #######
-0x00, 0x80, 0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // # #######
-0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ####
-//Level: 235
-0x10, 0x10,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //################
-0x81, 0x11, 0x18, 0x00, 0x00, 0x00, 0x00, 0x08, //#....# #
-0x81, 0x11, 0x18, 0x08, 0x08, 0x80, 0x08, 0x08, //#....# # ## # #
-0x81, 0x11, 0x10, 0x04, 0x08, 0x00, 0x80, 0x08, //#.... $ # # #
-0x88, 0x00, 0x80, 0x04, 0x00, 0x08, 0x00, 0x08, //## # $ # #
-0x80, 0x00, 0x08, 0x44, 0x44, 0x80, 0x08, 0x08, //# #$$$$# # #
-0x80, 0x88, 0x04, 0x00, 0x00, 0x40, 0x88, 0x08, //# ## $ $ ## #
-0x80, 0x00, 0x04, 0x08, 0x80, 0x44, 0x40, 0x08, //# $ ## $$$ #
-0x80, 0x84, 0x44, 0x08, 0x80, 0x40, 0x08, 0x08, //# #$$$ ## $ # #
-0x80, 0x80, 0x04, 0x00, 0x00, 0x40, 0x00, 0x08, //# # $ $ #
-0x80, 0x00, 0x88, 0x44, 0x44, 0x80, 0x08, 0x88, //# ##$$$$# ###
-0x80, 0x08, 0x00, 0x00, 0x40, 0x08, 0x11, 0x18, //# # $ #...#
-0x80, 0x00, 0x00, 0x80, 0x48, 0x00, 0x11, 0x18, //# # $# ...#
-0x80, 0x88, 0x08, 0x08, 0x08, 0x00, 0x11, 0x18, //# ## # # # ...#
-0x82, 0x00, 0x00, 0x00, 0x00, 0x08, 0x11, 0x18, //#@ #...#
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //################
-//Level: 236
-0x14, 0x09,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, // ##################
-0x00, 0x80, 0x00, 0x00, 0x00, 0x88, 0x11, 0x18, 0x00, 0x08, // # ##...# #
-0x00, 0x80, 0x84, 0x84, 0x80, 0x88, 0x81, 0x11, 0x04, 0x08, // # #$#$# ###... $ #
-0x00, 0x80, 0x02, 0x40, 0x04, 0x00, 0x01, 0x18, 0x04, 0x08, // # @$ $ ..# $ #
-0x88, 0x88, 0x84, 0x84, 0x80, 0x80, 0x01, 0x10, 0x08, 0x88, //#####$#$# # .. ###
-0x80, 0x00, 0x40, 0x40, 0x80, 0x88, 0x88, 0x88, 0x08, 0x80, //# $ $ # ###### ##
-0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, //# # # # # #
-0x80, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x80, //# ####### #
-0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x88, 0x88, 0x80, //######### #####
-//Level: 237
-0x0E, 0x0D,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //#########
-0x80, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, //# ##
-0x80, 0x84, 0x84, 0x82, 0x08, 0x88, 0x88, //# #$#$#@ #####
-0x80, 0x40, 0x00, 0x04, 0x08, 0x00, 0x08, //# $ $ # #
-0x88, 0x08, 0x88, 0x80, 0x88, 0x08, 0x08, //## #### ## # #
-0x80, 0x08, 0x00, 0x80, 0x00, 0x00, 0x08, //# # # #
-0x80, 0x48, 0x00, 0x40, 0x08, 0x88, 0x88, //# $# $ #####
-0x81, 0x14, 0x00, 0x88, 0x08, 0x00, 0x08, //#..$ ## # #
-0x81, 0x18, 0x00, 0x80, 0x00, 0x44, 0x08, //#..# # $$ #
-0x81, 0x18, 0x88, 0x80, 0x04, 0x00, 0x08, //#..#### $ #
-0x85, 0x11, 0x18, 0x04, 0x04, 0x04, 0x08, //#*...# $ $ $ #
-0x81, 0x11, 0x18, 0x00, 0x00, 0x00, 0x08, //#....# #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //##############
-//Level: 238
-0x0F, 0x0F,//Size x and y
-0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, //#######
-0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //# #
-0x80, 0x40, 0x44, 0x80, 0x00, 0x00, 0x00, 0x00, //# $ $$#
-0x82, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, //#@ $ #
-0x80, 0x40, 0x40, 0x88, 0x88, 0x80, 0x00, 0x00, //# $ $ #####
-0x80, 0x40, 0x05, 0x11, 0x11, 0x80, 0x00, 0x00, //# $ *....#
-0x88, 0x88, 0x81, 0x88, 0x81, 0x80, 0x00, 0x00, //#####.###.#
-0x00, 0x08, 0x81, 0x80, 0x81, 0x80, 0x00, 0x00, // ##.# #.#
-0x00, 0x08, 0x01, 0x88, 0x81, 0x88, 0x88, 0x80, // # .###.#####
-0x00, 0x08, 0x01, 0x11, 0x15, 0x00, 0x40, 0x80, // # ....* $ #
-0x00, 0x08, 0x00, 0x08, 0x80, 0x40, 0x40, 0x80, // # ## $ $ #
-0x00, 0x08, 0x88, 0x88, 0x80, 0x04, 0x00, 0x80, // ###### $ #
-0x00, 0x00, 0x00, 0x00, 0x84, 0x40, 0x40, 0x80, // #$$ $ #
-0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, // # #
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // #######
-//Level: 239
-0x09, 0x08,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x80, // ######
-0x88, 0x88, 0x10, 0x02, 0x80, //####. @#
-0x80, 0x04, 0x44, 0x00, 0x80, //# $$$ #
-0x81, 0x88, 0x18, 0x81, 0x80, //#.##.##.#
-0x80, 0x00, 0x40, 0x00, 0x80, //# $ #
-0x80, 0x04, 0x18, 0x08, 0x80, //# $.# ##
-0x88, 0x80, 0x00, 0x08, 0x00, //### #
-0x00, 0x88, 0x88, 0x88, 0x00, // ######
-//Level: 240
-0x0A, 0x08,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x80, // ########
-0x08, 0x00, 0x82, 0x00, 0x88, // # #@ ##
-0x88, 0x04, 0x88, 0x80, 0x08, //## $### #
-0x80, 0x00, 0x50, 0x50, 0x08, //# * * #
-0x80, 0x05, 0x05, 0x05, 0x08, //# * * * #
-0x80, 0x10, 0x50, 0x50, 0x08, //# . * * #
-0x88, 0x88, 0x00, 0x08, 0x88, //#### ###
-0x00, 0x08, 0x88, 0x88, 0x00, // #####
-//Level: 241
-0x06, 0x07,//Size x and y
-0x88, 0x88, 0x00, //####
-0x82, 0x08, 0x88, //#@ ###
-0x80, 0x44, 0x18, //# $$.#
-0x80, 0x04, 0x18, //# $.#
-0x80, 0x40, 0x18, //# $ .#
-0x80, 0x80, 0x18, //# # .#
-0x88, 0x88, 0x88, //######
-//Level: 242
-0x0C, 0x0F,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############
-0x88, 0x00, 0x00, 0x08, 0x80, 0x08, //## ## #
-0x88, 0x00, 0x04, 0x00, 0x04, 0x08, //## $ $ #
-0x88, 0x88, 0x08, 0x80, 0x44, 0x08, //#### ## $$ #
-0x80, 0x00, 0x40, 0x80, 0x00, 0x08, //# $ # #
-0x80, 0x44, 0x40, 0x80, 0x88, 0x88, //# $$$ # ####
-0x80, 0x00, 0x80, 0x80, 0x40, 0x88, //# # # $ ##
-0x80, 0x08, 0x00, 0x80, 0x04, 0x08, //# # # $ #
-0x80, 0x48, 0x04, 0x80, 0x00, 0x08, //# $# $# #
-0x80, 0x00, 0x11, 0x80, 0x88, 0x88, //# ..# ####
-0x88, 0x88, 0x11, 0x04, 0x08, 0x28, //####.. $ #@#
-0x81, 0x11, 0x11, 0x80, 0x48, 0x08, //#.....# $# #
-0x88, 0x11, 0x11, 0x80, 0x04, 0x08, //##....# $ #
-0x88, 0x81, 0x18, 0x80, 0x00, 0x08, //###..## #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //############
-//Level: 243
-0x12, 0x0D,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ########
-0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, // #### ######
-0x00, 0x80, 0x00, 0x08, 0x80, 0x40, 0x40, 0x00, 0x28, // # ## $ $ @#
-0x00, 0x80, 0x88, 0x08, 0x84, 0x84, 0x04, 0x04, 0x88, // # ## ##$#$ $ $##
-0x88, 0x80, 0x11, 0x11, 0x11, 0x80, 0x04, 0x40, 0x88, //### ......# $$ ##
-0x80, 0x00, 0x11, 0x11, 0x11, 0x80, 0x08, 0x00, 0x08, //# ......# # #
-0x80, 0x80, 0x11, 0x11, 0x11, 0x84, 0x00, 0x40, 0x08, //# # ......#$ $ #
-0x80, 0x84, 0x11, 0x11, 0x11, 0x04, 0x48, 0x04, 0x08, //# #$...... $$# $ #
-0x80, 0x00, 0x88, 0x80, 0x88, 0x84, 0x00, 0x40, 0x88, //# ### ###$ $ ##
-0x88, 0x80, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x80, //### $ $ $ $ #
-0x00, 0x80, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x80, // # $ $ $ $ #
-0x00, 0x88, 0x88, 0x88, 0x00, 0x08, 0x88, 0x88, 0x80, // ###### ######
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // #####
-//Level: 244
-0x0E, 0x10,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, //##########
-0x80, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, //# ####
-0x80, 0x88, 0x88, 0x88, 0x08, 0x00, 0x88, //# ###### # ##
-0x80, 0x80, 0x40, 0x40, 0x40, 0x04, 0x08, //# # $ $ $ $ #
-0x80, 0x00, 0x00, 0x00, 0x84, 0x00, 0x08, //# #$ #
-0x88, 0x84, 0x00, 0x44, 0x80, 0x08, 0x88, //###$ $$# ###
-0x00, 0x80, 0x08, 0x80, 0x80, 0x48, 0x80, // # ## # $##
-0x00, 0x88, 0x48, 0x00, 0x04, 0x02, 0x80, // ##$# $ @#
-0x00, 0x08, 0x00, 0x40, 0x40, 0x88, 0x80, // # $ $ ###
-0x00, 0x08, 0x08, 0x00, 0x04, 0x00, 0x80, // # # $ #
-0x00, 0x08, 0x08, 0x80, 0x00, 0x80, 0x80, // # ## # #
-0x00, 0x88, 0x00, 0x88, 0x88, 0x80, 0x80, // ## ##### #
-0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, // # #
-0x00, 0x81, 0x11, 0x11, 0x11, 0x88, 0x80, // #.......###
-0x00, 0x81, 0x11, 0x11, 0x11, 0x80, 0x00, // #.......#
-0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, // #########
-//Level: 245
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x00, 0x12, 0x88, //## .@##
-0x88, 0x00, 0x04, 0x18, //## $.#
-0x88, 0x88, 0x58, 0x08, //####*# #
-0x88, 0x00, 0x00, 0x08, //## #
-0x80, 0x04, 0x00, 0x88, //# $ ##
-0x80, 0x00, 0x88, 0x88, //# ####
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 246
-0x0F, 0x10,//Size x and y
-0x08, 0x88, 0x80, 0x88, 0x88, 0x80, 0x00, 0x00, // #### #####
-0x08, 0x00, 0x88, 0x80, 0x00, 0x88, 0x00, 0x00, // # ### ##
-0x08, 0x04, 0x00, 0x80, 0x80, 0x08, 0x80, 0x00, // # $ # # ##
-0x08, 0x04, 0x80, 0x80, 0x88, 0x00, 0x88, 0x00, // # $# # ## ##
-0x08, 0x00, 0x04, 0x00, 0x80, 0x40, 0x08, 0x80, // # $ # $ ##
-0x08, 0x04, 0x00, 0x40, 0x84, 0x04, 0x00, 0x80, // # $ $ #$ $ #
-0x88, 0x80, 0x80, 0x88, 0x80, 0x80, 0x40, 0x80, //### # ### # $ #
-0x80, 0x00, 0x00, 0x81, 0x11, 0x18, 0x00, 0x80, //# #....# #
-0x80, 0x80, 0x44, 0x01, 0x11, 0x18, 0x80, 0x80, //# # $$ ....## #
-0x80, 0x80, 0x00, 0x81, 0x11, 0x10, 0x00, 0x80, //# # #.... #
-0x80, 0x08, 0x84, 0x81, 0x11, 0x18, 0x28, 0x80, //# ##$#....#@##
-0x80, 0x40, 0x40, 0x00, 0x80, 0x88, 0x88, 0x00, //# $ $ # ####
-0x88, 0x00, 0x00, 0x80, 0x40, 0x80, 0x00, 0x00, //## # $ #
-0x08, 0x88, 0x88, 0x80, 0x40, 0x80, 0x00, 0x00, // ###### $ #
-0x00, 0x00, 0x00, 0x88, 0x00, 0x80, 0x00, 0x00, // ## #
-0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // ####
-//Level: 247
-0x0E, 0x0F,//Size x and y
-0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // #####
-0x88, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, //## ##
-0x80, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, //# #####
-0x80, 0x80, 0x00, 0x04, 0x00, 0x80, 0x00, //# # $ #
-0x80, 0x08, 0x04, 0x08, 0x80, 0x80, 0x00, //# # $ ## #
-0x88, 0x04, 0x48, 0x11, 0x10, 0x80, 0x00, //## $$#... #
-0x08, 0x88, 0x00, 0x11, 0x10, 0x80, 0x00, // ### ... #
-0x00, 0x08, 0x88, 0x81, 0x18, 0x88, 0x88, // ####..#####
-0x88, 0x88, 0x88, 0x11, 0x18, 0x80, 0x08, //######...## #
-0x80, 0x08, 0x88, 0x04, 0x20, 0x84, 0x08, //# ### $@ #$ #
-0x80, 0x40, 0x80, 0x00, 0x80, 0x00, 0x08, //# $ # # #
-0x80, 0x04, 0x00, 0x84, 0x00, 0x40, 0x88, //# $ #$ $ ##
-0x88, 0x00, 0x00, 0x40, 0x08, 0x88, 0x80, //## $ ####
-0x08, 0x88, 0x88, 0x00, 0x88, 0x00, 0x00, // ##### ##
-0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // ####
-//Level: 248
-0x08, 0x08,//Size x and y
-0x00, 0x88, 0x88, 0x88, // ######
-0x88, 0x80, 0x10, 0x08, //### . #
-0x80, 0x42, 0x81, 0x08, //# $@#. #
-0x80, 0x04, 0x80, 0x88, //# $# ##
-0x80, 0x05, 0x00, 0x80, //# * #
-0x88, 0x00, 0x80, 0x80, //## # #
-0x08, 0x80, 0x00, 0x80, // ## #
-0x00, 0x88, 0x88, 0x80, // #####
-//Level: 249
-0x13, 0x0E,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ###########
-0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, // # # #
-0x88, 0x88, 0x80, 0x08, 0x00, 0x00, 0x04, 0x04, 0x08, 0x00, //##### # $ $ #
-0x80, 0x00, 0x88, 0x88, 0x80, 0x48, 0x80, 0x80, 0x88, 0x00, //# ##### $## # ##
-0x80, 0x40, 0x88, 0x00, 0x08, 0x08, 0x80, 0x40, 0x08, 0x00, //# $ ## # ## $ #
-0x80, 0x40, 0x02, 0x44, 0x08, 0x08, 0x84, 0x44, 0x08, 0x00, //# $ @$$ # ##$$$ #
-0x88, 0x08, 0x88, 0x00, 0x08, 0x08, 0x80, 0x00, 0x08, 0x00, //## ### # ## #
-0x88, 0x08, 0x00, 0x08, 0x88, 0x08, 0x88, 0x88, 0x48, 0x00, //## # ### #####$#
-0x88, 0x08, 0x00, 0x00, 0x04, 0x00, 0x81, 0x11, 0x18, 0x00, //## # $ #....#
-0x80, 0x08, 0x88, 0x08, 0x80, 0x40, 0x81, 0x11, 0x18, 0x80, //# ### ## $ #....##
-0x80, 0x40, 0x00, 0x40, 0x80, 0x00, 0x81, 0x14, 0x10, 0x80, //# $ $ # #..$. #
-0x80, 0x08, 0x80, 0x40, 0x80, 0x08, 0x81, 0x11, 0x10, 0x80, //# ## $ # ##.... #
-0x88, 0x88, 0x80, 0x00, 0x88, 0x88, 0x88, 0x11, 0x18, 0x80, //##### ######...##
-0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x08, 0x88, 0x88, 0x00, // ##### #####
-//Level: 250
-0x13, 0x10,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x08, 0x88, 0x88, 0x80, //############ ######
-0x80, 0x00, 0x80, 0x00, 0x08, 0x08, 0x88, 0x11, 0x11, 0x80, //# # # ###....#
-0x80, 0x00, 0x44, 0x80, 0x00, 0x20, 0x01, 0x11, 0x11, 0x80, //# $$# @ .....#
-0x80, 0x00, 0x80, 0x88, 0x80, 0x00, 0x80, 0x11, 0x11, 0x80, //# # ### # ....#
-0x88, 0x08, 0x80, 0x88, 0x80, 0x08, 0x00, 0x11, 0x11, 0x80, //## ## ### # ....#
-0x08, 0x04, 0x04, 0x00, 0x00, 0x08, 0x08, 0x08, 0x88, 0x80, // # $ $ # # ####
-0x08, 0x00, 0x40, 0x48, 0x80, 0x08, 0x00, 0x00, 0x00, 0x80, // # $ $## # #
-0x88, 0x88, 0x08, 0x00, 0x88, 0x88, 0x08, 0x08, 0x80, 0x80, //#### # #### # ## #
-0x80, 0x08, 0x08, 0x40, 0x00, 0x88, 0x08, 0x00, 0x00, 0x80, //# # #$ ## # #
-0x80, 0x40, 0x04, 0x00, 0x80, 0x88, 0x08, 0x00, 0x08, 0x80, //# $ $ # ## # ##
-0x80, 0x80, 0x40, 0x40, 0x00, 0x08, 0x08, 0x00, 0x08, 0x00, //# # $ $ # # #
-0x80, 0x04, 0x08, 0x80, 0x88, 0x08, 0x08, 0x88, 0x88, 0x00, //# $ ## ## # #####
-0x80, 0x44, 0x00, 0x00, 0x04, 0x40, 0x08, 0x00, 0x00, 0x00, //# $$ $$ #
-0x88, 0x08, 0x80, 0x88, 0x80, 0x40, 0x08, 0x00, 0x00, 0x00, //## ## ### $ #
-0x08, 0x00, 0x00, 0x80, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, // # # # #
-0x08, 0x88, 0x88, 0x80, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ###### ######
-//Level: 251
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x08, 0x00, 0x88, 0x00, 0x00, 0x80, 0x00, 0x28, 0x88, //# # ## # @###
-0x88, 0x00, 0x00, 0x40, 0x00, 0x08, 0x04, 0x88, 0x80, 0x08, //## $ # $### #
-0x88, 0x48, 0x04, 0x08, 0x84, 0x80, 0x40, 0x40, 0x00, 0x08, //##$# $ ##$# $ $ #
-0x80, 0x00, 0x48, 0x00, 0x00, 0x40, 0x00, 0x00, 0x08, 0x88, //# $# $ ###
-0x80, 0x88, 0x00, 0x04, 0x08, 0x88, 0x00, 0x81, 0x11, 0x18, //# ## $ ### #....#
-0x80, 0x80, 0x48, 0x08, 0x08, 0x08, 0x08, 0x11, 0x11, 0x88, //# # $# # # # #....##
-0x80, 0x00, 0x04, 0x04, 0x08, 0x00, 0x81, 0x11, 0x18, 0x88, //# $ $ # #....###
-0x88, 0x40, 0x88, 0x80, 0x04, 0x08, 0x11, 0x11, 0x88, 0x88, //##$ ### $ #....####
-0x80, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, //# # $ ######
-0x80, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x88, 0x88, 0x88, //# # # ######
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 252
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x08, 0x00, 0x00, 0x08, 0x00, 0x88, 0x00, 0x00, 0x88, //# # # ## ##
-0x80, 0x48, 0x00, 0x04, 0x08, 0x00, 0x00, 0x08, 0x80, 0x08, //# $# $ # ## #
-0x80, 0x40, 0x04, 0x00, 0x81, 0x18, 0x00, 0x00, 0x04, 0x08, //# $ $ #..# $ #
-0x80, 0x40, 0x40, 0x08, 0x11, 0x11, 0x80, 0x00, 0x80, 0x88, //# $ $ #....# # ##
-0x80, 0x48, 0x00, 0x81, 0x11, 0x11, 0x18, 0x88, 0x04, 0x08, //# $# #......### $ #
-0x80, 0x00, 0x80, 0x08, 0x11, 0x11, 0x80, 0x08, 0x40, 0x08, //# # #....# #$ #
-0x80, 0x40, 0x08, 0x88, 0x81, 0x18, 0x00, 0x08, 0x00, 0x08, //# $ ####..# # #
-0x88, 0x04, 0x00, 0x08, 0x80, 0x80, 0x80, 0x40, 0x04, 0x88, //## $ ## # # $ $##
-0x88, 0x80, 0x40, 0x00, 0x04, 0x82, 0x40, 0x48, 0x00, 0x08, //### $ $#@$ $# #
-0x88, 0x88, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, //#### # # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 253
-0x0F, 0x10,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ##############
-0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x80, // # # #
-0x88, 0x08, 0x80, 0x00, 0x08, 0x08, 0x80, 0x80, //## ## # ## #
-0x81, 0x11, 0x11, 0x01, 0x11, 0x11, 0x80, 0x80, //#..... .....# #
-0x81, 0x10, 0x18, 0x08, 0x10, 0x11, 0x80, 0x80, //#.. .# #. ..# #
-0x88, 0x88, 0x88, 0x08, 0x88, 0x88, 0x80, 0x80, //###### ###### #
-0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x80, // # #
-0x08, 0x88, 0x88, 0x04, 0x88, 0x88, 0x80, 0x80, // ##### $##### #
-0x08, 0x00, 0x00, 0x82, 0x80, 0x00, 0x80, 0x80, // # #@# # #
-0x88, 0x40, 0x40, 0x84, 0x80, 0x00, 0x80, 0x80, //##$ $ #$# # #
-0x80, 0x40, 0x04, 0x04, 0x00, 0x44, 0x40, 0x80, //# $ $ $ $$$ #
-0x80, 0x04, 0x00, 0x84, 0x80, 0x00, 0x80, 0x80, //# $ #$# # #
-0x80, 0x00, 0x44, 0x80, 0x84, 0x40, 0x80, 0x80, //# $$# #$$ # #
-0x88, 0x88, 0x00, 0x00, 0x00, 0x88, 0x80, 0x80, //#### ### #
-0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, 0x80, // ###### #
-0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, // #######
-//Level: 254
-0x0F, 0x0D,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //###########
-0x80, 0x00, 0x88, 0x11, 0x11, 0x88, 0x88, 0x80, //# ##....#####
-0x80, 0x04, 0x00, 0x11, 0x18, 0x80, 0x00, 0x80, //# $ ...## #
-0x88, 0x84, 0x40, 0x11, 0x88, 0x80, 0x80, 0x80, //###$$ ..### # #
-0x00, 0x80, 0x88, 0x11, 0x18, 0x84, 0x00, 0x80, // # ##...##$ #
-0x00, 0x80, 0x80, 0x00, 0x88, 0x80, 0x08, 0x80, // # # ### ##
-0x08, 0x80, 0x80, 0x40, 0x04, 0x04, 0x08, 0x00, // ## # $ $ $ #
-0x08, 0x00, 0x80, 0x80, 0x80, 0x00, 0x08, 0x00, // # # # # #
-0x08, 0x00, 0x00, 0x80, 0x40, 0x84, 0x08, 0x00, // # # $ #$ #
-0x08, 0x04, 0x40, 0x80, 0x48, 0x00, 0x88, 0x00, // # $$ # $# ##
-0x08, 0x88, 0x08, 0x80, 0x08, 0x08, 0x80, 0x00, // ### ## # ##
-0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, // #@ #
-0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // #########
-//Level: 255
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x00, 0x80, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x28, //# # # # #@#
-0x80, 0x40, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x08, //# $ $ $ # #
-0x88, 0x08, 0x88, 0x11, 0x88, 0x08, 0x88, 0x00, 0x00, 0x08, //## ###..## ### #
-0x80, 0x00, 0x81, 0x11, 0x18, 0x48, 0x00, 0x48, 0x88, 0x08, //# #....#$# $### #
-0x80, 0x40, 0x81, 0x11, 0x18, 0x00, 0x40, 0x04, 0x04, 0x08, //# $ #....# $ $ $ #
-0x80, 0x00, 0x81, 0x11, 0x18, 0x08, 0x08, 0x04, 0x04, 0x08, //# #....# # # $ $ #
-0x80, 0x00, 0x88, 0x11, 0x88, 0x00, 0x08, 0x48, 0x00, 0x08, //# ##..## #$# #
-0x88, 0x48, 0x80, 0x00, 0x08, 0x80, 0x08, 0x00, 0x84, 0x88, //##$## ## # #$##
-0x80, 0x00, 0x40, 0x04, 0x00, 0x00, 0x08, 0x00, 0x80, 0x08, //# $ $ # # #
-0x80, 0x00, 0x80, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x08, //# # # # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 256
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, //# # # #
-0x80, 0x00, 0x00, 0x00, 0x40, 0x08, 0x80, 0x88, 0x80, 0x88, //# $ ## ### ##
-0x88, 0x88, 0x80, 0x08, 0x80, 0x00, 0x40, 0x04, 0x00, 0x08, //##### ## $ $ #
-0x88, 0x11, 0x88, 0x00, 0x80, 0x80, 0x40, 0x80, 0x80, 0x08, //##..## # # $ # # #
-0x81, 0x11, 0x10, 0x04, 0x00, 0x00, 0x08, 0x84, 0x80, 0x88, //#.... $ ##$# ##
-0x81, 0x11, 0x10, 0x04, 0x88, 0x88, 0x80, 0x00, 0x84, 0x88, //#.... $##### #$##
-0x88, 0x11, 0x80, 0x80, 0x08, 0x00, 0x08, 0x00, 0x40, 0x08, //##..# # # # $ #
-0x88, 0x81, 0x80, 0x80, 0x04, 0x00, 0x04, 0x00, 0x80, 0x28, //###.# # $ $ # @#
-0x88, 0x00, 0x40, 0x04, 0x08, 0x00, 0x08, 0x00, 0x88, 0x88, //## $ $ # # ####
-0x88, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, //## ###########
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 257
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x08, 0x00, 0x80, 0x80, 0x00, 0x08, 0x00, 0x80, 0x08, //# # # # # # #
-0x80, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x08, //# $ $ $ #
-0x88, 0x08, 0x00, 0x84, 0x88, 0x84, 0x88, 0x00, 0x88, 0x08, //## # #$###$## ## #
-0x80, 0x00, 0x40, 0x00, 0x00, 0x40, 0x08, 0x00, 0x40, 0x08, //# $ $ # $ #
-0x80, 0x88, 0x84, 0x88, 0x48, 0x00, 0x08, 0x04, 0x00, 0x08, //# ###$##$# # $ #
-0x80, 0x80, 0x00, 0x40, 0x40, 0x08, 0x88, 0x88, 0x80, 0x48, //# # $ $ ###### $#
-0x80, 0x40, 0x04, 0x40, 0x40, 0x08, 0x28, 0x18, 0x11, 0x18, //# $ $$ $ #@#.#...#
-0x80, 0x80, 0x00, 0x00, 0x80, 0x08, 0x08, 0x18, 0x11, 0x18, //# # # # #.#...#
-0x80, 0x88, 0x88, 0x88, 0x88, 0x88, 0x08, 0x11, 0x11, 0x18, //# ########## #.....#
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x11, 0x11, 0x18, //# #.....#
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 258
-0x14, 0x0E,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // ####
-0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x20, 0x80, 0x00, 0x00, // ##########@ #
-0x88, 0x80, 0x00, 0x80, 0x00, 0x88, 0x40, 0x88, 0x88, 0x88, //### # ##$ ######
-0x80, 0x04, 0x40, 0x80, 0x00, 0x00, 0x40, 0x80, 0x01, 0x18, //# $$ # $ # ..#
-0x80, 0x80, 0x00, 0x80, 0x00, 0x88, 0x40, 0x00, 0x01, 0x18, //# # # ##$ ..#
-0x80, 0x80, 0x00, 0x80, 0x44, 0x08, 0x00, 0x80, 0x01, 0x18, //# # # $$ # # ..#
-0x80, 0x80, 0x88, 0x88, 0x08, 0x08, 0x88, 0x80, 0x11, 0x18, //# # #### # #### ...#
-0x80, 0x84, 0x08, 0x88, 0x08, 0x00, 0x80, 0x88, 0x88, 0x88, //# #$ ### # # ######
-0x80, 0x80, 0x08, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, //# # # # #
-0x80, 0x00, 0x00, 0x40, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, //# $ # #
-0x80, 0x80, 0x08, 0x88, 0x08, 0x80, 0x80, 0x00, 0x00, 0x00, //# # ### ## #
-0x80, 0x88, 0x88, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, //# #### #
-0x80, 0x00, 0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, //# ######
-0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //########
-//Level: 259
-0x0F, 0x0C,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // #######
-0x00, 0x08, 0x00, 0x00, 0x08, 0x88, 0x88, 0x80, // # ######
-0x00, 0x08, 0x00, 0x48, 0x00, 0x00, 0x00, 0x80, // # $# #
-0x88, 0x88, 0x40, 0x04, 0x00, 0x84, 0x40, 0x80, //####$ $ #$$ #
-0x80, 0x00, 0x04, 0x40, 0x40, 0x00, 0x40, 0x80, //# $$ $ $ #
-0x80, 0x48, 0x00, 0x88, 0x08, 0x88, 0x08, 0x80, //# $# ## ### ##
-0x80, 0x28, 0x84, 0x04, 0x00, 0x40, 0x08, 0x00, //# @##$ $ $ #
-0x80, 0x00, 0x00, 0x40, 0x04, 0x04, 0x08, 0x00, //# $ $ $ #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x44, 0x08, 0x00, //##########$$ #
-0x00, 0x81, 0x11, 0x11, 0x11, 0x11, 0x88, 0x00, // #.........##
-0x00, 0x81, 0x11, 0x11, 0x11, 0x11, 0x80, 0x00, // #.........#
-0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, // ###########
-//Level: 260
-0x10, 0x0E,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ##############
-0x08, 0x20, 0x05, 0x05, 0x05, 0x08, 0x00, 0x88, // #@ * * * # ##
-0x08, 0x48, 0x00, 0x50, 0x50, 0x08, 0x00, 0x08, // #$# * * # #
-0x08, 0x08, 0x05, 0x05, 0x05, 0x00, 0x00, 0x08, // # # * * * #
-0x08, 0x08, 0x00, 0x50, 0x50, 0x08, 0x80, 0x88, // # # * * ## ##
-0x08, 0x08, 0x05, 0x05, 0x05, 0x08, 0x80, 0x80, // # # * * * ## #
-0x08, 0x08, 0x00, 0x50, 0x50, 0x08, 0x80, 0x80, // # # * * ## #
-0x08, 0x08, 0x05, 0x05, 0x05, 0x08, 0x80, 0x80, // # # * * * ## #
-0x08, 0x08, 0x00, 0x50, 0x50, 0x08, 0x80, 0x80, // # # * * ## #
-0x08, 0x08, 0x05, 0x01, 0x05, 0x08, 0x80, 0x88, // # # * . * ## ##
-0x88, 0x08, 0x88, 0x88, 0x88, 0x88, 0x80, 0x08, //## ########## #
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, //# #
-0x80, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x08, //# ######### #
-0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x88, 0x88, //##### ####
-//Level: 261
-0x08, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x81, 0x11, 0x11, 0x08, //#..... #
-0x84, 0x08, 0x84, 0x08, //#$ ##$ #
-0x80, 0x48, 0x80, 0x08, //# $## #
-0x80, 0x04, 0x24, 0x08, //# $@$ #
-0x80, 0x00, 0x00, 0x88, //# ##
-0x88, 0x88, 0x88, 0x80, //#######
-//Level: 262
-0x13, 0x0D,//Size x and y
-0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //#####
-0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //# ##
-0x80, 0x40, 0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, //# $ #########
-0x88, 0x08, 0x08, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x80, //## # # ######
-0x88, 0x08, 0x00, 0x04, 0x84, 0x82, 0x00, 0x80, 0x00, 0x80, //## # $#$#@ # #
-0x80, 0x08, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x40, 0x80, //# # $ # $ #
-0x80, 0x08, 0x88, 0x08, 0x88, 0x88, 0x88, 0x88, 0x08, 0x80, //# ### ######### ##
-0x80, 0x08, 0x80, 0x11, 0x51, 0x11, 0x11, 0x08, 0x08, 0x80, //# ## ..*..... # ##
-0x88, 0x08, 0x80, 0x51, 0x51, 0x15, 0x15, 0x08, 0x08, 0x80, //## ## *.*..*.* # ##
-0x80, 0x48, 0x88, 0x88, 0x88, 0x88, 0x80, 0x88, 0x40, 0x80, //# $########## ##$ #
-0x80, 0x04, 0x00, 0x04, 0x00, 0x40, 0x00, 0x04, 0x00, 0x80, //# $ $ $ $ #
-0x80, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x80, //# # # # # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###################
-//Level: 263
-0x13, 0x10,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x80, // ######
-0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x11, 0x11, 0x80, // #############....#
-0x88, 0x00, 0x08, 0x80, 0x00, 0x00, 0x88, 0x11, 0x11, 0x80, //## ## ##....#
-0x80, 0x04, 0x48, 0x80, 0x04, 0x02, 0x88, 0x11, 0x11, 0x80, //# $$## $ @##....#
-0x80, 0x00, 0x00, 0x04, 0x40, 0x48, 0x00, 0x11, 0x11, 0x80, //# $$ $# ....#
-0x80, 0x04, 0x08, 0x80, 0x44, 0x08, 0x08, 0x01, 0x11, 0x80, //# $ ## $$ # # ...#
-0x80, 0x04, 0x08, 0x80, 0x40, 0x08, 0x00, 0x11, 0x11, 0x80, //# $ ## $ # ....#
-0x88, 0x08, 0x88, 0x88, 0x08, 0x88, 0x08, 0x81, 0x88, 0x80, //## ##### ### ##.###
-0x88, 0x00, 0x04, 0x00, 0x40, 0x88, 0x00, 0x01, 0x00, 0x80, //## $ $ ## . #
-0x80, 0x48, 0x88, 0x00, 0x80, 0x88, 0x88, 0x80, 0x88, 0x80, //# $### # ##### ###
-0x80, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //# $ # #
-0x80, 0x04, 0x08, 0x40, 0x40, 0x48, 0x88, 0x00, 0x80, 0x00, //# $ #$ $ $### #
-0x80, 0x44, 0x48, 0x04, 0x00, 0x08, 0x08, 0x88, 0x80, 0x00, //# $$$# $ # ####
-0x80, 0x00, 0x08, 0x00, 0x44, 0x08, 0x00, 0x00, 0x00, 0x00, //# # $$ #
-0x88, 0x88, 0x88, 0x00, 0x08, 0x88, 0x00, 0x00, 0x00, 0x00, //###### ###
-0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // #####
-//Level: 264
-0x10, 0x0E,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x08, 0x88, 0x88, 0x80, // ####### ######
-0x08, 0x00, 0x00, 0x08, 0x88, 0x00, 0x00, 0x80, // # ### #
-0x08, 0x00, 0x88, 0x08, 0x00, 0x44, 0x80, 0x88, // # ## # $$# ##
-0x08, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x08, // #$ $ $ $ $ #
-0x08, 0x04, 0x04, 0x08, 0x00, 0x08, 0x00, 0x08, // # $ $ # # #
-0x88, 0x00, 0x44, 0x08, 0x88, 0x88, 0x81, 0x88, //## $$ ######.##
-0x80, 0x40, 0x00, 0x08, 0x00, 0x08, 0x11, 0x18, //# $ # #...#
-0x82, 0x84, 0x40, 0x88, 0x00, 0x08, 0x11, 0x18, //#@#$$ ## #...#
-0x80, 0x04, 0x00, 0x08, 0x00, 0x08, 0x11, 0x18, //# $ # #...#
-0x88, 0x00, 0x84, 0x08, 0x00, 0x08, 0x11, 0x18, //## #$ # #...#
-0x08, 0x44, 0x80, 0x08, 0x88, 0x88, 0x11, 0x18, // #$$# #####...#
-0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x11, 0x18, // # $ ...#
-0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x08, // ########### #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, // #####
-//Level: 265
-0x14, 0x0E,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x88, 0x88, 0x00, 0x00, // #### ####
-0x00, 0x00, 0x08, 0x88, 0x00, 0x80, 0x80, 0x08, 0x00, 0x00, // ### # # #
-0x00, 0x88, 0x88, 0x00, 0x40, 0x88, 0x80, 0x48, 0x00, 0x00, // #### $ ### $#
-0x00, 0x80, 0x40, 0x00, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, // # $ $ #
-0x88, 0x80, 0x08, 0x80, 0x40, 0x04, 0x00, 0x48, 0x00, 0x00, //### ## $ $ $#
-0x80, 0x00, 0x00, 0x00, 0x80, 0x40, 0x88, 0x08, 0x00, 0x00, //# # $ ## #
-0x80, 0x84, 0x44, 0x48, 0x04, 0x40, 0x40, 0x08, 0x00, 0x00, //# #$$$$# $$ $ #
-0x80, 0x00, 0x04, 0x04, 0x40, 0x88, 0x88, 0x08, 0x88, 0x88, //# $ $$ #### #####
-0x88, 0x88, 0x00, 0x00, 0x40, 0x28, 0x80, 0x11, 0x11, 0x18, //#### $ @## .....#
-0x08, 0x00, 0x44, 0x88, 0x08, 0x88, 0x80, 0x11, 0x11, 0x88, // # $$## #### ....##
-0x08, 0x04, 0x00, 0x81, 0x11, 0x18, 0x80, 0x11, 0x88, 0x80, // # $ #....## ..###
-0x08, 0x08, 0x00, 0x41, 0x11, 0x18, 0x88, 0x88, 0x80, 0x00, // # # $....######
-0x08, 0x88, 0x80, 0x01, 0x11, 0x18, 0x00, 0x00, 0x00, 0x00, // #### ....#
-0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // ########
-//Level: 266
-0x0F, 0x0E,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ######
-0x08, 0x88, 0x80, 0x00, 0x08, 0x88, 0x88, 0x80, // #### ######
-0x08, 0x00, 0x80, 0x40, 0x00, 0x08, 0x00, 0x80, // # # $ # #
-0x08, 0x04, 0x00, 0x84, 0x40, 0x04, 0x40, 0x80, // # $ #$$ $$ #
-0x08, 0x00, 0x48, 0x00, 0x81, 0x18, 0x10, 0x80, // # $# #..#. #
-0x88, 0x40, 0x08, 0x08, 0x11, 0x15, 0x18, 0x80, //##$ # #...*.##
-0x80, 0x40, 0x80, 0x40, 0x11, 0x88, 0x10, 0x80, //# $ # $ ..##. #
-0x80, 0x84, 0x04, 0x08, 0x11, 0x11, 0x10, 0x80, //# #$ $ #..... #
-0x80, 0x00, 0x08, 0x00, 0x80, 0x08, 0x88, 0x80, //# # # ####
-0x80, 0x48, 0x00, 0x80, 0x00, 0x28, 0x80, 0x00, //# $# # @##
-0x80, 0x00, 0x04, 0x80, 0x80, 0x08, 0x00, 0x00, //# $# # #
-0x88, 0x88, 0x00, 0x40, 0x88, 0x88, 0x00, 0x00, //#### $ ####
-0x00, 0x08, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, // # ###
-0x00, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // ####
-//Level: 267
-0x0D, 0x0D,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // ####
-0x00, 0x00, 0x80, 0x28, 0x88, 0x00, 0x00, // # @###
-0x00, 0x88, 0x80, 0x40, 0x08, 0x80, 0x00, // ### $ ##
-0x08, 0x80, 0x04, 0x14, 0x00, 0x80, 0x00, // ## $.$ #
-0x08, 0x00, 0x41, 0x51, 0x40, 0x88, 0x80, // # $.*.$ ###
-0x88, 0x04, 0x15, 0x15, 0x14, 0x00, 0x80, //## $.*.*.$ #
-0x80, 0x41, 0x51, 0x51, 0x51, 0x40, 0x80, //# $.*.*.*.$ #
-0x80, 0x04, 0x15, 0x15, 0x14, 0x08, 0x80, //# $.*.*.$ ##
-0x88, 0x80, 0x41, 0x51, 0x40, 0x08, 0x00, //### $.*.$ #
-0x00, 0x80, 0x04, 0x14, 0x00, 0x88, 0x00, // # $.$ ##
-0x00, 0x88, 0x00, 0x40, 0x88, 0x80, 0x00, // ## $ ###
-0x00, 0x08, 0x88, 0x00, 0x80, 0x00, 0x00, // ### #
-0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // ####
-//Level: 268
-0x0D, 0x0B,//Size x and y
-0x08, 0x88, 0x80, 0x08, 0x88, 0x88, 0x80, // #### ######
-0x08, 0x00, 0x88, 0x88, 0x00, 0x00, 0x80, // # #### #
-0x88, 0x50, 0x00, 0x50, 0x55, 0x00, 0x80, //##* * ** #
-0x80, 0x40, 0x50, 0x00, 0x05, 0x80, 0x80, //# $ * *# #
-0x80, 0x10, 0x00, 0x88, 0x80, 0x00, 0x80, //# . ### #
-0x88, 0x88, 0x88, 0x00, 0x08, 0x28, 0x80, //###### #@##
-0x80, 0x50, 0x10, 0x50, 0x05, 0x50, 0x80, //# * . * ** #
-0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, //# # # #
-0x88, 0x50, 0x00, 0x50, 0x84, 0x80, 0x80, //##* * #$# #
-0x08, 0x00, 0x88, 0x88, 0x80, 0x00, 0x80, // # ##### #
-0x08, 0x88, 0x80, 0x00, 0x88, 0x88, 0x80, // #### #####
-//Level: 269
-0x09, 0x09,//Size x and y
-0x00, 0x88, 0x88, 0x80, 0x00, // #####
-0x00, 0x80, 0x00, 0x88, 0x00, // # ##
-0x88, 0x84, 0x00, 0x08, 0x80, //###$ ##
-0x80, 0x01, 0x41, 0x40, 0x80, //# .$.$ #
-0x80, 0x81, 0x81, 0x80, 0x80, //# #.#.# #
-0x80, 0x05, 0x45, 0x00, 0x80, //# *$* #
-0x88, 0x80, 0x00, 0x88, 0x80, //### ###
-0x00, 0x80, 0x20, 0x80, 0x00, // # @ #
-0x00, 0x88, 0x88, 0x80, 0x00, // #####
-//Level: 270
-0x08, 0x07,//Size x and y
-0x88, 0x88, 0x80, 0x00, //#####
-0x80, 0x00, 0x88, 0x80, //# ###
-0x80, 0x80, 0x52, 0x88, //# # *@##
-0x80, 0x05, 0x00, 0x08, //# * #
-0x88, 0x84, 0x00, 0x08, //###$ #
-0x00, 0x80, 0x00, 0x18, // # .#
-0x00, 0x88, 0x88, 0x88, // ######
-//Level: 271
-0x11, 0x10,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // ########
-0x00, 0x08, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, // # # #
-0x00, 0x08, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, // # $ #
-0x08, 0x88, 0x08, 0x40, 0x00, 0x88, 0x88, 0x00, 0x00, // ### #$ ####
-0x08, 0x00, 0x40, 0x08, 0x84, 0x00, 0x08, 0x00, 0x00, // # $ ##$ #
-0x08, 0x00, 0x80, 0x20, 0x40, 0x80, 0x48, 0x00, 0x00, // # # @ $ # $#
-0x08, 0x00, 0x80, 0x00, 0x00, 0x04, 0x08, 0x88, 0x80, // # # $ ####
-0x08, 0x80, 0x88, 0x88, 0x48, 0x80, 0x00, 0x00, 0x80, // ## ####$## #
-0x08, 0x04, 0x81, 0x11, 0x11, 0x80, 0x80, 0x00, 0x80, // # $#.....# # #
-0x08, 0x00, 0x41, 0x15, 0x51, 0x04, 0x80, 0x88, 0x80, // # $..**. $# ###
-0x88, 0x00, 0x81, 0x11, 0x11, 0x80, 0x00, 0x80, 0x00, //## #.....# #
-0x80, 0x00, 0x88, 0x80, 0x88, 0x88, 0x88, 0x80, 0x00, //# ### #######
-0x80, 0x44, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, //# $$ # #
-0x80, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //# # #
-0x88, 0x88, 0x88, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //###### #
-0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // #####
-//Level: 272
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x88, 0x11, 0x10, 0x00, 0x88, 0x08, 0x00, 0x00, 0x80, 0x08, //##... ## # # #
-0x81, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x88, 0x08, //#.... $ ## #
-0x81, 0x11, 0x18, 0x08, 0x08, 0x48, 0x88, 0x40, 0x00, 0x08, //#....# # #$###$ #
-0x81, 0x11, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x08, //#...# # # #
-0x88, 0x18, 0x00, 0x84, 0x08, 0x00, 0x00, 0x04, 0x88, 0x08, //##.# #$ # $## #
-0x80, 0x08, 0x00, 0x80, 0x40, 0x40, 0x88, 0x80, 0x04, 0x08, //# # # $ $ ### $ #
-0x80, 0x00, 0x00, 0x40, 0x04, 0x08, 0x00, 0x80, 0x88, 0x08, //# $ $ # # ## #
-0x88, 0x08, 0x08, 0x80, 0x84, 0x48, 0x04, 0x80, 0x08, 0x08, //## # ## #$$# $# # #
-0x80, 0x08, 0x00, 0x04, 0x04, 0x08, 0x00, 0x00, 0x00, 0x88, //# # $ $ # ##
-0x80, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x80, 0x00, 0x28, //# # # # @#
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 273
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x00, 0x08, 0x00, 0x80, 0x80, 0x08, 0x00, 0x80, 0x08, //# # # # # # #
-0x80, 0x28, 0x08, 0x08, 0x80, 0x40, 0x00, 0x40, 0x00, 0x88, //# @# # ## $ $ ##
-0x88, 0x88, 0x08, 0x00, 0x00, 0x80, 0x08, 0x04, 0x00, 0x08, //#### # # # $ #
-0x80, 0x00, 0x08, 0x08, 0x80, 0x84, 0x08, 0x80, 0x88, 0x08, //# # ## #$ ## ## #
-0x80, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, //# $ $ $ #
-0x81, 0x18, 0x88, 0x44, 0x88, 0x04, 0x88, 0x40, 0x88, 0x08, //#..###$$## $##$ ## #
-0x81, 0x18, 0x18, 0x00, 0x80, 0x40, 0x00, 0x40, 0x80, 0x08, //#..#.# # $ $ # #
-0x81, 0x11, 0x18, 0x04, 0x40, 0x00, 0x88, 0x40, 0x88, 0x88, //#....# $$ ##$ ####
-0x81, 0x11, 0x18, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x08, //#....# ##### #
-0x81, 0x11, 0x88, 0x80, 0x00, 0x00, 0x00, 0x08, 0x80, 0x08, //#...### ## #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 274
-0x12, 0x0D,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // #########
-0x00, 0x00, 0x08, 0x00, 0x00, 0x11, 0x18, 0x00, 0x00, // # ...#
-0x00, 0x00, 0x08, 0x08, 0x00, 0x11, 0x18, 0x00, 0x00, // # # ...#
-0x00, 0x00, 0x08, 0x08, 0x80, 0x01, 0x18, 0x00, 0x00, // # ## ..#
-0x88, 0x88, 0x88, 0x04, 0x04, 0x08, 0x88, 0x00, 0x00, //###### $ $ ###
-0x81, 0x11, 0x40, 0x40, 0x42, 0x88, 0x00, 0x00, 0x00, //#...$ $ $@##
-0x81, 0x18, 0x04, 0x04, 0x04, 0x88, 0x88, 0x88, 0x88, //#..# $ $ $########
-0x81, 0x11, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 0x08, //#...# $ $ #
-0x81, 0x11, 0x04, 0x04, 0x00, 0x84, 0x84, 0x88, 0x08, //#... $ $ #$#$## #
-0x80, 0x08, 0x88, 0x80, 0x40, 0x40, 0x40, 0x80, 0x08, //# #### $ $ $ # #
-0x80, 0x08, 0x00, 0x80, 0x04, 0x00, 0x04, 0x00, 0x08, //# # # $ $ #
-0x88, 0x88, 0x00, 0x88, 0x00, 0x08, 0x88, 0x88, 0x88, //#### ## #######
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // #####
-//Level: 275
-0x10, 0x0D,//Size x and y
-0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // ####
-0x88, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //## ############
-0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x28, //# $ $ $ $ $ $ @#
-0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x40, 0x08, //# # $ #
-0x80, 0x80, 0x08, 0x88, 0x85, 0x88, 0x84, 0x88, //# # ####*###$##
-0x80, 0x80, 0x08, 0x11, 0x11, 0x18, 0x00, 0x80, //# # #.....# #
-0x80, 0x84, 0x08, 0x15, 0x55, 0x15, 0x00, 0x80, //# #$ #.***.* #
-0x80, 0x80, 0x05, 0x11, 0x11, 0x18, 0x00, 0x80, //# # *.....# #
-0x80, 0x80, 0x48, 0x88, 0x88, 0x88, 0x44, 0x80, //# # $#######$$#
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x80, 0x80, //########### # #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, // # #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, // #####
-//Level: 276
-0x0E, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //##############
-0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, //#. #
-0x81, 0x40, 0x40, 0x40, 0x40, 0x40, 0x08, //#.$ $ $ $ $ #
-0x81, 0x88, 0x88, 0x88, 0x88, 0x80, 0x08, //#.######### #
-0x81, 0x81, 0x50, 0x40, 0x11, 0x45, 0x88, //#.#.* $ ..$*##
-0x81, 0x80, 0x40, 0x40, 0x51, 0x42, 0x80, //#.# $ $ *.$@#
-0x81, 0x81, 0x00, 0x40, 0x11, 0x44, 0x80, //#.#. $ ..$$#
-0x81, 0x88, 0x88, 0x88, 0x88, 0x81, 0x80, //#.#########.#
-0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //#. #
-0x81, 0x84, 0x84, 0x84, 0x84, 0x84, 0x80, //#.#$#$#$#$#$#
-0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //#. #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //#############
-//Level: 277
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x00, 0x00, //####
-0x81, 0x08, 0x00, 0x00, //#. #
-0x80, 0x48, 0x00, 0x00, //# $#
-0x80, 0x08, 0x88, 0x88, //# #####
-0x80, 0x14, 0x02, 0x08, //# .$ @ #
-0x80, 0x14, 0x08, 0x08, //# .$ # #
-0x88, 0x80, 0x00, 0x08, //### #
-0x00, 0x88, 0x88, 0x88, // ######
-//Level: 278
-0x08, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x80, 0x00, 0x00, 0x08, //# #
-0x80, 0x84, 0x00, 0x08, //# #$ #
-0x80, 0x40, 0x28, 0x18, //# $ @#.#
-0x88, 0x48, 0x10, 0x08, //##$#. #
-0x08, 0x00, 0x00, 0x18, // # .#
-0x08, 0x88, 0x88, 0x88, // #######
-//Level: 279
-0x13, 0x11,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x80, // ########
-0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x11, 0x11, 0x11, 0x80, // #......#
-0x00, 0x08, 0x88, 0x80, 0x00, 0x08, 0x11, 0x11, 0x11, 0x80, // #### #......#
-0x00, 0x08, 0x00, 0x88, 0x88, 0x88, 0x88, 0x81, 0x11, 0x80, // # #########...#
-0x00, 0x08, 0x04, 0x00, 0x04, 0x00, 0x00, 0x81, 0x11, 0x80, // # $ $ #...#
-0x00, 0x08, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, // # # # # # # #
-0x88, 0x88, 0x80, 0x80, 0x80, 0x82, 0x80, 0x80, 0x00, 0x80, //##### # # #@# # #
-0x80, 0x00, 0x80, 0x88, 0x80, 0x88, 0x80, 0x88, 0x08, 0x80, //# # ### ### ## ##
-0x80, 0x00, 0x04, 0x08, 0x04, 0x04, 0x04, 0x08, 0x08, 0x00, //# $ # $ $ $ # #
-0x80, 0x44, 0x40, 0x04, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, //# $$$ $ # #
-0x80, 0x00, 0x80, 0x88, 0x84, 0x88, 0x84, 0x88, 0x08, 0x00, //# # ###$###$## #
-0x88, 0x80, 0x80, 0x04, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, //### # $ # #
-0x08, 0x80, 0x40, 0x08, 0x04, 0x04, 0x04, 0x08, 0x88, 0x00, // ## $ # $ $ $ ###
-0x08, 0x00, 0x80, 0x88, 0x80, 0x88, 0x80, 0x88, 0x00, 0x00, // # # ### ### ##
-0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // # $ #
-0x08, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // # ###########
-0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ####
-//Level: 280
-0x0F, 0x0E,//Size x and y
-0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //####
-0x80, 0x08, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //# ###
-0x80, 0x40, 0x08, 0x88, 0x00, 0x00, 0x00, 0x00, //# $ ###
-0x80, 0x40, 0x40, 0x08, 0x88, 0x00, 0x00, 0x00, //# $ $ ###
-0x80, 0x40, 0x40, 0x40, 0x08, 0x88, 0x00, 0x00, //# $ $ $ ###
-0x80, 0x40, 0x40, 0x40, 0x00, 0x08, 0x00, 0x00, //# $ $ $ #
-0x80, 0x40, 0x40, 0x08, 0x00, 0x08, 0x80, 0x00, //# $ $ # ##
-0x80, 0x40, 0x08, 0x80, 0x44, 0x40, 0x80, 0x00, //# $ ## $$$ #
-0x82, 0x08, 0x88, 0x80, 0x00, 0x00, 0x88, 0x00, //#@ #### ##
-0x88, 0x08, 0x08, 0x14, 0x44, 0x44, 0x18, 0x00, //## # #.$$$$$.#
-0x08, 0x08, 0x88, 0x11, 0x11, 0x11, 0x18, 0x80, // # ###.......##
-0x08, 0x00, 0x01, 0x55, 0x55, 0x55, 0x51, 0x80, // # .*******.#
-0x08, 0x88, 0x81, 0x11, 0x11, 0x11, 0x11, 0x80, // ####.........#
-0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ###########
-//Level: 281
-0x10, 0x12,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // #######
-0x00, 0x00, 0x80, 0x00, 0x82, 0x80, 0x00, 0x00, // # #@#
-0x08, 0x88, 0x80, 0x80, 0x80, 0x88, 0x88, 0x80, // #### # # #####
-0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, // # # #
-0x08, 0x04, 0x84, 0x88, 0x88, 0x88, 0x80, 0x80, // # $#$####### #
-0x88, 0x40, 0x00, 0x81, 0x18, 0x11, 0x84, 0x88, //##$ #..#..#$##
-0x80, 0x00, 0x04, 0x41, 0x11, 0x11, 0x80, 0x08, //# $$.....# #
-0x80, 0x40, 0x40, 0x81, 0x11, 0x11, 0x44, 0x08, //# $ $ #.....$$ #
-0x88, 0x00, 0x08, 0x81, 0x11, 0x81, 0x80, 0x08, //## ##...#.# #
-0x08, 0x04, 0x00, 0x88, 0x11, 0x18, 0x84, 0x08, // # $ ##...##$ #
-0x08, 0x08, 0x80, 0x88, 0x88, 0x88, 0x80, 0x08, // # ## ####### #
-0x08, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x88, // # $ $ $ ##
-0x08, 0x88, 0x88, 0x80, 0x00, 0x40, 0x80, 0x80, // ###### $ # #
-0x00, 0x00, 0x00, 0x88, 0x08, 0x04, 0x00, 0x80, // ## # $ #
-0x00, 0x00, 0x00, 0x80, 0x44, 0x04, 0x00, 0x80, // # $$ $ #
-0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x80, // # $ #
-0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x80, // ###### #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, // ####
-//Level: 282
-0x0B, 0x07,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x88, 0x80, // ##########
-0x88, 0x04, 0x00, 0x51, 0x50, 0x80, //## $ *.* #
-0x80, 0x04, 0x00, 0x51, 0x50, 0x80, //# $ *.* #
-0x80, 0x04, 0x00, 0x51, 0x52, 0x80, //# $ *.*@#
-0x80, 0x04, 0x00, 0x51, 0x50, 0x80, //# $ *.* #
-0x80, 0x04, 0x00, 0x51, 0x50, 0x80, //# $ *.* #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###########
-//Level: 283
-0x0F, 0x0D,//Size x and y
-0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // ####
-0x00, 0x00, 0x00, 0x80, 0x08, 0x88, 0x88, 0x80, // # ######
-0x00, 0x00, 0x00, 0x80, 0x00, 0x08, 0x00, 0x80, // # # #
-0x00, 0x00, 0x00, 0x80, 0x44, 0x00, 0x00, 0x80, // # $$ #
-0x88, 0x88, 0x88, 0x84, 0x80, 0x08, 0x00, 0x80, //#######$# # #
-0x80, 0x08, 0x15, 0x11, 0x08, 0x88, 0x48, 0x80, //# #.*.. ###$##
-0x80, 0x08, 0x18, 0x51, 0x40, 0x00, 0x00, 0x80, //# #.#*.$ #
-0x80, 0x08, 0x18, 0x15, 0x80, 0x80, 0x00, 0x80, //# #.#.*# # #
-0x80, 0x44, 0x11, 0x11, 0x80, 0x88, 0x88, 0x80, //# $$....# #####
-0x80, 0x24, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, //# @$ # #
-0x80, 0x44, 0x48, 0x00, 0x00, 0x80, 0x00, 0x00, //# $$$# #
-0x80, 0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, //# ######
-0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //######
-//Level: 284
-0x10, 0x0E,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // #######
-0x08, 0x00, 0x00, 0x08, 0x00, 0x08, 0x88, 0x88, // # # #####
-0x08, 0x00, 0x88, 0x08, 0x88, 0x88, 0x00, 0x08, // # ## ##### #
-0x08, 0x40, 0x40, 0x40, 0x08, 0x00, 0x08, 0x08, // #$ $ $ # # #
-0x08, 0x04, 0x04, 0x08, 0x00, 0x00, 0x00, 0x08, // # $ $ # #
-0x88, 0x00, 0x44, 0x08, 0x88, 0x48, 0x88, 0x08, //## $$ ###$### #
-0x80, 0x40, 0x00, 0x08, 0x11, 0x11, 0x80, 0x08, //# $ #....# #
-0x82, 0x84, 0x40, 0x88, 0x11, 0x11, 0x80, 0x08, //#@#$$ ##....# #
-0x80, 0x04, 0x00, 0x08, 0x11, 0x11, 0x40, 0x08, //# $ #....$ #
-0x88, 0x00, 0x88, 0x08, 0x11, 0x11, 0x80, 0x88, //## ## #....# ##
-0x08, 0x44, 0x80, 0x08, 0x80, 0x88, 0x80, 0x08, // #$$# ## ### #
-0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x08, // # $ #
-0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x08, // ############ #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, // ####
-//Level: 285
-0x10, 0x0D,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // #########
-0x00, 0x80, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, // # # #
-0x88, 0x80, 0x84, 0x00, 0x40, 0x88, 0x88, 0x00, //### #$ $ ####
-0x80, 0x04, 0x00, 0x88, 0x11, 0x80, 0x08, 0x88, //# $ ##..# ###
-0x80, 0x80, 0x04, 0x08, 0x11, 0x40, 0x40, 0x08, //# # $ #..$ $ #
-0x80, 0x44, 0x00, 0x48, 0x11, 0x00, 0x80, 0x08, //# $$ $#.. # #
-0x88, 0x00, 0x80, 0x01, 0x11, 0x84, 0x00, 0x08, //## # ...#$ #
-0x08, 0x40, 0x20, 0x81, 0x11, 0x80, 0x40, 0x88, // #$ @ #...# $ ##
-0x08, 0x00, 0x00, 0x81, 0x11, 0x40, 0x08, 0x80, // # #...$ ##
-0x08, 0x08, 0x84, 0x08, 0x88, 0x00, 0x08, 0x00, // # ##$ ### #
-0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x88, 0x00, // # $ ###
-0x08, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, // # ########
-0x08, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // ####
-//Level: 286
-0x09, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-0x82, 0x00, 0x50, 0x00, 0x80, //#@ * #
-0x80, 0x44, 0x14, 0x00, 0x80, //# $$.$ #
-0x81, 0x11, 0x15, 0x55, 0x80, //#....***#
-0x80, 0x44, 0x14, 0x00, 0x80, //# $$.$ #
-0x80, 0x00, 0x50, 0x00, 0x80, //# * #
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-//Level: 287
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x00, 0x02, 0x88, 0x00, 0x00, 0x00, 0x80, 0x00, 0x88, //# @## # ##
-0x80, 0x00, 0x08, 0x80, 0x00, 0x04, 0x00, 0x00, 0x40, 0x88, //# ## $ $ ##
-0x80, 0x08, 0x88, 0x11, 0x11, 0x80, 0x80, 0x80, 0x08, 0x88, //# ###....# # # ###
-0x80, 0x00, 0x81, 0x11, 0x18, 0x08, 0x08, 0x04, 0x00, 0x08, //# #....# # # $ #
-0x88, 0x80, 0x81, 0x11, 0x80, 0x08, 0x00, 0x00, 0x00, 0x08, //### #...# # #
-0x88, 0x00, 0x88, 0x18, 0x00, 0x00, 0x04, 0x00, 0x04, 0x08, //## ##.# $ $ #
-0x88, 0x00, 0x40, 0x40, 0x88, 0x80, 0x08, 0x08, 0x08, 0x88, //## $ $ ### # # ###
-0x88, 0x04, 0x00, 0x00, 0x00, 0x08, 0x08, 0x04, 0x00, 0x08, //## $ # # $ #
-0x88, 0x88, 0x04, 0x00, 0x48, 0x08, 0x08, 0x08, 0x04, 0x08, //#### $ $# # # # $ #
-0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x88, //#### # # ##
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 288
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x02, 0x08, 0x88, //## @ ###
-0x88, 0x01, 0x00, 0x08, //## . #
-0x81, 0x04, 0x14, 0x08, //#. $.$ #
-0x88, 0x48, 0x08, 0x88, //##$# ###
-0x88, 0x00, 0x08, 0x88, //## ###
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 289
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x20, 0x88, 0x88, //##@ ####
-0x88, 0x00, 0x88, 0x88, //## ####
-0x88, 0x10, 0x88, 0x88, //##. ####
-0x80, 0x44, 0x10, 0x18, //# $$. .#
-0x80, 0x04, 0x08, 0x88, //# $ ###
-0x88, 0x80, 0x08, 0x88, //### ###
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 290
-0x0A, 0x12,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x80, // ########
-0x08, 0x11, 0x11, 0x11, 0x80, // #......#
-0x08, 0x11, 0x88, 0x11, 0x80, // #..##..#
-0x08, 0x11, 0x11, 0x11, 0x80, // #......#
-0x08, 0x11, 0x55, 0x11, 0x80, // #..**..#
-0x08, 0x88, 0x11, 0x88, 0x80, // ###..###
-0x08, 0x00, 0x44, 0x00, 0x80, // # $$ #
-0x08, 0x00, 0x00, 0x00, 0x80, // # #
-0x08, 0x04, 0x44, 0x40, 0x80, // # $$$$ #
-0x88, 0x80, 0x00, 0x08, 0x88, //### ###
-0x80, 0x04, 0x44, 0x40, 0x08, //# $$$$ #
-0x80, 0x00, 0x00, 0x00, 0x08, //# #
-0x80, 0x44, 0x44, 0x44, 0x08, //# $$$$$$ #
-0x88, 0x00, 0x00, 0x00, 0x88, //## ##
-0x80, 0x44, 0x44, 0x44, 0x08, //# $$$$$$ #
-0x80, 0x00, 0x20, 0x00, 0x08, //# @ #
-0x80, 0x08, 0x88, 0x80, 0x08, //# #### #
-0x88, 0x88, 0x00, 0x88, 0x88, //#### ####
-//Level: 291
-0x0F, 0x0D,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###############
-0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x80, //# # #
-0x80, 0x40, 0x84, 0x08, 0x04, 0x88, 0x40, 0x80, //# $ #$ # $##$ #
-0x80, 0x80, 0x04, 0x08, 0x00, 0x00, 0x00, 0x80, //# # $ # #
-0x80, 0x00, 0x88, 0x48, 0x48, 0x84, 0x40, 0x80, //# ##$#$##$$ #
-0x80, 0x80, 0x80, 0x11, 0x10, 0x80, 0x00, 0x80, //# # # ... # #
-0x80, 0x40, 0x01, 0x08, 0x01, 0x40, 0x80, 0x80, //# $ . # .$ # #
-0x80, 0x48, 0x24, 0x11, 0x18, 0x08, 0x00, 0x80, //# $#@$...# # #
-0x80, 0x00, 0x01, 0x08, 0x01, 0x00, 0x40, 0x80, //# . # . $ #
-0x80, 0x88, 0x14, 0x88, 0x84, 0x10, 0x80, 0x80, //# ##.$###$. # #
-0x80, 0x80, 0x41, 0x11, 0x11, 0x08, 0x80, 0x80, //# # $..... ## #
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###############
-//Level: 292
-0x0F, 0x0A,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // #############
-0x08, 0x00, 0x00, 0x80, 0x08, 0x80, 0x08, 0x00, // # # ## #
-0x08, 0x44, 0x40, 0x80, 0x44, 0x00, 0x48, 0x80, // #$$$ # $$ $##
-0x08, 0x04, 0x00, 0x80, 0x01, 0x11, 0x10, 0x80, // # $ # .... #
-0x08, 0x00, 0x40, 0x08, 0x41, 0x88, 0x10, 0x80, // # $ #$.##. #
-0x08, 0x00, 0x80, 0x48, 0x01, 0x11, 0x18, 0x80, // # # $# ....##
-0x88, 0x40, 0x40, 0x08, 0x41, 0x88, 0x10, 0x80, //##$ $ #$.##. #
-0x80, 0x40, 0x04, 0x02, 0x41, 0x11, 0x10, 0x80, //# $ $ @$.... #
-0x80, 0x00, 0x88, 0x80, 0x08, 0x88, 0x88, 0x80, //# ### ######
-0x88, 0x88, 0x80, 0x88, 0x88, 0x00, 0x00, 0x00, //##### ####
-//Level: 293
-0x09, 0x07,//Size x and y
-0x00, 0x88, 0x88, 0x80, 0x00, // #####
-0x88, 0x80, 0x00, 0x88, 0x80, //### ###
-0x80, 0x10, 0x40, 0x10, 0x80, //# . $ . #
-0x80, 0x81, 0x41, 0x80, 0x80, //# #.$.# #
-0x80, 0x40, 0x80, 0x40, 0x80, //# $ # $ #
-0x88, 0x80, 0x20, 0x88, 0x80, //### @ ###
-0x00, 0x88, 0x88, 0x80, 0x00, // #####
-//Level: 294
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x82, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, //#@ # # #
-0x88, 0x08, 0x88, 0x08, 0x80, 0x08, 0x88, 0x80, 0x80, 0x88, //## ### ## #### # ##
-0x80, 0x00, 0x08, 0x08, 0x00, 0x44, 0x00, 0x00, 0x00, 0x08, //# # # $$ #
-0x80, 0x08, 0x08, 0x08, 0x04, 0x08, 0x04, 0x08, 0x80, 0x88, //# # # # $ # $ ## ##
-0x80, 0x00, 0x00, 0x40, 0x80, 0x08, 0x44, 0x08, 0x00, 0x08, //# $ # #$$ # #
-0x80, 0x08, 0x88, 0x00, 0x80, 0x00, 0x00, 0x08, 0x80, 0x88, //# ### # ## ##
-0x81, 0x18, 0x18, 0x04, 0x08, 0x00, 0x40, 0x80, 0x00, 0x08, //#..#.# $ # $ # #
-0x81, 0x18, 0x18, 0x00, 0x40, 0x80, 0x88, 0x04, 0x40, 0x08, //#..#.# $ # ## $$ #
-0x81, 0x11, 0x18, 0x80, 0x00, 0x44, 0x00, 0x40, 0x08, 0x08, //#....## $$ $ # #
-0x81, 0x11, 0x11, 0x88, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, //#.....## # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 295
-0x0D, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //#############
-0x80, 0x04, 0x04, 0x04, 0x15, 0x11, 0x80, //# $ $ $.*..#
-0x80, 0x40, 0x40, 0x40, 0x51, 0x11, 0x80, //# $ $ $ *...#
-0x80, 0x04, 0x04, 0x04, 0x15, 0x11, 0x80, //# $ $ $.*..#
-0x80, 0x40, 0x40, 0x40, 0x51, 0x11, 0x80, //# $ $ $ *...#
-0x80, 0x04, 0x04, 0x04, 0x15, 0x11, 0x80, //# $ $ $.*..#
-0x80, 0x40, 0x40, 0x40, 0x51, 0x11, 0x80, //# $ $ $ *...#
-0x80, 0x04, 0x04, 0x04, 0x15, 0x11, 0x80, //# $ $ $.*..#
-0x80, 0x40, 0x40, 0x40, 0x51, 0x11, 0x80, //# $ $ $ *...#
-0x80, 0x04, 0x04, 0x04, 0x15, 0x11, 0x80, //# $ $ $.*..#
-0x82, 0x40, 0x40, 0x40, 0x51, 0x11, 0x80, //#@$ $ $ *...#
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //#############
-//Level: 296
-0x13, 0x10,//Size x and y
-0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, // ############
-0x00, 0x00, 0x08, 0x81, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, // ##.. # #
-0x00, 0x00, 0x88, 0x11, 0x50, 0x40, 0x00, 0x04, 0x08, 0x00, // ##..* $ $ #
-0x00, 0x08, 0x81, 0x15, 0x18, 0x08, 0x08, 0x04, 0x88, 0x00, // ##..*.# # # $##
-0x00, 0x08, 0x11, 0x51, 0x80, 0x80, 0x80, 0x40, 0x08, 0x00, // #..*.# # # $ #
-0x88, 0x88, 0x11, 0x18, 0x00, 0x80, 0x00, 0x08, 0x08, 0x00, //####...# # # #
-0x80, 0x08, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, //# ## # #
-0x80, 0x24, 0x04, 0x08, 0x88, 0x00, 0x80, 0x00, 0x88, 0x00, //# @$ $ ### # ##
-0x80, 0x40, 0x00, 0x40, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, //# $ $ # # #
-0x88, 0x84, 0x40, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, //###$$ # # # # #
-0x00, 0x80, 0x00, 0x40, 0x00, 0x80, 0x80, 0x88, 0x88, 0x80, // # $ # # #####
-0x00, 0x80, 0x48, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x80, // # $# ##### #
-0x00, 0x84, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x80, 0x80, // #$ # # # #
-0x00, 0x80, 0x08, 0x88, 0x00, 0x08, 0x80, 0x00, 0x00, 0x80, // # ### ## #
-0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x80, 0x00, 0x08, 0x80, // # # # ##
-0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, // #### ######
-//Level: 297
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x00, 0x00, 0x80, 0x08, 0x11, 0x18, 0x20, 0x00, 0x08, //# # #...#@ #
-0x80, 0x80, 0x00, 0x00, 0x00, 0x11, 0x11, 0x80, 0x00, 0x08, //# # ....# #
-0x80, 0x04, 0x00, 0x80, 0x00, 0x81, 0x11, 0x18, 0x00, 0x08, //# $ # #....# #
-0x80, 0x88, 0x48, 0x88, 0x80, 0x88, 0x11, 0x11, 0x80, 0x08, //# ##$#### ##....# #
-0x80, 0x40, 0x00, 0x40, 0x08, 0x00, 0x81, 0x11, 0x80, 0x08, //# $ $ # #...# #
-0x80, 0x44, 0x08, 0x00, 0x08, 0x00, 0x08, 0x04, 0x40, 0x08, //# $$ # # # $$ #
-0x88, 0x80, 0x04, 0x44, 0x80, 0x00, 0x44, 0x00, 0x40, 0x08, //### $$$# $$ $ #
-0x80, 0x40, 0x08, 0x00, 0x80, 0x00, 0x08, 0x04, 0x80, 0x08, //# $ # # # $# #
-0x80, 0x00, 0x48, 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x08, //# $# # $ #
-0x80, 0x08, 0x00, 0x00, 0x80, 0x00, 0x08, 0x00, 0x80, 0x08, //# # # # # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 298
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x80, 0x08, 0x80, 0x08, //# ## #
-0x80, 0x10, 0x01, 0x48, //# . .$#
-0x80, 0x48, 0x04, 0x18, //# $# $.#
-0x88, 0x02, 0x08, 0x08, //## @ # #
-0x88, 0x88, 0x00, 0x08, //#### #
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 299
-0x08, 0x08,//Size x and y
-0x00, 0x00, 0x88, 0x88, // ####
-0x00, 0x00, 0x80, 0x08, // # #
-0x00, 0x88, 0x84, 0x18, // ###$.#
-0x00, 0x80, 0x01, 0x08, // # . #
-0x88, 0x80, 0x08, 0x18, //### #.#
-0x80, 0x40, 0x04, 0x08, //# $ $ #
-0x80, 0x00, 0x82, 0x08, //# #@ #
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 300
-0x08, 0x06,//Size x and y
-0x00, 0x88, 0x88, 0x00, // ####
-0x88, 0x80, 0x08, 0x88, //### ###
-0x80, 0x11, 0x04, 0x18, //# .. $.#
-0x80, 0x04, 0x40, 0x28, //# $$ @#
-0x88, 0x88, 0x00, 0x08, //#### #
-0x00, 0x08, 0x88, 0x88, // #####
-//Level: 301
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x00, //######
-0x80, 0x01, 0x08, 0x00, //# . #
-0x80, 0x00, 0x08, 0x88, //# ###
-0x80, 0x84, 0x41, 0x08, //# #$$. #
-0x81, 0x00, 0x88, 0x08, //#. ## #
-0x82, 0x40, 0x88, 0x08, //#@$ ## #
-0x88, 0x80, 0x00, 0x08, //### #
-0x00, 0x88, 0x88, 0x88, // ######
-//Level: 302
-0x11, 0x12,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, // ####
-0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x80, // ######## #
-0x00, 0x00, 0x08, 0x80, 0x40, 0x40, 0x00, 0x40, 0x80, // ## $ $ $ #
-0x00, 0x00, 0x08, 0x00, 0x02, 0x84, 0x00, 0x40, 0x80, // # @#$ $ #
-0x00, 0x00, 0x08, 0x00, 0x40, 0x80, 0x08, 0x00, 0x80, // # $ # # #
-0x88, 0x88, 0x88, 0x88, 0x04, 0x80, 0x00, 0x00, 0x80, //######## $# #
-0x80, 0x00, 0x40, 0x00, 0x00, 0x40, 0x40, 0x88, 0x80, //# $ $ $ ###
-0x80, 0x00, 0x88, 0x88, 0x84, 0x88, 0x48, 0x80, 0x00, //# #####$##$##
-0x88, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, //## $$ #
-0x08, 0x00, 0x88, 0x04, 0x04, 0x04, 0x00, 0x80, 0x00, // # ## $ $ $ #
-0x08, 0x88, 0x88, 0x80, 0x80, 0x80, 0x88, 0x80, 0x00, // ###### # # ###
-0x00, 0x00, 0x08, 0x04, 0x04, 0x00, 0x80, 0x00, 0x00, // # $ $ #
-0x00, 0x00, 0x08, 0x00, 0x40, 0x08, 0x80, 0x00, 0x00, // # $ ##
-0x00, 0x00, 0x88, 0x88, 0x04, 0x88, 0x80, 0x00, 0x00, // #### $###
-0x00, 0x00, 0x81, 0x11, 0x11, 0x11, 0x80, 0x00, 0x00, // #.......#
-0x00, 0x00, 0x81, 0x11, 0x11, 0x11, 0x80, 0x00, 0x00, // #.......#
-0x00, 0x00, 0x81, 0x11, 0x11, 0x11, 0x80, 0x00, 0x00, // #.......#
-0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // #########
-//Level: 303
-0x10, 0x0D,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, // #####
-0x88, 0x88, 0x88, 0x80, 0x00, 0x80, 0x00, 0x00, //####### #
-0x80, 0x00, 0x88, 0x10, 0x00, 0x80, 0x00, 0x00, //# ##. #
-0x80, 0x04, 0x81, 0x10, 0x08, 0x88, 0x00, 0x00, //# $#.. ###
-0x88, 0x00, 0x11, 0x18, 0x44, 0x08, 0x88, 0x88, //## ...#$$ #####
-0x08, 0x04, 0x18, 0x14, 0x00, 0x00, 0x00, 0x08, // # $.#.$ #
-0x08, 0x04, 0x88, 0x84, 0x88, 0x08, 0x04, 0x08, // # $###$## # $ #
-0x08, 0x00, 0x08, 0x00, 0x00, 0x04, 0x48, 0x08, // # # $$# #
-0x08, 0x84, 0x48, 0x08, 0x84, 0x84, 0x00, 0x08, // ##$$# ##$#$ #
-0x08, 0x11, 0x10, 0x42, 0x04, 0x00, 0x08, 0x88, // #... $@ $ ###
-0x08, 0x11, 0x18, 0x48, 0x00, 0x08, 0x88, 0x00, // #...#$# ###
-0x08, 0x11, 0x10, 0x08, 0x88, 0x88, 0x00, 0x00, // #... #####
-0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // #######
-//Level: 304
-0x10, 0x0F,//Size x and y
-0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, // ######
-0x00, 0x08, 0x88, 0x88, 0x88, 0x80, 0x00, 0x08, // ######## #
-0x00, 0x08, 0x00, 0x04, 0x00, 0x04, 0x04, 0x08, // # $ $ $ #
-0x00, 0x08, 0x08, 0x08, 0x08, 0x04, 0x88, 0x08, // # # # # $## #
-0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x04, 0x08, // # $ $ #
-0x00, 0x08, 0x88, 0x88, 0x88, 0x84, 0x08, 0x08, // ########$ # #
-0x00, 0x88, 0x00, 0x00, 0x00, 0x80, 0x00, 0x08, // ## # #
-0x00, 0x82, 0x40, 0x04, 0x00, 0x80, 0x40, 0x08, // #@$ $ # $ #
-0x88, 0x88, 0x88, 0x08, 0x40, 0x84, 0x84, 0x08, //###### #$ #$#$ #
-0x81, 0x11, 0x18, 0x04, 0x00, 0x80, 0x00, 0x08, //#....# $ # #
-0x81, 0x51, 0x18, 0x88, 0x08, 0x80, 0x88, 0x88, //#.*..### ## ####
-0x81, 0x15, 0x10, 0x40, 0x00, 0x80, 0x08, 0x00, //#..*. $ # #
-0x81, 0x11, 0x14, 0x04, 0x00, 0x00, 0x08, 0x00, //#....$ $ #
-0x81, 0x11, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //#...##########
-0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, //#####
-//Level: 305
-0x07, 0x06,//Size x and y
-0x88, 0x88, 0x80, 0x00, //#####
-0x80, 0x00, 0x88, 0x80, //# ###
-0x81, 0x14, 0x41, 0x80, //#..$$.#
-0x80, 0x44, 0x20, 0x80, //# $$@ #
-0x88, 0x00, 0x18, 0x80, //## .##
-0x08, 0x88, 0x88, 0x00, // #####
-//Level: 306
-0x08, 0x06,//Size x and y
-0x88, 0x88, 0x88, 0x00, //######
-0x80, 0x10, 0x08, 0x00, //# . #
-0x80, 0x18, 0x08, 0x88, //# .# ###
-0x80, 0x24, 0x40, 0x08, //# @$$ #
-0x80, 0x41, 0x00, 0x08, //# $. #
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 307
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x00, //######
-0x80, 0x00, 0x28, 0x00, //# @#
-0x80, 0x44, 0x88, 0x88, //# $$####
-0x80, 0x40, 0x10, 0x08, //# $ . #
-0x88, 0x08, 0x18, 0x08, //## #.# #
-0x81, 0x00, 0x08, 0x08, //#. # #
-0x80, 0x00, 0x00, 0x08, //# #
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 308
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x80, 0x00, 0x88, //### ##
-0x88, 0x80, 0x81, 0x88, //### #.##
-0x88, 0x80, 0x01, 0x88, //### .##
-0x82, 0x04, 0x40, 0x88, //#@ $$ ##
-0x80, 0x01, 0x40, 0x88, //# .$ ##
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 309
-0x08, 0x06,//Size x and y
-0x08, 0x88, 0x80, 0x00, // ####
-0x88, 0x00, 0x88, 0x80, //## ###
-0x80, 0x00, 0x00, 0x88, //# ##
-0x80, 0x08, 0x44, 0x28, //# #$$@#
-0x80, 0x01, 0x05, 0x18, //# . *.#
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 310
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x00, 0x88, 0x88, //## ####
-0x81, 0x14, 0x00, 0x18, //#..$ .#
-0x80, 0x84, 0x04, 0x08, //# #$ $ #
-0x82, 0x00, 0x80, 0x08, //#@ # #
-0x88, 0x88, 0x80, 0x08, //##### #
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 311
-0x11, 0x0D,//Size x and y
-0x00, 0x00, 0x08, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, // #####
-0x00, 0x00, 0x08, 0x20, 0x08, 0x88, 0x88, 0x88, 0x00, // #@ #######
-0x00, 0x08, 0x88, 0x80, 0x40, 0x04, 0x00, 0x08, 0x00, // #### $ $ #
-0x08, 0x88, 0x00, 0x04, 0x40, 0x40, 0x40, 0x08, 0x00, // ### $$ $ $ #
-0x08, 0x00, 0x08, 0x00, 0x48, 0x08, 0x88, 0x88, 0x00, // # # $# #####
-0x08, 0x48, 0x88, 0x80, 0x04, 0x00, 0x04, 0x08, 0x00, // #$#### $ $ #
-0x08, 0x04, 0x00, 0x40, 0x04, 0x00, 0x04, 0x08, 0x00, // # $ $ $ $ #
-0x08, 0x00, 0x40, 0x08, 0x88, 0x48, 0x88, 0x08, 0x80, // # $ ###$### ##
-0x88, 0x00, 0x88, 0x08, 0x11, 0x11, 0x18, 0x00, 0x80, //## ## #.....# #
-0x80, 0x04, 0x04, 0x08, 0x11, 0x11, 0x10, 0x00, 0x80, //# $ $ #..... #
-0x80, 0x40, 0x00, 0x40, 0x11, 0x11, 0x18, 0x88, 0x80, //# $ $ .....####
-0x88, 0x88, 0x88, 0x88, 0x11, 0x11, 0x18, 0x00, 0x00, //########.....#
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x00, 0x00, // #######
-//Level: 312
-0x12, 0x0E,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, //########
-0x81, 0x11, 0x00, 0x08, 0x88, 0x88, 0x88, 0x80, 0x00, //#... ########
-0x81, 0x11, 0x10, 0x00, 0x00, 0x40, 0x00, 0x88, 0x00, //#.... $ ##
-0x81, 0x11, 0x11, 0x88, 0x04, 0x08, 0x40, 0x08, 0x00, //#.....## $ #$ #
-0x81, 0x11, 0x11, 0x80, 0x08, 0x00, 0x40, 0x08, 0x00, //#.....# # $ #
-0x88, 0x88, 0x88, 0x84, 0x08, 0x80, 0x04, 0x08, 0x88, //#######$ ## $ ###
-0x08, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x40, 0x08, // # ### $ #
-0x08, 0x00, 0x40, 0x80, 0x40, 0x08, 0x00, 0x40, 0x08, // # $ # $ # $ #
-0x08, 0x00, 0x88, 0x80, 0x88, 0x00, 0x80, 0x88, 0x88, // # ### ## # ####
-0x08, 0x00, 0x80, 0x04, 0x00, 0x40, 0x80, 0x00, 0x80, // # # $ $ # #
-0x08, 0x88, 0x80, 0x84, 0x80, 0x08, 0x84, 0x00, 0x80, // #### #$# ##$ #
-0x00, 0x82, 0x40, 0x00, 0x04, 0x00, 0x04, 0x00, 0x80, // #@$ $ $ #
-0x00, 0x88, 0x88, 0x80, 0x00, 0x88, 0x88, 0x88, 0x80, // ##### #######
-0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, // #####
-//Level: 313
-0x0B, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //#######
-0x82, 0x00, 0x00, 0x88, 0x88, 0x80, //#@ #####
-0x80, 0x40, 0x15, 0x10, 0x40, 0x80, //# $ .*. $ #
-0x80, 0x41, 0x50, 0x51, 0x40, 0x80, //# $.* *.$ #
-0x80, 0x40, 0x15, 0x10, 0x40, 0x80, //# $ .*. $ #
-0x88, 0x88, 0x88, 0x00, 0x00, 0x80, //###### #
-0x00, 0x00, 0x08, 0x88, 0x88, 0x80, // ######
-//Level: 314
-0x09, 0x08,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x00, // #####
-0x00, 0x08, 0x02, 0x08, 0x00, // # @ #
-0x00, 0x08, 0x44, 0x48, 0x00, // #$$$#
-0x88, 0x88, 0x00, 0x08, 0x00, //#### #
-0x80, 0x00, 0x18, 0x48, 0x80, //# .#$##
-0x80, 0x41, 0x41, 0x01, 0x80, //# $.$. .#
-0x80, 0x08, 0x18, 0x18, 0x80, //# #.#.##
-0x88, 0x88, 0x88, 0x88, 0x00, //########
-//Level: 315
-0x09, 0x09,//Size x and y
-0x00, 0x88, 0x88, 0x80, 0x00, // #####
-0x00, 0x80, 0x00, 0x80, 0x00, // # #
-0x88, 0x80, 0x84, 0x80, 0x00, //### #$#
-0x80, 0x01, 0x41, 0x88, 0x80, //# .$.###
-0x80, 0x84, 0x34, 0x00, 0x80, //# #$+$ #
-0x80, 0x01, 0x40, 0x80, 0x80, //# .$ # #
-0x88, 0x80, 0x81, 0x00, 0x80, //### #. #
-0x00, 0x80, 0x00, 0x88, 0x80, // # ###
-0x00, 0x88, 0x88, 0x80, 0x00, // #####
-//Level: 316
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x80, 0x00, 0x00, 0x08, //# #
-0x80, 0x80, 0x88, 0x58, //# # ##*#
-0x80, 0x82, 0x04, 0x08, //# #@ $ #
-0x81, 0x40, 0x10, 0x08, //#.$ . #
-0x88, 0x88, 0x80, 0x08, //##### #
-0x00, 0x00, 0x80, 0x08, // # #
-0x00, 0x00, 0x88, 0x88, // ####
-//Level: 317
-0x08, 0x07,//Size x and y
-0x00, 0x08, 0x88, 0x88, // #####
-0x88, 0x88, 0x10, 0x28, //####. @#
-0x80, 0x01, 0x40, 0x08, //# .$ #
-0x80, 0x80, 0x08, 0x88, //# # ###
-0x80, 0x40, 0x40, 0x18, //# $ $ .#
-0x88, 0x88, 0x00, 0x08, //#### #
-0x00, 0x08, 0x88, 0x88, // #####
-//Level: 318
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x08, 0x00, 0x08, 0x28, //# # # # #@#
-0x80, 0x00, 0x40, 0x04, 0x00, 0x00, 0x08, 0x04, 0x08, 0x08, //# $ $ # $ # #
-0x88, 0x48, 0x04, 0x88, 0x80, 0x80, 0x00, 0x04, 0x48, 0x08, //##$# $### # $$# #
-0x80, 0x08, 0x00, 0x81, 0x88, 0x80, 0x08, 0x40, 0x40, 0x08, //# # #.### #$ $ #
-0x80, 0x08, 0x48, 0x11, 0x11, 0x80, 0x08, 0x08, 0x88, 0x08, //# #$#....# # ### #
-0x80, 0x40, 0x08, 0x11, 0x11, 0x18, 0x80, 0x00, 0x08, 0x08, //# $ #.....## # #
-0x88, 0x40, 0x08, 0x18, 0x11, 0x11, 0x84, 0x40, 0x40, 0x08, //##$ #.#....#$$ $ #
-0x80, 0x08, 0x88, 0x88, 0x81, 0x18, 0x80, 0x80, 0x08, 0x08, //# ######..## # # #
-0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x88, 0x08, //# $ $ ### #
-0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x08, //# # # # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 319
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x10, 0x08, 0x88, //##. ###
-0x88, 0x08, 0x08, 0x88, //## # ###
-0x88, 0x05, 0x40, 0x08, //## *$ #
-0x88, 0x00, 0x41, 0x08, //## $. #
-0x88, 0x00, 0x28, 0x88, //## @###
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 320
-0x08, 0x08,//Size x and y
-0x00, 0x08, 0x88, 0x80, // ####
-0x00, 0x88, 0x20, 0x88, // ##@ ##
-0x08, 0x80, 0x01, 0x18, // ## ..#
-0x88, 0x04, 0x84, 0x88, //## $#$##
-0x80, 0x00, 0x41, 0x08, //# $. #
-0x80, 0x08, 0x00, 0x08, //# # #
-0x80, 0x00, 0x08, 0x88, //# ###
-0x88, 0x88, 0x88, 0x00, //######
-//Level: 321
-0x13, 0x10,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, //###############
-0x81, 0x11, 0x11, 0x11, 0x11, 0x10, 0x01, 0x88, 0x88, 0x00, //#.......... .####
-0x81, 0x11, 0x11, 0x11, 0x11, 0x14, 0x41, 0x80, 0x08, 0x00, //#..........$$.# #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x84, 0x08, 0x00, 0x08, 0x80, //###########$ # ##
-0x80, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x40, 0x80, //# $ $ $ #
-0x88, 0x08, 0x88, 0x80, 0x00, 0x80, 0x04, 0x08, 0x00, 0x80, //## #### # $ # #
-0x80, 0x00, 0x00, 0x08, 0x00, 0x08, 0x80, 0x08, 0x08, 0x80, //# # ## # ##
-0x80, 0x04, 0x80, 0x08, 0x08, 0x80, 0x08, 0x88, 0x08, 0x80, //# $# # ## ### ##
-0x80, 0x40, 0x84, 0x88, 0x80, 0x00, 0x08, 0x88, 0x08, 0x80, //# $ #$### ### ##
-0x88, 0x80, 0x04, 0x08, 0x00, 0x80, 0x08, 0x88, 0x08, 0x80, //### $ # # ### ##
-0x88, 0x80, 0x00, 0x04, 0x08, 0x80, 0x80, 0x08, 0x08, 0x80, //### $ ## # # ##
-0x08, 0x04, 0x00, 0x80, 0x04, 0x00, 0x40, 0x40, 0x00, 0x80, // # $ # $ $ $ #
-0x08, 0x00, 0x40, 0x04, 0x84, 0x44, 0x00, 0x80, 0x00, 0x80, // # $ $#$$$ # #
-0x08, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, // # # $ #####
-0x08, 0x02, 0x88, 0x00, 0x80, 0x08, 0x00, 0x80, 0x00, 0x00, // # @## # # #
-0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // ##############
-//Level: 322
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x80, 0x00, //#####
-0x80, 0x01, 0x88, 0x80, //# .###
-0x80, 0x41, 0x10, 0x80, //# $.. #
-0x80, 0x08, 0x84, 0x88, //# ##$##
-0x88, 0x00, 0x80, 0x08, //## # #
-0x08, 0x40, 0x00, 0x28, // #$ @#
-0x08, 0x00, 0x88, 0x88, // # ####
-0x08, 0x88, 0x80, 0x00, // ####
-//Level: 323
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x81, 0x11, 0x18, 0x00, 0x00, 0x00, 0x08, 0x00, 0x80, 0x08, //#....# # # #
-0x81, 0x11, 0x18, 0x08, 0x04, 0x00, 0x40, 0x00, 0x00, 0x08, //#....# # $ $ #
-0x81, 0x11, 0x10, 0x88, 0x00, 0x48, 0x08, 0x04, 0x84, 0x08, //#.... ## $# # $#$ #
-0x81, 0x11, 0x80, 0x00, 0x40, 0x00, 0x48, 0x00, 0x40, 0x08, //#...# $ $# $ #
-0x81, 0x18, 0x88, 0x80, 0x08, 0x04, 0x00, 0x04, 0x40, 0x08, //#..#### # $ $$ #
-0x80, 0x00, 0x00, 0x08, 0x88, 0x80, 0x88, 0x88, 0x08, 0x88, //# #### #### ###
-0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x08, //# # # #
-0x80, 0x88, 0x00, 0x08, 0x00, 0x04, 0x08, 0x04, 0x04, 0x08, //# ## # $ # $ $ #
-0x80, 0x88, 0x00, 0x00, 0x40, 0x88, 0x04, 0x00, 0x40, 0x08, //# ## $ ## $ $ #
-0x80, 0x00, 0x00, 0x28, 0x00, 0x00, 0x08, 0x00, 0x08, 0x08, //# @# # # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 324
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x28, 0x11, 0x18, 0x88, //# # @#...###
-0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, 0x81, 0x11, 0x88, //# # ##...##
-0x80, 0x80, 0x80, 0x88, 0x48, 0x80, 0x88, 0x01, 0x11, 0x18, //# # # ##$## ## ....#
-0x80, 0x00, 0x40, 0x80, 0x00, 0x44, 0x40, 0x01, 0x11, 0x18, //# $ # $$$ ....#
-0x88, 0x84, 0x88, 0x80, 0x44, 0x00, 0x88, 0x80, 0x88, 0x18, //###$### $$ ### ##.#
-0x80, 0x00, 0x00, 0x40, 0x08, 0x00, 0x00, 0x80, 0x88, 0x88, //# $ # # ####
-0x80, 0x04, 0x00, 0x80, 0x08, 0x88, 0x00, 0x80, 0x80, 0x08, //# $ # ### # # #
-0x88, 0x08, 0x48, 0x80, 0x00, 0x04, 0x00, 0x44, 0x00, 0x08, //## #$## $ $$ #
-0x80, 0x00, 0x40, 0x88, 0x00, 0x08, 0x00, 0x80, 0x80, 0x08, //# $ ## # # # #
-0x80, 0x00, 0x00, 0x80, 0x00, 0x08, 0x00, 0x80, 0x00, 0x08, //# # # # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 325
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x88, 0x88, 0x82, 0x88, 0x81, 0x88, 0x11, 0x18, 0x80, 0x08, //#####@###.##...## #
-0x88, 0x88, 0x84, 0x00, 0x11, 0x81, 0x11, 0x80, 0x00, 0x08, //#####$ ..#...# #
-0x88, 0x88, 0x00, 0x00, 0x11, 0x11, 0x11, 0x80, 0x04, 0x08, //#### ......# $ #
-0x88, 0x80, 0x04, 0x08, 0x11, 0x11, 0x18, 0x80, 0x80, 0x88, //### $ #.....## # ##
-0x88, 0x00, 0x44, 0x80, 0x88, 0x88, 0x80, 0x04, 0x04, 0x08, //## $$# ##### $ $ #
-0x88, 0x04, 0x80, 0x40, 0x00, 0x08, 0x80, 0x04, 0x40, 0x08, //## $# $ ## $$ #
-0x88, 0x00, 0x80, 0x08, 0x00, 0x00, 0x80, 0x40, 0x04, 0x08, //## # # # $ $ #
-0x88, 0x00, 0x04, 0x40, 0x88, 0x80, 0x84, 0x88, 0x00, 0x08, //## $$ ### #$## #
-0x88, 0x04, 0x80, 0x00, 0x00, 0x04, 0x04, 0x00, 0x40, 0x88, //## $# $ $ $ ##
-0x88, 0x80, 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x08, 0x88, //### # # ###
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 326
-0x0B, 0x0B,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###########
-0x80, 0x41, 0x04, 0x01, 0x00, 0x80, //# $. $ . #
-0x80, 0x08, 0x00, 0x41, 0x00, 0x80, //# # $. #
-0x81, 0x15, 0x11, 0x85, 0x81, 0x80, //#..*..#*#.#
-0x84, 0x48, 0x44, 0x41, 0x04, 0x80, //#$$#$$$. $#
-0x80, 0x01, 0x42, 0x41, 0x00, 0x80, //# .$@$. #
-0x84, 0x01, 0x44, 0x48, 0x44, 0x80, //#$ .$$$#$$#
-0x81, 0x85, 0x81, 0x15, 0x11, 0x80, //#.#*#..*..#
-0x80, 0x01, 0x40, 0x08, 0x00, 0x80, //# .$ # #
-0x80, 0x01, 0x40, 0x41, 0x00, 0x80, //# .$ $. #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###########
-//Level: 327
-0x12, 0x10,//Size x and y
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x00, 0x00, // #######
-0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x08, 0x00, 0x00, // ####### #
-0x08, 0x00, 0x00, 0x08, 0x04, 0x24, 0x08, 0x00, 0x00, // # # $@$ #
-0x08, 0x44, 0x08, 0x00, 0x08, 0x88, 0x88, 0x88, 0x88, // #$$ # #########
-0x08, 0x08, 0x88, 0x11, 0x11, 0x11, 0x88, 0x00, 0x08, // # ###......## #
-0x08, 0x00, 0x04, 0x11, 0x11, 0x11, 0x88, 0x08, 0x08, // # $......## # #
-0x08, 0x08, 0x88, 0x11, 0x11, 0x11, 0x00, 0x00, 0x08, // # ###...... #
-0x88, 0x00, 0x08, 0x88, 0x80, 0x88, 0x80, 0x84, 0x88, //## #### ### #$##
-0x80, 0x08, 0x40, 0x00, 0x80, 0x04, 0x00, 0x80, 0x80, //# #$ # $ # #
-0x80, 0x04, 0x04, 0x44, 0x00, 0x80, 0x48, 0x80, 0x80, //# $ $$$ # $## #
-0x80, 0x00, 0x40, 0x40, 0x88, 0x84, 0x40, 0x80, 0x80, //# $ $ ###$$ # #
-0x88, 0x88, 0x80, 0x00, 0x00, 0x40, 0x00, 0x80, 0x80, //##### $ # #
-0x00, 0x00, 0x88, 0x80, 0x88, 0x80, 0x00, 0x80, 0x80, // ### ### # #
-0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, // # # #
-0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x00, 0x80, // ######## #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, // ####
-//Level: 328
-0x09, 0x07,//Size x and y
-0x08, 0x88, 0x88, 0x00, 0x00, // #####
-0x08, 0x00, 0x08, 0x88, 0x80, // # ####
-0x88, 0x08, 0x42, 0x00, 0x80, //## #$@ #
-0x80, 0x40, 0x04, 0x40, 0x80, //# $ $$ #
-0x80, 0x84, 0x81, 0x51, 0x80, //# #$#.*.#
-0x80, 0x00, 0x01, 0x11, 0x80, //# ...#
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-//Level: 329
-0x08, 0x06,//Size x and y
-0x00, 0x88, 0x88, 0x00, // ####
-0x88, 0x81, 0x08, 0x00, //###. #
-0x80, 0x10, 0x08, 0x88, //# . ###
-0x80, 0x00, 0x44, 0x08, //# $$ #
-0x88, 0x01, 0x04, 0x28, //## . $@#
-0x08, 0x88, 0x88, 0x88, // #######
-//Level: 330
-0x08, 0x07,//Size x and y
-0x08, 0x88, 0x88, 0x88, // #######
-0x88, 0x20, 0x00, 0x08, //##@ #
-0x81, 0x08, 0x00, 0x08, //#. # #
-0x80, 0x44, 0x41, 0x88, //# $$$.##
-0x80, 0x18, 0x00, 0x80, //# .# #
-0x80, 0x08, 0x88, 0x80, //# ####
-0x88, 0x88, 0x00, 0x00, //####
-//Level: 331
-0x09, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-0x80, 0x00, 0x20, 0x00, 0x80, //# @ #
-0x84, 0x44, 0x44, 0x44, 0x80, //#$$$$$$$#
-0x81, 0x11, 0x81, 0x11, 0x80, //#...#...#
-0x81, 0x11, 0x11, 0x11, 0x80, //#.......#
-0x84, 0x44, 0x04, 0x44, 0x80, //#$$$ $$$#
-0x80, 0x00, 0x00, 0x00, 0x80, //# #
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-//Level: 332
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x00, 0x08, 0x88, //## ###
-0x80, 0x48, 0x08, 0x88, //# $# ###
-0x80, 0x10, 0x28, 0x88, //# . @###
-0x80, 0x50, 0x00, 0x88, //# * ##
-0x88, 0x08, 0x40, 0x88, //## #$ ##
-0x88, 0x10, 0x08, 0x88, //##. ###
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 333
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x80, 0x80, 0x80, 0x00, 0x82, 0x88, 0x00, 0x08, 0x08, //# # # # #@## # #
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, //# $ #
-0x80, 0x08, 0x84, 0x80, 0x88, 0x88, 0x80, 0x40, 0x80, 0x88, //# ##$# ##### $ # ##
-0x88, 0x00, 0x00, 0x88, 0x11, 0x11, 0x18, 0x00, 0x80, 0x08, //## ##.....# # #
-0x88, 0x48, 0x84, 0x81, 0x11, 0x11, 0x88, 0x84, 0x84, 0x08, //##$##$#.....###$#$ #
-0x80, 0x00, 0x80, 0x88, 0x11, 0x11, 0x18, 0x00, 0x80, 0x88, //# # ##.....# # ##
-0x80, 0x04, 0x00, 0x00, 0x88, 0x11, 0x88, 0x00, 0x80, 0x08, //# $ ##..## # #
-0x80, 0x40, 0x80, 0x00, 0x40, 0x00, 0x40, 0x04, 0x44, 0x08, //# $ # $ $ $$$ #
-0x88, 0x04, 0x00, 0x48, 0x08, 0x00, 0x80, 0x04, 0x00, 0x08, //## $ $# # # $ #
-0x80, 0x00, 0x88, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x08, //# ## # # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 334
-0x12, 0x0F,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //##################
-0x81, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, //#..# #
-0x81, 0x18, 0x00, 0x80, 0x40, 0x40, 0x40, 0x88, 0x08, //#..# # $ $ $ ## #
-0x81, 0x18, 0x08, 0x88, 0x08, 0x08, 0x00, 0x80, 0x08, //#..# ### # # # #
-0x81, 0x18, 0x08, 0x04, 0x48, 0x88, 0x48, 0x84, 0x08, //#..# # $$###$##$ #
-0x81, 0x18, 0x00, 0x00, 0x00, 0x04, 0x24, 0x04, 0x08, //#..# $@$ $ #
-0x81, 0x10, 0x04, 0x80, 0x40, 0x80, 0x44, 0x08, 0x08, //#.. $# $ # $$ # #
-0x80, 0x08, 0x00, 0x80, 0x08, 0x88, 0x00, 0x08, 0x08, //# # # ### # #
-0x80, 0x00, 0x08, 0x88, 0x00, 0x80, 0x08, 0x88, 0x08, //# ### # ### #
-0x81, 0x18, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x08, //#..# $ $ #
-0x81, 0x18, 0x08, 0x84, 0x00, 0x80, 0x08, 0x04, 0x08, //#..# ##$ # # $ #
-0x81, 0x18, 0x00, 0x80, 0x08, 0x88, 0x08, 0x80, 0x08, //#..# # ### ## #
-0x81, 0x18, 0x00, 0x88, 0x44, 0x08, 0x48, 0x84, 0x08, //#..# ##$$ #$##$ #
-0x81, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, //#..# #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //##################
-//Level: 335
-0x13, 0x10,//Size x and y
-0x08, 0x88, 0x88, 0x80, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, // ###### ####
-0x08, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x80, 0x00, 0x00, // # ###### #
-0x08, 0x28, 0x04, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, // #@# $ ##
-0x88, 0x88, 0x84, 0x04, 0x08, 0x88, 0x80, 0x08, 0x80, 0x00, //#####$ $ #### ##
-0x80, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x88, 0x00, //# $ # ##
-0x80, 0x04, 0x40, 0x80, 0x88, 0x48, 0x88, 0x44, 0x08, 0x00, //# $$ # ##$###$$ #
-0x80, 0x00, 0x00, 0x45, 0x15, 0x11, 0x80, 0x00, 0x08, 0x00, //# $*.*..# #
-0x88, 0x88, 0x88, 0x81, 0x11, 0x15, 0x80, 0x40, 0x08, 0x00, //#######....*# $ #
-0x00, 0x00, 0x00, 0x85, 0x11, 0x51, 0x80, 0x84, 0x88, 0x00, // #*..*.# #$##
-0x00, 0x00, 0x00, 0x81, 0x11, 0x15, 0x04, 0x00, 0x08, 0x00, // #....* $ #
-0x00, 0x00, 0x00, 0x81, 0x11, 0x11, 0x80, 0x44, 0x48, 0x00, // #.....# $$$#
-0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x80, 0x80, 0x08, 0x80, // ##### # # ##
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x80, // # # $ $ #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x80, // # $ #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x88, 0x00, 0x80, // # ### #
-0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x08, 0x88, 0x80, // #### ####
-//Level: 336
-0x09, 0x08,//Size x and y
-0x00, 0x08, 0x88, 0x88, 0x00, // #####
-0x88, 0x88, 0x10, 0x08, 0x80, //####. ##
-0x80, 0x41, 0x41, 0x00, 0x80, //# $.$. #
-0x82, 0x48, 0x08, 0x40, 0x80, //#@$# #$ #
-0x80, 0x41, 0x01, 0x00, 0x80, //# $. . #
-0x88, 0x88, 0x48, 0x40, 0x80, //####$#$ #
-0x00, 0x81, 0x01, 0x00, 0x80, // #. . #
-0x00, 0x88, 0x88, 0x88, 0x80, // #######
-//Level: 337
-0x07, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x80, //#######
-0x80, 0x00, 0x00, 0x80, //# #
-0x81, 0x88, 0x01, 0x80, //#.## .#
-0x85, 0x00, 0x42, 0x80, //#* $@#
-0x80, 0x08, 0x40, 0x80, //# #$ #
-0x80, 0x08, 0x00, 0x80, //# # #
-0x88, 0x88, 0x88, 0x80, //#######
-//Level: 338
-0x13, 0x10,//Size x and y
-0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //####
-0x80, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, //# ##############
-0x80, 0x08, 0x00, 0x01, 0x18, 0x11, 0x11, 0x11, 0x80, 0x00, //# # ..#......#
-0x80, 0x08, 0x08, 0x08, 0x88, 0x88, 0x01, 0x11, 0x80, 0x00, //# # # ##### ...#
-0x88, 0x48, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x80, 0x00, //##$# ........#
-0x80, 0x00, 0x88, 0x48, 0x88, 0x88, 0x80, 0x08, 0x88, 0x80, //# ##$###### ####
-0x80, 0x40, 0x80, 0x00, 0x00, 0x88, 0x88, 0x88, 0x20, 0x80, //# $ # ######@ #
-0x88, 0x40, 0x80, 0x40, 0x00, 0x88, 0x88, 0x88, 0x00, 0x80, //##$ # $ ###### #
-0x80, 0x04, 0x08, 0x44, 0x48, 0x80, 0x00, 0x00, 0x00, 0x80, //# $ #$$$## #
-0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x84, 0x84, 0x88, 0x80, //# # #$#$###
-0x80, 0x88, 0x88, 0x08, 0x44, 0x44, 0x40, 0x00, 0x08, 0x00, //# #### #$$$$$ #
-0x80, 0x80, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, //# # $ # #
-0x80, 0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, //# # ## ###
-0x80, 0x88, 0x88, 0x88, 0x48, 0x88, 0x88, 0x80, 0x40, 0x80, //# ######$###### $ #
-0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x80, //# # # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x80, //########## #####
-//Level: 339
-0x14, 0x10,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, //############
-0x80, 0x00, 0x00, 0x08, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, //# # ##
-0x80, 0x40, 0x04, 0x00, 0x08, 0x00, 0x88, 0x88, 0x88, 0x00, //# $ $ # ######
-0x88, 0x88, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x08, 0x00, //#### ##### #
-0x08, 0x11, 0x00, 0x80, 0x00, 0x00, 0x88, 0x88, 0x08, 0x00, // #.. # #### #
-0x08, 0x18, 0x88, 0x80, 0x08, 0x88, 0x80, 0x00, 0x08, 0x00, // #.#### #### #
-0x08, 0x11, 0x11, 0x00, 0x00, 0x80, 0x04, 0x08, 0x88, 0x80, // #.... # $ ####
-0x08, 0x01, 0x11, 0x80, 0x00, 0x80, 0x44, 0x48, 0x00, 0x88, // # ...# # $$$# ##
-0x88, 0x81, 0x88, 0x88, 0x08, 0x80, 0x04, 0x24, 0x00, 0x08, //###.#### ## $@$ #
-0x80, 0x00, 0x00, 0x88, 0x88, 0x80, 0x40, 0x80, 0x00, 0x08, //# ##### $ # #
-0x80, 0x81, 0x80, 0x40, 0x00, 0x00, 0x04, 0x88, 0x84, 0x08, //# #.# $ $###$ #
-0x80, 0x81, 0x88, 0x88, 0x88, 0x88, 0x00, 0x80, 0x04, 0x08, //# #.######## # $ #
-0x80, 0x81, 0x10, 0x00, 0x00, 0x00, 0x08, 0x80, 0x04, 0x08, //# #.. ## $ #
-0x80, 0x80, 0x88, 0x88, 0x88, 0x80, 0x40, 0x80, 0x80, 0x08, //# # ####### $ # # #
-0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x88, //# # # ##
-0x88, 0x88, 0x80, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, //##### ##########
-//Level: 340
-0x09, 0x09,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x00, // #######
-0x88, 0x00, 0x50, 0x08, 0x80, //## * ##
-0x80, 0x12, 0x10, 0x10, 0x80, //# .@. . #
-0x80, 0x40, 0x50, 0x00, 0x80, //# $ * #
-0x85, 0x44, 0x54, 0x45, 0x80, //#*$$*$$*#
-0x80, 0x00, 0x50, 0x40, 0x80, //# * $ #
-0x80, 0x10, 0x10, 0x10, 0x80, //# . . . #
-0x88, 0x00, 0x50, 0x08, 0x80, //## * ##
-0x08, 0x88, 0x88, 0x88, 0x00, // #######
-//Level: 341
-0x14, 0x0C,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x00, 0x00, 0x88, 0x81, 0x18, 0x88, 0x00, 0x00, 0x08, //# ###..### #
-0x80, 0x44, 0x00, 0x88, 0x81, 0x18, 0x88, 0x00, 0x42, 0x08, //# $$ ###..### $@ #
-0x80, 0x08, 0x08, 0x81, 0x11, 0x11, 0x18, 0x00, 0x40, 0x08, //# # ##......# $ #
-0x80, 0x00, 0x00, 0x81, 0x11, 0x11, 0x18, 0x00, 0x40, 0x08, //# #......# $ #
-0x88, 0x88, 0x00, 0x88, 0x81, 0x18, 0x88, 0x88, 0x84, 0x08, //#### ###..######$ #
-0x80, 0x00, 0x44, 0x40, 0x81, 0x18, 0x00, 0x00, 0x80, 0x08, //# $$$ #..# # #
-0x80, 0x48, 0x00, 0x04, 0x00, 0x40, 0x04, 0x40, 0x84, 0x08, //# $# $ $ $$ #$ #
-0x80, 0x08, 0x00, 0x88, 0x04, 0x00, 0x88, 0x00, 0x80, 0x08, //# # ## $ ## # #
-0x80, 0x40, 0x00, 0x04, 0x08, 0x80, 0x40, 0x00, 0x04, 0x08, //# $ $ ## $ $ #
-0x80, 0x08, 0x00, 0x88, 0x00, 0x00, 0x88, 0x00, 0x80, 0x08, //# # ## ## # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 342
-0x07, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x00, //######
-0x80, 0x00, 0x28, 0x80, //# @##
-0x80, 0x08, 0x00, 0x80, //# # #
-0x81, 0x00, 0x40, 0x80, //#. $ #
-0x80, 0x44, 0x81, 0x80, //# $$#.#
-0x88, 0x80, 0x01, 0x80, //### .#
-0x00, 0x88, 0x88, 0x80, // #####
-//Level: 343
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x88, 0x88, 0x88, //########
-0x81, 0x00, 0x01, 0x08, //#. . #
-0x80, 0x80, 0x80, 0x08, //# # # #
-0x82, 0x40, 0x04, 0x18, //#@$ $.#
-0x88, 0x88, 0x80, 0x48, //##### $#
-0x88, 0x88, 0x80, 0x08, //##### #
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 344
-0x0E, 0x0A,//Size x and y
-0x88, 0x88, 0x00, 0x00, 0x00, 0x88, 0x88, //#### ####
-0x81, 0x18, 0x88, 0x88, 0x88, 0x81, 0x18, //#..########..#
-0x85, 0x15, 0x11, 0x11, 0x15, 0x15, 0x18, //#*.*.....*.*.#
-0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x48, //# $ $ $ $ $ $#
-0x84, 0x04, 0x04, 0x24, 0x04, 0x04, 0x08, //#$ $ $@$ $ $ #
-0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x48, //# $ $ $ $ $ $#
-0x84, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, //#$ $ $ $ $ $ #
-0x81, 0x51, 0x51, 0x11, 0x11, 0x51, 0x58, //#.*.*.....*.*#
-0x81, 0x18, 0x88, 0x88, 0x88, 0x81, 0x18, //#..########..#
-0x88, 0x88, 0x00, 0x00, 0x00, 0x88, 0x88, //#### ####
-//Level: 345
-0x08, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x80, 0x01, 0x80, 0x28, //# .# @#
-0x80, 0x80, 0x40, 0x08, //# # $ #
-0x80, 0x41, 0x84, 0x08, //# $.#$ #
-0x88, 0x01, 0x00, 0x08, //## . #
-0x08, 0x00, 0x88, 0x88, // # ####
-0x08, 0x88, 0x80, 0x00, // ####
-//Level: 346
-0x13, 0x10,//Size x and y
-0x08, 0x88, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ### #############
-0x88, 0x28, 0x88, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, //##@#### # #
-0x80, 0x44, 0x00, 0x04, 0x40, 0x04, 0x04, 0x01, 0x11, 0x80, //# $$ $$ $ $ ...#
-0x80, 0x04, 0x44, 0x80, 0x00, 0x04, 0x00, 0x81, 0x11, 0x80, //# $$$# $ #...#
-0x80, 0x40, 0x00, 0x80, 0x44, 0x04, 0x40, 0x81, 0x11, 0x80, //# $ # $$ $$ #...#
-0x88, 0x80, 0x00, 0x80, 0x04, 0x00, 0x00, 0x81, 0x11, 0x80, //### # $ #...#
-0x80, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x81, 0x11, 0x80, //# # $ $ $ #...#
-0x80, 0x00, 0x08, 0x88, 0x88, 0x80, 0x88, 0x81, 0x11, 0x80, //# ###### ###...#
-0x88, 0x08, 0x00, 0x80, 0x04, 0x04, 0x00, 0x81, 0x11, 0x80, //## # # $ $ #...#
-0x80, 0x08, 0x80, 0x80, 0x44, 0x04, 0x04, 0x88, 0x11, 0x80, //# ## # $$ $ $##..#
-0x80, 0x11, 0x80, 0x80, 0x04, 0x00, 0x00, 0x00, 0x81, 0x80, //# ..# # $ #.#
-0x80, 0x11, 0x80, 0x80, 0x44, 0x40, 0x44, 0x40, 0x81, 0x80, //# ..# # $$$ $$$ #.#
-0x88, 0x88, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x81, 0x80, //##### # # #.#
-0x00, 0x00, 0x80, 0x88, 0x88, 0x88, 0x88, 0x80, 0x81, 0x80, // # ######### #.#
-0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x80, // # #.#
-0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ###############
-//Level: 347
-0x13, 0x10,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // ##########
-0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, //##### ####
-0x80, 0x00, 0x00, 0x80, 0x00, 0x40, 0x08, 0x20, 0x80, 0x00, //# # $ #@ #
-0x80, 0x88, 0x88, 0x88, 0x84, 0x88, 0x88, 0x00, 0x88, 0x80, //# #######$#### ###
-0x80, 0x80, 0x00, 0x08, 0x80, 0x80, 0x08, 0x40, 0x11, 0x80, //# # ## # #$ ..#
-0x80, 0x80, 0x40, 0x00, 0x00, 0x80, 0x08, 0x00, 0x81, 0x80, //# # $ # # #.#
-0x80, 0x80, 0x40, 0x08, 0x00, 0x00, 0x08, 0x40, 0x11, 0x80, //# # $ # #$ ..#
-0x80, 0x80, 0x08, 0x88, 0x08, 0x80, 0x00, 0x00, 0x81, 0x80, //# # ### ## #.#
-0x80, 0x88, 0x80, 0x08, 0x00, 0x80, 0x08, 0x40, 0x11, 0x80, //# ### # # #$ ..#
-0x80, 0x80, 0x00, 0x08, 0x00, 0x88, 0x88, 0x00, 0x81, 0x80, //# # # #### #.#
-0x80, 0x84, 0x00, 0x04, 0x00, 0x40, 0x08, 0x40, 0x11, 0x80, //# #$ $ $ #$ ..#
-0x80, 0x00, 0x04, 0x08, 0x04, 0x04, 0x08, 0x00, 0x81, 0x80, //# $ # $ $ # #.#
-0x88, 0x88, 0x04, 0x88, 0x80, 0x00, 0x08, 0x40, 0x11, 0x80, //#### $### #$ ..#
-0x00, 0x08, 0x00, 0x00, 0x44, 0x08, 0x88, 0x11, 0x11, 0x80, // # $$ ###....#
-0x00, 0x08, 0x00, 0x00, 0x00, 0x88, 0x08, 0x88, 0x88, 0x80, // # ## ######
-0x00, 0x08, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // ########
-//Level: 348
-0x08, 0x08,//Size x and y
-0x00, 0x08, 0x88, 0x80, // ####
-0x00, 0x08, 0x00, 0x80, // # #
-0x88, 0x88, 0x04, 0x88, //#### $##
-0x80, 0x24, 0x10, 0x08, //# @$. #
-0x80, 0x88, 0x00, 0x08, //# ## #
-0x80, 0x00, 0x88, 0x08, //# ## #
-0x80, 0x00, 0x50, 0x18, //# * .#
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 349
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x80, 0x08, 0x88, 0x88, //# #####
-0x80, 0x08, 0x88, 0x88, //# #####
-0x80, 0x15, 0x00, 0x08, //# .* #
-0x88, 0x40, 0x00, 0x08, //##$ #
-0x88, 0x08, 0x48, 0x88, //## #$###
-0x88, 0x10, 0x28, 0x88, //##. @###
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 350
-0x09, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-0x82, 0x00, 0x40, 0x10, 0x80, //#@ $ . #
-0x80, 0x40, 0x41, 0x40, 0x80, //# $ $.$ #
-0x81, 0x51, 0x51, 0x51, 0x80, //#.*.*.*.#
-0x80, 0x41, 0x40, 0x40, 0x80, //# $.$ $ #
-0x80, 0x10, 0x40, 0x00, 0x80, //# . $ #
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-//Level: 351
-0x07, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x80, //#######
-0x81, 0x01, 0x01, 0x80, //#. . .#
-0x80, 0x44, 0x40, 0x80, //# $$$ #
-0x81, 0x42, 0x41, 0x80, //#.$@$.#
-0x80, 0x44, 0x40, 0x80, //# $$$ #
-0x81, 0x01, 0x01, 0x80, //#. . .#
-0x88, 0x88, 0x88, 0x80, //#######
-//Level: 352
-0x09, 0x07,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-0x82, 0x01, 0x00, 0x00, 0x80, //#@ . #
-0x80, 0x44, 0x14, 0x40, 0x80, //# $$.$$ #
-0x81, 0x51, 0x11, 0x51, 0x80, //#.*...*.#
-0x80, 0x44, 0x14, 0x40, 0x80, //# $$.$$ #
-0x80, 0x41, 0x00, 0x00, 0x80, //# $. #
-0x88, 0x88, 0x88, 0x88, 0x80, //#########
-//Level: 353
-0x14, 0x0F,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x80, 0x00, 0x08, 0x80, 0x00, 0x80, 0x00, 0x08, 0x00, 0x08, //# ## # # #
-0x80, 0x04, 0x00, 0x40, 0x00, 0x00, 0x88, 0x04, 0x00, 0x08, //# $ $ ## $ #
-0x88, 0x08, 0x88, 0x88, 0x00, 0x18, 0x88, 0x88, 0x80, 0x88, //## ##### .###### ##
-0x08, 0x08, 0x80, 0x08, 0x81, 0x11, 0x18, 0x88, 0x80, 0x88, // # ## ##....#### ##
-0x88, 0x08, 0x84, 0x08, 0x88, 0x11, 0x88, 0x00, 0x00, 0x08, //## ##$ ###..## #
-0x80, 0x00, 0x00, 0x08, 0x11, 0x10, 0x18, 0x04, 0x04, 0x08, //# #... .# $ $ #
-0x80, 0x40, 0x88, 0x08, 0x80, 0x10, 0x88, 0x80, 0x88, 0x88, //# $ ## ## . ### ####
-0x80, 0x80, 0x40, 0x00, 0x08, 0x18, 0x80, 0x80, 0x80, 0x00, //# # $ #.## # #
-0x80, 0x40, 0x40, 0x80, 0x00, 0x18, 0x88, 0x80, 0x88, 0x00, //# $ $ # .#### ##
-0x80, 0x80, 0x08, 0x80, 0x80, 0x88, 0x00, 0x80, 0x08, 0x80, //# # ## # ## # ##
-0x88, 0x88, 0x88, 0x80, 0x04, 0x88, 0x40, 0x00, 0x40, 0x80, //####### $##$ $ #
-0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x40, 0x82, 0x80, // ## $ #@#
-0x00, 0x00, 0x00, 0x08, 0x00, 0x88, 0x08, 0x88, 0x88, 0x80, // # ## ######
-0x00, 0x00, 0x00, 0x08, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, // #######
-//Level: 354
-0x0D, 0x10,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, // #########
-0x00, 0x85, 0x15, 0x85, 0x15, 0x80, 0x00, // #*.*#*.*#
-0x00, 0x81, 0x51, 0x51, 0x51, 0x80, 0x00, // #.*.*.*.#
-0x00, 0x85, 0x15, 0x15, 0x15, 0x80, 0x00, // #*.*.*.*#
-0x00, 0x81, 0x51, 0x51, 0x51, 0x80, 0x00, // #.*.*.*.#
-0x00, 0x85, 0x15, 0x15, 0x15, 0x80, 0x00, // #*.*.*.*#
-0x00, 0x88, 0x80, 0x00, 0x88, 0x80, 0x00, // ### ###
-0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, // # #
-0x88, 0x88, 0x88, 0x08, 0x88, 0x88, 0x80, //###### ######
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, //# #
-0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, //# $ $ $ $ $ #
-0x88, 0x04, 0x04, 0x04, 0x04, 0x08, 0x80, //## $ $ $ $ ##
-0x08, 0x40, 0x40, 0x40, 0x40, 0x48, 0x00, // #$ $ $ $ $#
-0x08, 0x00, 0x04, 0x24, 0x00, 0x08, 0x00, // # $@$ #
-0x08, 0x00, 0x88, 0x88, 0x80, 0x08, 0x00, // # ##### #
-0x08, 0x88, 0x80, 0x00, 0x88, 0x88, 0x00, // #### ####
-//Level: 355
-0x05, 0x08,//Size x and y
-0x88, 0x88, 0x00, //####
-0x80, 0x28, 0x00, //# @#
-0x80, 0x48, 0x80, //# $##
-0x80, 0x41, 0x80, //# $.#
-0x80, 0x41, 0x80, //# $.#
-0x80, 0x41, 0x80, //# $.#
-0x88, 0x81, 0x80, //###.#
-0x00, 0x88, 0x80, // ###
-//Level: 356
-0x0D, 0x0A,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, //###########
-0x82, 0x40, 0x00, 0x11, 0x11, 0x88, 0x00, //#@$ ....##
-0x80, 0x44, 0x44, 0x81, 0x11, 0x18, 0x00, //# $$$$#....#
-0x80, 0x40, 0x04, 0x11, 0x55, 0x58, 0x80, //# $ $..***##
-0x88, 0x00, 0x08, 0x08, 0x81, 0x10, 0x80, //## # ##.. #
-0x80, 0x44, 0x48, 0x00, 0x88, 0x00, 0x80, //# $$$# ## #
-0x80, 0x00, 0x08, 0x80, 0x80, 0x08, 0x80, //# ## # ##
-0x80, 0x04, 0x40, 0x80, 0x00, 0x08, 0x00, //# $$ # #
-0x80, 0x00, 0x00, 0x88, 0x80, 0x08, 0x00, //# ### #
-0x88, 0x88, 0x88, 0x80, 0x88, 0x88, 0x00, //####### ####
-//Level: 357
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x81, 0x01, 0x88, 0x88, //#. .####
-0x81, 0x84, 0x40, 0x88, //#.#$$ ##
-0x80, 0x00, 0x20, 0x88, //# @ ##
-0x80, 0x48, 0x00, 0x88, //# $# ##
-0x88, 0x00, 0x08, 0x88, //## ###
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 358
-0x13, 0x13,//Size x and y
-0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, // # # # # # # # # #
-0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, //# # # # # # # #.# #
-0x08, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x04, 0x18, 0x00, // #... $.#
-0x80, 0x04, 0x84, 0x00, 0x80, 0x80, 0x80, 0x40, 0x00, 0x80, //# $#$ # # # $ #
-0x08, 0x10, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x18, 0x00, // #. $ # # # # $.#
-0x80, 0x80, 0x40, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, //# # $ # # #
-0x08, 0x00, 0x08, 0x00, 0x88, 0x88, 0x80, 0x08, 0x08, 0x00, // # # ##### # #
-0x80, 0x00, 0x80, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x80, //# # # # # #
-0x08, 0x08, 0x00, 0x80, 0x08, 0x88, 0x08, 0x08, 0x08, 0x00, // # # # ### # # #
-0x80, 0x01, 0x40, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, //# .$ . # #
-0x08, 0x08, 0x40, 0x80, 0x80, 0x08, 0x08, 0x08, 0x08, 0x00, // # #$ # # # # # #
-0x80, 0x08, 0x00, 0x80, 0x08, 0x48, 0x08, 0x08, 0x00, 0x80, //# # # #$# # # #
-0x08, 0x01, 0x80, 0x08, 0x00, 0x08, 0x08, 0x08, 0x28, 0x00, // # .# # # # #@#
-0x80, 0x00, 0x08, 0x00, 0x88, 0x80, 0x48, 0x08, 0x00, 0x80, //# # ### $# # #
-0x08, 0x04, 0x40, 0x80, 0x00, 0x00, 0x41, 0x18, 0x48, 0x00, // # $$ # $..#$#
-0x80, 0x81, 0x00, 0x08, 0x88, 0x88, 0x84, 0x88, 0x10, 0x80, //# #. ######$##. #
-0x08, 0x08, 0x14, 0x00, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, // # #.$ . .#
-0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //# # # # # # # # # #
-0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, // # # # # # # # # #
-//Level: 359
-0x14, 0x11,//Size x and y
-0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, // ##################
-0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x11, 0x81, 0x88, // # $ ...#.##
-0x08, 0x00, 0x00, 0x00, 0x08, 0x88, 0x81, 0x11, 0x11, 0x08, // # ####..... #
-0x08, 0x08, 0x88, 0x88, 0x88, 0x00, 0x81, 0x11, 0x11, 0x08, // # ####### #..... #
-0x08, 0x08, 0x00, 0x00, 0x40, 0x40, 0x88, 0x11, 0x11, 0x88, // # # $ $ ##....##
-0x08, 0x08, 0x00, 0x40, 0x80, 0x80, 0x88, 0x81, 0x11, 0x80, // # # $ # # ###...#
-0x08, 0x08, 0x04, 0x24, 0x04, 0x00, 0x88, 0x88, 0x80, 0x80, // # # $@$ $ ##### #
-0x88, 0x08, 0x00, 0x40, 0x04, 0x04, 0x40, 0x00, 0x40, 0x80, //## # $ $ $$ $ #
-0x80, 0x08, 0x48, 0x04, 0x80, 0x00, 0x80, 0x48, 0x80, 0x80, //# #$# $# # $## #
-0x80, 0x88, 0x00, 0x00, 0x88, 0x08, 0x80, 0x40, 0x80, 0x80, //# ## ## ## $ # #
-0x80, 0x80, 0x48, 0x04, 0x04, 0x00, 0x80, 0x00, 0x00, 0x80, //# # $# $ $ # #
-0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, //# # #######
-0x80, 0x88, 0x88, 0x88, 0x88, 0x48, 0x80, 0x00, 0x80, 0x00, //# ########$## #
-0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, 0x80, 0x00, //# # $ #
-0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, //######## #####
-0x00, 0x00, 0x00, 0x08, 0x88, 0x00, 0x80, 0x00, 0x00, 0x00, // ### #
-0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, 0x00, // ####
-//Level: 360
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x81, 0x00, 0x88, 0x88, //#. ####
-0x80, 0x80, 0x00, 0x88, //# # ##
-0x80, 0x10, 0x80, 0x88, //# . # ##
-0x80, 0x45, 0x40, 0x88, //# $*$ ##
-0x88, 0x20, 0x88, 0x88, //##@ ####
-0x88, 0x00, 0x88, 0x88, //## ####
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 361
-0x13, 0x11,//Size x and y
-0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // #####
-0x00, 0x00, 0x08, 0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, // ## ##
-0x00, 0x00, 0x88, 0x00, 0x50, 0x08, 0x80, 0x00, 0x00, 0x00, // ## * ##
-0x00, 0x08, 0x80, 0x05, 0x05, 0x00, 0x88, 0x00, 0x00, 0x00, // ## * * ##
-0x00, 0x88, 0x00, 0x50, 0x50, 0x50, 0x08, 0x80, 0x00, 0x00, // ## * * * ##
-0x08, 0x80, 0x05, 0x05, 0x05, 0x05, 0x00, 0x88, 0x88, 0x00, // ## * * * * ####
-0x88, 0x00, 0x50, 0x50, 0x50, 0x50, 0x50, 0x08, 0x08, 0x80, //## * * * * * # ##
-0x80, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x00, 0x00, 0x80, //# * * * * * * #
-0x80, 0x50, 0x50, 0x50, 0x10, 0x50, 0x50, 0x52, 0x40, 0x80, //# * * * . * * *@$ #
-0x80, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x00, 0x00, 0x80, //# * * * * * * #
-0x88, 0x00, 0x50, 0x50, 0x50, 0x50, 0x50, 0x08, 0x08, 0x80, //## * * * * * # ##
-0x08, 0x80, 0x05, 0x05, 0x05, 0x05, 0x00, 0x88, 0x88, 0x00, // ## * * * * ####
-0x00, 0x88, 0x00, 0x50, 0x50, 0x50, 0x08, 0x80, 0x00, 0x00, // ## * * * ##
-0x00, 0x08, 0x80, 0x05, 0x05, 0x00, 0x88, 0x00, 0x00, 0x00, // ## * * ##
-0x00, 0x00, 0x88, 0x00, 0x50, 0x08, 0x80, 0x00, 0x00, 0x00, // ## * ##
-0x00, 0x00, 0x08, 0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, // ## ##
-0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // #####
-//Level: 362
-0x07, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x00, //######
-0x80, 0x10, 0x08, 0x00, //# . #
-0x80, 0x08, 0x28, 0x00, //# #@#
-0x80, 0x04, 0x08, 0x80, //# $ ##
-0x88, 0x48, 0x00, 0x80, //##$# #
-0x80, 0x00, 0x80, 0x80, //# # #
-0x81, 0x05, 0x00, 0x80, //#. * #
-0x88, 0x88, 0x88, 0x80, //#######
-//Level: 363
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x00, 0x12, 0x08, //## .@ #
-0x88, 0x08, 0x18, 0x08, //## #.# #
-0x88, 0x00, 0x04, 0x08, //## $ #
-0x88, 0x14, 0x40, 0x88, //##.$$ ##
-0x88, 0x00, 0x88, 0x88, //## ####
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 364
-0x13, 0x10,//Size x and y
-0x88, 0x88, 0x88, 0x00, 0x00, 0x08, 0x88, 0x80, 0x00, 0x00, //###### ####
-0x80, 0x00, 0x08, 0x88, 0x88, 0x88, 0x00, 0x88, 0x88, 0x80, //# ####### #####
-0x80, 0x00, 0x48, 0x00, 0x80, 0x04, 0x00, 0x80, 0x00, 0x80, //# $# # $ # #
-0x80, 0x04, 0x00, 0x40, 0x04, 0x08, 0x04, 0x04, 0x00, 0x80, //# $ $ $ # $ $ #
-0x88, 0x40, 0x40, 0x00, 0x80, 0x28, 0x04, 0x00, 0x00, 0x80, //##$ $ # @# $ #
-0x80, 0x04, 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x08, 0x80, //# $ ########### ##
-0x80, 0x80, 0x00, 0x81, 0x11, 0x11, 0x11, 0x80, 0x48, 0x00, //# # #.......# $#
-0x80, 0x88, 0x00, 0x80, 0x11, 0x11, 0x11, 0x80, 0x08, 0x00, //# ## # ......# #
-0x80, 0x80, 0x00, 0x41, 0x11, 0x11, 0x11, 0x14, 0x08, 0x00, //# # $........$ #
-0x80, 0x80, 0x40, 0x81, 0x11, 0x10, 0x11, 0x80, 0x08, 0x00, //# # $ #.... ..# #
-0x80, 0x04, 0x04, 0x88, 0x88, 0x48, 0x88, 0x80, 0x48, 0x00, //# $ $####$#### $#
-0x80, 0x40, 0x00, 0x88, 0x80, 0x40, 0x00, 0x40, 0x08, 0x80, //# $ ### $ $ ##
-0x80, 0x40, 0x00, 0x00, 0x40, 0x40, 0x04, 0x00, 0x00, 0x80, //# $ $ $ $ #
-0x88, 0x08, 0x88, 0x88, 0x80, 0x40, 0x88, 0x88, 0x80, 0x80, //## ###### $ ##### #
-0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, //# # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###################
-//Level: 365
-0x14, 0x12,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x80, 0x88, 0x88, 0x88, 0x00, 0x00, // ####### ######
-0x08, 0x80, 0x00, 0x00, 0x88, 0x80, 0x00, 0x08, 0x00, 0x00, // ## ### #
-0x08, 0x00, 0x88, 0x80, 0x00, 0x80, 0x44, 0x08, 0x88, 0x00, // # ### # $$ ###
-0x08, 0x08, 0x02, 0x08, 0x00, 0x80, 0x04, 0x00, 0x08, 0x00, // # # @ # # $ #
-0x08, 0x08, 0x44, 0x48, 0x08, 0x88, 0x84, 0x88, 0x08, 0x88, // # #$$$# ####$## ###
-0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x11, 0x18, //## $ #...#
-0x80, 0x08, 0x48, 0x48, 0x80, 0x08, 0x00, 0x08, 0x11, 0x18, //# #$#$## # #...#
-0x80, 0x80, 0x04, 0x00, 0x80, 0x80, 0x88, 0x08, 0x11, 0x18, //# # $ # # ## #...#
-0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x08, 0x11, 0x18, //# # # # #...#
-0x80, 0x08, 0x44, 0x48, 0x80, 0x84, 0x00, 0x08, 0x11, 0x18, //# #$$$## #$ #...#
-0x88, 0x00, 0x00, 0x00, 0x00, 0x04, 0x48, 0x88, 0x11, 0x18, //## $$###...#
-0x08, 0x08, 0x48, 0x48, 0x80, 0x84, 0x00, 0x00, 0x11, 0x18, // # #$#$## #$ ...#
-0x08, 0x08, 0x00, 0x00, 0x80, 0x80, 0x40, 0x00, 0x11, 0x18, // # # # # $ ...#
-0x08, 0x08, 0x00, 0x00, 0x80, 0x80, 0x08, 0x88, 0x88, 0x88, // # # # # #######
-0x08, 0x08, 0x44, 0x48, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, // # #$$$## # #
-0x08, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, // # ####
-0x08, 0x88, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // ### ###
-0x00, 0x08, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // ######
-//Level: 366
-0x0E, 0x10,//Size x and y
-0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, // ###
-0x08, 0x88, 0x88, 0x82, 0x88, 0x88, 0x80, // ######@#####
-0x08, 0x11, 0x11, 0x11, 0x11, 0x11, 0x80, // #..........#
-0x88, 0x15, 0x55, 0x55, 0x55, 0x51, 0x88, //##.********.##
-0x81, 0x15, 0x11, 0x11, 0x11, 0x51, 0x18, //#..*......*..#
-0x81, 0x15, 0x15, 0x55, 0x51, 0x51, 0x18, //#..*.****.*..#
-0x88, 0x88, 0x88, 0x11, 0x88, 0x88, 0x88, //######..######
-0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, // # #
-0x08, 0x04, 0x04, 0x44, 0x40, 0x40, 0x80, // # $ $$$$ $ #
-0x08, 0x44, 0x40, 0x00, 0x04, 0x44, 0x80, // #$$$ $$$#
-0x08, 0x00, 0x04, 0x44, 0x40, 0x00, 0x80, // # $$$$ #
-0x08, 0x40, 0x40, 0x00, 0x04, 0x04, 0x80, // #$ $ $ $#
-0x88, 0x00, 0x04, 0x44, 0x40, 0x00, 0x88, //## $$$$ ##
-0x80, 0x44, 0x40, 0x00, 0x04, 0x44, 0x08, //# $$$ $$$ #
-0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, //# # #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //##############
-//Level: 367
-0x14, 0x10,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-0x81, 0x18, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, //#..# # #
-0x81, 0x40, 0x04, 0x00, 0x84, 0x40, 0x04, 0x88, 0x04, 0x88, //#.$ $ #$$ $## $##
-0x81, 0x48, 0x00, 0x88, 0x80, 0x08, 0x80, 0x88, 0x00, 0x08, //#.$# ### ## ## #
-0x80, 0x08, 0x04, 0x08, 0x00, 0x44, 0x00, 0x04, 0x00, 0x08, //# # $ # $$ $ #
-0x80, 0x88, 0x80, 0x08, 0x08, 0x00, 0x84, 0x00, 0x88, 0x88, //# ### # # #$ ####
-0x80, 0x08, 0x80, 0x80, 0x40, 0x00, 0x82, 0x08, 0x00, 0x08, //# ## # $ #@ # #
-0x80, 0x40, 0x00, 0x04, 0x00, 0x88, 0x18, 0x80, 0x04, 0x08, //# $ $ ##.## $ #
-0x80, 0x08, 0x04, 0x80, 0x48, 0x04, 0x00, 0x00, 0x08, 0x88, //# # $# $# $ ###
-0x80, 0x08, 0x00, 0x80, 0x08, 0x00, 0x08, 0x88, 0x00, 0x08, //# # # # ### #
-0x80, 0x08, 0x88, 0x88, 0x88, 0x80, 0x80, 0x00, 0x00, 0x08, //# ######## # #
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x18, 0x18, //# # #.#.#
-0x88, 0x48, 0x88, 0x88, 0x88, 0x84, 0x80, 0x00, 0x11, 0x18, //##$########$# ...#
-0x80, 0x00, 0x01, 0x50, 0x08, 0x00, 0x00, 0x88, 0x18, 0x18, //# .* # ##.#.#
-0x80, 0x15, 0x11, 0x15, 0x00, 0x04, 0x00, 0x11, 0x11, 0x18, //# .*...* $ .....#
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, //####################
-//Level: 368
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x88, 0x88, 0x88, //########
-0x81, 0x00, 0x21, 0x88, //#. @.##
-0x80, 0x04, 0x80, 0x88, //# $# ##
-0x80, 0x80, 0x41, 0x08, //# # $. #
-0x80, 0x00, 0x48, 0x08, //# $# #
-0x88, 0x88, 0x00, 0x08, //#### #
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 369
-0x0B, 0x09,//Size x and y
-0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // #########
-0x88, 0x80, 0x00, 0x80, 0x00, 0x80, //### # #
-0x80, 0x04, 0x10, 0x50, 0x40, 0x80, //# $. * $ #
-0x80, 0x81, 0x81, 0x81, 0x80, 0x80, //# #.#.#.# #
-0x80, 0x40, 0x42, 0x40, 0x40, 0x80, //# $ $@$ $ #
-0x80, 0x81, 0x81, 0x81, 0x80, 0x80, //# #.#.#.# #
-0x80, 0x40, 0x50, 0x14, 0x00, 0x80, //# $ * .$ #
-0x80, 0x00, 0x88, 0x88, 0x88, 0x80, //# #######
-0x88, 0x88, 0x80, 0x00, 0x00, 0x00, //#####
-//Level: 370
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x80, 0x01, 0x08, //### . #
-0x88, 0x05, 0x08, 0x08, //## * # #
-0x88, 0x01, 0x40, 0x08, //## .$ #
-0x88, 0x00, 0x84, 0x88, //## #$##
-0x88, 0x80, 0x20, 0x88, //### @ ##
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 371
-0x08, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, //########
-0x80, 0x11, 0x88, 0x88, //# ..####
-0x80, 0x40, 0x00, 0x08, //# $ #
-0x80, 0x08, 0x48, 0x08, //# #$# #
-0x80, 0x20, 0x14, 0x08, //# @ .$ #
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x88, 0x88, 0x88, //########
-0x88, 0x88, 0x88, 0x88, //########
-//Level: 372
-0x0B, 0x08,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //##########
-0x80, 0x00, 0x00, 0x00, 0x08, 0x80, //# ##
-0x80, 0x48, 0x48, 0x48, 0x42, 0x80, //# $#$#$#$@#
-0x81, 0x01, 0x41, 0x11, 0x41, 0x80, //#. .$...$.#
-0x81, 0x01, 0x41, 0x11, 0x41, 0x80, //#. .$...$.#
-0x80, 0x48, 0x48, 0x48, 0x48, 0x80, //# $#$#$#$##
-0x80, 0x00, 0x00, 0x00, 0x08, 0x00, //# #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x00, //##########
-//Level: 373
-0x0F, 0x0D,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###############
-0x80, 0x01, 0x11, 0x11, 0x11, 0x11, 0x00, 0x80, //# ......... #
-0x80, 0x44, 0x44, 0x44, 0x44, 0x41, 0x40, 0x80, //# $$$$$$$$$.$ #
-0x80, 0x41, 0x11, 0x11, 0x11, 0x41, 0x40, 0x80, //# $.......$.$ #
-0x80, 0x41, 0x44, 0x44, 0x41, 0x41, 0x40, 0x80, //# $.$$$$$.$.$ #
-0x80, 0x41, 0x41, 0x11, 0x41, 0x41, 0x40, 0x80, //# $.$...$.$.$ #
-0x80, 0x41, 0x41, 0x45, 0x41, 0x41, 0x42, 0x80, //# $.$.$*$.$.$@#
-0x80, 0x41, 0x41, 0x41, 0x11, 0x41, 0x40, 0x80, //# $.$.$...$.$ #
-0x80, 0x41, 0x41, 0x44, 0x44, 0x41, 0x40, 0x80, //# $.$.$$$$$.$ #
-0x80, 0x41, 0x41, 0x11, 0x11, 0x11, 0x40, 0x80, //# $.$.......$ #
-0x80, 0x41, 0x44, 0x44, 0x44, 0x44, 0x40, 0x80, //# $.$$$$$$$$$ #
-0x80, 0x01, 0x11, 0x11, 0x11, 0x11, 0x00, 0x80, //# ......... #
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //###############
-//Level: 374
-0x11, 0x12,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, // #########
-0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // # #
-0x00, 0x08, 0x80, 0x40, 0x40, 0x40, 0x88, 0x00, 0x00, // ## $ $ $ ##
-0x88, 0x88, 0x00, 0x04, 0x04, 0x40, 0x08, 0x88, 0x80, //#### $ $$ ####
-0x80, 0x00, 0x80, 0x40, 0x04, 0x00, 0x80, 0x00, 0x80, //# # $ $ # #
-0x80, 0x44, 0x08, 0x04, 0x04, 0x08, 0x04, 0x40, 0x80, //# $$ # $ $ # $$ #
-0x80, 0x00, 0x40, 0x84, 0x04, 0x80, 0x04, 0x00, 0x80, //# $ #$ $# $ #
-0x80, 0x04, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x80, //# $ $ $ $ #
-0x80, 0x40, 0x40, 0x80, 0x40, 0x80, 0x44, 0x00, 0x80, //# $ $ # $ # $$ #
-0x80, 0x40, 0x08, 0x88, 0x08, 0x88, 0x00, 0x40, 0x80, //# $ ### ### $ #
-0x80, 0x00, 0x88, 0x08, 0x08, 0x08, 0x80, 0x00, 0x80, //# ## # # ## #
-0x88, 0x88, 0x80, 0x08, 0x28, 0x00, 0x88, 0x88, 0x80, //##### #@# #####
-0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, // # #
-0x00, 0x00, 0x00, 0x88, 0x08, 0x80, 0x00, 0x00, 0x00, // ## ##
-0x88, 0x88, 0x88, 0x81, 0x01, 0x88, 0x88, 0x88, 0x80, //#######. .#######
-0x81, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x11, 0x80, //#...... . ......#
-0x81, 0x11, 0x11, 0x11, 0x10, 0x11, 0x11, 0x11, 0x80, //#........ ......#
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //#################
-//Level: 375
-0x15, 0x11,//Size x and y
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, //#####################
-0x81, 0x00, 0x81, 0x00, 0x81, 0x41, 0x80, 0x01, 0x80, 0x01, 0x80, //#. #. #.$.# .# .#
-0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, //# # # # # # #
-0x80, 0x01, 0x80, 0x00, 0x10, 0x40, 0x10, 0x00, 0x81, 0x00, 0x80, //# .# . $ . #. #
-0x80, 0x80, 0x01, 0x84, 0x40, 0x80, 0x44, 0x81, 0x00, 0x80, 0x80, //# # .#$$ # $$#. # #
-0x80, 0x01, 0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x81, 0x00, 0x80, //# .# # $ # #. #
-0x80, 0x80, 0x00, 0x84, 0x40, 0x80, 0x44, 0x80, 0x00, 0x80, 0x80, //# # #$$ # $$# # #
-0x80, 0x01, 0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x81, 0x00, 0x80, //# .# # $ # #. #
-0x82, 0x80, 0x00, 0x84, 0x44, 0x54, 0x44, 0x80, 0x00, 0x80, 0x80, //#@# #$$$*$$$# # #
-0x80, 0x01, 0x10, 0x00, 0x80, 0x40, 0x80, 0x00, 0x11, 0x00, 0x80, //# .. # $ # .. #
-0x80, 0x80, 0x00, 0x84, 0x40, 0x80, 0x44, 0x80, 0x00, 0x80, 0x80, //# # #$$ # $$# # #
-0x80, 0x01, 0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x81, 0x00, 0x80, //# .# # $ # #. #
-0x80, 0x80, 0x01, 0x84, 0x40, 0x80, 0x44, 0x81, 0x00, 0x80, 0x80, //# # .#$$ # $$#. # #
-0x80, 0x01, 0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x81, 0x00, 0x80, //# .# # $ # #. #
-0x80, 0x80, 0x00, 0x84, 0x00, 0x80, 0x04, 0x80, 0x00, 0x80, 0x80, //# # #$ # $# # #
-0x81, 0x00, 0x81, 0x00, 0x81, 0x41, 0x80, 0x01, 0x80, 0x01, 0x80, //#. #. #.$.# .# .#
-0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80 //#####################
-};
-#else
-#define SOKOBAN_LEVELS 1
-const unsigned char Sokoban_Levels[] = {
-//Level: 1
-0x13, 0x0B,//Size x and y
-0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // #####
-0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // # #
-0x00, 0x00, 0x84, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // #$ #
-0x00, 0x88, 0x80, 0x04, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, // ### $##
-0x00, 0x80, 0x04, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, // # $ $ #
-0x88, 0x80, 0x80, 0x88, 0x08, 0x00, 0x08, 0x88, 0x88, 0x80, //### # ## # ######
-0x80, 0x00, 0x80, 0x88, 0x08, 0x88, 0x88, 0x00, 0x11, 0x80, //# # ## ##### ..#
-0x80, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x80, //# $ $ ..#
-0x88, 0x88, 0x80, 0x88, 0x80, 0x82, 0x88, 0x00, 0x11, 0x80, //##### ### #@## ..#
-0x00, 0x00, 0x80, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x80, // # #########
-0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, // #######
-};
-#endif
-#endif
diff --git a/boop/games/tic_tac_toe.c b/boop/games/tic_tac_toe.c
deleted file mode 100644
index 8d617ac..0000000
--- a/boop/games/tic_tac_toe.c
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- tic_tac_toe.c - game
- Copyright (C) 2007 Colibri
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "lcd.h"
-#include "fonty.h"
-#include "keyboard.h"
-#include "tic_tac_toe.h"
-
-void GameTicTacToe(void)
-{
- BYTE Color;
- BYTE Mode;
- int i;
- int k;
- BOOL ComputerWon;
- BOOL PlayerWon;
- BYTE G[2][9];//GameArray [0=Computer / 1=Player][Game fields]
- BOOL GameIsRunning = false;
- BYTE Moves = 0;
- int Pos;
-
- Color = LCD_COLOR_B;
- Mode = DRAW_PUT;
-
-again:
- //New game
- //Init the display
- lcd_fill(0);//Clr screen
-
- //Title
- set_font(SMALLFONT);
- draw_string(0, 0, "TicTacToe", Color, Mode);
-
- //Grid
- draw_block(16, 16+30, 96, 3, Color, Mode);
- draw_block(16, 16+30+3+30, 96, 3, Color, Mode);
- draw_block(16+30, 16, 3, 96, Color, Mode);
- draw_block(16+30+3+30, 16, 3, 96, Color, Mode);
-
- //Reset game field
- for(k=0; k<2; k++)
- {
- for(i=0; i<9; i++)
- {
- G[k][i] = 0;
- }
- }
-
- Moves = 0;
-
- GameIsRunning = true;
-
- while(1)
- {
- Pos = -1;
- if(KEY_1){Pos = 0;}
- if(KEY_2){Pos = 1;}
- if(KEY_3){Pos = 2;}
- if(KEY_4){Pos = 3;}
- if(KEY_5){Pos = 4;}
- if(KEY_6){Pos = 5;}
- if(KEY_7){Pos = 6;}
- if(KEY_8){Pos = 7;}
- if(KEY_9){Pos = 8;}
-
- if((Pos >= 0) && (Pos <= 8))
- {
- if(GameIsRunning)
- {
- if((G[0][Pos] + G[1][Pos]) == 0)
- {
- //field is empty
- G[1][Pos] = 1;
- Moves++;
-
- if(Moves < 9)
- {
- //Moves left
- if(!GameTicTacToe_IsSolved(G, &ComputerWon, &PlayerWon))
- {
- //Not solved -> computer move
- GameTicTacToe_ComputerMove(G);
- Moves++;
- }
- }
- GameTicTacToe_DrawGameField(G);
- }
- }
- }
-
- //Is solved?
- GameTicTacToe_IsSolved(G, &ComputerWon, &PlayerWon);
- if(ComputerWon)
- {
- draw_string(0, LCD_SIZE_Y - (8*4), "Computer hat gewonnen", Color, Mode);
- GameIsRunning = false;
- }
- else
- {
- if(PlayerWon)
- {
- draw_string(0, LCD_SIZE_Y - (8*4), "Spieler hat gewonnen", Color, Mode);
- GameIsRunning = false;
- }
- else
- {
- if(Moves == 9)
- {
- draw_string(0, LCD_SIZE_Y - (8*4), "Unentschieden", Color, Mode);
- GameIsRunning = false;
- }
- }
- }
-
- //Footer
- if(Moves > 0)
- {
- draw_string(0, LCD_SIZE_Y - (8*3), "0", Color, Mode);
- draw_string(32, LCD_SIZE_Y - (8*3), "Neues Spiel", Color, Mode);
- draw_string(0, LCD_SIZE_Y - (8*2), "Exit", Color, Mode);
- draw_string(32, LCD_SIZE_Y - (8*2), "Spiel beenden", Color, Mode);
- }
- else
- {
- draw_block(0, LCD_SIZE_Y - (8*2), LCD_SIZE_X, 8, Color, DRAW_ERASE);
- }
-
- if(GameIsRunning)
- {
- draw_string(0, LCD_SIZE_Y - 8, "1-9", Color, Mode);
- draw_string(32, LCD_SIZE_Y - 8, "Feld waehlen", Color, Mode);
- }
- else
- {
- draw_block(0, LCD_SIZE_Y - 8, LCD_SIZE_X, 8, Color, DRAW_ERASE);
- }
- waitKeyUpDown();
- if(KEY_0) goto again;
- if(KEY_Exit) return;
- }
-}
-
-void GameTicTacToe_ComputerMove(BYTE G[2][9])
-{
- int Pos;
- BYTE TempG[2][9];
- BOOL ComputerWon;
- BOOL PlayerWon;
-
- for(Pos=0; Pos<9; Pos++)
- {
- TempG[0][Pos] = G[0][Pos];
- TempG[1][Pos] = G[1][Pos];
- }
-
- //1: Check if the computer can win the game with the next move
- for(Pos=0; Pos<9; Pos++)
- {
- if((G[0][Pos] + G[1][Pos]) == 0)
- {
- //Free pos
- TempG[0][Pos] = 1;//Try this move
- GameTicTacToe_IsSolved(TempG, &ComputerWon, &PlayerWon);
- if(ComputerWon)
- {
- G[0][Pos] = 1;//Do the move
- return;
- }
- TempG[0][Pos] = 0;//Undo the try
- }
- }
-
- //2: Check if the computer can prohibit the player to win the game with the next move
- for(Pos=0; Pos<9; Pos++)
- {
- if((G[0][Pos] + G[1][Pos]) == 0)
- {
- //Free pos
- TempG[1][Pos] = 1;//Try this move
- GameTicTacToe_IsSolved(TempG, &ComputerWon, &PlayerWon);
- if(PlayerWon)
- {
- G[0][Pos] = 1;//Do the move
- return;
- }
- TempG[1][Pos] = 0;//Undo the try
- }
- }
-
- //The following strategy is not implemented to allow the player to win:
- //3: Fork: threaten a win with two possible completions in two ways
- //4: Block Fork 1: if there is a configuration where the opponent can fork, create two in a row to force a block
- //5: Block Fork 2: if there is a configuration where the opponent can fork, block that fork
-
- //6: Try to play the centre
- if((G[0][4] + G[1][4]) == 0)
- {
- G[0][4] = 1;
- return;
- }
-
- //7: If the Player is in a corner then try to play the opposite corner
- if(((G[0][0] + G[1][0]) == 0) && (G[1][8]))
- {
- //Corner 0 is free and player is in corner 8
- G[0][0] = 1;
- return;
- }
- if(((G[0][2] + G[1][2]) == 0) && (G[1][6]))
- {
- //Corner 2 is free and player is in corner 6
- G[0][2] = 1;
- return;
- }
- if(((G[0][6] + G[1][6]) == 0) && (G[1][2]))
- {
- //Corner 6 is free and player is in corner 2
- G[0][6] = 1;
- return;
- }
- if(((G[0][8] + G[1][8]) == 0) && (G[1][0]))
- {
- //Corner 8 is free and player is in corner 0
- G[0][8] = 1;
- return;
- }
-
- //8: Try to play an free corner
- Pos = 0;
- if((G[0][Pos] + G[1][Pos]) == 0)
- {
- G[0][Pos] = 1;
- return;
- }
- Pos = 2;
- if((G[0][Pos] + G[1][Pos]) == 0)
- {
- G[0][Pos] = 1;
- return;
- }
- Pos = 6;
- if((G[0][Pos] + G[1][Pos]) == 0)
- {
- G[0][Pos] = 1;
- return;
- }
- Pos = 8;
- if((G[0][Pos] + G[1][Pos]) == 0)
- {
- G[0][Pos] = 1;
- return;
- }
-
- //9: Play on a free pos
- for(Pos=0; Pos<9; Pos++)
- {
- if((G[0][Pos] + G[1][Pos]) == 0)
- {
- //Free pos
- G[0][Pos] = 1;//Do the move
- return;
- }
- }
-}
-
-BOOL GameTicTacToe_IsSolved(BYTE G[2][9], BOOL *pComputerWon, BOOL *pPlayerWon)
-{
- //Return true=GameIsSolved
- int k;
- BYTE Result[2];
-
- *pComputerWon = false;
- *pPlayerWon = false;
-
- //Is solved?
- Result[0] = 0;
- Result[1] = 0;
- for(k=0; k<2; k++)
- {
- Result[k] |= 1 << (G[k][0] + G[k][1] + G[k][2]);//Row 1
- Result[k] |= 1 << (G[k][3] + G[k][4] + G[k][5]);//Row 2
- Result[k] |= 1 << (G[k][6] + G[k][7] + G[k][8]);//Row 3
-
- Result[k] |= 1 << (G[k][0] + G[k][3] + G[k][6]);//Column 1
- Result[k] |= 1 << (G[k][1] + G[k][4] + G[k][7]);//Column 2
- Result[k] |= 1 << (G[k][2] + G[k][5] + G[k][8]);//Column 3
-
- Result[k] |= 1 << (G[k][0] + G[k][4] + G[k][8]);//Diagonal
- Result[k] |= 1 << (G[k][2] + G[k][4] + G[k][6]);//Diagonal
- }
-
- if(Result[0] & (1 << 3))
- {
- *pComputerWon = true;
- return true;//Solved
- }
- if(Result[1] & (1 << 3))
- {
- *pPlayerWon = true;
- return true;//Solved
- }
-
- return false;//Not solved
-}
-
-void GameTicTacToe_DrawGameField(BYTE G[2][9])
-{
- int Pos;
- int x;
- int y;
- BYTE Color;
- BYTE Mode;
-
- Color = LCD_COLOR_B;
- Mode = DRAW_PUT;
-
- for(Pos=0; Pos<9; Pos++)
- {
-
-// x = Pos % 3;
-// y = Pos / 3;
- y = 0;
- x = Pos;
- while(x >= 3)
- {
- x -= 3;
- y++;
- }
-
- if(G[0][Pos])
- {
- //Computer (O)
- draw_disc(16+14 + (x*33), 16+14 + (y*33), 11, Color, Mode);
- draw_disc(16+14 + (x*33), 16+14 + (y*33), 8, Color, DRAW_XOR);
-
- }
- else
- {
- if(G[1][Pos])
- {
- //Player (X)
-draw_line(16+3 + (x*33), 16+3 + (y*33)+2, 16+3 + (x*33) + 23-2, 16+3 + (y*33) + 23, Color, Mode);
-draw_line(16+3 + (x*33), 16+3 + (y*33)+1, 16+3 + (x*33) + 23-1, 16+3 + (y*33) + 23, Color, Mode);
-draw_line(16+3 + (x*33), 16+3 + (y*33), 16+3 + (x*33) + 23, 16+3 + (y*33) + 23, Color, Mode);
-draw_line(16+3 + (x*33)+1, 16+3 + (y*33), 16+3 + (x*33) + 23, 16+3 + (y*33) + 23-1, Color, Mode);
-draw_line(16+3 + (x*33)+2, 16+3 + (y*33), 16+3 + (x*33) + 23, 16+3 + (y*33) + 23-2, Color, Mode);
-
-
-draw_line(16+3-1+(x*33)+2, 16+3+(y*33)+23+1, 16+3+(x*33)+23, 16+3 + (y*33)+2, Color, Mode);
-draw_line(16+3-1+(x*33)+1, 16+3+(y*33)+23+1, 16+3+(x*33)+23, 16+3 + (y*33)+1, Color, Mode);
-draw_line(16+3-1+(x*33), 16+3+(y*33)+23+1, 16+3+(x*33)+23, 16+3 + (y*33), Color, Mode);
-draw_line(16+3-1+(x*33), 16+3+(y*33)+23+1-1, 16+3+(x*33)+23-1, 16+3 + (y*33), Color, Mode);
-draw_line(16+3-1+(x*33), 16+3+(y*33)+23+1-2, 16+3+(x*33)+23-2, 16+3 + (y*33), Color, Mode);
-
- }
- }
- }
-}
-
-
diff --git a/boop/games/tic_tac_toe.h b/boop/games/tic_tac_toe.h
deleted file mode 100644
index 1d57f18..0000000
--- a/boop/games/tic_tac_toe.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- tic_tac_toe.h - game
- Copyright (C) 2007 Colibri
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef TIC_TAC_TOE_H
-#define TIC_TAC_TOE_H
-
-#include "../global.h"
-
-void GameTicTacToe(void);
-void GameTicTacToe_DrawGameField(BYTE G[2][9]);
-void GameTicTacToe_ComputerMove(BYTE G[2][9]);
-BOOL GameTicTacToe_IsSolved(BYTE G[2][9], BOOL *pComputerWon, BOOL *pPlayerWon);
-
-#endif
diff --git a/boop/global.c b/boop/global.c
index 7b218db..e9394c5 100644
--- a/boop/global.c
+++ b/boop/global.c
@@ -17,11 +17,6 @@
*/
#include "lpc2220.h"
-#include "rf.h"
-#include "global.h"
-
-#define debugbuffersize 50
-unsigned char debugoutbuf [debugbuffersize];
void *memcpy(void *dest,void *src,int count)
{
@@ -44,88 +39,8 @@ int memcmp(const void * cs,const void * ct,int count)
return res;
}
-unsigned char GetHWversion (void)
-{
+unsigned char GetHWversion(void) {
if(((IOPIN2 >> 28) & 3) == 3)
return(((((IOPIN0 >> 5) & 1) << 4) | (((IOPIN2 >> 30) & 1) << 3) | (((IOPIN2 >> 16) & 1) << 2) | 3));
return(((IOPIN2 >> 27) & 2) + ((IOPIN2 >> 29) & 1) + (((IOPIN1 >> 23) & 7) << 2));
}
-
-int puts (const char* string)
-{
- struct RFendpoint_* cur_ep;
- volatile unsigned char i;
-
- cur_ep = openEP(debugoutbuf,0, packet_test);
-
- if (cur_ep)
- {
- for (i=0; (ibuffer[i] = string[i];
- }
-
- cur_ep->buffer[i] = 0;
- cur_ep->bufferlen = i+1;
- cur_ep->flags |= EPenabled | EPoutput | EPnewdata;
-
-
- RF_changestate(RFtx);
- // wait until all date are sent
- while(cur_ep->flags & EPnewdata);
- closeEP(cur_ep);
- }
- return 1;
-}
-
-/*
- * The width of the CRC calculation and result.
- * Modify the typedef for a 16 or 32-bit CRC standard.
- */
-
-#define CRC_POLYNOMIAL 0x8005
-#define CRC_WIDTH (8 * sizeof(crc))
-#define CRC_TOPBIT (1 << (CRC_WIDTH - 1))
-
-crc CRCs(char* message)
-{
- crc remainder = 0;
- int byte;
- unsigned char bit;
-
- /*
- * Perform modulo-2 division, a byte at a time.
- */
- for (byte = 0; message[byte]; ++byte)
- {
- /*
- * Bring the next byte into the remainder.
- */
- remainder ^= (message[byte] << (CRC_WIDTH - 8));
-
- /*
- * Perform modulo-2 division, a bit at a time.
- */
- for (bit = 8; bit > 0; --bit)
- {
- /*
- * Try to divide the current data bit.
- */
- if (remainder & CRC_TOPBIT)
- {
- remainder = (remainder << 1) ^ CRC_POLYNOMIAL;
- }
- else
- {
- remainder = (remainder << 1);
- }
- }
- }
-
- /*
- * The final remainder is the CRC result.
- */
- return (remainder);
-
-} /* crcSlow() */
-
diff --git a/boop/global.h b/boop/global.h
index 665747c..4215ebe 100644
--- a/boop/global.h
+++ b/boop/global.h
@@ -22,11 +22,6 @@
//Uncomment if you want compile with demo sound
//#define WITH_SOUND
-// Set appropriate feature flags
-#define FF_UART_REDIRECT 1
-#define FF_LARGE_IDLE_CLOCK 0
-#define FF_LARGE_MENU 1
-#define FF_ICON_TRANSPARENT 1 // enable 3 BitPerPixel icons support
typedef unsigned char BOOL;
typedef unsigned char BYTE;
@@ -36,59 +31,27 @@ typedef unsigned long DWORD;
#define false 0
#define true 1
-#ifndef NULL
#define NULL 0
-#endif
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
-#ifndef _BV
-#define _BV(bit) (1 << (bit))
-#endif
-
-#define NUM_OF_ELEMENTS(x) sizeof(x)/sizeof(x[0])
-
#define SPEED_30 0
#define SPEED_60 1
-// Execute code in locked sequence
-#define INT_LOCK(x) {unsigned cpsr = disableIRQ (); {x;} restoreIRQ (cpsr);}
-
-/** Let the LPC2200 sleep until the next IRQ
-*
-* This function tries to enter the sleep mode and stays
-* there until the next interrupt wakes up the CPU.
-* If that is not possible, the function returns immediately.
-*/
-extern void cpu_idle (void);
-
-#define SYS_NOIDLE 0x08 // No Idle Mode
-#define SYS_NOPDOWN 0x10 // No Power Down
#define SYS_IR 0x20
#define SYS_KEY 0x40
#define SYS_TURBO 0x80
-#include
-#define printd(...) printf(__VA_ARGS__)
-#define debugbuffersize 50
-extern unsigned char debugoutbuf [debugbuffersize];
-
#ifndef __MAIN_C__
extern char sysInfo;
#endif /* __MAIN_C__ */
-extern unsigned char debugoutbuf [];
-
#define PCON_IDLE 0x01
#define PCON_PDOWN 0x02
-typedef unsigned short crc;
-
void *memcpy(void *dest,void *src,int count);
int memcmp(const void * cs,const void * ct,int count);
unsigned char GetHWversion(void);
-int puts(const char* string);
-crc CRCs(char* message);
#endif
diff --git a/boop/gui/Cross_2bpp.bmp b/boop/gui/Cross_2bpp.bmp
deleted file mode 100644
index 96e496c..0000000
Binary files a/boop/gui/Cross_2bpp.bmp and /dev/null differ
diff --git a/boop/gui/Cross_t_3bpp_t.bmp b/boop/gui/Cross_t_3bpp_t.bmp
deleted file mode 100644
index 7a8bffe..0000000
Binary files a/boop/gui/Cross_t_3bpp_t.bmp and /dev/null differ
diff --git a/boop/gui/FF_2bpp.bmp b/boop/gui/FF_2bpp.bmp
deleted file mode 100644
index 2e9ebcd..0000000
Binary files a/boop/gui/FF_2bpp.bmp and /dev/null differ
diff --git a/boop/gui/FR_2bpp.bmp b/boop/gui/FR_2bpp.bmp
deleted file mode 100644
index d088a47..0000000
Binary files a/boop/gui/FR_2bpp.bmp and /dev/null differ
diff --git a/boop/gui/Leo_Gray_128_2bpp.bmp b/boop/gui/Leo_Gray_128_2bpp.bmp
deleted file mode 100644
index 5dd731f..0000000
Binary files a/boop/gui/Leo_Gray_128_2bpp.bmp and /dev/null differ
diff --git a/boop/gui/Make.conf b/boop/gui/Make.conf
deleted file mode 100644
index 3bee914..0000000
--- a/boop/gui/Make.conf
+++ /dev/null
@@ -1 +0,0 @@
-THUMBSRCS := menu.c mainmenu.c testmenu.c settingsmenu.c controls.c
diff --git a/boop/gui/Pause_2bpp.bmp b/boop/gui/Pause_2bpp.bmp
deleted file mode 100644
index e6d9fd1..0000000
Binary files a/boop/gui/Pause_2bpp.bmp and /dev/null differ
diff --git a/boop/gui/Play_2bpp.bmp b/boop/gui/Play_2bpp.bmp
deleted file mode 100644
index 04a5dd2..0000000
Binary files a/boop/gui/Play_2bpp.bmp and /dev/null differ
diff --git a/boop/gui/Stop_2bpp.bmp b/boop/gui/Stop_2bpp.bmp
deleted file mode 100644
index 8661f98..0000000
Binary files a/boop/gui/Stop_2bpp.bmp and /dev/null differ
diff --git a/boop/gui/controls.c b/boop/gui/controls.c
deleted file mode 100644
index 539d859..0000000
--- a/boop/gui/controls.c
+++ /dev/null
@@ -1,1017 +0,0 @@
-/*
- controls.c - GUI controls
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "rtc.h"
-#include "controls.h"
-#include "lcd.h"
-#include "fonty.h"
-#include "global.h"
-#include "lpc2220.h"
-#include "keyboard.h"
-#include "backlight.h"
-#include "timerfuncs.h"
-
-#define Cursor_timeout 150
-
-FORM* currentform = 0;
-
-const char string_yes[] = "JA";
-const char string_no[] = "NEIN";
-const char string_ok[] = "OK";
-
-const char TXTKey1[] = ".,-+_1@*;:'&";
-const char TXTKey2[] = "abc2ABC";
-const char TXTKey3[] = "def3DEF";
-const char TXTKey4[] = "ghi4GHI";
-const char TXTKey5[] = "jkl5JKL";
-const char TXTKey6[] = "mno6MNO";
-const char TXTKey7[] = "pqrs7PQRS";
-const char TXTKey8[] = "tuv8TUV";
-const char TXTKey9[] = "wxyz9WXYZ";
-const char TXTKey0[] = " 0";
-
-const char* const TXTKeys[10] = {TXTKey1,TXTKey2,TXTKey3,TXTKey4,TXTKey5,TXTKey6,TXTKey7,TXTKey8,TXTKey9,TXTKey0};
-
-unsigned char msgbox (unsigned char y,unsigned short flags, char *st)
-{
- unsigned short textwidth;
- unsigned short textheight;
- unsigned char width;
- unsigned char height;
- unsigned char left;
- unsigned char x;
- unsigned char sel;
-
- struct bt_
- {
- unsigned char cnt;
- unsigned char left[3];
- unsigned char top;
- unsigned char ret[3];
- char* text[3];
- unsigned char textHeight;
- } button;
-
- textwidth = get_stringwidth(st);
- textheight = get_stringheight(st);
-
- if(textwidth > 120)
- width = 124;
- else if(textwidth < 54)
- width = 60;
- else
- width = (textwidth | 0x01) + 6;
-
- button.textHeight = get_stringheight (string_yes);
- if ((flags & 0x03) == BC_YesNo)
- {
- button.cnt = 2;
- button.left[0] = 38;
- button.ret[0]=BC_Yes;
- button.text[0] = (char*)string_yes;
- button.left[1] = 65;
- button.ret[1]=BC_No;
- button.text[1] = (char*)string_no;
- button.top = y + textheight +5;
- }
- else if ((flags & 0x03) == BC_nobuttons)
- {
- button.cnt = 0;
- button.top = 0;
- }
- else
- {
- button.cnt = 1;
- button.left[0] = 51;
- button.ret[0]=BC_OK;
- button.text[0] = (char*)string_ok;
- button.top = y + textheight +5;
-
- }
-
- if(button.cnt)
- height = textheight + button.textHeight + 12;
- else
- height = textheight + 6;
-
- left = (128-width)>>1;
-
- draw_block (left,y,width,height, LCD_COLOR_B, DRAW_ERASE);
- draw_rect (left,y,width,height,1, LCD_COLOR_B, DRAW_PUT);
- draw_rect (left+1,y+1,width-2,height-2,1, LCD_COLOR_DG, DRAW_PUT);
- draw_string (left+3,y+3,st, LCD_COLOR_B, DRAW_PUT);
-
- for (x=0;x>1), button.top+2,
- button.text[x], LCD_COLOR_B, DRAW_PUT);
- }
-
- sel = 0;
- if ((flags & 0x0C) == BC_DefaultButton2)
- {
- if(button.cnt>1)
- sel=1;
- }
- else if ((flags & 0x0C) == BC_DefaultButton3)
- {
- if(button.cnt>2)
- sel=2;
- }
-
- setBacklight(BL_AUTO);
- while(KEY_OK) {};
- while(!KEY_OK && button.cnt)
- {
- draw_block (button.left[sel]+1, button.top+1, 23, button.textHeight, LCD_COLOR_B, DRAW_XOR);
- waitKeyUpDown();
- draw_block (button.left[sel]+1, button.top+1, 23, button.textHeight, LCD_COLOR_B, DRAW_XOR);
- if(KEY_Left)
- {
- if(sel>0)
- sel--;
- }
- if(KEY_Right)
- {
- if(selfont);
- if(label->type & BC_Disabled)
- c=2;
- else
- c=3;
-
- if(sel) {
- draw_block (label->left,label->top,label->width,label->height, LCD_COLOR_B, DRAW_PUT);
- m=DRAW_ERASE;
- }
- else
- m=DRAW_PUT;
- draw_string(label->left+1,label->top+1,label->caption, c, m);
-
-}
-
-void button_draw (BUTTON* button, unsigned char sel)
-{
- unsigned char c;
- unsigned char cleft;
- unsigned char ctop;
-
- set_font (button->font);
- if(button->type & BC_Disabled)
- c=2;
- else
- c=3;
-
- draw_block(button->left,button->top,button->width,button->height,3,DRAW_ERASE);
- draw_rect(button->left,button->top,button->width,button->height,1,c,DRAW_PUT);
- draw_rect(button->left+1,button->top+1,button->width-2,button->height-2,1,c-1,DRAW_PUT);
-
- cleft = ((button->width - get_stringwidth(button->caption))>>1) +button->left;
- ctop = ((button->height - get_stringheight(button->caption)+1)>>1) +button->top;
-
- if (sel == 2)
- {
- draw_block (button->left+2,button->top+2,button->width-4,button->height-4, LCD_COLOR_B, DRAW_PUT);
- draw_string(cleft,ctop,button->caption, c, DRAW_ERASE);
- }
- else if (sel)
- {
- draw_block(button->left+2,button->top+2,button->width-4,button->height-4,1,DRAW_PUT);
- draw_string(cleft,ctop,button->caption, c, DRAW_PUT);
- }
- else
- draw_string(cleft,ctop,button->caption, c, DRAW_PUT);
-} // button_draw
-
-void numbox_draw(NUMBOX* numbox, unsigned char sel) {
-
- unsigned char c;
- unsigned char m;
-
- set_font (numbox->font);
- if(numbox->type & BC_Disabled)
- c=2;
- else
- c=3;
-
- if(sel) {
- draw_block (numbox->left,numbox->top,numbox->width,numbox->height, LCD_COLOR_B, DRAW_PUT);
- m=DRAW_ERASE;
- }
- else
- m=DRAW_PUT;
- draw_numU(numbox->left+1,numbox->top+1,numbox->value, 0, c, m);
-
-
-}
-
-void txtbox_draw(TXTBOX* txtbox, unsigned char sel) {
-
- unsigned char c;
- unsigned char m;
-
- set_font (txtbox->font);
- if(txtbox->type & BC_Disabled)
- c=2;
- else
- c=3;
-
- if(sel) {
- draw_block (txtbox->left,txtbox->top,txtbox->width,txtbox->height, LCD_COLOR_B, DRAW_PUT);
- m=DRAW_ERASE;
- }
- else
- m=DRAW_PUT;
- draw_string(txtbox->left+1,txtbox->top+1,txtbox->text, c, m);
-
-}
-
-void datebox_draw(DATEBOX* datebox, unsigned char sel) {
-
- unsigned char c;
- unsigned char m;
- unsigned char w1,w2;
-
- set_font (datebox->font);
- if(datebox->type & BC_Disabled)
- c=2;
- else
- c=3;
-
- if(sel) {
- draw_block (datebox->left,datebox->top,datebox->width,datebox->height, LCD_COLOR_B, DRAW_PUT);
- m=DRAW_ERASE;
- }
- else
- m=DRAW_PUT;
-
- w1 = get_stringwidth("0")+1;
- w2 = get_stringwidth(".")+1;
-
- draw_char(1+datebox->left ,datebox->top+1,days[datebox->date.weekday * 2], c, m);
- draw_char(1+datebox->left+1*w1 ,datebox->top+1,days[(datebox->date.weekday * 2) + 1], c, m);
- draw_hexC(1+datebox->left+2*w1+1*w2,datebox->top+1,datebox->date.day, c, m);
- draw_char(1+datebox->left+4*w1+1*w2,datebox->top+1,'.', c, m);
- draw_hexC(1+datebox->left+4*w1+2*w2,datebox->top+1,datebox->date.month, c, m);
- draw_char(1+datebox->left+6*w1+2*w2,datebox->top+1,'.', c, m);
- draw_hexC(1+datebox->left+6*w1+3*w2,datebox->top+1,datebox->date.year, c, m);
-
-}
-
-void timebox_draw(TIMEBOX* timebox, unsigned char sel) {
-
- unsigned char c;
- unsigned char m;
- unsigned char w1,w2;
-
- set_font (timebox->font);
- if(timebox->type & BC_Disabled)
- c=2;
- else
- c=3;
-
- if(sel) {
- draw_block (timebox->left,timebox->top,timebox->width,timebox->height, LCD_COLOR_B, DRAW_PUT);
- m=DRAW_ERASE;
- }
- else
- m=DRAW_PUT;
-
- w1 = get_stringwidth("0")+1;
- w2 = get_stringwidth(":")+1;
-
- draw_hexC(1+timebox->left ,timebox->top+1,timebox->time.hour, c, m);
- draw_char(1+timebox->left+2*w1 ,timebox->top+1,':', c, m);
- draw_hexC(1+timebox->left+2*w1+1*w2,timebox->top+1,timebox->time.minute, c, m);
- draw_char(1+timebox->left+4*w1+1*w2,timebox->top+1,':', c, m);
- draw_hexC(1+timebox->left+4*w1+2*w2,timebox->top+1,timebox->time.second, c, m);
-
-}
-
-void listbox_draw (LISTBOX* listbox, unsigned char sel)
-{
- unsigned char c;
- unsigned char m;
- unsigned char arrow = (listbox->height - 6) / 2 + 1;
-
- set_font (listbox->font);
- if(listbox->type & BC_Disabled)
- c=2;
- else
- c=3;
-
- if (sel)
- {
- draw_block (listbox->left,listbox->top,listbox->width,listbox->height,
- LCD_COLOR_B, DRAW_PUT);
- m=DRAW_ERASE;
- }
- else
- m=DRAW_PUT;
-
- if(listbox->listindex < listbox->listcount)
- draw_string(listbox->left+1,listbox->top+1,listbox->list[listbox->listindex], c, m);
- if (sel)
- {
- draw_block (listbox->left + listbox->width-((arrow+1)*2+1),listbox->top,
- (arrow+1)*2+1,listbox->height,
- LCD_COLOR_B, DRAW_PUT);
- draw_arrow (listbox->left + listbox->width-(arrow+1)*2, listbox->top + (listbox->height/2)-arrow,
- ARROW_LEFT, arrow, LCD_COLOR_B, DRAW_ERASE);
- draw_arrow (listbox->left + listbox->width-arrow-1, listbox->top + (listbox->height/2)-arrow,
- ARROW_RIGHT, arrow, LCD_COLOR_B, DRAW_ERASE);
- }
-}
-
-void control_draw (CONTROL* control, unsigned char select)
-{
- draw_block (control->left,control->top,control->width,control->height,LCD_COLOR_B,DRAW_ERASE);
- switch ((control->type) & 0x1F)
- {
- case BC_Label:
- label_draw((LABEL*)control,select);
- break;
- case BC_Button:
- button_draw((BUTTON*)control,select);
- break;
- case BC_Numbox:
- numbox_draw((NUMBOX*)control,select);
- break;
- case BC_Txtbox:
- txtbox_draw((TXTBOX*)control,select);
- break;
- case BC_Datebox:
- datebox_draw((DATEBOX*)control,select);
- break;
- case BC_Timebox:
- timebox_draw((TIMEBOX*)control,select);
- break;
- case BC_Listbox:
- listbox_draw((LISTBOX*)control,select);
- break;
- }
-} // control_draw
-
-void form_draw (FORM* form)
-{
- unsigned char x;
-
- lcd_fill(0);
- set_font(BOLDFONT);
- draw_string (0, 0, form->caption, LCD_COLOR_B, DRAW_PUT);
- draw_block (0,10,128,2, LCD_COLOR_B, DRAW_PUT);
-
- if (form->footer)
- {
- set_font(SMALLFONT);
- draw_block (0,149,128,2, LCD_COLOR_B, DRAW_PUT);
- draw_string (0,152, form->footer, LCD_COLOR_B, DRAW_PUT);
- }
-
- for (x=0;xcontrolcount;x++)
- {
- control_draw(form->controls[x],(form->sel == x));
- }
-} // form_draw
-
-unsigned char get_prev_control(FORM* form) {
-
- signed short x;
- unsigned char type;
-
- for(x=form->sel-1;x>-1;x--) {
- type = (form->controls[x])->type;
- if(!(type & 0xe0))
- return x;
- }
- for(x=form->controlcount-1;x>form->sel;x--) {
- type = (form->controls[x])->type;
- if(!(type & 0xe0))
- return x;
- }
- return form->sel;
-}
-
-unsigned char get_next_control(FORM* form) {
-
- unsigned char x;
- unsigned char type;
-
- for(x=form->sel+1;xcontrolcount;x++) {
- type = (form->controls[x])->type;
- if(!(type & 0xe0))
- return x;
- }
- for(x=0;xsel;x++) {
- type = (form->controls[x])->type;
- if(!(type & 0xe0))
- return x;
- }
- return form->sel;
-}
-
-extern void cpu_idle();
-
-void waitFormKeyUp(void)
-{
- while((keys[0] != 0) || (keys[1] != 0)) {
- if(currentform->flags & BC_Timer_expired) {
- currentform->flags &= ~BC_Timer_expired;
- if(currentform->timer)
- currentform->timer(currentform);
- }
- if(currentform->flags & BC_Form_redraw) {
- form_draw(currentform);
- currentform->flags &= ~BC_Form_redraw;
- }
- }
-}
-
-void waitFormKeyDown(void)
-{
- while((keys[0] == 0) && (keys[1] == 0)) {
- if(currentform->flags & BC_Timer_expired) {
- currentform->flags &= ~BC_Timer_expired;
- if(currentform->timer)
- currentform->timer(currentform);
- }
- if(currentform->flags & BC_Form_redraw) {
- form_draw(currentform);
- currentform->flags &= ~BC_Form_redraw;
- }
- cpu_idle();
- };
- setBacklight(BL_AUTO); // pwm value
-}
-
-#define waitFormKeyUpDown() { waitFormKeyUp(); waitFormKeyDown(); }
-
-void numbox_entervalue(NUMBOX* numbox) {
-
- unsigned char digit[5];
- unsigned char len;
- unsigned char maxlen;
- unsigned char cpos;
- unsigned char width;
- unsigned char space;
- unsigned char k;
- unsigned short value;
- unsigned short x;
- unsigned char h;
-
- if((KEY_Left) || (KEY_Right)) {
- if((KEY_Left) && (numbox->value > numbox->min))
- numbox->value--;
- if((KEY_Right) && (numbox->value < numbox->max))
- numbox->value++;
- return;
- }
- set_font(numbox->font);
- width = get_stringwidth("0");
- space = get_stringwidth("00") - 2 * width;
- h=get_stringheight("0");
-
- cpos = 0;
- len = 0;
- x=numbox->max;
- for(maxlen = 1;x > 9;maxlen++)
- x /= 10;
-
- while(!(KEY_Exit || KEY_OK)) {
- k=getKeynum();
- if((k > 15) && (k < 26)) {
- digit[cpos] = k-15;
- if(digit[cpos] > 9)
- digit[cpos] = 0;
- if(len < maxlen)
- len++;
- cpos++;
- if(cpos == maxlen)
- cpos--;
- }
- if(KEY_Left) {
- if(len)
- len--;
- cpos = len;
- }
- draw_block(numbox->left,numbox->top,numbox->width,numbox->height,3,DRAW_ERASE);
- for(x=0; xleft+1)+(width+space)*x ,numbox->top+1, digit[x] + 0x30,3, DRAW_PUT);
- draw_hline ((numbox->left+1)+ (width+space)*cpos,numbox->top+h,width, LCD_COLOR_B, DRAW_PUT);
- waitFormKeyUpDown();
- }
- if((KEY_OK) && len) {
- x=1;
- value = 0;
- for(k=len;k;k--) {
- value += x*digit[k-1];
- x *=10;
- }
- if(value > numbox->max)
- numbox->value = numbox->max;
- else if(value < numbox->min)
- numbox->value = numbox->min;
- else
- numbox->value = value;
- }
- waitFormKeyUp();
-}
-
-void txtbox_entervalue(TXTBOX* txtbox) {
-
- unsigned char k;
- unsigned char kpos;
- unsigned char kold;
- unsigned char cpos;
- unsigned char x;
- unsigned char y;
- unsigned char h;
- char buffer[txtbox->maxlen];
-
- memcpy(buffer,txtbox->text,txtbox->maxlen);
-
- if(KEY_Right) {
- for(cpos=0;buffer[cpos] !=0;cpos++);
- }
- else {
- cpos = 0;
- buffer[cpos] = 0;
- }
- if(cpos == txtbox->maxlen-1)
- cpos--;
- kpos = 0;
-
- h=get_stringheight("0");
- kold = 10;
- while(!(KEY_Exit || KEY_OK)) {
- k=getKeynum();
- if((k > 15) && (k < 26)) {
- k = k-16;
- if(k != kold) {
- kpos = 0;
- if((cpos < txtbox->maxlen-2) && (buffer[cpos]))
- cpos++;
- }
- else {
- kpos++;
- if(TXTKeys[k][kpos] == 0)
- kpos = 0;
- }
- buffer[cpos] = TXTKeys[k][kpos];
- buffer[cpos+1] = 0;
- kold = k;
- }
- if(KEY_Right) {
- if((cpos < txtbox->maxlen-2) && (buffer[cpos])) {
- cpos++;
- kold = 10;
- }
- }
- if(KEY_Left) {
- if((cpos > 0) && (!buffer[cpos]))
- cpos--;
- buffer[cpos] = 0;
- }
- draw_block(txtbox->left,txtbox->top,txtbox->width,txtbox->height,3,DRAW_ERASE);
- draw_string (txtbox->left+1,txtbox->top+1,buffer, LCD_COLOR_B, DRAW_PUT);
- x=get_stringwidth(buffer);
- y=get_stringwidth(&buffer[cpos]);
- if(!y){
- y=get_stringwidth("A");
- x+=y+1;
- }
-
- draw_block(txtbox->left+x-y,txtbox->top,y+2,h+2,3,DRAW_XOR);
-
- waitKeyUp();
- if((buffer[cpos]) && (cpos < txtbox->maxlen-2)) {
- unsigned short cnt;
- cnt = Cursor_timeout;
- while(((keys[0] == 0) && (keys[1] == 0)) && --cnt) {
- wait5ms();
- }
- setBacklight(BL_AUTO);
- if(!cnt) {
- if((cpos < txtbox->maxlen-2) && (buffer[cpos]))
- cpos++;
- buffer[cpos] = 0;
- kold = 10;
- }
- }
- else
- waitFormKeyDown();
-
- }
- if(KEY_OK) {
- memcpy(txtbox->text,buffer,txtbox->maxlen);
- }
- waitFormKeyUp();
-}
-
-void datebox_entervalue(DATEBOX* datebox) {
- unsigned char cursor;
- signed char x;
- signed char v;
- char cpos[3];
- unsigned char w1, w2;
- struct date_ dateold;
- unsigned char exit = 0;
-
- if(KEY_Right)
- cursor = 2;
- else
- cursor = 0;
-
- dateold = datebox->date;
-
- w1 = get_stringwidth("0")+1;
- w2 = get_stringwidth(".")+1;
-
- cpos[0] = 2 * w1 + 1 * w2;
- cpos[1] = 4 * w1 + 2 * w2;
- cpos[2] = 6 * w1 + 3 * w2;
-
- draw_block(datebox->left,datebox->top,datebox->width,datebox->height,3,DRAW_ERASE);
- datebox_draw(datebox,0);
- draw_block(datebox->left+ cpos[cursor],datebox->top,2*w1+1,datebox->height,3,DRAW_XOR);
-
- while(!(KEY_Exit | KEY_OK)) {
-
- if(KEY_Left || KEY_Right) {
- cursor += 3;
- if (KEY_Left)
- cursor--;
- else
- cursor++;
- cursor %= 3;
- }
-
- x = getNumKeyValue();
- if (x >= 0) {
- v= x<<4;
- draw_block(datebox->left+cpos[cursor],datebox->top,2*w1+1,datebox->height,3,DRAW_ERASE);
- draw_char(datebox->left+1+cpos[cursor],datebox->top+1, x + 0x30,3, DRAW_PUT);
- draw_char(datebox->left+w1+1+cpos[cursor],datebox->top+1, '_',3, DRAW_PUT);
- waitKeyUpDown();
- x = getNumKeyValue();
- if (x >= 0) {
- v |= x;
- switch (cursor++) {
- case 0:
- datebox->date.day = checkBCD(v,31,1);
- break;
- case 1:
- datebox->date.month = checkBCD(v,12,1);
- break;
- case 2:
- datebox->date.year = checkBCD(v,99,0);
- exit++;
- break;
- }
- cursor %= 3;
- }
- }
-
- if(KEY_Down || KEY_Up) {
- if (KEY_Up)
- x=1;
- else
- x=-1;
- switch (cursor) {
- case 0:
- calcBCD((unsigned char*)&datebox->date.day, x, 31, 1);
- break;
- case 1:
- calcBCD((unsigned char*)&datebox->date.month, x, 12, 1);
- break;
- case 2:
- calcBCD((unsigned char*)&datebox->date.year, x, 99, 0);
- break;
- }
- }
- calcweekday(&datebox->date);
-
- draw_block(datebox->left,datebox->top,datebox->width,datebox->height,3,DRAW_ERASE);
- datebox_draw(datebox,0);
- draw_block(datebox->left+ cpos[cursor],datebox->top,2*w1+1,datebox->height,3,DRAW_XOR);
-
- if(exit)
- break;
-
- waitFormKeyUpDown();
- }
-
- if (KEY_OK | exit) {
- switch (datebox->date.month) {
- case 0x02:
- x = (((datebox->date.year & 0xf0)>>4) * 10 + (datebox->date.year & 0x0f)) & 0x03;
- if (x && (datebox->date.day > 0x28))
- datebox->date.day = 0x28;
- else if (!x && (datebox->date.day > 0x29))
- datebox->date.day = 0x29;
- break;
- case 0x04:
- case 0x06:
- case 0x09:
- case 0x11:
- if (datebox->date.day > 0x30)
- datebox->date.day = 0x30;
- }
- calcweekday(&datebox->date);
- }
- else
- datebox->date = dateold;
-
- waitFormKeyUp();
-}
-
-void timebox_entervalue(TIMEBOX* timebox) {
- unsigned char cursor;
- signed char x;
- signed char v;
- char cpos[3];
- unsigned char w1, w2;
- struct time_ timeold;
- unsigned char exit = 0;
-
- if(KEY_Right)
- cursor = 2;
- else
- cursor = 0;
-
- timeold = timebox->time;
-
- w1 = get_stringwidth("0")+1;
- w2 = get_stringwidth(":")+1;
-
- cpos[0] = 0;
- cpos[1] = 2 * w1 + 1 * w2;
- cpos[2] = 4 * w1 + 2 * w2;
-
- draw_block(timebox->left,timebox->top,timebox->width,timebox->height,3,DRAW_ERASE);
- timebox_draw(timebox,0);
- draw_block(timebox->left+ cpos[cursor],timebox->top,2*w1+1,timebox->height,3,DRAW_XOR);
-
- while(!(KEY_Exit | KEY_OK)) {
-
- if(KEY_Left || KEY_Right) {
- cursor += 3;
- if (KEY_Left)
- cursor--;
- else
- cursor++;
- cursor %= 3;
- }
-
- x = getNumKeyValue();
- if (x >= 0) {
- v= x<<4;
- draw_block(timebox->left+cpos[cursor],timebox->top,2*w1+1,timebox->height,3,DRAW_ERASE);
- draw_char(timebox->left+1+cpos[cursor],timebox->top+1, x + 0x30,3, DRAW_PUT);
- draw_char(timebox->left+w1+1+cpos[cursor],timebox->top+1, '_',3, DRAW_PUT);
- waitKeyUpDown();
- x = getNumKeyValue();
- if (x >= 0) {
- v |= x;
- switch (cursor++) {
- case 0:
- timebox->time.hour = checkBCD(v,23,0);
- break;
- case 1:
- timebox->time.minute = checkBCD(v,59,0);
- break;
- case 2:
- timebox->time.second = checkBCD(v,59,0);
- exit++;
- break;
- }
- cursor %= 3;
- }
- }
-
- if(KEY_Down || KEY_Up) {
- if (KEY_Up)
- x=1;
- else
- x=-1;
- switch (cursor) {
- case 0:
- calcBCD((unsigned char*)&timebox->time.hour, x, 23, 0);
- break;
- case 1:
- calcBCD((unsigned char*)&timebox->time.minute, x, 59, 0);
- break;
- case 2:
- calcBCD((unsigned char*)&timebox->time.second, x, 59, 0);
- break;
- }
- }
-
- draw_block(timebox->left,timebox->top,timebox->width,timebox->height,3,DRAW_ERASE);
- timebox_draw(timebox,0);
- draw_block(timebox->left+ cpos[cursor],timebox->top,2*w1+1,timebox->height,3,DRAW_XOR);
-
-
- if(exit)
- break;
-
- waitFormKeyUpDown();
- }
-
- if (KEY_Exit)
- timebox->time = timeold;
-
- waitFormKeyUp();
-}
-
-void listbox_changevalue (LISTBOX* listbox)
-{
- if((KEY_Left) && listbox->listindex)
- listbox->listindex--;
- if((KEY_Right) && listbox->listindex < listbox->listcount - 1)
- listbox->listindex++;
-}
-
-void control_onkey(FORM* form, CONTROL* control) {
- unsigned short x;
-
- if (KEY_OK)
- {
- switch ((control->type) & 0x1F) {
- case BC_Label:
- case BC_Txtbox:
- case BC_Numbox:
- case BC_Datebox:
- case BC_Timebox:
- case BC_Listbox:
- if (control->ONclick)
- control->ONclick(form,control);
- waitFormKeyUp();
- break;
- case BC_Button:
- x=form->sel;
- button_draw((BUTTON*)control,2);
- if (control->ONclick)
- control->ONclick(form,control);
- waitFormKeyUp();
- if(x==form->sel)
- x=1;
- else
- x=0;
- button_draw((BUTTON*)control,x);
- break;
- }
- return;
- }
- switch ((control->type) & 0x1F) {
- case BC_Label:
- case BC_Button:
- break;
- case BC_Numbox:
- {
- NUMBOX* numbox = (NUMBOX*)control;
- x=numbox->value;
- if(((getKeynum() > 15) && (getKeynum() < 26)) || (KEY_Left) || (KEY_Right))
- numbox_entervalue(numbox);
- if((x!=numbox->value) && (numbox->ONchange))
- numbox->ONchange(form,control);
- }
- break;
- case BC_Txtbox:
- {
- TXTBOX* txtbox = (TXTBOX*)control;
- crc oldtext = CRCs(txtbox->text);
- if(((getKeynum() > 15) && (getKeynum() < 26)) | KEY_Right)
- txtbox_entervalue(txtbox);
- if((oldtext != CRCs(txtbox->text)) && (txtbox->ONchange))
- txtbox->ONchange(form,control);
- }
- break;
- case BC_Datebox:
- {
- DATEBOX* datebox = (DATEBOX*)control;
- struct date_ olddate = datebox->date;
- if(((getKeynum() > 15) && (getKeynum() < 26)) | KEY_Right)
- datebox_entervalue(datebox);
- if(memcmp(&olddate,&datebox->date,4) && (datebox->ONchange))
- datebox->ONchange(form,control);
- }
- break;
- case BC_Timebox:
- {
- TIMEBOX* timebox = (TIMEBOX*)control;
- struct time_ oldtime = timebox->time;
- if(((getKeynum() > 15) && (getKeynum() < 26)) | KEY_Right)
- timebox_entervalue(timebox);
- if(memcmp(&oldtime,&timebox->time,4) && (timebox->ONchange))
- timebox->ONchange(form,control);
- }
- break;
- case BC_Listbox:
- {
- LISTBOX* listbox = (LISTBOX*)control;
- unsigned char oldvalue = listbox->listindex;
- if(KEY_Left | KEY_Right)
- listbox_changevalue((LISTBOX*) control);
- if((oldvalue!=listbox->listindex) && (listbox->ONchange))
- listbox->ONchange(form,control);
- }
- break;
- }
- control_draw(control,1);
-}
-
-void form_ontimer(unsigned int cb) {
- currentform->flags |= BC_Timer_expired;
- //currentform->timer(currentform);
-}
-
-
-
-// displays a form and passes input to form element handlers
-void form_exec(FORM* form) {
-
- unsigned char x;
- FORM* oldform;
- unsigned int form_cb = 0xff;
-
- oldform = currentform;
- currentform = form;
-
- if(form->load)
- form->load(form);
-
- if(form->controls[form->sel]->type & BC_NoTabStop) {
- x = get_next_control(form);
- form->sel = x;
- }
-
- form_draw(form);
-
- if(form->timer) {
- form_cb = addTimerCB(form_ontimer, form->intervall);
- startCB(form_cb);
- sysInfo |= SYS_NOPDOWN;
- }
-
- while(KEY_Exit) {};
- while((!KEY_Exit) && (!(form->flags & BC_Form_exit)))
- {
- waitFormKeyUpDown();
-
- if(KEY_Up | KEY_Down) {
- if(KEY_Up)
- x = get_prev_control(form);
- else
- x = get_next_control(form);
- control_draw(form->controls[form->sel],0);
- form->sel = x;
- control_draw(form->controls[form->sel],1);
- }
- else
- control_onkey(form,form->controls[form->sel]);
- }
-
- if(form_cb != 0xff) {
- sysInfo &= ~SYS_NOPDOWN;
- stopCB(form_cb);
- removeTimerCB(form_cb);
- }
-
- if(form->close)
- form->close(form);
-
- currentform = oldform;
-
- while(KEY_Exit);
-}
diff --git a/boop/gui/controls.h b/boop/gui/controls.h
deleted file mode 100644
index a13a70a..0000000
--- a/boop/gui/controls.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- controls.h - GUI controls
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef CONTROLS_H
-#define CONTROLS_H
-
-#include "rtc.h"
-
-#define BC_OKOnly 0
-#define BC_YesNo 1
-#define BC_nobuttons 2
-#define BC_DefaultButton1 0
-#define BC_DefaultButton2 4
-#define BC_DefaultButton3 8
-
-#define BC_OK 1
-#define BC_Yes 2
-#define BC_No 3
-
-#define BC_NoTabStop 0x80
-#define BC_Disabled 0x40
-
-#define BC_Label 1
-#define BC_Labelnotab (BC_Label | BC_NoTabStop)
-#define BC_Button 2
-#define BC_Numbox 3
-#define BC_Txtbox 4
-#define BC_Datebox 5
-#define BC_Timebox 6
-#define BC_Listbox 7
-
-extern struct FORM dummyform;
-extern struct CONTROL dummycontrol;
-
-typedef void(*event)(struct FORM* form, struct CONTROL* control);
-typedef void(*fevent)(struct FORM* form);
-
-typedef struct CONTROL
-{
- unsigned char type;
- unsigned char left;
- unsigned char top;
- unsigned char width;
- unsigned char height;
- unsigned char font;
- unsigned char tag1;
- unsigned char tag2;
- char* caption;
- event ONclick;
- event ONchange;
-} CONTROL;
-
-typedef struct FORM
-{
- char* caption;
- char* footer;
- fevent load;
- fevent close;
- fevent timer;
- unsigned long tag;
- CONTROL* *controls;
- unsigned char sel;
- unsigned char controlcount;
- unsigned char flags;
- unsigned char intervall;
-} FORM;
-
-//form.flags
-#define BC_Form_exit (1<<0)
-#define BC_Timer_expired (1<<1)
-#define BC_Form_redraw (1<<2)
-
-typedef struct LABEL
-{
- unsigned char type;
- unsigned char left;
- unsigned char top;
- unsigned char width;
- unsigned char height;
- unsigned char font;
- unsigned short tag;
- char* caption;
- event ONclick;
-} LABEL;
-
-typedef struct BUTTON
-{
- unsigned char type;
- unsigned char left;
- unsigned char top;
- unsigned char width;
- unsigned char height;
- unsigned char font;
- unsigned short tag;
- char* caption;
- event ONclick;
-} BUTTON;
-
-typedef struct NUMBOX
-{
- unsigned char type;
- unsigned char left;
- unsigned char top;
- unsigned char width;
- unsigned char height;
- unsigned char font;
- unsigned short value;
- unsigned short min;
- unsigned short max;
- event ONclick;
- event ONchange;
-} NUMBOX;
-
-typedef struct TXTBOX
-{
- unsigned char type;
- unsigned char left;
- unsigned char top;
- unsigned char width;
- unsigned char height;
- unsigned char font;
- unsigned char maxlen;
- unsigned char tag;
- char* text;
- event ONclick;
- event ONchange;
-} TXTBOX;
-
-typedef struct DATEBOX
-{
- unsigned char type;
- unsigned char left;
- unsigned char top;
- unsigned char width;
- unsigned char height;
- unsigned char font;
- unsigned short tag;
- struct date_ date;
- event ONclick;
- event ONchange;
-} DATEBOX;
-
-typedef struct TIMEBOX
-{
- unsigned char type;
- unsigned char left;
- unsigned char top;
- unsigned char width;
- unsigned char height;
- unsigned char font;
- unsigned short tag;
- struct time_ time;
- event ONclick;
- event ONchange;
-} TIMEBOX;
-
-typedef struct LISTBOX
-{
- unsigned char type;
- unsigned char left;
- unsigned char top;
- unsigned char width;
- unsigned char height;
- unsigned char font;
- unsigned char listindex;
- unsigned char listcount;
- char* *list;
- event ONclick;
- event ONchange;
-} LISTBOX;
-
-unsigned char msgbox(unsigned char x,unsigned short flags, char *st);
-void form_draw(FORM* form);
-void control_draw(CONTROL* control, unsigned char select);
-void form_exec(FORM* form);
-
-void listbox_changevalue (LISTBOX* listbox);
-
-#endif
diff --git a/boop/gui/iconCross.h b/boop/gui/iconCross.h
deleted file mode 100644
index c93ba16..0000000
--- a/boop/gui/iconCross.h
+++ /dev/null
@@ -1,144 +0,0 @@
-////////////////////////////////////////////////////
-// This file was generated by the tool GrayScaler.
-// Source bitmap: R:\Project\GrayScaler\Icons\Cross.bmp
-//
-// ICON_GRAY - 2 bpp (Bit per Pixel)
-// sizeof (iconCross.data) == 224
-//
-////////////////////////////////////////////////////
-#include "icon.h"
-
-#ifndef ICON_INFO
-#define ICON_INFO(i) i,
-#endif
-
-
-const ICON iconCross =
-{
- /* width = */ 28,
- /* height = */ 28,
- /* info = */ ICON_INFO (ICON_GRAY)
- /* data [] = */
- {
- // Bit 0 is the upper most pixel
- // of the page, which is 8 pixel high
- //--- Page 0 ---
- 0x00, 0x00,
- 0x00, 0x00,
- 0xc0, 0x80,
- 0xe0, 0xc0,
- 0xf0, 0xf0,
- 0x38, 0x70,
- 0x1c, 0x38,
- 0x1c, 0x1c,
- 0x0c, 0x0e,
- 0x0e, 0x04,
- 0x06, 0x0c,
- 0x06, 0x06,
- 0x06, 0x06,
- 0x07, 0xff,
- 0x07, 0xff,
- 0x06, 0x06,
- 0x06, 0x06,
- 0x06, 0x04,
- 0x0e, 0x04,
- 0x0c, 0x0e,
- 0x1c, 0x1c,
- 0x1c, 0x38,
- 0x38, 0x70,
- 0xf0, 0xf0,
- 0xe0, 0xc0,
- 0xc0, 0x80,
- 0x00, 0x00,
- 0x00, 0x00,
- //--- Page 1 ---
- 0x60, 0x60,
- 0xfe, 0xf9,
- 0xff, 0xff,
- 0x03, 0x65,
- 0x00, 0x60,
- 0x00, 0x60,
- 0x00, 0x60,
- 0x00, 0x60,
- 0xf0, 0xf8,
- 0x6c, 0x94,
- 0x62, 0x9e,
- 0x62, 0x9d,
- 0x61, 0x9f,
- 0xff, 0x61,
- 0xff, 0x61,
- 0x61, 0x9f,
- 0x62, 0x9d,
- 0x62, 0x9e,
- 0x6c, 0x94,
- 0xf0, 0xf8,
- 0x00, 0x60,
- 0x00, 0x60,
- 0x00, 0x60,
- 0x00, 0x60,
- 0x03, 0x65,
- 0xff, 0xff,
- 0xfe, 0xf9,
- 0x60, 0x60,
- //--- Page 2 ---
- 0x00, 0x00,
- 0x07, 0x09,
- 0x3f, 0x1f,
- 0x7c, 0x3a,
- 0xf0, 0xf0,
- 0xc0, 0xe0,
- 0x80, 0xc0,
- 0x80, 0x80,
- 0x00, 0x01,
- 0x03, 0x02,
- 0x04, 0x07,
- 0x04, 0x0b,
- 0x08, 0x0f,
- 0x0f, 0xf8,
- 0x0f, 0xf8,
- 0x08, 0x0f,
- 0x04, 0x0b,
- 0x04, 0x07,
- 0x03, 0x02,
- 0x00, 0x01,
- 0x80, 0x80,
- 0x80, 0xc0,
- 0xc0, 0xe0,
- 0xf0, 0xf0,
- 0x7c, 0x3a,
- 0x3f, 0x1f,
- 0x07, 0x09,
- 0x00, 0x00,
- //--- Page 3 ---
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x01, 0x00,
- 0x03, 0x01,
- 0x03, 0x03,
- 0x03, 0x07,
- 0x07, 0x02,
- 0x06, 0x03,
- 0x06, 0x06,
- 0x06, 0x06,
- 0x0e, 0x0f,
- 0x0e, 0x0f,
- 0x06, 0x06,
- 0x06, 0x06,
- 0x06, 0x02,
- 0x07, 0x02,
- 0x03, 0x07,
- 0x03, 0x03,
- 0x03, 0x01,
- 0x01, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00
- }
-};
-
-
diff --git a/boop/gui/iconCross_t.h b/boop/gui/iconCross_t.h
deleted file mode 100644
index 18fd07a..0000000
--- a/boop/gui/iconCross_t.h
+++ /dev/null
@@ -1,148 +0,0 @@
-////////////////////////////////////////////////////
-// This file was generated by the tool GrayScaler.
-// Source bitmap: R:\Project\GrayScaler\Icons\Cross_t.bmp
-//
-// ICON_GRAY_TRANSPARENT - 3 bpp (Bit per Pixel)
-// sizeof (iconCross_t.data) == 336
-//
-////////////////////////////////////////////////////
-#include "icon.h"
-
-#ifndef ICON_INFO
-#define ICON_INFO(i) i,
-#endif
-
-
-const ICON iconCross_t =
-{
- /* width = */ 28,
- /* height = */ 28,
- /* info = */ ICON_INFO (ICON_GRAY_TRANSPARENT)
- /* data [] = */
- {
- // Bit 0 is the upper most pixel
- // of the page, which is 8 pixel high
- //--- Page 0 ---
- // v--- Alpha Channel
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x80, 0xc0, 0xc0,
- 0xe0, 0xc0, 0xe0,
- 0xf0, 0xf0, 0xf0,
- 0x38, 0x70, 0x78,
- 0x18, 0x3c, 0x3c,
- 0x1c, 0x1c, 0x1c,
- 0x0c, 0x0e, 0x0e,
- 0x0e, 0x04, 0x0e,
- 0x06, 0x0c, 0x0e,
- 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06,
- 0x07, 0xff, 0xff,
- 0x07, 0xff, 0xff,
- 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06,
- 0x06, 0x0c, 0x0e,
- 0x0e, 0x04, 0x0e,
- 0x0c, 0x0e, 0x0e,
- 0x1c, 0x1c, 0x1c,
- 0x18, 0x3c, 0x3c,
- 0x38, 0x70, 0x78,
- 0xf0, 0xf0, 0xf0,
- 0xe0, 0xc0, 0xe0,
- 0x80, 0xc0, 0xc0,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- //--- Page 1 ---
- // v--- Alpha Channel
- 0x60, 0x60, 0x60,
- 0xfe, 0xf9, 0xff,
- 0xff, 0xff, 0xff,
- 0x03, 0x65, 0x67,
- 0x00, 0x60, 0x60,
- 0x00, 0x60, 0x60,
- 0x00, 0x60, 0x60,
- 0x00, 0x60, 0x60,
- 0xf0, 0xf8, 0xf8,
- 0x6c, 0x94, 0xfc,
- 0x62, 0x9e, 0xfe,
- 0x62, 0x9d, 0xff,
- 0x61, 0x9f, 0xff,
- 0xff, 0x61, 0xff,
- 0xff, 0x61, 0xff,
- 0x61, 0x9f, 0xff,
- 0x62, 0x9d, 0xff,
- 0x62, 0x9e, 0xfe,
- 0x6c, 0x94, 0xfc,
- 0xf0, 0xf8, 0xf8,
- 0x00, 0x60, 0x60,
- 0x00, 0x60, 0x60,
- 0x00, 0x60, 0x60,
- 0x00, 0x60, 0x60,
- 0x03, 0x65, 0x67,
- 0xff, 0xff, 0xff,
- 0xfe, 0xf9, 0xff,
- 0x60, 0x60, 0x60,
- //--- Page 2 ---
- // v--- Alpha Channel
- 0x00, 0x00, 0x00,
- 0x07, 0x09, 0x0f,
- 0x1f, 0x3f, 0x3f,
- 0x7c, 0x3a, 0x7e,
- 0xf0, 0xf0, 0xf0,
- 0xc0, 0xe0, 0xe0,
- 0x80, 0xc0, 0xc0,
- 0x80, 0x80, 0x80,
- 0x00, 0x01, 0x01,
- 0x03, 0x02, 0x03,
- 0x04, 0x07, 0x07,
- 0x04, 0x0b, 0x0f,
- 0x08, 0x0f, 0x0f,
- 0x0f, 0xf8, 0xff,
- 0x0f, 0xf8, 0xff,
- 0x08, 0x0f, 0x0f,
- 0x04, 0x0b, 0x0f,
- 0x04, 0x07, 0x07,
- 0x03, 0x02, 0x03,
- 0x00, 0x01, 0x01,
- 0x80, 0x80, 0x80,
- 0x80, 0xc0, 0xc0,
- 0xc0, 0xe0, 0xe0,
- 0xf0, 0xf0, 0xf0,
- 0x7c, 0x3a, 0x7e,
- 0x1f, 0x3f, 0x3f,
- 0x07, 0x09, 0x0f,
- 0x00, 0x00, 0x00,
- //--- Page 3 ---
- // v--- Alpha Channel
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x01,
- 0x01, 0x03, 0x03,
- 0x03, 0x03, 0x03,
- 0x03, 0x07, 0x07,
- 0x07, 0x02, 0x07,
- 0x06, 0x03, 0x07,
- 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06,
- 0x0e, 0x0f, 0x0f,
- 0x0e, 0x0f, 0x0f,
- 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06,
- 0x06, 0x03, 0x07,
- 0x07, 0x02, 0x07,
- 0x03, 0x07, 0x07,
- 0x03, 0x03, 0x03,
- 0x01, 0x03, 0x03,
- 0x01, 0x00, 0x01,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00
- }
-};
-
-
diff --git a/boop/gui/iconFf.h b/boop/gui/iconFf.h
deleted file mode 100644
index 3787757..0000000
--- a/boop/gui/iconFf.h
+++ /dev/null
@@ -1,56 +0,0 @@
-////////////////////////////////////////////////////
-// This file was generated by the tool GrayScaler.
-// Source bitmap: R:\Project\GrayScaler\Icons\FF.bmp
-//
-// ICON_GRAY - 2 bpp (Bit per Pixel)
-// sizeof (iconFf.data) == 52
-//
-////////////////////////////////////////////////////
-#include "icon.h"
-
-#ifndef ICON_INFO
-#define ICON_INFO(i) i,
-#endif
-
-
-const ICON iconFf =
-{
- /* width = */ 13,
- /* height = */ 13,
- /* info = */ ICON_INFO (ICON_GRAY)
- /* data [] = */
- {
- // Bit 0 is the upper most pixel
- // of the page, which is 8 pixel high
- //--- Page 0 ---
- 0xfc, 0xfa,
- 0x06, 0x03,
- 0x03, 0x00,
- 0xf9, 0xf9,
- 0xf1, 0xf9,
- 0xe1, 0xf1,
- 0x41, 0xe1,
- 0xf9, 0xf9,
- 0xf1, 0xf9,
- 0xe1, 0xf1,
- 0x43, 0xe0,
- 0x06, 0x03,
- 0xfc, 0xfa,
- //--- Page 1 ---
- 0x07, 0x0b,
- 0x0c, 0x18,
- 0x18, 0x00,
- 0x13, 0x13,
- 0x11, 0x13,
- 0x10, 0x11,
- 0x10, 0x10,
- 0x13, 0x13,
- 0x11, 0x13,
- 0x10, 0x11,
- 0x10, 0x00,
- 0x08, 0x18,
- 0x07, 0x0b
- }
-};
-
-
diff --git a/boop/gui/iconFr.h b/boop/gui/iconFr.h
deleted file mode 100644
index c022efd..0000000
--- a/boop/gui/iconFr.h
+++ /dev/null
@@ -1,56 +0,0 @@
-////////////////////////////////////////////////////
-// This file was generated by the tool GrayScaler.
-// Source bitmap: R:\Project\GrayScaler\Icons\FR.bmp
-//
-// ICON_GRAY - 2 bpp (Bit per Pixel)
-// sizeof (iconFr.data) == 52
-//
-////////////////////////////////////////////////////
-#include "icon.h"
-
-#ifndef ICON_INFO
-#define ICON_INFO(i) i,
-#endif
-
-
-const ICON iconFr =
-{
- /* width = */ 13,
- /* height = */ 13,
- /* info = */ ICON_INFO (ICON_GRAY)
- /* data [] = */
- {
- // Bit 0 is the upper most pixel
- // of the page, which is 8 pixel high
- //--- Page 0 ---
- 0xfc, 0xfa,
- 0x02, 0x03,
- 0x41, 0xe0,
- 0xe1, 0xf1,
- 0xf1, 0xf9,
- 0xf9, 0xf9,
- 0x41, 0xe1,
- 0xe1, 0xf1,
- 0xf1, 0xf9,
- 0xf9, 0xf9,
- 0x03, 0x00,
- 0x06, 0x03,
- 0xfc, 0xfa,
- //--- Page 1 ---
- 0x07, 0x0b,
- 0x0c, 0x18,
- 0x18, 0x00,
- 0x10, 0x11,
- 0x11, 0x13,
- 0x13, 0x13,
- 0x10, 0x10,
- 0x10, 0x11,
- 0x11, 0x13,
- 0x13, 0x13,
- 0x18, 0x00,
- 0x0c, 0x18,
- 0x07, 0x0b
- }
-};
-
-
diff --git a/boop/gui/iconHourglas.h b/boop/gui/iconHourglas.h
deleted file mode 100644
index 6e99e15..0000000
--- a/boop/gui/iconHourglas.h
+++ /dev/null
@@ -1,173 +0,0 @@
-////////////////////////////////////////////////////
-// This file was generated by the tool GrayScaler.
-// Source bitmap: R:\Project\GrayScaler\Icons\Hourglas.bmp
-//
-// ICON_GRAY - 2 bpp (Bit per Pixel)
-// sizeof (iconHourglas.data) == 280
-//
-////////////////////////////////////////////////////
-#include "icon.h"
-
-#ifndef ICON_INFO
-#define ICON_INFO(i) i,
-#endif
-
-
-const ICON iconHourglas =
-{
- /* width = */ 28,
- /* height = */ 40,
- /* info = */ ICON_INFO (ICON_GRAY)
- /* data [] = */
- {
- // Bit 0 is the upper most pixel
- // of the page, which is 8 pixel high
- //--- Page 0 ---
- 0x0e, 0x11,
- 0x3f, 0x1e,
- 0x7f, 0x3a,
- 0xff, 0x6a,
- 0xff, 0xca,
- 0xff, 0xca,
- 0x3f, 0x0a,
- 0x3b, 0x0e,
- 0x3b, 0x0e,
- 0x3b, 0x0e,
- 0x3b, 0x0e,
- 0x3b, 0x0e,
- 0x3b, 0x0e,
- 0x3f, 0x0a,
- 0x3f, 0x0a,
- 0x3f, 0x0a,
- 0x3f, 0x0a,
- 0x3f, 0x0a,
- 0x3f, 0x0a,
- 0x3f, 0x0a,
- 0x3f, 0x0a,
- 0x3f, 0x0a,
- 0xff, 0xca,
- 0xff, 0xca,
- 0xff, 0x6a,
- 0x7f, 0x3a,
- 0x3f, 0x1e,
- 0x0e, 0x11,
- //--- Page 1 ---
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0xff,
- 0xff, 0xff,
- 0xff, 0x0f,
- 0xfe, 0xfd,
- 0x70, 0xb8,
- 0xe0, 0x70,
- 0xc0, 0xa0,
- 0x80, 0x50,
- 0x30, 0x80,
- 0xf0, 0x00,
- 0xf0, 0x00,
- 0xf0, 0x00,
- 0xf0, 0x08,
- 0x70, 0x88,
- 0xb0, 0xc8,
- 0xd8, 0x64,
- 0x78, 0xe4,
- 0x36, 0xf8,
- 0xfe, 0xfd,
- 0xff, 0x0f,
- 0xff, 0xff,
- 0x00, 0xff,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- //--- Page 2 ---
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0xff,
- 0xff, 0xff,
- 0xff, 0x00,
- 0xff, 0xff,
- 0x00, 0xff,
- 0x80, 0x80,
- 0xc1, 0xc0,
- 0x61, 0xb3,
- 0x3f, 0x12,
- 0x1c, 0x0f,
- 0x07, 0x00,
- 0x1d, 0x0e,
- 0x3f, 0x12,
- 0x63, 0xb5,
- 0xc1, 0xe2,
- 0x80, 0xc1,
- 0x00, 0x00,
- 0x00, 0xff,
- 0xff, 0xff,
- 0xff, 0x00,
- 0xff, 0xff,
- 0x00, 0xff,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- //--- Page 3 ---
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0xff,
- 0xff, 0xff,
- 0xff, 0xfc,
- 0xff, 0x0f,
- 0x07, 0x0b,
- 0x81, 0x03,
- 0xc0, 0x01,
- 0xc0, 0x20,
- 0xe0, 0x10,
- 0xf0, 0x00,
- 0xf8, 0x00,
- 0xf0, 0x00,
- 0xe0, 0x10,
- 0xc0, 0x20,
- 0xc0, 0x01,
- 0x81, 0x03,
- 0x03, 0x87,
- 0x0e, 0x17,
- 0xff, 0x1f,
- 0xff, 0xf8,
- 0xff, 0xff,
- 0x00, 0xff,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- //--- Page 4 ---
- 0x70, 0x88,
- 0xfc, 0x78,
- 0xfe, 0x7c,
- 0xff, 0x76,
- 0xff, 0x77,
- 0xff, 0x77,
- 0xff, 0x74,
- 0xfe, 0x75,
- 0xff, 0x74,
- 0xff, 0x74,
- 0xf7, 0x7c,
- 0xf7, 0x7c,
- 0xf7, 0x7c,
- 0xf7, 0x7c,
- 0xf7, 0x7c,
- 0xff, 0x74,
- 0xff, 0x74,
- 0xff, 0x74,
- 0xff, 0x74,
- 0xff, 0x74,
- 0xfe, 0x75,
- 0xff, 0x74,
- 0xff, 0x77,
- 0xff, 0x77,
- 0xff, 0x76,
- 0xfe, 0x7c,
- 0xfc, 0x78,
- 0x70, 0x88
- }
-};
-
-
diff --git a/boop/gui/iconHourglas_t.h b/boop/gui/iconHourglas_t.h
deleted file mode 100644
index d46a555..0000000
--- a/boop/gui/iconHourglas_t.h
+++ /dev/null
@@ -1,178 +0,0 @@
-////////////////////////////////////////////////////
-// This file was generated by the tool GrayScaler.
-// Source bitmap: R:\Project\GrayScaler\Icons\Hourglas_t.bmp
-//
-// ICON_GRAY_TRANSPARENT - 3 bpp (Bit per Pixel)
-// sizeof (iconHourglas_t.data) == 420
-//
-////////////////////////////////////////////////////
-#include "icon.h"
-
-#ifndef ICON_INFO
-#define ICON_INFO(i) i,
-#endif
-
-
-const ICON iconHourglas_t =
-{
- /* width = */ 28,
- /* height = */ 40,
- /* info = */ ICON_INFO (ICON_GRAY_TRANSPARENT)
- /* data [] = */
- {
- // Bit 0 is the upper most pixel
- // of the page, which is 8 pixel high
- //--- Page 0 ---
- // v--- Alpha Channel
- 0x0e, 0x11, 0x1f,
- 0x3f, 0x1e, 0x3f,
- 0x7f, 0x3a, 0x7f,
- 0xff, 0x6a, 0xff,
- 0xff, 0xca, 0xff,
- 0xff, 0xca, 0xff,
- 0x3f, 0x0a, 0xff,
- 0x3b, 0x0e, 0xff,
- 0x3b, 0x0e, 0xff,
- 0x3b, 0x0e, 0xff,
- 0x3b, 0x0e, 0xff,
- 0x3b, 0x0e, 0xff,
- 0x3b, 0x0e, 0xff,
- 0x3f, 0x0a, 0xff,
- 0x3f, 0x0a, 0xff,
- 0x3f, 0x0a, 0xff,
- 0x3f, 0x0a, 0xff,
- 0x3f, 0x0a, 0xff,
- 0x3f, 0x0a, 0xff,
- 0x3f, 0x0a, 0xff,
- 0x3f, 0x0a, 0xff,
- 0x3f, 0x0a, 0xff,
- 0xff, 0xca, 0xff,
- 0xff, 0xca, 0xff,
- 0xff, 0x6a, 0xff,
- 0x7f, 0x3a, 0x7f,
- 0x3f, 0x1e, 0x3f,
- 0x0e, 0x11, 0x1f,
- //--- Page 1 ---
- // v--- Alpha Channel
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x00, 0xff, 0xff,
- 0xff, 0xff, 0xff,
- 0xff, 0x0f, 0xff,
- 0xfe, 0xfd, 0xff,
- 0x70, 0xb8, 0xff,
- 0xe0, 0x70, 0xff,
- 0xc0, 0xa0, 0xff,
- 0x80, 0x50, 0xff,
- 0x30, 0x80, 0xff,
- 0xf0, 0x00, 0xff,
- 0xf0, 0x00, 0xff,
- 0xf0, 0x00, 0xff,
- 0xf0, 0x08, 0xff,
- 0x70, 0x88, 0xff,
- 0xb0, 0xc8, 0xff,
- 0xd8, 0x64, 0xff,
- 0x78, 0xe4, 0xff,
- 0x36, 0xf8, 0xff,
- 0xfe, 0xfd, 0xff,
- 0xff, 0x0f, 0xff,
- 0xff, 0xff, 0xff,
- 0x00, 0xff, 0xff,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- //--- Page 2 ---
- // v--- Alpha Channel
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x00, 0xff, 0xff,
- 0xff, 0xff, 0xff,
- 0xff, 0x00, 0xff,
- 0xff, 0xff, 0xff,
- 0x00, 0xff, 0xff,
- 0x80, 0x80, 0x80,
- 0xc1, 0xc0, 0xc1,
- 0x61, 0xb3, 0xf3,
- 0x3f, 0x12, 0xff,
- 0x1c, 0x0f, 0xff,
- 0x07, 0x00, 0xff,
- 0x1d, 0x0e, 0xff,
- 0x3f, 0x12, 0xff,
- 0x63, 0xb5, 0xf7,
- 0xc1, 0xe2, 0xe3,
- 0x80, 0xc1, 0xc1,
- 0x00, 0x00, 0x00,
- 0x00, 0xff, 0xff,
- 0xff, 0xff, 0xff,
- 0xff, 0x00, 0xff,
- 0xff, 0xff, 0xff,
- 0x00, 0xff, 0xff,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- //--- Page 3 ---
- // v--- Alpha Channel
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x00, 0xff, 0xff,
- 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0xff,
- 0xff, 0x0f, 0xff,
- 0x07, 0x0b, 0xff,
- 0x81, 0x03, 0xff,
- 0xc0, 0x01, 0xff,
- 0xc0, 0x20, 0xff,
- 0xe0, 0x10, 0xff,
- 0xf0, 0x00, 0xff,
- 0xf8, 0x00, 0xff,
- 0xf0, 0x00, 0xff,
- 0xe0, 0x10, 0xff,
- 0xc0, 0x20, 0xff,
- 0xc0, 0x01, 0xff,
- 0x81, 0x03, 0xff,
- 0x03, 0x87, 0xff,
- 0x0e, 0x17, 0xff,
- 0xff, 0x1f, 0xff,
- 0xff, 0xf8, 0xff,
- 0xff, 0xff, 0xff,
- 0x00, 0xff, 0xff,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00,
- //--- Page 4 ---
- // v--- Alpha Channel
- 0x70, 0x88, 0xf8,
- 0xfc, 0x78, 0xfc,
- 0xfe, 0x7c, 0xfe,
- 0xff, 0x76, 0xff,
- 0xff, 0x77, 0xff,
- 0xff, 0x77, 0xff,
- 0xff, 0x74, 0xff,
- 0xfe, 0x75, 0xff,
- 0xff, 0x74, 0xff,
- 0xff, 0x74, 0xff,
- 0xf7, 0x7c, 0xff,
- 0xf7, 0x7c, 0xff,
- 0xf7, 0x7c, 0xff,
- 0xf7, 0x7c, 0xff,
- 0xf7, 0x7c, 0xff,
- 0xff, 0x74, 0xff,
- 0xff, 0x74, 0xff,
- 0xff, 0x74, 0xff,
- 0xff, 0x74, 0xff,
- 0xff, 0x74, 0xff,
- 0xfe, 0x75, 0xff,
- 0xff, 0x74, 0xff,
- 0xff, 0x77, 0xff,
- 0xff, 0x77, 0xff,
- 0xff, 0x76, 0xff,
- 0xfe, 0x7c, 0xfe,
- 0xfc, 0x78, 0xfc,
- 0x70, 0x88, 0xf8
- }
-};
-
-
diff --git a/boop/gui/iconLeo_gray_128.h b/boop/gui/iconLeo_gray_128.h
deleted file mode 100644
index 858328c..0000000
--- a/boop/gui/iconLeo_gray_128.h
+++ /dev/null
@@ -1,1189 +0,0 @@
-////////////////////////////////////////////////////
-// This file was generated by the tool GrayScaler.
-// Source bitmap: R:\Project\GrayScaler\Icons\Leo_Gray_128.bmp
-//
-// ICON_GRAY - 2 bpp (Bit per Pixel)
-// sizeof (iconLeo_gray_128.data) == 2304
-//
-////////////////////////////////////////////////////
-#include "icon.h"
-
-#ifndef ICON_INFO
-#define ICON_INFO(i) i,
-#endif
-
-
-const ICON iconLeo_gray_128 =
-{
- /* width = */ 128,
- /* height = */ 65,
- /* info = */ ICON_INFO (ICON_GRAY)
- /* data [] = */
- {
- // Bit 0 is the upper most pixel
- // of the page, which is 8 pixel high
- //--- Page 0 ---
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x38,
- 0x78, 0x9c,
- 0x64, 0xf2,
- 0xc2, 0x80,
- 0x02, 0xc3,
- 0x02, 0xc3,
- 0x02, 0xe3,
- 0x02, 0xe3,
- 0x02, 0xe3,
- 0x02, 0xe2,
- 0x02, 0xe0,
- 0x02, 0xf0,
- 0x02, 0xf4,
- 0x02, 0xf4,
- 0x04, 0xf2,
- 0x04, 0xf6,
- 0x04, 0xf6,
- 0x04, 0xf6,
- 0x04, 0xf2,
- 0x10, 0xe4,
- 0x10, 0xec,
- 0xb8, 0x54,
- 0xf8, 0x20,
- 0xf0, 0x28,
- 0xe0, 0x30,
- 0xc0, 0xe0,
- 0x00, 0xc0,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- //--- Page 1 ---
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x01,
- 0xf7, 0xe8,
- 0xff, 0x0f,
- 0x00, 0xff,
- 0x00, 0xff,
- 0x00, 0xff,
- 0x00, 0xff,
- 0x00, 0xff,
- 0x80, 0x7f,
- 0x80, 0x7f,
- 0x80, 0x7f,
- 0x80, 0x7f,
- 0x80, 0x7f,
- 0x80, 0x7f,
- 0xc0, 0x3f,
- 0xe0, 0x1f,
- 0xf0, 0x0f,
- 0xf8, 0x07,
- 0xfe, 0x01,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0xe0,
- 0x3f, 0xfe,
- 0x03, 0x07,
- 0x01, 0x02,
- 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,
- //--- Page 2 ---
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0xe0, 0xc0,
- 0xff, 0x3f,
- 0x01, 0xfe,
- 0x00, 0xff,
- 0x80, 0x7f,
- 0xe0, 0x1f,
- 0xfe, 0x01,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0xfe,
- 0x07, 0xfb,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0xc0,
- 0x00, 0x30,
- 0x00, 0x18,
- 0x00, 0x88,
- 0x00, 0x84,
- 0x04, 0x80,
- 0x00, 0xc6,
- 0x00, 0xc2,
- 0x00, 0xe2,
- 0x80, 0x62,
- 0x82, 0x6c,
- 0x06, 0xf8,
- 0x84, 0x7e,
- 0x84, 0x7e,
- 0x8c, 0xf2,
- 0x8c, 0xf8,
- 0x88, 0xfc,
- 0x08, 0xf4,
- 0x10, 0xf8,
- 0x10, 0xf8,
- 0x30, 0xd0,
- 0x30, 0xe0,
- 0xe0, 0x30,
- 0xe0, 0x40,
- 0x80, 0xc0,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0xc0,
- 0x00, 0x20,
- 0x00, 0x30,
- 0x00, 0x10,
- 0x00, 0x18,
- 0x00, 0x08,
- 0x08, 0x84,
- 0xc8, 0x84,
- 0xc8, 0x94,
- 0xc8, 0xb4,
- 0xe8, 0x9c,
- 0xc8, 0xb0,
- 0xd8, 0xa8,
- 0xd8, 0xa8,
- 0xf8, 0x88,
- 0xf8, 0x10,
- 0xf0, 0x10,
- 0xf0, 0x10,
- 0xf0, 0x30,
- 0xe0, 0x30,
- 0xe0, 0x30,
- 0xe0, 0x60,
- 0xc0, 0xe0,
- 0xc0, 0xe0,
- 0xc0, 0x80,
- 0x80, 0x80,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- //--- Page 3 ---
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0xff, 0xff,
- 0xff, 0x00,
- 0xfc, 0x03,
- 0xf8, 0x07,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x07,
- 0xfc, 0x0b,
- 0xf8, 0x0c,
- 0xe8, 0x1c,
- 0x88, 0x7c,
- 0x98, 0x68,
- 0x98, 0x70,
- 0x98, 0x70,
- 0xd8, 0x30,
- 0xf0, 0x38,
- 0xf0, 0x20,
- 0xe0, 0x30,
- 0xc0, 0xe0,
- 0xc0, 0xc0,
- 0x00, 0x80,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x30, 0x68,
- 0xfe, 0xfc,
- 0xe1, 0x1e,
- 0xe0, 0x1e,
- 0xf0, 0x0f,
- 0xf8, 0x07,
- 0xfc, 0x03,
- 0xfe, 0x01,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xff, 0x80,
- 0xff, 0x44,
- 0x7f, 0x4e,
- 0x79, 0x4d,
- 0x78, 0x4c,
- 0x7c, 0x4c,
- 0x7e, 0x45,
- 0x7f, 0x47,
- 0x7e, 0x41,
- 0x7e, 0x61,
- 0x7e, 0xe1,
- 0xff, 0xe0,
- 0xff, 0xe0,
- 0xff, 0xb0,
- 0x3f, 0x30,
- 0x1f, 0x3f,
- 0x08, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0xf8, 0xfb,
- 0xe0, 0xf9,
- 0xf0, 0xc8,
- 0xf0, 0xec,
- 0xf8, 0xe4,
- 0xf0, 0xff,
- 0xfb, 0xfc,
- 0xff, 0xff,
- 0xff, 0xff,
- 0xff, 0xff,
- 0xff, 0xff,
- 0xff, 0xff,
- 0x7f, 0x3f,
- 0x0f, 0x07,
- 0x07, 0x03,
- 0x03, 0x01,
- 0xc3, 0xe7,
- 0xff, 0xff,
- 0xff, 0xfc,
- 0xff, 0xfa,
- 0xff, 0xfc,
- 0xff, 0xfa,
- 0xff, 0xfc,
- 0xff, 0xfe,
- 0xff, 0xff,
- 0xff, 0xff,
- 0xff, 0xff,
- 0xff, 0x7f,
- 0x00, 0x7c,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- //--- Page 4 ---
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x02, 0x01,
- 0x0f, 0x0f,
- 0x0f, 0x0c,
- 0x1f, 0x18,
- 0x3f, 0x70,
- 0x7f, 0x30,
- 0x7f, 0x60,
- 0xff, 0x60,
- 0xff, 0x78,
- 0xff, 0xe0,
- 0xff, 0x70,
- 0xff, 0xf0,
- 0xff, 0x70,
- 0x7f, 0xe8,
- 0x7f, 0xe0,
- 0x7f, 0xf0,
- 0x7f, 0xf0,
- 0x7f, 0xf0,
- 0x7f, 0xf0,
- 0x7f, 0xf0,
- 0x7f, 0xf0,
- 0x7f, 0xf8,
- 0x7f, 0xf8,
- 0x7f, 0xf8,
- 0x7f, 0xf8,
- 0x7f, 0xf8,
- 0xff, 0x78,
- 0x7f, 0xf8,
- 0x7f, 0xf8,
- 0x7f, 0xe0,
- 0x7f, 0xf0,
- 0x7f, 0x38,
- 0x3f, 0x70,
- 0x3f, 0x7e,
- 0x3f, 0x9f,
- 0x98, 0xc3,
- 0xc0, 0x00,
- 0x40, 0x00,
- 0x00, 0xc0,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x40,
- 0x01, 0xc1,
- 0x43, 0xa7,
- 0xc7, 0x46,
- 0xc7, 0x8c,
- 0xcf, 0x8c,
- 0x8f, 0xcc,
- 0x8f, 0xd8,
- 0xdf, 0x9c,
- 0xdf, 0x98,
- 0xdf, 0x98,
- 0xdf, 0x98,
- 0xdf, 0x98,
- 0xdf, 0x99,
- 0xdf, 0x9b,
- 0xdf, 0x9f,
- 0xde, 0x9f,
- 0xde, 0x9f,
- 0xdf, 0x9e,
- 0xdf, 0x9f,
- 0xdf, 0x9f,
- 0xdf, 0x9f,
- 0xdf, 0x9f,
- 0xdf, 0xdf,
- 0xcf, 0x8f,
- 0xcf, 0xcf,
- 0xcf, 0x86,
- 0xc0, 0x46,
- 0x40, 0x80,
- 0x00, 0x80,
- 0x00, 0x80,
- 0x00, 0x80,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x01, 0xa0,
- 0x33, 0xc1,
- 0x1f, 0x7f,
- 0xdf, 0x2f,
- 0xff, 0x0f,
- 0xdf, 0x2f,
- 0x9f, 0x67,
- 0x1f, 0xe7,
- 0xff, 0x3f,
- 0xff, 0xbf,
- 0xff, 0xff,
- 0xdf, 0xaf,
- 0x1f, 0x9e,
- 0x1e, 0x0b,
- 0x1f, 0x9e,
- 0x1f, 0x9f,
- 0x1f, 0x9f,
- 0x1f, 0x9f,
- 0x9f, 0x1f,
- 0x9f, 0x1f,
- 0x9f, 0x1f,
- 0x9f, 0x1f,
- 0x8f, 0x1f,
- 0x8f, 0x0f,
- 0x87, 0x07,
- 0x83, 0x03,
- 0x81, 0x03,
- 0x80, 0x00,
- 0x80, 0x00,
- 0x80, 0x00,
- 0x80, 0x00,
- 0x00, 0x80,
- 0x80, 0x80,
- 0x80, 0x80,
- 0x80, 0x80,
- 0x80, 0x00,
- 0x80, 0x80,
- 0x80, 0x00,
- 0x80, 0x00,
- 0x80, 0x00,
- 0x80, 0x80,
- 0x80, 0x80,
- 0x80, 0x80,
- 0x00, 0x80,
- 0x00, 0x00,
- //--- Page 5 ---
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x80, 0x00,
- 0x80, 0x00,
- 0x80, 0x00,
- 0xc0, 0x00,
- 0x80, 0x40,
- 0xc0, 0x00,
- 0xc0, 0x00,
- 0x80, 0x60,
- 0xa0, 0x80,
- 0x00, 0xf0,
- 0x10, 0xe6,
- 0x97, 0x63,
- 0xb1, 0x47,
- 0xb0, 0x43,
- 0xf8, 0x07,
- 0xf9, 0xc6,
- 0xfe, 0xff,
- 0xfe, 0xf9,
- 0xf8, 0x17,
- 0xf8, 0x07,
- 0xfc, 0x03,
- 0xfc, 0x03,
- 0xfe, 0x00,
- 0xff, 0x00,
- 0x1e, 0xff,
- 0xfd, 0xfc,
- 0xf9, 0xff,
- 0xff, 0xe1,
- 0xff, 0x00,
- 0xff, 0x01,
- 0xff, 0x00,
- 0xff, 0x01,
- 0xfb, 0x05,
- 0xfb, 0x84,
- 0xf9, 0x86,
- 0xc1, 0xbe,
- 0x01, 0xfe,
- 0x03, 0xf8,
- 0xff, 0x6f,
- 0xff, 0xff,
- 0xff, 0xf8,
- 0xff, 0xe0,
- 0xff, 0x00,
- 0xff, 0xa0,
- 0xfc, 0xe3,
- 0xfc, 0xf2,
- 0xf8, 0x86,
- 0xf8, 0xc7,
- 0xf8, 0xc6,
- 0xf8, 0xc6,
- 0xfc, 0x82,
- 0xfc, 0xc2,
- 0xfc, 0x83,
- 0x9e, 0xa1,
- 0x9e, 0xa3,
- 0x0c, 0x92,
- 0x00, 0x00,
- 0xdb, 0x24,
- 0xff, 0x00,
- 0xff, 0x00,
- 0xfe, 0x01,
- 0xff, 0x80,
- 0xff, 0xe1,
- 0xff, 0xff,
- 0xff, 0xff,
- 0xfd, 0x73,
- 0x3d, 0x71,
- 0x3f, 0x39,
- 0x3d, 0x7b,
- 0x3d, 0x79,
- 0x39, 0x3d,
- 0x39, 0x3d,
- 0x39, 0x3d,
- 0x3d, 0x19,
- 0x7d, 0x39,
- 0x7d, 0x39,
- 0x7d, 0x31,
- 0x7d, 0x31,
- 0x7d, 0x31,
- 0x7d, 0x31,
- 0x7d, 0x71,
- 0x7d, 0x71,
- 0x78, 0x7d,
- 0x78, 0x75,
- 0x7c, 0x71,
- 0x7d, 0x70,
- 0x79, 0x7c,
- 0x79, 0x7c,
- 0x79, 0x7c,
- 0x79, 0x7c,
- 0x79, 0x74,
- 0x78, 0x7d,
- 0x78, 0x7d,
- 0x79, 0x7c,
- 0x39, 0x7e,
- 0x3d, 0x38,
- 0x3f, 0x1f,
- 0x1e, 0x1f,
- //--- Page 6 ---
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x80,
- 0x00, 0x80,
- 0x00, 0x40,
- 0x00, 0x40,
- 0x00, 0x40,
- 0x00, 0x60,
- 0x00, 0x20,
- 0x00, 0xb0,
- 0xc0, 0x90,
- 0x80, 0xd8,
- 0xc0, 0xe8,
- 0xe0, 0xc0,
- 0xf0, 0x40,
- 0x70, 0x68,
- 0x70, 0x38,
- 0x38, 0x34,
- 0x38, 0x3c,
- 0x1c, 0x3a,
- 0x1c, 0x1a,
- 0x1d, 0x0e,
- 0x0f, 0x0c,
- 0x0f, 0x04,
- 0x0f, 0x06,
- 0x07, 0x0e,
- 0x07, 0x02,
- 0x07, 0x02,
- 0x07, 0x03,
- 0x03, 0x07,
- 0x03, 0x03,
- 0x03, 0x03,
- 0x03, 0x01,
- 0x03, 0x01,
- 0x01, 0x07,
- 0x3d, 0x4f,
- 0x7d, 0x3f,
- 0xff, 0x7d,
- 0xff, 0xff,
- 0xff, 0xff,
- 0xff, 0xff,
- 0xff, 0xbf,
- 0xff, 0xf8,
- 0xff, 0xf8,
- 0xff, 0xfc,
- 0xff, 0xfe,
- 0xff, 0xfe,
- 0xff, 0x7e,
- 0x7c, 0xfe,
- 0x7f, 0x3f,
- 0x7f, 0x3f,
- 0x3f, 0x7f,
- 0x3f, 0x3e,
- 0x3f, 0x3f,
- 0x3f, 0x36,
- 0x37, 0x3e,
- 0x3f, 0x3f,
- 0x3f, 0x3e,
- 0x37, 0x1f,
- 0x3f, 0x13,
- 0x1c, 0x3b,
- 0x1e, 0x19,
- 0x1f, 0x1f,
- 0x1f, 0x1f,
- 0x1f, 0x1f,
- 0x1f, 0x1f,
- 0x1f, 0x1f,
- 0x1f, 0x0f,
- 0x0f, 0x1f,
- 0x0f, 0x0f,
- 0x0f, 0x0f,
- 0x0f, 0x0f,
- 0x0f, 0x0f,
- 0x0f, 0x0f,
- 0x0f, 0x07,
- 0x07, 0x0f,
- 0x0f, 0x07,
- 0x07, 0x0f,
- 0x0f, 0x0f,
- 0x0f, 0x0f,
- 0x1f, 0x1f,
- 0x1f, 0x37,
- 0x3f, 0x2e,
- 0x7f, 0x3e,
- 0x7f, 0x7f,
- 0x3f, 0x7f,
- 0x3f, 0x3f,
- 0x1f, 0x1f,
- 0x0f, 0x07,
- 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,
- //--- Page 7 ---
- 0x10, 0x30,
- 0x30, 0x6c,
- 0x60, 0xf6,
- 0x60, 0xe2,
- 0x60, 0xe0,
- 0x70, 0xe0,
- 0x70, 0xa1,
- 0x30, 0xf9,
- 0x38, 0x30,
- 0x38, 0x18,
- 0x1c, 0x38,
- 0x1c, 0x1a,
- 0x0e, 0x0c,
- 0x0e, 0x06,
- 0x07, 0x06,
- 0x07, 0x03,
- 0x03, 0x03,
- 0x01, 0x03,
- 0x01, 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, 0x01,
- 0x00, 0x01,
- 0x01, 0x00,
- 0x01, 0x00,
- 0x01, 0x01,
- 0x01, 0x01,
- 0x01, 0x01,
- 0x00, 0x01,
- 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,
- //--- Page 8 ---
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00
- }
-};
-
-
diff --git a/boop/gui/iconPause.h b/boop/gui/iconPause.h
deleted file mode 100644
index 087924c..0000000
--- a/boop/gui/iconPause.h
+++ /dev/null
@@ -1,56 +0,0 @@
-////////////////////////////////////////////////////
-// This file was generated by the tool GrayScaler.
-// Source bitmap: R:\Project\GrayScaler\Icons\Pause.bmp
-//
-// ICON_GRAY - 2 bpp (Bit per Pixel)
-// sizeof (iconPause.data) == 52
-//
-////////////////////////////////////////////////////
-#include "icon.h"
-
-#ifndef ICON_INFO
-#define ICON_INFO(i) i,
-#endif
-
-
-const ICON iconPause =
-{
- /* width = */ 13,
- /* height = */ 13,
- /* info = */ ICON_INFO (ICON_GRAY)
- /* data [] = */
- {
- // Bit 0 is the upper most pixel
- // of the page, which is 8 pixel high
- //--- Page 0 ---
- 0xfc, 0xfa,
- 0x06, 0x03,
- 0x03, 0x00,
- 0x01, 0x01,
- 0xf9, 0xf9,
- 0xf9, 0xf9,
- 0x01, 0x01,
- 0xf9, 0xf9,
- 0xf9, 0xf9,
- 0x01, 0x01,
- 0x03, 0x00,
- 0x06, 0x03,
- 0xfc, 0xfa,
- //--- Page 1 ---
- 0x07, 0x0b,
- 0x0c, 0x18,
- 0x18, 0x00,
- 0x10, 0x10,
- 0x13, 0x13,
- 0x13, 0x13,
- 0x10, 0x10,
- 0x13, 0x13,
- 0x13, 0x13,
- 0x10, 0x10,
- 0x10, 0x00,
- 0x08, 0x18,
- 0x07, 0x0b
- }
-};
-
-
diff --git a/boop/gui/iconPlay.h b/boop/gui/iconPlay.h
deleted file mode 100644
index 6224718..0000000
--- a/boop/gui/iconPlay.h
+++ /dev/null
@@ -1,56 +0,0 @@
-////////////////////////////////////////////////////
-// This file was generated by the tool GrayScaler.
-// Source bitmap: R:\Project\GrayScaler\Icons\Play.bmp
-//
-// ICON_GRAY - 2 bpp (Bit per Pixel)
-// sizeof (iconPlay.data) == 52
-//
-////////////////////////////////////////////////////
-#include "icon.h"
-
-#ifndef ICON_INFO
-#define ICON_INFO(i) i,
-#endif
-
-
-const ICON iconPlay =
-{
- /* width = */ 13,
- /* height = */ 13,
- /* info = */ ICON_INFO (ICON_GRAY)
- /* data [] = */
- {
- // Bit 0 is the upper most pixel
- // of the page, which is 8 pixel high
- //--- Page 0 ---
- 0xfc, 0xfa,
- 0x06, 0x03,
- 0x03, 0x00,
- 0x01, 0x01,
- 0x01, 0x01,
- 0xf9, 0xf9,
- 0xf1, 0xf9,
- 0xe1, 0xf1,
- 0x41, 0xe1,
- 0x01, 0x01,
- 0x03, 0x00,
- 0x06, 0x03,
- 0xfc, 0xfa,
- //--- Page 1 ---
- 0x07, 0x0b,
- 0x0c, 0x18,
- 0x18, 0x00,
- 0x10, 0x10,
- 0x10, 0x10,
- 0x13, 0x13,
- 0x11, 0x13,
- 0x10, 0x11,
- 0x10, 0x10,
- 0x10, 0x10,
- 0x10, 0x00,
- 0x08, 0x18,
- 0x07, 0x0b
- }
-};
-
-
diff --git a/boop/gui/iconStop.h b/boop/gui/iconStop.h
deleted file mode 100644
index ffaf217..0000000
--- a/boop/gui/iconStop.h
+++ /dev/null
@@ -1,56 +0,0 @@
-////////////////////////////////////////////////////
-// This file was generated by the tool GrayScaler.
-// Source bitmap: R:\Project\GrayScaler\Icons\Stop.bmp
-//
-// ICON_GRAY - 2 bpp (Bit per Pixel)
-// sizeof (iconStop.data) == 52
-//
-////////////////////////////////////////////////////
-#include "icon.h"
-
-#ifndef ICON_INFO
-#define ICON_INFO(i) i,
-#endif
-
-
-const ICON iconStop =
-{
- /* width = */ 13,
- /* height = */ 13,
- /* info = */ ICON_INFO (ICON_GRAY)
- /* data [] = */
- {
- // Bit 0 is the upper most pixel
- // of the page, which is 8 pixel high
- //--- Page 0 ---
- 0xfc, 0xfa,
- 0x06, 0x03,
- 0x03, 0x00,
- 0x01, 0x01,
- 0xf1, 0xf1,
- 0xf1, 0xf1,
- 0xf1, 0xf1,
- 0xf1, 0xf1,
- 0xf1, 0xf1,
- 0x01, 0x01,
- 0x03, 0x00,
- 0x06, 0x03,
- 0xfc, 0xfa,
- //--- Page 1 ---
- 0x07, 0x0b,
- 0x0c, 0x18,
- 0x18, 0x00,
- 0x10, 0x10,
- 0x11, 0x11,
- 0x11, 0x11,
- 0x11, 0x11,
- 0x11, 0x11,
- 0x11, 0x11,
- 0x10, 0x10,
- 0x10, 0x00,
- 0x08, 0x18,
- 0x07, 0x0b
- }
-};
-
-
diff --git a/boop/gui/mainmenu.c b/boop/gui/mainmenu.c
deleted file mode 100644
index 406f7c0..0000000
--- a/boop/gui/mainmenu.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- testmenu.c - testmenu for menuing system
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "menu.h"
-#include "testmenu.h"
-#include "gamesmenu.h"
-#include "settingsmenu.h"
-#include "toolsmenu.h"
-#include "lcd.h"
-#include "fonty.h"
-#include "keyboard.h"
-#include "global.h"
-#include "flash.h"
-#ifndef DEBUGMODE
- #include "sounds.h"
- #include "sound3.h"
- #include "sound.h"
-#endif
-#include "version.h"
-
-unsigned int testdata1, testdata2;
-
-
-void show_info(void) {
- unsigned short flashID;
- unsigned short hwID;
- flashID = getFlashID();
- draw_hexC (0, 30, flashID, LCD_COLOR_B, DRAW_PUT);
-
- hwID = GetHWversion();
- draw_hexS (0, 38, hwID, LCD_COLOR_B, DRAW_PUT);
-
- lcd_fill(0);
- set_font(BOLDFONT);
- draw_string (0,0,"Info", LCD_COLOR_B, DRAW_PUT);
- set_font(SMALLFONT);
- draw_string(0,14,"Flash \n"
- "Manuf. ID\n"
- "Device ID\n"
- "\n"
- "Betty\n"
- "HW Version\n", LCD_COLOR_B, DRAW_PUT);
- draw_hexC (65, 23, (flashID>>8), LCD_COLOR_B, DRAW_PUT);
- draw_hexC (65, 32, (flashID&0x00ff), LCD_COLOR_B, DRAW_PUT);
- draw_hexC (65, 59, (unsigned char)hwID, LCD_COLOR_B, DRAW_PUT);
- draw_string (0,77,"Boop", LCD_COLOR_B, DRAW_PUT);
-#ifdef RELEASE
- draw_numU (65,86,SVNVERSION+1,0, LCD_COLOR_B, DRAW_PUT);
- draw_string (0,86,"SVN Release", LCD_COLOR_B, DRAW_PUT);
-#else
- draw_numU (65,86,SVNVERSION,0, LCD_COLOR_B, DRAW_PUT);
- draw_string (0,86,"SVN Revision", LCD_COLOR_B, DRAW_PUT);
-#endif
- draw_string (0,95,__DATE__, LCD_COLOR_B, DRAW_PUT);
- draw_string (0,104,__TIME__, LCD_COLOR_B, DRAW_PUT);
-
- set_font(SMALLFONT);
-
- waitKeyUpDown();
-} // show_info
-
-
-void show_credits(void)
-{
- lcd_fill(0);
- set_font(BOLDFONT);
- draw_string (0,0,"Credits", LCD_COLOR_B, DRAW_PUT);
- set_font(SMALLFONT);
- draw_string (0,14,"Netguy\tBasics\n"
- "Telekatz\tBasics, IR/RF\n"
- "Theborg\tFirst Steps, HW\n"
- "Colibri\tFlash SW\n"
- "Damaltor\tSupport\n"
- "Pr0nbug\tFirst Steps\n"
- "Asgart\tForum/Wiki\n"
- "Spessi\tSurport, HW", LCD_COLOR_B, DRAW_PUT);
-
- draw_string(0,95,"Und alle Anderen\n"
- "die vergessen wurden.", LCD_COLOR_B, DRAW_PUT);
-
- draw_string(0,120,"Thanks to Max Fleischer\n"
- "for a great Cartoon!", LCD_COLOR_B, DRAW_PUT);
- set_font(BOLDFONT);
- draw_string (8,150,"www.bettyhacks.com", LCD_COLOR_B, DRAW_PUT);
- set_font(SMALLFONT);
-#ifndef DEBUGMODE
- playSound((unsigned char*)sound1_data, sound1_len);
- waitSound();
- playSound((unsigned char*)sound2_data, sound2_len);
- waitSound();
-#endif
- waitKeyUpDown();
-} // show_credits
-
-const struct MENU_ENTRY mainMenuEntries[] =
-{
- { 0, (void*)&gamesMenu, MENUENTRY, "Games", "Play some games" },
- { 0, (void*)&testMenu, MENUENTRY, "TestStuff", "Various tests" },
- { enter_settings_menu, 0, FUNCENTRY, "Settings", "Change settings" },
- { 0, (void*)&toolsMenu, MENUENTRY, "Tools", "Tools" },
- { show_credits, 0, FUNCENTRY, "Credits", "Show Credits" },
- { show_info, 0, FUNCENTRY, "Info", "Show Info" }
-};
-
-
-const struct MENU mainMenu =
-{
- NUM_OF_ELEMENTS (mainMenuEntries), (MENU_ENTRY*)&mainMenuEntries, "Main Menu"
-};
diff --git a/boop/gui/mainmenu.h b/boop/gui/mainmenu.h
deleted file mode 100644
index d53d3df..0000000
--- a/boop/gui/mainmenu.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- mainmenu.h - the main menu for boop
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef MAINMENU_H
-#define MAINMENU_H
-
-extern struct MENU mainMenu;
-
-#endif
diff --git a/boop/gui/menu.c b/boop/gui/menu.c
deleted file mode 100644
index 7e5a484..0000000
--- a/boop/gui/menu.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- menu.c - menuing system
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "global.h"
-#include "menu.h"
-#include "lcd.h"
-#include "fonty.h"
-#include "keyboard.h"
-#include "lpc2220.h"
-
-//-----------------------------------------------------------------------------
-#if FF_LARGE_MENU
-#define MENU_FONT SMOOTHFONT
-#define MENU_LINE_HEIGHT (SMOOTHFONT_HEIGHT+2)
-#else
-#define MENU_FONT SMALLFONT
-#define MENU_LINE_HEIGHT SMALLFONT_HEIGHT+1
-#endif
-
-#define MENU_HEAD_LINE_HEIGHT (BOLDFONT_HEIGHT+2+2+2)
-#define MENU_LINE_WIDTH (LCD_SIZE_X - 10)
-#define MENU_BOTTOM_LINE_HEIGHT (SMALLFONT_HEIGHT+5)
-
-#define MENU_ARROW_SIZE (min(MENU_LINE_HEIGHT-6, (LCD_SIZE_X-MENU_LINE_WIDTH-1)/2+1))
-
-#define MENU_START_Y MENU_HEAD_LINE_HEIGHT
-#define MENU_LIST_LEN ((LCD_SIZE_Y - MENU_HEAD_LINE_HEIGHT - MENU_BOTTOM_LINE_HEIGHT) / MENU_LINE_HEIGHT)
-
-#define MENU_SCROLLBAR_HEIGHT (MENU_LINE_HEIGHT*MENU_LIST_LEN-10-10-3) // [px]
-//-----------------------------------------------------------------------------
-
-
-
-//-----------------------------------------------------------------------------
-int menu_execentry(struct MENU_ENTRY *entry)
-{
- unsigned int *val;
- struct MENU *m;
-
- draw_block (0, 100, LCD_SIZE_X, 8, LCD_COLOR_B, DRAW_ERASE);
- switch(entry->type)
- {
- case INTENTRY:
- val = (unsigned int*)entry->data;
- draw_block (0, 50, LCD_SIZE_X, 8, LCD_COLOR_B, DRAW_ERASE);
- draw_hexW (0, 50, *val, LCD_COLOR_B, DRAW_PUT);
- break;
- case FUNCENTRY:
- entry->exec();
- return 1;
- break;
- case MENUENTRY:
- m = (MENU*)entry->data;
- if(m->num_entries != 0)
- {
- menu_exec((MENU*)entry->data);
- return 1;
- }
- break;
- default:
- break;
- }
- return 0;
-} // menu_execentry
-//-----------------------------------------------------------------------------
-
-
-
-//-----------------------------------------------------------------------------
-void menu_exec(struct MENU *menu)
-{
- unsigned char total; // entries in menu
- unsigned char csel; // selected entry
-
- unsigned char moff; // first entry displayed
- unsigned char moffold; // only used to detect change
-
- unsigned char set; // iterator for visible entries
-
- csel = 0;
- moff = 0;
-
-again:
- lcd_fill(0);
-
- //-----------------------------------------
- // Menu head line
- set_font(BOLDFONT);
- draw_string (0, 0, (char*)menu->name, LCD_COLOR_B, DRAW_PUT);
- draw_block (0, BOLDFONT_HEIGHT+2, LCD_SIZE_X, 2, LCD_COLOR_B, DRAW_PUT);
- // Menu bottom line
- draw_block (0, LCD_SIZE_Y-SMALLFONT_HEIGHT-3, LCD_SIZE_X, 2, LCD_COLOR_B, DRAW_PUT);
- //-----------------------------------------
-
- total = menu->num_entries;
- moffold = total;
-
- while(KEY_Exit) {};
- while(!KEY_Exit)
- {
- // draw list: initially or when selection is on next 'page' and all entries 'move'
- if (moff!=moffold)
- {
- // menu list
- set_font (MENU_FONT);
- draw_block (0, MENU_START_Y, LCD_SIZE_X, MENU_LINE_HEIGHT*MENU_LIST_LEN, LCD_COLOR_B, DRAW_ERASE);
- for (set=moff; (setentry [set].name, LCD_COLOR_B, DRAW_PUT);
- }
- // scroll arrows
- if (moff) // not the first page
- {
- draw_arrow (MENU_LINE_WIDTH+1, MENU_START_Y+3,
- ARROW_UP, MENU_ARROW_SIZE, LCD_COLOR_B, DRAW_PUT);
- }
- if (total > moff+MENU_LIST_LEN) // not the last page
- {
- draw_arrow (MENU_LINE_WIDTH+1, MENU_LINE_HEIGHT*MENU_LIST_LEN+7,
- ARROW_DOWN, MENU_ARROW_SIZE, LCD_COLOR_B, DRAW_PUT);
- }
- // scroll handle
- if (total > MENU_LIST_LEN)
- {
- draw_block (MENU_LINE_WIDTH+1, MENU_START_Y + 10 + (MENU_SCROLLBAR_HEIGHT/(total-1))*(csel),
- 9, MENU_SCROLLBAR_HEIGHT/(total-1),
- LCD_COLOR_DG, DRAW_PUT);
- }
- // select entry (invert)
- draw_block (0, MENU_START_Y + ((csel-moff) * MENU_LINE_HEIGHT),
- MENU_LINE_WIDTH, MENU_LINE_HEIGHT, LCD_COLOR_B, DRAW_XOR);
- }
- moffold = moff;
-
- //-----------------------------------------
- // Menu bottom line
- set_font (SMALLFONT);
- draw_block ( 0, LCD_SIZE_Y-SMALLFONT_HEIGHT, LCD_SIZE_X, SMALLFONT_HEIGHT, LCD_COLOR_B, DRAW_ERASE);
-
- // entry number
- draw_char (0, LCD_SIZE_Y-SMALLFONT_HEIGHT, '0' + (csel+1)/10, LCD_COLOR_B, DRAW_PUT);
- draw_char (6, LCD_SIZE_Y-SMALLFONT_HEIGHT, '0' + (csel+1)%10, LCD_COLOR_B, DRAW_PUT);
-
- // entry help text
- draw_string (16, LCD_SIZE_Y-SMALLFONT_HEIGHT, (char*)menu->entry [csel].help, LCD_COLOR_B, DRAW_PUT);
- //-----------------------------------------
-
- // wait for key press
- waitKeyUpDown();
-
- // deselect current entry
- draw_block (0, MENU_START_Y + ((csel-moff) * MENU_LINE_HEIGHT),
- MENU_LINE_WIDTH, MENU_LINE_HEIGHT, LCD_COLOR_B, DRAW_XOR);
-
- // clear scroll handle
- if (total > MENU_LIST_LEN)
- draw_block (MENU_LINE_WIDTH+1, MENU_START_Y + 10 + (MENU_SCROLLBAR_HEIGHT/(total-1))*(csel),
- 9, MENU_SCROLLBAR_HEIGHT/(total-1),
- LCD_COLOR_DG, DRAW_XOR);
-
- if(KEY_OK)
- {
- if(menu_execentry((MENU_ENTRY*)&menu->entry[csel]))
- goto again;
- }
- if(KEY_Up)
- {
- csel--;
- if(csel= total)
- {
- if (total > MENU_LIST_LEN)
- moff = total - MENU_LIST_LEN;
- csel = total-1;
- }
- }
- if(KEY_Down)
- {
- csel++;
- if (csel == MENU_LIST_LEN+moff)
- moff++;
- if (csel == total)
- {
- moff = 0;
- csel = 0;
- }
- }
- if(KEY_Left)
- {
- csel = 0;
- moff = 0;
- }
- if(KEY_Right)
- {
- csel = total -1;
- if (total > MENU_LIST_LEN)
- moff = total - MENU_LIST_LEN;
- }
- unsigned char num = getKeynum();
- if (num >= 16 && num <= 25)
- {
- csel = num - 16;
- if (csel >= total)
- csel = total-1;
- if(csel < moff)
- moff = csel;
- if (csel >= MENU_LIST_LEN-moff)
- moff = csel - MENU_LIST_LEN+1;
- if(menu_execentry((MENU_ENTRY*)&menu->entry[csel]))
- goto again;
- }
-
- // select new entry (invert)
- draw_block (0, MENU_START_Y + ((csel-moff) * MENU_LINE_HEIGHT),
- MENU_LINE_WIDTH, MENU_LINE_HEIGHT, LCD_COLOR_B, DRAW_XOR);
-
- // scroll handle moved
- if (total > MENU_LIST_LEN)
- draw_block (MENU_LINE_WIDTH+1, MENU_START_Y + 10 + (MENU_SCROLLBAR_HEIGHT/(total-1))*(csel),
- 9, MENU_SCROLLBAR_HEIGHT/(total-1),
- LCD_COLOR_DG, DRAW_PUT);
- } // while (!KEY_Exit)
-} // menu_exec
-//-----------------------------------------------------------------------------
-
-
-
-//-----------------------------------------------------------------------------
-void init_menu(void)
-{
-}
-//-----------------------------------------------------------------------------
-
diff --git a/boop/gui/menu.h b/boop/gui/menu.h
deleted file mode 100644
index 30f04b6..0000000
--- a/boop/gui/menu.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- menu.h - menuing system
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef MENU_H
-#define MENU_H
-
-#define NONE 0
-#define INTENTRY 1
-#define FUNCENTRY 2
-#define MENUENTRY 3
-
-typedef void(*menu_fn)(void);
-
-typedef struct MENU_ENTRY
-{
- menu_fn exec;
- void *data;
- unsigned char type;
- char *name;
- char *help;
-} MENU_ENTRY;
-
-typedef struct MENU
-{
- unsigned int num_entries;
- struct MENU_ENTRY *entry;
- char *name;
-} MENU;
-
-void init_menu(void);
-
-void menu_exec(struct MENU *menu);
-int menu_execentry(struct MENU_ENTRY *entry);
-
-#endif
diff --git a/boop/gui/settingsmenu.c b/boop/gui/settingsmenu.c
deleted file mode 100644
index 5f3f469..0000000
--- a/boop/gui/settingsmenu.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- settingsmenue.c
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "menu.h"
-#include "settingsmenu.h"
-#include "lcd.h"
-#include "fonty.h"
-#include "keyboard.h"
-#include "rtc.h"
-#include "ir_selector.h"
-#include "backlight.h"
-#include "bfs.h"
-#include "rf.h"
-#include "ir_capture.h"
-#include "controls.h"
-#include "global.h"
-
-extern volatile unsigned char bl_val;
-extern unsigned int bl_timeout;
-extern unsigned char bl_max;
-extern unsigned char bl_speed;
-unsigned char lcd_contrast;
-
-const struct MENU_ENTRY settingsMenuEntries[] =
-{
- { change_clock, 0, FUNCENTRY, "Clock", "set time/date" },
- { RC_setting, 0, FUNCENTRY, "RC keys", "assign RC keys" },
- { display_setting, 0, FUNCENTRY, "Display", "backlight, contrast" },
- { RF_setting, 0, FUNCENTRY, "RF", "ID, channel" },
- { RAW_learnmenue, 0, FUNCENTRY, "IR learn", "Learn IR commands" },
-};
-
-const struct MENU settingsMenu =
-{
- 5, (MENU_ENTRY*)&settingsMenuEntries, "Settings"
-};
-
-const struct settings_ default_settings =
-{
- 0x02, // version change this when modifying the struct
- 63, // bl_max hardware limit of LCD controller
- LCD_CONTRAST,
- 2, // bl_speed;
- 1000 // bl_timeout
-};
-
-// change handlers
-
-void brightness_onchange(FORM* form, CONTROL* control) {
- bl_max=((NUMBOX*)control)->value;
- setBacklight(bl_max);
-}
-
-void timeout_onchange(FORM* form, CONTROL* control) {
- bl_timeout=((NUMBOX*)control)->value * 200;
- setBacklight(bl_max);
-}
-
-void contrast_onchange(FORM* form, CONTROL* control)
-{
- lcd_contrast = ((NUMBOX*)control)->value;
- //~ lcd_set_contrast(0x3A);
- lcd_set_contrast(lcd_contrast);
-}
-
-void speed_onchange(FORM* form, CONTROL* control)
-{
- bl_speed=((NUMBOX*)control)->value;
- //~ setBLSpeed(bl_speed);
-}
-
-// the submenus
-
-void display_setting(void) {
-
- const LABEL label1 = {BC_Labelnotab, 0,15,100,10,BOLDFONT,0,"Brightness",0};
- NUMBOX numbox1 = {BC_Numbox, 0,25, 13, 9,SMALLFONT,bl_val,0,63,brightness_onchange,NULL};
- const LABEL label2 = {BC_Labelnotab, 0,37,100,10,BOLDFONT,0,"Contrast",0};
- NUMBOX numbox2 = {BC_Numbox, 0,47, 19, 9,SMALLFONT,lcd_contrast,0,63,contrast_onchange,NULL};
- const LABEL label3 = {BC_Labelnotab, 0,59,100,10,BOLDFONT,0,"Backlight timeout",0};
- NUMBOX numbox3 = {BC_Numbox, 0,69, 19, 9,SMALLFONT,bl_timeout/200,1,200,timeout_onchange,NULL};
- const LABEL label4 = {BC_Labelnotab, 0,81,100,10,BOLDFONT,0,"Backlight fade time",0};
- NUMBOX numbox4 = {BC_Numbox, 0,91, 19, 9,SMALLFONT,bl_speed,1,6,speed_onchange,NULL};
-
- CONTROL* controls[8] = { (CONTROL*)&label1,
- (CONTROL*)&label2,
- (CONTROL*)&label3,
- (CONTROL*)&label4,
- (CONTROL*)&numbox1,
- (CONTROL*)&numbox2,
- (CONTROL*)&numbox3,
- (CONTROL*)&numbox4};
-
- FORM form = {"Display settings"," ",0,0,0,0,controls,4,8,0,0};
- form_exec(&form); // controls.c
-
- // grayscale staircase test pattern for calibration
- // form_exec->form_draw clears the screen
- // either add this as a control or
- // clear screen manually before form_exec
- //~ draw_block ( 0, 80, 20, 20, LCD_COLOR_B, DRAW_PUT);
- //~ draw_block (21, 80, 20, 20, LCD_COLOR_DG, DRAW_PUT);
- //~ draw_block (42, 80, 20, 20, LCD_COLOR_LG, DRAW_PUT);
-}
-
-void RF_setting(void) {
- struct RFsettings_ RFsettings;
-
- BFS_LoadFile(BFS_ID_RFsettings, sizeof(struct RFsettings_), (unsigned char*) &RFsettings);
-
- const LABEL label1 = {BC_Labelnotab, 0,15,100,10,BOLDFONT,0,"Device address",0};
- NUMBOX numbox1 = {BC_Numbox, 0,25, 19, 9,SMALLFONT,RFsettings.address,1,127,NULL,NULL};
- const LABEL label2 = {BC_Labelnotab, 0,37,100,10,BOLDFONT,0,"Channel",0};
- NUMBOX numbox2 = {BC_Numbox, 0,47, 19, 9,SMALLFONT,RFsettings.channel,0,255,NULL,NULL};
-
- CONTROL* controls[4] = { (CONTROL*)&label1,
- (CONTROL*)&label2,
- (CONTROL*)&numbox1,
- (CONTROL*)&numbox2};
-
- FORM form = {"RF settings"," ",0,0,0,0,controls,2,4,0,0};
-
- form_exec(&form);
-
- RFsettings.address = numbox1.value;
- RFsettings.channel = numbox2.value;
-
- BFS_SaveFile(BFS_ID_RFsettings, sizeof(struct RFsettings_), (unsigned char*) &RFsettings);
- load_RF_setting();
-}
-
-// learned remotes
-void load_RC_setting(void) {
-
- if(BFS_LoadFile(BFS_ID_remotes, sizeof(struct irDeviceTable_), (unsigned char*) &irDevTab) != sizeof(struct irDeviceTable_)) {
- irDevTab = default_irDevTab;
- BFS_SaveFile(BFS_ID_remotes, sizeof(struct irDeviceTable_), (unsigned char*) &irDevTab);
- draw_string(0, 30, "default RC load", 3, DRAW_PUT);
- }
-}
-
-// load values stored in flash to ram
-// called by main() for init
-void load_setting(void) {
- struct settings_ settings;
-
- BFS_LoadFile(BFS_ID_settings, sizeof(struct settings_), (unsigned char*) &settings);
-
- // if neccessary, use hard-coded defaults
- if(settings.version != default_settings.version)
- {
- settings = default_settings;
- BFS_SaveFile(BFS_ID_settings, sizeof(struct settings_), (unsigned char*) &settings);
- draw_string(0, 40, "default settings load", 3, DRAW_PUT);
- }
- // backlight // TODO: see void initBacklight(void) in backlight.c)
- bl_timeout = settings.bl_timeout;
- bl_max = settings.bl_max;
- setBacklight(bl_max);
- bl_speed = settings.bl_speed;
-
- // LCD contrast
- lcd_contrast = settings.lcd_contrast ;
- lcd_set_contrast(lcd_contrast);
-}
-
-// called by the parent menu
-void enter_settings_menu(void) {
- struct settings_ settings;
-
- // run menu
- menu_exec((struct MENU *)&settingsMenu);
-
- // save changes
- settings = default_settings;
- settings.bl_timeout = bl_timeout;
- settings.bl_max = bl_max;
- settings.lcd_contrast = lcd_contrast;
- settings.bl_speed = bl_speed;
- BFS_SaveFile(BFS_ID_settings, sizeof(struct settings_), (unsigned char*) &settings);
-}
diff --git a/boop/gui/settingsmenu.h b/boop/gui/settingsmenu.h
deleted file mode 100644
index fde3564..0000000
--- a/boop/gui/settingsmenu.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- settingsmenue.h
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef SETTINGSMENU_H
-#define SETTINGSMENU_H
-
-extern const struct MENU settingsMenu;
-
-struct settings_ {
- unsigned char version;
- unsigned char bl_max;
- unsigned char lcd_contrast;
- unsigned char bl_speed;
- unsigned int bl_timeout;
-};
-
-void RF_setting(void);
-void display_setting(void);
-void load_RC_setting(void);
-void load_setting(void);
-void enter_settings_menu(void);
-
-#endif
diff --git a/boop/gui/testmenu.c b/boop/gui/testmenu.c
deleted file mode 100644
index ce4d331..0000000
--- a/boop/gui/testmenu.c
+++ /dev/null
@@ -1,1287 +0,0 @@
-/*
- testmenu.c - testmenu for menuing system
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "menu.h"
-#include "lcd.h"
-#include "fonty.h"
-#include "keyboard.h"
-#include "backlight.h"
-#include "adc.h"
-#include "rf.h"
-#include "flash.h"
-#include "ir_raw.h"
-#include "ir_capture.h"
-#include "ir_selector.h"
-#include "infrared.h"
-#include "sid.h"
-#include "sidfiles.h"
-#include "timerfuncs.h"
-#include "sound.h"
-#include "lpc2220.h"
-#include "controls.h"
-#include "global.h"
-#include "cc1100.h"
-#include "rf.h"
-#include "irq.h"
-#include "serial.h"
-#include "rtctimer.h"
-
-#include "icon.h"
-#include "iconLeo_gray_128.h"
-
-#define TRANSPARENT_CROSS 1 // 0/1
-#if TRANSPARENT_CROSS
-# include "iconCross_t.h"
-# define ICON_CROSS iconCross_t
-#else
-# include "iconCross.h"
-# define ICON_CROSS iconCross
-#endif
-
-#include "iconHourglas.h"
-#include "iconHourglas_t.h"
-
-//#include "sidfiles.h"
-
-extern volatile unsigned char bat_state;
-
-unsigned int testdata1, testdata2;
-
-#define MAX_SOFTMENU 16
-
-void test_circle(void)
-{
- lcd_fill (LCD_COLOR_W);
- draw_disc (20, 20, 18, LCD_COLOR_B, DRAW_PUT);
- draw_disc (20, 20, 14, LCD_COLOR_B, DRAW_XOR);
-
- draw_qdisc (60, 20, 18, 0, LCD_COLOR_B, DRAW_PUT);
- draw_qdisc (60, 40, 18, 1, LCD_COLOR_B, DRAW_PUT);
- draw_qdisc (60, 60, 18, 2, LCD_COLOR_B, DRAW_PUT);
- draw_qdisc (60, 80, 18, 3, LCD_COLOR_B, DRAW_PUT);
-
- draw_qcircle (100, 20, 18, 0, LCD_COLOR_B, DRAW_PUT);
- draw_qcircle (100, 40, 18, 1, LCD_COLOR_B, DRAW_PUT);
- draw_qcircle (100, 60, 18, 2, LCD_COLOR_B, DRAW_PUT);
- draw_qcircle (100, 80, 18, 3, LCD_COLOR_B, DRAW_PUT);
-
-
- draw_circle (30,120,20, LCD_COLOR_B, DRAW_PUT);
-
- waitKeyUpDown();
-}
-
-void test_movearound(void)
-{
- int xpos=0;
- int ypos=0;
- int oldx=0;
- int oldy=0;
-
- lcd_fill (LCD_COLOR_W);
- draw_disc (xpos+5, ypos+5, 5, LCD_COLOR_B, DRAW_PUT);
- while (!KEY_Exit)
- {
- waitKeyUpDown();
- oldx=xpos;
- oldy=ypos;
- if (KEY_Up)
- ypos -= 3;
- if (KEY_Down)
- ypos += 3;
- if (KEY_Left)
- xpos -= 3;
- if (KEY_Right)
- xpos += 3;
-
- if (xpos > 117)
- xpos = 117;
- if (xpos < 0)
- xpos = 0;
- if (ypos > 149)
- ypos = 149;
- if (ypos < 0)
- ypos = 0;
-
- draw_disc (oldx+5, oldy+5, 5, LCD_COLOR_B, DRAW_ERASE);
- draw_disc (xpos+5, ypos+5, 5, LCD_COLOR_B, DRAW_PUT);
- }
-}
-
-
-void test_frame(void)
-{
- lcd_fill (LCD_COLOR_W);
-
- draw_frame (0,0,40,40,4,0, LCD_COLOR_B, DRAW_PUT);
- draw_frame (42,0,40,40,3,16, LCD_COLOR_B, DRAW_PUT);
- draw_frame (84,0,40,40,7,3, LCD_COLOR_B, DRAW_PUT);
-
-
- draw_frame (0,42,40,40,4,7, LCD_COLOR_B, DRAW_PUT);
- draw_frame (42,42,40,40,4,8, LCD_COLOR_B, DRAW_PUT);
- draw_frame (84,42,40,40,1,7, LCD_COLOR_B, DRAW_PUT);
-
- waitKeyUpDown();
-}
-
-void test_frame2(void)
-{
-
- unsigned char t, r;
- t = 1;
- r = 0;
-again:
- lcd_fill (LCD_COLOR_W);
-
- draw_string(0, 152, "t:", LCD_COLOR_B, DRAW_PUT);
- draw_numU(12,152,t,0,LCD_COLOR_B,DRAW_PUT);
- draw_string(64, 152, "r:", LCD_COLOR_B, DRAW_PUT);
- draw_numU(76,152,r,0,LCD_COLOR_B,DRAW_PUT);
-
- draw_frame (0,0,LCD_SIZE_X,128,t,r, LCD_COLOR_B, DRAW_PUT);
-
- while(!KEY_Exit)
- {
- waitKeyUpDown();
- if(KEY_Vplus)
- {
- t++;
- if(t>64)
- t = 1;
- goto again;
- }
- if(KEY_Vminus)
- {
- if(t==1)
- t = 64;
- else
- t--;
- goto again;
- }
- if(KEY_Pplus)
- {
- r++;
- if(r>63)
- r = 0;
- goto again;
- }
- if(KEY_Pminus)
- {
- if(r==0)
- r = 63;
- else
- r--;
- goto again;
- }
- }
-}
-
-#define DRAW_FONTS_LINESPACE 1
-#define DRAW_FONTS_XSTART 15
-void draw_fonts ()
-{
- unsigned short y = 10;
- unsigned short h;
-
- lcd_fill (LCD_COLOR_W);
-#if 0
- set_font (SMOOTHFONT);
- draw_string (0, y, "ÜJ", LCD_COLOR_B, DRAW_PUT);
- draw_string (15, y+1, "ÜJ", LCD_COLOR_B, DRAW_PUT);
- draw_string (30, y+2, "ÜJ", LCD_COLOR_B, DRAW_PUT);
- draw_string (45, y+3, "ÜJ", LCD_COLOR_B, DRAW_PUT);
- draw_string (60, y+5, "ÜJ", LCD_COLOR_B, DRAW_PUT);
- draw_string (75, y+6, "ÜJ", LCD_COLOR_B, DRAW_PUT);
- draw_string (90, y+7, "ÜJ", LCD_COLOR_B, DRAW_PUT);
- draw_string (105, y+8, "ÜJ", LCD_COLOR_B, DRAW_PUT);
- y += 8;
- y += SMOOTHFONT_HEIGHT + DRAW_FONTS_LINESPACE;
-#endif
-
- set_font (SMALLFONT);
- h = get_stringheight ("gÜJ");
- draw_block (0, y, DRAW_FONTS_XSTART-1, SMALLFONT_HEIGHT, LCD_COLOR_B, DRAW_PUT);
- set_font (SMALLFONT);
- draw_numU (1, y, h, 0, LCD_COLOR_B, DRAW_XOR);
- set_font(SMALLFONT);
- draw_string (DRAW_FONTS_XSTART, y, "Small Font", LCD_COLOR_B, DRAW_PUT);
- y += SMALLFONT_HEIGHT + DRAW_FONTS_LINESPACE;
-
- set_font (DOUBLEFONT);
- h = get_stringheight ("gÜJ");
- draw_block (0, y, DRAW_FONTS_XSTART-1, DOUBLEFONT_HEIGHT, LCD_COLOR_B, DRAW_PUT);
- set_font (SMALLFONT);
- draw_numU (1, y+1, h, 0, LCD_COLOR_B, DRAW_XOR);
- set_font(DOUBLEFONT);
- draw_string (DRAW_FONTS_XSTART, y, "Double Font", LCD_COLOR_B, DRAW_PUT);
- y += DOUBLEFONT_HEIGHT + DRAW_FONTS_LINESPACE;
-
- set_font(BOLDFONT);
- h = get_stringheight ("gÜJ");
- draw_block (0, y, DRAW_FONTS_XSTART-1, BOLDFONT_HEIGHT, LCD_COLOR_B, DRAW_PUT);
- set_font (SMALLFONT);
- draw_numU (1, y+1, h, 0, LCD_COLOR_B, DRAW_XOR);
- set_font (BOLDFONT);
- draw_string (DRAW_FONTS_XSTART, y, "Bold Font", LCD_COLOR_B, DRAW_PUT);
- y += BOLDFONT_HEIGHT + DRAW_FONTS_LINESPACE;
-
- set_font (BOLDDOUBLEFONT);
- h = get_stringheight ("gÜJ");
- draw_block (0, y, DRAW_FONTS_XSTART-1, BOLDDOUBLEFONT_HEIGHT, LCD_COLOR_B, DRAW_PUT);
- set_font (SMALLFONT);
- draw_numU (1, y+1, h, 0, LCD_COLOR_B, DRAW_XOR);
- set_font(BOLDDOUBLEFONT);
- draw_string (DRAW_FONTS_XSTART, y, "B.Double", LCD_COLOR_B, DRAW_PUT);
- y += BOLDDOUBLEFONT_HEIGHT + DRAW_FONTS_LINESPACE;
-
- set_font (SMALLFONT);
- h = get_stringheight ("gÜJ");
- draw_block (0, y+1, DRAW_FONTS_XSTART-1, SMALLFONT_HEIGHT, LCD_COLOR_B, DRAW_PUT);
- set_font (SMALLFONT);
- draw_numU (1, y+1, h, 0, LCD_COLOR_B, DRAW_XOR);
- set_font (SMALLFONT);
- draw_string (DRAW_FONTS_XSTART+1, y + 1, "Invers Small Font", LCD_COLOR_B, DRAW_PUT);
- draw_block (DRAW_FONTS_XSTART, y, LCD_SIZE_X, SMALLFONT_HEIGHT+2, LCD_COLOR_B, DRAW_XOR);
- y += SMALLFONT_HEIGHT + 2 + DRAW_FONTS_LINESPACE;
-
- set_font (SMOOTHFONT);
- h = get_stringheight ("gÜJ");
- draw_block (0, y, DRAW_FONTS_XSTART-1, SMOOTHFONT_HEIGHT, LCD_COLOR_B, DRAW_PUT);
- set_font (SMALLFONT);
- draw_numU (1, y+1, h, 0, LCD_COLOR_B, DRAW_XOR);
- set_font(SMOOTHFONT);
- draw_string (DRAW_FONTS_XSTART, y, "Smooth Font", LCD_COLOR_B, DRAW_PUT);
- y += SMOOTHFONT_HEIGHT + DRAW_FONTS_LINESPACE;
-
- set_font (SMOOTHFONT);
- h = get_stringheight ("gÜJ");
- draw_block (0, y+1, DRAW_FONTS_XSTART-1, SMOOTHFONT_HEIGHT, LCD_COLOR_B, DRAW_PUT);
- set_font (SMALLFONT);
- draw_numU (1, y+2, h, 0, LCD_COLOR_B, DRAW_XOR);
- set_font (SMOOTHFONT);
- draw_string (DRAW_FONTS_XSTART+1, y + 1, "Invers Smooth", LCD_COLOR_B, DRAW_PUT);
- draw_block (DRAW_FONTS_XSTART, y, LCD_SIZE_X, SMOOTHFONT_HEIGHT+2, LCD_COLOR_B, DRAW_XOR);
- y += SMOOTHFONT_HEIGHT + 2 + DRAW_FONTS_LINESPACE;
-
- set_font(BOLDFONT);
- waitKeyUpDown();
-}
-
-void test_logo(void)
-{
- lcd_fill (LCD_COLOR_W);
- draw_logo();
- waitKeyUpDown();
-}
-
-
-
-//-----------------------------------------------------------------------------
-#undef ICON_INFO
-#define ICON_INFO(i)
-
-#undef ICON_INFO_ELEMENT
-#define ICON_INFO_ELEMENT
-
-#undef ICON
-#define ICON iconElement_t
-
-#include "iconFr.h"
-#include "iconPlay.h"
-#include "iconPause.h"
-#include "iconStop.h"
-#include "iconFf.h"
-
-static const ICON* const iconList [] =
-{
- &iconFr,
- &iconPlay,
- &iconPause,
- &iconStop,
- &iconFf
-};
-
-//-----------------------------------------------------------------------------
-#define HOURGLAS_CENTER 120
-void test_DrawIcon (int x, int y, int h, int w)
-{
- int i;
- int ix;
-
- lcd_fill (LCD_COLOR_W);
-
- draw_block (LCD_SIZE_X / 2, LCD_SIZE_Y / 2,
- 32, HOURGLAS_CENTER - LCD_SIZE_Y / 2 + 2,
- LCD_COLOR_LG, DRAW_NORCU);
- draw_block (LCD_SIZE_X / 2, HOURGLAS_CENTER,
- 32, LCD_SIZE_Y - HOURGLAS_CENTER, LCD_COLOR_DG, DRAW_NORCU);
-
- drawIcon (0, 10, &iconLeo_gray_128, LCD_COLOR_B, DRAW_PUT);
-
- drawIcon (LCD_SIZE_X / 2 - iconHourglas.width / 2, HOURGLAS_CENTER - iconHourglas.height / 2,
- &iconHourglas, LCD_COLOR_B, DRAW_PUT);
- drawIcon (LCD_SIZE_X / 2 + 32 - iconHourglas_t.width / 2, HOURGLAS_CENTER - iconHourglas.height / 2,
- &iconHourglas_t, LCD_COLOR_B, DRAW_ALPHA);
-
-#if TRANSPARENT_CROSS
- drawIcon (x, y, &ICON_CROSS, LCD_COLOR_B, DRAW_ALPHA);
-#else
- drawIcon (x, y, &ICON_CROSS, LCD_COLOR_B, DRAW_PUT);
-#endif
-
- //-------------------------------------------------------
- ix = w;
- for (i = 0; i < NUM_OF_ELEMENTS (iconList); i++)
- {
- drawIconExt (ix, LCD_SIZE_Y-1 - h,
- iconList [i]->data,
- iconList [i]->width, iconList [i]->height, ICON_GRAY,
- LCD_COLOR_B, DRAW_NORCU);
- ix += w + iconList [i]->width;
- }
- //-------------------------------------------------------
- draw_numU (0, 0,
- x, 0, LCD_COLOR_B, DRAW_NORCU);
- draw_numU (30, 0,
- y, 0, LCD_COLOR_B, DRAW_NORCU);
-} // test_DrawIcon
-//-----------------------------------------------------------------------------
-
-
-
-//-----------------------------------------------------------------------------
-void test_icon ()
-{
- int i;
- int x, y;
- int w = 0;
- int h = 0;
-
- set_font (SMALLFONT);
-
- x = LCD_SIZE_X / 2 - ICON_CROSS.width / 2;
- y = LCD_SIZE_Y / 2 - ICON_CROSS.height / 2;
-
- for (i = 0; i < NUM_OF_ELEMENTS (iconList); i++)
- {
- w += iconList [i]->width;
- h = max (h, iconList [i]->height);
- }
- w = LCD_SIZE_X - w;
- w /= NUM_OF_ELEMENTS (iconList) + 1;
-
- test_DrawIcon (x, y, h, w);
-
- //waitKeyUpDown ();
-
- setBacklight (BL_AUTO);
- while (KEY_Exit) {};
- waitKeyUp ();
- while (1)
- {
- if (isKeyPressed ())
- {
- setBacklight (BL_AUTO); // pwm value
- if (KEY_Exit)
- return;
- //---------------------------------------
-
- if (KEY_Up)
- y--;
- else if (KEY_Down)
- y++;
- else if (KEY_Left)
- x--;
- else if (KEY_Right)
- x++;
- else if (KEY_OK)
- {
- x += 10;
- y -= 10;
- }
- else
- {
- unsigned char num = getKeynum ();
- if (num >= 16 && num <= 25)
- {
- if (num == 25)
- num = 0;
- else
- num -= 15;
-
- x += num;
- y -= num;
- }
- }
-
- if (x >= LCD_SIZE_X)
- x = 0;
- else if (x < 0)
- x = LCD_SIZE_X-1 - ICON_CROSS.width;
-
- if (y >= LCD_SIZE_Y)
- y = 0;
- else if (y < 0)
- y = LCD_SIZE_Y-1 - ICON_CROSS.height;
-
- test_DrawIcon (x, y, h, w);
-
- //---------------------------------------
- waitKeyUp ();
- } // if (isKeyPressed ())
- } // while (1)
-} // test_icon
-//-----------------------------------------------------------------------------
-
-
-
-void fp1 ()
-{
- unsigned char x,y;
- lcd_fill (LCD_COLOR_W);
- set_font(SMALLFONT);
-
- for(x=0;x<16;x++)
- {
- for(y=0;y<16;y++)
- {
- draw_char (x*8, (y*8)+16,x*16+y, LCD_COLOR_B, DRAW_PUT);
- }
- }
- waitKeyUpDown();
-}
-
-extern volatile unsigned char bl_val;
-
-void set_bl(void)
-{
- lcd_fill (LCD_COLOR_W);
- set_font(SMALLFONT);
-
- draw_string (0, 20, "Set Backlight:", LCD_COLOR_B, DRAW_PUT);
- draw_string (0, 30, "Prog/Vol+: brighter", LCD_COLOR_B, DRAW_PUT);
- draw_string (0, 40, "Prog/Vol-: darker", LCD_COLOR_B, DRAW_PUT);
- draw_numU (0, 64, bl_val, 0, LCD_COLOR_B, DRAW_PUT);
-
- while(!KEY_Exit)
- {
- waitKeyUpDown();
- bl_val &= 0x3F;
- if(KEY_Pplus || KEY_Pminus || KEY_Vplus || KEY_Vminus)
- {
- draw_block(0,64,32,8,3,DRAW_ERASE);
- if(KEY_Pplus)
- bl_val++;
- if(KEY_Pminus)
- bl_val--;
- if(KEY_Vplus)
- bl_val+=10;
- if(KEY_Vminus)
- bl_val-=10;
- draw_numU (0, 64, bl_val, 0, LCD_COLOR_B, DRAW_PUT);
- }
- }
-
-}
-
-/*
-void softfunc1(void)
-{
- set_font(BOLDFONT);
-draw_block (0, 80, LCD_SIZE_X, 20, LCD_COLOR_B, DRAW_ERASE);
-draw_string (0, 80, "softfunc1 called", LCD_COLOR_B, DRAW_PUT);
-while(!KEY_Exit) {};
-}
-*/
-
-void draw_itile(unsigned char x, unsigned char y, unsigned char type)
-{
-again:
- if(type < 0xF0)
- {
- if(type & 0x10)
- draw_block(x+1, y+1, 2, 2, 3, DRAW_XOR);
- if(type & 0x20)
- draw_block(x+5, y+1, 2, 2, 3, DRAW_XOR);
- if(type & 0x40)
- draw_block(x+1, y+5, 2, 2, 3, DRAW_XOR);
- if(type & 0x80)
- draw_block(x+5, y+5, 2, 2, 3, DRAW_XOR);
- }
-
- type <<= 4;
-
- if(type)
- {
- x += 8;
- goto again;
- }
-}
-
-const char itilemap[7][7] =
-{
- { 0x00, 0x00, 0x00, 0x6C, 0x90, 0x00, 0x00 },
- { 0x00, 0x00, 0x66, 0x6C, 0x99, 0x90, 0x00 },
- { 0x00, 0x06, 0x66, 0x6C, 0x99, 0x99, 0x00 },
- { 0x00, 0x66, 0x66, 0x6C, 0x99, 0x99, 0x90 },
- { 0x00, 0x66, 0x66, 0x6C, 0x99, 0x99, 0x90 },
- { 0x06, 0x66, 0x66, 0x6C, 0x99, 0x99, 0x99 },
- { 0x0A, 0xAA, 0xAA, 0xA0, 0x55, 0x55, 0x55 }
-};
-
-void illusion(void)
-{
- int x,y,z;
-
- lcd_fill (LCD_COLOR_W);
- z = 1;
- for(x=0;x<15;x++)
- {
- for(y=0;y<15;y++)
- {
- if(z++ & 0x01)
- {
- draw_block (2+ (x*8), 16+ (y*8), 8, 8, LCD_COLOR_B, DRAW_PUT);
- }
- }
- }
-
- for(y=0;y<7;y++)
- {
- for(x=0;x<7;x++)
- {
- draw_itile(2+(x*16), 24+(y*8), itilemap[y][x]);
- }
- }
-
- for(y=0;y<6;y++)
- {
- for(x=0;x<7;x++)
- {
- draw_itile(2+(x*16), 80+(y*8), ~itilemap[5-y][x]);
- }
- }
-
-
- waitKeyUpDown();
-}
-
-void test_bl(void)
-{
- setBacklight(BL_AUTO);
-}
-
-void bat_dbg(void)
-{
- bat_state ^= BAT_DEBUG;
-}
-
-void tkey(void)
-{
- while(1)
- {
- waitKeyUpDown();
- setBacklight(BL_AUTO);
- lcd_fill (LCD_COLOR_W);
- set_font(SMALLFONT);
- draw_hexW (0, 16, keys[0], LCD_COLOR_B, DRAW_PUT);
- draw_hexW (0, 24, keys[1], LCD_COLOR_B, DRAW_PUT);
- }
-}
-
-// plot a graph RSSI/t
-void RSSI_monitor(void) {
- unsigned char row = 0;
- int rssi_dBm;
- unsigned char rssi;
- volatile unsigned long timer = 0;
- unsigned char x;
- lcd_fill (LCD_COLOR_W);
-
- // title
- set_font(BOLDFONT);
- draw_string (0, 0, "RF test", LCD_COLOR_B, DRAW_PUT);
- draw_block (0,10,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT);
- set_font(SMALLFONT);
-
- RF_changestate(RFrx);
-
- // coordinate system
- // x (time)
- draw_block (19,20,102,1, LCD_COLOR_B, DRAW_PUT);
-
- // y (RSSI)
- draw_block (19,20,1,129, LCD_COLOR_B, DRAW_PUT); // axis
- for(x=20;x<150;x+=10) // ticks
- draw_pixel (18,x, LCD_COLOR_B, DRAW_PUT);
- for(x=20;x<160;x+=20) // value
- draw_numU (0, x-3, x-20, 0, LCD_COLOR_B, DRAW_PUT);
- draw_string (0,152, "-dBm", LCD_COLOR_B, DRAW_PUT); // label
-
-
- while(KEY_Exit) {};
- while (!KEY_Exit)
- {
- // wait
- while (timer)
- {
- if(KEY_Exit)
- timer = 0;
- }
- addTimeout(&timer,20); // next sample in n*5 ms (100 ms)
-
- // read RSSI
- VICIntEnClr = INT_EINT0;
- rssi = cc1100_read1(RSSI);
- VICIntEnable = INT_EINT0;
-
- // scale
- if(rssi & 0x80)
- rssi_dBm = (rssi-256)/2-75;
- else
- rssi_dBm = rssi/2-75;
-
- if(rssi_dBm < 0)
- rssi_dBm = ~rssi_dBm + 1;
- else
- rssi_dBm = 0;
-
- // plot
- draw_block (row+20,21,1,128, LCD_COLOR_B, DRAW_ERASE);
- draw_pixel(row+20, rssi_dBm+30, LCD_COLOR_B, DRAW_PUT);
- draw_pixel (row+20,19, LCD_COLOR_B,DRAW_ERASE);
-
- // next time
- row++;
- if(row == 100)
- row=0;
- draw_pixel (row+20, 19, LCD_COLOR_B, DRAW_PUT);
- //draw_block (row+20,30,1,100, LCD_COLOR_B, DRAW_PUT);
- }
- removeTimeout(&timer);
- RF_changestate(RFwor);
-}
-
-
-// plot incoming radio data in single shot mode
-// CC1100 datasheet section 31.1 Asynchronous Operation, p. 57
-// 1 px is 50 ys
-void RF_viewer(void) {
- unsigned char row = 0;
- unsigned char col = 16;
-
- lcd_fill (LCD_COLOR_W);
- set_font(BOLDFONT);
- draw_string (0, 0, "RF viewer", LCD_COLOR_B, DRAW_PUT);
- draw_block (0,10,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT);
- set_font(SMALLFONT);
-
- RFasyncmode(true);
-
- //cc1100_write1(FREQ2,0x20);
- //cc1100_write1(FREQ1,0x29);
- //cc1100_write1(FREQ0,0x3E);
-
- //cc1100_write1(AGCCTRL2,0x07);
- //cc1100_write1(AGCCTRL1,0x00);
- //cc1100_write1(AGCCTRL0,0x91);
- //~ cc1100_write1(AGCCTRL2,0x03);
- //~ cc1100_write1(AGCCTRL1,0x00);
- //~ cc1100_write1(AGCCTRL0,0x92);
-
-//~ #define RF2UART
-
-#ifdef RF2UART
- unsigned char bits=0;
- unsigned char bitno=7;
-
- // set uart baudrate
- serial_setbrg(230400); // fastest
-
- // set frequency
- //~ cc1100_write1(FREQ2,0x10);
- //~ cc1100_write1(FREQ1,0x12);
- //~ cc1100_write1(FREQ0,0xF6);
-
- // set gain // OOK/ASK optima. see TI DN022
- //~ cc1100_write1(AGCCTRL2,0x07); // A
- cc1100_write1(AGCCTRL2,0x03); // B
- cc1100_write1(AGCCTRL1,0x00);
- //~ cc1100_write1(AGCCTRL0,0x92); // A
- cc1100_write1(AGCCTRL0,0x91); // B
-#endif
-
- cc1100_strobe(SFRX);
- cc1100_strobe(SRX);
-
- while(KEY_Exit) {};
- while(!KEY_Exit)
- {
-#ifdef RF2UART
- //~ waitus(100); // 1 byte -> 10 bits / 115200 baud = 86,8 ys
- waitus(50); // 1 byte -> 10 bits / 230400 baud = 43,4 ys
-
- if (!(FIOPIN0 & GDO2)) // get rf state as bit
- bits |= (1< uart
- {
- bitno = 7;
- serial_putbyte(bits);
- bits = 0;
- }
- else
- bitno--; // advance
-
-#else
- waitus(50);
-
- draw_block(row,col,2,8,3,DRAW_ERASE);
-
- // plot: get data from CC1100's GDO2 on P0.24 (fast IO)
- if((FIOPIN0 & GDO2))
- draw_pixel (row,col+2, LCD_COLOR_B, DRAW_PUT);
- else
- draw_pixel (row,col, LCD_COLOR_B, DRAW_PUT);
-
- // advance plot position
- row++;
- if(row == 127)
- {
- col +=8;
- row=0;
-
- // screen is full, wait for keypress
- if(col >140)
- {
- wait5ms();
- col = 16;
- while(!(keys[0] || keys[1]));// && !(FIOPIN0 & GDO2)); // this seems strange, alternatives: while(!ANYKEY) or isKeyPressed
- }
- }
-#endif
- }
- RFasyncmode(false);
-}
-
-
-void test_RF(void) {
-
- unsigned char destAddr;
-
- lcd_fill (LCD_COLOR_W);
- destAddr = 0x01;
-
- set_font(BOLDFONT);
- draw_string (0, 0, "RF test", LCD_COLOR_B, DRAW_PUT);
- draw_block (0,10,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT);
- draw_block (0,149,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT);
- draw_string (1, 15, "Destination address", LCD_COLOR_B, DRAW_PUT);
- set_font(SMALLFONT);
-
- draw_string (0, 60, "TV/Power Key:", LCD_COLOR_B, DRAW_PUT);
- draw_string (0, 69, "send something", LCD_COLOR_B, DRAW_PUT);
- draw_string (0, 86, "OK Key: Ping", LCD_COLOR_B, DRAW_PUT);
-
- draw_numU (1, 25, destAddr, 0, LCD_COLOR_B, DRAW_PUT);
-
- while(KEY_Exit) {};
- while(!KEY_Exit)
- {
- waitKeyUpDown();
-
-
- draw_numU (1, 25, destAddr, 0, LCD_COLOR_B, DRAW_XOR);
- if(KEY_Left) {
- destAddr--;
- }
- if(KEY_Right) {
- destAddr++;
- }
- draw_numU (1, 25, destAddr, 0, LCD_COLOR_B, DRAW_XOR);
-
-
- if(KEY_OK)
- {
- unsigned char ping;
- draw_block (0,40,LCD_SIZE_X,10,3,DRAW_ERASE);
- draw_string (0, 40, "send ping", LCD_COLOR_B, DRAW_PUT);
-
- ping = RF_sendping(destAddr);
-
- draw_block (0,40,LCD_SIZE_X,10,3,DRAW_ERASE);
- if (ping) {
- draw_string (0, 40, "ping received", LCD_COLOR_B, DRAW_PUT);
- }
- else {
- draw_string (0, 40, "ping timeout", LCD_COLOR_B, DRAW_PUT);
- }
-
- }
- else if(KEY_Power)
- {
- struct RFendpoint_* cur_ep;
-
- cur_ep = openEP(0,0, packet_test);
- if(cur_ep) {
- cur_ep->dest = destAddr;
- cur_ep->data[0] = 'P';
- cur_ep->data[1] = 'W';
- cur_ep->data[2] = 0x00;
- cur_ep->bufferlen = 3;
- cur_ep->flags |= EPenabled | EPoutput | EPnewdata | EPonce | EPsendwor;
-
- RF_changestate(RFtx);
- }
- }
- else if(KEY_TV)
- {
- struct RFendpoint_* cur_ep;
-
- cur_ep = openEP(0,0, packet_test);
- cur_ep->dest = destAddr;
- cur_ep->data[0] = 'T';
- cur_ep->data[1] = 'V';
- cur_ep->data[2] = 0x00;
- cur_ep->bufferlen = 3;
- cur_ep->flags |= EPenabled | EPoutput | EPnewdata | EPonce | EPsendwor;
-
- RF_changestate(RFtx);
- } else if(KEY_1)
- {
- struct RFendpoint_* cur_ep;
-
- cur_ep = openEP(0,0, packet_test);
- if(cur_ep) {
- cur_ep->dest = destAddr;
- cur_ep->data[0] = 'X';
- cur_ep->data[1] = '1';
- cur_ep->data[2] = 0x00;
- cur_ep->bufferlen = 3;
- cur_ep->flags |= EPenabled | EPoutput | EPnewdata | EPonce;
-
- RF_changestate(RFtx);
- }
- }
- else if(KEY_2)
- {
- struct RFendpoint_* cur_ep;
-
- cur_ep = openEP(0,0, packet_test);
- cur_ep->dest = destAddr;
- cur_ep->data[0] = 'X';
- cur_ep->data[1] = '2';
- cur_ep->data[2] = 0x00;
- cur_ep->bufferlen = 3;
- cur_ep->flags |= EPenabled | EPoutput | EPnewdata | EPonce ;
-
- RF_changestate(RFtx);
- }
- }
-}
-
-
-void test_irrec(void) {
-
- struct RAWcmd_ test_cmd;
-
- test_cmd.tval = 0;
-
- lcd_fill (LCD_COLOR_W);
-
- set_font(BOLDFONT);
- draw_string (0, 0, "IR receive test", LCD_COLOR_B, DRAW_PUT);
- draw_block (0,10,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT);
- draw_block (0,149,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT);
- set_font(SMALLFONT);
-
- draw_string (0, 20, "OK Key:", LCD_COLOR_B, DRAW_PUT);
- draw_string (0, 29, "receive IR command", LCD_COLOR_B, DRAW_PUT);
-
- draw_string (0, 40, "Mute Key:", LCD_COLOR_B, DRAW_PUT);
- draw_string (0, 49, "send received command", LCD_COLOR_B, DRAW_PUT);
-
- while(KEY_Exit) {};
- while(!KEY_Exit)
- {
- waitKeyUpDown();
- if(KEY_OK)
- {
- getIR_test(&test_cmd);
- }
- if(KEY_Mute)
- {
- RAW_Send((unsigned long)&test_cmd);
- while(KEY_Mute)
- RAW_Repeat();
- RAW_Stop();
- }
- }
- setEncoder(irDevTab.device[irDevTab.active].encoder, irDevTab.device[irDevTab.active].set);
-}
-
-void erase_flash1(void)
-{
- eraseFlash(1);
-}
-
-void test_sid(void) {
- unsigned char temp;
-
- lcd_fill (LCD_COLOR_W);
-
- set_font(BOLDFONT);
- draw_string (0, 0, "SID", LCD_COLOR_B, DRAW_PUT);
- draw_block (0,10,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT);
- draw_block (0,149,LCD_SIZE_X,2, LCD_COLOR_B, DRAW_PUT);
- set_font(SMALLFONT);
-
- draw_string (0, 20, "A B C D", LCD_COLOR_B, DRAW_PUT);
- draw_string (0, 29, "set envelope", LCD_COLOR_B, DRAW_PUT);
-
- draw_string (0, 45, "OK", LCD_COLOR_B, DRAW_PUT);
- draw_string (0, 54, "play a song", LCD_COLOR_B, DRAW_PUT);
-
- draw_string (0, 70, "1-7", LCD_COLOR_B, DRAW_PUT);
- draw_string (0, 79, "play a note", LCD_COLOR_B, DRAW_PUT);
-
- draw_string (0, 95, "color keys", LCD_COLOR_B, DRAW_PUT);
- draw_string (0, 104, "set waveform", LCD_COLOR_B, DRAW_PUT);
-
- draw_string (0, 120, "Mute", LCD_COLOR_B, DRAW_PUT);
- draw_string (0, 129, "Raiders March", LCD_COLOR_B, DRAW_PUT);
-
- sysInfo |= SYS_IR;
- SID.noise = 0xaa;
- playstate = 0x00;
- playtone[0] = 0;
- playtone[1] = 0;
- playtone[2] = 0;
- temp = 0;
- PWMPR = 0;
- switchSound(SOUND_ON);
- SID.flags |= SIDenable;
- SIDsetwave(0,TRIANGLE);
- SIDsetadsr(0,8,8,10,8);
-
- while(KEY_Exit) {};
- do {
- waitKeyUp();
- if (temp)
- {
- SID.reg[REG_Control] &= ~GATE;
- temp = 0;
- }
- waitKeyDown();
- if (KEY_1)
- {
- SIDsetfrq(0,4455);
- SID.reg[REG_Control] |= GATE;
- temp =1;
- }
- else if (KEY_2)
- {
- SIDsetfrq(0,5001);
- SID.reg[REG_Control] |= GATE;
- temp =1;
- }
- else if (KEY_3)
- {
- SIDsetfrq(0,5613);
- SID.reg[REG_Control] |= GATE;
- temp =1;
- }
- else if (KEY_4)
- {
- SIDsetfrq(0,5947);
- SID.reg[REG_Control] |= GATE;
- temp =1;
- }
- else if (KEY_5)
- {
- SIDsetfrq(0,6676);
- SID.reg[REG_Control] |= GATE;
- temp =1;
- }
- else if (KEY_6)
- {
- SIDsetfrq(0,7493);
- SID.reg[REG_Control] |= GATE;
- temp =1;
- }
- else if (KEY_7)
- {
- SIDsetfrq(0,8411);
- SID.reg[REG_Control] |= GATE;
- temp =1;
- }
- else if (KEY_A)
- {
- SIDsetadsr(0,0,10,7,5);
- }
- else if (KEY_B)
- {
- SIDsetadsr(0,0,10,0,10);
- }
- else if (KEY_C)
- {
- SIDsetadsr(0,8,8,10,6);
- }
- else if (KEY_D)
- {
- SIDsetadsr(0,0,0,15,1);
- }
- else if (KEY_Red)
- {
- SIDsetwave(0,TRIANGLE);
- }
- else if (KEY_Green)
- {
- SIDsetwave(0,SAWTOOTH);
- }
- else if (KEY_Yellow)
- {
- SID.reg[REG_PWhi] = 0x08;
- SIDsetwave(0,RECTANGLE);
- }
- else if (KEY_Blue)
- {
- SIDsetwave(0,NOISE);
- }
- else if (KEY_OK)
- {
- if (playstate == 0)
- {
- playstate = 1;
-
- SIDsetadsr(1,0,5,0,5);
- SIDsetwave(1,SAWTOOTH);
- SID.reg[7+REG_PWhi] = 0x06;
- tonelen[1] = 0;
- playtone[1] = (unsigned char*)&song3[0];
-
- SIDsetadsr(2,0,9,0,9);
- SIDsetwave(2,RECTANGLE);
- SID.reg[14+REG_PWhi] = 0x08;
- tonelen[2] = 0;
- playtone[2] = (unsigned char*)&song2[0];
-
- playtone_cb = addTimerCB(SIDplaytone, 4);
- startCB(playtone_cb);
- }
- } else if (KEY_Mute)
- {
- if (playstate == 0)
- {
- playstate = 1;
-
- playtone[0] = (unsigned char*)&song1[0];
-
- playcounter = 0;
- playcountermax = sizeof(song1)/14;
-
- playtone_cb = addTimerCB(SIDplaydump, 4);
- startCB(playtone_cb);
- }
- }
- } while (!KEY_Exit);
- sysInfo &= ~SYS_IR;
- switchSound(SOUND_OFF);
- SID.flags &= ~SIDenable;
-}
-
-void test_click(FORM* form, CONTROL* control) {
- msgbox(45,BC_OKOnly | BC_DefaultButton1,control->caption);
- form_draw(form);
-}
-
-void test2_click(FORM* form, CONTROL* control) {
- beep(0);
-}
-
-void test3_click(FORM* form, CONTROL* control) {
- beep(1);
-}
-
-void test_numbox(FORM* form, CONTROL* control) {
- msgbox(30,BC_OKOnly | BC_DefaultButton1,"numbox click");
- form_draw(form);
-}
-
-void test_numchange(FORM* form, CONTROL* control) {
- unsigned short x;
- x=((NUMBOX*)control)->value;
- if(x==50) {
- x=msgbox(30,BC_OKOnly | BC_DefaultButton1,"numbox =50");
- form_draw(form);
- }
-}
-
-void test_change(FORM* form, CONTROL* control) {
- msgbox(30,BC_OKOnly | BC_DefaultButton1,"geaendert");
- form_draw(form);
-}
-
-void formload (FORM* form)
-{
- struct RFendpoint_* cur_ep;
-
- cur_ep = openEP(&(form->controls[7])->tag1, 1, packet_RFenc);
- form->tag = (unsigned long) cur_ep;
- if (cur_ep)
- {
- cur_ep->flags |= EPenabled;
- RF.flags &= ~WORenabled;
- RF_changestate(RFrx);
- }
-
- msgbox(50,BC_OKOnly | BC_DefaultButton1,"Form open");
-}
-
-void formclose (FORM* form)
-{
-
- if (form->tag)
- {
- closeEP((struct RFendpoint_*)form->tag);
- RF_changestate(RFwor);
- }
-
- msgbox(50,BC_OKOnly | BC_DefaultButton1,"Form close");
-
-}
-
-void test_timer (FORM* form)
-{
- struct RFendpoint_* cur_ep;
-
- cur_ep = (struct RFendpoint_*)form->tag;
- if (cur_ep->flags & EPnewdata)
- {
- cur_ep->flags &= ~EPnewdata;
- control_draw(form->controls[7], (form->sel == 7));
- }
-}
-
-void test_controls(void) {
-
- const char* listbox1items[5] = { "Listitem1",
- "Listitem2",
- "Listitem3",
- "Listitem4",
- "Listitem555"};
-
- char txtbuffer[20];
- const LABEL label1 = {BC_Label,0,15,40,10,SMALLFONT,0,"label1",test_click};
- const LABEL label2 = {BC_Labelnotab,50,15,40,9,BOLDFONT,0,"label2",0};
- const LABEL label3 = {BC_Labelnotab,0,110,40,9,BOLDFONT,0,"Numbox:",0};
- const BUTTON button1 = {BC_Button,0,30,40,15,SMALLFONT,0,"Button1",test_click};
- const BUTTON button2 = {BC_Button,0,50,40,16,SMALLFONT,0,"Button2",test2_click};
- const BUTTON button3 = {BC_Button,0,70,40,16,SMALLFONT,0,"Button3",test3_click};
- const BUTTON button4 = {BC_Button | BC_Disabled,0,90,40,16,SMALLFONT,0,"Button4",test_click};
- NUMBOX numbox1 = {BC_Numbox,0,120,20,9,SMALLFONT,1,1,500,test_numbox,test_numchange};
- TXTBOX txtbox1 = {BC_Txtbox,0,135,120,10,SMALLFONT,20,0,txtbuffer,test_click,test_change};
- DATEBOX datebox1 = {BC_Datebox,50,30,58,9,SMALLFONT,0,{0x01, 0x02, 0x01, 0x08},NULL,test_change};
- TIMEBOX timebox1 = {BC_Timebox,50,50,58,9,SMALLFONT,0,{0x00, 0x00, 0x12, 0x00},NULL,test_change};
- LISTBOX listbox1 = {BC_Listbox,50,70,58,10,SMALLFONT,0,5,(char**)listbox1items,NULL,test_change};
-
- CONTROL* controls[12] = { (CONTROL*)&label1,
- (CONTROL*)&label2,
- (CONTROL*)&label3,
- (CONTROL*)&button1,
- (CONTROL*)&button2,
- (CONTROL*)&button3,
- (CONTROL*)&button4,
- (CONTROL*)&numbox1,
- (CONTROL*)&txtbox1,
- (CONTROL*)&datebox1,
- (CONTROL*)&timebox1,
- (CONTROL*)&listbox1};
-
- FORM form = {"Controls","footer\tTab\tTab",formload,formclose,test_timer,0,controls,3,12,0,10};
- memcpy(txtbuffer,"Textbox",8);
-
- form_exec(&form);
-
-}
-
-/*
-struct MENU_ENTRY softMenuEntries[16];
-struct MENU softMenu;
-*/
-
-const struct MENU_ENTRY testMenuEntries[] =
-{
- {RTCtimer_edit, 0, FUNCENTRY, "Timer", "Timer" },
- {test_icon, 0, FUNCENTRY, "Icon Demo", "Draw icons" },
- {test_irrec, 0, FUNCENTRY, "Receive IR", "Receive IR" },
- {test_RF, 0, FUNCENTRY, "RF test", "Test RF" },
- {RSSI_monitor, 0, FUNCENTRY, "RSSI Monitor", "RSSI Monitor" },
- {RF_viewer, 0, FUNCENTRY, "RF viewer", "RF viewer" },
- {test_circle, 0, FUNCENTRY, "Circle", "Draw circles" },
- {test_controls, 0, FUNCENTRY, "Controls", "Control elements" },
- {test_frame, 0, FUNCENTRY, "Frame", "Draw frame" },
- {test_frame2, 0, FUNCENTRY, "Frame2", "Draw frame2" },
- {draw_fonts, 0, FUNCENTRY, "Fonts", "Draw fonts" },
- {test_logo, 0, FUNCENTRY, "Logo", "Draw logo" },
- {fp1, 0, FUNCENTRY, "Charset", "Draw charset" },
- {illusion, 0, FUNCENTRY, "Illusion", "Optical illusion" },
- {test_bl, 0, FUNCENTRY, "Auto backlight", "Test auto backlight" },
- {bat_dbg, 0, FUNCENTRY, "Bat debug", "Show/hide bat values"},
- {tkey, 0, FUNCENTRY, "Keytest", "Test keypad" },
- {erase_flash1, 0, FUNCENTRY, "Erase Flash1", "Erase Flash1" },
- {test_sid, 0, FUNCENTRY, "Sound", "Play music" },
- {test_movearound, 0, FUNCENTRY, "Move", "Slowly move a cursor"},
-// { 0, (void*)&softMenu, MENUENTRY, "Soft-Test", "access soft" }
-};
-
-const struct MENU testMenu =
-{
- NUM_OF_ELEMENTS (testMenuEntries), (MENU_ENTRY*)&testMenuEntries, "Test Menu"
-};
-
-/*
-void testmenu_init(void)
-{
- testdata1 = 0;
- testdata2 = 0;
-
- for(i=0;i<16;i++)
- {
- softMenuEntries[i].exec = 0;
- softMenuEntries[i].data = 0;
- softMenuEntries[i].type = 0;
- softMenuEntries[i].name = 0;
- softMenuEntries[i].help = 0;
- }
-
- softMenuEntries[0].exec = softfunc1;
- softMenuEntries[0].data = 0;
- softMenuEntries[0].type = FUNCENTRY;
- softMenuEntries[0].name = "softfunc test";
- softMenuEntries[0].help = "run softfunc test";
-
-
- softMenu.name = "Soft Menu";
- softMenu.num_entries = 1;
- softMenu.entry = softMenuEntries;
-
-}
-*/
-
diff --git a/boop/gui/testmenu.h b/boop/gui/testmenu.h
deleted file mode 100644
index 79f990e..0000000
--- a/boop/gui/testmenu.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- testmenu.h - testmenu for menuing system
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef TESTMENU_H
-#define TESTMENU_H
-
-extern struct MENU testMenu;
-//void testmenu_init(void);
-void test_irrec(void);
-
-#endif
diff --git a/boop/infrared/infrared.c b/boop/infrared.c
similarity index 51%
rename from boop/infrared/infrared.c
rename to boop/infrared.c
index 5e3aa45..7fc9312 100644
--- a/boop/infrared/infrared.c
+++ b/boop/infrared.c
@@ -16,55 +16,47 @@
along with this program. If not, see .
*/
-#include "global.h"
#include "infrared.h"
-#include "infraredirq.h"
#include "irq.h"
#include "lpc2220.h"
#include "keyboard.h"
-#include "encoders.h"
-#include "codes.h"
-#include "ir_selector.h"
-#include "pwm.h"
-volatile unsigned char mod_enable;
-volatile unsigned char hi_border;
-volatile unsigned char lo_border;
-volatile unsigned int cycles;
-volatile unsigned long keyMap[42];
+#include "externs.h"
+
+static unsigned char c_cnt;
+static unsigned int b_len;
+
+unsigned char mod_enable;
+unsigned char hi_border;
+unsigned char lo_border;
+unsigned int cycles;
ir_fn irEncoder;
-ir_sfn irSend;
+ir_fn irSend;
ir_fn irRepeat;
ir_fn irStop;
-unsigned char act_encoder, act_set;
+const struct irModule defModule = { defIR, defSender, defRepeater, defStopper, 20, 0, 3 };
-const struct irModule defModule = { defIR, defSender, defRepeater, defStopper, 50, 1, 4 };
-void dummy(void)
-{
- irStop = RC_setting; //make compiler happy for select_ir in mainmenu
-}
+unsigned long keyMap[42];
void initIR(void)
{
-// irStop = select_ir; //make compiler happy for select_ir in mainmenu
setIR(defModule);
}
void startIrIRQ(void)
{
- T1TCR = 0x03;
+ T1TCR = 0x02;
T1TC = 0;
T1PC = 0;
T1PR = 0x00;
-// T1PR = 0x01;
T1MCR = 0x03;
+ T1TCR = 0x01;
VICVectAddr1 = (unsigned long)&(irIRQ);
VICVectCntl1 = VIC_SLOT_EN | INT_SRC_TIMER1;
- //VICIntSelect |= INT_TIMER1;
VICIntEnable = INT_TIMER1;
}
@@ -75,25 +67,21 @@ void setIR(struct irModule module)
irSend = module.sender;
irRepeat = module.repeater;
irStop = module.stopper;
-// setIRspeed(module);
T1MR0 = module.tval;
hi_border = module.hi_border;
lo_border = module.lo_border;
cycles = 100;
- ir.state = 0x00;
- ir.actcmd = 0;
- ir.cmd = 0;
- T1TCR = 0x03;
+ T1TCR = 0x01;
}
/* Stubs for various interrupts (may be replaced later) */
/* ---------------------------------------------------- */
-void __attribute__ ((section(".text.fastcode"))) defIR(void)
+void defIR(void)
{
return;
}
-void defSender(unsigned long cmd)
+void defSender(void)
{
return;
}
@@ -107,82 +95,87 @@ void defStopper(void)
return;
}
+void __attribute__ ((interrupt("IRQ"))) irIRQ(void)
+{
+ c_cnt++;
+ if(c_cnt <= hi_border)
+ {
+ FIOSET0 = (mod_enable<<21);
+ }
+ else
+ {
+ FIOCLR0 = (1<<21);
+ if(c_cnt >= lo_border)
+ {
+ c_cnt = 0;
+ b_len++;
+ if(b_len >= cycles)
+ {
+ irEncoder();
+ b_len = 0;
+ }
+ }
+ }
+
+ T1IR = 1;
+ VICVectAddr = 0;
+}
+
void runIR(void)
{
T1TCR = 0x01;
- PWM_set_IR_duty_cycle(0);
-
-}
-
-void setIRspeed(struct irModule module)
-{
- PWM_set_frequency(15000000 / (module.tval * module.lo_border));
- ir.duty_cycle =(module.hi_border * 100) / module.lo_border;
}
void stopIR(void)
{
T1TCR = 0x03;
- PWM_set_IR_duty_cycle(0);
-
}
-void copyMapC(unsigned char *map)
+#define doKey( _X, _Y ) if(_X) return keyMap[_Y]; else
+
+unsigned long getCode(void)
{
- int x;
- for(x=0;x<42;x++)
- {
- keyMap[x] = map[x];
- }
-}
-
-void copyMapPC(unsigned int pre, unsigned char *map)
-{
- int x;
- for(x=0;x<42;x++)
- {
- if(map[x] != 0)
- keyMap[x] = pre | map[x];
- else
- keyMap[x] = 0x00000000;
- }
-}
-
-void copyMapS(unsigned short *map)
-{
- int x;
- for(x=0;x<42;x++)
- {
- keyMap[x] = map[x];
- }
-}
-
-void copyMapI(unsigned int *map)
-{
- int x;
- for(x=0;x<42;x++)
- {
- keyMap[x] = map[x];
- }
-}
-
-unsigned long setEncoder( unsigned char x, unsigned char y )
-{
- if(EncIsValid(x,y)) {
- act_encoder = x;
- act_set = y;
- encoders.encoder[act_encoder].init(act_set);
- return(1);
- }
- return(0);
-}
-
-unsigned long getCode(void) {
-
- int keynum = getKeynum();
-
- if (keynum < 42)
- return keyMap[keynum];
- else
+ doKey(KEY_A, 0);
+ doKey(KEY_B, 1);
+ doKey(KEY_C, 2);
+ doKey(KEY_D, 3);
+ doKey(KEY_Betty, 4);
+ doKey(KEY_Exit, 5);
+ doKey(KEY_Up, 6);
+ doKey(KEY_Down, 7);
+ doKey(KEY_Left, 8);
+ doKey(KEY_Right, 9);
+ doKey(KEY_OK, 10);
+ doKey(KEY_Vplus, 11);
+ doKey(KEY_Vminus, 12);
+ doKey(KEY_Mute, 13);
+ doKey(KEY_Pplus, 14);
+ doKey(KEY_Pminus, 15);
+ doKey(KEY_1, 16);
+ doKey(KEY_2, 17);
+ doKey(KEY_3, 18);
+ doKey(KEY_4, 19);
+ doKey(KEY_5, 20);
+ doKey(KEY_6, 21);
+ doKey(KEY_7, 22);
+ doKey(KEY_8, 23);
+ doKey(KEY_9, 24);
+ doKey(KEY_0, 25);
+ doKey(KEY_Minus, 26);
+ doKey(KEY_AV, 27);
+ doKey(KEY_Menu, 28);
+ doKey(KEY_PiP, 29);
+ doKey(KEY_AB, 30);
+ doKey(KEY_16_9, 31);
+ doKey(KEY_Info, 32);
+ doKey(KEY_VTX1, 33);
+ doKey(KEY_VTX2, 34);
+ doKey(KEY_VTX3, 35);
+ doKey(KEY_Blue, 36);
+ doKey(KEY_Yellow, 37);
+ doKey(KEY_Green, 38);
+ doKey(KEY_Red, 39);
+ doKey(KEY_TV, 40);
+ doKey(KEY_Power, 41);
return 0xFFFFFFFF;
}
diff --git a/boop/infrared.h b/boop/infrared.h
new file mode 100644
index 0000000..241c157
--- /dev/null
+++ b/boop/infrared.h
@@ -0,0 +1,60 @@
+/*
+ infrared.h - ir carrier generation and encoding core
+ Copyright (C) 2007 Ch. Klippel
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#ifndef INFRARED_H
+#define INFRARED_H
+
+typedef void(*ir_fn)(void);
+
+extern ir_fn irSend;
+extern ir_fn irRepeat;
+extern ir_fn irStop;
+
+typedef struct irModule
+{
+ ir_fn encoder;
+ ir_fn sender;
+ ir_fn repeater;
+ ir_fn stopper;
+ int tval;
+ unsigned int hi_border;
+ unsigned int lo_border;
+} irModule;
+
+extern unsigned char mod_enable;
+extern unsigned char hi_border;
+extern unsigned char lo_border;
+extern unsigned int cycles;
+extern unsigned long keyMap[42];
+
+void defIR(void);
+void defSender(void);
+void defRepeater(void);
+void defStopper(void);
+
+void irIRQ (void) __attribute__ ((interrupt("IRQ"))) ;
+
+void initIR(void);
+void startIrIRQ(void);
+void setIR(struct irModule module);
+void runIR(void);
+void stopIR(void);
+unsigned long getCode(void);
+
+#endif
+
diff --git a/boop/infrared/Make.conf b/boop/infrared/Make.conf
deleted file mode 100644
index f6aed17..0000000
--- a/boop/infrared/Make.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-THUMBSRCS := infrared.c codes.c encoders.c ir_capture.c ir_selector.c
-SRCS := infraredirq.c pwm.c
-THUMBSRCSUNOPT := ir_itt.c ir_nrc17.c \
- ir_raw.c ir_rc5.c ir_rc6.c ir_rca.c ir_rcmm.c ir_rec80.c ir_recs80.c ir_rf.c \
- ir_sirc.c ir_spaceenc.c ir_lirc.c
diff --git a/boop/infrared/codes.c b/boop/infrared/codes.c
deleted file mode 100644
index 99a5f59..0000000
--- a/boop/infrared/codes.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- codes.c - structs for accessing the infrared-codetables
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "codes.h"
-#include "ir_lirc.h"
-
-const struct TABLES_S ITT =
-{
- 4,
- {
- {
- #include "ir_codes/itt/seleco_019"
- "Seleco #19"
- },
- {
- #include "ir_codes/itt/seleco_049"
- "Seleco #49"
- },
- {
- #include "ir_codes/itt/seleco_108"
- "Seleco #108"
- },
- {
- #include "ir_codes/itt/seleco_131"
- "Seleco #131"
- },
- }
-};
-
-const struct TABLES_S NRC17 =
-{
- 2,
- {
- {
- #include "ir_codes/nrc17/dbox2"
- "DBox 2"
- },
- {
- #include "ir_codes/nrc17/grundig_tp720"
- "Grundig TP720"
- }
- }
-};
-
-
-#define RC5_STD(cmd) 0x1000 | cmd
-#define RC5X(cmd) cmd
-
-const struct TABLES_S RC5 =
-{
- 3,
- {
- {
- #include "ir_codes/rc5/tv"
- "Generic TV"
- },
- {
- #include "ir_codes/rc5/HARMONY_655"
- "Logitec Harmony"
- },
- {
- #include "ir_codes/rc5/technisat_satreceiver_103TS103"
- "SAT(103TS103)"
- }
- }
-};
-
-const struct TABLES_I RC6 =
-{
- 3,
- {
- {
- #include "ir_codes/rc6/tv"
- "RC6 TV"
- },
- {
- #include "ir_codes/rc6/dvd"
- "RC6 DVD"
- },
- {
- #include "ir_codes/rc6/ufs922"
- "UFS 922"
- }
- }
-};
-
-const struct TABLES_C RCA =
-{
- 1,
- {
- {
- #include "ir_codes/rca/xbox"
- "X-Box"
- }
- }
-};
-
-const struct TABLES_I RCMM =
-{
- 2,
- {
- {
- #include "ir_codes/rcmm/galaxis"
- "Galaxis Sat"
- },
- {
- #include "ir_codes/rcmm/ufs910"
- "UFS 910"
- }
- }
-};
-
-const struct TABLES_I REC80 =
-{
- 1,
- {
- {
- #include "ir_codes/rec80/rak_sc957wk"
- "RAK SC-957-WK"
- }
- }
-};
-
-const struct TABLES_S RECS80 =
-{
- 2,
- {
- {
- #include "ir_codes/recs80/seleco_020"
- "seleco#20"
- },
- {
- #include "ir_codes/recs80/seleco_157"
- "Seleco #157"
- }
- }
-};
-
-const struct TABLES_S SIRC =
-{
- 3,
- {
- {
- #include "ir_codes/sirc/rm-pp411"
- "RM-PP411"
- },
- {
- #include "ir_codes/sirc/tv"
- "Generic TV"
- },
- {
- #include "ir_codes/sirc/UFD400"
- "Katrein UFD400"
- }
- }
-};
-
-const struct TABLES_C SPACEENC =
-{
- 2,
- {
- {
- #include "ir_codes/spaceenc/schneider_dtv3"
- "Schneider DTV3"
- },
- {
- #include "ir_codes/spaceenc/seleco_027"
- "Seleco #27"
- }
- }
-};
-
-const struct TABLES_S IRRF =
-{
- 2,
- {
- {
- #include "ir_codes/rf/cc1100_a0"
- "RF 0"
- },
- {
- #include "ir_codes/rf/cc1100_a1"
- "RF 1"
- }
- }
-};
-
-const struct TABLES_N RAW =
-{
- 4,
- {
- {
- "RAW Set 1"
- },
- {
- "RAW Set 2"
- },
- {
- "RAW Set 3"
- },
- {
- "RAW Set 4"
- }
-
- }
-};
-
-const struct TABLES_L LIRC =
-{
- 10,
- {
- {
- #include "ir_codes/lirc/ufs922"
- "UFS 922"
- },
- {
- #include "ir_codes/lirc/str_de545"
- "STR-DE545"
- },
- {
- #include "ir_codes/lirc/ufs910"
- "UFS 910"
- },
- {
- #include "ir_codes/lirc/fs20"
- "FS20"
- },
- {
- #include "ir_codes/lirc/hx2262"
- "HX2262"
- },
- {
- #include "ir_codes/lirc/rev008340"
- "REV 008340"
- },
- {
- #include "ir_codes/lirc/olympus_rm-1"
- "Olympus RM-1"
- },
- {
- #include "ir_codes/lirc/apple_remote1"
- "Apple Remote 1st gen."
- },
- {
- #include "ir_codes/lirc/samsung_ue46b6000"
- "Samsung TV"
- },
- {
- #include "ir_codes/lirc/beo4"
- "bang & olufsen"
- }
- }
-};
diff --git a/boop/infrared/codes.h b/boop/infrared/codes.h
deleted file mode 100644
index 8188a03..0000000
--- a/boop/infrared/codes.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- codes.h - structs for accessing the infrared-codetables
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef CODES_H
-#define CODES_H
-
-typedef struct CODE_TABLE_C
-{
- const unsigned char codes[42];
- const char *name;
-} CODE_TABLE_C;
-
-typedef struct CODE_TABLE_S
-{
- const unsigned short codes[42];
- const char *name;
-} CODE_TABLE_S;
-
-typedef struct CODE_TABLE_I
-{
- const unsigned int codes[42];
- const char *name;
-} CODE_TABLE_I;
-
-typedef struct CODE_TABLE_N
-{
- const char *name;
-} CODE_TABLE_N;
-
-typedef struct CODE_TABLE_L
-{
- const unsigned long pre_data; // data which the remote sends before actual keycode
- const unsigned long post_data; // data which the remote sends after actual keycode
- const unsigned long long toggle_bit_mask; // toggle_bit
- const unsigned long gap; // time between signals
- const unsigned long repeat_gap; // time between two repeat codes
- const unsigned char bits; // bits (length of code)
- const unsigned char pre_data_bits; // length of pre_data
- const unsigned char post_data_bits; // length of post_data
- const unsigned char rc6_bit; // doubles signal length of this bit (only used for RC-6)
- const unsigned long freq; // modulation frequency
- const unsigned short flags; // flags
- const unsigned short phead,shead; // header
- const unsigned short pthree,sthree; // 3 (only used for RC-MM)
- const unsigned short ptwo,stwo; // 2 (only used for RC-MM)
- const unsigned short pone,sone; // 1
- const unsigned short pzero,szero; // 0
- const unsigned short plead; // leading pulse
- const unsigned short ptrail; // trailing pulse
- const unsigned short pfoot,sfoot; // foot
- const unsigned short pre_p,pre_s; // signal between pre_data and keycode
- const unsigned short post_p, post_s; // signal between keycode and post_code
- const unsigned short prepeat,srepeat; // indicate repeating
- const unsigned char min_repeat; // code is repeated at least x times code sent once -> min_repeat=0
- const unsigned char duty_cycle; // 0
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-#include "ir_itt.h"
-#include "ir_nrc17.h"
-#include "ir_rc5.h"
-#include "ir_rc6.h"
-#include "ir_rca.h"
-#include "ir_rcmm.h"
-#include "ir_rec80.h"
-#include "ir_recs80.h"
-#include "ir_sirc.h"
-#include "ir_spaceenc.h"
-#include "ir_rf.h"
-#include "ir_raw.h"
-#include "ir_lirc.h"
-#include "encoders.h"
-#include "codes.h"
-
-const struct ENCODERS encoders =
-{
- 13,
- {
- { ITT_Init, (void*)&ITT, 1, "ITT\0" },
- { NRC17_Init, (void*)&NRC17, 1, "NRC17\0" },
- { RC5_Init, (void*)&RC5, 1, "RC-5\0" },
- { RC6_Init, (void*)&RC6, 2, "RC-6\0" },
- { RCA_Init, (void*)&RCA, 0, "RCA\0" },
- { RCMM_Init, (void*)&RCMM, 2, "RC-MM\0" },
- { REC80_Init, (void*)&REC80, 2, "REC-80\0" },
- { RECS80_Init, (void*)&RECS80, 1, "RECS-80\0" },
- { SIRC_Init, (void*)&SIRC, 1, "SIRC\0" },
- { SPACEENC_Init,(void*)&SPACEENC, 0, "SPACEENC\0" },
- { IRRF_Init, (void*)&IRRF, 1, "RF\0" },
- { RAW_Init, (void*)&RAW, 3, "learn" },
- { LIRC_Init, (void*)&LIRC, 4, "LIRC" }
- }
-};
diff --git a/boop/infrared/encoders.h b/boop/infrared/encoders.h
deleted file mode 100644
index 194a716..0000000
--- a/boop/infrared/encoders.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- encoders.h - structs for accessing the infrared-encoders
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef ENCODERS_H
-#define ENCODERS_H
-
-#define ENC_ITT 0
-#define ENC_NRC17 1
-#define ENC_RC5 2
-#define ENC_RCA 3
-#define ENC_RCMM 4
-#define ENC_REC80 5
-#define ENC_RECS80 6
-#define ENC_SIRC 7
-#define ENC_SPACEENC 8
-#define ENC_RF 9
-#define ENC_RAW 10
-#define ENC_LIRC 11
-
-typedef void(*cfunc)(unsigned char);
-
-typedef struct IR_ENCODER
-{
- const cfunc init;
- const void* data;
- const unsigned char type;
- const char *name;
-} IR_ENCODER;
-
-typedef struct ENCODERS
-{
- const unsigned int num_encoders;
- const struct IR_ENCODER encoder[];
-} ENCODERS;
-
-extern const struct TABLES_S ITT;
-extern const struct TABLES_S NRC17;
-extern const struct TABLES_S RC5;
-extern const struct TABLES_I RC6;
-extern const struct TABLES_C RCA;
-extern const struct TABLES_I RCMM;
-extern const struct TABLES_I REC80;
-extern const struct TABLES_S RECS80;
-extern const struct TABLES_S SIRC;
-extern const struct TABLES_C SPACEENC;
-extern const struct TABLES_S IRRF;
-extern const struct TABLES_N RAW;
-extern const struct TABLES_L LIRC;
-
-#endif
diff --git a/boop/infrared/infrared.h b/boop/infrared/infrared.h
deleted file mode 100644
index 4e5665a..0000000
--- a/boop/infrared/infrared.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- infrared.h - ir carrier generation and encoding core
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef INFRARED_H
-#define INFRARED_H
-
-volatile unsigned char hi_border;
-volatile unsigned char lo_border;
-
-typedef void(*ir_fn)(void);
-typedef void(*ir_sfn)(unsigned long cmd);
-
-typedef struct irModule
-{
- ir_fn encoder;
- ir_sfn sender;
- ir_fn repeater;
- ir_fn stopper;
- unsigned char tval;
- unsigned char hi_border;
- unsigned char lo_border;
-} irModule;
-
-struct IR_VARS_ {
- union {
- struct IR_GENERAL_ { //63 Bytes
- unsigned int header_cmd;
- unsigned int startstop;
- unsigned int bit;
- unsigned int header_bit;
- unsigned int numbits;
- unsigned int wait;
- unsigned int pause;
- unsigned int leadtime;
- unsigned int bittime0;
- unsigned int bittime1;
- unsigned int togglebit;
- unsigned int len;
- unsigned int trail;
- unsigned int preamble;
- unsigned int pre;
- unsigned char prebits;
- unsigned char waittime;
- unsigned char bittime;
- } general;
- struct IR_LIRC_ { //61 Bytes
- unsigned long pre_data; // data which the remote sends before actual keycode
- unsigned long actpre_data;
- unsigned long post_data; // data which the remote sends after actual keycode
- unsigned long actpost_data;
- unsigned long cycles_counter;
- unsigned char bit;
- unsigned char stop;
- unsigned char repeats;
- } lirc;
- };
- unsigned int cmd;
- unsigned int actcmd;
- unsigned char toggle;
- unsigned char state;
- unsigned char duty_cycle;
-} ir;
-
-
-//#define setIRspeed( _m ) { if(sysInfo & 0x80) T1MR0 = _m.tval1; else T1MR0 = _m.tval; }
-//#define setIRspeed( _m ) { T1MR0 = _m.tval; }
-
-void __attribute__ ((section(".text.fastcode"))) defIR(void);
-void defSender(unsigned long cmd);
-void defRepeater(void);
-void defStopper(void);
-
-void initIR(void);
-void startIrIRQ(void);
-void setIR(struct irModule module);
-void runIR(void);
-void stopIR(void);
-void setIRspeed(struct irModule module);
-
-unsigned long setEncoder( unsigned char _x, unsigned char _y );
-
-void copyMapC(unsigned char *map);
-void copyMapPC(unsigned int pre, unsigned char *map);
-void copyMapS(unsigned short *map);
-void copyMapI(unsigned int *map);
-
-unsigned long getCode(void);
-
-#endif
-
diff --git a/boop/infrared/infrared_encoders.h b/boop/infrared/infrared_encoders.h
deleted file mode 100644
index 54a4ce8..0000000
--- a/boop/infrared/infrared_encoders.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- infraredirq.h - ir carrier generation and encoding core
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef INFRARED_ENCODERS_H
-#define INFRARED_ENCODERS_H
-
-#include "ir_nrc17.h"
-#include "ir_itt.h"
-#include "ir_rc5.h"
-#include "ir_rc6.h"
-#include "ir_rca.h"
-#include "ir_rcmm.h"
-#include "ir_rec80.h"
-#include "ir_recs80.h"
-#include "ir_sirc.h"
-#include "ir_spaceenc.h"
-
-#endif
-
diff --git a/boop/infrared/infraredirq.c b/boop/infrared/infraredirq.c
deleted file mode 100644
index 2ae58f8..0000000
--- a/boop/infrared/infraredirq.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- infraredirq.c - ir interrupt
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "infrared.h"
-#include "infraredirq.h"
-#include "irq.h"
-#include "lpc2220.h"
-#include "keyboard.h"
-#include "rf.h"
-#include "cc1100.h"
-#include "pwm.h"
-
-extern volatile unsigned char mod_enable;
-extern volatile unsigned char hi_border;
-extern volatile unsigned char lo_border;
-extern volatile unsigned int cycles;
-
-extern ir_fn irEncoder;
-
-void __attribute__ ((section(".text.fastcode"))) irIRQ(void)
-{
-
- irEncoder();
-
- if(mod_enable) {
- PWM_set_IR_duty_cycle(ir.duty_cycle);
- } else {
- PWM_set_IR_duty_cycle(0);
- }
-
- T1IR = 1;
-
-}
diff --git a/boop/infrared/infraredirq.h b/boop/infrared/infraredirq.h
deleted file mode 100644
index 27f5a48..0000000
--- a/boop/infrared/infraredirq.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- infraredirq.h - ir carrier generation and encoding core
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef INFRAREDIRQ_H
-#define INFRAREDIRQ_H
-
-void irIRQ (void) __attribute__ ((section(".text.fastcode")));
-
-#endif
-
diff --git a/boop/infrared/ir_capture.c b/boop/infrared/ir_capture.c
deleted file mode 100644
index 0b07f4a..0000000
--- a/boop/infrared/ir_capture.c
+++ /dev/null
@@ -1,710 +0,0 @@
-/*
- ir_capture.c -
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-
-#include "lcd.h"
-#include "fonty.h"
-#include "keyboard.h"
-#include "lpc2220.h"
-#include "irq.h"
-#include "backlight.h"
-#include "ir_capture.h"
-#include "global.h"
-#include "ir_raw.h"
-#include "infrared.h"
-#include "ir_selector.h"
-#include "flash.h"
-#include "controls.h"
-#include "bfs.h"
-#include "serial.h"
-#include "codes.h"
-#include "encoders.h"
-
-
-const char string_unknown[] = "";
-#define len_string_unknown 12
-
-extern volatile unsigned char autorepeat;
-extern void setSpeed(unsigned char sp);
-
-
-unsigned long waitIrHi(unsigned short* onpulse, unsigned long* time, unsigned long start) {
-
- unsigned long lowpulse;
- unsigned long l;
- unsigned long x;
-
- *onpulse = 0;
- lowpulse = 0;
- while (1) {
- T0CCR = (1<<9) | (1<<11);
- while (!(T0IR));
- T0IR = 0xff;
- T0CCR = (1<<9) | (1<<10) | (1<<11);
- l = T0CR3;
- *time = l-start + lowpulse;
- (*onpulse)++;
- x = start + *time + 30;
- while (!(T0IR)) {
- if (T0TC > x)
- return (l + lowpulse);
- }
- T0IR = 0xff;
- x = T0CR3;
- lowpulse = x-l;
- }
-}
-
-unsigned char decodewide(unsigned long value, struct widetable_* wide) {
-
- unsigned char x;
- unsigned long minvalue;
- unsigned long maxvalue;
- unsigned long dif;
-
- dif = (value / 10);
-
- if (dif < 1)
- dif = 1;
- if (value > 1)
- minvalue = value - dif;
- else
- minvalue = 0;
-
- maxvalue = value + dif;
-
- for (x=0;x < (wide->count);x++) {
- if ((wide->value[x] >= minvalue) && (wide->value[x] <= maxvalue)) {
- return x;
- }
- }
- if (wide->count < 15) {
- wide->value[wide->count] = value;
- wide->count++;
- return (wide->count -1);
- }
- else {
- return 0xff;
- }
-}
-
-//---------------------------------------------------------------------------
-// captureIR
-//---------------------------------------------------------------------------
-/* Return Values:
- 0 = OK
- 1 = too manny pulse lengths
- 2 = abort
- 3 = too long
-*/
-unsigned char captureIR(struct ir_raw_* capture) {
-
- unsigned long hightime, lowtime;
- unsigned long T0count;
- unsigned short highpulse, lowpulse;
- unsigned long T1count;
- unsigned long timeout;
- unsigned char status;
- unsigned char wide;
-
- while(ANYKEY);
-
- setSpeed(SPEED_60);
- disableIRQ();
- T0MCR = 0x00;
-
- FIODIR0 &= ~(1<<4);
- FIOCLR0 |= (1<<12);
- PINSEL1 |= (1<<27);
-
- T0CCR = (1<<9) | (1<<10) | (1<<11);
-
- capture->widetable[0].count = 0;
- capture->widetable[1].count = 0;
- capture->count = 0;
- status = 0;
-
- T0TC = 0;
- while (T0TC < 5000);
-
- T0IR = 0xff;
- while (!T0IR && !ANYKEY);
- if(!ANYKEY) {
- T0TC = 0;
- T0IR = 0xff;
- T0count = waitIrHi(&highpulse,&hightime,0);
- capture->pulsetime = (hightime * 1000) / highpulse;
- capture->data[0] = (decodewide(highpulse, &capture->widetable[1]) & 0x0F)<<4;
-
- while (!(T0IR));
- T0IR = 0xff;
- T1count= T0CR3;
- while ((capture->count < max_capture_data-1) && !status) {
- lowtime = T1count-T0count;
- T0count = waitIrHi(&highpulse,&hightime,T1count);
- lowpulse = ((lowtime *1000)+(capture->pulsetime / 2)) / capture->pulsetime;
- wide = decodewide(lowpulse, &capture->widetable[1]);
- if(wide & 0xf0)
- status = 2;
- capture->data[capture->count] |= wide;
- wide = decodewide(highpulse, &capture->widetable[1]);
- if(wide & 0xf0)
- status = 2;
- capture->count++;
- capture->data[capture->count] = wide<<4;
- timeout = T0count + 500000;
- while (!(T0IR) && !status) {
- if (T0TC > timeout)
- status =1;
- }
- T0IR = 0xff;
- T1count= T0CR3;
- }
- }
- else
- status = 3;
- if(capture->count == max_capture_data-1)
- status = 4;
- T0TC = 0;
- T0MCR = 0x03;
- FIOSET0 |= (1<<12);
- T0CCR = 0;
- T0IR = 0xff;
- enableIRQ();
- setBacklight(BL_AUTO);
- setSpeed(SPEED_30);
- return status - 1;
-}
-
-# define MAX_messages 25
-
-unsigned char compare_message(unsigned char* message1, unsigned char* message2, unsigned char len) {
-
- unsigned char x;
-
- for(x=0; x < (len-1); x++) {
- if(message1[x] != message2[x])
- return 1;
- }
- if((message1[len-1] & 0xf0) != (message2[len-1] & 0xf0))
- return 1;
- return 0;
-
-}
-
-unsigned short get_signalfree(struct ir_raw_* capture,unsigned short signalmin) {
- unsigned short signalfree;
- unsigned char i;
-
- signalfree = 32000;
- for (i=4; (i < capture->count);i++) {
- unsigned short y;
- unsigned short sum;
- sum = 0;
- for (y = i-4; y < i; y++) {
- sum += capture->widetable[1].value[(capture->data[y]) & 0x0f];
- }
- y = capture->widetable[1].value[(capture->data[i]) & 0x0f];
- if ((sum < y) && (y < signalfree) && (y > signalmin))
- signalfree=y;
- }
-
- return(signalfree);
-
-}
-
-
-//---------------------------------------------------------------------------
-// analyzeIR
-//---------------------------------------------------------------------------
-/* Return Values:
- 0 = OK
- 1 = too manny messages
- 2 = too few messages
- 3 = repeat messages not equal
- 4 = messages too long
- 5 = unknown format
-*/
-unsigned char analyzeIR1(struct ir_raw_* capture, struct RAWcmd_* cmd, unsigned char mode) {
-
- unsigned short signalfree;
- unsigned char message[MAX_messages];
- unsigned char messagecount;
- unsigned char x;
- unsigned char first;
- unsigned char middle;
- unsigned char last;
-
- clear_cmd(cmd);
- signalfree = get_signalfree(capture,1);
- if(mode)
- signalfree = get_signalfree(capture,signalfree);
-
- messagecount = 1;
- message[0] = 0;
- for(x = 0; (x < capture->count) && (messagecount < MAX_messages); x++) {
- if(capture->widetable[1].value[capture->data[x] & 0x0f] >= signalfree) {
- if(messagecount < MAX_messages)
- message[messagecount++] = x+1;
- else
- return 1;
- }
- }
-
- if(messagecount < 2)
- return 2;
-
- first = compare_message(&capture->data[message[0]], &capture->data[message[1]],message[1] - message[0]);
- middle = 0;
- for(x=1; x < messagecount-2; x++) {
- middle += compare_message(&capture->data[message[x]], &capture->data[message[x+1]],message[x+1] - message[x]);
- }
- last = compare_message(&capture->data[message[messagecount-2]], &capture->data[message[messagecount-1]],message[messagecount-1] - message[messagecount-2]);
-
- if((first && last && (messagecount < 4)) || ((first + last) && (messagecount < 3)))
- return 2;
-
- if(middle)
- return 3;
-
- if(first + last == 0) {
- for(x=0;x<3;x++) {
- cmd->CMDstart[x] = 0;
- cmd->CMDlen[x] = message[1];
- }
- if(cmd->CMDlen[0] > max_CMD_data) return 4;
- memcpy((unsigned char *)&cmd->data[cmd->CMDstart[0]],(unsigned char *)&capture->data[0],cmd->CMDlen[0]);
-
- }
- else if(first + last == 2) {
- cmd->CMDstart[0] = 0;
- cmd->CMDlen[0] = message[1];
-
- cmd->CMDstart[1] = cmd->CMDstart[0] + cmd->CMDlen[0];
- cmd->CMDlen[1] = message[2]-message[1];
-
- cmd->CMDstart[2] = cmd->CMDstart[1] + cmd->CMDlen[1];
- cmd->CMDlen[2] = message[messagecount-1]-message[messagecount-2];
-
- if(cmd->CMDlen[0]+cmd->CMDlen[1]+cmd->CMDlen[2] > max_CMD_data) return 4;
- memcpy((unsigned char *)&cmd->data[cmd->CMDstart[0]],(unsigned char *)&capture->data[0],cmd->CMDlen[0]);
- memcpy((unsigned char *)&cmd->data[cmd->CMDstart[1]],(unsigned char *)&capture->data[message[1]],cmd->CMDlen[1]);
- memcpy((unsigned char *)&cmd->data[cmd->CMDstart[2]],(unsigned char *)&capture->data[message[messagecount-1]],cmd->CMDlen[2]);
- }
- else if((first == 1)&& !last) {
- cmd->CMDstart[0] = 0;
- cmd->CMDlen[0] = message[1];
-
- cmd->CMDstart[1] = cmd->CMDstart[0] + cmd->CMDlen[0];
- cmd->CMDlen[1] = message[2]-message[1];
-
- cmd->CMDstart[2] = cmd->CMDstart[1];
- cmd->CMDlen[2] = cmd->CMDlen[1];
-
- if(cmd->CMDlen[0]+cmd->CMDlen[1] > max_CMD_data) return 4;
- memcpy((unsigned char *)&cmd->data[cmd->CMDstart[1]],(unsigned char *)&capture->data[message[1]],cmd->CMDlen[1]);
- memcpy((unsigned char *)&cmd->data[cmd->CMDstart[0]],(unsigned char *)&capture->data[0],cmd->CMDlen[0]);
-
- }
- else {
- return 5;
- }
-
- cmd->borders = 0x13;
- cmd->tval = (15 * capture->pulsetime) / ((cmd->borders & 0x0f) * 1000);
- memcpy((unsigned char *)&cmd->pulselen[0],(unsigned char *)&capture->widetable[1].value[0],(capture->widetable[1].count) * sizeof(unsigned short));
-
- return 0;
-}
-
-unsigned char analyzeIR(struct ir_raw_* capture, struct RAWcmd_* cmd) {
- unsigned char result;
-
- result = analyzeIR1(capture, cmd,0);
- if(result) {
- if(!(analyzeIR1(capture, cmd,1)))
- return(0);
- }
- return(result);
-}
-
-void debug_print_capture(struct ir_raw_* capture) {
-
- unsigned short signalfree;
- unsigned char x;
- unsigned char ro;
- unsigned char co;
-
- signalfree = get_signalfree(capture,0);
-
- x= 0;
- ro = 0;
- co = 0;
- while((x <= capture->count) && (ro < 20)) {
- draw_hexC(co++ * 14,ro * 8,capture->data[x], 3, DRAW_PUT);
- if((capture->widetable[1].value[capture->data[x++] & 0x0f] >= signalfree) || (co > 5)) {
- ro++;
- co = 0;
- }
- }
-
- draw_numU(90,8,capture->pulsetime,0, 3, DRAW_PUT);
-
- for (x = 0; x < capture->widetable[1].count; x++) {
- draw_numU(90,36+(x*8),capture->widetable[1].value[x],0, 3, DRAW_PUT);
- }
-}
-
-void debug_print_cmd(struct RAWcmd_* cmd) {
-
- unsigned char x;
- unsigned char ro;
- unsigned char co;
-
- x= 0;
- ro = 0;
- co = 0;
-
- while((x < cmd->CMDlen[0]) && (ro < 20)) {
- draw_hexC(co++ * 14,ro * 8,cmd->data[cmd->CMDstart[0]+ x++], 3, DRAW_PUT);
- if(co > 4) {
- ro++;
- co = 0;
- }
- }
- x=0;
- co = 0;
- ro++;
- while((x < cmd->CMDlen[1]) && (ro < 20)) {
- draw_hexC(co++ * 14,ro * 8,cmd->data[cmd->CMDstart[1]+ x++], 3, DRAW_PUT);
- if(co > 4) {
- ro++;
- co = 0;
- }
- }
- x=0;
- co = 0;
- ro++;
- while((x < cmd->CMDlen[2]) && (ro < 20)) {
- draw_hexC(co++ * 14,ro * 8,cmd->data[cmd->CMDstart[2]+ x++], 3, DRAW_PUT);
- if(co > 4) {
- ro++;
- co = 0;
- }
- }
-
- draw_numU(90,8,cmd->tval,0, 3, DRAW_PUT);
-
- for (x = 0; x < 16; x++) {
- draw_numU(75,20+(x*8),cmd->pulselen[x],0, 3, DRAW_PUT);
- }
-}
-
-void serialsend_ir_cmd(struct RAWcmd_* cmd) {
- unsigned short i;
- unsigned char *s;
-
- s=(unsigned char*)cmd;
-
- for(i=0;iRAWcmd[cmd]));
- }
- else {
- RAW_Send((unsigned long)&(RAWset->RAWcmd[cmd]));
- while(ANYKEY)
- RAW_Repeat();
- RAW_Stop();
- }
- }
- }
-}
-
-void RAW_learnset(FORM* form, CONTROL* control) {
- RAW_learn((struct RAWset_*)(form->tag));
- form_draw(form);
-}
-
-void RAW_keyerase(FORM* form, CONTROL* control) {
- unsigned char x;
-
- x=msgbox(50,BC_nobuttons,"\nZu loeschende Taste\ndruecken.\n");
- waitKeyDown();
- x=getKeynum();
- if(x>3) {
- clear_cmd(&(((struct RAWset_*)(form->tag))->RAWcmd[x-4]));
- }
- form_draw(form);
-}
-
-void RAW_allkeyserase(FORM* form, CONTROL* control) {
- unsigned char x;
-
- x=msgbox(50,BC_YesNo | BC_DefaultButton2,"Moechten Sie wirklich\nalle Tasten loeschen?\n");
- if(x == BC_Yes) {
- for(x=0;x<38;x++) {
- clear_cmd(&(((struct RAWset_*)(form->tag))->RAWcmd[x]));
-
- }
- }
- form_draw(form);
-}
-
-void RAW_editset(FORM* form, CONTROL* control) {
-
- struct RAWset_ RAWset;
- const BUTTON button1 = {BC_Button,0,15,120,15,SMALLFONT,0,"Anlernen/Testen",RAW_learnset};
- const BUTTON button2 = {BC_Button,0,35,120,15,SMALLFONT,0,"Taste loeschen",RAW_keyerase};
- const BUTTON button3 = {BC_Button,0,55,120,15,SMALLFONT,0,"Alle Tasten loeschen",RAW_allkeyserase};
- const LABEL label1 = {BC_Labelnotab,0,80,60,10,BOLDFONT,0,"Bezeichnung",0};
- TXTBOX txtbox1 = {BC_Txtbox,0,90,120,10,SMALLFONT,20,0,(char*)RAWset.name,NULL,NULL};
-
- CONTROL* controls[5] = { (CONTROL*)&button1,
- (CONTROL*)&button2,
- (CONTROL*)&button3,
- (CONTROL*)&label1,
- (CONTROL*)&txtbox1};
-
- FORM form2 = {"RAW Set bearbeiten",0,0,0,0,0,controls,0,5,0,0};
- unsigned long x;
-
- x = (unsigned long)BFS_LoadFileAddr(BFS_ID_RAWslot0 + ((LABEL*)control)->tag);
-
- if(x)
- memcpy(&RAWset,(void *)x,sizeof(struct RAWset_));
- else
- RAWset.id[0] = 0xff;
-
- x=memcmp(&RAWset,"RC01",4);
- if(x) {
- for(x=0;xtag, sizeof(struct RAWset_), (unsigned char*) &RAWset);
- }
-
- if(RAWset.name[0]==0xff)
- memcpy(&RAWset.name[0],(char*)string_unknown,len_string_unknown);
-
- form2.tag =(unsigned long)&RAWset;
-
- form_exec(&form2);
-
- if(!memcmp(&RAWset.name[0],string_unknown,len_string_unknown))
- for(x=0;xtag, sizeof(struct RAWset_), (unsigned char*) &RAWset) == 0) {
- x=msgbox(50,BC_YesNo | BC_DefaultButton1,"Sollen die Aenderungen\ngespeichert werden?\n");
- if(x == BC_Yes) {
- memcpy(&RAWset.id[0],"RC01",4);
- BFS_SaveFile(BFS_ID_RAWslot0 + ((LABEL*)control)->tag, sizeof(struct RAWset_), (unsigned char*) &RAWset);
- if(BFS_CmpFile(BFS_ID_RAWslot0 + ((LABEL*)control)->tag, sizeof(struct RAWset_), (unsigned char*) &RAWset) == 0) {
- msgbox(50,BC_OKOnly | BC_DefaultButton1,"Fehler\n");
- }
- }
- }
-
- form_draw(form);
-}
-
-void RAW_eraseall(FORM* form, CONTROL* control) {
-
- unsigned char x;
-
- x=msgbox(50,BC_YesNo | BC_DefaultButton2,"Moechten Sie wirklich\nalle gespeicherten\nCodes loeschen?\n");
- if(x == BC_Yes) {
- for(x=0;x<4;x++)
- BFS_DeleteFile(BFS_ID_RAWslot0 + x);
- }
- form_draw(form);
-}
-extern const struct TABLES_N RAW;
-
-void RAW_learnmenue(void) {
-
- const LABEL label5 = {BC_Labelnotab,0,15,100,10,BOLDFONT,0,"RAW Set bearbeiten:",0};
- const BUTTON button1 = {BC_Button,0,70,80,15,SMALLFONT,0,"Alles loeschen",RAW_eraseall};
-
- CONTROL* controls[2 + MAX_slots];
- LABEL l_rawset[MAX_slots];
- controls[0] = (CONTROL*)&label5;
- controls[1] = (CONTROL*)&button1;
-
- FORM form = {"IR-Codes anlernen",0,0,0,0,0,controls,2, 2 + MAX_slots,0,0};
-
- int set;
- /* load menu entries for four RAW sets from filesystem / default names */
- for (set = 0; set < MAX_slots; set++) {
- l_rawset[set] = (LABEL){BC_Label,0,25 + 10*set,50,10,SMALLFONT,set,NULL,RAW_editset};
- struct RAWset_ *rs = (struct RAWset_*)BFS_LoadFileAddr(BFS_ID_RAWslot0 + set);
- if(rs && (rs->name[0] != 0xff)) {
- l_rawset[set].caption = (char*)rs->name;
- } else
- l_rawset[set].caption = (char*)RAW.table[set].name;
-
- controls[2 + set] = (CONTROL*)&l_rawset[set];
- }
-
- form_exec(&form);
- setEncoder(irDevTab.device[irDevTab.active].encoder, irDevTab.device[irDevTab.active].set);
-
-}
-
diff --git a/boop/infrared/ir_capture.h b/boop/infrared/ir_capture.h
deleted file mode 100644
index cc9aa60..0000000
--- a/boop/infrared/ir_capture.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- ir_capture.h -
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef IR_CAPTURE_H
-#define IR_CAPTURE_H
-
-#define max_CMD_data 102
-
-#define MAX_slots 4
-#define RAWnamelen 20
-struct RAWcmd_ {
- unsigned char tval;
- unsigned char borders;
- unsigned char flags;
- unsigned char toggle;
- unsigned char CMDstart[3];
- unsigned char CMDlen[3];
- unsigned short pulselen[16];
- unsigned char data[max_CMD_data];
-};
-
-struct RAWset_ {
- unsigned char id[4];
- unsigned char name[RAWnamelen];
- struct RAWcmd_ RAWcmd[38];
-};
-
-struct widetable_ {
- unsigned short value[15];
- unsigned char count;
-};
-
-#define max_capture_data 200
-
-struct ir_raw_ {
- unsigned long pulsetime;
- unsigned char data[max_capture_data];
- struct widetable_ widetable[2];
- unsigned char count;
-
-};
-
-void getIR_test(struct RAWcmd_* cmd);
-void RAW_learnmenue(void);
-void clear_cmd(struct RAWcmd_* cmd);
-
-#endif
diff --git a/boop/infrared/ir_codes/itt/seleco_019 b/boop/infrared/ir_codes/itt/seleco_019
deleted file mode 100644
index ae2cf7c..0000000
--- a/boop/infrared/ir_codes/itt/seleco_019
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- infrared codes for ITT seleco 019
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-{
- 0x000, // A ->
- 0x000, // B ->
- 0x000, // C ->
- 0x000, // D ->
- 0x000, // Betty ->
- 0x000, // Exit ->
- 0x330, // Up -> Play
- 0x340, // Down -> Stop
- 0x020, // Left -> Rewind
- 0x310, // Right -> Forward
- 0x080, // OK -> Enter
- 0x2E0, // Vol+ -> Vol+
- 0x2F0, // Vol- -> Vol-
- 0x060, // Mute -> Muting
- 0x070, // Prog+ -> Prog+
- 0x040, // Prog- -> Prog-
- 0x100, // 1 -> 1
- 0x110, // 2 -> 2
- 0x120, // 3 -> 3
- 0x130, // 4 -> 4
- 0x140, // 5 -> 5
- 0x150, // 6 -> 6
- 0x160, // 7 -> 7
- 0x170, // 8 -> 8
- 0x180, // 9 -> 9
- 0x190, // 0 -> 0
- 0x3F0, // -/-- -> A/B
- 0x000, // AV ->
- 0x1D0, // Menu -> Info
- 0x000, // PiP ->
- 0x000, // A/B ->
- 0x000, // 16:9 ->
- 0x1C0, // Info -> VTX1
- 0x1E0, // VTX1 -> VTX2
- 0x3C0, // VTX2 -> VTX3
- 0x020, // VTX3 -> VTX4
- 0x000, // Blue ->
- 0x000, // Yello ->
- 0x000, // Green ->
- 0x1E0, // Red -> Record
- 0x000, // TV ->
- 0x010 // Power -> Power
-},
diff --git a/boop/infrared/ir_codes/itt/seleco_049 b/boop/infrared/ir_codes/itt/seleco_049
deleted file mode 100644
index 584144f..0000000
--- a/boop/infrared/ir_codes/itt/seleco_049
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- infrared codes for ITT seleco 019
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-{
- 0x000, // A ->
- 0x000, // B ->
- 0x000, // C ->
- 0x000, // D ->
- 0x000, // Betty ->
- 0x000, // Exit ->
- 0x360, // Up -> Play
- 0x330, // Down -> Stop
- 0x320, // Left -> Rewind
- 0x350, // Right -> Forward
- 0x050, // OK -> Enter
- 0x2E0, // Vol+ -> Vol+
- 0x2F0, // Vol- -> Vol-
- 0x060, // Mute -> Muting
- 0x0D0, // Prog+ -> Prog+
- 0x0E0, // Prog- -> Prog-
- 0x100, // 1 -> 1
- 0x110, // 2 -> 2
- 0x120, // 3 -> 3
- 0x130, // 4 -> 4
- 0x140, // 5 -> 5
- 0x150, // 6 -> 6
- 0x160, // 7 -> 7
- 0x170, // 8 -> 8
- 0x180, // 9 -> 9
- 0x190, // 0 -> 0
- 0x1F0, // -/-- -> A/B
- 0x000, // AV ->
- 0x3A0, // Menu -> Info
- 0x000, // PiP ->
- 0x000, // A/B ->
- 0x000, // 16:9 ->
- 0x1C0, // Info -> VTX1
- 0x1E0, // VTX1 -> VTX2
- 0x3C0, // VTX2 -> VTX3
- 0x020, // VTX3 -> VTX4
- 0x000, // Blue ->
- 0x000, // Yello ->
- 0x000, // Green ->
- 0x1E0, // Red -> Record
- 0x000, // TV ->
- 0x010 // Power -> Power
-},
diff --git a/boop/infrared/ir_codes/itt/seleco_108 b/boop/infrared/ir_codes/itt/seleco_108
deleted file mode 100644
index 883e336..0000000
--- a/boop/infrared/ir_codes/itt/seleco_108
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- infrared codes for ITT seleco 108
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-{
- 0x000, // A ->
- 0x000, // B ->
- 0x000, // C ->
- 0x000, // D ->
- 0x000, // Betty ->
- 0x000, // Exit ->
- 0x1C0, // Up -> Play
- 0x330, // Down -> Stop
- 0x210, // Left -> Rewind
- 0x1F0, // Right -> Forward
- 0x230, // OK -> Enter
- 0x2E0, // Vol+ -> Vol+
- 0x2F0, // Vol- -> Vol-
- 0x3F0, // Mute -> Muting
- 0x070, // Prog+ -> Prog+
- 0x080, // Prog- -> Prog-
- 0x100, // 1 -> 1
- 0x110, // 2 -> 2
- 0x120, // 3 -> 3
- 0x130, // 4 -> 4
- 0x140, // 5 -> 5
- 0x150, // 6 -> 6
- 0x160, // 7 -> 7
- 0x170, // 8 -> 8
- 0x180, // 9 -> 9
- 0x190, // 0 -> 0
- 0x1E0, // -/-- -> A/B
- 0x000, // AV ->
- 0x000, // Menu ->
- 0x000, // PiP ->
- 0x000, // A/B ->
- 0x000, // 16:9 ->
- 0x0F0, // Info -> VTX1
- 0x0D0, // VTX1 -> VTX2
- 0x200, // VTX2 -> VTX3
- 0x000, // VTX3 -> VTX4
- 0x000, // Blue ->
- 0x000, // Yello ->
- 0x000, // Green ->
- 0x1D0, // Red -> Pause
- 0x000, // TV ->
- 0x010 // Power -> Power
-},
diff --git a/boop/infrared/ir_codes/itt/seleco_131 b/boop/infrared/ir_codes/itt/seleco_131
deleted file mode 100644
index 7bd12ee..0000000
--- a/boop/infrared/ir_codes/itt/seleco_131
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- infrared codes for ITT seleco 131
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-{
- 0x000, // A ->
- 0x000, // B ->
- 0x000, // C ->
- 0x000, // D ->
- 0x000, // Betty ->
- 0x000, // Exit ->
- 0x020, // Up -> Play
- 0x300, // Down -> Stop
- 0x250, // Left -> Rewind
- 0x050, // Right -> Forward
- 0x390, // OK -> Enter
- 0x2E0, // Vol+ -> Vol+
- 0x2F0, // Vol- -> Vol-
- 0x060, // Mute -> Muting
- 0x0D0, // Prog+ -> Prog+
- 0x040, // Prog- -> Prog-
- 0x100, // 1 -> 1
- 0x110, // 2 -> 2
- 0x120, // 3 -> 3
- 0x130, // 4 -> 4
- 0x140, // 5 -> 5
- 0x150, // 6 -> 6
- 0x160, // 7 -> 7
- 0x170, // 8 -> 8
- 0x180, // 9 -> 9
- 0x190, // 0 -> 0
- 0x000, // -/-- ->
- 0x000, // AV ->
- 0x390, // Menu -> Info
- 0x000, // PiP ->
- 0x000, // A/B ->
- 0x000, // 16:9 ->
- 0x1C0, // Info -> VTX1
- 0x0A0, // VTX1 -> VTX2
- 0x380, // VTX2 -> VTX3
- 0x200, // VTX3 -> VTX4
- 0x000, // Blue ->
- 0x000, // Yello ->
- 0x000, // Green ->
- 0x1D0, // Red -> Pause
- 0x000, // TV ->
- 0x010 // Power -> Power
-},
diff --git a/boop/infrared/ir_codes/lirc/apple_remote1 b/boop/infrared/ir_codes/lirc/apple_remote1
deleted file mode 100644
index e962faf..0000000
--- a/boop/infrared/ir_codes/lirc/apple_remote1
+++ /dev/null
@@ -1 +0,0 @@
-/*
infrared codes for Apple Remote 1st generation (6 buttons)
http://lirc.sourceforge.net/remotes/apple/A1156
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
/*pre_data*/ 0x77E1, /*Apple's ID for NEC code*/
/*post_data*/ 0xC5, /*Remote's ID (which can be changed on the original remote)*/
/*toggle_bit_mask*/ 0x00,
/*gap*/ 37600,
/*repeat_gap*/ 0,
/*bits*/ 8,
/*pre_data_bits*/ 16,
/*post_data_bits*/ 8,
/*rc6_bit*/ 0,
/*frequency*/ 38000,
/*flags*/ LIRC_SPACE_ENC,
/*header*/ 9000,4500,
/*three*/ 0,0,
/*two*/ 0,0,
/*one*/ 560,1690,
/*zero*/ 560,560,
/*plead*/ 0,
/*ptrail*/ 560,
/*foot*/ 0,0,
/*pre*/ 0,0,
/*post*/ 0,0,
/*repeat*/ 9000,2250,
/*min_repeat*/ 1,
/*duty cycle*/ 33,
{
0x00, // A ->
0x00, // B ->
0x00, // C ->
0x00, // D ->
0x00, // Betty ->
0x00, // Exit ->
0xD0, // Up -> up, plus
0xB0, // Down -> down, minus
0x10, // Left -> << rev
0xE0, // Right -> >> ffwd
0x20, // OK -> play
0x00, // Vol+ ->
0x00, // Vol- ->
0x40, // Mute -> menu
0x00, // Prog+ ->
0x00, // Prog- ->
0x00, // 1 ->
0x00, // 2 ->
0x00, // 3 ->
0x00, // 4 ->
0x00, // 5 ->
0x00, // 6 ->
0x00, // 7 ->
0x00, // 8 ->
0x00, // 9 ->
0x00, // 0 ->
0x00, // -/-- ->
0x00, // AV ->
0x00, // Menu ->
0x00, // PiP ->
0x00, // A/B ->
0x00, // 16:9 ->
0x00, // Info ->
0x00, // VTX1 ->
0x00, // VTX2 ->
0x00, // VTX3 ->
0x00, // Blue ->
0x00, // Yello ->
0x00, // Green ->
0x00, // Red ->
0x00, // TV ->
0x00 // Power ->
},
diff --git a/boop/infrared/ir_codes/lirc/beo4 b/boop/infrared/ir_codes/lirc/beo4
deleted file mode 100644
index 9869987..0000000
--- a/boop/infrared/ir_codes/lirc/beo4
+++ /dev/null
@@ -1 +0,0 @@
-/*
infrared codes for bang & olufsen
Copyright (C) 2017
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
/*pre_data*/ 0x00000000, // 2. start bit
/*post_data*/ 0x00000000,
/*toggle_bit_mask*/ 0x00,
/*gap*/ 18000, // final gap to prevent collision
/*repeat_gap*/ 0,
/*bits*/ 17, // last(4.) start bit logical low as first data bit ==> 1+16 data bits = 17
/*pre_data_bits*/ 1, // 2. start bit
/*post_data_bits*/ 0,
/*rc6_bit*/ 0,
/*frequency*/ 455000, // regular freq is 455kHz but to get a valid result 454,5 is used
/*flags*/ LIRC_BO,
/*header*/ 200,3125, // 1. start bit
/*three*/ 0,0,
/*two*/ 0,0,
/*one*/ 200,9375,
/*zero*/ 200,3125,
/*plead*/ 0,
/*ptrail*/ 200, // stop bit
/*foot*/ 0,0,
/*pre*/ 200,15625, //3. start bit
/*post*/ 200,12500, // post bit
/*repeat*/ 0,0,
/*min_repeat*/ 0,
/*duty cycle*/ 30,
{
0x0000, // A ->
0x0000, // B ->
0x0000, // C ->
0x0000, // D ->
0x0000, // Betty ->
0xB44B, // Exit -> Exit
0x06F9, // Up -> UP
0x8679, // Down -> Down
0xA659, // Left -> Left
0x46B9, // Right -> Right
0x16E9, // OK -> OK
0x0160, // Vol+ -> Vol+
0x0164, // Vol- -> Vol-
0xF00F, // Mute -> Mute
0x48B7, // Prog+ -> Prog+
0x48B7, // Prog- -> Prog-
0x0101, // 1 -> 1
0x0102, // 2 -> 2
0x609F, // 3 -> 3
0x10EF, // 4 -> 4
0x906F, // 5 -> 5
0x50AF, // 6 -> 6
0x30CF, // 7 -> 7
0xB04F, // 8 -> 8
0x708F, // 9 -> 9
0x8877, // 0 -> 0
0xF20D, // -/-- -> Guide
0x0181, // AV -> Source
0x0f0c, // Menu -> Menue
0xD22D, // PiP -> Tools
0x1AE5, // A/B -> Return
0x7C83, // 16:9 -> P.Size
0xF807, // Info -> Info
0xD629, // VTX1 -> Ch.List
0x0000, // VTX2 ->
0xC837, // VTX3 -> Pre-CH
0x6897, // Blue -> Blue
0xA857, // Yello -> Yellow
0x28D7, // Green -> Green
0x36C9, // Red -> Red
0xC23D, // TV -> TV/DTV
0x0f0C // Power -> Standby
},
\ No newline at end of file
diff --git a/boop/infrared/ir_codes/lirc/fs20 b/boop/infrared/ir_codes/lirc/fs20
deleted file mode 100644
index dcdd03e..0000000
--- a/boop/infrared/ir_codes/lirc/fs20
+++ /dev/null
@@ -1 +0,0 @@
-/*
RF codes for FS20
Copyright (C) 2009
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
/*pre_data*/ calcFS20pre(0x11,0,0x11,0), //Synchr + HC:12121212
/*post_data*/ 0x00000000,
/*toggle_bit_mask*/ 0x00,
/*gap*/ 10000,
/*repeat_gap*/ 500000, //gap after min_repeats
/*bits*/ 27,
/*pre_data_bits*/ 32,
/*post_data_bits*/ 0,
/*rc6_bit*/ 0,
/*frequency*/ 0x0020293E, //868.350174MHz
/*flags*/ LIRC_RF,
/*header*/ 0,0,
/*three*/ 0,0,
/*two*/ 0,0,
/*one*/ 600,600,
/*zero*/ 400,400,
/*plead*/ 0,
/*ptrail*/ 400,
/*foot*/ 0,0,
/*pre*/ 0,0,
/*post*/ 0,0,
/*repeat*/ 0,0,
/*min_repeat*/ 2,
/*duty cycle*/ 0,
{
0x00000, // A ->
0x00000, // B ->
0x00000, // C ->
0x00000, // D ->
0x00000, // Betty ->
0x00000, // Exit ->
0x00000, // Up ->
0x00000, // Down ->
0x00000, // Left ->
0x00000, // Right ->
0x00000, // OK ->
0x00000, // Vol+ ->
0x00000, // Vol- ->
0x00000, // Mute ->
0x00000, // Prog+ ->
0x00000, // Prog- ->
calcFS20code(0x01,1,0x00,0,0x29,1), // 1 -> Addr:1112 Cmd:0(Off)
calcFS20code(0x01,1,0x12,0,0x3B,1), // 2 -> Addr:1112 Cmd:18(Toggle)
calcFS20code(0x01,1,0x11,0,0x3A,0), // 3 -> Addr:1112 Cmd:17(On)
0x00000, // 4 ->
0x00000, // 5 ->
0x00000, // 6 ->
0x00000, // 7 ->
0x00000, // 8 ->
0x00000, // 9 ->
0x00000, // 0 ->
0x00000, // -/-- ->
0x00000, // AV ->
0x00000, // Menu ->
0x00000, // PiP ->
0x00000, // A/B ->
0x00000, // 16:9 ->
0x00000, // Info ->
0x00000, // VTX1 ->
0x00000, // VTX2 ->
0x00000, // VTX3 ->
0x00000, // Blue ->
0x00000, // Yello ->
0x00000, // Green ->
0x00000, // Red ->
0x00000, // TV ->
0x00000 // Power -> Power
},
\ No newline at end of file
diff --git a/boop/infrared/ir_codes/lirc/hx2262 b/boop/infrared/ir_codes/lirc/hx2262
deleted file mode 100644
index 06e220e..0000000
--- a/boop/infrared/ir_codes/lirc/hx2262
+++ /dev/null
@@ -1 +0,0 @@
-/*
RF codes for HX2262
Copyright (C) 2009
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
//Bit translation:
//HX2262 LIRC_RF
//0 00
//F (floating) 01
//1 11
/*pre_data*/ 0x00000000, //bit 0-4 = 00000
/*post_data*/ 0x00000000,
/*toggle_bit_mask*/ 0x00,
/*gap*/ 11160,
/*repeat_gap*/ 11160, //gap after min_repeats
/*bits*/ 14,
/*pre_data_bits*/ 10,
/*post_data_bits*/ 0,
/*rc6_bit*/ 0,
/*frequency*/ 0x00101234, //433,919861MHz
/*flags*/ LIRC_RF,
/*header*/ 0,0,
/*three*/ 0,0,
/*two*/ 0,0,
/*one*/ 1080,360,
/*zero*/ 360,1080,
/*plead*/ 0,
/*ptrail*/ 360,
/*foot*/ 0,0,
/*pre*/ 0,0,
/*post*/ 0,0,
/*repeat*/ 0,0,
/*min_repeat*/ 10,
/*duty cycle*/ 0,
{
0x00000, // A ->
0x00000, // B ->
0x00000, // C ->
0x00000, // D ->
0x00000, // Betty ->
0x00000, // Exit ->
0x00000, // Up ->
0x00000, // Down ->
0x00000, // Left ->
0x00000, // Right ->
0x00000, // OK ->
0x00000, // Vol+ ->
0x00000, // Vol- ->
0x00000, // Mute ->
0x00000, // Prog+ ->
0x00000, // Prog- ->
0x00551, // 1 -> bit5-8(Device) 0FFF bit9-11(cmd) F0F ->ON
0x01151, // 2 -> bit5-8(Device) 0FFF bit9-11(cmd) FF0 ->OFF
0x01451, // 3 -> bit5-8(Device) F0FF bit9-11(cmd) F0F ->ON
0x00554, // 4 -> bit5-8(Device) F0FF bit9-11(cmd) FF0 ->OFF
0x01154, // 5 -> bit5-8(Device) FF0F bit9-11(cmd) F0F ->ON
0x01454, // 6 -> bit5-8(Device) FF0F bit9-11(cmd) FF0 ->OFF
0x00000, // 7 ->
0x00000, // 8 ->
0x00000, // 9 ->
0x00000, // 0 ->
0x00000, // -/-- ->
0x00000, // AV ->
0x00000, // Menu ->
0x00000, // PiP ->
0x00000, // A/B ->
0x00000, // 16:9 ->
0x00000, // Info ->
0x00000, // VTX1 ->
0x00000, // VTX2 ->
0x00000, // VTX3 ->
0x00000, // Blue ->
0x00000, // Yello ->
0x00000, // Green ->
0x00000, // Red ->
0x00000, // TV ->
0x00000 // Power -> Power
},
\ No newline at end of file
diff --git a/boop/infrared/ir_codes/lirc/olympus_rm-1 b/boop/infrared/ir_codes/lirc/olympus_rm-1
deleted file mode 100644
index ab59b3c..0000000
--- a/boop/infrared/ir_codes/lirc/olympus_rm-1
+++ /dev/null
@@ -1 +0,0 @@
-/*
infrared codes for Olympus RM-1 (digital camera remote)
NEC Code
http://lirc.sourceforge.net/remotes/olympus/RM-1
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
/*pre_data*/ 0x61DC,
/*post_data*/ 0x00000000,
/*toggle_bit_mask*/ 0x0000000000000000,
/*gap*/ 107013,
/*repeat_gap*/ 0,
/*bits*/ 16,
/*pre_data_bits*/ 16,
/*post_data_bits*/ 0,
/*rc6_bit*/ 0,
/*frequency*/ 38000,
/*flags*/ LIRC_SPACE_ENC | LIRC_CONST_LENGTH,
/*header*/ 9000,4500,
/*three*/ 0,0,
/*two*/ 0,0,
/*one*/ 560,1690,
/*zero*/ 560,560,
/*plead*/ 0,
/*ptrail*/ 560,
/*foot*/ 0,0,
/*pre*/ 0,0,
/*post*/ 0,0,
/*repeat*/ 9000,2250,
/*min_repeat*/ 1,
/*duty cycle*/ 33,
{
0x0000, // A ->
0x0000, // B ->
0x0000, // C ->
0x0000, // D ->
0x0000, // Betty ->
0x0000, // Exit ->
0xC03F, // Up -> tele
0x40BF, // Down -> wide
0x20DF, // Left -> -
0xA05F, // Right -> +
0x807F, // OK -> capture
0x0000, // Vol+ ->
0x0000, // Vol- ->
0x0000, // Mute ->
0x0000, // Prog+ ->
0x0000, // Prog- ->
0x0000, // 1 ->
0x0000, // 2 ->
0x0000, // 3 ->
0x0000, // 4 ->
0x0000, // 5 ->
0x0000, // 6 ->
0x0000, // 7 ->
0x0000, // 8 ->
0x0000, // 9 ->
0x0000, // 0 ->
0x0000, // -/-- ->
0x0000, // AV ->
0x0000, // Menu ->
0x0000, // PiP ->
0x0000, // A/B ->
0x0000, // 16:9 ->
0x0000, // Info ->
0x0000, // VTX1 ->
0x0000, // VTX2 ->
0x0000, // VTX3 ->
0x0000, // Blue ->
0x0000, // Yello ->
0x0000, // Green ->
0x0000, // Red ->
0x0000, // TV ->
0x0000 // Power ->
},
diff --git a/boop/infrared/ir_codes/lirc/rev008340 b/boop/infrared/ir_codes/lirc/rev008340
deleted file mode 100644
index c3a55e3..0000000
--- a/boop/infrared/ir_codes/lirc/rev008340
+++ /dev/null
@@ -1 +0,0 @@
-/*
RF codes for REV 008340 remote control HS2260A-R4
based on hx2262 by telekatz
2010-10-04 by eme
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
// Bit translation:
// HX2262 LIRC_RF
// 0 00
// F (floating) 01
// 1 11
// "channel"
// A: 1FFF -> 11010101 -> 0xD5
// B: F1FF -> 01110101 -> 0x75
// C: FF1F -> 01011101 -> 0x5D
// D: FFF1 -> 01010111 -> 0x57
// "device"
// 1: 1FF0 -> 11010100 -> 0xD4
// 2: F1F0 -> 01110100 -> 0x74
// 3: FFF1 -> 01010111 -> 0x57
// "action"
// 1: 0010 (on/+) -> 00001100 -> 0x0C
// 0: 0001 (off/-) -> 00000011 -> 0x03
/*pre_data*/ 0xD5, // A0-A3
/*post_data*/ 0x00,
/*toggle_bit_mask*/ 0x00,
/*gap*/ 14570,
/*repeat_gap*/ 14570, // gap after min_repeats
/*bits*/ 16, // data bits
/*pre_data_bits*/ 8,
/*post_data_bits*/ 0,
/*rc6_bit*/ 0,
/*frequency*/ 0x00101234, // 433,919861MHz
/*flags*/ LIRC_RF,
/*header*/ 0,0,
/*three*/ 0,0,
/*two*/ 0,0,
/*one*/ 1410,470,
/*zero*/ 470,1410,
/*plead*/ 0,
/*ptrail*/ 470, // sync pulse
/*foot*/ 0,0,
/*pre*/ 0,0,
/*post*/ 0,0,
/*repeat*/ 0,0,
/*min_repeat*/ 0,
/*duty cycle*/ 0,
{
0x0000, // A ->
0x0000, // B ->
0x0000, // C ->
0x0000, // D ->
0x0000, // Betty ->
0x0000, // Exit ->
0x0000, // Up ->
0x0000, // Down ->
0x0000, // Left ->
0x0000, // Right ->
0x0000, // OK ->
0x0000, // Vol+ ->
0x0000, // Vol- ->
0x0000, // Mute ->
0x0000, // Prog+ ->
0x0000, // Prog- ->
0xD40C, // 1 -> 1 on
0xD403, // 2 -> 1 off
0x0000, // 3 ->
0x740C, // 4 -> dim2 +
0x7403, // 5 -> dim2 -
0x0000, // 6 ->
0x570C, // 7 -> dim3 +
0x5703, // 8 -> dim3 -
0x0000, // 9 ->
0x0000, // 0 ->
0x0000, // -/-- ->
0x0000, // AV ->
0x0000, // Menu ->
0x0000, // PiP ->
0x0000, // A/B ->
0x0000, // 16:9 ->
0x0000, // Info ->
0x0000, // VTX1 ->
0x0000, // VTX2 ->
0x0000, // VTX3 ->
0x0000, // Blue ->
0x0000, // Yello ->
0x0000, // Green ->
0x0000, // Red ->
0x0000, // TV ->
0x0000 // Power ->
},
\ No newline at end of file
diff --git a/boop/infrared/ir_codes/lirc/samsung_ue46b6000 b/boop/infrared/ir_codes/lirc/samsung_ue46b6000
deleted file mode 100644
index 508fdcd..0000000
--- a/boop/infrared/ir_codes/lirc/samsung_ue46b6000
+++ /dev/null
@@ -1 +0,0 @@
-/*
infrared codes for Samsung UE46B6000
Copyright (C) 2009
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
/*pre_data*/ 0x0000E0E0,
/*post_data*/ 0x00000000,
/*toggle_bit_mask*/ 0x0000000000000000,
/*gap*/ 107635,
/*repeat_gap*/ 0,
/*bits*/ 16,
/*pre_data_bits*/ 16,
/*post_data_bits*/ 0,
/*rc6_bit*/ 0,
/*frequency*/ 36000,
/*flags*/ LIRC_CONST_LENGTH,
/*header*/ 4498,4450,
/*three*/ 0,0,
/*two*/ 0,0,
/*one*/ 588,1646,
/*zero*/ 588,535,
/*plead*/ 0,
/*ptrail*/ 584,
/*foot*/ 0,0,
/*pre*/ 0,0,
/*post*/ 0,0,
/*repeat*/ 0,0,
/*min_repeat*/ 1,
/*duty cycle*/ 33,
{
0x0000, // A ->
0x0000, // B ->
0x0000, // C ->
0x0000, // D ->
0x0000, // Betty ->
0xB44B, // Exit -> Exit
0x06F9, // Up -> UP
0x8679, // Down -> Down
0xA659, // Left -> Left
0x46B9, // Right -> Right
0x16E9, // OK -> OK
0xE01F, // Vol+ -> Vol+
0xD02F, // Vol- -> Vol-
0xF00F, // Mute -> Mute
0x48B7, // Prog+ -> Prog+
0x48B7, // Prog- -> Prog-
0x20DF, // 1 -> 1
0xA05F, // 2 -> 2
0x609F, // 3 -> 3
0x10EF, // 4 -> 4
0x906F, // 5 -> 5
0x50AF, // 6 -> 6
0x30CF, // 7 -> 7
0xB04F, // 8 -> 8
0x708F, // 9 -> 9
0x8877, // 0 -> 0
0xF20D, // -/-- -> Guide
0x807F, // AV -> Source
0x58A7, // Menu -> Menue
0xD22D, // PiP -> Tools
0x1AE5, // A/B -> Return
0x7C83, // 16:9 -> P.Size
0xF807, // Info -> Info
0xD629, // VTX1 -> Ch.List
0x0000, // VTX2 ->
0xC837, // VTX3 -> Pre-CH
0x6897, // Blue -> Blue
0xA857, // Yello -> Yellow
0x28D7, // Green -> Green
0x36C9, // Red -> Red
0xC23D, // TV -> TV/DTV
0x40BF // Power -> Standby
},
\ No newline at end of file
diff --git a/boop/infrared/ir_codes/lirc/str_de545 b/boop/infrared/ir_codes/lirc/str_de545
deleted file mode 100644
index ff078e4..0000000
--- a/boop/infrared/ir_codes/lirc/str_de545
+++ /dev/null
@@ -1 +0,0 @@
-/*
infrared codes for Kathrein UFS922
Copyright (C) 2009
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
/*pre_data*/ 0x00000000,
/*post_data*/ 0x00000000,
/*toggle_bit_mask*/ 0x0000000000008000,
/*gap*/ 45152,
/*repeat_gap*/ 0,
/*bits*/ 12,
/*pre_data_bits*/ 0,
/*post_data_bits*/ 0,
/*rc6_bit*/ 0,
/*frequency*/ 40000,
/*flags*/ LIRC_CONST_LENGTH,
/*header*/ 2400,600,
/*three*/ 0,0,
/*two*/ 0,0,
/*one*/ 1200,600,
/*zero*/ 600,600,
/*plead*/ 0,
/*ptrail*/ 0,
/*foot*/ 0,0,
/*pre*/ 0,0,
/*post*/ 0,0,
/*repeat*/ 0,0,
/*min_repeat*/ 1,
/*duty cycle*/ 25,
{
0x0000, // A ->
0x0000, // B ->
0x0000, // C ->
0x0000, // D ->
0x0000, // Betty ->
0x0000, // Exit ->
0x0000, // Up ->
0x0000, // Down ->
0x0000, // Left ->
0x0000, // Right ->
0x0000, // OK ->
0x0481, // Vol+ -> Vol+
0x0C81, // Vol- -> Vol-
0x0281, // Mute -> Mute
0x0096, // Prog+ -> Tuner Prog+
0x0896, // Prog- -> Tuner Prog-
0x0561, // 1 -> TV/SAT
0x0441, // 2 -> Video
0x0BE1, // 3 -> DVD
0x0841, // 4 -> Tuner
0x0A41, // 5 -> CD
0x0B81, // 6 -> AUX
0x0961, // 7 -> MD/TAPE
0x04E1, // 8 -> 5.1
0x0000, // 9 ->
0x0000, // 0 ->
0x0000, // -/-- ->
0x0000, // AV ->
0x0000, // Menu ->
0x0000, // PiP ->
0x0000, // A/B ->
0x0000, // 16:9 ->
0x0000, // Info ->
0x0000, // VTX1 ->
0x0000, // VTX2 ->
0x0000, // VTX3 ->
0x0000, // Blue ->
0x0000, // Yello ->
0x0000, // Green ->
0x0000, // Red ->
0x0000, // TV ->
0x0A81 // Power -> Power
},
\ No newline at end of file
diff --git a/boop/infrared/ir_codes/lirc/ufs910 b/boop/infrared/ir_codes/lirc/ufs910
deleted file mode 100644
index 4b03d1d..0000000
--- a/boop/infrared/ir_codes/lirc/ufs910
+++ /dev/null
@@ -1 +0,0 @@
-/*
infrared codes for Kathrein UFS910
Copyright (C) 2009
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
/*pre_data*/ 0x00229000,
/*post_data*/ 0x00000000,
/*toggle_bit_mask*/ 0x0000000000008000,
/*gap*/ 99000,
/*repeat_gap*/ 0,
/*bits*/ 8,
/*pre_data_bits*/ 24,
/*post_data_bits*/ 0,
/*rc6_bit*/ 0,
/*frequency*/ 36000,
/*flags*/ LIRC_RCMM | LIRC_CONST_LENGTH,
/*header*/ 417,278,
/*three*/ 167,778,
/*two*/ 167,611,
/*one*/ 167,444,
/*zero*/ 167,278,
/*plead*/ 0,
/*ptrail*/ 167,
/*foot*/ 0,0,
/*pre*/ 0,0,
/*post*/ 0,0,
/*repeat*/ 0,0,
/*min_repeat*/ 1,
/*duty cycle*/ 33,
{
0x00, // A ->
0x00, // B ->
0x00, // C ->
0x00, // D ->
0x00, // Betty ->
0x55, // Exit -> Back
0x58, // Up -> Up
0x59, // Down -> Down
0x5A, // Left -> Left
0x5B, // Right -> Right
0x5c, // OK -> OK
0x10, // Vol+ -> Vol+
0x11, // Vol- -> Vol-
0x0D, // Mute -> Mute
0x1E, // Prog+ -> Prog+
0x1F, // Prog- -> Prog-
0x01, // 1 -> 1
0x02, // 2 -> 2
0x03, // 3 -> 3
0x04, // 4 -> 4
0x05, // 5 -> 5
0x06, // 6 -> 6
0x07, // 7 -> 7
0x08, // 8 -> 8
0x09, // 9 -> 9
0x100, // 0 -> 0 //eigentlich 0x00
0xCC, // -/-- -> EPG
0x00, // AV ->
0x54, // Menu -> Menue
0x21, // PiP -> Rewind
0x38, // A/B -> Play
0x20, // 16:9 -> Forward
0x0F, // Info -> Info
0x39, // VTX1 -> Pause
0x37, // VTX2 -> Record
0x31, // VTX3 -> Stop
0x70, // Blue -> Blue
0x6F, // Yello -> Yellow
0x6E, // Green -> Green
0x6D, // Red -> Red
0x3C, // TV -> Text
0x0C // Power -> Standby
},
\ No newline at end of file
diff --git a/boop/infrared/ir_codes/lirc/ufs922 b/boop/infrared/ir_codes/lirc/ufs922
deleted file mode 100644
index 45ec946..0000000
--- a/boop/infrared/ir_codes/lirc/ufs922
+++ /dev/null
@@ -1 +0,0 @@
-/*
infrared codes for Kathrein UFS922
Copyright (C) 2009
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
/*pre_data*/ 0x00037FB9,
/*post_data*/ 0x00000000,
/*toggle_bit_mask*/ 0x0000000000008000,
/*gap*/ 106291,
/*repeat_gap*/ 0,
/*bits*/ 16,
/*pre_data_bits*/ 21,
/*post_data_bits*/ 0,
/*rc6_bit*/ 5,
/*frequency*/ 36000,
/*flags*/ LIRC_RC6 | LIRC_CONST_LENGTH,
/*header*/ 2676,870,
/*three*/ 0,0,
/*two*/ 0,0,
/*one*/ 454,429,
/*zero*/ 454,429,
/*plead*/ 0,
/*ptrail*/ 0,
/*foot*/ 0,0,
/*pre*/ 0,0,
/*post*/ 0,0,
/*repeat*/ 0,0,
/*min_repeat*/ 1,
/*duty cycle*/ 33,
{
0x0000, // A ->
0x0000, // B ->
0x0000, // C ->
0x0000, // D ->
0x0000, // Betty ->
0xFFAA, // Exit -> Back
0xFFA7, // Up -> Up
0xFFA6, // Down -> Down
0xFFA5, // Left -> Left
0xFFA4, // Right -> Right
0xFFA3, // OK -> OK
0xFFEF, // Vol+ -> Vol+
0xFFEE, // Vol- -> Vol-
0xFFF2, // Mute -> Mute
0xFFE1, // Prog+ -> Prog+
0xFFE0, // Prog- -> Prog-
0xFFFE, // 1 -> 1
0xFFFD, // 2 -> 2
0xFFFC, // 3 -> 3
0xFFFB, // 4 -> 4
0xFFFA, // 5 -> 5
0xFFF9, // 6 -> 6
0xFFF8, // 7 -> 7
0xFFF7, // 8 -> 8
0xFFF6, // 9 -> 9
0xFFF5, // 0 -> 0
0xFF33, // -/-- -> EPG
0xFFB9, // AV -> Archiv
0xFFAB, // Menu -> Menue
0xFFDE, // PiP -> Rewind
0xFFC7, // A/B -> Play
0xFFDF, // 16:9 -> Forward
0xFFF0, // Info -> Info
0xFFC6, // VTX1 -> Pause
0xFFC8, // VTX2 -> Record
0xFFCE, // VTX3 -> Stop
0xFF8F, // Blue -> Blue
0xFF90, // Yello -> Yellow
0xFF91, // Green -> Green
0xFF92, // Red -> Red
0xFF2A, // TV -> Media
0xFFF3 // Power -> Standby
},
\ No newline at end of file
diff --git a/boop/infrared/ir_codes/nrc17/dbox2 b/boop/infrared/ir_codes/nrc17/dbox2
deleted file mode 100644
index e6f2c73..0000000
--- a/boop/infrared/ir_codes/nrc17/dbox2
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- NRC17_dbox2.code - infrared codes for the dbox2 in NRC17 coding
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-// codes are: subcode[4]:address[4]:command[8] = 16 bits
-
-{
- 0x0000, // A
- 0x0000, // B
- 0x0000, // C
- 0x0000, // D
- 0x5c20, // Betty -> Home
- 0x5c27, // Exit -> dbox
- 0x5c0e, // Up -> Up
- 0x5c0f, // Down -> Down
- 0x5c2f, // Left -> Left
- 0x5c2e, // Right -> Right
- 0x5c30, // OK -> OK
- 0x5c16, // Vol+ -> Vol+
- 0x5c17, // Vol- -> Vol-
- 0x5c28, // Mute -> Mute
- 0x5c54, // Prog+ -> Next
- 0x5c53, // Prog- -> Prev
- 0x5c01, // 1 -> 1
- 0x5c02, // 2 -> 2
- 0x5c03, // 3 -> 3
- 0x5c04, // 4 -> 4
- 0x5c05, // 5 -> 5
- 0x5c06, // 6 -> 6
- 0x5c07, // 7 -> 7
- 0x5c08, // 8 -> 8
- 0x5c09, // 9 -> 9
- 0x5c00, // 0 -> 0
- 0x0000, // -/--
- 0x0000, // AV
- 0x5c27, // Menu -> dbox
- 0x0000, // PiP
- 0x0000, // A/B
- 0x0000, // 16:9
- 0x5c82, // Info -> Help
- 0x0000, // VTX1
- 0x0000, // VTX2
- 0x0000, // VTX3
- 0x5c3b, // Blue -> Blue
- 0x5c52, // Yellow -> Yellow
- 0x5c55, // Green -> Green
- 0x5c2d, // Red -> Red
- 0x5c20, // TV -> Home
- 0x5c0c // Power -> Power
-},
diff --git a/boop/infrared/ir_codes/nrc17/grundig_tp720 b/boop/infrared/ir_codes/nrc17/grundig_tp720
deleted file mode 100644
index 20ea9ae..0000000
--- a/boop/infrared/ir_codes/nrc17/grundig_tp720
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- infrared codes for the grundig tp720 tv
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-// codes are: command[9] = 9 bits
-
-{
- 0x0000, // A
- 0x0000, // B
- 0x0000, // C
- 0x0000, // D
- 0x0000, // Betty ->
- 0x0000, // Exit ->
- 0x000C, // Up -> COLOR+
- 0x000D, // Down -> COLOR-
- 0x000B, // Left -> BR-
- 0x000A, // Right -> BR+
- 0x8000, // OK -> OK
- 0x0008, // Vol+ -> V+
- 0x0009, // Vol- -> V-
- 0x0001, // Mute -> Mute
- 0x002A, // Prog+ -> P+
- 0x002B, // Prog- -> P-
- 0x0011, // 1 -> 1
- 0x0012, // 2 -> 2
- 0x0013, // 3 -> 3
- 0x0014, // 4 -> 4
- 0x0015, // 5 -> 5
- 0x0016, // 6 -> 6
- 0x0017, // 7 -> 7
- 0x0018, // 8 -> 8
- 0x0019, // 9 -> 9
- 0x0010, // 0 -> 0
- 0x0000, // -/--
- 0x0000, // AV
- 0x001A, // Menu -> PC
- 0x0000, // PiP
- 0x0000, // A/B
- 0x0000, // 16:9
- 0x002D, // Info -> I
- 0x0030, // VTX1 -> Teletext
- 0x0000, // VTX2
- 0x0000, // VTX3
- 0x002E, // Blue -> Blue
- 0x003B, // Yellow -> Yellow
- 0x003e, // Green -> Green
- 0x003a, // Red -> Red
- 0x0007, // TV -> Aux
- 0x0002 // Power -> Power
-},
diff --git a/boop/infrared/ir_codes/rc5/HARMONY_655 b/boop/infrared/ir_codes/rc5/HARMONY_655
deleted file mode 100644
index fa174b0..0000000
--- a/boop/infrared/ir_codes/rc5/HARMONY_655
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- infrared codes for technisat satreceiver
- Copyright (C) 2008 p.c.squirrel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-{
- RC5_STD(0x0000), // A ->
- RC5_STD(0x0000), // B ->
- RC5_STD(0x0000), // C ->
- RC5_STD(0x0000), // D ->
- RC5_STD(0x0000), // Betty ->
- RC5_STD(0x100B), // Exit -> Zurück
- RC5_STD(0x1012), // Up ->
- RC5_STD(0x1013), // Down ->
- RC5_STD(0x1015), // Left ->
- RC5_STD(0x1014), // Right ->
- RC5_STD(0x1023), // OK ->
- RC5_STD(0x0210), // Vol+ -> Vol+
- RC5_STD(0x0211), // Vol- -> Vol-
- RC5_STD(0x020D), // Mute -> Mute
- RC5_STD(0x1020), // Prog+ -> Prog+
- RC5_STD(0x1021), // Prog- -> Prog-
- RC5_STD(0x0201), // 1 -> 1
- RC5_STD(0x0202), // 2 -> 2
- RC5_STD(0x0203), // 3 -> 3
- RC5_STD(0x0204), // 4 -> 4
- RC5_STD(0x0205), // 5 -> 5
- RC5_STD(0x0206), // 6 -> 6
- RC5_STD(0x0207), // 7 -> 7
- RC5_STD(0x0208), // 8 -> 8
- RC5_STD(0x0209), // 9 -> 9
- RC5_STD(0x1000), // 0 -> 0
- RC5_STD(0x17C0), // -/-- -> AUDIO
- RC5_STD(0x0238), // AV -> EXT
- RC5_STD(0x100E), // Menu ->
- RC5_STD(0x17FB), // PiP -> Full
- RC5_STD(0x17FC), // A/B -> GO
- RC5_STD(0x1165), // 16:9 -> FR
- RC5_STD(0x1166), // Info -> FF
- RC5_STD(0x1175), // VTX1 -> Play
- RC5_STD(0x17F6), // VTX2 -> Stop
- RC5_STD(0x17F7), // VTX3 -> Record
- RC5_STD(0x1034), // Blue ->
- RC5_STD(0x1032), // Yello ->
- RC5_STD(0x1036), // Green ->
- RC5_STD(0x1037), // Red ->
- RC5_STD(0x1169), // TV -> Pause
- RC5_STD(0x020C) // Power -> Standby
-},
-
diff --git a/boop/infrared/ir_codes/rc5/technisat_satreceiver_103TS103 b/boop/infrared/ir_codes/rc5/technisat_satreceiver_103TS103
deleted file mode 100644
index 8cc2205..0000000
--- a/boop/infrared/ir_codes/rc5/technisat_satreceiver_103TS103
+++ /dev/null
@@ -1 +0,0 @@
-/*
infrared codes for technisat satreceiver
Copyright (C) 2008 p.c.squirrel
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
{
RC5_STD(0x0000), // A ->
RC5_STD(0x0000), // B ->
RC5_STD(0x0000), // C ->
RC5_STD(0x0000), // D ->
RC5_STD(0x0000), // Betty ->
RC5_STD(0x0000), // Exit ->
RC5_STD(0x0210), // Up ->
RC5_STD(0x0211), // Down ->
RC5_STD(0x0215), // Left ->
RC5_STD(0x0216), // Right ->
RC5_STD(0x0217), // OK ->
RC5_STD(0x0210), // Vol+ -> Vol+
RC5_STD(0x0211), // Vol- -> Vol-
RC5_STD(0x020D), // Mute -> Mute
RC5_STD(0x0220), // Prog+ -> Prog+
RC5_STD(0x0221), // Prog- -> Prog-
RC5_STD(0x0201), // 1 -> 1
RC5_STD(0x0202), // 2 -> 2
RC5_STD(0x0203), // 3 -> 3
RC5_STD(0x0204), // 4 -> 4
RC5_STD(0x0205), // 5 -> 5
RC5_STD(0x0206), // 6 -> 6
RC5_STD(0x0207), // 7 -> 7
RC5_STD(0x0208), // 8 -> 8
RC5_STD(0x0209), // 9 -> 9
RC5_STD(0x0200), // 0 -> 0
RC5_STD(0x0000), // -/-- ->
RC5_STD(0x0238), // AV ->EXT
RC5_STD(0x0000), // Menu ->
RC5_STD(0x0000), // PiP ->
RC5_STD(0x0000), // A/B ->
RC5_STD(0x0000), // 16:9 ->
RC5_STD(0x0000), // Info ->
RC5_STD(0x0000), // VTX1 ->
RC5_STD(0x0000), // VTX2 ->
RC5_STD(0x0000), // VTX3 ->
RC5_STD(0x022E), // Blue ->
RC5_STD(0x022D), // Yello ->
RC5_STD(0x022C), // Green ->
RC5_STD(0x022B), // Red ->
RC5_STD(0x0000), // TV ->
RC5_STD(0x020C) // Power -> Standby
/* SAT1-OPTION 0x000000000000120A
SAT1-A/B 0x0000000000001223
SAT1-SFI 0x000000000000122F
SAT1-EXIT 0x0000000000001222
SAT1-INFO 0x000000000000020F
SAT1-TV/RADIO 0x0000000000000213
SAT1-MENU 0x0000000000000212
SAT1-TV/SAT 0x0000000000000200
SAT1-TXT 0x000000000000123C
SAT1-STOP 0x0000000000001229*/
},
\ No newline at end of file
diff --git a/boop/infrared/ir_codes/rc5/tv b/boop/infrared/ir_codes/rc5/tv
deleted file mode 100644
index 532d2b8..0000000
--- a/boop/infrared/ir_codes/rc5/tv
+++ /dev/null
@@ -1 +0,0 @@
-/*
infrared codes for RC5 tv
Copyright (C) 2007 Ch. Klippel
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
{
RC5_STD(0x0000), // A ->
RC5_STD(0x0000), // B ->
RC5_STD(0x0000), // C ->
RC5_STD(0x0000), // D ->
RC5_STD(0x0000), // Betty ->
RC5_STD(0x0000), // Exit ->
RC5_STD(0x0812), // Up -> Brightness+
RC5_STD(0x0813), // Down -> Brightness-
RC5_STD(0x0000), // Left ->
RC5_STD(0x0000), // Right ->
RC5_STD(0x0000), // OK ->
RC5_STD(0x0810), // Vol+ -> Vol+
RC5_STD(0x0811), // Vol- -> Vol-
RC5_STD(0x080D), // Mute -> Mute
RC5_STD(0x0820), // Prog+ -> Prog+
RC5_STD(0x0821), // Prog- -> Prog-
RC5_STD(0x0801), // 1 -> 1
RC5_STD(0x0802), // 2 -> 2
RC5_STD(0x0803), // 3 -> 3
RC5_STD(0x0804), // 4 -> 4
RC5_STD(0x0805), // 5 -> 5
RC5_STD(0x0806), // 6 -> 6
RC5_STD(0x0807), // 7 -> 7
RC5_STD(0x0808), // 8 -> 8
RC5_STD(0x0809), // 9 -> 9
RC5_STD(0x0800), // 0 -> 0
RC5_STD(0x080A), // -/-- ->
RC5_STD(0x0000), // AV ->
RC5_STD(0x0000), // Menu ->
RC5_STD(0x0000), // PiP ->
RC5_STD(0x0000), // A/B ->
RC5_STD(0x0000), // 16:9 ->
RC5_STD(0x0000), // Info ->
RC5_STD(0x0000), // VTX1 ->
RC5_STD(0x0000), // VTX2 ->
RC5_STD(0x0000), // VTX3 ->
RC5_STD(0x0000), // Blue ->
RC5_STD(0x0000), // Yello ->
RC5_STD(0x0000), // Green ->
RC5_STD(0x0000), // Red ->
RC5_STD(0x0000), // TV ->
RC5_STD(0x080C) // Power -> Standby
},
\ No newline at end of file
diff --git a/boop/infrared/ir_codes/rc6/dvd b/boop/infrared/ir_codes/rc6/dvd
deleted file mode 100644
index b351666..0000000
--- a/boop/infrared/ir_codes/rc6/dvd
+++ /dev/null
@@ -1 +0,0 @@
-/*
infrared codes for RC6 DVD
Copyright (C) 2008 p.c.squirrel
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
{
0x0000, // A ->
0x0000, // B ->
0x0000, // C ->
0x0000, // D ->
0x0000, // Betty ->
0x0000, // Exit ->
0x0458, // Up -> Brightness+
0x0459, // Down -> Brightness-
0xFBA5, // Left ->
0x045B, // Right ->
0x045C, // OK ->
0x1810, // Vol+ -> Vol+
0x1811, // Vol- -> Vol-
0x180D, // Mute -> Mute
0x1820, // Prog+ -> Prog+
0x1821, // Prog- -> Prog-
0x0401, // 1 -> 1
0x0402, // 2 -> 2
0x0403, // 3 -> 3
0x0404, // 4 -> 4
0x0405, // 5 -> 5
0x0406, // 6 -> 6
0x0407, // 7 -> 7
0x0408, // 8 -> 8
0x0409, // 9 -> 9
0x040A, // 0 -> 0
0x1800, // -/-- ->
0x0000, // AV ->
0x0000, // Menu ->
0x0000, // PiP ->
0x0000, // A/B ->
0x0000, // 16:9 ->
0x0000, // Info ->
0x0000, // VTX1 ->
0x0000, // VTX2 ->
0x0000, // VTX3 ->
0x0000, // Blue ->
0x0000, // Yello ->
0x0000, // Green ->
0x0000, // Red ->
0x0000, // TV ->
0x180C // Power -> Standby
},
\ No newline at end of file
diff --git a/boop/infrared/ir_codes/rc6/tv b/boop/infrared/ir_codes/rc6/tv
deleted file mode 100644
index 365ee3a..0000000
--- a/boop/infrared/ir_codes/rc6/tv
+++ /dev/null
@@ -1 +0,0 @@
-/*
infrared codes for RC6 TV
Copyright (C) 2008 p.c.squirrel
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
{
0x0000, // A ->
0x0000, // B ->
0x0000, // C ->
0x0000, // D ->
0x0000, // Betty ->
0x0000, // Exit ->
0x0012, // Up -> Brightness+
0x0013, // Down -> Brightness-
0x0000, // Left ->
0x0000, // Right ->
0x0000, // OK ->
0x0010, // Vol+ -> Vol+
0x0011, // Vol- -> Vol-
0x000D, // Mute -> Mute
0x0020, // Prog+ -> Prog+
0x0021, // Prog- -> Prog-
0x0001, // 1 -> 1
0x0002, // 2 -> 2
0x0003, // 3 -> 3
0x0004, // 4 -> 4
0x0005, // 5 -> 5
0x0006, // 6 -> 6
0x0007, // 7 -> 7
0x0008, // 8 -> 8
0x0009, // 9 -> 9
0x000A, // 0 -> 0
0x0000, // -/-- ->
0x0000, // AV ->
0x0000, // Menu ->
0x0000, // PiP ->
0x0000, // A/B ->
0x0000, // 16:9 ->
0x0000, // Info ->
0x0000, // VTX1 ->
0x0000, // VTX2 ->
0x0000, // VTX3 ->
0x0000, // Blue ->
0x0000, // Yello ->
0x0000, // Green ->
0x0000, // Red ->
0x0000, // TV ->
0x000C // Power -> Standby
},
\ No newline at end of file
diff --git a/boop/infrared/ir_codes/rc6/ufs922 b/boop/infrared/ir_codes/rc6/ufs922
deleted file mode 100644
index ba92abf..0000000
--- a/boop/infrared/ir_codes/rc6/ufs922
+++ /dev/null
@@ -1 +0,0 @@
-/*
infrared codes for Kathrein UFS922
Copyright (C) 2009
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
{
0x00000000, // A ->
0x00000000, // B ->
0x00000000, // C ->
0x00000000, // D ->
0x00000000, // Betty ->
0x80460055, // Exit -> Back
0x80460058, // Up -> Up
0x80460059, // Down -> Down
0x8046005A, // Left -> Left
0x8046005B, // Right -> Right
0x8046005c, // OK -> OK
0x80460010, // Vol+ -> Vol+
0x80460011, // Vol- -> Vol-
0x8046000D, // Mute -> Mute
0x8046001E, // Prog+ -> Prog+
0x8046001F, // Prog- -> Prog-
0x80460001, // 1 -> 1
0x80460002, // 2 -> 2
0x80460003, // 3 -> 3
0x80460004, // 4 -> 4
0x80460005, // 5 -> 5
0x80460006, // 6 -> 6
0x80460007, // 7 -> 7
0x80460008, // 8 -> 8
0x80460009, // 9 -> 9
0x80460000, // 0 -> 0
0x804600CC, // -/-- -> EPG
0x80460046, // AV -> Archiv
0x80460054, // Menu -> Menue
0x80460021, // PiP -> Rewind
0x80460038, // A/B -> Play
0x80460020, // 16:9 -> Forward
0x8046000F, // Info -> Info
0x80460039, // VTX1 -> Pause
0x80460037, // VTX2 -> Record
0x80460031, // VTX3 -> Stop
0x80460070, // Blue -> Blue
0x8046006F, // Yello -> Yellow
0x8046006E, // Green -> Green
0x8046006D, // Red -> Red
0x804600D5, // TV -> Media
0x8046000C // Power -> Standby
},
\ No newline at end of file
diff --git a/boop/infrared/ir_codes/rca/xbox b/boop/infrared/ir_codes/rca/xbox
deleted file mode 100644
index 38679e8..0000000
--- a/boop/infrared/ir_codes/rca/xbox
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- infrared codes for RCA xbox
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-{
- 0x00, // A ->
- 0x00, // B ->
- 0x00, // C ->
- 0x00, // D ->
- 0x00, // Betty ->
- 0x27, // Exit -> Back
- 0x59, // Up -> Up
- 0x58, // Down -> Down
- 0x56, // Left -> Left
- 0x57, // Right -> Right
- 0xF4, // OK -> Select
- 0x33, // Vol+ ->
- 0x36, // Vol- ->
- 0x39, // Mute ->
- 0x20, // Prog+ -> Skip+
- 0x22, // Prog- -> Skip-
- 0x31, // 1 -> 1
- 0x32, // 2 -> 2
- 0x33, // 3 -> 3
- 0x34, // 4 -> 4
- 0x35, // 5 -> 5
- 0x36, // 6 -> 6
- 0x37, // 7 -> 7
- 0x38, // 8 -> 8
- 0x39, // 9 -> 9
- 0x30, // 0 -> 0
- 0x15, // -/-- -> Play
- 0x1F, // AV -> Stop
- 0x08, // Menu -> Menu
- 0x19, // PiP -> Pause
- 0x1C, // A/B -> Forward
- 0x1D, // 16:9 -> Reverse
- 0x3C, // Info -> Info
- 0x1A, // VTX1 -> Title
- 0x2A, // VTX2 -> Display
- 0x00, // VTX3 ->
- 0x00, // Blue ->
- 0x00, // Yello ->
- 0x00, // Green ->
- 0x00, // Red ->
- 0x00, // TV ->
- 0x30 // Power ->
-},
diff --git a/boop/infrared/ir_codes/rcmm/galaxis b/boop/infrared/ir_codes/rcmm/galaxis
deleted file mode 100644
index 7b7767f..0000000
--- a/boop/infrared/ir_codes/rcmm/galaxis
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- rcmm_galaxis.code - infrared codes for the galaxis receiver in RCMM coding
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-{
- 0x0D500800, // A ->
- 0x0D500861, // B -> Alt
- 0x0D500879, // C -> List
- 0x0D50080A, // D -> Back
- 0x0D500845, // Betty -> Setup
- 0x0D500855, // Exit -> Exit
- 0x0D500858, // Up -> Up
- 0x0D500859, // Down -> Down
- 0x0D50085A, // Left -> Left
- 0x0D50085B, // Right -> Right
- 0x0D50085C, // OK -> OK
- 0x0D500810, // Vol+ -> Vol+
- 0x0D500811, // Vol- -> Vol-
- 0x0D50080D, // Mute -> Mute
- 0x0D500820, // Prog+ -> Prog+
- 0x0D500821, // Prog- -> Prog-
- 0x0D500801, // 1 -> 1
- 0x0D500802, // 2 -> 2
- 0x0D500803, // 3 -> 3
- 0x0D500804, // 4 -> 4
- 0x0D500805, // 5 -> 5
- 0x0D500806, // 6 -> 6
- 0x0D500807, // 7 -> 7
- 0x0D500808, // 8 -> 8
- 0x0D500809, // 9 -> 9
- 0x0D500800, // 0 -> 0
- 0x0D500850, // -/-- -> Audio
- 0x0D5008FF, // AV -> VCR
- 0x0D500878, // Menu -> Menu
- 0x0D500879, // PiP -> List
- 0x0D50084E, // A/B -> Language
- 0x0D500861, // 16:9 -> Alt
- 0x0D50080F, // Info -> Info
- 0x0D50083C, // VTX1 -> Text
- 0x0D50084B, // VTX2 -> Subtitle
- 0x0D5008CC, // VTX3 -> EPG
- 0x0D500870, // Blue -> Blue
- 0x0D50086F, // Yello -> Yellow
- 0x0D50086E, // Green -> Green
- 0x0D50086D, // Red -> Red
- 0x0D50083F, // TV -> TV
- 0x0D50080C // Power -> Power
-},
diff --git a/boop/infrared/ir_codes/rcmm/ufs910 b/boop/infrared/ir_codes/rcmm/ufs910
deleted file mode 100644
index 0554c3e..0000000
--- a/boop/infrared/ir_codes/rcmm/ufs910
+++ /dev/null
@@ -1 +0,0 @@
-/*
infrared codes for Kathrein UFS910
Copyright (C) 2009
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
{
0x00000000, // A ->
0x00000000, // B ->
0x00000000, // C ->
0x00000000, // D ->
0x00000000, // Betty ->
0x22908055, // Exit -> Back
0x22908058, // Up -> Up
0x22908059, // Down -> Down
0x2290805A, // Left -> Left
0x2290805B, // Right -> Right
0x2290805c, // OK -> OK
0x22908010, // Vol+ -> Vol+
0x22908011, // Vol- -> Vol-
0x2290800D, // Mute -> Mute
0x2290801E, // Prog+ -> Prog+
0x2290801F, // Prog- -> Prog-
0x22908001, // 1 -> 1
0x22908002, // 2 -> 2
0x22908003, // 3 -> 3
0x22908004, // 4 -> 4
0x22908005, // 5 -> 5
0x22908006, // 6 -> 6
0x22908007, // 7 -> 7
0x22908008, // 8 -> 8
0x22908009, // 9 -> 9
0x22908000, // 0 -> 0
0x229080CC, // -/-- -> EPG
0x00000000, // AV ->
0x22908054, // Menu -> Menue
0x22908021, // PiP -> Rewind
0x22908038, // A/B -> Play
0x22908020, // 16:9 -> Forward
0x2290800F, // Info -> Info
0x22908039, // VTX1 -> Pause
0x22908037, // VTX2 -> Record
0x22908031, // VTX3 -> Stop
0x22908070, // Blue -> Blue
0x2290806F, // Yello -> Yellow
0x2290806E, // Green -> Green
0x2290806D, // Red -> Red
0x2290803C, // TV -> Text
0x2290800C // Power -> Standby
},
\ No newline at end of file
diff --git a/boop/infrared/ir_codes/rec80/rak_sc957wk b/boop/infrared/ir_codes/rec80/rak_sc957wk
deleted file mode 100644
index 2dc8181..0000000
--- a/boop/infrared/ir_codes/rec80/rak_sc957wk
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- infrared codes for REC80 rak sc957wk
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-{
- 0x80F64A1C, // A -> Subwoofer
- 0x8024981C, // B -> Auto Off
- 0x802A961C, // C -> Sleep
- 0x800EA40A, // D -> Disc
- 0x80208A0A, // Betty -> Program
- 0x8009A30A, // Exit -> Cancel
- 0x80B60A1C, // Up -> Up
- 0x80BA061C, // Down -> Down
- 0x80F5491C, // Left -> SkipBack/Rewind
- 0x80F64A1C, // Right -> SkipForward/FastForward
- 0x80000000, // OK ->
- 0x80802000, // Vol+ -> Vol+
- 0x80812100, // Vol- -> Vol-
- 0x80923200, // Mute -> Muting
- 0x80000000, // Prog+ ->
- 0x80000000, // Prog- ->
- 0x80AC101C, // 1 -> 1
- 0x80AD111C, // 2 -> 2
- 0x80AE121C, // 3 -> 3
- 0x80AF131C, // 4 -> 4
- 0x80A8141C, // 5 -> 5
- 0x80A9151C, // 6 -> 6
- 0x80AA161C, // 7 -> 7
- 0x80AB171C, // 8 -> 8
- 0x80A4181C, // 9 -> 9
- 0x80A5191C, // 0 -> 0
- 0x8038841C, // -/-- -> >10
- 0x80000000, // AV ->
- 0x80BC001C, // Menu -> Stop
- 0x80ED470A, // PiP -> Repeat
- 0x80E74D0A, // A/B -> Random
- 0x80813110, // 16:9 -> 3D AI
- 0x80000000, // Info -> CD
- 0x80000000, // VTX1 -> Tuner
- 0x80000000, // VTX2 -> Aux
- 0x80338310, // VTX3 -> EQ
- 0x80813110, // Blue -> Tape
- 0x80349400, // Yello -> CD
- 0x8000A404, // Green -> Tuner
- 0x803A9A00, // Red -> Aux
- 0x80000000, // TV ->
- 0x80813D1C // Power -> Standby
-},
diff --git a/boop/infrared/ir_codes/recs80/seleco_020 b/boop/infrared/ir_codes/recs80/seleco_020
deleted file mode 100644
index d957ed9..0000000
--- a/boop/infrared/ir_codes/recs80/seleco_020
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- infrared codes for RECS80 seleco 020
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-{
- 0x0000, // A ->
- 0x0000, // B ->
- 0x0000, // C ->
- 0x0000, // D ->
- 0x0000, // Betty ->
- 0x0000, // Exit ->
- 0x05DC, // Up ->
- 0x05DE, // Down ->
- 0x05DA, // Left ->
- 0x05DB, // Right ->
- 0x05EC, // OK -> Enter
- 0x05D0, // Vol+ -> Vol+
- 0x05D1, // Vol- -> Vol-
- 0x05E9, // Mute -> Muting
- 0x05CA, // Prog+ -> Prog+
- 0x05CB, // Prog- -> Prog-
- 0x05C1, // 1 -> 1
- 0x05C2, // 2 -> 2
- 0x05C3, // 3 -> 3
- 0x05C4, // 4 -> 4
- 0x05C5, // 5 -> 5
- 0x05C6, // 6 -> 6
- 0x05C7, // 7 -> 7
- 0x05C8, // 8 -> 8
- 0x05C9, // 9 -> 9
- 0x05C0, // 0 -> 0
- 0x0000, // -/-- ->
- 0x0000, // AV ->
- 0x0000, // Menu ->
- 0x0000, // PiP ->
- 0x05EE, // A/B -> A/B
- 0x0000, // 16:9 ->
- 0x05EE, // Info -> Info
- 0x05F6, // VTX1 -> VTX1
- 0x05F0, // VTX2 -> VTX3
- 0x05F7, // VTX3 -> VTX4
- 0x0000, // Blue ->
- 0x0000, // Yello ->
- 0x0000, // Green ->
- 0x0000, // Red ->
- 0x0000, // TV ->
- 0x05CC // Power -> Power
-},
diff --git a/boop/infrared/ir_codes/recs80/seleco_157 b/boop/infrared/ir_codes/recs80/seleco_157
deleted file mode 100644
index 70cd77f..0000000
--- a/boop/infrared/ir_codes/recs80/seleco_157
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- infrared codes for RECS80 seleco 157
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-{
- 0x0000, // A ->
- 0x0000, // B ->
- 0x0000, // C ->
- 0x0000, // D ->
- 0x0000, // Betty ->
- 0x0000, // Exit ->
- 0x05DC, // Up ->
- 0x05DE, // Down ->
- 0x05DA, // Left ->
- 0x05DB, // Right ->
- 0x05EC, // OK -> Enter
- 0x05D0, // Vol+ -> Vol+
- 0x05D1, // Vol- -> Vol-
- 0x05E9, // Mute -> Muting
- 0x05D2, // Prog+ -> Prog+
- 0x05D3, // Prog- -> Prog-
- 0x05C1, // 1 -> 1
- 0x05C2, // 2 -> 2
- 0x05C3, // 3 -> 3
- 0x05C4, // 4 -> 4
- 0x05C5, // 5 -> 5
- 0x05C6, // 6 -> 6
- 0x05C7, // 7 -> 7
- 0x05C8, // 8 -> 8
- 0x05C9, // 9 -> 9
- 0x05C0, // 0 -> 0
- 0x0000, // -/-- ->
- 0x0000, // AV ->
- 0x0000, // Menu ->
- 0x0000, // PiP ->
- 0x05CA, // A/B -> A/B
- 0x0000, // 16:9 ->
- 0x05E8, // Info -> Info
- 0x05F3, // VTX1 -> VTX1
- 0x05E5, // VTX2 -> VTX2
- 0x05F6, // VTX3 -> VTX3
- 0x0000, // Blue ->
- 0x0000, // Yello ->
- 0x0000, // Green ->
- 0x0000, // Red ->
- 0x0000, // TV ->
- 0x05F0 // Power -> Power
-},
diff --git a/boop/infrared/ir_codes/rf/cc1100_a0 b/boop/infrared/ir_codes/rf/cc1100_a0
deleted file mode 100644
index 2e05ed9..0000000
--- a/boop/infrared/ir_codes/rf/cc1100_a0
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- RF codes for cc1100 Adress 0
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-{
- 0x0000, // A ->
- 0x0000, // B ->
- 0x0000, // C ->
- 0x0000, // D ->
- 0x0000, // Betty ->
- 0x0000, // Exit ->
- 0x000b, // Up -> Brightness+
- 0x000c, // Down -> Brightness-
- 0x000d, // Left -> Left
- 0x000e, // Right -> Right
- 0x000f, // OK -> OK
- 0x0010, // Vol+ -> Vol+
- 0x0011, // Vol- -> Vol-
- 0x0012, // Mute -> Mute
- 0x0013, // Prog+ -> Prog+
- 0x0014, // Prog- -> Prog-
- 0x0001, // 1 -> 1
- 0x0002, // 2 -> 2
- 0x0003, // 3 -> 3
- 0x0004, // 4 -> 4
- 0x0005, // 5 -> 5
- 0x0006, // 6 -> 6
- 0x0007, // 7 -> 7
- 0x0008, // 8 -> 8
- 0x0009, // 9 -> 9
- 0x000a, // 0 -> 0
- 0x0015, // -/-- -> -/--
- 0x0016, // AV -> AV
- 0x0017, // Menu -> Menu
- 0x0018, // PiP -> PiP
- 0x0019, // A/B -> A/B
- 0x001a, // 16:9 -> 16:9
- 0x001b, // Info -> Info
- 0x001c, // VTX1 -> VTX1
- 0x001d, // VTX2 -> VTX2
- 0x001e, // VTX3 -> VTX3
- 0x001f, // Blue -> Blue
- 0x0020, // Yello -> Yello
- 0x0021, // Green -> Green
- 0x0022, // Red -> Red
- 0x0023, // TV -> TV
- 0x0024 // Power -> Standby
-},
diff --git a/boop/infrared/ir_codes/rf/cc1100_a1 b/boop/infrared/ir_codes/rf/cc1100_a1
deleted file mode 100644
index ec84a50..0000000
--- a/boop/infrared/ir_codes/rf/cc1100_a1
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- RF codes for cc1100 Adress 1
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-{
- 0x0000, // A ->
- 0x0000, // B ->
- 0x0000, // C ->
- 0x0000, // D ->
- 0x0000, // Betty ->
- 0x0000, // Exit ->
- 0x010b, // Up -> Brightness+
- 0x010c, // Down -> Brightness-
- 0x010d, // Left -> Left
- 0x010e, // Right -> Right
- 0x010f, // OK -> OK
- 0x0110, // Vol+ -> Vol+
- 0x0111, // Vol- -> Vol-
- 0x0112, // Mute -> Mute
- 0x0113, // Prog+ -> Prog+
- 0x0114, // Prog- -> Prog-
- 0x0101, // 1 -> 1
- 0x0102, // 2 -> 2
- 0x0103, // 3 -> 3
- 0x0104, // 4 -> 4
- 0x0105, // 5 -> 5
- 0x0106, // 6 -> 6
- 0x0107, // 7 -> 7
- 0x0108, // 8 -> 8
- 0x0109, // 9 -> 9
- 0x010a, // 0 -> 0
- 0x0115, // -/-- -> -/--
- 0x0116, // AV -> AV
- 0x0117, // Menu -> Menu
- 0x0118, // PiP -> PiP
- 0x0119, // A/B -> A/B
- 0x011a, // 16:9 -> 16:9
- 0x011b, // Info -> Info
- 0x011c, // VTX1 -> VTX1
- 0x011d, // VTX2 -> VTX2
- 0x011e, // VTX3 -> VTX3
- 0x011f, // Blue -> Blue
- 0x0120, // Yello -> Yello
- 0x0121, // Green -> Green
- 0x0122, // Red -> Red
- 0x0123, // TV -> TV
- 0x0124 // Power -> Standby
-},
diff --git a/boop/infrared/ir_codes/sirc/UFD400 b/boop/infrared/ir_codes/sirc/UFD400
deleted file mode 100644
index 158abcd..0000000
--- a/boop/infrared/ir_codes/sirc/UFD400
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- infrared codes for SPACEENC seleco 027
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-{
- 0x0000, // A ->
- 0x00, // B ->
- 0x00, // C ->
- 0x00, // D ->
- 0x00, // Betty ->
- 0x47B8, // Exit ->
- 0x0BF4, // Up -> Play
- 0x738C, // Down -> Stop
- 0x6798, // Left -> Rewind
- 0x27D8, // Right -> Forward
- 0x3BC4, // OK -> Enter
- 0x4BB4, // Vol+ -> Vol+
- 0x2BD4, // Vol- -> Vol-
- 0x1BE4, // Mute -> Muting
- 0x00, // Prog+ -> Prog+
- 0x00, // Prog- -> Prog-
- 0x3FC0, // 1 -> 1
- 0x5FA0, // 2 -> 2
- 0x1FE0, // 3 -> 3
- 0x6F90, // 4 -> 4
- 0x2FD0, // 5 -> 5
- 0x4FB0, // 6 -> 6
- 0x0FF0, // 7 -> 7
- 0x7788, // 8 -> 8
- 0x37C8, // 9 -> 9
- 0x7F80, // 0 -> 0
- 0x00, // -/-- ->
- 0x00, // AV ->
- 0x00, // Menu ->
- 0x00, // PiP ->
- 0x26D9, // A/B -> A/B
- 0x15EA, // 16:9 ->
- 0x659A, // Info -> Info
- 0x6798, // VTX1 -> VTX1
- 0x7B84, // VTX2 -> VTX3
- 0x5EA1, // VTX3 -> VTX4
- 0x00, // Blue ->
- 0x00, // Yello ->
- 0x00, // Green ->
- 0x00, // Red -> Pause
- 0x07F8, // TV ->
- 0x5BA4 // Power -> Power
-},
diff --git a/boop/infrared/ir_codes/sirc/rm-pp411 b/boop/infrared/ir_codes/sirc/rm-pp411
deleted file mode 100644
index d849442..0000000
--- a/boop/infrared/ir_codes/sirc/rm-pp411
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- Infrared codes for Sony RM-PP411 Receiver AV2
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-// 15 bit commands, msb = 1
-
-{
- 0x0000, // A ->
- 0x0000, // B ->
- 0x0000, // C ->
- 0x0000, // D ->
- 0xD877, // Betty -> Main Menu
- 0x9860, // Exit -> Sleep
- 0x0000, // Up ->
- 0x0000, // Down ->
- 0x0000, // Left ->
- 0x0000, // Right ->
- 0x0000, // OK ->
- 0x9812, // Vol+ -> Master Vol+
- 0x9813, // Vol- -> Master Vol-
- 0x9814, // Mute -> Muting
- 0xD86E, // Prog+ -> Mode+
- 0xD86F, // Prog- -> Mode-
- 0x9822, // 1 -> Video 1
- 0x981E, // 2 -> Video 2
- 0x9842, // 3 -> Video 3
- 0x987D, // 4 -> DVD/LD
- 0x9869, // 5 -> MD/Tape
- 0x9825, // 6 -> CD/SACD
- 0x9821, // 7 -> Tuner
- 0x9820, // 8 -> Phono
- 0x981D, // 9 -> Aux
- 0x9849, // 0 -> Analog Direct
- 0xD841, // -/-- -> 2 CH
- 0x0000, // AV ->
- 0x0000, // Menu ->
- 0x0000, // PiP ->
- 0x0000, // A/B ->
- 0x0000, // 16:9 ->
- 0x9853, // Info -> On Screen
- 0x9815, // VTX1 -> I/O
- 0xD847, // VTX2 -> AUTO Decoding
- 0x9817, // VTX3 -> MPX/Dual
- 0xD826, // Blue -> Preset
- 0xD84A, // Yello -> Test Tone
- 0xBCFB, // Green -> Source
- 0x9872, // Red -> Multi CH
- 0x986A, // TV -> TV/Sat
- 0x8237, // Power -> Standby
-},
diff --git a/boop/infrared/ir_codes/sirc/tv b/boop/infrared/ir_codes/sirc/tv
deleted file mode 100644
index 02ab553..0000000
--- a/boop/infrared/ir_codes/sirc/tv
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- Infrared codes for Sony TV
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-// 12 bit commands (MSB = 0)
-
-{
- 0x0000, // A ->
- 0x0000, // B ->
- 0x0000, // C ->
- 0x0000, // D ->
- 0x0000, // Betty ->
- 0x0000, // Exit ->
- 0x0000, // Up ->
- 0x0000, // Down ->
- 0x0000, // Left ->
- 0x0000, // Right ->
- 0x0000, // OK ->
- 0x0092, // Vol+ -> Vol+
- 0x0093, // Vol- -> Vol-
- 0x0094, // Mute -> Mute
- 0x0090, // Prog+ -> Prog+
- 0x0091, // Prog- -> Prog-
- 0x0080, // 1 -> 1
- 0x0081, // 2 -> 2
- 0x0082, // 3 -> 3
- 0x0083, // 4 -> 4
- 0x0084, // 5 -> 5
- 0x0085, // 6 -> 6
- 0x0086, // 7 -> 7
- 0x0087, // 8 -> 8
- 0x0088, // 9 -> 9
- 0x0089, // 0 -> 0
- 0x009D, // -/-- -> -/--
- 0x00A5, // AV -> Ext
- 0x0000, // Menu ->
- 0x0000, // PiP ->
- 0x0000, // A/B ->
- 0x0000, // 16:9 ->
- 0x0000, // Info ->
- 0x00BF, // VTX1 -> Teletext
- 0x0000, // VTX2 ->
- 0x0000, // VTX3 ->
- 0x0182, // Blue -> Blue
- 0x0182, // Yellow -> Yellow
- 0x0181, // Green -> Green
- 0x0180, // Red -> Red
- 0x00B8, // TV -> TV
- 0x0095 // Power ->
-},
diff --git a/boop/infrared/ir_codes/spaceenc/schneider_dtv3 b/boop/infrared/ir_codes/spaceenc/schneider_dtv3
deleted file mode 100644
index 488e73d..0000000
--- a/boop/infrared/ir_codes/spaceenc/schneider_dtv3
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- infrared codes for SPACEENC schneider dtv3
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-{
- 0x00, // A ->
- 0x00, // B ->
- 0x00, // C ->
- 0x00, // D ->
- 0x00, // Betty ->
- 0x00, // Exit ->
- 0x00, // Up -> Chan+ Fast
- 0x00, // Down -> Chan- Fast
- 0x00, // Left -> Vol- Fast
- 0x00, // Right -> Vol+ Fast
- 0x00, // OK ->
- 0x05, // Vol+ -> Vol+
- 0x06, // Vol- -> Vol-
- 0x00, // Mute ->
- 0x07, // Prog+ -> Chan+
- 0x08, // Prog- -> Chan--
- 0x00, // 1 ->
- 0x00, // 2 ->
- 0x00, // 3 ->
- 0x00, // 4 ->
- 0x00, // 5 ->
- 0x00, // 6 ->
- 0x00, // 7 ->
- 0x00, // 8 ->
- 0x00, // 9 ->
- 0x00, // 0 ->
- 0x00, // -/-- ->
- 0x00, // AV ->
- 0x00, // Menu ->
- 0x00, // PiP ->
- 0x00, // A/B ->
- 0x00, // 16:9 ->
- 0x09, // Info -> White
- 0x00, // VTX1 ->
- 0x00, // VTX2 ->
- 0x00, // VTX3 ->
- 0x0A, // Blue -> Blue
- 0x0B, // Yello -> Yellow
- 0x0C, // Green -> Green
- 0x0D, // Red -> Red
- 0x00, // TV ->
- 0x0E // Power -> Power
-},
diff --git a/boop/infrared/ir_codes/spaceenc/schneider_dtv3_xtra b/boop/infrared/ir_codes/spaceenc/schneider_dtv3_xtra
deleted file mode 100644
index da11f31..0000000
--- a/boop/infrared/ir_codes/spaceenc/schneider_dtv3_xtra
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- infrared codes for SPACEENC schneider dtv3
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-const unsigned int dtv3_codes[15] =
-{
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x0000003F, // Vol+
- 0x0008007E, // Vol-
- 0x0000207F, // Chan+
- 0x000840FC, // Chan-
- 0x90000027, // White
- 0x2000004F, // Blue
- 0x08000067, // Yellow
- 0xC000000F, // Green
- 0x8000001F, // Red
- 0x30000087 // Power
-};
-
-const unsigned char dtv3_pre[15] =
-{
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0xFF, // Vol+
- 0x7F, // Vol-
- 0xCF, // Chan+
- 0xCF, // Chan-
- 0xFF, // White
- 0xFF, // Blue
- 0xFF, // Yellow
- 0xFF, // Green
- 0xFF, // Red
- 0xFF // Power
-};
diff --git a/boop/infrared/ir_codes/spaceenc/seleco_027 b/boop/infrared/ir_codes/spaceenc/seleco_027
deleted file mode 100644
index 08ec25e..0000000
--- a/boop/infrared/ir_codes/spaceenc/seleco_027
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- infrared codes for SPACEENC seleco 027
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-{
- 0x00, // A ->
- 0x00, // B ->
- 0x00, // C ->
- 0x00, // D ->
- 0x00, // Betty ->
- 0x00, // Exit ->
- 0x1C, // Up -> Play
- 0x1E, // Down -> Stop
- 0x1A, // Left -> Rewind
- 0x1B, // Right -> Forward
- 0x07, // OK -> Enter
- 0x01, // Vol+ -> Vol+
- 0x02, // Vol- -> Vol-
- 0x05, // Mute -> Muting
- 0x03, // Prog+ -> Prog+
- 0x04, // Prog- -> Prog-
- 0x10, // 1 -> 1
- 0x11, // 2 -> 2
- 0x12, // 3 -> 3
- 0x13, // 4 -> 4
- 0x14, // 5 -> 5
- 0x15, // 6 -> 6
- 0x16, // 7 -> 7
- 0x17, // 8 -> 8
- 0x18, // 9 -> 9
- 0x19, // 0 -> 0
- 0x00, // -/-- ->
- 0x00, // AV ->
- 0x00, // Menu ->
- 0x00, // PiP ->
- 0x1F, // A/B -> A/B
- 0x00, // 16:9 ->
- 0x28, // Info -> Info
- 0x3F, // VTX1 -> VTX1
- 0x0B, // VTX2 -> VTX3
- 0x0D, // VTX3 -> VTX4
- 0x00, // Blue ->
- 0x00, // Yello ->
- 0x00, // Green ->
- 0x1D, // Red -> Pause
- 0x00, // TV ->
- 0x0E // Power -> Power
-},
diff --git a/boop/infrared/ir_lirc.c b/boop/infrared/ir_lirc.c
deleted file mode 100644
index 2dc4204..0000000
--- a/boop/infrared/ir_lirc.c
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
- ir_lirc.c - lirc ir encoder
- Copyright (C) 2009
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "lpc2220.h"
-#include "infrared.h"
-#include "ir_lirc.h"
-#include "encoders.h"
-#include "codes.h"
-#include "fonty.h"
-#include "lcd.h"
-#include "rf.h"
-#include "cc1100.h"
-#include "pwm.h"
-
-#include "global.h"
-
-extern volatile unsigned char mod_enable;
-extern volatile unsigned int cycles;
-
-struct CODE_TABLE_L *lirctable;
-
-unsigned int prev_cycles; /* needed for handling of b&o specific protocol added MN2017325 */
-
-#define LIRC_IDLE 0x00
-#define LIRC_HEAD_P 0x01
-#define LIRC_HEAD_S 0x02
-#define LIRC_LEAD_P 0x03
-#define LIRC_PRE_DAT_P 0x04
-#define LIRC_PRE_DAT_S 0x05
-#define LIRC_PRE_P 0x06
-#define LIRC_PRE_S 0x07
-#define LIRC_DATA_P 0x08
-#define LIRC_DATA_S 0x09
-#define LIRC_POST_P 0x0A
-#define LIRC_POST_S 0x0B
-#define LIRC_POST_DAT_P 0x0C
-#define LIRC_POST_DAT_S 0x0D
-#define LIRC_REPEAT_P 0x0E
-#define LIRC_REPEAT_S 0x0F
-#define LIRC_TRAIL_P 0x10
-#define LIRC_FOOT_S 0x11
-#define LIRC_FOOT_P 0x12
-#define LIRC_GAP 0x13
-
-const struct irModule LIRC_Module =
-{
- LIRC_Encode,
- LIRC_Send,
- LIRC_Repeat,
- LIRC_Stop,
- 136, // carrier
- 1, // carrier-on
- 3 // carrier-off
-};
-
-
-unsigned char __attribute__ ((section(".text.fastcode"))) send_data (unsigned long data, unsigned char pulse) {
-
- const unsigned short* bittimes[4] = {&(lirctable->pzero), &(lirctable->pone), &(lirctable->ptwo), &(lirctable->pthree)};
- unsigned char notpulse = 1;
-
- if(pulse) {
- pulse = 1;
- notpulse = 0;
- }
-
- if(is_rcmm) {
- switch(data & 0xC0000000) {
- case 0x00000000:
- cycles = bittimes[0][notpulse];
- break;
- case 0x40000000:
- cycles = bittimes[1][notpulse];
- break;
- case 0x80000000:
- cycles = bittimes[2][notpulse];
- break;
- case 0xC0000000:
- cycles = bittimes[3][notpulse];
- break;
- }
- mod_enable = pulse;
- if(!pulse) {
- ir.lirc.bit +=2;
- return(2);
- }
- return(0);
- }
- else if(is_biphase) {
- if(data & 0x80000000) {
- cycles = bittimes[1][pulse];
- mod_enable = notpulse;
- }
- else {
- cycles = bittimes[0][notpulse];
- mod_enable = pulse;
- }
- if((ir.lirc.bit+1 == lirctable->rc6_bit))
- cycles <<= 1;
- }
- else {
- if(data & 0x80000000) {
- cycles = bittimes[1][notpulse];
- }
- else {
- cycles = bittimes[0][notpulse];
- }
- mod_enable = pulse;
- }
- if(!pulse) {
- ir.lirc.bit++;
- return(1);
- }
- return(0);
-}
-
-void __attribute__ ((section(".text.fastcode"))) LIRC_Encode (void) {
- unsigned long gap;
-
- ir.lirc.cycles_counter += cycles;
-
- switch(ir.state)
- {
- case LIRC_IDLE:
- cycles = lirctable->pone;
- mod_enable = 0;
- break;
- case LIRC_HEAD_P:
- ir.lirc.cycles_counter = 0;
- if(has_header && (!ir.lirc.repeats || (!(lirctable->flags&LIRC_NO_HEAD_REP) && !has_repeat) || (lirctable->flags&LIRC_REPEAT_HEADER))) { //
- mod_enable = 1;
- cycles = lirctable->phead;
- ir.state++;
- break;
- case LIRC_HEAD_S:
- mod_enable = 0;
- cycles = lirctable->shead;
- ir.state++;
- break;
- }
- ir.state = LIRC_LEAD_P;
- case LIRC_LEAD_P:
- if(lirctable->plead) {
- mod_enable = 1;
- cycles = lirctable->plead;
- ir.state++;
- break;
- }
- ir.state++;
- case LIRC_PRE_DAT_P:
- if(!has_repeat || !(ir.lirc.repeats)) {
- if(lirctable->pre_data_bits) {
- send_data(ir.lirc.pre_data,1);
- ir.state++;
- break;
- case LIRC_PRE_DAT_S:
- ir.lirc.pre_data <<= send_data(ir.lirc.pre_data,0);
- if(ir.lirc.bit >= lirctable->pre_data_bits)
- ir.state++;
- else
- ir.state--;
- break;
- case LIRC_PRE_P:
- if(lirctable->pre_p && lirctable->pre_s) {
- mod_enable = 1;
- cycles = lirctable->pre_p;
- ir.state++;
- break;
- case LIRC_PRE_S:
- mod_enable = 0;
- cycles = lirctable->pre_s;
- ir.state++;
- break;
- }
- }
- ir.state = LIRC_DATA_P;
- prev_cycles = 0;
- case LIRC_DATA_P:
- send_data(ir.cmd,1);
- ir.state++;
- break;
- case LIRC_DATA_S:
- ir.cmd <<= send_data(ir.cmd,0);
- /* handling for b&o specific protocol added MN2017325
- special r-bit coding, if current bit is equal previous bit */
- if(is_BO) {
- if (prev_cycles == cycles) {
- prev_cycles = cycles;
- cycles = lirctable->szero * 2 ;
- } else {
- prev_cycles = cycles;
- }
- }
- if(ir.lirc.bit >= lirctable->pre_data_bits + lirctable->bits)
- ir.state++;
- else
- ir.state--;
- break;
- case LIRC_POST_P:
- if(lirctable->post_data_bits) {
- if(lirctable->post_p && lirctable->post_s) {
- mod_enable = 1;
- cycles = lirctable->post_p;
- ir.state++;
- break;
- case LIRC_POST_S:
- mod_enable = 0;
- cycles = lirctable->post_s;
- ir.state++;
- break;
- }
- ir.state = LIRC_POST_DAT_P;
- case LIRC_POST_DAT_P:
- send_data(ir.lirc.post_data,1);
- ir.state++;
- break;
- case LIRC_POST_DAT_S:
- ir.lirc.post_data <<= send_data(ir.lirc.post_data,0);
- if(ir.lirc.bit >= lirctable->pre_data_bits + lirctable->bits + lirctable->post_data_bits)
- ir.state = LIRC_TRAIL_P;
- else
- ir.state--;
- break;
- }
- }
- ir.state = LIRC_REPEAT_P;
- case LIRC_REPEAT_P:
- if(has_repeat && ir.lirc.repeats) {
- mod_enable = 1;
- cycles = lirctable->prepeat;
- ir.state++;
- break;
- case LIRC_REPEAT_S:
- mod_enable = 0;
- cycles = lirctable->srepeat;
- ir.state++;
- break;
- }
- ir.state = LIRC_TRAIL_P;
- case LIRC_TRAIL_P:
- if(lirctable->ptrail) {
- mod_enable = 1;
- cycles = lirctable->ptrail;
- ir.state++;
- break;
- }
- ir.state++;
- case LIRC_FOOT_S:
- if(has_foot && (!ir.lirc.repeats || !(lirctable->flags&LIRC_NO_FOOT_REP)) && (!has_repeat || !ir.lirc.repeats)) {
- mod_enable = 0;
- cycles = lirctable->sfoot;
- ir.state++;
- break;
- case LIRC_FOOT_P:
- mod_enable = 1;
- cycles = lirctable->pfoot;
- ir.state++;
- break;
- }
- case LIRC_GAP:
- default:
- mod_enable = 0;
- ir.lirc.bit = 0;
- ir.cmd = ir.actcmd;
- ir.lirc.pre_data = ir.lirc.actpre_data;
- ir.lirc.post_data = ir.lirc.actpost_data;
-
- if((lirctable->repeat_gap && has_repeat && ir.lirc.repeats) | (is_RF && (ir.lirc.repeats >= lirctable->min_repeat)))
- gap = lirctable->repeat_gap;
- else
- gap = lirctable->gap;
-
- if(is_const && (ir.lirc.cycles_counter < gap))
- cycles = gap - ir.lirc.cycles_counter;
- else
- cycles = gap;
-
- if((ir.lirc.repeats >= lirctable->min_repeat) && ir.lirc.stop) {
- ir.state = LIRC_IDLE;
- }
- else {
- if(ir.lirc.repeats < 0xff)
- ir.lirc.repeats++;
- ir.state = LIRC_HEAD_P;
- }
- }
-
- T1MR0 = 15 * cycles;
-
-}
-
-void LIRC_Init(unsigned char map)
-{
- unsigned long freq;
-
- if(map < LIRC.num_tables) {
-
- lirctable = (struct CODE_TABLE_L*)&(LIRC.table[map]);
-
- copyMapI((unsigned int*)LIRC.table[map].codes);
- setIR(LIRC_Module);
-
- if(lirctable->flags&LIRC_RF) {
- ir.duty_cycle = 50;
- freq = 20000;
- }
- else {
- freq = lirctable->freq;
- if(!freq)
- freq = 38000;
-
- ir.duty_cycle = lirctable->duty_cycle;
- if(!lirctable->duty_cycle) { //default 50%
- ir.duty_cycle = 50;
- }
- }
-
- PWM_set_frequency(freq);
-
- T1MR0 = 15000000 / (freq);
-
- ir.lirc.actpre_data = (lirctable->pre_data)<<(32-lirctable->pre_data_bits);
- ir.lirc.actpost_data = (lirctable->post_data)<<(32-lirctable->post_data_bits);
-
- ir.cmd = 0;
- ir.actcmd = 0;
- ir.lirc.stop = 0;
- ir.state = LIRC_IDLE;
- ir.lirc.bit = 0;
-
- }
-}
-
-void LIRC_Send(unsigned long cmd)
-{
- unsigned long togglemask;
- if(cmd != 0x0000) {
-
- ir.lirc.pre_data = ir.lirc.actpre_data;
- ir.actcmd = cmd<<(32-lirctable->bits);
- ir.lirc.post_data = ir.lirc.actpost_data;
- ir.lirc.stop = 0;
- ir.lirc.repeats = 0;
-
- if(ir.toggle & 0x01) {
- togglemask = (unsigned long)(lirctable->toggle_bit_mask) << (32-lirctable->post_data_bits);
- ir.lirc.post_data ^= togglemask;
-
- togglemask = (unsigned long)(lirctable->toggle_bit_mask>>lirctable->post_data_bits) << (32-lirctable->bits);
- ir.actcmd ^= togglemask;
-
- togglemask = (unsigned long)(lirctable->toggle_bit_mask>>(lirctable->post_data_bits + lirctable->bits)) << (32-lirctable->pre_data_bits);
- ir.lirc.pre_data ^= togglemask;
- }
-
- if(ir.state == LIRC_IDLE) {
- ir.cmd = ir.actcmd;
- ir.lirc.bit = 0;
- ir.state++;
- if(is_RF) {
- RFasyncmode(true);
- cc1100_write1(FREQ2,((lirctable->freq)>>16) & 0xFF);
- cc1100_write1(FREQ1,((lirctable->freq)>>8) & 0xFF);
- cc1100_write1(FREQ0,(lirctable->freq) & 0xFF);
- cc1100_strobe(STX);
- }
- runIR();
- }
- }
-}
-
-void LIRC_Repeat(void) {
-
-}
-
-void LIRC_Stop(void)
-{
- ir.lirc.stop = 1;
- if(lirctable->bits){
- while(ir.state != LIRC_IDLE);
- }
-
- ir.toggle++;
- ir.actcmd = 0x0000;
- stopIR();
- if(is_RF) {
- RFasyncmode(false);
- }
-}
diff --git a/boop/infrared/ir_lirc.h b/boop/infrared/ir_lirc.h
deleted file mode 100644
index 3541a87..0000000
--- a/boop/infrared/ir_lirc.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- ir_lirc.h - lirc ir encoder
- Copyright (C) 2009
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef IR_LIRC_H
-#define IR_LIRC_H
-
-
-#define LIRC_RC5 0x0002 /* IR data follows RC5 protocol */
-#define LIRC_SHIFT_ENC LIRC_RC5 /* IR data is shift encoded (name obsolete) */
-#define LIRC_RC6 0x0004 /* IR data follows RC6 protocol */
-#define LIRC_RCMM 0x0008 /* IR data follows RC-MM protocol */
-#define LIRC_SPACE_ENC 0x0010 /* IR data is space encoded */
-//#define LIRC_SPACE_FIRST 0x0020 /* bits are encoded as space+pulse */
-//#define LIRC_GOLDSTAR 0x0040 /* encoding found on Goldstar remote */
-//#define LIRC_GRUNDIG 0x0080 /* encoding found on Grundig remote */
-#define LIRC_BO 0x0100 /* encoding found on Bang & Olufsen remote */
-#define LIRC_RF 0x0200 /* RF ASK/OOK modulator */
-//#define LIRC_SERIAL 0x0400 /* serial protocol */
-//#define LIRC_XMP 0x0800 /* XMP protocol */
-
-/* additinal flags: can be orred together with protocol flag */
-//#define REVERSE 0x0800
-#define LIRC_NO_HEAD_REP 0x1000 /* no header for key repeats */
-#define LIRC_NO_FOOT_REP 0x2000 /* no foot for key repeats */
-#define LIRC_CONST_LENGTH 0x4000 /* signal length+gap is always constant */
-#define LIRC_REPEAT_HEADER 0x8000 /* header is also sent before repeat code */
-
-#define is_rc6 (lirctable->flags & LIRC_RC6)
-#define is_biphase ((lirctable->flags & LIRC_RC5) || is_rc6)
-#define is_rcmm (lirctable->flags & LIRC_RCMM)
-#define is_const (lirctable->flags & LIRC_CONST_LENGTH)
-#define is_RF (lirctable->flags & LIRC_RF)
-#define is_BO (lirctable->flags & LIRC_BO) /* flag for b&o specific protocol MN2017325 */
-#define has_header (lirctable->phead && lirctable->shead)
-#define has_foot (lirctable->pfoot && lirctable->sfoot)
-#define has_repeat (lirctable->prepeat && lirctable->srepeat)
-
-//FS20 Protocol description see http://fhz4linux.info/tiki-index.php?page=FS20%20Protocol
-#define calcFS20pre(HC1,par1,HC2,par2) ((1<<18) | (HC1<<10) | (par1<<9) | (HC2<<1) | par2)
-#define calcFS20code(Adr,parAdr,Cmd,parCmd,Chk,parChk) ((Adr<<19) | (parAdr<<18) | (Cmd<<10) | (parCmd<<9) | (Chk<<1) | parChk)
-
-void LIRC_Encode (void) __attribute__ ((section(".text.fastcode")));
-
-void LIRC_Init(unsigned char map);
-void LIRC_Send(unsigned long cmd);
-void LIRC_Repeat(void);
-void LIRC_Stop(void);
-
-#endif
diff --git a/boop/infrared/ir_raw.c b/boop/infrared/ir_raw.c
deleted file mode 100644
index 726ade8..0000000
--- a/boop/infrared/ir_raw.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- ir_raw.c - raw ir encoder
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "lpc2220.h"
-#include "infrared.h"
-#include "ir_raw.h"
-#include "encoders.h"
-#include "codes.h"
-#include "ir_capture.h"
-#include "fonty.h"
-#include "lcd.h"
-
-#include "global.h"
-#include "bfs.h"
-
-extern volatile unsigned char mod_enable;
-extern volatile unsigned int cycles;
-extern volatile unsigned long keyMap[42];
-
-struct RAWcmd_* RAWcmd;
-
-#define RAW_IDLE 0x00
-#define RAW_HI 0x01
-#define RAW_LO 0x02
-
-const struct irModule RAW_Module =
-{
- RAW_Encode,
- RAW_Send,
- RAW_Repeat,
- RAW_Stop,
- 91, // carrier
- 1, // carrier-on
- 3, // carrier-off
-};
-
-void __attribute__ ((section(".text.fastcode"))) RAW_Encode (void)
-{
-
- switch(ir.state)
- { unsigned char* x;
-
- case RAW_IDLE:
- mod_enable = 0;
- break;
-
- case RAW_HI:
- mod_enable = 1;
-
- x=(unsigned char*)&(RAWcmd->pulselen[(RAWcmd->data[RAWcmd->CMDstart[ir.actcmd]+ir.general.bit])>>4]);
- cycles = x[0] + (x[1]<<8);
- ir.state++;
- break;
-
- case RAW_LO:
- mod_enable = 0;
- x=(unsigned char*)&(RAWcmd->pulselen[(RAWcmd->data[RAWcmd->CMDstart[ir.actcmd]+ir.general.bit])&0x0f]);
- cycles = x[0] + (x[1]<<8);
- ir.general.bit++;
- if (ir.general.bit >= RAWcmd->CMDlen[ir.actcmd]) {
- ir.general.bit = 0;
- if (ir.general.trail) {
- ir.state = RAW_HI;
- ir.actcmd = 1;
- }
- else
- ir.state = RAW_IDLE;
- }
- else
- ir.state--;
- break;
-
-
- }
-}
-
-void RAW_Init(unsigned char map)
-{
- if(map < RAW.num_tables)
- {
- struct RAWset_ *RAWset;
- unsigned long RAWcmdbase;
-
- int x;
- for(x=0;x<42;x++) {
- keyMap[x] = (unsigned long)&ir.cmd;
- }
- ir.actcmd = 0;
- ir.general.bit = 0;
- ir.state = RAW_IDLE;
- setIR(RAW_Module);
- ir.cmd = 0xff;
-
- RAWcmdbase = (unsigned long)BFS_LoadFileAddr(BFS_ID_RAWslot0 + map);
- if(!RAWcmdbase)
- return;
-
- RAWset = (struct RAWset_ *)RAWcmdbase;
-
- x = memcmp(RAWset,"RC01",4);
- if(x == 0) {
- for(x=0;x<38;x++) {
- keyMap[x+4] = (unsigned long)&RAWset->RAWcmd[x];
- }
- }
-
- }
-}
-
-void RAW_Send(unsigned long cmd)
-{
- RAWcmd = (struct RAWcmd_*)cmd;
- ir.actcmd = RAWcmd->tval;
- if(RAWcmd->tval != 0xff) {
- setIR(RAW_Module);
- T1MR0 = RAWcmd->tval;
- hi_border = (RAWcmd->borders)>>4;
- lo_border = (RAWcmd->borders)&0x0f;
- ir.actcmd = 0;
- ir.general.trail = 0x01;
- sysInfo |= SYS_IR;
- if(ir.state == RAW_IDLE)
- {
- ir.general.bit = 0;
- ir.state++;
- runIR();
- }
- }
-}
-
-void RAW_Repeat(void)
-{
-
-}
-
-void RAW_Stop(void)
-{
- if(RAWcmd->tval != 0xff) {
- ir.general.trail = 0;
- while(ir.state != RAW_IDLE);
- ir.actcmd = 2;
- if(RAWcmd->CMDstart[1] != RAWcmd->CMDstart[2])
- ir.state++;
-
- while(ir.state != RAW_IDLE);
- stopIR();
- sysInfo &= ~SYS_IR;
- }
-}
diff --git a/boop/infrared/ir_raw.h b/boop/infrared/ir_raw.h
deleted file mode 100644
index 35a0ad1..0000000
--- a/boop/infrared/ir_raw.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- ir_raw.h - raw ir encoder
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef IR_RAW_H
-#define IR_RAW_H
-
-void RAW_Encode (void) __attribute__ ((section(".text.fastcode")));
-
-void RAW_Init(unsigned char map);
-void RAW_Send(unsigned long cmd);
-void RAW_Repeat(void);
-void RAW_Stop(void);
-
-#endif
diff --git a/boop/infrared/ir_rc6.c b/boop/infrared/ir_rc6.c
deleted file mode 100644
index 990fa08..0000000
--- a/boop/infrared/ir_rc6.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- ir_rc6.c - phillips rc6 protocoll encoder
- Copyright (C) 2008 p.c.squirrel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "lpc2220.h"
-#include "infrared.h"
-#include "ir_rc6.h"
-#include "encoders.h"
-#include "codes.h"
-
-const struct irModule RC6_Module =
-{
- RC6_Encode,
- RC6_Send,
- RC6_Repeat,
- RC6_Stop,
- 136, // carrier
- 1, // carrier-on
- 3 // carrier-off
-};
-
-extern volatile unsigned char mod_enable;
-extern volatile unsigned int cycles;
-extern volatile unsigned long keyMap[42];
-
-#define RC6_IDLE 0x00
-#define RC6_LEADER_A 0x01
-#define RC6_LEADER_B 0x02
-#define RC6_HEADER_BIT_A 0x03
-#define RC6_HEADER_BIT_B 0x04
-#define RC6_TRAILER_BIT_A 0x05
-#define RC6_TRAILER_BIT_B 0x06
-#define RC6_BIT_A 0x07
-#define RC6_BIT_B 0x08
-#define RC6_WAIT 0x09
-
-
-#define RC6_BITTIME 16
-#define RC6_WAITTIME_M0 188 //~80 ms
-#define RC6_WAITTIME_M6 155
-
-void __attribute__ ((section(".text.fastcode"))) RC6_Encode (void)
-{
- cycles = RC6_BITTIME; //?
- switch(ir.state)
- {
- case RC6_IDLE:
- mod_enable = 0;
- break;
-
- case RC6_LEADER_A:
- mod_enable = 1;
- cycles = RC6_BITTIME*6;
- ir.state++;
- break;
-
- case RC6_LEADER_B:
- mod_enable = 0;
- cycles = RC6_BITTIME*2;
- ir.state++;
- break;
-
- case RC6_HEADER_BIT_A:
- if(ir.general.header_cmd & 0x8) //0b1000 4. bit SB, mb2, mb1, mb0
- mod_enable = 1;
- else
- mod_enable = 0;
- ir.general.header_cmd <<= 1;
- cycles = RC6_BITTIME;
- ir.state++;
- break;
-
- case RC6_HEADER_BIT_B:
- if(mod_enable == 0)
- mod_enable = 1;
- else
- mod_enable = 0;
- ir.general.header_bit++;
- cycles = RC6_BITTIME;
- if(ir.general.header_bit == 4)
- ir.state++;
- else
- ir.state--;
- break;
-
- case RC6_TRAILER_BIT_A:
- if(ir.general.trail)
- mod_enable = 1;
- else
- mod_enable = 0;
- cycles = RC6_BITTIME*2;
- ir.state++;
- break;
-
- case RC6_TRAILER_BIT_B:
- if(ir.general.trail)
- mod_enable = 0;
- else
- mod_enable = 1;
- cycles = RC6_BITTIME*2;
- ir.state++;
- break;
-
- case RC6_BIT_A:
- if(ir.cmd & 0x80000000)
- mod_enable = 1;
- else
- mod_enable = 0;
- ir.cmd <<= 1;
- ir.state++;
- break;
-
- case RC6_BIT_B:
- if(mod_enable == 0)
- mod_enable = 1;
- else
- mod_enable = 0;
- ir.general.bit++;
- if(ir.general.bit == ir.general.numbits)
- ir.state++;
- else
- ir.state--;
- break;
-
- case RC6_WAIT:
- mod_enable = 0;
- ir.general.wait++;
- if(ir.general.wait >= ir.general.waittime)
- {
- ir.general.bit = 0;
- ir.general.header_bit = 0;
- ir.general.wait = 0;
- ir.state = RC6_IDLE;
- }
- break;
- }
- T1MR0 = cycles * RC6_Module.lo_border * RC6_Module.tval;
-}
-
-void RC6_Init(unsigned char map)
-{
- if(map < RC6.num_tables)
- {
- ir.state = RC6_IDLE;
- ir.cmd = 0x0000;
- ir.actcmd = 0x0000;
- ir.general.wait = 0;
- ir.general.bit = 0;
- copyMapI((unsigned int*)RC6.table[map].codes);
- setIR(RC6_Module);
- cycles = RC6_BITTIME;
- }
-}
-
-void RC6_Send(unsigned long cmd)
-{
- ir.actcmd = cmd;
-
- setIRspeed(RC6_Module);
-
-// if(ir.general.toggle & 0x01)
- // ir.actcmd &= 0xF7FF;
- RC6_Repeat();
-}
-
-void RC6_Repeat(void)
-{
- if(ir.actcmd != 0x0000)
- {
- if(ir.state == RC6_IDLE)
- {
- ir.cmd = ir.actcmd;
- if(ir.cmd > 0xffff) {
- if(ir.toggle & 0x01)
- ir.cmd &= 0xFFFF7FFF;
- else
- ir.cmd |= 0x00008000;
- ir.general.numbits = 32;
- ir.general.header_cmd = 0x0E; //0b1110 ->Mode 6;
- ir.general.trail = 0;
- ir.general.waittime = RC6_WAITTIME_M6;
- }
- else {
- ir.cmd <<=16;
- ir.general.numbits = 16;
- ir.general.header_cmd = 0x08; //0b1000 ->Mode 0;
- ir.general.trail = ir.toggle & 0x01;
- ir.general.waittime = RC6_WAITTIME_M0;
- }
- ir.general.header_bit = 0;
- ir.state++;
- runIR();
- }
- }
-}
-
-void RC6_Stop(void)
-{
- if(ir.actcmd != 0x00000000)
- {
-waitend:
- if(ir.state != RC6_IDLE)
- goto waitend;
- }
-
- ir.toggle++;
- ir.actcmd = 0x0000;
- stopIR();
-}
-
-
diff --git a/boop/infrared/ir_rc6.h b/boop/infrared/ir_rc6.h
deleted file mode 100644
index 1347e6f..0000000
--- a/boop/infrared/ir_rc6.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- ir_rc6.h - phillips rc6 protocoll encoder
- Copyright (C) 2008 p.c.squirrel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef IR_RC6_H
-#define IR_RC6_H
-
-void RC6_Encode (void) __attribute__ ((section(".text.fastcode")));
-
-void RC6_Init(unsigned char map);
-void RC6_Send(unsigned long cmd);
-void RC6_Repeat(void);
-void RC6_Stop(void);
-
-#endif
diff --git a/boop/infrared/ir_rf.c b/boop/infrared/ir_rf.c
deleted file mode 100644
index 8032b17..0000000
--- a/boop/infrared/ir_rf.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- ir_rf.c - RF IR encoder
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "lpc2220.h"
-#include "infrared.h"
-#include "ir_rf.h"
-#include "encoders.h"
-#include "codes.h"
-#include "rf.h"
-
-const struct irModule IRRF_Module =
-{
- IRRF_Encode,
- IRRF_Send,
- IRRF_Repeat,
- IRRF_Stop,
- 75, // carrier turbo mode
- 1, // carrier-on
- 4 // carrier-off
-};
-
-extern volatile unsigned char mod_enable;
-extern volatile unsigned int cycles;
-extern volatile unsigned long keyMap[42];
-
-#define IRRF_IDLE 0x00
-#define IRRF_WAIT 0x01
-
-#define IRRF_BITTIME 40
-#define IRRF_WAITTIME 100
-
-void __attribute__ ((section(".text.fastcode"))) IRRF_Encode (void)
-{
- switch(ir.state)
- {
- case IRRF_IDLE:
- mod_enable = 0;
- break;
-
- case IRRF_WAIT:
- mod_enable = 0;
- ir.general.wait++;
- if(ir.general.wait >= IRRF_WAITTIME)
- {
- ir.general.bit = 0;
- ir.general.wait = 0;
- ir.state = IRRF_IDLE;
- }
- break;
- }
- T1MR0 = 15*1000;
-}
-
-void IRRF_Init(unsigned char map)
-{
- if(map < IRRF.num_tables)
- {
- ir.state = IRRF_IDLE;
- ir.cmd = 0x0000;
- ir.actcmd = 0x0000;
- ir.general.bit = 0x00;
- ir.general.wait = 0;
- copyMapS((unsigned short*)IRRF.table[map].codes);
- setIR(IRRF_Module);
- cycles = IRRF_BITTIME;
- }
-}
-
-void IRRF_Send(unsigned long cmd)
-{
- ir.actcmd = cmd;
- ir.general.trail=(unsigned int)openEP(0,0, packet_RFenc);
- setIRspeed(IRRF_Module);
-
- if((ir.toggle & 0x01) &&(ir.actcmd != 0x0000))
- ir.actcmd |= 0x0080;
- IRRF_Repeat();
-}
-
-void IRRF_Repeat(void)
-{
- if(ir.actcmd != 0x0000)
- {
- if(ir.state == IRRF_IDLE)
- {
- struct RFendpoint_* cur_ep;
- cur_ep = (struct RFendpoint_*)ir.general.trail;
- if((cur_ep) && !(cur_ep->flags & EPnewdata)) {
- cur_ep->dest = 0;
- cur_ep->data[1] = (ir.actcmd & 0x00ff);
- cur_ep->data[0] = (ir.actcmd & 0xff00) >> 8;
- cur_ep->bufferlen = 2;
- cur_ep->flags |= EPenabled | EPoutput | EPnewdata;
-
- RF_changestate(RFtx);
- }
- ir.state++;
- runIR();
- }
- }
-}
-
-void IRRF_Stop(void)
-{
- if(ir.actcmd != 0x00000000)
- while(ir.state != IRRF_IDLE);
-
- closeEP((struct RFendpoint_*)ir.general.trail);
- ir.toggle++;
- ir.actcmd = 0x0000;
- stopIR();
-}
-
-
diff --git a/boop/infrared/ir_rf.h b/boop/infrared/ir_rf.h
deleted file mode 100644
index 2f3c546..0000000
--- a/boop/infrared/ir_rf.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- iir_rf.h - RF IR encoder
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef IR_RF_H
-#define IR_RF_H
-
-void IRRF_Encode (void) __attribute__ ((section(".text.fastcode")));
-
-void IRRF_Init(unsigned char map);
-void IRRF_Send(unsigned long cmd);
-void IRRF_Repeat(void);
-void IRRF_Stop(void);
-
-#endif
diff --git a/boop/infrared/ir_selector.c b/boop/infrared/ir_selector.c
deleted file mode 100644
index 385525d..0000000
--- a/boop/infrared/ir_selector.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- ir_selector.c - select ir encoder & codetable
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "infrared.h"
-#include "codes.h"
-#include "encoders.h"
-#include "lcd.h"
-#include "fonty.h"
-#include "keyboard.h"
-#include "ir_selector.h"
-#include "bfs.h"
-#include "ir_capture.h"
-#include "controls.h"
-#include "global.h"
-
-extern volatile unsigned char autorepeat;
-extern unsigned char act_encoder, act_set;
-
-const struct irDeviceTable_ default_irDevTab =
-{
- 0x04,
- 0x00,
- {
- { 0x01, 0x00 },
- { 0x02, 0x00 },
- { 0xff, 0xff },
- { 0xff, 0xff }
- }
-};
-
-struct irDeviceTable_ irDevTab;
-
-char* getEncName(unsigned char enc)
-{
- return (char*) encoders.encoder[enc].name;
-}
-
-char* getSetName(unsigned char enc, unsigned char set)
-{
- struct TABLES_C *ctab;
- struct TABLES_S *stab;
- struct TABLES_I *itab;
- struct TABLES_N *ntab;
- struct TABLES_L *ltab;
- struct RAWset_ *RAWset;
-
- if (enc < encoders.num_encoders) {
- switch(encoders.encoder[enc].type)
- {
- case 0:
- ctab = (TABLES_C*)encoders.encoder[enc].data;
- if (set < ctab->num_tables)
- return (char*) ctab->table[set].name;
- break;
- case 1:
- stab = (TABLES_S*)encoders.encoder[enc].data;
- if (set < stab->num_tables)
- return (char*) stab->table[set].name;
- break;
- case 2:
- itab = (TABLES_I*)encoders.encoder[enc].data;
- if (set < itab->num_tables)
- return (char*) itab->table[set].name;
- break;
- case 3:
- ntab = (TABLES_N*)encoders.encoder[enc].data;
- if (set < ntab->num_tables) {
- RAWset = (struct RAWset_*)BFS_LoadFileAddr(BFS_ID_RAWslot0 + set);
- if(RAWset && (RAWset->name[0] != 0xff)) {
- return (char*) RAWset->name;
- }
- else
- return (char*) ntab->table[set].name;
- }
- break;
- case 4:
- ltab = (TABLES_L*)encoders.encoder[enc].data;
- if (set < ltab->num_tables) {
- return (char*) ltab->table[set].name;
- }
- break;
- }
- }
-
- return "unknown\0";
-}
-
-unsigned char EncIsValid(unsigned char enc, unsigned char set)
-{
- struct TABLES_C *ctab;
-
- if (!(enc < encoders.num_encoders))
- return 0;
- ctab = (TABLES_C*)encoders.encoder[enc].data;
- if (!(set < ctab->num_tables))
- return 0;
- return 1;
-}
-
-unsigned char listSet(unsigned int enc, unsigned char sset)
-{
- unsigned char set;
-
- if (!(sset < (((TABLES_C*)(encoders.encoder[enc].data))->num_tables)))
- sset = 0;
-
- lcd_fill(0);
- set_font(BOLDFONT);
- draw_hexC(0,0,((TABLES_C*)(encoders.encoder[enc].data))->num_tables, 3, DRAW_PUT);
- draw_string(16, 0, "remotes in", 3, DRAW_PUT);
- draw_string(77, 0, (char*) encoders.encoder[enc].name, 3, DRAW_PUT);
- draw_block(0,10,128,2,3,DRAW_PUT);
-
- set_font(SMALLFONT);
-
- for(set=0;set<((TABLES_C*)(encoders.encoder[enc].data))->num_tables; set++)
- {
- draw_string(1, 15+(set*9), getSetName(enc, set), 3, DRAW_PUT);
- }
-
- draw_string(0, 120, "\"Left\" to return", 3, DRAW_PUT);
- draw_string(0, 130, "\"OK\" to select remote", 3, DRAW_PUT);
-
- draw_block(0, 14+(sset*9), 128, 9, 3, DRAW_XOR);
-
- while(!KEY_Left)
- {
- waitKeyUpDown();
- draw_block(0, 14+(sset*9), 128, 9, 3, DRAW_XOR);
- if(KEY_OK)
- {
- return sset;
- }
- if(KEY_Up)
- {
- sset--;
- if(sset >= ((TABLES_C*)(encoders.encoder[enc].data))->num_tables)
- sset = ((TABLES_C*)(encoders.encoder[enc].data))->num_tables-1;
- }
- if(KEY_Down)
- {
- sset++;
- if(sset == ((TABLES_C*)(encoders.encoder[enc].data))->num_tables)
- sset = 0;
- }
- draw_block(0, 14+(sset*9), 128, 9, 3, DRAW_XOR);
- }
- return 0xFF;
-}
-
-#define maxenclist 8
-void select_ir(unsigned char *encoder,unsigned char *set)
-{
- static unsigned char enc, senc, cenc, sset;
- unsigned char moff;
- unsigned char moffold;
-
- if (*encoder < encoders.num_encoders)
- senc = *encoder;
- else
- senc = 0;
- cenc = senc;
- sset = *set;
- moff = 0;
-
- if(senc >= maxenclist)
- moff = senc - maxenclist +1;
-
-again:
- moffold = encoders.num_encoders;
-
- set_font(BOLDFONT);
-
- lcd_fill(0);
- draw_string(0, 0, "Encoders: ", 3, DRAW_PUT);
- draw_hexC(54,0,encoders.num_encoders,3,DRAW_PUT);
- draw_block(0,10,128,2,3,DRAW_PUT);
-
- set_font(SMALLFONT);
-
- draw_string(0, 106, "\"OK\" to accept select remote", 3, DRAW_PUT);
- draw_string(0, 115, "\"Exit\" to return", 3, DRAW_PUT);
- draw_string(0, 124, "\"Right\" to show names for", 3, DRAW_PUT);
- draw_string(35, 133, "selected encoder", 3, DRAW_PUT);
- set_font(BOLDFONT);
- draw_string(0, 142, "Currently Selected:", 3, DRAW_PUT);
- draw_string(0, 152, (char*) encoders.encoder[cenc].name, 3, DRAW_PUT);
- draw_string(48, 152, getSetName(cenc,sset), 3, DRAW_PUT);
- set_font(SMALLFONT);
-
- while(!KEY_Exit)
- {
- if(moff!=moffold) {
- draw_block(0, 14, 128, 9*maxenclist, 3, DRAW_ERASE);
- for(enc=moff;(encnum_tables, 3, DRAW_PUT);
- draw_string(15, 15+((enc-moff)*9), "remotes in", 3, DRAW_PUT);
- draw_string(65, 15+((enc-moff)*9), (char*) encoders.encoder[enc].name, 3, DRAW_PUT);
- }
-
- if(encoders.num_encoders > moff+maxenclist) {
- draw_hline(120,8+9*maxenclist,5,3,DRAW_PUT);
- draw_hline(121,9+9*maxenclist,3,3,DRAW_PUT);
- draw_hline(122,10+9*maxenclist,1,3,DRAW_PUT);
- }
- if(moff) {
- draw_hline(120,19,5,3,DRAW_PUT);
- draw_hline(121,18,3,3,DRAW_PUT);
- draw_hline(122,17,1,3,DRAW_PUT);
- }
- draw_block(0, 14+((senc-moff)*9), 128, 9, 3, DRAW_XOR);
- }
- moffold = moff;
- waitKeyUpDown();
- draw_block(0, 14+((senc-moff)*9), 128, 9, 3, DRAW_XOR);
- if(KEY_Right)
- {
- enc = sset;
- sset = listSet(senc,sset);
- if(sset != 0xFF)
- cenc = senc;
- else
- sset = enc;
- goto again;
- }
- if(KEY_Up)
- {
- senc--;
- if(senc= encoders.num_encoders) {
- if(encoders.num_encoders > maxenclist)
- moff = encoders.num_encoders - maxenclist;
- senc = encoders.num_encoders-1;
- }
- }
- if(KEY_Down)
- {
- senc++;
- if(senc == maxenclist+moff)
- moff++;
- if(senc == encoders.num_encoders) {
- moff = 0;
- senc = 0;
- }
- }
- if(KEY_OK)
- {
- //setEncoder(cenc, sset);
- *encoder = cenc;
- *set = sset;
- return;
- }
- draw_block(0, 14+((senc-moff)*9), 128, 9, 3, DRAW_XOR);
- }
-}
-
-void remote_click(FORM* form, CONTROL* control) {
- unsigned char sel;
-
- sel = ((LABEL*)control)->tag;
- select_ir(&irDevTab.device[sel].encoder, &irDevTab.device[sel].set);
- ((LABEL*)control)->caption = getSetName(irDevTab.device[sel].encoder, irDevTab.device[sel].set);
-
- form_draw(form);
-}
-
-void RC_setting(void) {
- unsigned char set;
- unsigned char i;
-
- LABEL label[irDevTab.count];
- LABEL remote[irDevTab.count];
- char caption[irDevTab.count][6];
-
- CONTROL* controls[irDevTab.count * 2];
-
- for(i=0;i
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef IR_SELECTOR_H
-#define IR_SELECTOR_H
-
-struct irDevice_ {
- unsigned char encoder;
- unsigned char set;
-};
-
-struct irDeviceTable_ {
- unsigned char count;
- unsigned char active;
- struct irDevice_ device[4];
-};
-
-struct irDeviceTable_ irDevTab;
-const struct irDeviceTable_ default_irDevTab;
-
-char* getSetName(unsigned char enc, unsigned char set);
-unsigned char EncIsValid(unsigned char enc, unsigned char set);
-void select_ir(unsigned char *encoder,unsigned char *set);
-void RC_setting(void);
-
-#endif
diff --git a/boop/infrared/ir_spaceenc.c b/boop/infrared/ir_spaceenc.c
deleted file mode 100644
index 73b0228..0000000
--- a/boop/infrared/ir_spaceenc.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- ir_spaceenc.c - space modulated protocoll encoder
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "lpc2220.h"
-#include "infrared.h"
-#include "ir_spaceenc.h"
-#include "encoders.h"
-#include "codes.h"
-#include "ir_codes/spaceenc/schneider_dtv3_xtra"
-
-const struct irModule SPACEENC_Module =
-{
- SPACEENC_Encode,
- SPACEENC_Send,
- SPACEENC_Repeat,
- SPACEENC_Stop,
- 119, // carrier
- 1, // carrier-on
- 3 // carrier-off
-};
-
-const struct irModule SPACEENC2_Module =
-{
- SPACEENC_Encode,
- SPACEENC2_Send,
- SPACEENC2_Repeat,
- SPACEENC2_Stop,
- 119, // carrier
- 1, // carrier-on
- 3 // carrier-off
-};
-
-static unsigned int *ir_codes;
-static unsigned char *ir_precodes;
-
-extern volatile unsigned char mod_enable;
-extern volatile unsigned int cycles;
-extern volatile unsigned long keyMap[42];
-
-#define SPACEENC_IDLE 0x00
-#define SPACEENC_PRE_A 0x01
-#define SPACEENC_PRE_B 0x02
-#define SPACEENC_BIT_A 0x03
-#define SPACEENC_BIT_B 0x04
-#define SPACEENC_STOP 0x05
-#define SPACEENC_WAIT 0x06
-
-#define SPACEENC_NUMBITS 6
-#define SPACEENC_BITTIME 20
-#define SPACEENC_BIT0 65
-#define SPACEENC_BIT1 150
-#define SPACEENC_WAITTIME 59
-
-#define SPACEENC2_BITTIME 14
-#define SPACEENC2_BIT0 7
-#define SPACEENC2_BIT1 28
-#define SPACEENC2_WAITTIME 170
-
-void __attribute__ ((section(".text.fastcode"))) SPACEENC_Encode (void)
-{
- switch(ir.state)
- {
- case SPACEENC_IDLE:
- mod_enable = 0;
- break;
-
- case SPACEENC_PRE_A:
- case SPACEENC_BIT_A:
- cycles = ir.general.bittime;
- mod_enable = 1;
- ir.state++;
- break;
-
- case SPACEENC_PRE_B:
- mod_enable = 0;
- if(ir.cmd & 0x01)
- cycles = ir.general.bittime1;
- else
- cycles = ir.general.bittime0;
- ir.cmd >>= 1;
- ir.general.bit++;
- if(ir.general.bit == ir.general.prebits)
- {
- ir.state = SPACEENC_BIT_A;
- ir.general.bit = 0;
- ir.cmd = ir_codes[ir.actcmd];
- }
- else
- {
- ir.state--;
- }
- break;
-
- case SPACEENC_BIT_B:
- mod_enable = 0;
- if(ir.cmd & 0x01)
- cycles = ir.general.bittime1;
- else
- cycles = ir.general.bittime0;
- ir.cmd >>= 1;
- ir.general.bit++;
- if(ir.general.bit == ir.general.numbits)
- ir.state++;
- else
- ir.state--;
- break;
-
- case SPACEENC_STOP:
- cycles = ir.general.bittime;
- mod_enable = 1;
- ir.state++;
- break;
-
- case SPACEENC_WAIT:
- mod_enable = 0;
- ir.general.wait++;
- if(ir.general.wait >= ir.general.waittime)
- {
- ir.general.bit = 0;
- ir.general.wait = 0;
- ir.state = SPACEENC_IDLE;
- }
- break;
- }
- T1MR0 = cycles * SPACEENC_Module.lo_border * SPACEENC_Module.tval;
-}
-
-void SPACEENC_LoadMap(unsigned char map)
-{
- switch(map)
- {
- case 1:
- ir.general.numbits = SPACEENC_NUMBITS;
- ir.general.prebits = 0;
- ir.general.pre = 0x00;
- ir.general.bittime = SPACEENC_BITTIME;
- ir.general.bittime0 = SPACEENC_BIT0;
- ir.general.bittime1 = SPACEENC_BIT1;
- ir.general.waittime = SPACEENC_WAITTIME;
- setIR(SPACEENC_Module);
- break;
- default:
- ir.general.numbits = 32;
- ir.general.prebits = 8;
- ir.general.bittime = SPACEENC2_BITTIME;
- ir.general.bittime0 = SPACEENC2_BIT0;
- ir.general.bittime1 = SPACEENC2_BIT1;
- ir.general.waittime = SPACEENC2_WAITTIME;
- ir_codes = (unsigned int*) dtv3_codes;
- ir_precodes = (unsigned char*) dtv3_pre;
- setIR(SPACEENC2_Module);
- break;
- }
-}
-
-void SPACEENC_Init(unsigned char map)
-{
- if(map < SPACEENC.num_tables)
- {
- ir.state = SPACEENC_IDLE;
- ir.cmd = 0x0000;
- ir.actcmd = 0x0000;
- ir.general.wait = 0;
- ir.general.bit = 0;
- copyMapC((unsigned char*)SPACEENC.table[map].codes);
- SPACEENC_LoadMap(map);
- cycles = SPACEENC_BITTIME;
- }
-}
-
-void SPACEENC_Send(unsigned long cmd)
-{
- ir.actcmd = cmd;
- setIRspeed(SPACEENC_Module);
- SPACEENC_Repeat();
- runIR();
-}
-
-void SPACEENC_Repeat(void)
-{
- if(ir.actcmd != 0x00000000)
- {
- if(ir.state == SPACEENC_IDLE)
- {
- ir.cmd = ir.actcmd;
- ir.state = SPACEENC_BIT_A;
- }
- }
-}
-
-void SPACEENC_Stop(void)
-{
-waitend1:
- while(ir.state != SPACEENC_IDLE)
- goto waitend1;
-
- if(ir.actcmd != 0x00000000)
- {
- SPACEENC_Repeat();
-
-waitend2:
- if(ir.state != SPACEENC_IDLE)
- goto waitend2;
- }
- ir.actcmd = 0x00000000;
- stopIR();
-}
-
-void SPACEENC2_Send(unsigned long cmd)
-{
- ir.actcmd = cmd;
- SPACEENC2_Repeat();
-}
-
-void SPACEENC2_Repeat(void)
-{
- if(ir.actcmd != 0x00000000)
- {
- if(ir.state == SPACEENC_IDLE)
- {
- ir.cmd = ir_precodes[ir.actcmd];
- ir.state = SPACEENC_PRE_A;
- runIR();
- }
- }
-}
-
-void SPACEENC2_Stop(void)
-{
- if(ir.actcmd != 0x00000000)
- {
-waitend2:
- if(ir.state != SPACEENC_IDLE)
- goto waitend2;
- }
- ir.actcmd = 0x00000000;
- stopIR();
-}
-
-
diff --git a/boop/infrared/pwm.c b/boop/infrared/pwm.c
deleted file mode 100644
index 7c891c6..0000000
--- a/boop/infrared/pwm.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- pwm.c - pwm control
- Copyright (C) 2017
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "global.h"
-#include "lpc2220.h"
-#include "irq.h"
-
-void PWM_init(void)
-{
- //Set pin P0.21 IR_OUT as PWM
- PINSEL1 &= ~(3 << (10)); // IO
- PINSEL1 |= (1 << (10)); // PWM5
-
- PWMTC = 0; //Timer Counter
- PWMPR = 0; //Prescale Register
- PWMPC = 0; //Prescale Counter
-
- PWMMR0 = 416; // pwm rate
- PWMMR2 = 0x00; // pwm value sound
- PWMMR5 = 0x00; // pwm value IR
-
- PWMLER = 0x26; //Latch Enable
- PWMMCR = 0x03; //Match Control
- PWMPCR |= (1<<13) | (1<<10);
- PWMTCR = 0x03;
- PWMTCR = 0x09;
-
- /* PWMTC = 0;
- PWMPR = 7;
- PWMMR0 = 0x1E6; // pwm rate
- PWMMR2 = 0x00; // pwm value
- PWMLER = 0x05;
- PWMPCR = (1<<10);
-*/
-
- //VICVectAddr0 = (unsigned long)&(soundIRQ);
- //VICVectCntl0 = VIC_SLOT_EN | INT_SRC_PWM;
- VICIntSelect |= INT_PWM;
- VICIntEnable = INT_PWM;
-
-}
-
-void PWM_set_frequency(unsigned long f)
-{
- if(f<5000) {
- PWMPR = 7;
- PWMMR0 = 1875000 / f;
- } else {
- PWMPR = 0;
- PWMMR0 = 15000000 / f;
- }
- PWMLER |= 0x01; //Latch Enable
-
-
- if(f < 32000) {
- PWMMCR = 0x03;
- } else {
- PWMMCR = 0x02;
- }
-
-}
-
-void PWM_set_IR_duty_cycle(unsigned char d) {
- PWMMR5 = (PWMMR0 * d) / 100;
- PWMLER |= 0x20;
-}
-
diff --git a/boop/infrared/pwm.h b/boop/infrared/pwm.h
deleted file mode 100644
index 8d47ff6..0000000
--- a/boop/infrared/pwm.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- pwm.h - pwm control
- Copyright (C) 2017
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#pragma once
-
-
-void PWM_init(void);
-void PWM_set_frequency(unsigned long f);
-void PWM_set_IR_duty_cycle(unsigned char d);
-
-
diff --git a/boop/interrupt/Make.conf b/boop/interrupt/Make.conf
deleted file mode 100644
index e7853f8..0000000
--- a/boop/interrupt/Make.conf
+++ /dev/null
@@ -1 +0,0 @@
-SRCS := irq.c
diff --git a/boop/infrared/ir_itt.c b/boop/ir_itt.c
similarity index 53%
rename from boop/infrared/ir_itt.c
rename to boop/ir_itt.c
index 1156947..04ebf64 100644
--- a/boop/infrared/ir_itt.c
+++ b/boop/ir_itt.c
@@ -16,11 +16,9 @@
along with this program. If not, see .
*/
-#include "lpc2220.h"
#include "infrared.h"
#include "ir_itt.h"
-#include "encoders.h"
-#include "codes.h"
+#include "itt_codes.h"
const struct irModule ITT_Module =
{
@@ -28,7 +26,7 @@ const struct irModule ITT_Module =
ITT_Send,
ITT_Repeat,
ITT_Stop,
- 103, // carrier
+ 43, // carrier
2, // carrier-on
3 // carrier-off
};
@@ -39,14 +37,20 @@ const struct irModule ITT2_Module =
ITT_Send,
ITT_Repeat,
ITT_Stop,
- 111, // carrier
+ 46, // carrier
1, // carrier-on
3 // carrier-off
};
-extern volatile unsigned char mod_enable;
-extern volatile unsigned int cycles;
-extern volatile unsigned long keyMap[42];
+static unsigned short itt_cmd;
+static unsigned short itt_actcmd;
+static unsigned char itt_state;
+static unsigned char itt_bit;
+static unsigned char itt_numbits;
+static unsigned char itt_wait;
+static unsigned char itt_leadtime;
+static unsigned char itt_bittime0;
+static unsigned char itt_bittime1;
#define ITT_IDLE 0x00
#define ITT_LEADIN_A 0x01
@@ -69,9 +73,9 @@ extern volatile unsigned long keyMap[42];
#define ITT2_BITTIME_0 4
#define ITT2_BITTIME_1 9
-void __attribute__ ((section(".text.fastcode"))) ITT_Encode (void)
+void ITT_Encode (void)
{
- switch(ir.state)
+ switch(itt_state)
{
case ITT_IDLE:
mod_enable = 0;
@@ -84,109 +88,76 @@ void __attribute__ ((section(".text.fastcode"))) ITT_Encode (void)
case ITT_STOP:
cycles = 1;
mod_enable = 1;
- ir.state++;
+ itt_state++;
break;
case ITT_LEADIN_B:
case ITT_LEADOUT_B:
mod_enable = 0;
- cycles = ir.general.leadtime;
- ir.state++;
+ cycles = itt_leadtime;
+ itt_state++;
break;
case ITT_START_B:
mod_enable = 0;
- cycles = ir.general.bittime0;
- ir.state++;
+ cycles = itt_bittime0;
+ itt_state++;
break;
case ITT_BIT_B:
mod_enable = 0;
- if(ir.cmd & 0x01)
- cycles = ir.general.bittime1;
+ if(itt_cmd & 0x01)
+ cycles = itt_bittime1;
else
- cycles = ir.general.bittime0;
- ir.cmd >>= 1;
- ir.general.bit++;
- if(ir.general.bit == ir.general.numbits)
- ir.state++;
+ cycles = itt_bittime0;
+ itt_cmd >>= 1;
+ itt_bit++;
+ if(itt_bit == itt_numbits)
+ itt_state++;
else
- ir.state--;
+ itt_state--;
break;
case ITT_WAIT:
mod_enable = 0;
cycles = 40;
- ir.general.wait++;
- if(ir.general.wait >= ITT_WAITTIME)
+ itt_wait++;
+ if(itt_wait >= ITT_WAITTIME)
{
- ir.general.bit = 0;
- ir.general.wait = 0;
- ir.state = ITT_IDLE;
+ itt_bit = 0;
+ itt_wait = 0;
+ itt_state = ITT_IDLE;
}
break;
}
- T1MR0 = cycles * ITT2_Module.lo_border * ITT2_Module.tval;
-}
-
-void ITT_LoadMap(unsigned char map)
-{
- switch(map)
- {
- case 2:
- ir.general.leadtime = ITT2_LEADTIME;
- ir.general.bittime0 = ITT2_BITTIME_0;
- ir.general.bittime1 = ITT2_BITTIME_1;
- setIR(ITT2_Module);
- break;
- default:
- ir.general.leadtime = ITT_LEADTIME;
- ir.general.bittime0 = ITT_BITTIME_0;
- ir.general.bittime1 = ITT_BITTIME_1;
- setIR(ITT_Module);
- break;
- }
}
void ITT_Init(unsigned char map)
{
- if(map < ITT.num_tables)
- {
- ir.state = ITT_IDLE;
- ir.cmd = 0x0000;
- ir.actcmd = 0x0000;
- ir.general.bit = 0x00;
- ir.general.numbits = 0x0A;
- ir.general.wait = 0;
- copyMapS((unsigned short*)ITT.table[map].codes);
- ITT_LoadMap(map);
- cycles = 1;
- }
+ itt_state = ITT_IDLE;
+ itt_cmd = 0x0000;
+ itt_actcmd = 0x0000;
+ itt_bit = 0x00;
+ itt_numbits = 0x0A;
+ itt_wait = 0;
+ ITT_LoadMap(map);
+ cycles = 1;
}
-void ITT_Send(unsigned long cmd)
+void ITT_Send(void)
{
- ir.actcmd = cmd;
- setIRspeed(ITT_Module);
- if(ir.actcmd != 0x0000)
- {
- if(ir.state == ITT_IDLE)
- {
- ir.cmd = ir.actcmd;
- ir.state++;
- runIR();
- }
- }
+ itt_actcmd = getCode();
+ ITT_Repeat();
}
void ITT_Repeat(void)
{
- if(ir.actcmd != 0x0000)
+ if(itt_actcmd != 0x0000)
{
- if(ir.state == ITT_IDLE)
+ if(itt_state == ITT_IDLE)
{
- ir.cmd = ir.actcmd ^ 0x00f;
- ir.state++;
+ itt_cmd = itt_actcmd;
+ itt_state++;
runIR();
}
}
@@ -194,21 +165,64 @@ void ITT_Repeat(void)
void ITT_Stop(void)
{
-/*
waitend1:
- if(ir.state != ITT_IDLE)
+ if(itt_state != ITT_IDLE)
goto waitend1;
- ir.state++;
-*/
- if(ir.actcmd != 0x00000000)
+ itt_state++;
+
+ if(itt_actcmd != 0x00000000)
{
waitend2:
- if(ir.state != ITT_IDLE)
+ if(itt_state != ITT_IDLE)
goto waitend2;
}
- ir.actcmd = 0x0000;
+ itt_actcmd = 0x0000;
stopIR();
}
+void ITT_CopyMap(unsigned short *map)
+{
+ int x;
+ for(x=0;x<42;x++)
+ {
+ keyMap[x] = map[x];
+ }
+}
+
+void ITT_LoadMap(unsigned char map)
+{
+ switch(map)
+ {
+ case 0:
+ itt_leadtime = ITT_LEADTIME;
+ itt_bittime0 = ITT_BITTIME_0;
+ itt_bittime1 = ITT_BITTIME_1;
+ setIR(ITT_Module);
+ ITT_CopyMap((unsigned short*)ITT_seleco_019);
+ break;
+ case 1:
+ itt_leadtime = ITT_LEADTIME;
+ itt_bittime0 = ITT_BITTIME_0;
+ itt_bittime1 = ITT_BITTIME_1;
+ setIR(ITT_Module);
+ ITT_CopyMap((unsigned short*)ITT_seleco_049);
+ break;
+ case 2:
+ itt_leadtime = ITT2_LEADTIME;
+ itt_bittime0 = ITT2_BITTIME_0;
+ itt_bittime1 = ITT2_BITTIME_1;
+ setIR(ITT2_Module);
+ ITT_CopyMap((unsigned short*)ITT_seleco_108);
+ break;
+ default:
+ itt_leadtime = ITT_LEADTIME;
+ itt_bittime0 = ITT_BITTIME_0;
+ itt_bittime1 = ITT_BITTIME_1;
+ setIR(ITT_Module);
+ ITT_CopyMap((unsigned short*)ITT_seleco_131);
+ break;
+ }
+}
+
diff --git a/boop/infrared/ir_itt.h b/boop/ir_itt.h
similarity index 89%
rename from boop/infrared/ir_itt.h
rename to boop/ir_itt.h
index b9faf4f..cf8fa75 100644
--- a/boop/infrared/ir_itt.h
+++ b/boop/ir_itt.h
@@ -19,11 +19,12 @@
#ifndef IR_ITT_H
#define IR_ITT_H
-void ITT_Encode (void) __attribute__ ((section(".text.fastcode")));
+void ITT_Encode (void) ;
void ITT_Init(unsigned char map);
-void ITT_Send(unsigned long cmd);
+void ITT_Send(void);
void ITT_Repeat(void);
void ITT_Stop(void);
+void ITT_LoadMap(unsigned char map);
#endif
diff --git a/boop/infrared/ir_nrc17.c b/boop/ir_nrc17.c
similarity index 53%
rename from boop/infrared/ir_nrc17.c
rename to boop/ir_nrc17.c
index 229caf4..b7820d8 100644
--- a/boop/infrared/ir_nrc17.c
+++ b/boop/ir_nrc17.c
@@ -16,11 +16,9 @@
along with this program. If not, see .
*/
-#include "lpc2220.h"
#include "infrared.h"
#include "ir_nrc17.h"
-#include "encoders.h"
-#include "codes.h"
+#include "nrc17_codes.h"
#define NRC17_IDLE 0x00
#define NRC17_PRE_A 0x01
@@ -46,18 +44,24 @@ const struct irModule NRC17_Module =
NRC17_Send,
NRC17_Repeat,
NRC17_Stop,
- 132, // carrier
+ 40, // carrier
1, // carrier-on
- 3 // carrier-off
+ 4 // carrier-off
};
-extern volatile unsigned char mod_enable;
-extern volatile unsigned int cycles;
-extern volatile unsigned long keyMap[42];
-void __attribute__ ((section(".text.fastcode"))) NRC17_Encode(void)
+static unsigned short nrc17_cmd;
+static unsigned short nrc17_actcmd;
+static unsigned short nrc17_startstop;
+static unsigned char nrc17_state;
+static unsigned char nrc17_bit;
+static unsigned char nrc17_numbits;
+static unsigned short nrc17_wait;
+static unsigned short nrc17_pause;
+
+void NRC17_Encode(void)
{
- switch(ir.state)
+ switch(nrc17_state)
{
case NRC17_IDLE:
mod_enable = 0;
@@ -67,26 +71,26 @@ void __attribute__ ((section(".text.fastcode"))) NRC17_Encode(void)
case NRC17_START_A:
cycles = NRC17_BONTIME; // 0.5 ms
mod_enable = 1;
- ir.state++;
+ nrc17_state++;
break;
case NRC17_PRE_B:
case NRC17_START_B:
- if(ir.state == NRC17_PRE_B)
+ if(nrc17_state == NRC17_PRE_B)
cycles = NRC17_PTIME; // 2,5 ms
else
cycles = NRC17_BOFFTIME; // 0.5 ms
mod_enable = 0;
- ir.state++;
+ nrc17_state++;
break;
case NRC17_BIT_A:
- if(ir.cmd & 0x0001)
+ if(nrc17_cmd & 0x0001)
mod_enable = 1;
else
mod_enable = 0;
- ir.cmd >>= 1;
- ir.state++;
+ nrc17_cmd >>= 1;
+ nrc17_state++;
break;
case NRC17_BIT_B:
@@ -94,30 +98,29 @@ void __attribute__ ((section(".text.fastcode"))) NRC17_Encode(void)
mod_enable = 0;
else
mod_enable = 1;
- ir.general.bit++;
- if(ir.general.bit == ir.general.numbits)
- ir.state++;
+ nrc17_bit++;
+ if(nrc17_bit == nrc17_numbits)
+ nrc17_state++;
else
- ir.state--;
+ nrc17_state--;
break;
case NRC17_WAIT:
mod_enable = 0;
- ir.general.wait++;
+ nrc17_wait++;
cycles = NRC17_BONTIME; // 1 ms
- if(ir.general.wait >= ir.general.pause)
+ if(nrc17_wait >= nrc17_pause)
{
- ir.general.bit = 0;
- ir.general.wait = 0;
- ir.general.pause = NRC17_PTIME;
- ir.state = NRC17_IDLE;
+ nrc17_bit = 0;
+ nrc17_wait = 0;
+ nrc17_pause = NRC17_PTIME;
+ nrc17_state = NRC17_IDLE;
}
break;
}
- T1MR0 = cycles * NRC17_Module.lo_border * NRC17_Module.tval;
}
-/*
+
void NRC17_CopyMap(unsigned char xtra, unsigned short *map)
{
int x;
@@ -125,52 +128,58 @@ void NRC17_CopyMap(unsigned char xtra, unsigned short *map)
{
keyMap[x] = map[x];
}
-}*/
+}
void NRC17_LoadMap(unsigned char map)
{
switch(map)
{
- case 1: // tp720 - tv, 9 bit data
- ir.general.startstop = NRC17_STARTSTOP_TP720;
- ir.general.numbits = 9;
+ case 0: // nokia dbox2, 16 bit data
+ NRC17_CopyMap(0x00, (unsigned short*)NRC17_dbox2);
+ nrc17_startstop = NRC17_STARTSTOP_DBOX2;
+ nrc17_numbits = 16;
break;
- default: // nokia dbox2, 16 bit data
- ir.general.startstop = NRC17_STARTSTOP_DBOX2;
- ir.general.numbits = 16;
+ case 1: // tp720 - tv, 9 bit data
+ NRC17_CopyMap(0x00, (unsigned short*)NRC17_grundig_tp720);
+ nrc17_startstop = NRC17_STARTSTOP_TP720;
+ nrc17_numbits = 9;
+ break;
+ case 2 : // tp720 - sat, 9 bit data
+ NRC17_CopyMap(0x40, (unsigned short*)NRC17_grundig_tp720);
+ nrc17_startstop = NRC17_STARTSTOP_TP720;
+ nrc17_numbits = 9;
+ break;
+ default : // tp720 - video, 9 bit data
+ NRC17_CopyMap(0x80, (unsigned short*)NRC17_grundig_tp720);
+ nrc17_startstop = NRC17_STARTSTOP_TP720;
+ nrc17_numbits = 9;
break;
}
-
}
void NRC17_Init(unsigned char map)
{
- if(map < NRC17.num_tables)
- {
- ir.state = NRC17_IDLE;
- ir.cmd = 0x0000;
- ir.actcmd = 0x0000;
- ir.general.bit = 0x00;
- ir.general.numbits = 16;
- ir.general.wait = 0;
- ir.general.pause = NRC17_BONTIME;
- copyMapS((unsigned short*)NRC17.table[map].codes);
- NRC17_LoadMap(map);
- setIR(NRC17_Module);
- }
+ nrc17_state = NRC17_IDLE;
+ nrc17_cmd = 0x0000;
+ nrc17_actcmd = 0x0000;
+ nrc17_bit = 0x00;
+ nrc17_numbits = 16;
+ nrc17_wait = 0;
+ nrc17_pause = NRC17_BONTIME;
+ NRC17_LoadMap(map);
+ setIR(NRC17_Module);
}
-void NRC17_Send(unsigned long cmd)
+void NRC17_Send(void)
{
- ir.actcmd = cmd;
- if(ir.actcmd != 0x0000)
+ nrc17_actcmd = getCode();
+ if(nrc17_actcmd != 0x0000)
{
- setIRspeed(NRC17_Module);
- if(ir.state == NRC17_IDLE)
+ if(nrc17_state == NRC17_IDLE)
{
- ir.general.pause = NRC17_WTIME;
- ir.cmd = ir.general.startstop;
- ir.state++;
+ nrc17_pause = NRC17_WTIME;
+ nrc17_cmd = nrc17_startstop;
+ nrc17_state++;
runIR();
}
}
@@ -178,35 +187,35 @@ void NRC17_Send(unsigned long cmd)
void NRC17_Repeat(void)
{
- if(ir.actcmd != 0x0000)
+ if(nrc17_actcmd != 0x0000)
{
- if(ir.state == NRC17_IDLE)
+ if(nrc17_state == NRC17_IDLE)
{
- ir.general.pause = NRC17_GTIME;
- ir.cmd = ir.actcmd;
- ir.state++;
+ nrc17_pause = NRC17_GTIME;
+ nrc17_cmd = nrc17_actcmd;
+ nrc17_state++;
}
}
}
void NRC17_Stop(void)
{
- if(ir.actcmd != 0x0000)
+ if(nrc17_actcmd != 0x0000)
{
retry:
- if(ir.state == NRC17_IDLE)
+ if(nrc17_state == NRC17_IDLE)
{
- ir.cmd = ir.general.startstop;
- ir.state++;
+ nrc17_cmd = nrc17_startstop;
+ nrc17_state++;
}
else
goto retry;
waitend:
- if(ir.state != NRC17_IDLE)
+ if(nrc17_state != NRC17_IDLE)
goto waitend;
}
- ir.actcmd = 0x0000;
+ nrc17_actcmd = 0x0000;
stopIR();
}
diff --git a/boop/infrared/ir_nrc17.h b/boop/ir_nrc17.h
similarity index 89%
rename from boop/infrared/ir_nrc17.h
rename to boop/ir_nrc17.h
index 73cf199..96ea18f 100644
--- a/boop/infrared/ir_nrc17.h
+++ b/boop/ir_nrc17.h
@@ -19,10 +19,11 @@
#ifndef IR_NRC17_H
#define IR_NRC17_H
-void NRC17_Encode (void) __attribute__ ((section(".text.fastcode")));
+void NRC17_Encode (void) ;
+void NRC17_LoadMap(unsigned char map);
void NRC17_Init(unsigned char map);
-void NRC17_Send(unsigned long cmd);
+void NRC17_Send(void);
void NRC17_Repeat(void);
void NRC17_Stop(void);
diff --git a/boop/infrared/ir_rc5.c b/boop/ir_rc5.c
similarity index 54%
rename from boop/infrared/ir_rc5.c
rename to boop/ir_rc5.c
index 624620f..5ffdd36 100644
--- a/boop/infrared/ir_rc5.c
+++ b/boop/ir_rc5.c
@@ -16,26 +16,27 @@
along with this program. If not, see .
*/
-#include "lpc2220.h"
#include "infrared.h"
#include "ir_rc5.h"
-#include "encoders.h"
-#include "codes.h"
+#include "rc5_codes.h"
const struct irModule RC5_Module =
-{
+{
RC5_Encode,
RC5_Send,
RC5_Repeat,
RC5_Stop,
- 139, // carrier
+ 42, // carrier
1, // carrier-on
- 3 // carrier-off
+ 4 // carrier-off
};
-extern volatile unsigned char mod_enable;
-extern volatile unsigned int cycles;
-extern volatile unsigned long keyMap[42];
+static unsigned short rc5_cmd;
+static unsigned short rc5_actcmd;
+static unsigned char rc5_state;
+static unsigned char rc5_bit;
+static unsigned char rc5_wait;
+static unsigned char rc5_toggle;
#define RC5_IDLE 0x00
#define RC5_START_A 0x01
@@ -48,9 +49,9 @@ extern volatile unsigned long keyMap[42];
#define RC5_BITTIME 32
#define RC5_WAITTIME 100
-void __attribute__ ((section(".text.fastcode"))) RC5_Encode (void)
+void RC5_Encode (void)
{
- switch(ir.state)
+ switch(rc5_state)
{
case RC5_IDLE:
mod_enable = 0;
@@ -58,21 +59,21 @@ void __attribute__ ((section(".text.fastcode"))) RC5_Encode (void)
case RC5_START_A:
mod_enable = 0;
- ir.state++;
+ rc5_state++;
break;
case RC5_START_B:
mod_enable = 1;
- ir.state++;
+ rc5_state++;
break;
case RC5_BIT_A:
- if(ir.cmd & 0x1000)
+ if(rc5_cmd & 0x1000)
mod_enable = 0;
else
mod_enable = 1;
- ir.cmd <<= 1;
- ir.state++;
+ rc5_cmd <<= 1;
+ rc5_state++;
break;
case RC5_BIT_B:
@@ -80,65 +81,55 @@ void __attribute__ ((section(".text.fastcode"))) RC5_Encode (void)
mod_enable = 1;
else
mod_enable = 0;
- ir.general.bit++;
- if(ir.general.bit == 13)
- ir.state++;
+ rc5_bit++;
+ if(rc5_bit == 13)
+ rc5_state++;
else
- ir.state--;
+ rc5_state--;
break;
case RC5_WAIT:
mod_enable = 0;
- ir.general.wait++;
- if(ir.general.wait >= RC5_WAITTIME)
+ rc5_wait++;
+ if(rc5_wait >= RC5_WAITTIME)
{
- ir.general.bit = 0;
- ir.general.wait = 0;
- ir.state = RC5_IDLE;
+ rc5_bit = 0;
+ rc5_wait = 0;
+ rc5_state = RC5_IDLE;
}
break;
}
- T1MR0 = cycles * RC5_Module.lo_border * RC5_Module.tval;
}
void RC5_Init(unsigned char map)
{
- if(map < RC5.num_tables)
- {
- ir.state = RC5_IDLE;
- ir.cmd = 0x0000;
- ir.actcmd = 0x0000;
- ir.general.bit = 0x00;
- ir.general.wait = 0;
- copyMapS((unsigned short*)RC5.table[map].codes);
- setIR(RC5_Module);
- cycles = RC5_BITTIME;
- }
+ rc5_state = RC5_IDLE;
+ rc5_cmd = 0x0000;
+ rc5_actcmd = 0x0000;
+ rc5_bit = 0x00;
+ rc5_wait = 0;
+ RC5_LoadMap(map);
+ setIR(RC5_Module);
+ cycles = RC5_BITTIME;
}
-void RC5_Send(unsigned long cmd)
+void RC5_Send(void)
{
- ir.actcmd = cmd;
- setIRspeed(RC5_Module);
- if((ir.actcmd != 0x0000) && (ir.actcmd != 0x1000))
- {
- //toggle bit sollte nicht über dir Konfiguration gesetzt werden
- if(ir.toggle & 0x01)
- ir.actcmd &= 0xF7FF;
- else
- ir.actcmd |= 0x0800;
- RC5_Repeat();
- }
+ rc5_actcmd = getCode();
+
+ if(rc5_toggle & 0x01)
+ rc5_actcmd &= 0xF7FF;
+ RC5_Repeat();
}
void RC5_Repeat(void)
{
- if((ir.actcmd != 0x0000) && (ir.actcmd != 0x1000))
+ if(rc5_actcmd != 0x0000)
{
- if(ir.state == RC5_IDLE)
+ if(rc5_state == RC5_IDLE)
{
- ir.cmd = ir.actcmd;
- ir.state++;
+ rc5_cmd = rc5_actcmd;
+ rc5_state++;
runIR();
}
}
@@ -146,16 +137,35 @@ void RC5_Repeat(void)
void RC5_Stop(void)
{
- if((ir.actcmd != 0x0000) && (ir.actcmd != 0x1000))
+ if(rc5_actcmd != 0x00000000)
{
waitend:
- if(ir.state != RC5_IDLE)
+ if(rc5_state != RC5_IDLE)
goto waitend;
}
- ir.toggle++;
- ir.actcmd = 0x0000;
+ rc5_toggle++;
+ rc5_actcmd = 0x0000;
stopIR();
}
+void RC5_CopyMap(unsigned short *map)
+{
+ int x;
+ for(x=0;x<42;x++)
+ {
+ keyMap[x] = map[x];
+ }
+}
+
+void RC5_LoadMap(unsigned char map)
+{
+ switch(map)
+ {
+ default:
+ RC5_CopyMap((unsigned short*)RC5_tv);
+ break;
+ }
+}
+
diff --git a/boop/infrared/ir_rc5.h b/boop/ir_rc5.h
similarity index 89%
rename from boop/infrared/ir_rc5.h
rename to boop/ir_rc5.h
index 7f199ff..f820b7a 100644
--- a/boop/infrared/ir_rc5.h
+++ b/boop/ir_rc5.h
@@ -19,11 +19,12 @@
#ifndef IR_RC5_H
#define IR_RC5_H
-void RC5_Encode (void) __attribute__ ((section(".text.fastcode")));
+void RC5_Encode (void) ;
void RC5_Init(unsigned char map);
-void RC5_Send(unsigned long cmd);
+void RC5_Send(void);
void RC5_Repeat(void);
void RC5_Stop(void);
+void RC5_LoadMap(unsigned char map);
#endif
diff --git a/boop/infrared/ir_rca.c b/boop/ir_rca.c
similarity index 55%
rename from boop/infrared/ir_rca.c
rename to boop/ir_rca.c
index 1ba24d7..808cc55 100644
--- a/boop/infrared/ir_rca.c
+++ b/boop/ir_rca.c
@@ -16,12 +16,9 @@
along with this program. If not, see .
*/
-#include "lpc2220.h"
#include "infrared.h"
#include "ir_rca.h"
-#include "encoders.h"
-#include "codes.h"
-#include "global.h"
+#include "rca_codes.h"
const struct irModule RCA_Module =
{
@@ -29,14 +26,16 @@ const struct irModule RCA_Module =
RCA_Send,
RCA_Repeat,
RCA_Stop,
- 134, // carrier
+ 37, // carrier
1, // carrier-on
- 2 // carrier-off
+ 3 // carrier-off
};
-extern volatile unsigned char mod_enable;
-extern volatile unsigned int cycles;
-extern volatile unsigned long keyMap[42];
+static unsigned int rca_cmd;
+static unsigned int rca_actcmd;
+static unsigned char rca_state;
+static unsigned char rca_bit;
+static unsigned char rca_wait;
#define RCA_IDLE 0x00
#define RCA_PRE_A 0x01
@@ -53,11 +52,11 @@ extern volatile unsigned long keyMap[42];
#define RCA_BIT0 2*RCA_BITTIME
#define RCA_BIT1 4*RCA_BITTIME
#define RCA_PRETIME 8*RCA_BITTIME
-#define RCA_WAITTIME 16
+#define RCA_WAITTIME 30
-void __attribute__ ((section(".text.fastcode"))) RCA_Encode (void)
+void RCA_Encode (void)
{
- switch(ir.state)
+ switch(rca_state)
{
case RCA_IDLE:
mod_enable = 0;
@@ -66,13 +65,13 @@ void __attribute__ ((section(".text.fastcode"))) RCA_Encode (void)
case RCA_PRE_A:
cycles = RCA_PRETIME;
mod_enable = 1;
- ir.state++;
+ rca_state++;
break;
case RCA_PRE_B:
mod_enable = 0;
- ir.cmd = ir.actcmd;
- ir.state++;
+ rca_cmd = rca_actcmd;
+ rca_state++;
break;
case RCA_BIT_A:
@@ -80,47 +79,96 @@ void __attribute__ ((section(".text.fastcode"))) RCA_Encode (void)
case RCA_STOP:
cycles = RCA_BITTIME;
mod_enable = 1;
- ir.state++;
+ rca_state++;
break;
case RCA_BIT_B:
case RCA_IBIT_B:
mod_enable = 0;
- if(ir.cmd & 0x0800)
+ if(rca_cmd & 0x0800)
cycles = RCA_BIT1;
else
cycles = RCA_BIT0;
- ir.cmd <<= 1;
- ir.general.bit++;
- if(ir.general.bit == RCA_NUMBITS)
+ rca_cmd <<= 1;
+ rca_bit++;
+ if(rca_bit == RCA_NUMBITS)
{
- if(ir.state == RCA_BIT_B)
+ if(rca_state == RCA_BIT_B)
{
- ir.cmd = ~ir.actcmd;
- ir.general.bit = 0;
+ rca_cmd = ~rca_actcmd;
+ rca_bit = 0;
}
- ir.state++;
+ rca_state++;
}
else
- ir.state--;
+ rca_state--;
break;
case RCA_WAIT:
mod_enable = 0;
cycles = RCA_BITTIME;
- ir.general.wait++;
- if(ir.general.wait >= RCA_WAITTIME)
+ rca_wait++;
+ if(rca_wait >= RCA_WAITTIME)
{
- ir.general.bit = 0;
- ir.general.wait = 0;
- if (ir.general.trail)
- ir.state = RCA_PRE_A;
- else
- ir.state = RCA_IDLE;
+ rca_bit = 0;
+ rca_wait = 0;
+ rca_state = RCA_IDLE;
}
break;
}
- T1MR0 = cycles * RCA_Module.lo_border * RCA_Module.tval;
+}
+
+void RCA_Init(unsigned char map)
+{
+ rca_state = RCA_IDLE;
+ rca_cmd = 0x0000;
+ rca_actcmd = 0x0000;
+ rca_bit = 0x00;
+ rca_wait = 0;
+ RCA_LoadMap(map);
+ setIR(RCA_Module);
+ cycles = RCA_BITTIME;
+}
+
+void RCA_Send(void)
+{
+ rca_actcmd = getCode();
+ RCA_Repeat();
+}
+
+void RCA_Repeat(void)
+{
+ if(rca_actcmd != 0x0000)
+ {
+ if(rca_state == RCA_IDLE)
+ {
+ rca_state++;
+ runIR();
+ }
+ }
+}
+
+void RCA_Stop(void)
+{
+ if(rca_actcmd != 0x00000000)
+ {
+waitend:
+ if(rca_state != RCA_IDLE)
+ goto waitend;
+ }
+ stopIR();
+}
+
+void RCA_CopyMapPC(unsigned short pre, unsigned char *map)
+{
+ int x;
+ for(x=0;x<42;x++)
+ {
+ if(map[x] != 0)
+ keyMap[x] = pre | map[x];
+ else
+ keyMap[x] = 0x0000;
+ }
}
void RCA_LoadMap(unsigned char map)
@@ -128,63 +176,9 @@ void RCA_LoadMap(unsigned char map)
switch(map)
{
default:
- copyMapPC(0x0500, (unsigned char*)RCA.table[map].codes);
+ RCA_CopyMapPC(0x0500, (unsigned char*)RCA_xbox);
break;
}
}
-void RCA_Init(unsigned char map)
-{
- if(map < RCA.num_tables)
- {
- ir.state = RCA_IDLE;
- ir.cmd = 0x0000;
- ir.actcmd = 0x0000;
- ir.general.bit = 0x00;
- ir.general.wait = 0;
- RCA_LoadMap(map);
- setIR(RCA_Module);
- cycles = RCA_BITTIME;
- }
-}
-
-void RCA_Send(unsigned long cmd)
-{
- ir.actcmd = cmd;
- if(ir.actcmd != 0x0000) {
- setIRspeed(RCA_Module);
- ir.general.trail = 0x01;
- sysInfo |= SYS_IR;
- if (ir.state != RCA_IDLE)
- while(ir.state != RCA_IDLE);
- ir.state = RCA_PRE_A;
- runIR();
- }
-}
-
-void RCA_Repeat(void)
-{
- if(ir.actcmd != 0x0000)
- {
-
- if(ir.state == RCA_IDLE)
- {
- //ir.state++;
- //runIR();
- }
- }
-}
-
-void RCA_Stop(void)
-{
- if(ir.actcmd != 0x00000000)
- {
- ir.general.trail = 0;
- sysInfo &= ~SYS_IR;
-waitend:
- if(ir.state != RCA_IDLE)
- goto waitend;
- }
- stopIR();
-}
diff --git a/boop/infrared/ir_rca.h b/boop/ir_rca.h
similarity index 89%
rename from boop/infrared/ir_rca.h
rename to boop/ir_rca.h
index 19738c8..495b7b8 100644
--- a/boop/infrared/ir_rca.h
+++ b/boop/ir_rca.h
@@ -19,11 +19,12 @@
#ifndef IR_RCA_H
#define IR_RCA_H
-void RCA_Encode (void) __attribute__ ((section(".text.fastcode")));
+void RCA_Encode (void) ;
void RCA_Init(unsigned char map);
-void RCA_Send(unsigned long cmd);
+void RCA_Send(void);
void RCA_Repeat(void);
void RCA_Stop(void);
+void RCA_LoadMap(unsigned char map);
#endif
diff --git a/boop/infrared/ir_rcmm.c b/boop/ir_rcmm.c
similarity index 53%
rename from boop/infrared/ir_rcmm.c
rename to boop/ir_rcmm.c
index e477185..7f5a505 100644
--- a/boop/infrared/ir_rcmm.c
+++ b/boop/ir_rcmm.c
@@ -16,11 +16,9 @@
along with this program. If not, see .
*/
-#include "lpc2220.h"
#include "infrared.h"
#include "ir_rcmm.h"
-#include "encoders.h"
-#include "codes.h"
+#include "rcmm_codes.h"
const struct irModule RCMM_Module =
{
@@ -28,14 +26,19 @@ const struct irModule RCMM_Module =
RCMM_Send,
RCMM_Repeat,
RCMM_Stop,
- 139, // carrier
+ 42, // carrier
1, // carrier-on
- 3 // carrier-off
+ 4 // carrier-off
};
-extern volatile unsigned char mod_enable;
-extern volatile unsigned int cycles;
-extern volatile unsigned long keyMap[42];
+static unsigned int rcmm_cmd;
+static unsigned int rcmm_actcmd;
+static unsigned char rcmm_state;
+static unsigned char rcmm_bit;
+static unsigned short rcmm_wait;
+static unsigned short rcmm_pause;
+static unsigned char rcmm_len;
+static unsigned char rcmm_trail;
#define RCMM_IDLE 0x00
#define RCMM_HEADER_A 0x01
@@ -54,11 +57,11 @@ extern volatile unsigned long keyMap[42];
#define RCMM_BIT_11 28
#define RCMM_PTIME 110;
-const unsigned char ir_times[4] = { RCMM_BIT_00, RCMM_BIT_01, RCMM_BIT_10, RCMM_BIT_11 };
+const unsigned char rcmm_times[4] = { RCMM_BIT_00, RCMM_BIT_01, RCMM_BIT_10, RCMM_BIT_11 };
-void __attribute__ ((section(".text.fastcode"))) RCMM_Encode (void)
+void RCMM_Encode (void)
{
- switch(ir.state)
+ switch(rcmm_state)
{
case RCMM_IDLE:
mod_enable = 0;
@@ -67,116 +70,84 @@ void __attribute__ ((section(".text.fastcode"))) RCMM_Encode (void)
case RCMM_HEADER_A:
case RCMM_BIT_A:
mod_enable = 1;
- if(ir.state == RCMM_HEADER_A)
+ if(rcmm_state == RCMM_HEADER_A)
cycles = RCMM_HEADER_ON;
else
cycles = RCMM_BIT_ON;
- ir.state++;
+ rcmm_state++;
break;
case RCMM_HEADER_B:
mod_enable = 0;
cycles = RCMM_HEADER_OFF;
- ir.state++;
+ rcmm_state++;
break;
case RCMM_BIT_B:
mod_enable = 0;
- cycles = ir_times[(ir.cmd & 0xC0000000) >> 30];
- ir.cmd <<= 2;
- ir.general.bit += 2;
- if(ir.general.bit == ir.general.len)
- ir.state++;
+ cycles = rcmm_times[(rcmm_cmd & 0xC0000000) >> 30];
+ rcmm_cmd <<= 2;
+ rcmm_bit += 2;
+ if(rcmm_bit == rcmm_len)
+ rcmm_state++;
else
- ir.state--;
+ rcmm_state--;
break;
case RCMM_TRAIL:
- if(ir.general.trail)
+ if(rcmm_trail)
{
mod_enable = 1;
cycles = RCMM_BIT_ON;
}
else
cycles = 1;
- ir.state++;
+ rcmm_state++;
break;
case RCMM_WAIT:
mod_enable = 0;
- ir.general.wait++;
+ rcmm_wait++;
cycles = RCMM_BIT_ON; // 1 ms
- if(ir.general.wait >= ir.general.pause)
+ if(rcmm_wait >= rcmm_pause)
{
- ir.general.bit = 0;
- ir.general.wait = 0;
- ir.general.pause = RCMM_PTIME;
- ir.state = RCMM_IDLE;
+ rcmm_bit = 0;
+ rcmm_wait = 0;
+ rcmm_pause = RCMM_PTIME;
+ rcmm_state = RCMM_IDLE;
}
break;
}
- T1MR0 = cycles * RCMM_Module.lo_border * RCMM_Module.tval;
-}
-
-void RCMM_LoadMap(unsigned char map)
-{
- copyMapI((unsigned int*)RCMM.table[map].codes);
-
- switch(map)
- {
- case 1:
- ir.general.len = 32;
- ir.general.trail = 1;
- ir.general.togglebit = 16;
- break;
- default:
- ir.general.len = 32;
- ir.general.trail = 1;
- ir.general.togglebit = 0;
- break;
- }
}
void RCMM_Init(unsigned char map)
{
- if(map < RCMM.num_tables)
- {
- ir.cmd = 0x00000000;
- ir.actcmd = 0x00000000;
- ir.state = RCMM_IDLE;
- ir.general.bit = 0;
- ir.general.wait = 0;
- ir.general.pause = RCMM_PTIME;
- RCMM_LoadMap(map);
- setIR(RCMM_Module);
- }
+ rcmm_cmd = 0x00000000;
+ rcmm_actcmd = 0x00000000;
+ rcmm_state = RCMM_IDLE;
+ rcmm_bit = 0;
+ rcmm_wait = 0;
+ rcmm_pause = RCMM_PTIME;
+ RCMM_LoadMap(map);
+ setIR(RCMM_Module);
}
-void RCMM_Send(unsigned long cmd)
+void RCMM_Send(void)
{
- ir.actcmd = cmd;
- if(ir.actcmd != 0x00000000) {
- if(ir.general.togglebit) {
- if(ir.toggle & 0x01)
- ir.actcmd &= ~(1<<(ir.general.togglebit-1));
- else
- ir.actcmd |= 1<<(ir.general.togglebit-1);
- }
- setIRspeed(RCMM_Module);
- RCMM_Repeat();
- }
+ rcmm_actcmd = getCode();
+ RCMM_Repeat();
}
void RCMM_Repeat(void)
{
- if(ir.actcmd != 0x00000000)
+ if(rcmm_actcmd != 0x00000000)
{
- if(ir.state == RCMM_IDLE)
+ if(rcmm_state == RCMM_IDLE)
{
- ir.cmd = ir.actcmd;
- ir.state++;
+ rcmm_cmd = rcmm_actcmd;
+ rcmm_state++;
runIR();
}
}
@@ -184,15 +155,36 @@ void RCMM_Repeat(void)
void RCMM_Stop(void)
{
- if(ir.actcmd != 0x00000000)
+ if(rcmm_actcmd != 0x00000000)
{
waitend:
- if(ir.state != RCMM_IDLE)
+ if(rcmm_state != RCMM_IDLE)
goto waitend;
}
- ir.actcmd = 0x0000;
- ir.toggle++;
+ rcmm_actcmd = 0x0000;
stopIR();
}
+void RCMM_CopyMapPrefix(unsigned int prefix, unsigned char *map)
+{
+ int x;
+ for(x=0;x<42;x++)
+ {
+ keyMap[x] = prefix + map[x];
+ }
+ keyMap[0] = 0x00000000;
+}
+
+void RCMM_LoadMap(unsigned char map)
+{
+ switch(map)
+ {
+ default:
+ RCMM_CopyMapPrefix(0x0D500800, (unsigned char*)RCMM_galaxis);
+ rcmm_len = 32;
+ rcmm_trail = 1;
+ break;
+ }
+}
+
diff --git a/boop/infrared/ir_rcmm.h b/boop/ir_rcmm.h
similarity index 89%
rename from boop/infrared/ir_rcmm.h
rename to boop/ir_rcmm.h
index b71dec4..35fce71 100644
--- a/boop/infrared/ir_rcmm.h
+++ b/boop/ir_rcmm.h
@@ -19,11 +19,12 @@
#ifndef IR_RCMM_H
#define IR_RCMM_H
-void RCMM_Encode (void) __attribute__ ((section(".text.fastcode")));
+void RCMM_Encode (void) ;
void RCMM_Init(unsigned char map);
-void RCMM_Send(unsigned long cmd);
+void RCMM_Send(void);
void RCMM_Repeat(void);
void RCMM_Stop(void);
+void RCMM_LoadMap(unsigned char map);
#endif
diff --git a/boop/infrared/ir_rec80.c b/boop/ir_rec80.c
similarity index 58%
rename from boop/infrared/ir_rec80.c
rename to boop/ir_rec80.c
index 02fb5f7..daf2bb2 100644
--- a/boop/infrared/ir_rec80.c
+++ b/boop/ir_rec80.c
@@ -16,11 +16,9 @@
along with this program. If not, see .
*/
-#include "lpc2220.h"
#include "infrared.h"
#include "ir_rec80.h"
-#include "encoders.h"
-#include "codes.h"
+#include "rec80_codes.h"
const struct irModule REC80_Module =
{
@@ -28,15 +26,19 @@ const struct irModule REC80_Module =
REC80_Send,
REC80_Repeat,
REC80_Stop,
- 151, // carrier
+ 47, // carrier
1, // carrier-on
- 3 // carrier-off
+ 4, // carrier-off
};
-
-extern volatile unsigned char mod_enable;
-extern volatile unsigned int cycles;
-extern volatile unsigned long keyMap[42];
+static unsigned int rec80_cmd;
+static unsigned int rec80_actcmd;
+static unsigned int rec80_preamble;
+static unsigned char rec80_state;
+static unsigned char rec80_bit;
+static unsigned char rec80_numbits;
+static unsigned short rec80_wait;
+static unsigned short rec80_pause;
#define REC80_IDLE 0x00
#define REC80_HEAD_A 0x01
@@ -55,9 +57,9 @@ extern volatile unsigned long keyMap[42];
#define REC80_BITTIME_1 38
#define REC80_WAITTIME 187
-void __attribute__ ((section(".text.fastcode"))) REC80_Encode (void)
+void REC80_Encode (void)
{
- switch(ir.state)
+ switch(rec80_state)
{
case REC80_IDLE:
mod_enable = 0;
@@ -66,9 +68,9 @@ void __attribute__ ((section(".text.fastcode"))) REC80_Encode (void)
case REC80_HEAD_B:
mod_enable = 0;
cycles = REC80_HEADER_0;
- ir.cmd = ir.general.preamble;
- ir.general.bit = 0;
- ir.state++;
+ rec80_cmd = rec80_preamble;
+ rec80_bit = 0;
+ rec80_state++;
break;
case REC80_HEAD_A:
@@ -76,99 +78,83 @@ void __attribute__ ((section(".text.fastcode"))) REC80_Encode (void)
case REC80_BIT_A:
case REC80_TRAIL:
mod_enable = 1;
- if(ir.state == REC80_HEAD_A)
+ if(rec80_state == REC80_HEAD_A)
cycles = REC80_HEADER_1;
else
cycles = REC80_BONTIME;
- ir.state++;
+ rec80_state++;
break;
case REC80_PRE_B:
case REC80_BIT_B:
mod_enable = 0;
- if(ir.cmd & 0x01)
+ if(rec80_cmd & 0x01)
cycles = REC80_BITTIME_1;
else
cycles = REC80_BITTIME_0;
- ir.cmd >>= 1;
- ir.general.bit++;
- if(ir.general.bit == ir.general.numbits)
+ rec80_cmd >>= 1;
+ rec80_bit++;
+ if(rec80_bit == rec80_numbits)
{
- if(ir.state == REC80_PRE_B)
+ if(rec80_state == REC80_PRE_B)
{
- ir.general.bit = 0;
- ir.cmd = ir.actcmd;
+ rec80_bit = 0;
+ rec80_cmd = rec80_actcmd;
}
- ir.state++;
+ rec80_state++;
}
else
- ir.state--;
+ rec80_state--;
break;
case REC80_WAIT:
mod_enable = 0;
- ir.general.wait++;
+ rec80_wait++;
cycles = REC80_BONTIME; // 1 ms
- if(ir.general.wait >= ir.general.pause)
+ if(rec80_wait >= rec80_pause)
{
- ir.general.bit = 0;
- ir.general.wait = 0;
- ir.state = REC80_IDLE;
+ rec80_bit = 0;
+ rec80_wait = 0;
+ rec80_state = REC80_IDLE;
}
break;
}
- T1MR0 = cycles * REC80_Module.lo_border * REC80_Module.tval;
-}
-
-void REC80_LoadMap(unsigned char map)
-{
- switch(map)
- {
- default:
- ir.general.preamble = 0x00A02002;
- copyMapI((unsigned int*)REC80.table[map].codes);
- break;
- }
}
void REC80_Init(unsigned char map)
{
- if(map < REC80.num_tables)
- {
- ir.cmd = 0x00000000;
- ir.actcmd = 0x00000000;
- ir.general.bit = 0;
- ir.general.numbits = 24;
- ir.general.wait = 0;
- ir.general.pause = REC80_WAITTIME;
- ir.state = REC80_IDLE;
- REC80_LoadMap(map);
- setIR(REC80_Module);
- }
+ rec80_cmd = 0x00000000;
+ rec80_actcmd = 0x00000000;
+ rec80_bit = 0;
+ rec80_numbits = 24;
+ rec80_wait = 0;
+ rec80_pause = REC80_WAITTIME;
+ rec80_state = REC80_IDLE;
+ REC80_LoadMap(map);
+ setIR(REC80_Module);
}
-void REC80_Send(unsigned long cmd)
+void REC80_Send(void)
{
- ir.actcmd = cmd;
+ rec80_actcmd = getCode();
- if(ir.actcmd & 0x80000000)
- ir.general.numbits = 24;
+ if(rec80_actcmd & 0x80000000)
+ rec80_numbits = 24;
else
- ir.general.numbits = 0;
+ rec80_numbits = 0;
- ir.actcmd &= 0x0FFFFFFF;
+ rec80_actcmd &= 0x0FFFFFFF;
- setIRspeed(REC80_Module);
REC80_Repeat();
}
void REC80_Repeat(void)
{
- if(ir.actcmd != 0x00000000)
+ if(rec80_actcmd != 0x00000000)
{
- if(ir.state == REC80_IDLE)
+ if(rec80_state == REC80_IDLE)
{
- ir.state++;
+ rec80_state++;
runIR();
}
}
@@ -176,12 +162,34 @@ void REC80_Repeat(void)
void REC80_Stop(void)
{
- if(ir.actcmd != 0x00000000)
+ if(rec80_actcmd != 0x00000000)
{
waitend:
- if(ir.state != REC80_IDLE)
+ if(rec80_state != REC80_IDLE)
goto waitend;
}
- ir.actcmd = 0x00000000;
+ rec80_actcmd = 0x00000000;
stopIR();
}
+
+void REC80_CopyMap(unsigned int *map)
+{
+ int x;
+ for(x=0;x<42;x++)
+ {
+ keyMap[x] = map[x];
+ }
+}
+
+void REC80_LoadMap(unsigned char map)
+{
+ switch(map)
+ {
+ default:
+ rec80_preamble = 0x00A02002;
+ REC80_CopyMap((unsigned int*)REC80_rak_sc957wk);
+ break;
+ }
+}
+
+
diff --git a/boop/infrared/ir_rec80.h b/boop/ir_rec80.h
similarity index 89%
rename from boop/infrared/ir_rec80.h
rename to boop/ir_rec80.h
index 641408e..ae1d73c 100644
--- a/boop/infrared/ir_rec80.h
+++ b/boop/ir_rec80.h
@@ -19,11 +19,12 @@
#ifndef IR_REC80_H
#define IR_REC80_H
-void REC80_Encode (void) __attribute__ ((section(".text.fastcode")));
+void REC80_Encode (void) ;
void REC80_Init(unsigned char map);
-void REC80_Send(unsigned long cmd);
+void REC80_Send(void);
void REC80_Repeat(void);
void REC80_Stop(void);
+void REC80_LoadMap(unsigned char map);
#endif
diff --git a/boop/infrared/ir_recs80.c b/boop/ir_recs80.c
similarity index 55%
rename from boop/infrared/ir_recs80.c
rename to boop/ir_recs80.c
index cabd96b..6bf980b 100644
--- a/boop/infrared/ir_recs80.c
+++ b/boop/ir_recs80.c
@@ -16,11 +16,9 @@
along with this program. If not, see .
*/
-#include "lpc2220.h"
#include "infrared.h"
#include "ir_recs80.h"
-#include "encoders.h"
-#include "codes.h"
+#include "recs80_codes.h"
const struct irModule RECS80_Module =
{
@@ -28,14 +26,17 @@ const struct irModule RECS80_Module =
RECS80_Send,
RECS80_Repeat,
RECS80_Stop,
- 128, // carrier
+ 40, // carrier
1, // carrier-on
- 3 // carrier-off
+ 4 // carrier-off
};
-extern volatile unsigned char mod_enable;
-extern volatile unsigned int cycles;
-extern volatile unsigned long keyMap[42];
+static unsigned int recs80_cmd;
+static unsigned int recs80_actcmd;
+static unsigned char recs80_state;
+static unsigned char recs80_bit;
+static unsigned char recs80_wait;
+static unsigned char recs80_toggle;
#define RECS80_IDLE 0x00
#define RECS80_BIT_A 0x01
@@ -49,9 +50,9 @@ extern volatile unsigned long keyMap[42];
#define RECS80_BIT1 41*RECS80_BITTIME
#define RECS80_WAITTIME 10
-void __attribute__ ((section(".text.fastcode"))) RECS80_Encode (void)
+void RECS80_Encode (void)
{
- switch(ir.state)
+ switch(recs80_state)
{
case RECS80_IDLE:
mod_enable = 0;
@@ -61,72 +62,67 @@ void __attribute__ ((section(".text.fastcode"))) RECS80_Encode (void)
case RECS80_STOP:
cycles = RECS80_BITTIME;
mod_enable = 1;
- ir.state++;
+ recs80_state++;
break;
case RECS80_BIT_B:
mod_enable = 0;
- if(ir.cmd & 0x0400)
+ if(recs80_cmd & 0x0400)
cycles = RECS80_BIT1;
else
cycles = RECS80_BIT0;
- ir.cmd <<= 1;
- ir.general.bit++;
- if(ir.general.bit == RECS80_NUMBITS)
- ir.state++;
+ recs80_cmd <<= 1;
+ recs80_bit++;
+ if(recs80_bit == RECS80_NUMBITS)
+ recs80_state++;
else
- ir.state--;
+ recs80_state--;
break;
case RECS80_WAIT:
mod_enable = 0;
cycles = RECS80_BIT0;
- ir.general.wait++;
- if(ir.general.wait >= RECS80_WAITTIME)
+ recs80_wait++;
+ if(recs80_wait >= RECS80_WAITTIME)
{
- ir.general.bit = 0;
- ir.general.wait = 0;
- ir.state = RECS80_IDLE;
+ recs80_bit = 0;
+ recs80_wait = 0;
+ recs80_state = RECS80_IDLE;
}
break;
}
- T1MR0 = cycles * RECS80_Module.lo_border * RECS80_Module.tval;
}
void RECS80_Init(unsigned char map)
{
- if(map < RECS80.num_tables)
- {
- ir.state = RECS80_IDLE;
- ir.cmd = 0x0000;
- ir.actcmd = 0x0000;
- ir.general.bit = 0x00;
- ir.general.wait = 0;
- ir.toggle = 1;
- copyMapS((unsigned short*)RECS80.table[map].codes);
- setIR(RECS80_Module);
- cycles = RECS80_BITTIME;
- }
+ recs80_state = RECS80_IDLE;
+ recs80_cmd = 0x0000;
+ recs80_actcmd = 0x0000;
+ recs80_bit = 0x00;
+ recs80_wait = 0;
+ recs80_toggle = 1;
+ RECS80_LoadMap(map);
+ setIR(RECS80_Module);
+ cycles = RECS80_BITTIME;
}
-void RECS80_Send(unsigned long cmd)
+void RECS80_Send(void)
{
- ir.actcmd = cmd;
+ recs80_actcmd = getCode();
- if(ir.toggle & 0x01)
- ir.actcmd |= 0x0200;
- setIRspeed(RECS80_Module);
+ if(recs80_toggle & 0x01)
+ recs80_actcmd |= 0x0200;
RECS80_Repeat();
}
void RECS80_Repeat(void)
{
- if(ir.actcmd != 0x0000)
+ if(recs80_actcmd != 0x0000)
{
- if(ir.state == RECS80_IDLE)
+ if(recs80_state == RECS80_IDLE)
{
- ir.cmd = ir.actcmd;
- ir.state++;
+ recs80_cmd = recs80_actcmd;
+ recs80_state++;
runIR();
}
}
@@ -134,12 +130,36 @@ void RECS80_Repeat(void)
void RECS80_Stop(void)
{
- if(ir.actcmd != 0x00000000)
+ if(recs80_actcmd != 0x00000000)
{
waitend:
- if(ir.state != RECS80_IDLE)
+ if(recs80_state != RECS80_IDLE)
goto waitend;
}
- ir.toggle++;
+ recs80_toggle++;
stopIR();
}
+
+void RECS80_CopyMap(unsigned short *map)
+{
+ int x;
+ for(x=0;x<42;x++)
+ {
+ keyMap[x] = map[x];
+ }
+}
+
+void RECS80_LoadMap(unsigned char map)
+{
+ switch(map)
+ {
+ case 0:
+ RECS80_CopyMap((unsigned short*)RECS80_seleco_020);
+ break;
+ default:
+ RECS80_CopyMap((unsigned short*)RECS80_seleco_157);
+ break;
+ }
+}
+
+
diff --git a/boop/infrared/ir_recs80.h b/boop/ir_recs80.h
similarity index 89%
rename from boop/infrared/ir_recs80.h
rename to boop/ir_recs80.h
index fbcbe99..d094f15 100644
--- a/boop/infrared/ir_recs80.h
+++ b/boop/ir_recs80.h
@@ -19,11 +19,12 @@
#ifndef IR_RECS80_H
#define IR_RECS80_H
-void RECS80_Encode (void) __attribute__ ((section(".text.fastcode")));
+void RECS80_Encode (void) ;
void RECS80_Init(unsigned char map);
-void RECS80_Send(unsigned long cmd);
+void RECS80_Send(void);
void RECS80_Repeat(void);
void RECS80_Stop(void);
+void RECS80_LoadMap(unsigned char map);
#endif
diff --git a/boop/infrared/ir_sirc.c b/boop/ir_sirc.c
similarity index 53%
rename from boop/infrared/ir_sirc.c
rename to boop/ir_sirc.c
index dd9e4b4..29e6b01 100644
--- a/boop/infrared/ir_sirc.c
+++ b/boop/ir_sirc.c
@@ -16,15 +16,17 @@
along with this program. If not, see .
*/
-#include "lpc2220.h"
#include "infrared.h"
#include "ir_sirc.h"
-#include "encoders.h"
-#include "codes.h"
+#include "sirc_codes.h"
-extern volatile unsigned char mod_enable;
-extern volatile unsigned int cycles;
-extern volatile unsigned long keyMap[42];
+static unsigned int sirc_cmd;
+static unsigned int sirc_actcmd;
+static unsigned char sirc_state;
+static unsigned char sirc_bit;
+static unsigned char sirc_numbits;
+static unsigned short sirc_wait;
+static unsigned short sirc_pause;
#define SIRC_IDLE 0x00
#define SIRC_START_A 0x01
@@ -45,14 +47,14 @@ const struct irModule SIRC_Module =
SIRC_Send,
SIRC_Repeat,
SIRC_Stop,
- 122, // carrier
+ 38, // carrier
1, // carrier-on
- 3, // carrier-off
+ 4, // carrier-off
};
-void __attribute__ ((section(".text.fastcode"))) SIRC_Encode (void)
+void SIRC_Encode (void)
{
- switch(ir.state)
+ switch(sirc_state)
{
case SIRC_IDLE:
mod_enable = 0;
@@ -61,90 +63,84 @@ void __attribute__ ((section(".text.fastcode"))) SIRC_Encode (void)
case SIRC_START_A:
mod_enable = 1;
cycles = SIRC_STARTLEN;
- ir.state++;
+ sirc_state++;
break;
case SIRC_START_B:
mod_enable = 0;
cycles = SIRC_BITOFF;
- ir.state++;
+ sirc_state++;
break;
case SIRC_BIT_A:
mod_enable = 1;
- if(ir.cmd & 0x01)
+ if(sirc_cmd & 0x01)
cycles = SIRC_BITLEN_1;
else
cycles = SIRC_BITLEN_0;
- ir.cmd >>= 1;
- ir.state++;
+ sirc_cmd >>= 1;
+ sirc_state++;
break;
case SIRC_BIT_B:
mod_enable = 0;
cycles = SIRC_BITOFF;
- ir.general.bit++;
- if(ir.general.bit == ir.general.numbits)
- ir.state++;
+ sirc_bit++;
+ if(sirc_bit == sirc_numbits)
+ sirc_state++;
else
- ir.state--;
+ sirc_state--;
break;
case SIRC_WAIT:
mod_enable = 0;
- ir.general.wait++;
+ sirc_wait++;
cycles = SIRC_BITOFF; // 1 ms
- if(ir.general.wait >= ir.general.pause)
+ if(sirc_wait >= sirc_pause)
{
- ir.general.bit = 0;
- ir.general.wait = 0;
- ir.state = SIRC_IDLE;
+ sirc_bit = 0;
+ sirc_wait = 0;
+ sirc_state = SIRC_IDLE;
}
break;
}
-
- T1MR0 = cycles * SIRC_Module.lo_border * SIRC_Module.tval;
}
void SIRC_Init(unsigned char map)
{
- if(map < SIRC.num_tables)
- {
- ir.cmd = 0x00000000;
- ir.actcmd = 0x00000000;
- ir.general.bit = 0;
- ir.general.numbits = 12;
- ir.general.wait = 0;
- ir.general.pause = SIRC_GTIME;
- ir.state = SIRC_IDLE;
- copyMapS((unsigned short*)SIRC.table[map].codes);
- setIR(SIRC_Module);
- }
+ sirc_cmd = 0x00000000;
+ sirc_actcmd = 0x00000000;
+ sirc_bit = 0;
+ sirc_numbits = 12;
+ sirc_wait = 0;
+ sirc_pause = SIRC_GTIME;
+ sirc_state = SIRC_IDLE;
+ SIRC_LoadMap(map);
+ setIR(SIRC_Module);
}
-void SIRC_Send(unsigned long cmd)
+void SIRC_Send(void)
{
- ir.actcmd = cmd;
+ sirc_actcmd = getCode();
- if(ir.actcmd & 0x800000)
- ir.general.numbits = 20;
- else if(ir.actcmd & 0x8000)
- ir.general.numbits = 15;
+ if(sirc_actcmd & 0x800000)
+ sirc_numbits = 20;
+ else if(sirc_actcmd & 0x8000)
+ sirc_numbits = 15;
else
- ir.general.numbits = 12;
- setIRspeed(SIRC_Module);
+ sirc_numbits = 12;
SIRC_Repeat();
}
void SIRC_Repeat(void)
{
- if(ir.actcmd != 0x00000000)
+ if(sirc_actcmd != 0x00000000)
{
- if(ir.state == SIRC_IDLE)
+ if(sirc_state == SIRC_IDLE)
{
- ir.cmd = ir.actcmd;
- ir.state++;
+ sirc_cmd = sirc_actcmd;
+ sirc_state++;
runIR();
}
}
@@ -152,12 +148,44 @@ void SIRC_Repeat(void)
void SIRC_Stop(void)
{
- if(ir.actcmd != 0x00000000)
+ if(sirc_actcmd != 0x00000000)
{
waitend:
- if(ir.state != SIRC_IDLE)
+ if(sirc_state != SIRC_IDLE)
goto waitend;
}
- ir.actcmd = 0x0000;
+ sirc_actcmd = 0x0000;
stopIR();
}
+
+void SIRC_CopyMapS(unsigned int pre, unsigned short *map)
+{
+ int x;
+ for(x=0;x<42;x++)
+ {
+ keyMap[x] = map[x];
+ }
+}
+
+void SIRC_CopyMapI(unsigned int pre, unsigned int *map)
+{
+ int x;
+ for(x=0;x<42;x++)
+ {
+ keyMap[x] = map[x];
+ }
+}
+
+void SIRC_LoadMap(unsigned char map)
+{
+ switch(map)
+ {
+ case 0:
+ SIRC_CopyMapS(0x8000, (unsigned short*)SIRC_rm_pp411_av2);
+ break;
+ default:
+ SIRC_CopyMapS(0, (unsigned short*)SIRC_tv);
+ break;
+ }
+}
+
diff --git a/boop/infrared/ir_sirc.h b/boop/ir_sirc.h
similarity index 89%
rename from boop/infrared/ir_sirc.h
rename to boop/ir_sirc.h
index 358096f..35c28b1 100644
--- a/boop/infrared/ir_sirc.h
+++ b/boop/ir_sirc.h
@@ -19,11 +19,12 @@
#ifndef IR_SIRC_H
#define IR_SIRC_H
-void SIRC_Encode (void) __attribute__ ((section(".text.fastcode")));
+void SIRC_Encode (void) ;
void SIRC_Init(unsigned char map);
-void SIRC_Send(unsigned long cmd);
+void SIRC_Send(void);
void SIRC_Repeat(void);
void SIRC_Stop(void);
+void SIRC_LoadMap(unsigned char map);
#endif
diff --git a/boop/ir_spaceenc.c b/boop/ir_spaceenc.c
new file mode 100644
index 0000000..bb24046
--- /dev/null
+++ b/boop/ir_spaceenc.c
@@ -0,0 +1,285 @@
+/*
+ ir_spaceenc.c - space modulated protocoll encoder
+ Copyright (C) 2007 Ch. Klippel
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#include "infrared.h"
+#include "ir_spaceenc.h"
+#include "spaceenc_codes.h"
+
+const struct irModule SPACEENC_Module =
+{
+ SPACEENC_Encode,
+ SPACEENC_Send,
+ SPACEENC_Repeat,
+ SPACEENC_Stop,
+ 37, // carrier
+ 1, // carrier-on
+ 4 // carrier-off
+};
+
+const struct irModule SPACEENC2_Module =
+{
+ SPACEENC_Encode,
+ SPACEENC2_Send,
+ SPACEENC2_Repeat,
+ SPACEENC2_Stop,
+ 37, // carrier
+ 1, // carrier-on
+ 4 // carrier-off
+};
+
+static unsigned int spaceenc_cmd;
+static unsigned int spaceenc_pre;
+static unsigned int spaceenc_actcmd;
+static unsigned int spaceenc_bit;
+static unsigned char spaceenc_state;
+static unsigned char spaceenc_numbits;
+static unsigned char spaceenc_prebits;
+static unsigned char spaceenc_wait;
+static unsigned char spaceenc_waittime;
+
+static unsigned char spaceenc_bittime;
+static unsigned char spaceenc_bit0;
+static unsigned char spaceenc_bit1;
+
+static unsigned int *spaceenc_codes;
+static unsigned char *spaceenc_precodes;
+
+#define SPACEENC_IDLE 0x00
+#define SPACEENC_PRE_A 0x01
+#define SPACEENC_PRE_B 0x02
+#define SPACEENC_BIT_A 0x03
+#define SPACEENC_BIT_B 0x04
+#define SPACEENC_STOP 0x05
+#define SPACEENC_WAIT 0x06
+
+#define SPACEENC_NUMBITS 6
+#define SPACEENC_BITTIME 20
+#define SPACEENC_BIT0 65
+#define SPACEENC_BIT1 150
+#define SPACEENC_WAITTIME 59
+
+#define SPACEENC2_BITTIME 14
+#define SPACEENC2_BIT0 7
+#define SPACEENC2_BIT1 28
+#define SPACEENC2_WAITTIME 170
+
+void SPACEENC_Encode (void)
+{
+ switch(spaceenc_state)
+ {
+ case SPACEENC_IDLE:
+ mod_enable = 0;
+ break;
+
+ case SPACEENC_PRE_A:
+ case SPACEENC_BIT_A:
+ cycles = spaceenc_bittime;
+ mod_enable = 1;
+ spaceenc_state++;
+ break;
+
+ case SPACEENC_PRE_B:
+ mod_enable = 0;
+ if(spaceenc_cmd & 0x01)
+ cycles = spaceenc_bit1;
+ else
+ cycles = spaceenc_bit0;
+ spaceenc_cmd >>= 1;
+ spaceenc_bit++;
+ if(spaceenc_bit == spaceenc_prebits)
+ {
+ spaceenc_state = SPACEENC_BIT_A;
+ spaceenc_bit = 0;
+ spaceenc_cmd = spaceenc_codes[spaceenc_actcmd];
+ }
+ else
+ {
+ spaceenc_state--;
+ }
+ break;
+
+ case SPACEENC_BIT_B:
+ mod_enable = 0;
+ if(spaceenc_cmd & 0x01)
+ cycles = spaceenc_bit1;
+ else
+ cycles = spaceenc_bit0;
+ spaceenc_cmd >>= 1;
+ spaceenc_bit++;
+ if(spaceenc_bit == spaceenc_numbits)
+ spaceenc_state++;
+ else
+ spaceenc_state--;
+ break;
+
+ case SPACEENC_STOP:
+ cycles = spaceenc_bittime;
+ mod_enable = 1;
+ spaceenc_state++;
+ break;
+
+ case SPACEENC_WAIT:
+ mod_enable = 0;
+ spaceenc_wait++;
+ if(spaceenc_wait >= spaceenc_waittime)
+ {
+ spaceenc_bit = 0;
+ spaceenc_wait = 0;
+ spaceenc_state = SPACEENC_IDLE;
+ }
+ break;
+ }
+}
+
+void SPACEENC_Init(unsigned char map)
+{
+ spaceenc_state = SPACEENC_IDLE;
+ spaceenc_cmd = 0x0000;
+ spaceenc_actcmd = 0x0000;
+ spaceenc_wait = 0;
+ spaceenc_bit = 0;
+ SPACEENC_LoadMap(map);
+ cycles = SPACEENC_BITTIME;
+}
+
+void SPACEENC_Send(void)
+{
+ spaceenc_actcmd = getCode();
+ SPACEENC_Repeat();
+ runIR();
+}
+
+void SPACEENC_Repeat(void)
+{
+ if(spaceenc_actcmd != 0x00000000)
+ {
+ if(spaceenc_state == SPACEENC_IDLE)
+ {
+ spaceenc_cmd = spaceenc_actcmd;
+ spaceenc_state = SPACEENC_BIT_A;
+ }
+ }
+}
+
+void SPACEENC_Stop(void)
+{
+waitend1:
+ while(spaceenc_state != SPACEENC_IDLE)
+ goto waitend1;
+
+ if(spaceenc_actcmd != 0x00000000)
+ {
+ SPACEENC_Repeat();
+
+waitend2:
+ if(spaceenc_state != SPACEENC_IDLE)
+ goto waitend2;
+ }
+ spaceenc_actcmd = 0x00000000;
+ stopIR();
+}
+
+void SPACEENC2_Send(void)
+{
+ spaceenc_actcmd = getCode();
+ SPACEENC2_Repeat();
+}
+
+void SPACEENC2_Repeat(void)
+{
+ if(spaceenc_actcmd != 0x00000000)
+ {
+ if(spaceenc_state == SPACEENC_IDLE)
+ {
+ spaceenc_cmd = spaceenc_precodes[spaceenc_actcmd];
+ spaceenc_state = SPACEENC_PRE_A;
+ runIR();
+ }
+ }
+}
+
+void SPACEENC2_Stop(void)
+{
+ if(spaceenc_actcmd != 0x00000000)
+ {
+waitend2:
+ if(spaceenc_state != SPACEENC_IDLE)
+ goto waitend2;
+ }
+ spaceenc_actcmd = 0x00000000;
+ stopIR();
+}
+
+void SPACEENC_CopyMapC(unsigned char *map)
+{
+ int x;
+ for(x=0;x<42;x++)
+ {
+ keyMap[x] = map[x];
+ }
+}
+
+void SPACEENC_CopyMapS(unsigned short *map)
+{
+ int x;
+ for(x=0;x<42;x++)
+ {
+ keyMap[x] = map[x];
+ }
+}
+
+void SPACEENC_CopyMapI(unsigned int *map)
+{
+ int x;
+ for(x=0;x<42;x++)
+ {
+ keyMap[x] = map[x];
+ }
+}
+
+void SPACEENC_LoadMap(unsigned char map)
+{
+ switch(map)
+ {
+ case 0:
+ SPACEENC_CopyMapC((unsigned char*)SPACEENC_seleco_027);
+ spaceenc_numbits = SPACEENC_NUMBITS;
+ spaceenc_prebits = 0;
+ spaceenc_pre = 0x00;
+ spaceenc_bittime = SPACEENC_BITTIME;
+ spaceenc_bit0 = SPACEENC_BIT0;
+ spaceenc_bit1 = SPACEENC_BIT1;
+ spaceenc_waittime = SPACEENC_WAITTIME;
+ setIR(SPACEENC_Module);
+ break;
+ default:
+ SPACEENC_CopyMapC((unsigned char*)SPACEENC_schneider_dtv3);
+ spaceenc_numbits = 32;
+ spaceenc_prebits = 8;
+ spaceenc_bittime = SPACEENC2_BITTIME;
+ spaceenc_bit0 = SPACEENC2_BIT0;
+ spaceenc_bit1 = SPACEENC2_BIT1;
+ spaceenc_waittime = SPACEENC2_WAITTIME;
+ spaceenc_codes = (unsigned int*) dtv3_codes;
+ spaceenc_precodes = (unsigned char*) dtv3_pre;
+ setIR(SPACEENC2_Module);
+ break;
+ }
+}
+
+
diff --git a/boop/infrared/ir_spaceenc.h b/boop/ir_spaceenc.h
similarity index 86%
rename from boop/infrared/ir_spaceenc.h
rename to boop/ir_spaceenc.h
index 8132701..a1238db 100644
--- a/boop/infrared/ir_spaceenc.h
+++ b/boop/ir_spaceenc.h
@@ -19,14 +19,15 @@
#ifndef IR_SPACEENC_H
#define IR_SPACEENC_H
-void SPACEENC_Encode (void) __attribute__ ((section(".text.fastcode")));
+void SPACEENC_Encode (void) ;
void SPACEENC_Init(unsigned char map);
-void SPACEENC_Send(unsigned long cmd);
+void SPACEENC_Send(void);
void SPACEENC_Repeat(void);
void SPACEENC_Stop(void);
-void SPACEENC2_Send(unsigned long cmd);
+void SPACEENC2_Send(void);
void SPACEENC2_Repeat(void);
void SPACEENC2_Stop(void);
+void SPACEENC_LoadMap(unsigned char map);
#endif
diff --git a/boop/interrupt/irq.c b/boop/irq.c
similarity index 75%
rename from boop/interrupt/irq.c
rename to boop/irq.c
index 331fa55..9992c8d 100644
--- a/boop/interrupt/irq.c
+++ b/boop/irq.c
@@ -18,18 +18,15 @@
#include "lpc2220.h"
#include "irq.h"
-#include "soundirq.h"
-#include "infraredirq.h"
-#define IRQ_MASK 0x000000C0
-
-extern unsigned char bl_val, cmp_val;
+#define IRQ_MASK 0x00000080
static inline unsigned asm_get_cpsr(void)
{
unsigned long retval;
asm volatile (" mrs %0, cpsr" : "=r" (retval) : /* no inputs */ );
return retval;
+
}
static inline void asm_set_cpsr(unsigned val)
@@ -64,20 +61,12 @@ unsigned restoreIRQ(unsigned oldCPSR)
return _cpsr;
}
+void IRQ_Routine (void) {
-// handle sound, IR, backlight in timer ISR
-// user manual section 5.1, p. 62:
-// Fast Interrupt reQuest (FIQ) requests have the highest priority.
-// (where's the vector? in lpc2220_rom.ld ?)
-void __attribute__ ((section(".text.fastcode"))) FIQ_Routine (void)
-{
- //while ((PWMIR == 0x01))
- {
- if (PWMIR == 0x01)
- soundIRQ(); // sound, backlight
- //if (T1IR == 1)
- // irIRQ(); // IR
- }
+}
+
+void FIQ_Routine (void) {
+ while (1) ;
}
diff --git a/boop/interrupt/irq.h b/boop/irq.h
similarity index 92%
rename from boop/interrupt/irq.h
rename to boop/irq.h
index 23b898a..798224b 100644
--- a/boop/interrupt/irq.h
+++ b/boop/irq.h
@@ -35,7 +35,7 @@
#define INT_EINT0 0x00004000
#define INT_EINT1 0x00008000
#define INT_EINT2 0x00010000
-#define INT_EINT3 0x00020000
+#define INT_EINTT2 0x00020000
#define INT_ADC 0x00040000
#define INT_SRC_WDT 0
@@ -59,7 +59,8 @@
#define VIC_SLOT_EN 0x00000020
-void __attribute__ ((section(".text.fastcode"))) FIQ_Routine (void);
+void IRQ_Routine (void) __attribute__ ((interrupt("IRQ")));
+void FIQ_Routine (void) __attribute__ ((interrupt("FIQ")));
void SWI_Routine (void) __attribute__ ((interrupt("SWI")));
void UNDEF_Routine (void) __attribute__ ((interrupt("UNDEF")));
diff --git a/boop/itt_codes.h b/boop/itt_codes.h
new file mode 100644
index 0000000..da46d08
--- /dev/null
+++ b/boop/itt_codes.h
@@ -0,0 +1,10 @@
+#ifndef ITT_CODES_H
+#define ITT_CODES_H
+
+#include "ir-codes/itt/seleco_019"
+#include "ir-codes/itt/seleco_049"
+#include "ir-codes/itt/seleco_108"
+#include "ir-codes/itt/seleco_131"
+
+#endif
+
diff --git a/boop/keyboard.c b/boop/keyboard.c
new file mode 100644
index 0000000..546a168
--- /dev/null
+++ b/boop/keyboard.c
@@ -0,0 +1,101 @@
+/*
+ keyboard.c - button handling
+ Copyright (C) 2007 Ch. Klippel
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#include "keyboard.h"
+#include "lpc2220.h"
+#include "irq.h"
+
+unsigned int keys[2];
+unsigned char autorepeat;
+unsigned char batcnt;
+
+static unsigned int xkeys[2];
+static unsigned int keytest;
+static unsigned char half;
+static int x;
+
+void initKeys(void)
+{
+ keys[0] = 0;
+ keys[1] = 0;
+}
+
+void startKeyIRQ(void)
+{
+ autorepeat = 0;
+
+ T0TCR = 0x02;
+ T0TC = 187490;
+ T0PR = 0x03; // 7.500.000 Hz / 4 = 1.875.000 Hz
+ T0MR0 = 187500; // 1.875.000 Hz / 187.500 = 10 Hz
+ T0MCR = 0x03;
+ T0TCR = 0x01;
+
+ VICVectAddr15 = (unsigned long)&(keyIRQ);
+ VICVectCntl15 = VIC_SLOT_EN | INT_SRC_TIMER0;
+ VICIntEnable = INT_TIMER0;
+}
+
+/* Stubs for various interrupts (may be replaced later) */
+/* ---------------------------------------------------- */
+
+void __attribute__ ((interrupt("IRQ"))) keyIRQ(void)
+{
+ xkeys[0] = 0;
+ xkeys[1] = 0;
+ keytest = 0x01;
+ half = 0;
+
+ batcnt--;
+
+ for(x=(1<<18); x!=(1<<23); x<<=1)
+ {
+ IOCLR2=x;
+ testLine(FIOPIN0&(1<<28));
+ testLine(FIOPIN0&(1<<27));
+ testLine(FIOPIN0&(1<<22));
+ testLine(FIOPIN0&(1<<13));
+ testLine(IOPIN3&(1<<21));
+ testLine(IOPIN3&(1<<20));
+ IOSET2=x;
+ }
+
+ keytest = 0x01;
+ half = 1;
+
+ for(; x!=(1<<25); x<<=1)
+ {
+ IOCLR2=x;
+ testLine(FIOPIN0&(1<<28));
+ testLine(FIOPIN0&(1<<27));
+ testLine(FIOPIN0&(1<<22));
+ testLine(FIOPIN0&(1<<13));
+ testLine(IOPIN3&(1<<21));
+ testLine(IOPIN3&(1<<20));
+ IOSET2=x;
+ }
+
+ keys[0] = xkeys[0];
+ keys[1] = xkeys[1];
+ if(autorepeat < AUTO_TIMEOUT)
+ autorepeat++;
+ T0IR = 1;
+ VICVectAddr = 0;
+
+
+}
diff --git a/boop/keyboard.h b/boop/keyboard.h
new file mode 100644
index 0000000..1875ad8
--- /dev/null
+++ b/boop/keyboard.h
@@ -0,0 +1,83 @@
+/*
+ keyboard.h - button handling
+ Copyright (C) 2007 Ch. Klippel
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#ifndef KEYBOARD_H
+#define KEYBOARD_H
+
+#define KEY_5 (keys[0] & 0x00000001)
+#define KEY_6 (keys[0] & 0x00000002)
+#define KEY_C (keys[0] & 0x00000004)
+#define KEY_B (keys[0] & 0x00000008)
+#define KEY_A (keys[0] & 0x00000010)
+#define KEY_1 (keys[0] & 0x00000020)
+#define KEY_8 (keys[0] & 0x00000040)
+#define KEY_9 (keys[0] & 0x00000080)
+#define KEY_D (keys[0] & 0x00000100)
+#define KEY_Up (keys[0] & 0x00000200)
+#define KEY_Betty (keys[0] & 0x00000400)
+#define KEY_4 (keys[0] & 0x00000800)
+#define KEY_0 (keys[0] & 0x00001000)
+#define KEY_AV (keys[0] & 0x00002000)
+#define KEY_Right (keys[0] & 0x00004000)
+#define KEY_Left (keys[0] & 0x00008000)
+#define KEY_Vplus (keys[0] & 0x00010000)
+#define KEY_7 (keys[0] & 0x00020000)
+#define KEY_AB (keys[0] & 0x00040000)
+#define KEY_16_9 (keys[0] & 0x00080000)
+#define KEY_Exit (keys[0] & 0x00100000)
+#define KEY_OK (keys[0] & 0x00200000)
+#define KEY_Vminus (keys[0] & 0x00400000)
+#define KEY_Minus (keys[0] & 0x00800000)
+#define KEY_VTX2 (keys[0] & 0x01000000)
+#define KEY_VTX3 (keys[0] & 0x02000000)
+#define KEY_Pplus (keys[0] & 0x04000000)
+#define KEY_Down (keys[0] & 0x08000000)
+#define KEY_Menu (keys[0] & 0x10000000)
+#define KEY_PiP (keys[0] & 0x20000000)
+
+#define KEY_Yellow (keys[1] & 0x00000001)
+#define KEY_Blue (keys[1] & 0x00000002)
+#define KEY_Pminus (keys[1] & 0x00000004)
+#define KEY_Mute (keys[1] & 0x00000008)
+#define KEY_Info (keys[1] & 0x00000010)
+#define KEY_VTX1 (keys[1] & 0x00000020)
+#define KEY_TV (keys[1] & 0x00000040)
+#define KEY_Power (keys[1] & 0x00000080)
+#define KEY_3 (keys[1] & 0x00000100)
+#define KEY_2 (keys[1] & 0x00000200)
+#define KEY_Red (keys[1] & 0x00000400)
+#define KEY_Green (keys[1] & 0x00000800)
+
+#define AUTO_TIMEOUT 5
+
+#define testLine(_c) \
+{ \
+ if(!(_c)) \
+ { \
+ xkeys[half] |= keytest; \
+ } \
+ keytest <<= 1; \
+}
+
+void __attribute__ ((interrupt("IRQ"))) keyIRQ (void);
+
+void startKeyIRQ(void);
+void initKeys(void);
+void scanKeys(void);
+
+#endif
diff --git a/boop/keyboard/Make.conf b/boop/keyboard/Make.conf
deleted file mode 100644
index 42df737..0000000
--- a/boop/keyboard/Make.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-THUMBSRCS := keyboard.c
-SRCS := keyirq.c
diff --git a/boop/keyboard/keyboard.c b/boop/keyboard/keyboard.c
deleted file mode 100644
index d01eceb..0000000
--- a/boop/keyboard/keyboard.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- keyboard.c - button handling
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "keyboard.h"
-#include "keyirq.h"
-#include "lpc2220.h"
-#include "timerfuncs.h"
-#include "backlight.h"
-#include "irq.h"
-
-
-void initKeys(void)
-{
- keys[0] = 0;
- keys[1] = 0;
- IOCLR2=((1<<18)|(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23)|(1<<24));
- FIODIR0 &= ~(1<<30);
- startCB(addTimerCB(keyScanner, 15));
-
- EXTWAKE |= 0x08;
- PINSEL1 |= (1<<29);
-}
-
-void waitKeyUp(void)
-{
- while((keys[0] != 0) || (keys[1] != 0)) {};
-}
-
-extern void cpu_idle();
-
-void waitKeyDown(void)
-{
- while ((keys[0] == 0) && (keys[1] == 0))
- {
- cpu_idle();
- };
- setBacklight(BL_AUTO); // pwm value
-}
-
-char isKeyPressed (void)
-{
- return ((keys[0] != 0) || (keys[1] != 0));
-}
-
-signed char getNumKeyValue(void) {
- signed char x;
-
- switch (keys[0]) {
- case 0x00000002:
- x= 7;
- break;
- case 0x00000008:
- x= 4;
- break;
- case 0x00000020:
- x= 1;
- break;
- case 0x00020000:
- x= 0;
- break;
- case 0x00040000:
- x= 9;
- break;
- case 0x00080000:
- x= 8;
- break;
- case 0x00100000:
- x= 6;
- break;
- default:
- x=-1;
- }
- switch (keys[1]) {
- case 0x00000040:
- x= 2;
- break;
- case 0x00000080:
- x= 3;
- break;
- case 0x00040000:
- x= 5;
- break;
- }
- return(x);
-}
-
-#define keynum( _X, _Y ) if(_X) return _Y
-
-unsigned char getKeynum(void)
-{
- keynum(KEY_A, 0);
- keynum(KEY_B, 1);
- keynum(KEY_C, 2);
- keynum(KEY_D, 3);
- keynum(KEY_Betty, 4);
- keynum(KEY_Exit, 5);
- keynum(KEY_Up, 6);
- keynum(KEY_Down, 7);
- keynum(KEY_Left, 8);
- keynum(KEY_Right, 9);
- keynum(KEY_OK, 10);
- keynum(KEY_Vplus, 11);
- keynum(KEY_Vminus, 12);
- keynum(KEY_Mute, 13);
- keynum(KEY_Pplus, 14);
- keynum(KEY_Pminus, 15);
- keynum(KEY_1, 16);
- keynum(KEY_2, 17);
- keynum(KEY_3, 18);
- keynum(KEY_4, 19);
- keynum(KEY_5, 20);
- keynum(KEY_6, 21);
- keynum(KEY_7, 22);
- keynum(KEY_8, 23);
- keynum(KEY_9, 24);
- keynum(KEY_0, 25);
- keynum(KEY_Minus, 26);
- keynum(KEY_AV, 27);
- keynum(KEY_Menu, 28);
- keynum(KEY_PiP, 29);
- keynum(KEY_AB, 30);
- keynum(KEY_16_9, 31);
- keynum(KEY_Info, 32);
- keynum(KEY_VTX1, 33);
- keynum(KEY_VTX2, 34);
- keynum(KEY_VTX3, 35);
- keynum(KEY_Blue, 36);
- keynum(KEY_Yellow, 37);
- keynum(KEY_Green, 38);
- keynum(KEY_Red, 39);
- keynum(KEY_TV, 40);
- keynum(KEY_Power, 41);
- return 42;
-}
-
diff --git a/boop/keyboard/keyboard.h b/boop/keyboard/keyboard.h
deleted file mode 100644
index 64772a9..0000000
--- a/boop/keyboard/keyboard.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- keyboard.h - button handling
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef KEYBOARD_H
-#define KEYBOARD_H
-
-
-//Uncomment if you have a swisscom Betty
-//#define SWISSCOM
-
-/*
-#define KEY_5 (keys[0] & 0x00000001)
-#define KEY_6 (keys[0] & 0x00000002)
-#define KEY_C (keys[0] & 0x00000004)
-#define KEY_B (keys[0] & 0x00000008)
-#define KEY_A (keys[0] & 0x00000010)
-#define KEY_1 (keys[0] & 0x00000020)
-#define KEY_8 (keys[0] & 0x00000040)
-#define KEY_9 (keys[0] & 0x00000080)
-#define KEY_D (keys[0] & 0x00000100)
-#define KEY_Up (keys[0] & 0x00000200)
-#define KEY_Betty (keys[0] & 0x00000400)
-#define KEY_4 (keys[0] & 0x00000800)
-#define KEY_0 (keys[0] & 0x00001000)
-#define KEY_AV (keys[0] & 0x00002000)
-#define KEY_Right (keys[0] & 0x00004000)
-#define KEY_Left (keys[0] & 0x00008000)
-#define KEY_Vplus (keys[0] & 0x00010000)
-#define KEY_7 (keys[0] & 0x00020000)
-#define KEY_AB (keys[0] & 0x00040000)
-#define KEY_16_9 (keys[0] & 0x00080000)
-#define KEY_Exit (keys[0] & 0x00100000)
-#define KEY_OK (keys[0] & 0x00200000)
-#define KEY_Vminus (keys[0] & 0x00400000)
-#define KEY_Minus (keys[0] & 0x00800000)
-#define KEY_VTX2 (keys[0] & 0x01000000)
-#define KEY_VTX3 (keys[0] & 0x02000000)
-#define KEY_Pplus (keys[0] & 0x04000000)
-#define KEY_Down (keys[0] & 0x08000000)
-#define KEY_Menu (keys[0] & 0x10000000)
-#define KEY_PiP (keys[0] & 0x20000000)
-
-#define KEY_Yellow (keys[1] & 0x00000001)
-#define KEY_Blue (keys[1] & 0x00000002)
-#define KEY_Pminus (keys[1] & 0x00000004)
-#define KEY_Mute (keys[1] & 0x00000008)
-#define KEY_Info (keys[1] & 0x00000010)
-#define KEY_VTX1 (keys[1] & 0x00000020)
-#define KEY_TV (keys[1] & 0x00000040)
-#define KEY_Power (keys[1] & 0x00000080)
-#define KEY_3 (keys[1] & 0x00000100)
-#define KEY_2 (keys[1] & 0x00000200)
-#define KEY_Red (keys[1] & 0x00000400)
-#define KEY_Green (keys[1] & 0x00000800)
-*/
-
-#ifdef SWISSCOM
- #define KEY_B (keys[0] & 0x00000001)
- #define KEY_C (keys[0] & 0x00000002)
- #define KEY_6 (keys[0] & 0x00000004)
- #define KEY_5 (keys[0] & 0x00000008)
- #define KEY_Up (keys[0] & 0x00000010)
- #define KEY_D (keys[0] & 0x00000020)
- #define KEY_9 (keys[0] & 0x00000040)
- #define KEY_8 (keys[0] & 0x00000080)
- #define KEY_Left (keys[0] & 0x00000100)
- #define KEY_Right (keys[0] & 0x00000200)
- #define KEY_AV (keys[0] & 0x00000400)
- #define KEY_0 (keys[0] & 0x00000800)
- #define KEY_OK (keys[0] & 0x00001000)
- #define KEY_Exit (keys[0] & 0x00002000)
- #define KEY_16_9 (keys[0] & 0x00004000)
- #define KEY_AB (keys[0] & 0x00008000)
- #define KEY_Down (keys[0] & 0x00010000)
- #define KEY_Pplus (keys[0] & 0x00020000)
- #define KEY_VTX3 (keys[0] & 0x00040000)
- #define KEY_VTX2 (keys[0] & 0x00080000)
- #define KEY_Mute (keys[0] & 0x00100000)
- #define KEY_Pminus (keys[0] & 0x00200000)
- #define KEY_Blue (keys[0] & 0x00400000)
- #define KEY_Yellow (keys[0] & 0x00800000)
- #define KEY_2 (keys[0] & 0x01000000)
- #define KEY_3 (keys[0] & 0x02000000)
- #define KEY_Power (keys[0] & 0x04000000)
- #define KEY_TV (keys[0] & 0x08000000)
-
- #define KEY_A (keys[1] & 0x00000001)
- #define KEY_1 (keys[1] & 0x00000002)
- #define KEY_Betty (keys[1] & 0x00000004)
- #define KEY_4 (keys[1] & 0x00000008)
- #define KEY_Vplus (keys[1] & 0x00000010)
- #define KEY_7 (keys[1] & 0x00000020)
- #define KEY_Vminus (keys[1] & 0x00000040)
- #define KEY_Minus (keys[1] & 0x00000080)
- #define KEY_Menu (keys[1] & 0x00000100)
- #define KEY_PiP (keys[1] & 0x00000200)
- #define KEY_Info (keys[1] & 0x00000400)
- #define KEY_VTX1 (keys[1] & 0x00000800)
- #define KEY_Red (keys[1] & 0x00001000)
- #define KEY_Green (keys[1] & 0x00002000)
-
-#else
-
- #define KEY_OK (keys[0] & 0x00000001)
- #define KEY_7 (keys[0] & 0x00000002)
- #define KEY_Vplus (keys[0] & 0x00000004)
- #define KEY_4 (keys[0] & 0x00000008)
- #define KEY_Betty (keys[0] & 0x00000010)
- #define KEY_1 (keys[0] & 0x00000020)
- #define KEY_A (keys[0] & 0x00000040)
- #define KEY_Left (keys[0] & 0x00000080)
- #define KEY_Exit (keys[0] & 0x00000100)
- #define KEY_Up (keys[0] & 0x00000200)
- #define KEY_B (keys[0] & 0x00000400)
- #define KEY_16_9 (keys[0] & 0x00000800)
- #define KEY_AB (keys[0] & 0x00001000)
- #define KEY_D (keys[0] & 0x00002000)
- #define KEY_Right (keys[0] & 0x00004000)
- #define KEY_C (keys[0] & 0x00008000)
- #define KEY_AV (keys[0] & 0x00010000)
- #define KEY_0 (keys[0] & 0x00020000)
- #define KEY_9 (keys[0] & 0x00040000)
- #define KEY_8 (keys[0] & 0x00080000)
- #define KEY_6 (keys[0] & 0x00100000)
-
- #define KEY_Green (keys[1] & 0x00000001)
- #define KEY_Red (keys[1] & 0x00000002)
- #define KEY_VTX1 (keys[1] & 0x00000004)
- #define KEY_Info (keys[1] & 0x00000008)
- #define KEY_PiP (keys[1] & 0x00000010)
- #define KEY_Menu (keys[1] & 0x00000020)
- #define KEY_2 (keys[1] & 0x00000040)
- #define KEY_3 (keys[1] & 0x00000080)
- #define KEY_Mute (keys[1] & 0x00000100)
- #define KEY_Pminus (keys[1] & 0x00000200)
- #define KEY_Down (keys[1] & 0x00000400)
- #define KEY_Pplus (keys[1] & 0x00000800)
- #define KEY_Power (keys[1] & 0x00001000)
- #define KEY_TV (keys[1] & 0x00002000)
- #define KEY_Blue (keys[1] & 0x00004000)
- #define KEY_Yellow (keys[1] & 0x00008000)
- #define KEY_VTX3 (keys[1] & 0x00010000)
- #define KEY_VTX2 (keys[1] & 0x00020000)
- #define KEY_5 (keys[1] & 0x00040000)
- #define KEY_Minus (keys[1] & 0x00080000)
- #define KEY_Vminus (keys[1] & 0x00100000)
-
-#endif
-
-#define AUTO_TIMEOUT 5
-
-#define KEY_IDLE 0x00
-#define KEY_PRESS 0x01
-#define KEY_HOLD 0x02
-#define KEY_RELEASE 0x03
-
-#define FIOPIN0_KBDINT (1<<30)
-#define ANYKEY (!(FIOPIN0 & FIOPIN0_KBDINT))
-
-#define testLine(_c) \
-{ \
- if(!(_c)) \
- { \
- keys[half] |= keytest; \
- } \
- keytest <<= 1; \
-}
-
-volatile unsigned int keys[2];
-
-void initKeys(void);
-void scanKeys(void);
-void waitKeyUp(void);
-void waitKeyDown(void);
-/// Return 1 if any key is pressed.
-char isKeyPressed (void);
-signed char getNumKeyValue(void);
-unsigned char getKeynum(void);
-
-#define waitKeyUpDown() { waitKeyUp(); waitKeyDown(); }
-
-#endif
diff --git a/boop/keyboard/keyirq.c b/boop/keyboard/keyirq.c
deleted file mode 100644
index 6a11f45..0000000
--- a/boop/keyboard/keyirq.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- keyirq.c - keyboard scanning interrupt
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "keyboard.h"
-#include "keyirq.h"
-#include "lpc2220.h"
-#include "timerfuncs.h"
-#include "global.h"
-
-static unsigned char scannerTimeout;
-static unsigned char repeatTimeout;
-static unsigned char fastToggle;
-static unsigned char scannerState = 0;
-
-#define S_IDLE 0x00
-#define S_PRESSED 0x01
-#define S_HOLD 0x02
-#define S_REPEAT 0x03
-
-#define S_REPEATDELAY 6
-#define S_REPEATRATE 4
-
-#define MASK0 0x18402000
-#define MASK3 0x00300000
-
-void __attribute__ ((section(".text.fastcode"))) keyScanner(unsigned int cb)
-{
-#ifdef SWISSCOM
- static unsigned int IO2_P, IO2_PC, IO2_0, IO2_1;
-#else
- static unsigned int temp;
-
- keys[0] = 0;
- keys[1] = 0;
-#endif
-
- if(ANYKEY)
- {
-#ifdef SWISSCOM
- IOSET2= (126<<18);
- IO2_P = (1<<18);
- IO2_0=0;
- IO2_1=0;
- keys[0]=0;
- keys[1]=0;
- for(IO2_PC=18;IO2_PC<=24;IO2_PC++)
- {
- IOCLR2 = IO2_P;
- keys[0] |= ((IOPIN1>>16) & 0xF)<>21) & 0x3)<>1;
- keys[0] |= (IOPIN3 & MASK3) >> 14;
-
- IOSET2 = (1<<18);
- IOCLR2 = (1<<19);
-
- keys[0] |= FIOPIN0>> 3;
- keys[0] |= (IOPIN3 & MASK3) >> 16;
-
- IOSET2 = (1<<19);
- IOCLR2 = (1<<20);
-
- keys[0] |= FIOPIN0>> 5;
- keys[0] |= (IOPIN3 & MASK3) >> 18;
-
- IOSET2 = (1<<20);
- IOCLR2 = (1<<21);
-
- keys[0] |= FIOPIN0 >> 13;
- keys[0] |= (IOPIN3 & MASK3) << 8;
-
- keys[0] = ~keys[0];
- keys[0] &= 0x3FEAD7FD;
-
- IOSET2 = (1<<21);
- IOCLR2 = (1<<22);
-
- keys[1] = FIOPIN0>> 3;
- keys[1] |= (IOPIN3 & MASK3) >> 16;
-
- IOSET2 = (1<<22);
- IOCLR2 = (1<<23);
-
- keys[1] |= FIOPIN0>> 5;
- keys[1] |= (IOPIN3 & MASK3) >> 18;
-
- IOSET2 = (1<<23);
- IOCLR2 = (1<<24);
-
- keys[1] |= FIOPIN0>> 7;
- keys[1] |= (IOPIN3 & MASK3) >> 20;
-
- keys[1] = ~keys[1];
- keys[1] &= 0x3FA857F;
-
- temp = (keys[0] & 0x3FE80000)>>3;
- keys[0] &= 0x0002D7FD;
- keys[0] |= temp;
-
- temp = (keys[0] & 0x07FFD000)>>1;
- keys[0] &= 0x000007FD;
- keys[0] |= temp;
-
- temp = keys[0]>>1;
- keys[0] &= 0x00000001;
- keys[0] |= temp;
-
- temp = (keys[0] & 0x1FFF000)>>1;
- keys[0] &= 0x7FF;
- keys[0] |= temp;
-
- temp = (keys[1] & 0x03FA8000) >> 8;
- keys[1] &= 0x0000057F;
- keys[1] |= temp;
-
- temp = keys[0] & 0x00E00000;
- keys[0] &= 0x1FFFFF;
- keys[1] |= (temp>>3);
-
- FIOMASK0 &= MASK0;
- IOCLR2=((1<<18)|(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23));
-#endif
- }
-
- if((keys[0] == 0) && (keys[1] == 0))
- {
- scannerTimeout = 0;
- repeatTimeout = S_REPEATDELAY;
- scannerState = S_IDLE;
- }
- else if(scannerState == S_IDLE)
- {
- scannerState = S_PRESSED;
- }
-
- switch(scannerState)
- {
- case S_PRESSED:
- scannerTimeout++;
- if((scannerTimeout > repeatTimeout) && (repeatTimeout != 0) && !(sysInfo & SYS_IR))
- {
- repeatTimeout = S_REPEATRATE;
- scannerState++;
- }
- break;
- case S_HOLD:
- keys[0] = 0;
- keys[1] = 0;
- scannerState++;
- break;
-
- case S_REPEAT:
- scannerTimeout++;
- if(scannerTimeout > repeatTimeout)
- {
- keys[0] = 0;
- keys[1] = 0;
- scannerTimeout = 0;
- fastToggle++;
- if((fastToggle > 4) && (repeatTimeout > 1))
- {
- repeatTimeout >>= 1;
- fastToggle = 0;
- }
- }
- break;
- }
-}
diff --git a/boop/keyboard/keyirq.h b/boop/keyboard/keyirq.h
deleted file mode 100644
index c510ce1..0000000
--- a/boop/keyboard/keyirq.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- keyirq.h - keyboard scanning interrupt
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef KEYIRQ_H
-#define KEYIRQ_H
-
-#define AUTO_TIMEOUT 5
-
-#define testLine(_c) \
-{ \
- if(!(_c)) \
- { \
- keys[half] |= keytest; \
- } \
- keytest <<= 1; \
-}
-
-void __attribute__ ((section(".text.fastcode"))) keyScanner (unsigned int cb);
-
-#endif
diff --git a/boop/lcd.c b/boop/lcd.c
new file mode 100644
index 0000000..71af337
--- /dev/null
+++ b/boop/lcd.c
@@ -0,0 +1,617 @@
+/*
+ lcd.c - lcd control & graphics primitives
+ Copyright (C) 2007 Ch. Klippel
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#include "lpc2220.h"
+#include "lcd.h"
+#include "fonty.h"
+//#include "b.h"
+
+void pause(unsigned int ptime)
+{
+ unsigned long xx;
+ xx = ptime * 750;
+ while(xx)
+ {
+ xx--;
+ };
+}
+
+void lcd_set(unsigned char s)
+{
+ if(s == 0)
+ {
+ LCD_CMD = 0xA0; // set segment remap (00H mapped to seg0)
+ LCD_CMD = 0xC8; // set com output scan direction (remapped mode)
+ }
+ else
+ {
+ LCD_CMD = 0xA1; // set segment remap (7FH mapped to seg0)
+ LCD_CMD = 0xC0; // set com output scan direction (normal mode)
+ }
+}
+
+void lcd_init(unsigned char s)
+{
+
+ LCD_CMD = 0xE1; // exit power save mode
+ LCD_CMD = 0xE2; // software reset
+ pause(0x32);
+ LCD_CMD = 0xAB; // start internal oscillator
+ LCD_CMD = 0x27; // set internal regulator resistor ratio (8.1)
+ LCD_CMD = 0x81; // volume cmd
+ LCD_CMD = 0x3A; // volume cmd value
+ LCD_CMD = 0x65; // set DC-DC converter factor (4x)
+ LCD_CMD = 0x60; // set upper window corner ax cmd
+ LCD_CMD = 0x1C; // set upper window corner ax value
+ LCD_CMD = 0x61; // set upper window corner ay cmd
+ LCD_CMD = 0x0A; // set upper window corner ay value
+ LCD_CMD = 0x62; // set lower window corner bx cmd
+ LCD_CMD = 0x75; // set lower window corner bx value
+ LCD_CMD = 0x63; // set lower window corner by cmd
+ LCD_CMD = 0x81; // set lower window corner by value
+ LCD_CMD = 0x90; // set PWM and FRC (4-frames)
+ LCD_CMD = 0x88; // set white mode frame 2nd and 1st cmd
+ LCD_CMD = 0x00; // set white mode frame 2nd and 1st value
+ LCD_CMD = 0x89; // set white mode frame 4th and 3rd cmd
+ LCD_CMD = 0x00; // set white mode frame 4th and 3rd value
+ LCD_CMD = 0x8A; // set light gray mode frame 2nd and 1st cmd
+ LCD_CMD = 0x36; // set light gray mode frame 2nd and 1st value
+ LCD_CMD = 0x8B; // set light gray mode frame 4th and 3rd cmd
+ LCD_CMD = 0x63; // set light gray mode frame 4th and 3rd vakue
+ LCD_CMD = 0x8C; // set dark gray mode frame 2nd and 1st cmd
+ LCD_CMD = 0x67; // set dark gray mode frame 2nd and 1st value
+ LCD_CMD = 0x8D; // set dark gray mode frame 4th and 3rd cmd
+ LCD_CMD = 0x76; // set dark gray mode frame 4th and 3rd vakue
+ LCD_CMD = 0x8E; // set black mode frame 2nd and 1st cmd
+ LCD_CMD = 0xAC; // set black mode frame 2nd and 1st value
+ LCD_CMD = 0x8F; // set black mode frame 4th and 3rd cmd
+ LCD_CMD = 0xCA; // set black mode frame 4th and 3rd value
+ LCD_CMD = 0x66; // set DC-DC converter factor (5x)
+ lcd_set(s);
+
+// LCD_CMD = 0x2E; // set power control register (boost on, reg on, buffer off)
+
+// pause(0x64);
+
+ LCD_CMD = 0x2f; // set power control register (boost on, reg on, buffer on) 0x2F;
+ LCD_CMD = 0xA4; // set entire display on, normal mode)
+ LCD_CMD = 0xA6; // set normal display mode, inverse = 0xA7
+
+
+ lcd_fill(0x00);
+
+ LCD_CMD = 0xAF;
+
+ set_font(0);
+}
+
+void lcd_enable(unsigned char e)
+{
+ if(e)
+ {
+ LCD_CMD = 0xAF; // set display on
+ }
+ else
+ {
+ LCD_CMD = 0xAE; // set display off
+ }
+}
+
+void lcd_fill(unsigned char f)
+{
+ unsigned char x,y;
+ for(y=0;y<20;y++)
+ {
+ LCD_CMD = 0xB0;
+ LCD_CMD = y;
+ LCD_CMD = 0x10;
+ LCD_CMD = 0x00;
+ for(x=0;x<128;x++)
+ {
+ LCD_DATA = f;
+ LCD_DATA = f;
+ }
+ }
+}
+
+void draw_logo(void)
+{/*
+ unsigned short f;
+ unsigned char x,y;
+ f=0;
+ for(y=0;y>3;y++)
+ {
+ LCD_CMD = 0xB0;
+ LCD_CMD = y;
+ LCD_CMD = 0x10;
+ LCD_CMD = 0x00;
+ for(x=0;x> 3);
+ LCD_CMD = (0x10 + (x >> 4));
+ LCD_CMD = (x & 0x0F);
+
+ q = LCD_DATA;
+ q = l;
+
+ while(q--)
+ {
+ rcubuf[0][q] = LCD_DATA;
+ rcubuf[1][q] = LCD_DATA;
+ }
+
+ q = LCD_DATA;
+
+ LCD_CMD = 0xB0;
+ LCD_CMD = (y >> 3);
+ LCD_CMD = (0x10 + (x >> 4));
+ LCD_CMD = (x & 0x0F);
+
+ q = l;
+
+ switch(m)
+ {
+ case DRAW_PUT: // draw put
+ while(q--)
+ {
+ LCD_DATA = rcubuf[0][q] | drawbuf[0][q];
+ LCD_DATA = rcubuf[1][q] | drawbuf[1][q];
+ }
+ break;
+ case DRAW_XOR: // draw xor
+ while(q--)
+ {
+ LCD_DATA = rcubuf[0][q] ^ drawbuf[0][q];
+ LCD_DATA = rcubuf[1][q] ^ drawbuf[1][q];
+ }
+ break;
+ case DRAW_ERASE: // draw erase
+ while(q--)
+ {
+ LCD_DATA = rcubuf[0][q] & ~drawbuf[0][q];
+ LCD_DATA = rcubuf[1][q] & ~drawbuf[1][q];
+ }
+ break;
+ }
+}
+
+void do_rcuS(unsigned char x, unsigned char y, unsigned char m)
+{
+ unsigned char q;
+
+ LCD_CMD = 0xB0;
+ LCD_CMD = (y >> 3);
+ LCD_CMD = (0x10 + (x >> 4));
+ LCD_CMD = (x & 0x0F);
+
+ q = LCD_DATA;
+ rcubuf[0][0] = LCD_DATA;
+ rcubuf[1][0] = LCD_DATA;
+
+ q = LCD_DATA;
+
+ LCD_CMD = 0xB0;
+ LCD_CMD = (y >> 3);
+ LCD_CMD = (0x10 + (x >> 4));
+ LCD_CMD = (x & 0x0F);
+
+ switch(m)
+ {
+ case 0: // draw put
+ LCD_DATA = rcubuf[0][0] | drawbuf[0][0];
+ LCD_DATA = rcubuf[1][0] | drawbuf[1][0];
+ break;
+ case 1: // draw xor
+ LCD_DATA = rcubuf[0][0] ^ drawbuf[0][0];
+ LCD_DATA = rcubuf[1][0] ^ drawbuf[1][0];
+ break;
+ case 2: // draw erase
+ LCD_DATA = rcubuf[0][0] & ~drawbuf[0][0];
+ LCD_DATA = rcubuf[1][0] & ~drawbuf[1][0];
+ break;
+ }
+}
+
+void draw_block(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char c, unsigned char m)
+{
+ unsigned char q,s;
+ unsigned char yy,ss,vv,ww,xx;
+ unsigned char segm;
+
+ s = y;
+
+ if(h)
+ {
+
+
+
+ yy = h;
+ ss = y >> 3;
+ vv = y & 0x07;
+
+ ww = yy & 0x07;
+
+ segm = 0xFF;
+
+ xx = 8;
+ if(yy < 8)
+ {
+ segm >>= (8-ww);
+ xx -= (8-ww);
+ if(vv > (8-xx))
+ {
+ xx = yy -(vv-(8-xx));
+ }
+ else
+ {
+ xx = yy;
+ }
+ }
+ else
+ {
+ xx -= vv;
+ }
+
+ segm <<= vv;
+
+ q = w;
+ while(q--)
+ {
+ if(c & 0x02)
+ drawbuf[0][q] = segm;
+ else
+ drawbuf[0][q] = 0;
+
+ if(c & 0x01)
+ drawbuf[1][q] = segm;
+ else
+ drawbuf[1][q] = 0;
+ }
+ do_rcu(x,s,w,m);
+
+ yy -= xx;
+
+ while(yy > 8)
+ {
+ s += 8;
+ yy -= 8;
+ q = w;
+ while(q--)
+ {
+ if(c & 0x02)
+ drawbuf[0][q] = 0xFF;
+ else
+ drawbuf[0][q] = 0;
+
+ if(c & 0x01)
+ drawbuf[1][q] = 0xFF;
+ else
+ drawbuf[1][q] = 0;
+ }
+ do_rcu(x,s,w,m);
+ }
+
+ if(yy)
+ {
+ s += 8;
+ q = w;
+ while(q--)
+ {
+ if(c & 0x02)
+ drawbuf[0][q] = 0xFF >> (8-yy);
+ else
+ drawbuf[0][q] = 0;
+
+ if(c & 0x01)
+ drawbuf[1][q] = 0xFF >> (8-yy);
+ else
+ drawbuf[1][q] = 0;
+ }
+ do_rcu(x,s,w,m);
+ }
+ }
+}
+
+void draw_hline(unsigned char x, unsigned char y, unsigned char l, unsigned char c, unsigned char m)
+{
+ unsigned char p,q;
+
+ q = l;
+ p = 0x01 << (y & 0x07);
+
+ while(q--)
+ {
+ if(c & 0x02)
+ drawbuf[0][q] = p;
+ else
+ drawbuf[0][q] = 0;
+
+ if(c & 0x01)
+ drawbuf[1][q] = p;
+ else
+ drawbuf[1][q] = 0;
+ }
+ do_rcu(x,y,l,m);
+}
+
+void draw_vline(unsigned char x, unsigned char y, unsigned char l, unsigned char c, unsigned char m)
+{
+ unsigned char s;
+ unsigned char yy,ss,vv,ww,xx;
+ unsigned char segm;
+
+ s = y;
+
+ if(l)
+ {
+
+
+
+ yy = l;
+ ss = y >> 3;
+ vv = y & 0x07;
+
+ ww = yy & 0x07;
+
+ segm = 0xFF;
+
+ xx = 8;
+ if(yy < 8)
+ {
+ segm >>= (8-ww);
+ xx -= (8-ww);
+ if(vv > (8-xx))
+ {
+ xx = yy -(vv-(8-xx));
+ }
+ else
+ {
+ xx = yy;
+ }
+ }
+ else
+ {
+ xx -= vv;
+ }
+
+ segm <<= vv;
+
+ if(c & 0x02)
+ drawbuf[0][0] = segm;
+ else
+ drawbuf[0][0] = 0;
+
+ if(c & 0x01)
+ drawbuf[1][0] = segm;
+ else
+ drawbuf[1][0] = 0;
+
+ do_rcuS(x,s,m);
+
+ yy -= xx;
+
+ while(yy > 8)
+ {
+ s += 8;
+ yy -= 8;
+ if(c & 0x02)
+ drawbuf[0][0] = 0xFF;
+ else
+ drawbuf[0][0] = 0;
+
+ if(c & 0x01)
+ drawbuf[1][0] = 0xFF;
+ else
+ drawbuf[1][0] = 0;
+ do_rcuS(x,s,m);
+ }
+
+ if(yy)
+ {
+ s += 8;
+ if(c & 0x02)
+ drawbuf[0][0] = 0xFF >> (8-yy);
+ else
+ drawbuf[0][0] = 0;
+
+ if(c & 0x01)
+ drawbuf[1][0] = 0xFF >> (8-yy);
+ else
+ drawbuf[1][0] = 0;
+ do_rcuS(x,s,m);
+ }
+ }
+}
+
+void draw_rect(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char lw, unsigned char c, unsigned char m)
+{
+ if(lw)
+ {
+ if(lw == 1)
+ {
+ draw_hline(x, y, w, c, m);
+ draw_hline(x, y+h-1, w, c, m);
+
+ draw_vline(x, y+1, h-2, c, m);
+ draw_vline(x+w-1, y+1, h-2, c, m);
+ }
+ else
+ {
+ draw_block(x, y, w, lw, c, m);
+ draw_block(x, y+h-lw, w, lw, c, m);
+ draw_block(x, y+lw, lw, h-(2*lw), c, m);
+ draw_block(x+w-lw, y+lw, lw, h-(2*lw), c, m);
+ }
+ }
+}
+
+void draw_pixel(unsigned char x, unsigned char y, unsigned char c, unsigned char m)
+{
+ unsigned char p;
+
+ p = 0x01 << (y & 0x07);
+
+ if(c & 0x02)
+ drawbuf[0][0] = p;
+ else
+ drawbuf[0][0] = 0;
+
+ if(c & 0x01)
+ drawbuf[1][0] = p;
+ else
+ drawbuf[1][0] = 0;
+
+ do_rcuS(x,y,m);
+}
+
+void draw_line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char c, unsigned char m)
+{
+ unsigned char i,dx,dy,px,py;
+ unsigned int x,y;
+
+ if (y2 > y1) // incl. POSITIVE
+ {
+ dx=x2-x1;
+ dy=y2-y1;
+ px=x1;
+ py=y1;
+ draw_pixel(x1, y1, c, m); // first pixel
+ if (dx>=dy) // incl. is more horizontal than vertical
+ {
+ y = y1;
+ for(i=0;i=dx)
+ {
+ y-=dx;
+ py+=1;
+ }
+ px+=1;
+ draw_pixel(px, py, c, m);
+ }
+ }
+ else // incl. is more vertical than horizontal
+ {
+ x = x1;
+ for(i=0;i=dy)
+ {
+ x-=dy;
+ px+=1;
+ }
+ py+=1;
+ draw_pixel(px, py, c, m); //??????
+ }
+ };
+ }
+ else if (y2 < y1) // incl. NEGATIVE
+ {
+ dx=x2-x1;
+ dy=y1-y2; // inverted to produce a positive value
+ dx=dx;
+ dy=dy;
+ px=x1;
+ py=y2; // Note: due to inverted "dy",
+ draw_pixel(x2, y2, c, m); // the first pixel became the last one
+ if (dx>=dy) // incl. is more horizontal than vertical
+ {
+ y = y1;
+ py=y1;
+ for(i=0;i=dx)
+ {
+ y-=dx;
+ py-=1;
+ }
+ px+=1;
+ draw_pixel(px, py, c, m);
+ }
+ }
+ else // incl. is more vertical than horizontal
+ {
+ x = x1;
+ px=x2;
+ for(i=0;i=dy)
+ {
+ x-=dy;
+ px-=1;
+ }
+ py+=1;
+ draw_pixel(px, py, c, m);
+ }
+ };
+ }
+}
+
+void draw_circle(unsigned char cx, unsigned char cy, unsigned char radius, unsigned char c, unsigned char m)
+{
+ signed int tswitch;
+ unsigned char y, x = 0;
+ unsigned char d;
+
+ d = cy - cx;
+ y = radius;
+ tswitch = 3 - 2 * radius;
+ while (x <= y)
+ {
+ draw_pixel(cx + x, cy + y, c, m);
+ draw_pixel(cx + x, cy - y, c, m);
+ draw_pixel(cx - x, cy + y, c, m);
+ draw_pixel(cx - x, cy - y, c, m);
+
+ draw_pixel(cy + y - d, cy + x, c, m);
+ draw_pixel(cy + y - d, cy - x, c, m);
+ draw_pixel(cy - y - d, cy + x, c, m);
+ draw_pixel(cy - y - d, cy - x, c, m);
+
+ if (tswitch < 0)
+ {
+ tswitch += (4 * x + 6);
+ }
+ else
+ {
+ tswitch += (4 * (x - y) + 10);
+ y--;
+ }
+ x++;
+ }
+}
+
+
diff --git a/boop/lcd.h b/boop/lcd.h
new file mode 100644
index 0000000..8aaa59d
--- /dev/null
+++ b/boop/lcd.h
@@ -0,0 +1,47 @@
+/*
+ lcd.h - lcd control & graphics primitives
+ Copyright (C) 2007 Ch. Klippel
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#ifndef LCD_H
+#define LCD_H
+
+// the lcd data & command ports
+#define LCD_CMD (*((volatile unsigned char *) 0x81000000))
+#define LCD_DATA (*((volatile unsigned char *) 0x81000001))
+
+// drawmodes
+#define DRAW_PUT 0
+#define DRAW_XOR 1
+#define DRAW_ERASE 2
+
+void lcd_init(unsigned char s);
+void lcd_enable(unsigned char e);
+void do_rcu(unsigned char x, unsigned char y, unsigned char l, unsigned char m);
+void do_rcuS(unsigned char x, unsigned char y, unsigned char m);
+void pause(unsigned int ptime);
+
+void lcd_fill(unsigned char f);
+void draw_logo(void);
+void draw_block(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char c, unsigned char m);
+void draw_hline(unsigned char x, unsigned char y, unsigned char l, unsigned char c, unsigned char m);
+void draw_vline(unsigned char x, unsigned char y, unsigned char l, unsigned char c, unsigned char m);
+void draw_rect(unsigned char x, unsigned char y, unsigned char w, unsigned char h, unsigned char lw, unsigned char c, unsigned char m);
+void draw_pixel(unsigned char x, unsigned char y, unsigned char c, unsigned char m);
+void draw_line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char c, unsigned char m);
+void draw_circle(unsigned char cx, unsigned char cy, unsigned char radius, unsigned char c, unsigned char m);
+
+#endif
diff --git a/boop/lpc2220.h b/boop/lpc2220.h
index 36693c3..0a65789 100644
--- a/boop/lpc2220.h
+++ b/boop/lpc2220.h
@@ -70,12 +70,11 @@
#define VICVectCntl14 (*((volatile unsigned long *) 0xFFFFF238))
#define VICVectCntl15 (*((volatile unsigned long *) 0xFFFFF23C))
-#define SCS (*((volatile unsigned char *) 0xE01FC1A0))
+#define SCS (*((volatile unsigned char *) 0xE01FC1A0))
#define FIOPIN0 (*((volatile unsigned long *) 0x3FFFC014))
#define FIOSET0 (*((volatile unsigned long *) 0x3FFFC018))
#define FIODIR0 (*((volatile unsigned long *) 0x3FFFC000))
#define FIOCLR0 (*((volatile unsigned long *) 0x3FFFC01C))
-#define FIOMASK0 (*((volatile unsigned long *) 0x3FFFC010))
/* Pin Connect Block */
#define PINSEL0 (*((volatile unsigned long *) 0xE002C000))
@@ -267,8 +266,6 @@
/* A/D Converter */
#define ADCR (*((volatile unsigned long *) 0xE0034000))
#define ADDR (*((volatile unsigned long *) 0xE0034004))
-#define ADINTEN (*((volatile unsigned long *) 0xE003400C))
-#define ADSTAT (*((volatile unsigned long *) 0xE0034030))
/* Watchdog */
#define WDMOD (*((volatile unsigned char *) 0xE0000000))
@@ -279,12 +276,10 @@
/* Memory Mapping control register */
#define MEMMAP (*((volatile unsigned long *) 0xE01FC040))
-/* SSP control register */
#define SSPCR0 (*((volatile unsigned long *) 0xE005C000))
#define SSPCR1 (*((volatile unsigned char *) 0xE005C004))
#define SSPDR (*((volatile unsigned char *) 0xE005C008))
#define SSPSR (*((volatile unsigned char *) 0xE005C00C))
#define SSPCPSR (*((volatile unsigned char *) 0xE005C010))
-
#endif /* __ASM_ARCH_HARDWARE_H */
diff --git a/boop/lpc2220.ld b/boop/lpc2220.ld
new file mode 100644
index 0000000..27e6dfd
--- /dev/null
+++ b/boop/lpc2220.ld
@@ -0,0 +1,66 @@
+/* identify the Entry Point */
+
+ENTRY(Reset_Handler)
+
+/* specify the LPC2106 memory areas */
+
+MEMORY
+{
+ flash : ORIGIN = 0x00000000, LENGTH = 128K /* free FLASH EPROM area */
+ ram : ORIGIN = 0x40000200, LENGTH = 64K - 0x200 /* free RAM area */
+}
+
+/* define a global symbol _stack_end */
+
+_stack_end = 0x4000FEDC;
+
+/* now define the output sections */
+
+SECTIONS
+{
+ startup :
+ {
+ *(.startup)
+ } >ram /* the startup code goes into FLASH */
+
+ .text : /* collect all sections that should go into FLASH after startup */
+ {
+ *(.text) /* all .text sections (code) */
+ *(.rodata) /* all .rodata sections (constants, strings, etc.) */
+ *(.rodata*) /* all .rodata* sections (constants, strings, etc.) */
+ *(.glue_7) /* all .glue_7 sections (no idea what these are) */
+ *(.glue_7t) /* all .glue_7t sections (no idea what these are) */
+ _etext = .; /* define a global symbol _etext just after the last code byte */
+ } >ram /* put all the above into FLASH */
+
+ .data : /* collect all initialized .data sections that go into RAM */
+ {
+ _data = .; /* create a global symbol marking the start of the .data section */
+ *(.data) /* all .data sections */
+ _edata = .; /* define a global symbol marking the end of the .data section */
+ } >ram /* put all the above into RAM (but load the LMA copy into FLASH) */
+
+ .bss : /* collect all uninitialized .bss sections that go into RAM */
+ {
+ _bss_start = .; /* define a global symbol marking the start of the .bss section */
+ *(.bss) /* all .bss sections */
+ } >ram /* put all the above in RAM (it will be cleared in the startup code */
+
+ . = ALIGN(4); /* advance location counter to the next 32-bit boundary */
+ _bss_end = . ; /* define a global symbol marking the end of the .bss section */
+
+ _end = .; /* define a global symbol marking the end of application RAM */
+}
+
+PROVIDE( MEMMAP = 0xE01FC040 );
+PROVIDE( BCFG0 = 0xFFE00000 );
+PROVIDE( BCFG1 = 0xFFE00004 );
+PROVIDE( BCFG2 = 0xFFE00008 );
+PROVIDE( PINSEL0 = 0xE002C000 );
+PROVIDE( PINSEL1 = 0xE002C004 );
+PROVIDE( PINSEL2 = 0xE002C014 );
+PROVIDE( IO0PIN = 0xE0028000 );
+PROVIDE( IO0DIR = 0xE0028008 );
+PROVIDE( IO2SET = 0xE0028024 );
+PROVIDE( VICVectAddr = 0xFFFFF030 );
+
diff --git a/boop/lpc2220_rom.ld b/boop/lpc2220_rom.ld
index f7470bf..73ff62a 100644
--- a/boop/lpc2220_rom.ld
+++ b/boop/lpc2220_rom.ld
@@ -24,14 +24,13 @@ ENTRY(_startup)
MEMORY
{
- ram : ORIGIN = 0x40000000, LENGTH = 64K-0x400 /* free RAM area */
+ ram : ORIGIN = 0x40000000, LENGTH = 64K /* free RAM area */
flash : ORIGIN = 0x80000000, LENGTH = 1M /* FLASH ROM */
}
/* define a global symbol _stack_end */
-/* _stack_end = 0x4000F9DC; */
-_stack_end = 0x40010000;
+_stack_end = 0x4000FEDC;
/* now define the output sections */
@@ -55,56 +54,28 @@ SECTIONS
_etext = .; /* define a global symbol _etext just after the last code byte */
} >flash /* put all the above into FLASH */
. = ALIGN(4); /* advance location counter to the next 32-bit boundary */
-
- __exidx_start = .;
- PROVIDE(__exidx_start = __exidx_start);
- .ARM.exidx :
- {
- *(.ARM.exidx* .gnu.linkonce.armexidx.*);
- } > flash AT > flash /* index entries for section unwinding */
-
- . = ALIGN(4);
- __exidx_end = .;
- PROVIDE(__exidx_end = __exidx_end);
-
- . = ALIGN(4); /* advance location counter to the next 32-bit boundary */
-
.fastcode :
{
__fastcode_load = LOADADDR(.fastcode);
__fastcode_start = .;
/* functions with __attribute__ ((section (".text.fastcode")))*/
- *(.text.fastcode)
+ *(.text.fastcode)
*(.text.ramvectors)
- *(.text.do_vic)
- *(.text.do_fiq)
- *(.text.timerIRQ)
+ *(.text.keyIRQ)
*(.text.soundIRQ)
- *(.text.FIQ_Routine)
- *(.text.keyScanner)
- *(.text.adcIRQ)
*(.text.irIRQ)
+ *(.text.scanKeys)
*(.text.defIR)
- *(.text.NRC17_Encode)
- *(.text.ITT_Encode)
*(.text.RC5_Encode)
- *(.text.RCA_Encode)
*(.text.RCMM_Encode)
- *(.text.REC80_Encode)
- *(.text.RECS80_Encode)
+ *(.text.NRC17_Encode)
*(.text.SIRC_Encode)
+ *(.text.REC80_Encode)
+ *(.text.ITT_Encode)
*(.text.SPACEENC_Encode)
- *(.text.cc1100IRQ)
- *(.text._evaluate)
- *(.text._push_state)
- *(.text._mcpy)
- *(.text._do_rcu)
- *(.text._do_rcuS)
- *(.text._draw_block)
- *(.text._draw_hline)
- *(.text._draw_vline)
-
+ *(.text.RECS80_Encode)
+ *(.text.RCA_Encode)
. = ALIGN (4);
__fastcode_end = .;
} >ram AT>flash
@@ -127,7 +98,7 @@ SECTIONS
. = ALIGN(4); /* advance location counter to the next 32-bit boundary */
_bss_end = . ; /* define a global symbol marking the end of the .bss section */
}
-end = .; /* define a global symbol marking the end of application RAM */
+_end = .; /* define a global symbol marking the end of application RAM */
PROVIDE( MEMMAP = 0xE01FC040 );
PROVIDE( BCFG0 = 0xFFE00000 );
@@ -139,6 +110,4 @@ PROVIDE( PINSEL2 = 0xE002C014 );
PROVIDE( IO0PIN = 0xE0028000 );
PROVIDE( IO0DIR = 0xE0028008 );
PROVIDE( IO2SET = 0xE0028024 );
-PROVIDE( SCS = 0xE01FC1A0 );
-PROVIDE( FIODIR0 = 0x3FFFC000 );
PROVIDE( VICVectAddr = 0xFFFFF030 );
diff --git a/boop/main.c b/boop/main.c
index 9744389..a8bd367 100644
--- a/boop/main.c
+++ b/boop/main.c
@@ -1,80 +1,54 @@
/*
- main.c - main program routines
- Copyright (C) 2007 Ch. Klippel
+ main.c - main program routines
+ Copyright (C) 2007 Ch. Klippel
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
*/
-//typedef volatile unsigned int *reg32_t;
+//#define WITH_SOUND
+
+typedef volatile unsigned int *reg32_t;
#include "lpc2220.h"
-
-
#include "lcd.h"
#include "irq.h"
-#include "keyboard.h"
-#include "lcd.h"
+#include "soundcore.h"
#include "fonty.h"
-#include "sid.h"
-#include "sound.h"
-//#include "sounds.h"
-//#include "sound3.h"
-#include "infrared.h"
-#include "pwm.h"
-#include "codes.h"
-#include "encoders.h"
-#include "ir_selector.h"
-#include "serial.h"
-#include "flash.h"
-#include "rf.h"
-#include "menu.h"
-#include "testmenu.h"
-#include "mainmenu.h"
-#include "timerfuncs.h"
-#define __MAIN_C__
-#include "global.h"
-#include "adc.h"
-#include "backlight.h"
-#include "rtc.h"
-#include "i2c.h"
-#include "bfs.h"
-#include "settingsmenu.h"
-#include "ir_raw.h"
-#include "ir_capture.h"
-#include "controls.h"
-#include "buffer.h"
+#include "keyboard.h"
+#include "externs.h"
-unsigned char sysInfo;
+static unsigned int old_tval;
-extern volatile char timeout;
+unsigned long checksum;
+unsigned short count;
+unsigned long adr;
+const char hval[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
-extern ir_sfn irSend;
-extern ir_fn irRepeat;
-extern ir_fn irStop;
+unsigned char idle;
+unsigned char ccbuf[64];
-const char hval[16] = "0123456789ABCDEF";
+extern unsigned char cc1100rx;
+extern unsigned char batcnt;
-unsigned int oldkeys[2];
-unsigned int key_state;
+#define KEY_IDLE 0x00
+#define KEY_PRESS 0x01
+#define KEY_HOLD 0x02
+#define KEY_RELEASE 0x03
-extern unsigned char act_encoder, act_set;
+#define SPEED_30 0
+#define SPEED_60 1
-extern unsigned char bl_val;
-
-
-// betty runs on 10 MHz * 1/4 on reset
-// this enables the PLL clock generation and sets the prescaler
void setSpeed(unsigned char sp)
{
disableIRQ();
@@ -88,10 +62,9 @@ void setSpeed(unsigned char sp)
VPBDIV = 0x00;
- BCFG0 = 0x10001CA0;
- BCFG2 = 0x10001CA0;
+ BCFG0 = 0x100004A0;
+ BCFG2 = 0x100004A0;
BCFG1 = 0x00000C21;
- sysInfo |= SYS_TURBO;
break;
case SPEED_30: // normal speed (30 mhz)
@@ -103,319 +76,167 @@ void setSpeed(unsigned char sp)
VPBDIV = 0x02;
- BCFG0 = 0x10000A20;
- BCFG2 = 0x10000A20;
+ BCFG0 = 0x10000420;
+ BCFG2 = 0x10000420;
BCFG1 = 0x00000400;
- sysInfo &= ~SYS_TURBO;
break;
}
enableIRQ();
}
-/*
-// draw "emitting waves" symbol
-// used when a button is pressed
-void draw_ir (unsigned char x, unsigned char y, unsigned char m)
-{
- //~ 0 1: #####
- //~ 1 2: # #
- //~ 2 4: ###
- //~ 3 8: # #
- //~ 4 1:
- //~ 5 2: ###
- //~ 6 4: #####
-
- draw_hline(x+1,y,5,3,m); // 0
-
- draw_pixel(x ,y+1,3,m); // 1
- draw_pixel(x+6,y+1,3,m); // 1
-
- draw_hline(x+2,y+2,3,3,m); // 2
-
- draw_pixel(x+1,y+3,3,m); // 3
- draw_pixel(x+5,y+3,3,m); // 3
-
- draw_hline(x+2,y+5,3,3,m); // 5
-
- draw_hline(x+1,y+6,5,3,m); // 6
-
- draw_symbol(x,y,7,(unsigned char*)symIR,LCD_COLOR_B,m);
-
-}*/
-
-
-
-// shows current IR set on top of main screen
-void drawSet (void)
-{
- set_font(SMALLFONT);
- draw_block (0, 0, 99, 9, LCD_COLOR_B, DRAW_ERASE);
- draw_string (0,0,getSetName (irDevTab.device[irDevTab.active].encoder, irDevTab.device[irDevTab.active].set), LCD_COLOR_B, DRAW_PUT);
-}
-
-
-//
-void drawMainscreen (void)
-{
- //~ set_font(SMALLFONT); // done in drawSet()
-
- lcd_fill(0);
- draw_logo();
-
- // top bar
- drawSet();
-
-/* is updated in main loop
- // time
-#if FF_LARGE_IDLE_CLOCK
- printTime (6,20, (struct time_ *)&rtc.time, 1);
-#else
- printTime (86,152, (struct time_ *)&rtc.time, 0);
- printDate(0,152,(struct date_ *)&rtc.date,0);
-#endif
-*/
- showBat(0xff); // battery indicator
- redraw_symbols(); //
-}
-
-
-//unsigned char i;
-
-/** let the LPC2200 sleep until the next IRQ
- *
- * This function tries to enter the sleep mode and stays
- * there until the next interrupt wakes up the CPU.
- * If that is not possible, the function returns immediately.
- */
-extern unsigned char sact;
-void cpu_idle ()
-{
- /* fall through if a key was pressed */
- if (ANYKEY)
- return;
-
- //fall through if UART0 Scratch pad register is not empty
- //OpenOCD can set this register with "mwb 0xE000C01C 0x01" to disable idle and power down mode
- if(U0SCR)
- return;
-
- return;
-
- /* only idle mode instead of power down when:
- * * backlight on
- * * IR transmission
- * * RF is activated
- * * sound is playing
- * * I2C access
- * * SYS_NOPDOWN in sysInfo is set
- */
- if (bl_val != 0 || key_state != KEY_IDLE ||
- (RF.state > RFidle) ||
- (SID.flags & SIDenable) || sact || i2ccurrentjob || (sysInfo & SYS_NOPDOWN))
- {
- if(sysInfo & SYS_NOIDLE)
- return;
- /* WARNING: no code reuse here:
- * PCON = causes timing problems */
- EXTINT = 0x08;
- PCON = PCON_IDLE;
- PLLFEED = 0xAA;
- PLLFEED = 0x55;
- }
- else
- {
- refresh_symbols(0xff);
- EXTINT = 0x08;
- sysInfo |= SYS_NOIDLE;
- PCON = PCON_PDOWN;
- PLLFEED = 0xAA;
- PLLFEED = 0x55;
- }
-} // cpu_idle
int main(void)
{
- sysInfo = SYS_NOIDLE;
-
- SCS |= 0x01;
- FIODIR0 |= ((1<<21) | (1<<11) | (1<<6) | (1<<23) | (1<<19) | (1<<17));
- FIODIR0 |= (1<<12);
- FIOSET0 |= (1<<12);
- FIOCLR0 |= (1<<4);
-
- setSpeed(SPEED_60);
- BFS_Mount(); // flash file system
-
- lcd_init(0);
- serial_init();
-
- startTimerIRQ();
- startADC();
-
- initKeys();
-
- initSound();
- //startSoundIRQ();
-
- initIR();
- startIrIRQ();
-
- PWM_init();
-
- RF_init();
- load_RF_setting();
- startRFIRQ();
- RF_changestate(RFwor);
-
- initI2C();
- initRTC();
- startRtcIRQ();
-
- enableIRQ();
-
- //testmenu_init();
- init_menu();
-
- initBacklight();
-
- oldkeys[0] = keys[0];
- oldkeys[1] = keys[0];
-
- key_state = KEY_IDLE;
-
- set_font(BOLDFONT);
-
- load_setting(); // display settings
- load_RC_setting(); // learned remote codes
+ unsigned char key_state, bl_vol;
+ unsigned int oldkeys[2], ok[2];
- // recorded raw IR commands
- {
- struct RAWset_ RAWset;
- unsigned char x;
- unsigned long RAWcmdbase;
+ setSpeed(SPEED_30);
+
+ //*************************************************************************************
+
+
+
+ //*************************************************************************************
+ oldkeys[0] = 0;
+ oldkeys[1] = 0;
+ ok[0] = 0;
+ ok[1] = 0;
+ key_state = KEY_IDLE;
+ old_tval = 0;
+ bl_vol = 0xff;
+ lcd_init(0);
+ SCS |= 0x01;
+ FIODIR0 |= ((1<<21) | (1<<4) | (1<<11) | (1<<6) | (1<<23) | (1<<19) | (1<<17));
+
+ initKeys();
+ //initIR();
+ IODIR0 |= (1<<12);
+ //VPBDIV = 0x02;
+ startKeyIRQ();
+ startPWMIRQ();
- RAWcmdbase = FLASH1_BASE +(secaddr[0]<<1); // data address
- x=memcmp((void*)RAWcmdbase,"RC01",4); // check ID
-
- if(!x) //
- {
- memcpy(&RAWset,(void *)RAWcmdbase,sizeof(struct RAWset_));
- RAWset.name[7] = 0;
- BFS_SaveFile(BFS_ID_RAWslot0, sizeof(struct RAWset_), (unsigned char*) &RAWset);
- eraseSector(1,0);
- }
- }
-
- setEncoder(irDevTab.device[irDevTab.active].encoder, irDevTab.device[irDevTab.active].set);
-
- drawMainscreen();
- ask_for_time(0);
-
-/*
- playSound((unsigned char*)sound1_data, sound1_len);
- waitSound();
- playSound((unsigned char*)sound2_data, sound2_len);
-*/
-
- // main loop
+ idle =0;
+ enableIRQ();
+
while (1)
- {
- // detect keyboard action (keyboard matrix scanned by interrupt)
- if(keys[0] != oldkeys[0] || keys[1] != oldkeys[1])
- {
- oldkeys[0] = keys[0];
- oldkeys[1] = keys[1];
- sysInfo |= SYS_KEY;
- }
-
- // determine keyboard actions on main screen
+ {
+
switch(key_state)
{
case KEY_IDLE:
- if(sysInfo & SYS_KEY)
+ if(keys[0] != oldkeys[0] || keys[1] != oldkeys[1])
{
- sysInfo &= ~SYS_KEY;
- if(KEY_Betty)
+ if(keys[0] != 0 || keys[1] != 0)
{
- setBacklight(BL_AUTO); // activate backlight
- menu_exec(&mainMenu); // select menu
- setEncoder(irDevTab.device[irDevTab.active].encoder, irDevTab.device[irDevTab.active].set);
- drawMainscreen(); // draw new menu
- while(KEY_Exit); // block until
- }
- //~ else if(KEY_2)
- //~ {
- //setSpeed(SPEED_30);
- //~ }
- //~ else if(KEY_3)
- //~ {
- //setSpeed(SPEED_60);
- //~ }
- else if(KEY_A || KEY_B || KEY_C || KEY_D)
- {
- // select encoder
- unsigned char x;
- //playSound((unsigned char*)sound3_data, sound3_len);
- x=0;
- if (KEY_B) x=1;
- if (KEY_C) x=2;
- if (KEY_D) x=3;
-
- if (setEncoder(irDevTab.device[x].encoder, irDevTab.device[x].set)) {
- setBacklight(BL_AUTO);
- irDevTab.active = x;
- //~ drawMainscreen();
- drawSet();
- }
- }
-
- // (last-minute detection of regular key?)
- if((keys[0] != 0) || (keys[1] != 0))
+ draw_hexW(72,140,ok[0],3,DRAW_ERASE);
+ draw_hexW(72,150,ok[1],3,DRAW_ERASE);
+ draw_hexW(72,140,keys[0],3,DRAW_PUT);
+ draw_hexW(72,150,keys[1],3,DRAW_PUT);
+ ok[0] = keys[0];
+ ok[1] = keys[1];
key_state = KEY_PRESS;
+ }
+
+ oldkeys[0] = keys[0];
+ oldkeys[1] = keys[1];
+
+ if(KEY_A)
+ {
+ if(timeout & 0x08)
+ timeout = 0;
+ else
+ timeout = 0x08;
+ }
+ else if(KEY_B)
+ {
+
+
+ }
+ else if(KEY_C)
+ {
+
+ }
+ else if(KEY_D)
+ {
+
+ }
+ else if(KEY_Vminus)
+ {
+ FIOCLR0 |= (1<<11);
+ }
+ else if(KEY_Vplus)
+ {
+ FIOSET0 |= (1<<11);
+ playSID();
+ }
+ else if(KEY_OK)
+ {
+
+ }
+ else if(KEY_Mute)
+ {
+
+ }
+ else if(KEY_1)
+ {
+
+ }
+ else if(KEY_2)
+ {
+
+ }
+ else if(KEY_3)
+ {
+
+ }
+ else if(KEY_4)
+ {
+
+ }
+ else if(KEY_5)
+ {
+
+ }
+ else if(KEY_6)
+ {
+
+ }
+ else if(KEY_7)
+ {
+
+ }
+ else if(KEY_8)
+ {
+
+ }
+ else if(KEY_9)
+ {
+
+ }
}
break;
-
case KEY_PRESS:
- irSend(getCode());
+ //irSend();
key_state = KEY_HOLD;
- if(!(T1TCR & 0x02))
- draw_symbol(90,0,7,(unsigned char*)symIR,LCD_COLOR_B,DRAW_PUT);
-// autorepeat = 0;
+ autorepeat = 0;
break;
-
case KEY_HOLD:
-// if(autorepeat >= AUTO_TIMEOUT)
- irRepeat();
- //draw_ir(90, 0, DRAW_XOR);
+ if(autorepeat >= AUTO_TIMEOUT)
+ //irRepeat();
+
if(keys[0] == 0 && keys[1] == 0)
key_state = KEY_RELEASE;
break;
-
case KEY_RELEASE:
- if(!(T1TCR & 0x02))
- draw_symbol(90,0,7,(unsigned char*)symIR,LCD_COLOR_B,DRAW_ERASE);
- irStop();
+ //irStop();
key_state = KEY_IDLE;
break;
}
- cpu_idle(); // let the LPC2200 sleep until the next IRQ
+
+ }
+ return 0;
+}
- // display time
- if (timeInfo & TIMECHANGED)
- {
-#if FF_LARGE_IDLE_CLOCK
- // time large, no date
- printTime( 6, 20, (struct time_ *)&rtc.time, 1);
-#else
- // time and date small
- printTime( 86, 152, (struct time_ *)&rtc.time, 0);
- printDate( 0, 152, (struct date_ *)&rtc.date, 0);
-#endif
- timeInfo &= ~TIMECHANGED; // clear update flag
- }
- } // while (1)
- return 0; // never returns
-} // main
diff --git a/boop/rtc/Make.conf b/boop/rtc/Make.conf
deleted file mode 100644
index 8293f8f..0000000
--- a/boop/rtc/Make.conf
+++ /dev/null
@@ -1 +0,0 @@
-THUMBSRCS := rtc.c i2c.c rtctimer.c
diff --git a/boop/rtc/i2c.c b/boop/rtc/i2c.c
deleted file mode 100644
index 3aa1edd..0000000
--- a/boop/rtc/i2c.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- i2c.c -
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "lpc2220.h"
-#include "i2c.h"
-#include "irq.h"
-#include "rtc.h"
-#include "global.h"
-
-volatile struct i2cjob_* volatile i2ccurrentjob;
-
-unsigned char i2c_jobexec(struct i2cjob_* job) {
-
- VICVectCntl3 &= ~VIC_SLOT_EN;
- while(i2ccurrentjob);
- i2ccurrentjob = job;
- I2CONSET = STA;
- while(i2ccurrentjob);
- VICVectCntl3 |= VIC_SLOT_EN;
- return 1;
-}
-
-void i2cIRQ(void) {
- unsigned char state;
-
- state = I2STAT;
- i2ccurrentjob->buffer;
-
- switch(state) {
- case 0x08: //A START condition has been transmitted
- I2DAT = RTCslaveaddr | I2C_write;
- I2CONSET = AA;
- I2CONCLR = SI | STA;
- i2ccurrentjob->pos = 0;
- break;
- case 0x18: //SLA+W has been transmitted; ACK has been received.
- I2DAT = i2ccurrentjob->byteaddr;
- I2CONSET = AA;
- I2CONCLR = SI;
- break;
- case 0x28: //Data byte in I2DAT has been transmitted; ACK has been received.
- switch(i2ccurrentjob->action) {
- case I2C_read:
- I2CONSET = STA;
- I2CONCLR = AA | SI;
- break;
- case I2C_write:
- if(i2ccurrentjob->len > i2ccurrentjob->pos) {
- I2DAT = i2ccurrentjob->buffer[i2ccurrentjob->pos++];
- I2CONSET = AA;
- I2CONCLR = SI;
- }
- else
- i2ccurrentjob->action = I2C_done;
- break;
- default:
- i2ccurrentjob->action = I2C_error;
- }
- break;
- case 0x10: //A repeated START condition has been transmitted
- I2DAT = RTCslaveaddr | I2C_read;
- I2CONSET = AA;
- I2CONCLR = SI | STA;
- break;
- case 0x40: //SLA+R has been transmitted; ACK has been received.
- I2CONSET = AA;
- I2CONCLR = SI;
- break;
- case 0x50: //Data byte has been received; ACK has been returned.
- i2ccurrentjob->buffer[i2ccurrentjob->pos++] = I2DAT;
- if(i2ccurrentjob->len > i2ccurrentjob->pos+1)
- I2CONSET = AA;
- else
- I2CONCLR = AA;
- I2CONCLR = SI;
- break;
- case 0x58: //Data byte has been received; NOT ACK has been returned.
- i2ccurrentjob->buffer[i2ccurrentjob->pos] = I2DAT;
- i2ccurrentjob->action = I2C_done;
- break;
- case 0x20: //SLA+W has been transmitted; NOT ACK has been received.
- case 0x30: //Data byte in I2DAT has been transmitted; NOT ACK has been received.
- if(i2ccurrentjob->pos)
- i2ccurrentjob->pos--;
- default:
- i2ccurrentjob->action = I2C_error;
- break;
- }
-
- if((i2ccurrentjob->action == I2C_done) || (i2ccurrentjob->action == I2C_error)) {
- I2CONSET = STO;
- I2CONCLR = SI;
- if(i2ccurrentjob->onfinish) {
- struct i2cjob_* job;
- job = (struct i2cjob_*)i2ccurrentjob;
- i2ccurrentjob = 0;
- job->onfinish(job);
- }
- else
- i2ccurrentjob = 0;
- }
-}
-
-void initI2C(void) {
- PINSEL0 |= (1<<4) | (1<<6);
- I2SCLL = 19;
- I2SCLH = 19;
-
- I2CONSET = I2EN;
- i2ccurrentjob = 0;
-
- VICVectAddr4 = (unsigned long)&(i2cIRQ);
- VICVectCntl4 = VIC_SLOT_EN | INT_SRC_I2C;
- VICIntEnable = INT_I2C;
-}
-
diff --git a/boop/rtc/i2c.h b/boop/rtc/i2c.h
deleted file mode 100644
index 82f6932..0000000
--- a/boop/rtc/i2c.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- i2c.h -
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef I2C_H
-#define I2C_H
-
-#define AA 0x04
-#define SI 0x08
-#define STO 0x10
-#define STA 0x20
-#define I2EN 0x40
-
-extern struct i2cjob_ dummyjob;
-
-typedef void(*i2c_fn)(struct i2cjob_*);
-
-struct i2cjob_ {
- unsigned char* buffer;
- i2c_fn onfinish;
- unsigned char len;
- unsigned char pos;
- unsigned char byteaddr;
- unsigned char action;
-};
-
-#define I2C_write 0
-#define I2C_read 1
-#define I2C_done 2
-#define I2C_error 3
-
-volatile struct i2cjob_* volatile i2ccurrentjob;
-
-unsigned char i2c_jobexec(struct i2cjob_* job);
-void initI2C(void);
-
-#endif
diff --git a/boop/rtc/rtc.c b/boop/rtc/rtc.c
deleted file mode 100644
index 271e201..0000000
--- a/boop/rtc/rtc.c
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- rtc.c
-
- real-time clock PCF8563 by NXP Semiconductors
- I2C Bus
- Interrupt
-
- display date / time
- set date / time
- date calculations
- settings menu
-
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "lpc2220.h"
-#include "rtc.h"
-#include "i2c.h"
-#include "lcd.h"
-#include "fonty.h"
-#include "drawDigit.h"
-#include "irq.h"
-#include "adc.h"
-#include "keyboard.h"
-#include "rf.h"
-#include "global.h"
-#include "rtc.h"
-#include "controls.h"
-#include "timerfuncs.h"
-
-const unsigned long default_time[1] = {0x00000000};
-const unsigned char default_date[4] = {0x01, 0x02, 0x01, 0x08};
-const unsigned char months[36] = "JANFEBMRZAPRMAIJUNJULAUGSEPOKTNOVDEZ";
-const unsigned char days[14] = "SOMODIMIDOFRSA";
-
-void initRTC (void)
-{
- struct i2cjob_ job;
- unsigned char buffer[4];
-
- job.buffer = buffer;
- job.onfinish = 0;
-
- //init rtc
- job.len = 2;
- job.byteaddr = RTCREG_CONTROL_STATUS_1;
- job.buffer[0] = 0x08;
- job.buffer[1] = 0x01;
- do {
- job.action = I2C_write;
- i2c_jobexec(&job);
- } while(!(job.action == I2C_done));
-
- //init rtc alarm
- job.len = 4;
- job.byteaddr = RTCREG_MINUTE_ALARM;;
- job.buffer[0] = (1<<7);
- job.buffer[1] = (1<<7);
- job.buffer[2] = (1<<7);
- job.buffer[3] = (1<<7);
- job.action = I2C_write;
- i2c_jobexec(&job);
-
- //init rtc timer
- job.len = 2;
- job.byteaddr = RTCREG_TIMER_CONTROL;
- job.buffer[0] = 0x82;
- job.buffer[1] = 0x01;
- job.action = I2C_write;
- i2c_jobexec(&job);
-
- timeInfo =0;
-
- setTimeDate((struct time_*) default_time,(struct date_*) default_date);
-}
-
-unsigned char getTimeDate (struct time_* t, struct date_ *d)
-{
- struct i2cjob_ job;
- unsigned char buffer[7];
-
- job.buffer = buffer;
- job.onfinish = 0;
- job.len = 7;
- job.byteaddr = RTCREG_SECOND;
- job.action = I2C_read;
- i2c_jobexec(&job);
-
- t->second = buffer[0] & 0x7F;
- t->minute = buffer[1] & 0x7F;
- t->hour = buffer[2] & 0x3F;
- d->day = buffer[3] & 0x3F;
- d->weekday = buffer[4] & 0x07;
- d->month = buffer[5] & 0x1F;
- d->year = buffer[6];
-
- return buffer[0] & 0x80; /// \return VL - clock integrity. 0 is good.
-}
-
-void setTimeDate (struct time_ *t, struct date_ *d)
-{
- struct i2cjob_ job;
- unsigned char buffer[7];
-
- job.buffer = buffer;
- job.onfinish = 0;
- memcpy(job.buffer,(unsigned char *)t,3);
- memcpy(job.buffer+3,(unsigned char *)d,4);
- job.len = 7;
- job.byteaddr = RTCREG_SECOND;
- job.action = I2C_write;
- i2c_jobexec(&job);
-
-}
-
-void printTime (unsigned char x, unsigned char y, struct time_* t, unsigned char format)
-{
- if (format)
- {
- // 00:00
- unsigned char w = 25;
- unsigned char h = 45;
-
- drawDigit (x+0, y, w, h, (t->hour >> 4) & 0x0F, 5, LCD_COLOR_B, DRAW_PUT);
- drawDigit (x+w+2, y, w, h, t->hour & 0x0F, 5, LCD_COLOR_B, DRAW_PUT);
- drawDigit (x+2*w +15, y, w, h, (t->minute >> 4) & 0x0F, 5, LCD_COLOR_B, DRAW_PUT);
- drawDigit (x+3*w+2+15, y, w, h, t->minute & 0x0F, 5, LCD_COLOR_B, DRAW_PUT);
-
- draw_char (x+2*w+10, y+h/2, ':', LCD_COLOR_B, DRAW_PUT);
- }
- else
- {
- unsigned char f = activefont;
-
- set_font (SMALLFONT);
- draw_block (x,y,42,7,LCD_COLOR_B,DRAW_ERASE);
- draw_hexC (x+30,y,t->second, LCD_COLOR_B, DRAW_PUT);
- draw_hexC (x+15,y,t->minute, LCD_COLOR_B, DRAW_PUT);
- draw_hexC (x+0,y,t->hour, LCD_COLOR_B, DRAW_PUT);
- draw_char (x+12,y,':', LCD_COLOR_B, DRAW_PUT);
- draw_char (x+27,y,':', LCD_COLOR_B, DRAW_PUT);
- set_font (f);
- }
-}
-
-
-void printDate (unsigned char x, unsigned char y, struct date_* d, unsigned char format)
-{
- unsigned char f;
- char s[17];
-
- f=activefont;
- set_font(SMALLFONT);
-
- switch(format) {
- case 1:
- draw_block (x,y,80,7,LCD_COLOR_B,DRAW_ERASE);
- s[ 0] = days[d->weekday * 2];
- s[ 1] = days[(d->weekday * 2) + 1];
- s[ 2] = ',';
- s[ 3] = ' ';
- s[ 4] = ((d->day & 0xf0)>>4) + 0x30;
- s[ 5] = ((d->day & 0x0f)) + 0x30;
- s[ 6] = '.';
- s[ 7] = ' ';
- s[ 8] = months[(d->month - 1) * 3];
- s[ 9] = months[((d->month - 1) * 3)+1];
- s[10] = months[((d->month - 1) * 3)+2];
- s[11] = ' ';
- s[12] = '2';
- s[13] = '0';
- s[14] = ((d->year & 0xf0)>>4) + 0x30;
- s[15] = ((d->year & 0x0f)) + 0x30;
- s[16] = 0;
- draw_string (x, y, s, LCD_COLOR_B, DRAW_PUT);
- break;
- default:
- draw_block(x,y,57,7,3,DRAW_ERASE);
- draw_char (x+0,y,days[d->weekday * 2], LCD_COLOR_B, DRAW_PUT);
- draw_char (x+6,y,days[ (d->weekday * 2) + 1], LCD_COLOR_B, DRAW_PUT);
- draw_hexC (x+15,y,d->day, LCD_COLOR_B, DRAW_PUT);
- draw_char (x+27,y,'.', LCD_COLOR_B, DRAW_PUT);
- draw_hexC (x+30,y,d->month, LCD_COLOR_B, DRAW_PUT);
- draw_char (x+42,y,'.', LCD_COLOR_B, DRAW_PUT);
- draw_hexC (x+45,y,d->year, LCD_COLOR_B, DRAW_PUT);
- }
-
- set_font(f);
-}
-
-void rtcIRQreenable (struct i2cjob_* job)
-{
- EXTINT |= (1<<2);
- VICIntEnable = INT_EINT2;
-}
-
-void rtcAckIRQ (struct i2cjob_* job)
-{
- if (timeInfo & SETNEWTIME) {
- rtcbuffer[1] = rtc.time.second;
- rtcbuffer[2] = rtc.time.minute;
- rtcbuffer[3] = rtc.time.hour;
- rtcbuffer[4] = rtc.date.day;
- rtcbuffer[5] = rtc.date.weekday;
- rtcbuffer[6] = rtc.date.month;
- rtcbuffer[7] = rtc.date.year;
- i2cintjob.len = 8;
- timeInfo &= ~SETNEWTIME;
- timeInfo |= TIME_ACCURATE; // doesn't mean it's accurate, just that it was set
- }
- else {
- rtc.time.second = job->buffer[1] & 0x7F;
- rtc.time.minute = job->buffer[2] & 0x7F;
- rtc.time.hour = job->buffer[3] & 0x3F;
- rtc.date.day = job->buffer[4] & 0x3F;
- rtc.date.weekday = job->buffer[5] & 0x07;
- rtc.date.month = job->buffer[6] & 0x1F;
- rtc.date.year = job->buffer[7];
- i2cintjob.len = 1;
- }
-
- if(job->buffer[0] & ALARM_FLAG)
- timeInfo |= ALARM_PENDING;
-
- timeInfo |= TIMECHANGED;
- T0overflow = 0;
-
- i2cintjob.byteaddr = RTCREG_CONTROL_STATUS_2;
- i2cintjob.buffer = rtcbuffer;
- i2cintjob.buffer[0] = 0x01 | (timeInfo & ALARM_ENABLED);
- i2cintjob.onfinish = rtcIRQreenable;
- i2cintjob.action = I2C_write;
- i2ccurrentjob = &i2cintjob;
- I2CONSET = STA;
-
-}
-
-void rtcIRQ (void)
-{
- EXTINT = (1<<2);
-
- i2cintjob.buffer = rtcbuffer;
- i2cintjob.onfinish = rtcAckIRQ;
- i2cintjob.len = 8;
- i2cintjob.byteaddr = RTCREG_CONTROL_STATUS_2;
- i2cintjob.action = I2C_read;
- i2ccurrentjob = &i2cintjob;
- I2CONSET = STA;
-
- if (!(PLLSTAT & (1<<8))) {
- if ((rtc.time.second & 0x0f) == 9)
- calcBat(0xff);
- if ((rtc.time.second & 0x0f) == 0)
- showBat(0xff);
- }
-
- VICSoftIntClr = INT_EINT2;
- VICIntEnClr = INT_EINT2;
-}
-
-void startRtcIRQ (void)
-{
- PINSEL0 |= (1<<31);
- EXTWAKE |= (1<<2);
- EXTINT |= (1<<2);
-
- VICVectAddr3 = (unsigned long)&(rtcIRQ);
- VICVectCntl3 = VIC_SLOT_EN | INT_SRC_EINT2;
- VICIntEnable = INT_EINT2;
-}
-
-void calcBCD (unsigned char* value, char a, char max, char min)
-{
- signed char x;
- unsigned char y;
-
- x = (((*value & 0xf0)>>4) * 10 + (*value & 0x0f)) + a;
- if (x > max)
- x -= (1 + max - min);
- if (x < min)
- x += (1 + max - min);
- y = x % 10;
- y |= ((x-y) / 10)<<4;
- *value = y;
-}
-
-unsigned char checkBCD (unsigned char value, char max, char min)
-{
- signed char x;
- unsigned char y;
-
- x = (((value & 0xf0)>>4) * 10 + (value & 0x0f));
- if (x > max)
- x = max;
- if (x < min)
- x = min;
- y = x % 10;
- y |= ((x-y) / 10)<<4;
- return(y);
-}
-
-void send_time (unsigned char dest, unsigned char wor)
-{
- struct RFendpoint_* cur_ep;
-
- cur_ep = openEP((unsigned char*)&rtc,0, packet_time);
- if (cur_ep)
- {
- cur_ep->dest = dest;
- cur_ep->bufferlen = 7;
-
- cur_ep->flags |= EPenabled | EPoutput | EPnewdata | EPonce;
- if(wor)
- cur_ep->flags |= EPsendwor;
- RF_changestate(RFtx);
- }
-}
-
-void ask_for_time (unsigned char dest)
-{
- struct RFendpoint_* cur_ep;
-
- cur_ep = openEP(0,0, packet_time);
- if(cur_ep)
- {
- cur_ep->dest = dest;
- cur_ep->data[0] = 0xFF;
- cur_ep->bufferlen = 1;
-
- cur_ep->flags |= EPenabled | EPoutput | EPnewdata | EPonce | EPsendwor;
-
- RF_changestate(RFtx);
- RF_timed_rx(400);
- }
-}
-
-void settime_click (FORM* form, CONTROL* control)
-{
- VICIntEnClr = INT_EINT2;
- rtc.date = ((DATEBOX*)(form->controls[0]))->date;
- rtc.time = ((TIMEBOX*)(form->controls[1]))->time;
- send_time(0,1);
- setTimeDate((struct time_ *)&rtc.time, (struct date_ *)&rtc.date);
- timeInfo |= TIME_ACCURATE;
- VICIntEnable = INT_EINT2;
-
- form->flags |= BC_Form_exit;
-}
-
-
-// Settings > Clock menu
-//
-void change_clock (void)
-{
- const LABEL label1 = {BC_Labelnotab,0,15,100,10,BOLDFONT,0,"Datum",0};
- DATEBOX datebox1 = {BC_Datebox,0,25,58,9,SMALLFONT,0,{0x00,0x00,0x00,0x00},NULL,NULL};
- const LABEL label2 = {BC_Labelnotab,0,37,100,10,BOLDFONT,0,"Uhrzeit",0};
- TIMEBOX timebox1 = {BC_Timebox,0,47,43,9,SMALLFONT,0,{0x00,0x00,0x00,0x00},NULL,NULL};
- const BUTTON button1 = {BC_Button,0,63,50,15,SMALLFONT,0,"Speichern",settime_click};
-
- timebox1.time = rtc.time;
- datebox1.date = rtc.date;
-
- CONTROL* controls[5] = { (CONTROL*)&datebox1,
- (CONTROL*)&timebox1,
- (CONTROL*)&label1,
- (CONTROL*)&label2,
- (CONTROL*)&button1};
-
- FORM form = {"Datum & Uhrzeit"," ",0,0,0,0,controls,0,5,0,0};
-
- form_exec(&form);
-}
-
-/* Globale zur Verfügung stehenden Variablen:
-//Variablen für die Zeit:
-u08 dayofweek = 1, day = 1, month = 1;
-u16 year = 2004;
-u08 isschaltjahr;
-*/
-
-unsigned char isschaltjahr(unsigned int year) {
-
- if ( (((year % 4) == 0) && ((year % 100) != 0)) || ((year % 400) == 0) )
- return 1;
- else
- return 0;
-}
-
-void calcweekday(struct date_* d) {
-
- unsigned int tagdesjahres;
- unsigned int jahrdiff;
- unsigned int tempwochentag;
- unsigned char day;
- unsigned char month;
- unsigned char year;
-
- day = (d->day >> 4)*10 + (d->day & 0x0f);
- month = (d->month >> 4)*10 + (d->month & 0x0f);
- year = 2000+(d->year >> 4)*10 + (d->year & 0x0f);
-
- tagdesjahres = 31*(month-1);
- if (month > 2) tagdesjahres = tagdesjahres -3 +isschaltjahr(year);
- if (month > 4) tagdesjahres--;
- if (month > 6) tagdesjahres--;
- if (month > 9) tagdesjahres--;
- if (month > 11) tagdesjahres--;
- tagdesjahres += day;
-
- jahrdiff = year -2000;
- tempwochentag = jahrdiff + (jahrdiff-1) / 4 - (jahrdiff-1) / 100 + (jahrdiff-1) / 400 + tagdesjahres;
- if (jahrdiff > 0)
- tempwochentag++;
- tempwochentag = (tempwochentag % 7)+3;
- if (tempwochentag > 6)
- tempwochentag -= 7;
- d->weekday = tempwochentag;
-}
diff --git a/boop/rtc/rtc.h b/boop/rtc/rtc.h
deleted file mode 100644
index 81a520e..0000000
--- a/boop/rtc/rtc.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- rtc.h -
- Copyright (C) 2008
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef RTC_H
-#define RTC_H
-
-#include "i2c.h"
-
-#define RTCslaveaddr 0xA2
-
-//PCF8563 registers
-#define RTCREG_CONTROL_STATUS_1 0x00
-#define RTCREG_CONTROL_STATUS_2 0x01
-#define RTCREG_SECOND 0x02
-#define RTCREG_MINUTES 0x03
-#define RTCREG_HOURS 0x04
-#define RTCREG_DAYS 0x05
-#define RTCREG_WEEKDAYS 0x06
-#define RTCREG_MONTHS_CENTURY 0x07
-#define RTCREG_YEARS 0x08
-#define RTCREG_MINUTE_ALARM 0x09
-#define RTCREG_HOUR_ALARM 0x0A
-#define RTCREG_DAY_ALARM 0x0B
-#define RTCREG_WEEKDAY_ALARM 0x0C
-#define RTCREG_CLKOUT_CONTROL 0x0D
-#define RTCREG_TIMER_CONTROL 0x0E
-#define RTCREG_TIMER 0x0F
-
-//RTCREG_CONTROL_STATUS_2
-#define TIMER_INT_EN (1<<0)
-#define ALARM_INT_EN (1<<1)
-#define TIMER_FLAG (1<<2)
-#define ALARM_FLAG (1<<3)
-
-struct time_
-{
- unsigned char second;
- unsigned char minute;
- unsigned char hour;
- unsigned char tag;
-};
-
-struct date_
-{
- unsigned char day;
- unsigned char weekday;
- unsigned char month;
- unsigned char year;
-};
-
-struct rtc_
-{
- struct date_ date;
- struct time_ time;
-};
-
-volatile struct rtc_ rtc;
-
-volatile unsigned char timeInfo;
-#define TIMECHANGED (1<<0)
-#define ALARM_ENABLED (1<<1)
-#define SETNEWTIME (1<<2)
-#define TIME_ACCURATE (1<<3)
-#define ALARM_PENDING (1<<3)
-
-
-struct i2cjob_ i2cintjob;
-unsigned char rtcbuffer[8];
-
-const unsigned char days[14];
-
-void initRTC(void);
-unsigned char getTimeDate(struct time_* t, struct date_ *d);
-void setTimeDate(struct time_* t, struct date_ *d);
-void printTime (unsigned char x, unsigned char y, struct time_* t, unsigned char format);
-void printDate(unsigned char x, unsigned char y, struct date_* d, unsigned char format);
-void rtcIRQ (void);
-void startRtcIRQ(void);
-void change_clock(void);
-void calcweekday(struct date_* d);
-
-/// Send the time via RF packet @see RF_PACKET_TIME to dest
-void send_time(unsigned char dest, unsigned char wor);
-
-/// Request to receive time via RF packet @see RF_PACKET_TIME from dest
-void ask_for_time(unsigned char dest);
-
-void calcBCD(unsigned char* value, char a, char max, char min);
-unsigned char checkBCD(unsigned char value, char max, char min);
-
-#endif
diff --git a/boop/rtc/rtctimer.c b/boop/rtc/rtctimer.c
deleted file mode 100644
index 1944f90..0000000
--- a/boop/rtc/rtctimer.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- rtctimer.c - real-time clock timer
- Copyright (C) 2010
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "lpc2220.h"
-#include "rtc.h"
-#include "lcd.h"
-#include "fonty.h"
-#include "keyboard.h"
-#include "global.h"
-#include "controls.h"
-#include "sid.h"
-
-void initRTCtimer (void) {
-
-}
-
-
-void RTCtimer_timer (FORM* form)
-{
- ((TIMEBOX*)(form->controls[0]))->time = rtc.time;
- control_draw(form->controls[0],0); //redraw timebox1
- if(timeInfo & ALARM_PENDING) {
- form->tag=9;
- timeInfo &= ~ALARM_PENDING;
- }
- if(form->tag) {
- if(form->tag & 0x01) beep(1);
- form->tag--;
- }
-}
-
-void RTCsave_click(FORM* form, CONTROL* control) {
- struct i2cjob_ job;
- unsigned char buffer[4];
-
- buffer[0] = ((TIMEBOX*)(form->controls[8]))->time.minute;
- buffer[1] = ((TIMEBOX*)(form->controls[8]))->time.hour | (1<<7);
- buffer[2] = (1<<7);
- buffer[3] = (1<<7);
-
- job.buffer = buffer;
- job.onfinish = 0;
- job.len = 4;
- job.byteaddr = RTCREG_MINUTE_ALARM;
- job.action = I2C_write;
- i2c_jobexec(&job);
-
- timeInfo |= ALARM_ENABLED;
-}
-
-void RTCtimer_edit(void) {
-
- const char* listbox1items[] = {"Alarm","Tastendruck","Makro","Funktion"};
- const char* listbox2items[] = {"Stunde","Tag","Monat"};
-
- TIMEBOX timebox1 = {BC_Timebox | BC_NoTabStop,85,151,43,8,SMALLFONT,0,{0x00,0x00,0x00,0x00},NULL,NULL};
- timebox1.time = rtc.time;
-
- const LABEL label1 = {BC_Labelnotab,0,20,70,9,BOLDFONT,0,"Timer",0};
- const LABEL label2 = {BC_Labelnotab,0,32,70,9,BOLDFONT,0,"Typ",0};
- const LABEL label3 = {BC_Labelnotab,0,44,70,9,BOLDFONT,0,"Wiederholung",0};
- const LABEL label4 = {BC_Labelnotab,0,56,70,9,BOLDFONT,0,"Alarmzeit",0};
-
- NUMBOX numbox1 = {BC_Numbox,76,20,20,9,SMALLFONT,1,1,1,NULL,NULL};
- LISTBOX listbox1 = {BC_Listbox,76,32,50,10,SMALLFONT,0,1,(char**)listbox1items,NULL,NULL};
- LISTBOX listbox2 = {BC_Listbox,76,44,50,10,SMALLFONT,0,1,(char**)listbox2items,NULL,NULL};
- TIMEBOX timebox2 = {BC_Timebox,76,56,43,8,SMALLFONT,0,{0x00,0x00,0x00,0x00},NULL,NULL};
-
- const BUTTON button1 = {BC_Button,0,80,60,15,SMALLFONT,0,"Speichern",RTCsave_click};
-
- CONTROL* controls[] = { (CONTROL*)&timebox1,
- (CONTROL*)&label1,
- (CONTROL*)&label2,
- (CONTROL*)&label3,
- (CONTROL*)&label4,
- (CONTROL*)&numbox1,
- (CONTROL*)&listbox1,
- (CONTROL*)&listbox2,
- (CONTROL*)&timebox2,
- (CONTROL*)&button1};
-
- timebox2.time = rtc.time;
-
- FORM form = {"Timer bearbeiten","",NULL,NULL,RTCtimer_timer,0,controls,0,NUM_OF_ELEMENTS(controls),0,200};
- form_exec(&form);
-
- timeInfo &= ~ALARM_ENABLED;
-}
diff --git a/boop/rtc/rtctimer.h b/boop/rtc/rtctimer.h
deleted file mode 100644
index 6bc0018..0000000
--- a/boop/rtc/rtctimer.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- rtctimer.h - real-time clock timer
- Copyright (C) 2010
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef RTCTIMER_H
-#define RTCTIMER_H
-
-struct RTCtimer_ {
- unsigned char flags;
- unsigned char minute;
- unsigned char hour;
- unsigned char day;
- unsigned char month;
- unsigned char repeat; //!< repeat alarm: Bit0=So...Bit6=Sa
- unsigned char arg[4]; //!< argument for timer execution
-};
-#endif
-
-//RTCtimer_ flags
-#define RTCTIMER_TYPEMASK 0x07
-#define RTCTIMER_ALARM 0x00
-#define RTCTIMER_KEY 0x01
-#define RTCTIMER_MACRO 0x02
-#define RTCTIMER_FUNCTION 0x03
-#define RTCTIMER_OBSOLETE (1<<6)
-#define RTCTIMER_SLOTFREE (1<<7)
-
-void RTCtimer_edit(void);
diff --git a/boop/serial/serial.c b/boop/serial.c
similarity index 70%
rename from boop/serial/serial.c
rename to boop/serial.c
index e67e5ef..9ceb8be 100644
--- a/boop/serial/serial.c
+++ b/boop/serial.c
@@ -36,25 +36,15 @@
*
*/
-
#include "lpc2220.h"
#include "serial.h"
-#include "irq.h"
-#include "backlight.h"
-#include "buffer.h"
-
-extern const char hval[16];
-
-extern void uart0_irq(void);
/* flush serial input queue. returns 0 on success or negative error
* number otherwise
*/
int serial_flush_input(void)
{
- volatile unsigned int tmp=0;
-
- (void)(tmp);
+ volatile unsigned int tmp;
/* keep on reading as long as the receiver is not empty */
while(RX_DATA(U0LSR)) {
@@ -82,96 +72,77 @@ void serial_setbrg (unsigned int baudrate)
{
/* get correct divisor */
- /*for PCLK 15 Mhz */
U0LCR = 0x83;
switch(baudrate) {
case 75:
- U0DLL = 5;
- U0DLM = 195;
- U0FDR = (1 << 4) + 3;
+ U0DLL = 161;
+ U0DLM = 1;
+ U0FDR = (1 << 4) + 14;
break;
case 150:
- U0DLL = 5;
- U0DLM = 195;
- U0FDR = (1 << 4) + 1;
+ U0DLL = 195;
+ U0DLM = 0;
+ U0FDR = (1 << 4) + 15;
break;
case 300:
- U0DLL = 5;
- U0DLM = 195;
- U0FDR = (1 << 4) + 0;
+ U0DLL = 184;
+ U0DLM = 0;
+ U0FDR = (2 << 4) + 15;
break;
case 600:
- U0DLL = 2;
- U0DLM = 78;
- U0FDR = (4 << 4) + 1;
+ U0DLL = 156;
+ U0DLM = 0;
+ U0FDR = (1 << 4) + 4;
break;
case 1200:
- U0DLL = 1;
- U0DLM = 39;
- U0FDR = (4 << 4) + 1;
+ U0DLL = 130;
+ U0DLM = 0;
+ U0FDR = (7 << 4) + 14;
break;
case 2400:
- U0DLL = 186;
+ U0DLL = 180;
U0DLM = 0;
- U0FDR = (10 << 4) + 11;
+ U0FDR = (12 << 4) + 1;
break;
case 4800:
- U0DLL = 93;
+ U0DLL = 90;
U0DLM = 0;
- U0FDR = (10 << 4) + 11;
+ U0FDR = (1 << 4) + 4;
break;
case 9600:
- U0DLL = 71;
+ U0DLL = 23;
U0DLM = 0;
- U0FDR = (8 << 4) + 3;
- break;
-
- case 14400:
- U0DLL = 31;
- U0DLM = 0;
- U0FDR = (10 << 4) + 11;
+ U0FDR = (8 << 4) + 9;
break;
case 19200:
- U0DLL = 38;
+ U0DLL = 11;
U0DLM = 0;
- U0FDR = (14 << 4) + 4;
- break;
-
- case 28800:
- U0DLL = 24;
- U0DLM = 0;
- U0FDR = (14 << 4) + 5;
+ U0FDR = (9 << 4) + 11;
break;
case 38400:
- U0DLL = 19;
+ U0DLL = 5;
U0DLM = 0;
- U0FDR = (14 << 4) + 4;
+ U0FDR = (9 << 4) + 13;
break;
case 57600:
- U0DLL = 12;
- U0DLM = 0;
- U0FDR = (14 << 4) + 5;
- break;
-
- case 115200:
U0DLL = 6;
U0DLM = 0;
U0FDR = (14 << 4) + 5;
break;
- case 230400:
+ case 115200:
U0DLL = 3;
U0DLM = 0;
U0FDR = (14 << 4) + 5;
@@ -192,17 +163,9 @@ void serial_setbrg (unsigned int baudrate)
int serial_init (void)
{
// PINSEL0=0x05; // pin select -> tx, rx
- serial_setbrg (DEFAULTBRG);
+ serial_setbrg (115200);
// serial_setbrg (57600);
U0FCR = 0x07; // enable fifo
- uart0_incbuffer = 0;
- uart0_outcbuffer = 0;
-
- // enable IRQ5 for UART0
- VICVectAddr5 = (unsigned long)&(uart0_irq);
- VICVectCntl5 = VIC_SLOT_EN | INT_SRC_UART0;
- VICIntEnable = INT_UART0;
- U0IER = IER_RBR | IER_RXLS;
return (0);
}
@@ -212,23 +175,12 @@ int serial_init (void)
*/
void serial_putc (const char c)
{
- // proper CRLF transmission
- if (c == '\n')
- serial_putc('\r');
-
/* wait for room in the transmit FIFO */
while(TX_READY(U0LSR)==0);
PUT_CHAR(U0THR,c);
}
-void serial_putbyte (const char c)
-{
- /* wait for room in the transmit FIFO */
- while(TX_READY(U0LSR)==0);
-
- PUT_CHAR(U0THR,c);
-}
/*
* Read a single byte from the serial port. Returns 1 on success, 0
* otherwise. When the function is succesfull, the character read is
@@ -264,6 +216,8 @@ serial_puts (const char *s)
}
}
+const char hval[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
+
void putHexC(const unsigned char v)
{
serial_putc(hval[v>>4]);
@@ -281,23 +235,3 @@ void putHexW(const unsigned long v)
putHexS(v >> 16);
putHexS(v & 0xFFFF);
}
-
-void serial_interactive(void) {
- int ch = serial_getc();
- switch (ch) {
- case '.':
- serial_puts("Betty Boop ("__DATE__ " " __TIME__ ")\n");
- break;
- case '0':
- setBacklight(0x00); // pwm value
- break;
- case '1':
- setBacklight(0x1F); // pwm value
- break;
- case '2':
- setBacklight(0x3F); // pwm value
- break;
- default:
- serial_putc(ch);
- }
-}
diff --git a/boop/serial/serial.h b/boop/serial.h
similarity index 81%
rename from boop/serial/serial.h
rename to boop/serial.h
index 292174f..95739b6 100644
--- a/boop/serial/serial.h
+++ b/boop/serial.h
@@ -21,32 +21,16 @@
#define USRRxData (1 << 0)
#define USRTxHoldEmpty (1 << 6)
-
-#define IER_RBR 1
-#define IER_THRE 2
-#define IER_RXLS 4
-
-#define IIR_RLS 0x06
-#define IIR_RDA 0x04
-#define IIR_CTI 0x0c
-#define IIR_THRE 0x02
-
#define GET_CHAR(p) p
#define PUT_CHAR(p,c) (p= (unsigned )(c))
#define TX_READY(s) ((s) & USRTxHoldEmpty)
#define RX_DATA(s) ((s) & USRRxData)
-#define DEFAULTBRG 115200
-
-struct cBuffer_* uart0_incbuffer;
-struct cBuffer_* uart0_outcbuffer;
-
int serial_flush_input(void);
int serial_flush_output(void);
void serial_setbrg (unsigned int baudrate);
int serial_init (void);
void serial_putc (const char c);
-void serial_putbyte (const char c);
int serial_tstc (void);
int serial_getc (void);
void serial_puts (const char *s);
@@ -55,6 +39,4 @@ void putHexC(const unsigned char v);
void putHexS(const unsigned short v);
void putHexW(const unsigned long v);
-void serial_interactive(void);
-
#endif /* BOOP_SERIAL_H */
diff --git a/boop/serial/Make.conf b/boop/serial/Make.conf
deleted file mode 100644
index e36a9e2..0000000
--- a/boop/serial/Make.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-THUMBSRCS := serial.c redirector.c
-SRCS := serirq.c
diff --git a/boop/serial/redirector.c b/boop/serial/redirector.c
deleted file mode 100644
index df263bd..0000000
--- a/boop/serial/redirector.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- redirector.h - serial port redirector
- Copyright (C) 2009 Telekatz
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "lpc2220.h"
-#include "redirector.h"
-#include "serial.h"
-#include "buffer.h"
-#include "global.h"
-#include "controls.h"
-#include "fonty.h"
-#include "rf.h"
-#include "timerfuncs.h"
-
-#define redirectorbuffersize 200
-
-extern unsigned int is_drawing;
-
-struct redirector_ {
- struct cBuffer_ incbuffer;
- struct cBuffer_ outcbuffer;
- struct RFendpoint_* dataout_ep;
- struct RFendpoint_* datain_ep;
- struct RFendpoint_* cmdout_ep;
- struct RFendpoint_* cmdin_ep;
- unsigned long lastlen;
- unsigned char timeoutcnt;
- unsigned char inbuffer[redirectorbuffersize];
- unsigned char outbuffer[redirectorbuffersize];
- unsigned char status;
-};
-
-const unsigned int listbrg[8] = { 1200,2400,4800,9600,14400,19200,28800,38400};
-
-void redirector_start(FORM* form, struct redirector_* redirectorvars) {
-
- redirectorvars->dataout_ep->dest = ((NUMBOX*)(form->controls[3]))->value;
- redirectorvars->lastlen = 0;
- redirectorvars->timeoutcnt = 0;
-
- cBufferFlush(&redirectorvars->incbuffer);
- cBufferFlush(&redirectorvars->outcbuffer);
- uart0_incbuffer = &redirectorvars->incbuffer;
- uart0_outcbuffer = &redirectorvars->outcbuffer;
-
- redirectorvars->dataout_ep->flags |= EPenabled;
- redirectorvars->datain_ep->flags |= EPenabled;
-
- U0FCR |= (1<<7); // trigger level 1
- serial_setbrg (listbrg[((LISTBOX*)(form->controls[2]))->listindex]);
- sysInfo |= SYS_NOPDOWN;
-
- form->controls[2]->type |= BC_NoTabStop;
- form->controls[3]->type |= BC_NoTabStop;
- form->controls[5]->type |= BC_Disabled;
- form->controls[6]->type &= ~BC_Disabled;
- form->sel = 6;
- form->flags |= BC_Form_redraw;
-
-}
-
-void redirector_start_click(FORM* form, CONTROL* control) {
-
- volatile unsigned long timeout;
-
- struct redirector_* redirectorvars;
- redirectorvars = (struct redirector_*)form->tag;
-
- RF_changestate(RFrx);
-
- redirectorvars->cmdout_ep->dest = ((NUMBOX*)(form->controls[3]))->value;
- redirectorvars->cmdout_ep->data[0] = redir_SET;
- redirectorvars->cmdout_ep->data[1] = ((LISTBOX*)(form->controls[2]))->listindex;
- redirectorvars->cmdout_ep->bufferlen = 2;
- redirectorvars->cmdout_ep->flags |= EPnewdata | EPsendwor;
- redirectorvars->cmdin_ep->flags &= ~EPnewdata;
-
- RF_changestate(RFtx);
-
- addTimeout(&timeout, 200);
- while(timeout && !(redirectorvars->cmdin_ep->flags & EPnewdata));
- removeTimeout(&timeout);
-
- if(!timeout) {
- msgbox(30,BC_OKOnly | BC_DefaultButton1,"Fehler:\nZiel antwortet nicht");
- form_draw(form);
- RF_changestate(RFwor);
- return;
- }
-
- redirectorvars->cmdout_ep->data[0] = redir_START;
- redirectorvars->cmdout_ep->bufferlen = 1;
- redirectorvars->cmdout_ep->flags |= EPnewdata;
- redirectorvars->cmdin_ep->flags &= ~EPnewdata;
-
- RF_changestate(RFtx);
-
- addTimeout(&timeout, 200);
- while(timeout && !(redirectorvars->cmdin_ep->flags & EPnewdata));
- removeTimeout(&timeout);
-
- if(!timeout) {
- msgbox(30,BC_OKOnly | BC_DefaultButton1,"Fehler:\nZiel antwortet nicht");
- form->flags |= BC_Form_redraw;
- RF_changestate(RFwor);
- return;
- }
-
- redirector_start(form, redirectorvars);
-
-}
-
-
-void redirector_stop_click(FORM* form, CONTROL* control) {
-
- struct redirector_* redirectorvars;
- redirectorvars = (struct redirector_*)form->tag;
-
- redirectorvars->cmdout_ep->dest = ((NUMBOX*)(form->controls[3]))->value;
- redirectorvars->cmdout_ep->data[0] = redir_STOP;
- redirectorvars->cmdout_ep->bufferlen = 1;
- redirectorvars->cmdout_ep->flags |= EPnewdata;
-
- RF_changestate(RFtx);
-
- redirectorvars->dataout_ep->flags &= ~EPenabled;
- redirectorvars->datain_ep->flags &= ~EPenabled;
-
- U0FCR &= ~((1<<6) | (1<<7)); // trigger level 0
- uart0_incbuffer = 0;
- uart0_outcbuffer = 0;
- serial_setbrg (DEFAULTBRG);
- sysInfo &= ~SYS_NOPDOWN;
- RF_changestate(RFwor);
-
- form->controls[2]->type &= ~BC_NoTabStop;
- form->controls[3]->type &= ~BC_NoTabStop;
- form->controls[5]->type &= ~BC_Disabled;
- form->controls[6]->type |= BC_Disabled;
- form->sel = 5;
- form->flags |= BC_Form_redraw;
-
-}
-
-#define sendcount 59
-void redirector_timer(FORM* form) {
- struct redirector_* redirectorvars;
- redirectorvars = (struct redirector_*)form->tag;
-
- //((NUMBOX*)(form->controls[4]))->value = redirectorvars->outcbuffer.len;
- //control_draw(form->controls[4],0);
-
- if(redirectorvars->incbuffer.len == redirectorvars->lastlen) {
- if(redirectorvars->timeoutcnt)
- redirectorvars->timeoutcnt--;
- }
- else {
- redirectorvars->timeoutcnt = 2;
- }
- redirectorvars->lastlen = redirectorvars->incbuffer.len;
-
-
- if(redirectorvars->dataout_ep && redirectorvars->incbuffer.len && !(redirectorvars->dataout_ep->flags & EPnewdata) &&
- ((redirectorvars->incbuffer.len >= sendcount) | !(redirectorvars->timeoutcnt))) {
-
- if(redirectorvars->incbuffer.len >= sendcount)
- redirectorvars->dataout_ep->bufferlen = sendcount;
- else
- redirectorvars->dataout_ep->bufferlen = redirectorvars->incbuffer.len;
-
- redirectorvars->dataout_ep->flags |= EPnewdata;
- RF_changestate(RFtx);
- }
-
- if(redirectorvars->outcbuffer.len) {
- if(!(U0IER & IER_THRE)) {
- U0IER |= IER_THRE;
- U0THR = cBufferGet(uart0_outcbuffer);
- (((NUMBOX*)(form->controls[4]))->value)++;
- control_draw(form->controls[4],0);
- }
- }
-
- if(redirectorvars->cmdin_ep->flags & EPnewdata) {
- unsigned char ACK = 0;
- switch (redirectorvars->cmdin_ep->data[0]) {
- case redir_ACK:
- break;
- case redir_SET:
- if (redirectorvars->cmdin_ep->bufferlen > 1) {
- if(redirectorvars->cmdin_ep->data[1] <= baud_38400) {
- ((LISTBOX*)(form->controls[2]))->listindex = redirectorvars->cmdin_ep->data[1];
- form->flags |= BC_Form_redraw;
- }
- ACK = 1;
- }
- break;
- case redir_START:
- ((NUMBOX*)(form->controls[3]))->value = redirectorvars->cmdin_ep->dest;
- form->flags |= BC_Form_redraw;
- /*redir_dest = RXframe->srcAddr;
- setbaud(redir_baud);
- redirector = 1;
- ACK = 1;*/
- break;
- case redir_STOP:
- /*redirector = 0;
- setbaud(baud_default);
- ACK = 1;*/
- break;
- case redir_PING:
- ACK = 1;
- break;
- }
-
- redirectorvars->cmdin_ep->flags &= ~EPnewdata;
-
- if(ACK) {
- redirectorvars->cmdout_ep->data[0] = redir_ACK;
- redirectorvars->cmdout_ep->dest = redirectorvars->cmdin_ep->dest;
- redirectorvars->cmdout_ep->bufferlen = 1;
- redirectorvars->cmdout_ep->flags |= EPnewdata;
- RF_changestate(RFtx);
- }
- }
-}
-
-
-void redirector_test(FORM* form, CONTROL* control) {
-
- if(uart0_incbuffer) {
- cBufferAdd(uart0_incbuffer,'a');
- cBufferAdd(uart0_incbuffer,'b');
- cBufferAdd(uart0_incbuffer,'c');
- }
-}
-
-
-// menu (Tool>Redirector)
-void uarto_redirector(void) {
-
- struct redirector_ redirectorvars;
-
- cBufferInit(&redirectorvars.incbuffer, redirectorvars.inbuffer, redirectorbuffersize);
- cBufferInit(&redirectorvars.outcbuffer, redirectorvars.outbuffer, redirectorbuffersize);
-
- const char* listbox1items[8] = {"1200","2400","4800","9600","14400","19200","28800","38400"};
-
- const LABEL label1 = {BC_Labelnotab,0,20,70,9,BOLDFONT,0,"Baud",0};
- const LABEL label2 = {BC_Labelnotab,0,32,70,9,BOLDFONT,0,"Zieladresse",0};
- LISTBOX listbox1 = {BC_Listbox,78,20,40,10,SMALLFONT,5,8,(char**)listbox1items,NULL,NULL};
- NUMBOX numbox1 = {BC_Numbox,78,32,20,9,SMALLFONT,1,0,255,NULL,NULL};
- NUMBOX numbox2 = {BC_Numbox | BC_NoTabStop,0,100,20,9,SMALLFONT,redirectorvars.outcbuffer.len,0,redirectorbuffersize,NULL,NULL};
- BUTTON button1 = {BC_Button,10,120,48,15,SMALLFONT,0,"Start",redirector_start_click};
- BUTTON button2 = {BC_Button | BC_Disabled,70,120,48,15,SMALLFONT,0,"Stop",redirector_stop_click};
- const BUTTON button3 = {BC_Button, 0,50,48,15,SMALLFONT,0,"test",redirector_test};
-
- CONTROL* controls[8] = { (CONTROL*)&label1,
- (CONTROL*)&label2,
- (CONTROL*)&listbox1,
- (CONTROL*)&numbox1,
- (CONTROL*)&numbox2,
- (CONTROL*)&button1,
- (CONTROL*)&button2,
- (CONTROL*)&button3};
-
- FORM form = {"Com redirector","",NULL,NULL,redirector_timer,(unsigned long)&redirectorvars,controls,2,8,0,2};
-
- redirectorvars.dataout_ep = openEP(&redirectorvars.incbuffer, 0, packet_redirDAT);
- redirectorvars.datain_ep = openEP(&redirectorvars.outcbuffer, 0, packet_redirDAT);
- redirectorvars.cmdout_ep = openEP(0, 0, packet_redirCMD);
- redirectorvars.cmdin_ep = openEP(0, 0, packet_redirCMD);
-
- if(redirectorvars.dataout_ep && redirectorvars.datain_ep && redirectorvars.cmdout_ep && redirectorvars.cmdin_ep) {
- redirectorvars.dataout_ep->flags |= EPoutput | EPtypecbuffer;
- redirectorvars.datain_ep->flags |= EPinput | EPtypecbuffer;
- redirectorvars.cmdout_ep->flags |= EPoutput | EPtypedata | EPenabled;
- redirectorvars.cmdin_ep->flags |= EPinput | EPtypedata | EPenabled;
- form_exec(&form);
- }
- else {
- msgbox(30,BC_OKOnly | BC_DefaultButton1,"Fehler:\nKein freier RF Endpoint\nverfuegbar.\n");
- }
-
- redirector_stop_click(&form,form.controls[6]);
-
- closeEP(redirectorvars.datain_ep);
- closeEP(redirectorvars.dataout_ep);
- closeEP(redirectorvars.cmdin_ep);
- closeEP(redirectorvars.cmdout_ep);
-
-}
diff --git a/boop/serial/redirector.h b/boop/serial/redirector.h
deleted file mode 100644
index 428fbe8..0000000
--- a/boop/serial/redirector.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- redirector.h - serial port redirector
- Copyright (C) 2009 Telekatz
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef REDIRECTOR_H
-#define REDIRECTOR_H
-
-#define redir_ACK 0
-#define redir_SET 1
-#define redir_START 2
-#define redir_STOP 3
-#define redir_PING 4
-
-#define baud_1200 0
-#define baud_2400 1
-#define baud_4800 2
-#define baud_9600 3
-#define baud_14400 4
-#define baud_19200 5
-#define baud_28800 6
-#define baud_38400 7
-#define baud_57600 8
-#define baud_115200 9
-
-void uarto_redirector(void);
-
-#endif
diff --git a/boop/serial/serirq.c b/boop/serial/serirq.c
deleted file mode 100644
index 8216acb..0000000
--- a/boop/serial/serirq.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- serirq.c - serial interrupr
- Copyright (C) 2009
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "backlight.h"
-#include "lpc2220.h"
-#include "serial.h"
-#include "buffer.h"
-
-//volatile int uart0_active = 0;
-
-void uart0_irq(void) {
- char st = U0IIR & 0x0f;
-
- // IRQ only valid when IIR_bit_0 == 0
- if (st & 1)
- return;
-
- switch (st) {
- case IIR_RLS: // Receive Line Status
- putHexW(U0LSR);
- serial_puts(" RLS?!\n");
-
- break;
- case IIR_RDA: // Receive Data Available
- case IIR_CTI: // Character Time-out indication
- if(uart0_incbuffer) {
- while(U0LSR & (1 << 0)) {
- cBufferAdd(uart0_incbuffer,U0RBR);
- }
- }
- else {
- setBacklight(BL_AUTO);
- serial_interactive();
- }
- break;
- case IIR_THRE:
- if(uart0_outcbuffer) {
- if(uart0_outcbuffer->len) {
- unsigned char x = 14;
- while(x-- && uart0_outcbuffer->len) {
- U0THR = cBufferGet(uart0_outcbuffer);
- }
- }
- else {
- U0IER &= ~IER_THRE;
- }
- }
- else {
- serial_puts("THRE?!\n");
- }
-
- }
-
-}
-
-
diff --git a/boop/sirc_codes.h b/boop/sirc_codes.h
new file mode 100644
index 0000000..83b1bac
--- /dev/null
+++ b/boop/sirc_codes.h
@@ -0,0 +1,7 @@
+#ifndef SIRC_CODES_H
+#define SIRC_CODES_H
+
+#include "./ir-codes/sirc/rm-pp411"
+#include "./ir-codes/sirc/tv"
+
+#endif
diff --git a/boop/soundcore.c b/boop/soundcore.c
new file mode 100644
index 0000000..89a9176
--- /dev/null
+++ b/boop/soundcore.c
@@ -0,0 +1,961 @@
+/*
+ soundcore.c - sound core routines (output, ipol, mixing, ...)
+ Copyright (C) 2007 Ch. Klippel
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#include "irq.h"
+#include "soundcore.h"
+#include "lpc2220.h"
+
+#define AUTO_OFF_TIME 0xf000
+
+static unsigned char bl_val, cmp_val;
+unsigned char out1;
+unsigned char timeout;
+static unsigned int auto_timeout;
+
+struct t_voice voices[MAXVOICES];
+
+//***************************************************************************
+
+typedef unsigned short uint16_t;
+typedef unsigned char uint8_t;
+typedef signed char int8_t;
+typedef signed short int16_t;
+typedef unsigned long uint32_t;
+
+
+#define FALSE 0
+#define TRUE 1
+
+// CPU clock 16MHz
+#define F_CPU 16000000
+
+#define FINT (F_CPU/512) // 512=256PWM steps / 0.5 step per PWM interrupt
+// FINT = 31250Hz @F_CPU16MHz
+
+#define FS (FINT/2)
+// FS = 15625Hz @F_CPU16MHz
+
+#define MAXTIME 6000
+#define OSCILLATORS 3
+
+struct IIR_filter* filter04_06;
+
+uint16_t freq_coefficient[OSCILLATORS];
+
+uint16_t mstimer=0;
+
+uint16_t noise;
+
+// SID registers
+
+struct Voice
+{
+ uint16_t Freq; // Frequency: FreqLo/FreqHi
+ uint16_t PW; // PulseWitdht: PW LO/HI only 12 bits used in SID
+ uint8_t ControlReg; // NOISE,RECTANGLE,SAWTOOTH,TRIANGLE,TEST,RINGMOD,SYNC,GATE
+ uint8_t AttackDecay; // bit0-3 decay, bit4-7 attack
+ uint8_t SustainRelease; // bit0-3 release, bit4-7 sustain
+};
+
+struct Blocks
+{
+ struct Voice voice1;
+ struct Voice voice2;
+ struct Voice voice3;
+ uint16_t FC; // not implemented
+ uint8_t RES_Filt; // partly implemented
+ uint8_t Mode_Vol; // partly implemented
+ uint8_t POTX; // not implemented
+ uint8_t POTY; // not implemented
+ uint8_t OSC3_Random;// not implemented
+ uint8_t ENV3; // not implemented
+};
+
+#define NUMREGISTERS 29
+
+union Soundprocessor
+{
+ struct Blocks block;
+ uint8_t sidregister[NUMREGISTERS];
+} Sid;
+
+// SID voice controll register bits
+#define GATE (1<<0)
+#define SYNC (1<<1) // not implemented
+#define RINGMOD (1<<2) // implemented
+#define TEST (1<<3) // not implemented
+#define TRIANGLE (1<<4)
+#define SAWTOOTH (1<<5)
+#define RECTANGLE (1<<6)
+#define NOISE (1<<7)
+
+// SID RES/FILT ( reg.23 )
+#define FILT1 (1<<0)
+#define FILT2 (1<<1)
+#define FILT3 (1<<2)
+// SID MODE/VOL ( reg.24 )
+#define VOICE3OFF (1<<7)
+
+// attack, decay, release envelope timings
+uint16_t AttackRate[16]={2,4,16,24,38,58,68,80,100,250,500,800,1000,3000,5000,8000};
+uint16_t DecayReleaseRate[16]={6,24,48,72,114,168,204,240,300,750,1500,2400,3000,9000,15000,24000};
+
+// oszillator waveform arrays
+int8_t wave0[256];
+int8_t wave1[256];
+int8_t wave2[256];
+
+// envelope arrays
+
+uint8_t envelope[OSCILLATORS];
+
+uint16_t m_attack[OSCILLATORS];
+uint16_t m_decay[OSCILLATORS];
+uint16_t m_release[OSCILLATORS];
+
+uint8_t release_flag[OSCILLATORS];
+uint8_t attackdecay_flag[OSCILLATORS];
+
+
+int16_t level_sustain[OSCILLATORS];
+//int test[9];
+//struct IIR_filter filter04_06;
+// = {0,0,0,0, B0, B1, B2, A1, A2}; //initialize filter with 0.4 cutoff frequency
+
+//uint16_t t_attack[OSCILLATORS];
+//uint16_t t_decay[OSCILLATORS];
+//uint16_t t_release[OSCILLATORS];
+
+/************************************************************************
+
+ interrupt routine
+
+ - calculate waverform phases
+ - calculate waveforms
+ - set PWM output
+ - increase system timer
+
+************************************************************************/
+uint8_t get_wavenum(struct Voice *voice)
+{
+ uint8_t n;
+
+ if(voice==&Sid.block.voice1) n=0;
+ if(voice==&Sid.block.voice2) n=1;
+ if(voice==&Sid.block.voice3) n=2;
+
+ return n;
+}
+
+void setfreq(struct Voice *voice,uint16_t freq)
+{
+ uint32_t templong;
+ uint8_t n;
+
+ n=get_wavenum(voice);
+
+ templong=freq;
+ freq_coefficient[n]=templong*65536/FS;
+}
+
+void init_waveform(struct Voice *voice)
+{
+ uint16_t n;
+ int16_t val;
+ uint8_t wavetype;
+ int8_t *wave_array;
+
+ wavetype=voice->ControlReg;
+
+ n=get_wavenum(voice);
+
+ if(n==0) wave_array=wave0;
+ if(n==1) wave_array=wave1;
+ if(n==2) wave_array=wave2;
+
+ val=-128;
+
+ for(n=0;n<256;n++)
+ {
+ *wave_array=0xFF;
+
+ if(wavetype&SAWTOOTH)
+ {
+ *wave_array&=val;
+ }
+
+ if(wavetype&TRIANGLE)
+ {
+ if(n&0x80) *wave_array&=((n^0xFF)<<1)-128;
+ else *wave_array&=(n<<1)-128;
+ }
+
+ if(wavetype&RECTANGLE)
+ {
+ if(n>(voice->PW >> 4)) // SID has 12Bit pwm, here we use only 8Bit
+ {
+ *wave_array&=127;
+ }
+ else *wave_array&=-127;
+ }
+
+ // if(wavetype&NOISE) *wave_array&=zufall();
+ // noise has to be online calculated
+
+ val++;
+ wave_array++;
+ }
+}
+//#define MAXLEVEL ( 0xFFFF / OSCILLATORS )
+#define MAXLEVEL 19000
+#define SUSTAINFAKTOR ( MAXLEVEL / 15 )
+
+void setenvelope(struct Voice *voice)
+{
+ uint8_t n;
+
+ n=get_wavenum(voice);
+ attackdecay_flag[n]=TRUE;
+
+// t_attack[n]=AttackRate[voice->AttackDecay>>4];
+// t_decay[n]=DecayReleaseRate[voice->AttackDecay&0x0F];
+// t_release[n]=DecayReleaseRate[voice->SustainRelease&0x0F];
+ level_sustain[n]=(voice->SustainRelease>>4)*SUSTAINFAKTOR;
+
+// m_attack[n]=MAXLEVEL/t_attack[n];
+ m_attack[n]=MAXLEVEL/AttackRate[voice->AttackDecay>>4];
+// m_decay[n]=(MAXLEVEL-level_sustain[n]*SUSTAINFAKTOR)/t_decay[n];
+ m_decay[n]=(MAXLEVEL-level_sustain[n]*SUSTAINFAKTOR)/DecayReleaseRate[voice->AttackDecay&0x0F];
+
+// m_release[n]=(level_sustain[n]*SUSTAINFAKTOR)/t_release[n];
+ m_release[n]=(level_sustain[n])/DecayReleaseRate[voice->SustainRelease&0x0F];
+}
+/************************************************************************
+
+ uint8_t set_sidregister(uint8_t regnum, uint8_t value)
+
+ The registers of the virtual SID are set by this routine.
+ For some registers it is necessary to transform the SID-register
+ values to some internal settings of the emulator.
+ To select this registers and to start the calculation, the switch/
+ case statement is used.
+ For instance: If setting the SID status register, new waveforms in
+ the waveform array are calculated.
+
+ 4.2007 ch
+
+************************************************************************/
+uint8_t set_sidregister(uint8_t regnum, uint8_t value)
+{
+ //uint16_t temp;
+ uint8_t regnum1;
+
+ regnum1=regnum;
+
+ if (regnum > 13) regnum++;
+ if (regnum > 6 ) regnum++;
+
+ if(regnum>NUMREGISTERS-1) return 1;
+ Sid.sidregister[regnum]=value;
+
+ switch(regnum1)
+ {
+ //voice1
+ case 1:
+ {
+ //temp=(Sid.sidregister[0]+(Sid.sidregister[1]<<8))/17;
+ //setfreq(&Sid.block.voice1,temp);
+
+ freq_coefficient[0]=(Sid.sidregister[0]+(Sid.sidregister[1]<<8))/4;
+
+ }break;
+ case 3: init_waveform(&Sid.block.voice1);break;
+ case 4: init_waveform(&Sid.block.voice1);break;
+ case 5: setenvelope(&Sid.block.voice1);break;
+ case 6: setenvelope(&Sid.block.voice1);break;
+
+ //voice2
+ case 8:
+ {
+ //temp=(Sid.sidregister[7]+(Sid.sidregister[8]<<8))/17;
+ //setfreq(&Sid.block.voice2,temp);
+ freq_coefficient[1]=(Sid.sidregister[7]+(Sid.sidregister[8]<<8))/4;
+ }break;
+ case 10: init_waveform(&Sid.block.voice2);break;
+ case 11: init_waveform(&Sid.block.voice2);break;
+ case 12: setenvelope(&Sid.block.voice2);break;
+ case 13: setenvelope(&Sid.block.voice2);break;
+
+ //voice3
+ case 15:
+ {
+ //temp=(Sid.sidregister[14]+(Sid.sidregister[15]<<8))/17;
+ //setfreq(&Sid.block.voice3,temp);
+ freq_coefficient[2]=(Sid.sidregister[14]+(Sid.sidregister[15]<<8))/4;
+ }break;
+ case 17: init_waveform(&Sid.block.voice3);break;
+ case 18: init_waveform(&Sid.block.voice3);break;
+ case 19: setenvelope(&Sid.block.voice3);break;
+ case 20: setenvelope(&Sid.block.voice3);break;
+ }
+ return 0;
+}
+
+
+void startPWMIRQ(void)
+{
+ timeout = 0;
+ auto_timeout = 0;
+ out1 = 0;
+
+ PWMTC = 0;
+// PWMPR = 0;
+ PWMPR = 0;
+ PWMMR0 = 0x1FF; // pwm rate
+ PWMMR2 = 0x00; // pwm value
+ PWMLER = 0x05;
+ PWMMCR = 0x03;
+ PWMPCR = (1<<10);
+ PWMTCR = 0x03;
+ PWMTCR = 0x09;
+
+ VICVectAddr0 = (unsigned long)&(soundIRQ);
+ VICVectCntl0 = VIC_SLOT_EN | INT_SRC_PWM;
+ //VICIntSelect |= INT_PWM;
+ VICIntEnable = INT_PWM;
+
+}
+
+
+void setBL(unsigned char level)
+{
+ bl_val = level;
+}
+
+unsigned char getBL(void)
+{
+ return bl_val;
+}
+
+
+
+void __attribute__ ((interrupt("IRQ"))) soundIRQ (void)
+{
+
+ PWMIR = 0x01;
+
+ static uint16_t phase0,phase1,phase2;
+ static int16_t temp,temp1;
+ static uint8_t k,flag=0;
+ static uint8_t timer;
+ static uint16_t noise8;
+ static uint16_t sig0,sig1,sig2;
+ static uint16_t tempphase;
+
+
+
+ //DEBUGPIN_ON; // Pin to measure processing time
+
+ flag^=1;
+ if(flag)
+ {
+ //DEBUGPIN_ON; // Pin to measure processing time
+ // Voice1
+ tempphase=phase0+freq_coefficient[0]; //0.88us
+ if(Sid.block.voice1.ControlReg&NOISE)
+ {
+ if((tempphase^phase0)&0x4000) sig0=noise8*envelope[0];
+ }
+ else
+ {
+ if(Sid.block.voice1.ControlReg&RINGMOD)
+ {
+ if(phase2&0x8000) sig0=envelope[0]*-wave0[phase0>>8];
+ else sig0=envelope[0]*wave0[phase0>>8];
+ }
+ else sig0=envelope[0]*wave0[phase0>>8]; //2.07us
+ }
+ phase0=tempphase;
+
+ // Voice2
+ tempphase=phase1+freq_coefficient[1]; //0.88us
+ if(Sid.block.voice2.ControlReg&NOISE)
+ {
+ if((tempphase^phase1)&0x4000) sig1=noise8*envelope[1];
+ }
+ else
+ {
+ if(Sid.block.voice2.ControlReg&RINGMOD)
+ {
+ if(phase0&0x8000) sig1=envelope[1]*-wave1[phase1>>8];
+ else sig1=envelope[1]*wave1[phase1>>8];
+ }
+ else sig1=0xff*wave1[phase1>>8]; //2.07us
+ }
+ phase1=tempphase;
+
+ // Voice3
+ tempphase=phase2+freq_coefficient[2]; //0.88us
+ if(Sid.block.voice3.ControlReg&NOISE)
+ {
+ if((tempphase^phase2)&0x4000) sig2=noise8*envelope[2];
+ }
+ else
+ {
+ if(Sid.block.voice3.ControlReg&RINGMOD)
+ {
+ if(phase1&0x8000) sig2=envelope[2]*-wave2[phase2>>8];
+ else sig2=envelope[2]*wave2[phase2>>8];
+ }
+ else sig2=envelope[2]*wave2[phase2>>8]; //2.07us
+ }
+ phase2=tempphase;
+ }
+ else
+ {
+
+ // temp=sig0+sig1+sig2;
+
+ // voice filter selection
+ temp=0; // direct output variable
+ temp1=0; // filter output variable
+ if(Sid.block.RES_Filt&FILT1) temp1+=sig0;
+ else temp+=sig0;
+ if(Sid.block.RES_Filt&FILT2) temp1+=sig1;
+ else temp+=sig1;
+ if(Sid.block.RES_Filt&FILT3) temp1+=sig2;
+ else if(!(Sid.block.Mode_Vol&VOICE3OFF))temp+=sig2; // voice 3 with specal turn off bit
+
+ //filterOutput = IIR2((struct IIR_filter*)&filter04_06, filterInput);
+ //IIR2(filter04_06, temp1);
+ k=(temp>>8)+128;
+ k+=temp1>>10; // not real filter implemeted yet
+
+ //OCR1A=k; // Output to PWM
+ PWMMR2 = k;
+ PWMLER = 0x04;
+
+ //DEBUGPIN_ON; // Pin to measure processing time
+
+ // noise generator
+ for(k=1;k<2;k++)
+ {
+ temp1 = noise;
+ noise=noise << 1;
+
+ temp1 ^= noise;
+ if ( ( temp1 & 0x4000 ) == 0x4000 )
+ {
+ noise |= 1;
+ }
+ }
+ noise8=noise>>6;
+#ifdef NOISEOFF
+ noise8=0;
+#endif
+ }
+
+ timer--;
+ if(timer==0)
+ {
+ mstimer++; // increase millisecond timer
+ // mstimerrate=0.992 milli seconds @FCPU16MHz
+ timer=31;
+ }
+
+
+ VICVectAddr = 0;
+}
+
+
+
+// SID Registers
+#define VOICE1 0
+#define VOICE2 7
+#define VOICE3 14
+#define CONTROLREG 4
+#define ATTACKDECAY 5
+#define SUSTAINRELEASE 6
+
+// SID Control Register Bits
+#define GATE (1<<0)
+#define GATEOFF 0
+#define SYNC (1<<1) // not implemented
+#define RINGMOD (1<<2)
+#define TEST (1<<3) // not implemented
+#define TRIANGLE (1<<4)
+#define SAWTOOTH (1<<5)
+#define RECTANGLE (1<<6)
+#define NOISE (1<<7)
+
+// notes VOICE1
+#define C1_1 1+VOICE1,0x02,0+VOICE1,0x25,
+#define C2_1 1+VOICE1,0x04,0+VOICE1,0x49,
+#define C3_1 1+VOICE1,0x08,0+VOICE1,0x93,
+#define C4_1 1,0x11,0,0x25,
+#define D4_1 1,0x13,0,0x3F,
+#define E4_1 1,0x15,0,0x9A,
+#define F4_1 1,0x16,0,0xE3,
+#define G4_1 1,0x19,0,0x81,
+#define A4_1 1,0x1C,0,0xC6,
+#define B4_1 1,0x20,0,0x5E,
+#define C5_1 1,0x22,0,0x4B,
+
+// notes VOICE3
+#define C2_2 1+VOICE2,0x04,0+VOICE2,0x49,
+#define C4_2 1+VOICE2,0x11,0+VOICE2,0x25,
+#define D4_2 1+VOICE2,0x13,0+VOICE2,0x3F,
+#define E4_2 1+VOICE2,0x15,0+VOICE2,0x9A,
+
+// notes VOICE3
+#define C2_3 1+VOICE3,0x04,0+VOICE3,0x49,
+#define C4_3 1+VOICE3,0x11,0+VOICE3,0x25,
+#define D4_3 1+VOICE3,0x13,0+VOICE3,0x3F,
+#define E4_3 1+VOICE3,0x15,0+VOICE3,0x9A,
+#define F4_3 1+VOICE3,0x16,0+VOICE3,0xE3,
+#define G4_3 1+VOICE3,0x19,0+VOICE3,0x81,
+#define A4_3 1+VOICE3,0x1C,0+VOICE3,0xC6,
+#define B4_3 1+VOICE3,0x20,0+VOICE3,0x5E,
+#define C5_3 1+VOICE3,0x22,0+VOICE3,0x4B,
+
+// waveforms
+#define SETNOISE_1 4,0x81,5,0xBB,6,0xAD,
+#define SETNOISE_2 11,0x81,12,0xBB,13,0xAD,
+#define SETNOISE_3 18,0x81,19,0xBB,20,0xAD,
+#define SETTRIANGLE_1 4,0x11,5,0xBB,6,0xAA,
+#define SETTRIANGLE_2 4+VOICE2,0x11,5+VOICE2,0xBB,6+VOICE2,0xAA,
+#define SETTRIANGLE_3 4+VOICE3,0x11,5+VOICE3,0xBB,6+VOICE3,0xAA,
+#define SETRECTANGLE_1 VOICE1+CONTROLREG,RECTANGLE+GATE,5+VOICE1,0xBB,6+VOICE1,0xAA,
+
+#define SLOWATTACK 0xB0
+#define FASTATTACK 0x00
+#define SLOWDECAY 0x0A
+#define FASTDECAY 0x00
+#define SUSTAINQUITE 0x00
+#define SUSTAINNORM 0xA0
+#define SUSTAINLOUD 0xF0
+#define SLOWRELEASE 0x09
+#define FASTRELEASE 0x00
+
+
+// pause controll, no SID registers, values will be interpreted by the EMULATOR
+#define QUARTER 0xF0,0x00,0xF1,0x01, // pause quarter tone
+#define HALF 0xF0,0x00,0xF1,0x02, // pause half tone
+#define ONESEC 0xF0,0x00,0xF1,0x04, // pause 2 seconds
+#define TWOSEC 0xF0,0x00,0xF1,0x08, // pause 2 seconds
+#define FIVESEC 0xF0,0x00,0xF1,40, // pause 2 seconds
+#define STOP 0xFF,0xFF, // stops sound generation
+
+/****************************************************************************
+
+ static uint8_t sound[]
+
+ Sound Data Array
+
+ The main programm parses the sound data array.
+ It reads the register address and data from the array
+ and writes it to the "virtual SID registers".
+ 0xF0,0xF1 and 0xFF are no SID registers and interpreted as
+ controll code for the parser. F0+256*F1 gives the value in milliseconds
+ to pause parsing and let the SID playing it's sound.
+ After the pause the next register values are read and written to the SID.
+ At the end of the array ther should be the values 0xFF,0xFF which stop
+ the parser and stop sound generation.
+
+ syntax:
+
+static uint8_t sound[] PROGMEM ={
+ sidregister,value,
+ sidregister,value,
+ ....
+ 0xF0,pauselowvalue,
+ 0xF1,pausehighvalue,
+ ....
+ sidregister,value,
+ sidregister,value,
+ 0xF0,pauselowvalue,
+ 0xF1,pausehighvalue,
+ 0xFF,0xFF // stop command, turn sound off
+};
+
+ April 2007 (c) Christoph Haberer, christoph(at)roboterclub-freiburg.de
+
+****************************************************************************/
+static uint8_t sound[] = {
+
+/*************************************************************
+ attack,decay,sustain,release example
+*************************************************************/
+
+
+ SETTRIANGLE_1 // set triangle waveform
+
+ ATTACKDECAY+VOICE1,SLOWATTACK+SLOWDECAY,
+ SUSTAINRELEASE+VOICE1,SUSTAINNORM+SLOWRELEASE,
+
+
+ //ATTACKDECAY+VOICE1,0xAA,
+ //SUSTAINRELEASE+VOICE1,0x1A,
+
+ //ATTACKDECAY+VOICE1,FASTATTACK+5,
+ //ATTACKDECAY+VOICE1,0xA,
+ //SUSTAINRELEASE+VOICE1,0x8A,
+ //SUSTAINRELEASE+VOICE1,SUSTAINQUITE+FASTRELEASE,
+
+ C4_1 // note C4 one channel1 ( voice1 )
+ TWOSEC // wait 2 seconds
+ //FIVESEC
+
+ VOICE1+CONTROLREG,TRIANGLE+GATEOFF, // gate off to start release cycle
+
+ TWOSEC // wait 2 seconds
+
+ //STOP
+
+/*************************************************************
+ tone latter
+*************************************************************/
+
+ SETTRIANGLE_1
+ C4_1
+ HALF
+ D4_1
+ HALF
+ E4_1
+ HALF
+ F4_1
+ HALF
+ G4_1
+ HALF
+ A4_1
+ HALF
+ B4_1
+ HALF
+ C5_1
+ HALF
+
+ TWOSEC
+
+/*************************************************************
+ 3 tone example
+*************************************************************/
+
+ SETTRIANGLE_1
+ C4_1
+ HALF
+ SETTRIANGLE_2
+ E4_2
+ HALF
+ SETTRIANGLE_3
+ G4_3
+ HALF
+
+ TWOSEC
+
+ // start release cycle
+ VOICE1+CONTROLREG,TRIANGLE+GATEOFF,
+ VOICE2+CONTROLREG,TRIANGLE+GATEOFF,
+ VOICE3+CONTROLREG,TRIANGLE+GATEOFF,
+
+ TWOSEC
+ TWOSEC
+
+/*************************************************************
+ PWM example
+*************************************************************/
+
+ SETRECTANGLE_1
+ C4_1
+
+ 2,0x00, // set PWM value
+ 3,0x04, // set PWM value
+ ONESEC
+
+ 2,0x00, // set PWM value
+ 3,0x06, // set PWM value
+ ONESEC
+
+ 2,0x00, // set PWM value
+ 3,0x08, // set PWM value
+ TWOSEC
+
+/*************************************************************
+ ring modulation example
+*************************************************************/
+
+ SETTRIANGLE_1
+ F4_1
+
+ 6,0x8B, // sustain/release
+
+ SETTRIANGLE_3
+ C4_3
+ 6+VOICE3,0x08, // sustain/release
+
+ VOICE1+CONTROLREG,0x14, // set ringmod, gate off for decay
+ VOICE3+CONTROLREG,0x00, // gate off
+
+ TWOSEC
+ TWOSEC
+
+/*************************************************************
+ noise example
+*************************************************************/
+
+ // shotnoise
+ 1,0x40,
+ 0,0x00,
+ SETNOISE_1
+ ATTACKDECAY+VOICE1,FASTATTACK+5,
+ SUSTAINRELEASE+VOICE1,SUSTAINQUITE+FASTRELEASE,
+ QUARTER
+
+ // shotnoise
+ 1,0x40,
+ 0,0x00,
+ SETNOISE_1
+ ATTACKDECAY+VOICE1,FASTATTACK+5,
+ SUSTAINRELEASE+VOICE1,SUSTAINQUITE+FASTRELEASE,
+ QUARTER
+
+ // shotnoise
+ 1,0x40,
+ 0,0x00,
+ SETNOISE_1
+ ATTACKDECAY+VOICE1,FASTATTACK+5,
+ SUSTAINRELEASE+VOICE1,SUSTAINQUITE+FASTRELEASE,
+ QUARTER
+
+ VOICE1+CONTROLREG,NOISE+GATEOFF,
+
+ TWOSEC
+
+ // light noise
+ SETNOISE_1
+ 1,0x40,
+ 0,0x00,
+
+ ATTACKDECAY+VOICE1,SLOWATTACK+SLOWDECAY,
+ SUSTAINRELEASE+VOICE1,SUSTAINNORM+0x0B,
+ TWOSEC
+
+ VOICE1+CONTROLREG,NOISE+GATEOFF,
+ TWOSEC
+
+ // dark noise
+ SETNOISE_1
+ 1,0x05,
+ 0,0x00,
+ TWOSEC
+
+/*************************************************************
+ 3 tone example
+*************************************************************/
+
+ SETTRIANGLE_1
+ C4_1
+ HALF
+ SETTRIANGLE_2
+ E4_2
+ HALF
+ SETTRIANGLE_3
+ G4_3
+ HALF
+
+ TWOSEC
+
+ // start release cycle
+ VOICE1+CONTROLREG,TRIANGLE+GATEOFF,
+ VOICE2+CONTROLREG,TRIANGLE+GATEOFF,
+ VOICE3+CONTROLREG,TRIANGLE+GATEOFF,
+
+ TWOSEC
+ TWOSEC
+
+
+/*************************************************************
+ 3 tone gong
+*************************************************************/
+/*
+ SETTRIANGLE_1
+ ATTACKDECAY+VOICE1,FASTATTACK+SLOWDECAY,
+ SUSTAINRELEASE+VOICE1,1+SLOWRELEASE,
+ C4_1
+ HALF
+
+ SETTRIANGLE_2
+ ATTACKDECAY+VOICE2,FASTATTACK+SLOWDECAY,
+ SUSTAINRELEASE+VOICE2,1+SLOWRELEASE,
+ D4_2
+ HALF
+
+ SETTRIANGLE_3
+ ATTACKDECAY+VOICE3,FASTATTACK+SLOWDECAY,
+ SUSTAINRELEASE+VOICE3,1+SLOWRELEASE,
+ E4_3
+ HALF
+
+ TWOSEC
+
+ // start release cycle
+ VOICE1+CONTROLREG,TRIANGLE+GATEOFF,
+ VOICE2+CONTROLREG,TRIANGLE+GATEOFF,
+ VOICE3+CONTROLREG,TRIANGLE+GATEOFF,
+*/
+/*************************************************************/
+ STOP
+ };
+
+
+void playSID(void) {
+
+ int16_t amp[OSCILLATORS];
+ uint16_t schedule_timer,temp;
+ uint8_t n,flag;
+ uint8_t controll_regadr[3];
+ uint16_t soundindex;
+
+ soundindex = 0;
+ schedule_timer=0;
+ noise = 0xaa;
+
+ controll_regadr[0] = 4;
+ controll_regadr[1] = 12;
+ controll_regadr[2] = 20;
+
+// struct Voice voice;
+
+ attackdecay_flag[0]=TRUE;
+ attackdecay_flag[1]=TRUE;
+ attackdecay_flag[2]=TRUE;
+
+ //initialize SID-registers
+
+ Sid.sidregister[6]=0xF0;
+ Sid.sidregister[14]=0xF0;
+ Sid.sidregister[22]=0xF0;
+ setenvelope(&Sid.block.voice1);
+ setenvelope(&Sid.block.voice2);
+ setenvelope(&Sid.block.voice3);
+
+ // set all amplitudes to zero
+ for(n=0;nMAXLEVEL)
+ {
+ amp[n]=MAXLEVEL;
+ attackdecay_flag[n]=FALSE; // if level reached, then switch to decay
+ }
+ }
+ else // decay cycle
+ {
+ if(amp[n]>level_sustain[n])
+ {
+ amp[n]-=m_decay[n];
+ if(amp[n]0)
+ {
+ amp[n]-=m_release[n];
+ if(amp[n]<0) amp[n]=0;
+ }
+ }
+ envelope[n]=amp[n]>>8;
+ }
+ //DEBUGPIN_OFF; // Pin to measure processing time
+
+ //DEBUGPIN_ON; // Pin to measure processing time
+ if(schedule_timer==0)
+ {
+// schedule_timer=MAXTIME;
+
+ flag=TRUE;
+ while(flag)
+ {
+ n=sound[soundindex];
+ soundindex++;
+
+ if(n
This program is free software: you can redistribute it and/or modify
@@ -16,23 +16,48 @@
along with this program. If not, see .
*/
-#ifndef SOUND_H
-#define SOUND_H
+#ifndef SOUNDCORE_H
+#define SOUNDCORE_H
#define SOUND_OFF 0x00
#define SOUND_ON 0x01
-//IO PINS on P0
-#define SND_ON 6
-#define SND_EN 11
-#define SND_PWM 7
+#define MODE_STOP 0x01
+#define MODE_START 0x02
+#define MODE_ONESHOT 0x04
+#define MODE_LOOP 0x08
+#define MODE_SAMPLE 0x10
+#define MODE_SYNTH 0x20
+#define MODE_FREE 0x40
-void startSoundIRQ(void);
+#define MAXVOICES 16
+typedef void(*callback_fn)(void *voice);
+
+struct t_voice
+{
+ callback_fn callback;
+ unsigned char *buffer;
+ unsigned char mode;
+ unsigned int len;
+ unsigned int pos;
+ short speed;
+};
+
+extern unsigned char timeout;
+
+void startPWMIRQ(void);
+void __attribute__ ((interrupt("IRQ"))) soundIRQ (void);
+
+void setBL(unsigned char level);
+unsigned char getBL(void);
void initSound(void);
void switchSound(unsigned char onoff);
void playSound(unsigned char *sound, unsigned long len);
void stopSound(void);
void waitSound(void);
+void initVoices(void);
+
+void playSID(void);
#endif
diff --git a/boop/audio/sounds.h b/boop/sounds.h
similarity index 100%
rename from boop/audio/sounds.h
rename to boop/sounds.h
diff --git a/boop/spaceenc_codes.h b/boop/spaceenc_codes.h
new file mode 100644
index 0000000..501d6f4
--- /dev/null
+++ b/boop/spaceenc_codes.h
@@ -0,0 +1,8 @@
+#ifndef SPACEENC_CODES_H
+#define SPACEENC_CODES_H
+
+#include "ir-codes/spaceenc/seleco_027"
+#include "ir-codes/spaceenc/schneider_dtv3"
+
+#endif
+
diff --git a/boop/syscalls.c b/boop/syscalls.c
deleted file mode 100644
index eea9557..0000000
--- a/boop/syscalls.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* based on a example-code from Keil for CS G++ */
-
-/* for caddr_t (typedef char * caddr_t;) */
-#include
-
-extern int _bss_end;
-
-caddr_t _sbrk ( int incr )
-{
- static unsigned char *heap = NULL;
- unsigned char *prev_heap;
-
- if (heap == NULL) {
- heap = (unsigned char *)&_bss_end;
- }
- prev_heap = heap;
- /* check removed to show basic approach */
-
- heap += incr;
-
- return (caddr_t) prev_heap;
-}
diff --git a/boop/timer/Make.conf b/boop/timer/Make.conf
deleted file mode 100644
index 6a23f8a..0000000
--- a/boop/timer/Make.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-THUMBSRCS := timerfuncs.c
-SRCS := timerirq.c
diff --git a/boop/timer/timerfuncs.c b/boop/timer/timerfuncs.c
deleted file mode 100644
index 7467050..0000000
--- a/boop/timer/timerfuncs.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- timerfuncs.c - timer control functions
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "lpc2220.h"
-#include "timerfuncs.h"
-#include "irq.h"
-#include "keyboard.h"
-
-extern struct CB callbacks[MAX_CB];
-extern unsigned long* timeouts[MAX_TO];
-
-void startTimerIRQ(void)
-{
- int i;
- struct CB *cur_cb;
-
- for(i=0; istate = SLOT_FREE;
- cur_cb->exec = 0;
- }
-
- for(i=0; i PR = 15 - 1 = 0x0e
- T0MR0 = 250; // 1.000.000 Hz / 250 = 4000 Hz = 0,25msec intervall time
- T0MCR = 0x03; // reset and issue IRQ on TC == MR0
- T0TCR = 0x01; // enable timer
-
- T0overflow = 0;
-
- VICVectAddr15 = (unsigned long)&(timerIRQ);
- VICVectCntl15 = VIC_SLOT_EN | INT_SRC_TIMER0;
- VICIntEnable = INT_TIMER0;
-}
-
-void wait5ms(void) {
-
- unsigned long x;
-
- x=T0TC;
- while(x==T0TC);
- while(x!=T0TC);
-}
-
-void waitus(unsigned long d) {
-
- unsigned long x,y;
-
- x=(T0TC+d)%5000;
- y= T0overflow;
-
- if(xT0TC);
-}
-
-unsigned int addTimerCB(cb_fn cb, unsigned short intervall)
-{
- int i;
- struct CB *cur_cb;
-
- for(i=0; istate == SLOT_FREE)
- {
- cur_cb->exec = cb;
- cur_cb->intervall = intervall;
- cur_cb->cur_intervall = 0;
- cur_cb->state = SLOT_HALT | SLOT_USED;
- return i;
- }
- i++;
- }
- return 0xFF;
-}
-
-unsigned int removeTimerCB(unsigned int cb)
-{
- if(cb < MAX_CB)
- {
- callbacks[cb].state = SLOT_FREE;
- return MAX_CB;
- }
- return 0xFF;
-}
-
-void startCB(unsigned int cb)
-{
- if(cb < MAX_CB)
- {
- callbacks[cb].state &= ~SLOT_HALT;
- }
-}
-
-void stopCB(unsigned int cb)
-{
- if(cb < MAX_CB)
- {
- callbacks[cb].state |= SLOT_HALT;
- }
-}
-
-void setCBIntervall(unsigned int cb, unsigned short intervall)
-{
- if(cb < MAX_CB)
- {
- callbacks[cb].intervall = intervall;
- callbacks[cb].cur_intervall = 0;
- }
-}
-
-unsigned char addTimeout(volatile unsigned long* counter, unsigned long value) {
-
- int i;
-
- for(i=0; i
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef TIMERFUNCS_H
-#define TIMERFUNCS_H
-
-////////////////////////////////////////////////
-///@Attention: Timer are using 5msec intervall!
-////////////////////////////////////////////////
-#define TIME_MSEC2TICKS(t) (t/5)
-
-#include "timerirq.h"
-
-volatile unsigned long T0overflow;
-
-void startTimerIRQ(void);
-
-/**
-@brief Alocate a timer, set the time but do *NOT* start.
-
- Use @see startCB to start the timer
-
-@Param Timer expiry callback, time intervall
-
-@return index of the allocated timer on success
- 0xFF is no timer left
-*/
-unsigned int addTimerCB(cb_fn cb, unsigned short intervall);
-unsigned int removeTimerCB(unsigned int cb);
-void startCB(unsigned int cb);
-void stopCB(unsigned int cb);
-void setCBIntervall(unsigned int cb, unsigned short intervall);
-void wait5ms(void);
-void waitus(unsigned long d);
-unsigned char addTimeout(volatile unsigned long* counter, unsigned long value);
-unsigned char removeTimeout(volatile unsigned long* counter);
-
-#endif
diff --git a/boop/timer/timerirq.c b/boop/timer/timerirq.c
deleted file mode 100644
index 873274f..0000000
--- a/boop/timer/timerirq.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- timerirq.c - timekeeping and calllbacks
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#include "lpc2220.h"
-#include "timerirq.h"
-#include "timerfuncs.h"
-#include "lcd.h"
-
-#define TIMER_PRESCALER 20
-
-struct CB callbacks[MAX_CB];
-unsigned long* timeouts[MAX_TO];
-unsigned char timerPrescaler = TIMER_PRESCALER;
-unsigned char bl_val, cmp_val; // backlight PWM
-
-// wird alle 0.25 ms aufgerufen (s. startTimerIRQ() in timerfuncs)
-// bearbeitet eingetragene "timer"
-void __attribute__ ((section(".text.fastcode"))) timerIRQ(void)
-{
- // backlight pwm
- cmp_val += bl_val;
- if (cmp_val >= 63)
- {
- FIODIR0 |= (1<<4); // sck0/P0.4
- cmp_val -= 63;
- }
- else
- {
- FIODIR0 &= ~(1<<4); // sck0/P0.4
- }
-
-
- if(--timerPrescaler) {
- T0IR = 1;
- return;
- }
- timerPrescaler = TIMER_PRESCALER;
-
- //5 msec intervall time
- unsigned int cnt;
- struct CB *cur_cb;
-
- for(cnt=0; cntstate & SLOT_USED)
- {
- if(!(cur_cb->state & SLOT_HALT))
- {
- cur_cb->cur_intervall++;
- if(cur_cb->cur_intervall >= cur_cb->intervall)
- {
- if(cur_cb->exec)
- (cur_cb->exec)(cnt); // run callback function
- cur_cb->cur_intervall = 0;
- }
- }
- }
- }
-
- for(cnt = 0; cnt < MAX_TO; cnt++) {
- if(timeouts[cnt]) {
- if(*timeouts[cnt])
- (*timeouts[cnt])--;
- else
- timeouts[cnt] = 0;
- }
- }
-
- if(oldsymbols != symbols) {
- volatile cb_fn x;
- x=refresh_symbols;
- x(0xff);
- }
-
- T0overflow++;
- T0IR = 1;
-}
diff --git a/boop/timer/timerirq.h b/boop/timer/timerirq.h
deleted file mode 100644
index c39a6ae..0000000
--- a/boop/timer/timerirq.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- timerirq.h - timekeeping and calllbacks
- Copyright (C) 2007 Ch. Klippel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef TIMERIRQ_H
-#define TIMERIRQ_H
-
-#define MAX_CB 32
-#define MAX_TO 10
-
-#define SLOT_FREE 0x00
-#define SLOT_USED 0x01
-#define SLOT_HALT 0x02
-
-typedef void(*cb_fn)(unsigned int cb);
-
-typedef struct CB
-{
- unsigned int state;
- unsigned short cur_intervall;
- unsigned short intervall;
- cb_fn exec;
-} CB;
-
-void __attribute__ ((section(".text.fastcode"))) timerIRQ (void);
-
-#endif
diff --git a/boop/tools/Make.conf b/boop/tools/Make.conf
deleted file mode 100644
index 1ed1f58..0000000
--- a/boop/tools/Make.conf
+++ /dev/null
@@ -1 +0,0 @@
-THUMBSRCS := toolsmenu.c scart_icp.c
diff --git a/boop/tools/scart_icp.c b/boop/tools/scart_icp.c
deleted file mode 100644
index 3bc6cb2..0000000
--- a/boop/tools/scart_icp.c
+++ /dev/null
@@ -1,715 +0,0 @@
-/*
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-#ifndef DEBUGMODE
- #define USE_SCART_ICP 1
-#endif
-
-#include "lpc2220.h"
-#include "lcd.h"
-#include "fonty.h"
-#include "keyboard.h"
-
-#if USE_SCART_ICP
-
-#include "scart_icp.h"
-#include "scart_image.h"
-
-
-
-/* The portpins (P0.x) to use to connect to scart */
-#define PIN_RST (1<<14) /* Portpin P0.14 to RST/P1.5 on Scart */
-#define PIN_PDA (1<<1) /* Portpin P0.1 to PDA/P0.4 on Scart */
-#define PIN_PCL (1<<0) /* Portpin P0.0 to PCL/P0.5 on Scart */
-
-/* bit mask for port value and direction register */
-#define PORT_MASK (PIN_RST | PIN_PDA | PIN_PCL)
-/* bit mask for pin function select register */
-#define PINSEL_MASK (((PIN_RST*PIN_RST) | (PIN_PDA*PIN_PDA) | (PIN_PCL*PIN_PCL)) * 3)
-
-
-/* Definitions of the ICP commands/opcodes */
-/* see http://www.zlgmcu.com/philips/yingrong/lpc900/LPC900_ICP_Spec_en.pdf */
-#define OP_NOP 0x00 /* NOP */
-#define OP_WR_FMADRL 0x08 /* Write address low command */
-#define OP_RD_FMADRL 0x09 /* Read address low command */
-#define OP_WR_FMADRH 0x0A /* Write address high command */
-#define OP_RD_FMADRH 0x0B /* Read address high command */
-#define OP_WR_FMCON 0x0E /* Write a command to FMCON */
-#define OP_RD_FMCON 0x0F /* Read a command from FMCON */
-#define OP_WR_FMDATA_PG 0x14 /* Write a command to FMDATA and increment address */
-#define OP_RD_FMDATA_PG 0x15 /* Read a command from FMDATA and increment address */
-#define OP_WR_FMDATA 0x0C /* Write a command to FMDATA */
-#define OP_RD_FMDATA 0x0D /* Read a command from FMDATA */
-#define OP_WR_FMDATA_I 0x04 /* Write a command to FMDATA and increment address */
-#define OP_RD_FMDATA_I 0x05 /* Read a command from FMDATA and increment address */
-
-#define CMD_LOAD 0x00 /* Clear and then load the page register */
-#define CMD_PROG 0x48 /* Program page with page register command */
-#define CMD_ERS_G 0x72 /* Erase global command */
-#define CMD_ERS_S 0x71 /* Erase sector command */
-#define CMD_ERS_P 0x70 /* Erase page command */
-#define CMD_CONF 0x6C /* Accesses user configuration information addressed by FMADRL */
-#define CMD_CRC_G 0x1A /* Calculate CRC on the entire user code command */
-#define CMD_CRC_S 0x19 /* Calculate CRC on a sector command */
-#define CMD_CCP 0x67 /* Clear configuration protection */
-
-#define ADR_UCFG1 0x00 /* User Configuration Reg. #1 */
-#define ADR_UCFG2 0x01 /* User Configuration Reg. #2 */
-#define ADR_BootVector 0x02 /* Bootvector */
-#define ADR_StatusByte 0x03 /* Status Byte */
-#define ADR_SEC0 0x08 /* Security byte, sector 0 */
-#define ADR_SEC1 0x09 /* Security byte, sector 1 */
-#define ADR_SEC2 0x0A /* Security byte, sector 2 */
-#define ADR_SEC3 0x0B /* Security byte, sector 3 */
-#define ADR_SEC4 0x0C /* Security byte, sector 4 */
-#define ADR_SEC5 0x0D /* Security byte, sector 5 */
-#define ADR_SEC6 0x0E /* Security byte, sector 6 */
-#define ADR_SEC7 0x0F /* Security byte, sector 7 */
-#define ADR_MFGID 0x10 /* Manufacturer ID */
-#define ADR_ID1 0x11 /* Device ID 1 */
-#define ADR_ID2 0x12 /* Device ID 2 */
-
-
-/* Scart's flash memory attributes */
-#define PAGE_SIZE 64 /* flash page size of LPC931 */
-#define SECTOR_SIZE 1024 /* flash sector size of LPC931 */
-
-
-/* saved pin configuration for later restore */
-static unsigned int savedPinsel0, savedPindir0, savedPin0;
-
-
-/**************************************************************************/
-/* icp_init() */
-/* Purpose: Initialize the portpins for use as ICP */
-/* Input: - */
-/* Output: - */
-/* Return: - */
-/**************************************************************************/
-static void icp_init()
-{
- /* save the current pin configuration */
- savedPinsel0 = PINSEL0;
- savedPindir0 = FIODIR0;
- savedPin0 = FIOPIN0;
-
- /* setup all used pins as GPIO, output, low */
- PINSEL0 &= ~PINSEL_MASK;
- FIODIR0 |= (PIN_RST | PIN_PDA | PIN_PCL);
- FIOCLR0 = (PIN_RST | PIN_PDA | PIN_PCL);
-}
-
-/**************************************************************************/
-/* icp_close() */
-/* Purpose: Configure the portpins as they was before used for ICP */
-/* Input: - */
-/* Output: - */
-/* Return: - */
-/**************************************************************************/
-static void icp_close()
-{
- /* restore the saved pin configuration */
- PINSEL0 = (PINSEL0 & ~PINSEL_MASK) | (savedPinsel0 & PINSEL_MASK);
- FIODIR0 = (FIODIR0 & ~PORT_MASK) | (savedPindir0 & PORT_MASK);
- FIOPIN0 = (FIOPIN0 & ~PORT_MASK) | (savedPin0 & PORT_MASK);
-}
-
-/**************************************************************************/
-/* icp_wait_us() */
-/* Purpose: Wait some us */
-/* Input: time: the time to wait in us */
-/* Output: - */
-/* Return: - */
-/**************************************************************************/
-static void icp_wait_us(int time)
-{
- int start;
-
- /* use Timer0, which increments every 1us and rollover at T0MR0 */
- start = T0TC;
- if ((start + time) < T0MR0)
- {
- while (T0TC < (start + time));
- }
- else
- {
- while ((T0TC < (start + time - T0MR0)) || (T0TC >= start));
- }
-}
-
-/**************************************************************************/
-/* icp_wait_ns() */
-/* Purpose: Wait some ns */
-/* Input: time: the time to wait in ns */
-/* Output: - */
-/* Return: - */
-/**************************************************************************/
-static void icp_wait_ns(int time)
-{
- int i;
-
- /* inaccurate, but okay */
- for (i=0; i<(time>>4); i++);
-}
-
-/**************************************************************************/
-/* icp_mode_entry() */
-/* Purpose: Bring the scart's CPU into ICP mode */
-/* Input: - */
-/* Output: - */
-/* Return: - */
-/**************************************************************************/
-static void icp_mode_entry()
-{
- int i;
-
- /* see ICP spec */
- for (i=0; i<8; i++)
- {
- FIOCLR0 = PIN_RST;
- icp_wait_us(10);
- FIOSET0 = PIN_RST;
- icp_wait_us(10);
- }
- icp_wait_us(50);
-}
-
-/**************************************************************************/
-/* icp_mode_exit() */
-/* Purpose: Bring the scart's CPU out of ICP mode, reset CPU */
-/* Input: - */
-/* Output: - */
-/* Return: - */
-/**************************************************************************/
-static void icp_mode_exit()
-{
- FIOCLR0 = (PIN_RST | PIN_PDA | PIN_PCL);
-}
-
-/**************************************************************************/
-/* icp_shift_out() */
-/* Purpose: Shift out one byte to scart */
-/* Input: val: byte to shift out */
-/* Output: - */
-/* Return: - */
-/**************************************************************************/
-static void icp_shift_out(unsigned char val)
-{
- int i;
-
- for (i=0; i<8; i++)
- {
- FIOCLR0 = PIN_PCL;
- icp_wait_ns(50);
- if (val & 1)
- {
- FIOSET0 = PIN_PDA;
- }
- else
- {
- FIOCLR0 = PIN_PDA;
- }
- val >>= 1;
- icp_wait_ns(50);
- FIOSET0 = PIN_PCL;
- icp_wait_ns(100);
- }
- icp_wait_ns(100);
-}
-
-/**************************************************************************/
-/* icp_shift_in() */
-/* Purpose: Shift in one byte from scart */
-/* Input: - */
-/* Output: - */
-/* Return: byte shifted in */
-/**************************************************************************/
-static unsigned char icp_shift_in()
-{
- int i;
- unsigned char val;
-
- /* configure pin as input */
- FIODIR0 &= ~PIN_PDA;
- val = 0;
- for (i=0; i<8; i++)
- {
- FIOCLR0 = PIN_PCL;
- icp_wait_ns(100);
- val >>= 1;
- val |= ((FIOPIN0 & PIN_PDA) ? 0x80 : 0);
- FIOSET0 = PIN_PCL;
- icp_wait_ns(100);
- }
- /* configure pin as output */
- FIODIR0 |= PIN_PDA;
- icp_wait_ns(100);
- return val;
-}
-
-/**************************************************************************/
-/* icp_read_config_byte() */
-/* Purpose: Read a configuration byte from scart */
-/* Input: adr: address of the config byte */
-/* Output: - */
-/* Return: value of the config byte */
-/**************************************************************************/
-static unsigned char icp_read_config_byte(unsigned char adr)
-{
- icp_shift_out(OP_WR_FMCON);
- icp_shift_out(CMD_CONF);
- icp_shift_out(OP_WR_FMADRL);
- icp_shift_out(adr);
- icp_shift_out(OP_RD_FMDATA);
- return icp_shift_in();
-}
-
-/**************************************************************************/
-/* icp_write_config_byte() */
-/* Purpose: Write a configuration byte to scart */
-/* Input: adr: address of the config byte */
-/* val: value of the config byte */
-/* Output: - */
-/* Return: 0 on success, else error code */
-/**************************************************************************/
-static unsigned char icp_write_config_byte(unsigned char adr, unsigned char val)
-{
- unsigned char status;
-
- icp_shift_out(OP_WR_FMCON);
- icp_shift_out(CMD_CONF);
- icp_shift_out(OP_WR_FMADRL);
- icp_shift_out(adr);
- icp_shift_out(OP_WR_FMDATA);
- icp_shift_out(val);
-
- do
- {
- icp_shift_out(OP_RD_FMCON);
- status = icp_shift_in();
- } while ((status & 0x8F) == 0x80);
-
- return (status & 0x8F);
-}
-
-/**************************************************************************/
-/* icp_calc_sector_crc() */
-/* Purpose: Calculate the CRC of one sector */
-/* Input: adr: start address of the sector */
-/* Output: crc: value of the CRC */
-/* Return: 0 on success, else error code */
-/**************************************************************************/
-static unsigned char icp_calc_sector_crc(unsigned short adr, unsigned int *pcrc)
-{
- int i;
- unsigned char status;
-
- icp_shift_out(OP_WR_FMADRH);
- icp_shift_out(adr>>8);
- icp_shift_out(OP_WR_FMCON);
- icp_shift_out(CMD_CRC_S);
-
- do
- {
- icp_shift_out(OP_RD_FMCON);
- status = icp_shift_in();
- } while ((status & 0x8F) == 0x80);
-
- if (status & 0x8F) return (status & 0x8F);
-
- *pcrc = 0;
- for (i=0; i<4; i++)
- {
- icp_shift_out(OP_RD_FMDATA_I);
- *pcrc >>= 8;
- *pcrc |= (unsigned int)icp_shift_in() << 24;
- }
- return 0;
-}
-
-/**************************************************************************/
-/* icp_load_page_register() */
-/* Purpose: Load the page registers with bytes */
-/* Input: adr: start address of the bytes in the flash */
-/* pval: pointer to the bytes to load */
-/* nbytes: number of bytes to load */
-/* Output: - */
-/* Return: - */
-/**************************************************************************/
-static void icp_load_page_register(unsigned short adr, const unsigned char *pval, unsigned char nbytes)
-{
- int i;
-
- icp_shift_out(OP_WR_FMCON);
- icp_shift_out(CMD_LOAD);
- icp_shift_out(OP_WR_FMADRL);
- icp_shift_out(adr & 0xFF);
- icp_shift_out(OP_WR_FMDATA_PG);
- for (i=0; i> 8);
- icp_shift_out(OP_WR_FMCON);
- icp_shift_out(CMD_PROG);
-
- do
- {
- icp_shift_out(OP_RD_FMCON);
- status = icp_shift_in();
- } while ((status & 0x8F) == 0x80);
-
- return (status & 0x8F);
-}
-
-/**************************************************************************/
-/* icp_erase_sector() */
-/* Purpose: Erase one flash sector */
-/* Input: adr: start address of the sector in the flash */
-/* Output: - */
-/* Return: 0 on success, else error code */
-/**************************************************************************/
-static unsigned char icp_erase_sector(unsigned short adr)
-{
- unsigned char status;
-
- icp_shift_out(OP_WR_FMADRH);
- icp_shift_out(adr >> 8);
- icp_shift_out(OP_WR_FMCON);
- icp_shift_out(CMD_ERS_S);
-
- do
- {
- icp_shift_out(OP_RD_FMCON);
- status = icp_shift_in();
- } while ((status & 0x8F) == 0x80);
-
- return (status & 0x8F);
-}
-
-void scart_icp_header(void) {
- set_font(BOLDFONT);
- draw_string(0, 0, "Scart ICP", 3, DRAW_PUT);
- draw_block(0,10,128,2,3,DRAW_PUT);
- draw_block(0,149,128,2,3,DRAW_PUT);
- set_font(SMALLFONT);
-}
-
-/**************************************************************************/
-/* scart_icp() */
-/* Purpose: Use ICP to program an image into scart's flash */
-/* and read some infos from scart */
-/* Input: - */
-/* Output: - */
-/* Return: - */
-/**************************************************************************/
-void scart_icp(void)
-{
- int i;
- unsigned short offs, addr, blklen;
- unsigned int err, crc_sc, crc_im, tap, poly, crcf;
- unsigned char data;
-
-
- set_font(SMALLFONT);
-
- lcd_fill(0);
- scart_icp_header();
- draw_string(0, 20, "Um Schaeden an der Betty", 3, DRAW_PUT);
- draw_string(0, 29, "und am Scart-Adapter zu", 3, DRAW_PUT);
- draw_string(0, 38, "vermeiden, folgen Sie", 3, DRAW_PUT);
- draw_string(0, 47, "bitte den Anweisungen!", 3, DRAW_PUT);
- draw_string(0, 56, "Entfernen Sie alle", 3, DRAW_PUT);
- draw_string(0, 65, "Kabel von der Betty!", 3, DRAW_PUT);
- draw_string(0, 74, "Druecken Sie dann OK.", 3, DRAW_PUT);
- draw_string(0, 83, "Oder druecken Sie EXIT", 3, DRAW_PUT);
- draw_string(0, 92, "um jetzt abzubrechen.", 3, DRAW_PUT);
-
- do
- {
- waitKeyUpDown();
- } while(!KEY_OK && !KEY_Exit);
-
- if (KEY_Exit) return;
-
- /* init port pins */
- icp_init();
-
- lcd_fill(0);
- scart_icp_header();
- draw_string(0, 20, "Trennen Sie zuerst die", 3, DRAW_PUT);
- draw_string(0, 29, "Stromversorgung des", 3, DRAW_PUT);
- draw_string(0, 38, "SCART-Adapters.", 3, DRAW_PUT);
- draw_string(0, 47, "Verbinden Sie danach die", 3, DRAW_PUT);
- draw_string(0, 56, "Betty mit dem SCART-", 3, DRAW_PUT);
- draw_string(0, 65, "Adapter. Schliessen Sie", 3, DRAW_PUT);
- draw_string(0, 74, "dann die Stromversorgung", 3, DRAW_PUT);
- draw_string(0, 83, "des SCART-Adapters", 3, DRAW_PUT);
- draw_string(0, 92, "wieder an.", 3, DRAW_PUT);
- draw_string(0, 101, "Druecken Sie dann OK.", 3, DRAW_PUT);
-
- do
- {
- waitKeyUpDown();
- } while(!KEY_OK);
-
- /* bring scart into ICP mode */
- icp_mode_entry();
-
- while (1)
- {
- lcd_fill(0);
- scart_icp_header();
- draw_string(0, 20, "Druecken Sie eine Taste", 3, DRAW_PUT);
- draw_string(0, 40, "1 Lese Config-Bytes", 3, DRAW_PUT);
- draw_string(0, 49, "2 Programmiere Image", 3, DRAW_PUT);
- draw_string(0, 58, "3 Vergleiche CRCs", 3, DRAW_PUT);
- draw_string(0, 67, "4 Schreibe Config-Bytes", 3, DRAW_PUT);
- draw_string(0, 84, "Exit Beenden", 3, DRAW_PUT);
-
- do
- {
- waitKeyUpDown();
- } while(!KEY_Exit && !KEY_1 && !KEY_2 && !KEY_3 && !KEY_4);
-
- lcd_fill(0);
- scart_icp_header();
- if (KEY_Exit) break;
-
- if (KEY_1)
- { /* show all config bytes */
- draw_string(0, 14, "UCFG1 & 2", 3, DRAW_PUT);
- draw_hexC (60, 14, icp_read_config_byte(ADR_UCFG1), 3, DRAW_PUT);
- draw_hexC (80, 14, icp_read_config_byte(ADR_UCFG2), 3, DRAW_PUT);
- draw_string(0, 23, "BootVector", 3, DRAW_PUT);
- draw_hexC (60, 23, icp_read_config_byte(ADR_BootVector), 3, DRAW_PUT);
- draw_string(0, 32, "StatusByte", 3, DRAW_PUT);
- draw_hexC (60, 32, icp_read_config_byte(ADR_StatusByte), 3, DRAW_PUT);
- draw_string(0, 41, "SEC0", 3, DRAW_PUT);
- draw_hexC (60, 41, icp_read_config_byte(ADR_SEC0), 3, DRAW_PUT);
- draw_string(0, 50, "SEC1", 3, DRAW_PUT);
- draw_hexC (60, 50, icp_read_config_byte(ADR_SEC1), 3, DRAW_PUT);
- draw_string(0, 59, "SEC2", 3, DRAW_PUT);
- draw_hexC (60, 59, icp_read_config_byte(ADR_SEC2), 3, DRAW_PUT);
- draw_string(0, 68, "SEC3", 3, DRAW_PUT);
- draw_hexC (60, 68, icp_read_config_byte(ADR_SEC3), 3, DRAW_PUT);
- draw_string(0, 77, "SEC4", 3, DRAW_PUT);
- draw_hexC (60, 77, icp_read_config_byte(ADR_SEC4), 3, DRAW_PUT);
- draw_string(0, 86, "SEC5", 3, DRAW_PUT);
- draw_hexC (60, 86, icp_read_config_byte(ADR_SEC5), 3, DRAW_PUT);
- draw_string(0, 95, "SEC6", 3, DRAW_PUT);
- draw_hexC (60, 95, icp_read_config_byte(ADR_SEC6), 3, DRAW_PUT);
- draw_string(0, 104, "SEC7", 3, DRAW_PUT);
- draw_hexC (60, 104, icp_read_config_byte(ADR_SEC7), 3, DRAW_PUT);
- draw_string(0, 113, "MFGID", 3, DRAW_PUT);
- draw_hexC (60, 113, icp_read_config_byte(ADR_MFGID), 3, DRAW_PUT);
- draw_string(0, 122, "ID1", 3, DRAW_PUT);
- draw_hexC (60, 122, icp_read_config_byte(ADR_ID1), 3, DRAW_PUT);
- draw_string(0, 131, "ID2", 3, DRAW_PUT);
- draw_hexC (60, 131, icp_read_config_byte(ADR_ID2), 3, DRAW_PUT);
- }
-
- if (KEY_2)
- { /* erase sectors and program image */
- draw_string(0, 20, "Loesche", 3, DRAW_PUT);
-
- /* only erase first 7 sectors, not all! */
- for (i=0; i<7; i++)
- {
- draw_block (0, 29, 128, 9, 3, DRAW_ERASE);
- draw_string(0, 29, "Sektor", 3, DRAW_PUT);
- draw_numU (40, 29, i, 0, 3, DRAW_PUT);
- err = icp_erase_sector(i*SECTOR_SIZE);
- if (err) break;
- }
-
- if (!err)
- {
- lcd_fill(0);
- draw_string(0, 20, "Programmiere", 3, DRAW_PUT);
- }
-
- offs = 0;
- addr = scart_image_startaddr;
- while (!err && (offs < sizeof(scart_image)))
- {
- blklen = (addr | (PAGE_SIZE-1)) + 1 - addr;
- if ((sizeof(scart_image) - offs) < blklen)
- {
- blklen = sizeof(scart_image) - offs;
- }
-
- draw_block(0, 29, 128, 9, 3, DRAW_ERASE);
- draw_hexS (0, 29, addr, 3, DRAW_PUT);
-
- icp_load_page_register(addr, &scart_image[offs], blklen);
- err = icp_prog_page_register(addr);
-
- addr += blklen;
- offs += blklen;
- }
-
- if (!err)
- {
- draw_block(0, 29, 128, 9, 3, DRAW_ERASE);
- draw_string(0, 29, "BootVector", 3, DRAW_PUT);
- err = icp_write_config_byte(ADR_BootVector, scart_bootvec);
- }
- if (!err)
- {
- draw_block(0, 29, 128, 9, 3, DRAW_ERASE);
- draw_string(0, 29, "StatusByte", 3, DRAW_PUT);
- err = icp_write_config_byte(ADR_StatusByte, scart_bootstat);
- }
- if (err)
- {
- draw_string(0, 40, "Fehler", 3, DRAW_PUT);
- draw_hexC (40, 40, err, 3, DRAW_PUT);
- }
- else
- {
- draw_string(0, 40, "OK", 3, DRAW_PUT);
- }
- }
-
- if (KEY_3)
- { /* compare CRC of all programmed sectors */
- draw_string(0, 20, "Vergleiche", 3, DRAW_PUT);
- err = 0;
- crc_sc = 0;
- offs = 0;
- addr = scart_image_startaddr;
- while (!err && (offs < sizeof(scart_image)))
- {
- blklen = (addr | (SECTOR_SIZE-1)) + 1 - addr;
- if ((sizeof(scart_image) - offs) < blklen)
- {
- blklen = sizeof(scart_image) - offs;
- }
-
- draw_block (0, 29, 128, 9, 3, DRAW_ERASE);
- draw_string(0, 29, "Sektor @", 3, DRAW_PUT);
- draw_hexS (44, 29, addr, 3, DRAW_PUT);
-
- /* calculate CRC from scart */
- err = icp_calc_sector_crc(addr, &crc_sc);
-
- /* calculate CRC from image */
- poly = 0x00400007;
- crc_im = tap = 0;
- for (i=0; i.
-*/
-
-
-#ifndef SCART_ICP
-#define SCART_ICP
-
-extern void scart_icp(void);
-
-#endif
diff --git a/boop/tools/scart_image.h b/boop/tools/scart_image.h
deleted file mode 100644
index 52887f1..0000000
--- a/boop/tools/scart_image.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-/* bootstat register */
-const unsigned char scart_bootstat = 0x01;
-
-/* bootvec register, high byte of the reset vector */
-const unsigned char scart_bootvec = 0x00;
-
-/* address of the first byte of scart_image to program to */
-const unsigned short scart_image_startaddr = 0x0000;
-
-/* from betty_scart.bin SVN #14 */
-/* truncated to a size of 0x1C00 = 7168 to preserve the content of the last flash sector */
-#include "scart_image_data.h"
diff --git a/boop/tools/scart_image_data.h b/boop/tools/scart_image_data.h
deleted file mode 100644
index 514f01c..0000000
--- a/boop/tools/scart_image_data.h
+++ /dev/null
@@ -1,484 +0,0 @@
-// Array representation of binary file betty_scart.bin
-
-
-const unsigned char scart_image[] =
-{
- 0x02,0x00,0x73,0x32,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x32,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0x32,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x32,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0x02,0x03,0xf7,0xff,0xff,0xff,0xff,0xff,0x32,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0x32,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x02,
- 0x09,0x90,0xff,0xff,0xff,0xff,0xff,0x32,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x32,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x32,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0x32,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x32,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x02,0x04,0x46,0x12,0x00,0xdb,0x80,0xfe,0x75,0x81,0xac,0x12,0x0d,
- 0x0e,0xe5,0x82,0x60,0x03,0x02,0x00,0x6e,0x79,0x00,0xe9,0x44,0x00,0x60,0x1b,
- 0x7a,0x00,0x90,0x0d,0xd3,0x78,0x00,0x75,0xa0,0x00,0xe4,0x93,0xf2,0xa3,0x08,
- 0xb8,0x00,0x02,0x05,0xa0,0xd9,0xf4,0xda,0xf2,0x75,0xa0,0xff,0xe4,0x78,0xff,
- 0xf6,0xd8,0xfd,0x78,0x00,0xe8,0x44,0x00,0x60,0x0a,0x79,0x00,0x75,0xa0,0x00,
- 0xe4,0xf3,0x09,0xd8,0xfc,0x78,0x00,0xe8,0x44,0x00,0x60,0x0c,0x79,0x00,0x90,
- 0x00,0x00,0xe4,0xf0,0xa3,0xd8,0xfc,0xd9,0xfa,0x75,0x08,0x00,0x75,0x09,0x00,
- 0x75,0x22,0x00,0x75,0x23,0x05,0x02,0x00,0x6e,0x53,0x84,0x6c,0x43,0x85,0x92,
- 0x75,0x80,0x83,0x53,0x91,0x3e,0x43,0x92,0xcd,0x75,0x90,0xcd,0x53,0xb1,0xfe,
- 0x43,0xb2,0x01,0x75,0xb0,0x00,0x12,0x0c,0xd3,0x12,0x03,0x12,0x12,0x09,0x77,
- 0x12,0x09,0x84,0xd2,0xaf,0x90,0x0d,0x12,0x75,0xf0,0x80,0x12,0x03,0x2c,0x90,
- 0x0d,0x15,0x75,0xf0,0x80,0x12,0x03,0x2c,0x90,0x0d,0x12,0x75,0xf0,0x80,0x12,
- 0x03,0x2c,0xd2,0x00,0x7a,0x00,0x30,0x01,0x2b,0x74,0xc6,0x25,0x09,0x50,0x0f,
- 0x85,0x22,0x28,0x75,0x82,0x3a,0xc0,0x02,0x12,0x07,0x2e,0xd0,0x02,0x80,0xe8,
- 0xe5,0x09,0x60,0xe4,0x30,0x8d,0xe1,0x85,0x22,0x28,0x85,0x09,0x82,0xc0,0x02,
- 0x12,0x07,0x2e,0xd0,0x02,0x80,0xd2,0x20,0x00,0x03,0x02,0x02,0x63,0xc3,0xea,
- 0x95,0x09,0x50,0xc6,0x8a,0x82,0x0a,0xc0,0x02,0x12,0x04,0xe1,0xab,0x82,0xd0,
- 0x02,0xbb,0x0d,0x02,0x80,0x03,0x02,0x02,0x57,0x90,0x0d,0x12,0x75,0xf0,0x80,
- 0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0xea,0x25,0x08,0x14,0x54,0x3f,0x24,0x2d,
- 0xf8,0x76,0x00,0xc0,0x02,0x12,0x04,0x92,0xab,0x82,0xd0,0x02,0xda,0x03,0x02,
- 0x02,0x36,0xbb,0x62,0x02,0x80,0x62,0xbb,0x63,0x02,0x80,0x54,0xbb,0x72,0x02,
- 0x80,0x29,0xbb,0x73,0x02,0x80,0x41,0xbb,0x74,0x02,0x80,0x05,0xbb,0x77,0x65,
- 0x80,0x57,0xe5,0x09,0x60,0x6c,0x8a,0x82,0x12,0x06,0xb8,0x7a,0x00,0x90,0x0d,
- 0x12,0x75,0xf0,0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x80,0x56,0xe5,0x09,
- 0x60,0x52,0x75,0x28,0x00,0x8a,0x82,0x12,0x07,0x2e,0x7a,0x00,0x90,0x0d,0x1b,
- 0x75,0xf0,0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x80,0x39,0xc0,0x02,0x12,
- 0x08,0x9d,0xd0,0x02,0x80,0x30,0xc0,0x02,0x12,0x07,0xd1,0xd0,0x02,0x80,0x27,
- 0xc2,0x00,0x75,0x82,0x01,0xc0,0x02,0x12,0x03,0xad,0xd0,0x02,0x80,0x19,0x75,
- 0x82,0x00,0xc0,0x02,0x12,0x0c,0x55,0xd0,0x02,0x80,0x0d,0x90,0x0d,0x23,0x75,
- 0xf0,0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x8a,0x04,0xec,0x60,0x1b,0xc0,
- 0x04,0x12,0x04,0x92,0xd0,0x04,0x1c,0x8c,0x02,0x80,0xf1,0x90,0x0d,0x15,0x75,
- 0xf0,0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x80,0x02,0x8c,0x02,0x90,0x0d,
- 0x12,0x75,0xf0,0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x02,0x01,0x23,0x8b,
- 0x82,0xc0,0x02,0x12,0x03,0xad,0xd0,0x02,0x02,0x01,0x23,0xe5,0x09,0x70,0x03,
- 0x02,0x01,0x23,0xc0,0x02,0x12,0x04,0x92,0xab,0x82,0xd0,0x02,0xeb,0x24,0xf8,
- 0x40,0x60,0xeb,0x2b,0x2b,0x90,0x02,0x7f,0x73,0x02,0x02,0x97,0x02,0x02,0x99,
- 0x02,0x02,0xa2,0x02,0x02,0xab,0x02,0x02,0xb4,0x02,0x02,0xbd,0x02,0x02,0xc6,
- 0x02,0x02,0xcf,0x80,0x49,0xc0,0x02,0x12,0x07,0x7d,0xd0,0x02,0x80,0x40,0xc0,
- 0x02,0x12,0x09,0x68,0xd0,0x02,0x80,0x37,0xc0,0x02,0x12,0x08,0xc1,0xd0,0x02,
- 0x80,0x2e,0xc0,0x02,0x12,0x08,0xdb,0xd0,0x02,0x80,0x25,0xc0,0x02,0x12,0x08,
- 0xf5,0xd0,0x02,0x80,0x1c,0xc0,0x02,0x12,0x09,0x2d,0xd0,0x02,0x80,0x13,0xc0,
- 0x02,0x12,0x09,0x71,0xd0,0x02,0x80,0x0a,0x75,0x82,0x00,0xc0,0x02,0x12,0x03,
- 0xad,0xd0,0x02,0x30,0x00,0x03,0x02,0x01,0x23,0x75,0x82,0x01,0xc0,0x02,0x12,
- 0x03,0xad,0xd0,0x02,0x02,0x01,0x23,0xe5,0x82,0x25,0x82,0x24,0x33,0xfa,0xe4,
- 0x34,0x0d,0xfb,0x8a,0x82,0x8b,0x83,0xa3,0xe4,0x93,0xf5,0xbe,0x8a,0x82,0x8b,
- 0x83,0xe4,0x93,0xf5,0xbf,0x22,0x75,0x98,0x52,0x43,0xba,0xa0,0x75,0x82,0x07,
- 0x12,0x02,0xf5,0x75,0xbd,0x03,0xc2,0x98,0xd2,0xac,0xd2,0x99,0xd2,0xbc,0xd2,
- 0xfe,0x22,0xaa,0x82,0xab,0x83,0xac,0xf0,0x7d,0x00,0xed,0x2a,0xfe,0xe4,0x3b,
- 0xff,0x8c,0x00,0x8e,0x82,0x8f,0x83,0x88,0xf0,0x12,0x0c,0xf2,0x60,0x2b,0x8d,
- 0x06,0x0d,0xee,0x2a,0xfe,0xe4,0x3b,0xff,0x8c,0x00,0x8e,0x82,0x8f,0x83,0x88,
- 0xf0,0x12,0x0c,0xf2,0xf5,0x82,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0x12,
- 0x03,0xad,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0x80,0xc2,0x22,0xaa,0x82,
- 0xab,0x83,0xac,0xf0,0x7d,0x00,0xc3,0xed,0x95,0x0c,0x50,0x2b,0x8d,0x06,0x0d,
- 0xee,0x2a,0xfe,0xe4,0x3b,0xff,0x8c,0x00,0x8e,0x82,0x8f,0x83,0x88,0xf0,0x12,
- 0x0c,0xf2,0xf5,0x82,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0x12,0x03,0xad,
- 0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0x80,0xcf,0x22,0xaa,0x82,0x8a,0x82,
- 0xc0,0x02,0x12,0x05,0x06,0xe5,0x82,0xd0,0x02,0x70,0x04,0xd2,0xee,0x80,0xef,
- 0xd2,0xee,0x22,0xe5,0x82,0xfa,0xc4,0x54,0x0f,0xfb,0x53,0x03,0x0f,0x74,0x30,
- 0x2b,0xfb,0x24,0xc6,0x50,0x04,0x74,0x07,0x2b,0xfb,0x8b,0x82,0xc0,0x02,0x12,
- 0x03,0xad,0xd0,0x02,0x74,0x0f,0x5a,0xfb,0x74,0x30,0x2b,0xfb,0x24,0xc6,0x50,
- 0x04,0x74,0x07,0x2b,0xfb,0x8b,0x82,0x02,0x03,0xad,0xc0,0x21,0xc0,0xe0,0xc0,
- 0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,
- 0xc0,0x07,0xc0,0x00,0xc0,0x01,0xc0,0xd0,0x75,0xd0,0x00,0x74,0xc0,0x25,0x09,
- 0x40,0x06,0x85,0x99,0x82,0x12,0x04,0xef,0xc2,0x98,0xc2,0x8d,0x75,0x8c,0x00,
- 0xd0,0xd0,0xd0,0x01,0xd0,0x00,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,
- 0x03,0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0xd0,0x21,0x32,0xc0,
- 0x21,0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02,0xc0,0x03,0xc0,0x04,
- 0xc0,0x05,0xc0,0x06,0xc0,0x07,0xc0,0x00,0xc0,0x01,0xc0,0xd0,0x75,0xd0,0x00,
- 0xe5,0x0b,0x60,0x0a,0x12,0x04,0xad,0x85,0x82,0x99,0xc2,0x99,0x80,0x02,0xc2,
- 0xee,0xd0,0xd0,0xd0,0x01,0xd0,0x00,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,
- 0xd0,0x03,0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0xd0,0x21,0x32,
- 0x7a,0x00,0xc2,0xaf,0xe5,0x09,0x60,0x0e,0x15,0x09,0xab,0x08,0x05,0x08,0x74,
- 0x3f,0x5b,0x24,0x2d,0xf8,0x86,0x02,0xd2,0xaf,0x8a,0x82,0x22,0x7a,0x00,0xc2,
- 0xaf,0xe5,0x0b,0x60,0x0e,0x15,0x0b,0xab,0x0a,0x05,0x0a,0x74,0x3f,0x5b,0x24,
- 0x6d,0xf8,0x86,0x02,0xd2,0xaf,0x8a,0x82,0x22,0xe5,0x09,0x60,0xfc,0xc2,0xaf,
- 0x15,0x09,0xaa,0x08,0x05,0x08,0x74,0x3f,0x5a,0x24,0x2d,0xf8,0x86,0x02,0xd2,
- 0xaf,0x8a,0x82,0x22,0xe5,0x82,0x25,0x08,0x54,0x3f,0x24,0x2d,0xf8,0x86,0x02,
- 0x8a,0x82,0x22,0xaa,0x82,0x74,0xc0,0x25,0x09,0x40,0x0e,0xab,0x09,0x05,0x09,
- 0xeb,0x25,0x08,0x54,0x3f,0x24,0x2d,0xf8,0xa6,0x02,0x22,0xaa,0x82,0xc2,0xaf,
- 0x74,0xc0,0x25,0x0b,0x40,0x14,0xab,0x0b,0x05,0x0b,0xeb,0x25,0x0a,0x54,0x3f,
- 0x24,0x6d,0xf8,0xa6,0x02,0xd2,0xaf,0x75,0x82,0x01,0x22,0xd2,0xaf,0x75,0x82,
- 0x00,0x22,0xaa,0x82,0x7b,0x08,0xeb,0x60,0x10,0xc2,0x97,0xea,0x33,0x92,0x96,
- 0xd2,0x97,0xea,0xa2,0x95,0x3a,0xfa,0x1b,0x80,0xed,0xc2,0x97,0x8a,0x82,0x22,
- 0x7a,0x00,0xc2,0x96,0xc2,0x97,0x7b,0x08,0xeb,0x60,0x0c,0xd2,0x97,0xea,0xa2,
- 0x95,0x3a,0xfa,0xc2,0x97,0x1b,0x80,0xf1,0x8a,0x82,0x22,0xd2,0x97,0xc2,0x96,
- 0xc2,0x81,0x7a,0xff,0xea,0x60,0x03,0x1a,0x80,0xfa,0xd2,0x81,0x7a,0xff,0xea,
- 0x60,0x03,0x1a,0x80,0xfa,0xc2,0x81,0xc2,0x97,0x20,0x95,0xfd,0x75,0x82,0x30,
- 0x12,0x05,0x2a,0x20,0x95,0xfd,0x75,0x82,0x40,0x12,0x05,0x2a,0x7a,0x00,0xba,
- 0x2f,0x00,0x50,0x11,0xea,0x90,0x0d,0x47,0x93,0xf5,0x82,0xc0,0x02,0x12,0x05,
- 0x2a,0xd0,0x02,0x0a,0x80,0xea,0xd2,0x81,0x75,0x11,0xc0,0x75,0x82,0x3e,0x12,
- 0x06,0x07,0x75,0x82,0x36,0x12,0x06,0x90,0x75,0x82,0x33,0x12,0x06,0x90,0x75,
- 0x82,0x3a,0x12,0x06,0x90,0x75,0x82,0x34,0x02,0x06,0x90,0xaa,0x82,0xc2,0x81,
- 0x20,0x95,0xfd,0x8a,0x82,0x12,0x05,0x2a,0xaa,0x82,0x7b,0x00,0xc3,0xeb,0x95,
- 0x10,0x50,0x23,0xeb,0x25,0x0d,0xfc,0xe4,0x35,0x0e,0xfd,0xae,0x0f,0x8c,0x82,
- 0x8d,0x83,0x8e,0xf0,0x12,0x0c,0xf2,0xf5,0x82,0xc0,0x02,0xc0,0x03,0x12,0x05,
- 0x2a,0xd0,0x03,0xd0,0x02,0x0b,0x80,0xd7,0xd2,0x81,0x8a,0x82,0x22,0xaa,0x82,
- 0xc2,0x81,0x20,0x95,0xfd,0x8a,0x82,0x12,0x05,0x2a,0xaa,0x82,0x85,0x11,0x82,
- 0xc0,0x02,0x12,0x05,0x2a,0xd0,0x02,0xd2,0x81,0x8a,0x82,0x22,0xaa,0x82,0xc2,
- 0x81,0x20,0x95,0xfd,0x74,0x80,0x4a,0xf5,0x82,0x12,0x05,0x2a,0xaa,0x82,0x7b,
- 0x00,0xac,0x15,0xec,0x60,0x37,0x8b,0x05,0x0b,0xed,0x25,0x12,0xfd,0xe4,0x35,
- 0x13,0xfe,0xaf,0x14,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,
- 0x07,0x12,0x05,0x46,0xa8,0x82,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,
- 0x03,0xd0,0x02,0x8d,0x82,0x8e,0x83,0x8f,0xf0,0xe8,0x12,0x0c,0xd9,0x1c,0x80,
- 0xc6,0xd2,0x81,0x8a,0x82,0x22,0xaa,0x82,0xc2,0x81,0x20,0x95,0xfd,0x74,0x80,
- 0x4a,0xf5,0x82,0x12,0x05,0x2a,0x75,0x82,0x00,0x12,0x05,0x2a,0xd2,0x81,0x22,
- 0xaa,0x82,0xc2,0x81,0x20,0x95,0xfd,0x8a,0x82,0x12,0x05,0x2a,0xd2,0x81,0x22,
- 0xaa,0x82,0x10,0x81,0x02,0x80,0x03,0x20,0x95,0xfd,0x8a,0x82,0x12,0x05,0x2a,
- 0xaa,0x82,0x30,0x02,0x02,0xd2,0x81,0x8a,0x82,0x22,0xaa,0x82,0x75,0x82,0x00,
- 0xc0,0x02,0x12,0x0c,0x55,0xc2,0xe9,0x75,0x82,0x36,0x12,0x06,0x90,0xd0,0x02,
- 0x75,0x82,0xf5,0xc0,0x02,0x12,0x06,0x78,0xab,0x82,0xd0,0x02,0xbb,0x01,0xf1,
- 0x74,0x03,0x2a,0xf5,0x24,0x75,0x25,0x00,0x85,0x16,0x26,0x75,0x27,0x01,0x75,
- 0x0d,0x24,0x75,0x0e,0x00,0x75,0x0f,0x40,0x75,0x10,0x04,0x75,0x82,0x7f,0xc0,
- 0x02,0x12,0x05,0xc9,0xc2,0x02,0x75,0x82,0x7f,0x12,0x06,0x9f,0xd0,0x02,0x8a,
- 0x03,0x1a,0xeb,0x60,0x0e,0xc0,0x02,0x12,0x04,0x92,0xc2,0x02,0x12,0x06,0x9f,
- 0xd0,0x02,0x80,0xec,0xd2,0x81,0x75,0x82,0x35,0x12,0x06,0x90,0xd2,0xe9,0x90,
- 0x0d,0x79,0x75,0xf0,0x80,0x02,0x03,0x2c,0xaa,0x82,0x74,0x03,0x2a,0xf5,0x29,
- 0x85,0x28,0x2a,0x85,0x16,0x2b,0x75,0x2c,0x05,0xc2,0xe9,0x75,0x0d,0x29,0x75,
- 0x0e,0x00,0x75,0x0f,0x40,0x75,0x10,0x04,0x75,0x82,0x7f,0xc0,0x02,0x12,0x05,
- 0xc9,0xc2,0x02,0x75,0x82,0x7f,0x12,0x06,0x9f,0xd0,0x02,0x8a,0x03,0x1a,0xeb,
- 0x60,0x0e,0xc0,0x02,0x12,0x04,0x92,0xc2,0x02,0x12,0x06,0x9f,0xd0,0x02,0x80,
- 0xec,0xd2,0x81,0x75,0x82,0x35,0x12,0x06,0x90,0xd2,0xe9,0x22,0xe5,0x09,0x60,
- 0xfc,0x12,0x04,0x92,0xaa,0x82,0xba,0x3e,0x00,0x50,0x40,0xc2,0x02,0x75,0x82,
- 0x7f,0xc0,0x02,0x12,0x06,0x9f,0xd0,0x02,0xc2,0x02,0x8a,0x82,0xc0,0x02,0x12,
- 0x06,0x9f,0xd0,0x02,0x7b,0x00,0xc3,0xeb,0x9a,0x50,0x17,0xe5,0x09,0x60,0xfc,
- 0xc0,0x02,0xc0,0x03,0x12,0x04,0x92,0xc2,0x02,0x12,0x06,0x9f,0xd0,0x03,0xd0,
- 0x02,0x0b,0x80,0xe4,0xd2,0x81,0x75,0x82,0x35,0x12,0x06,0x90,0x02,0x0c,0x10,
- 0x75,0x82,0x00,0x02,0x03,0xad,0xc2,0x02,0x75,0x82,0xc0,0x12,0x06,0x9f,0x7a,
- 0x00,0xba,0x2f,0x00,0x50,0x50,0x90,0x0d,0x81,0x75,0xf0,0x80,0xc0,0x02,0x12,
- 0x03,0x2c,0xd0,0x02,0x8a,0x82,0xc0,0x02,0x12,0x03,0xc3,0x90,0x0d,0x88,0x75,
- 0xf0,0x80,0x12,0x03,0x2c,0xc2,0x02,0x75,0x82,0x00,0x12,0x06,0x9f,0x12,0x03,
- 0xc3,0xd0,0x02,0x74,0x03,0x5a,0xfb,0xbb,0x03,0x0f,0x90,0x0d,0x76,0x75,0xf0,
- 0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x80,0x0d,0x90,0x0d,0x8e,0x75,0xf0,
- 0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x0a,0x80,0xab,0xd2,0x81,0x90,0x0d,
- 0x76,0x75,0xf0,0x80,0x12,0x03,0x2c,0xc2,0x02,0x75,0x82,0xfe,0x12,0x06,0x9f,
- 0x7a,0x00,0xba,0x08,0x00,0x50,0x50,0x90,0x0d,0x92,0x75,0xf0,0x80,0xc0,0x02,
- 0x12,0x03,0x2c,0xd0,0x02,0x8a,0x82,0xc0,0x02,0x12,0x03,0xc3,0x90,0x0d,0x9b,
- 0x75,0xf0,0x80,0x12,0x03,0x2c,0xc2,0x02,0x75,0x82,0x00,0x12,0x06,0x9f,0x12,
- 0x03,0xc3,0xd0,0x02,0x74,0x03,0x5a,0xfb,0xbb,0x03,0x0f,0x90,0x0d,0x76,0x75,
- 0xf0,0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x80,0x0d,0x90,0x0d,0xa2,0x75,
- 0xf0,0x80,0xc0,0x02,0x12,0x03,0x2c,0xd0,0x02,0x0a,0x80,0xab,0xd2,0x81,0x22,
- 0x90,0x0d,0xa5,0x75,0xf0,0x80,0x12,0x03,0x2c,0x75,0x82,0xbd,0x12,0x06,0x90,
- 0x12,0x03,0xc3,0x90,0x0d,0xba,0x75,0xf0,0x80,0x12,0x03,0x2c,0x75,0x82,0x3d,
- 0x12,0x06,0x90,0x02,0x03,0xc3,0x12,0x04,0xc8,0xaa,0x82,0x74,0x80,0x4a,0xf5,
- 0x82,0xc2,0x02,0x12,0x06,0x9f,0xd2,0x02,0x75,0x82,0x00,0x12,0x06,0x9f,0x02,
- 0x03,0xad,0x12,0x04,0xc8,0xaa,0x82,0xc2,0x02,0x8a,0x82,0x12,0x06,0x9f,0x30,
- 0x98,0xfd,0xaa,0x99,0xc2,0x98,0xd2,0x02,0x8a,0x82,0x02,0x06,0x9f,0x12,0x04,
- 0xc8,0xaa,0x82,0xc0,0x02,0x12,0x04,0xc8,0xab,0x82,0x74,0xc0,0x4b,0xf5,0x82,
- 0xc2,0x02,0x12,0x06,0x9f,0xd0,0x02,0x7c,0x00,0xc3,0xec,0x9a,0x50,0x16,0xc2,
- 0x02,0x75,0x82,0x00,0xc0,0x02,0xc0,0x04,0x12,0x06,0x9f,0x12,0x03,0xad,0xd0,
- 0x04,0xd0,0x02,0x0c,0x80,0xe5,0xd2,0x81,0x22,0x12,0x04,0xc8,0xaa,0x82,0xc0,
- 0x02,0x12,0x04,0xc8,0xab,0x82,0x74,0x40,0x4b,0xf5,0x82,0xc2,0x02,0x12,0x06,
- 0x9f,0xd0,0x02,0x7c,0x00,0xc3,0xec,0x9a,0x50,0x19,0x30,0x98,0xfd,0xab,0x99,
- 0xc2,0x98,0xc2,0x02,0x8b,0x82,0xc0,0x02,0xc0,0x04,0x12,0x06,0x9f,0xd0,0x04,
- 0xd0,0x02,0x0c,0x80,0xe2,0xd2,0x81,0x22,0x12,0x04,0xc8,0x12,0x06,0x90,0x02,
- 0x03,0xad,0x12,0x04,0xc8,0x02,0x0c,0x55,0x12,0x05,0x60,0xc2,0x03,0x90,0x0d,
- 0x50,0xe4,0x93,0xf5,0x16,0x22,0x75,0x93,0x40,0x75,0x86,0x40,0x75,0x94,0x02,
- 0xd2,0xe9,0x22,0xc0,0x21,0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02,
- 0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xc0,0x00,0xc0,0x01,0xc0,
- 0xd0,0x75,0xd0,0x00,0xe5,0x93,0x30,0xe6,0x09,0x75,0x93,0x00,0x75,0x94,0x02,
- 0x02,0x0b,0xf3,0x75,0x82,0xfb,0x12,0x06,0x78,0xe5,0x82,0xf5,0x17,0xfa,0x70,
- 0x03,0x02,0x0b,0xbd,0xc2,0x04,0xea,0x24,0xfc,0x50,0x14,0x75,0x12,0x17,0x75,
- 0x13,0x00,0x75,0x14,0x40,0x75,0x15,0x04,0x75,0x82,0xff,0x12,0x06,0x24,0x80,
- 0x11,0x75,0x12,0x17,0x75,0x13,0x00,0x75,0x14,0x40,0x8a,0x15,0x75,0x82,0xff,
- 0x12,0x06,0x24,0xe5,0x17,0x24,0xfc,0x40,0x03,0x02,0x0b,0x93,0x20,0x00,0x06,
- 0x20,0x01,0x03,0x02,0x0b,0x5d,0xc2,0x05,0xaa,0x1a,0xba,0x02,0x02,0x80,0x0d,
- 0xba,0x05,0x02,0x80,0x45,0xba,0x06,0x02,0x80,0x67,0x02,0x0b,0x13,0x75,0x82,
- 0xff,0x12,0x06,0x78,0xaa,0x82,0xba,0x01,0x02,0x80,0x03,0x02,0x0b,0x93,0x75,
- 0x17,0x04,0xaa,0x19,0x8a,0x18,0x85,0x16,0x19,0x75,0x1a,0x02,0x75,0x0d,0x17,
- 0x75,0x0e,0x00,0x75,0x0f,0x40,0x75,0x10,0x04,0x75,0x82,0x7f,0x12,0x05,0xc9,
- 0x75,0x11,0x02,0x75,0x82,0x7f,0x12,0x06,0x07,0xd2,0x04,0x02,0x0b,0x93,0xc2,
- 0x02,0x75,0x82,0xff,0x12,0x06,0x9f,0x7a,0x03,0xc3,0xea,0x95,0x17,0x50,0x12,
- 0xc2,0x02,0x75,0x82,0x00,0xc0,0x02,0x12,0x06,0x9f,0x12,0x03,0xad,0xd0,0x02,
- 0x0a,0x80,0xe8,0xd2,0x81,0x02,0x0b,0x93,0x75,0x82,0xff,0x12,0x06,0x78,0xe5,
- 0x82,0xfa,0x24,0xfb,0x40,0x4e,0xea,0x2a,0x2a,0x90,0x0a,0x99,0x73,0x02,0x0a,
- 0xa8,0x02,0x0a,0xaa,0x02,0x0a,0xc3,0x02,0x0a,0xd2,0x02,0x0a,0xde,0x80,0x36,
- 0xe5,0x17,0x24,0xfb,0x50,0x30,0x75,0x82,0xff,0x12,0x06,0x78,0xe5,0x82,0xfa,
- 0x24,0xf6,0x40,0x02,0x8a,0x23,0xd2,0x05,0x80,0x1d,0x85,0x19,0x22,0x85,0x23,
- 0x82,0x12,0x02,0xf5,0xd2,0x01,0xd2,0x05,0x80,0x0e,0xc2,0x01,0x75,0x82,0x07,
- 0x12,0x02,0xf5,0xd2,0x05,0x80,0x02,0xd2,0x05,0x20,0x05,0x03,0x02,0x0b,0x93,
- 0x75,0x17,0x04,0xaa,0x19,0x8a,0x18,0x85,0x16,0x19,0x75,0x1a,0x06,0x75,0x0d,
- 0x17,0x75,0x0e,0x00,0x75,0x0f,0x40,0x75,0x10,0x04,0x75,0x82,0x7f,0x12,0x05,
- 0xc9,0x75,0x11,0x00,0x75,0x82,0x7f,0x12,0x06,0x07,0xd2,0x04,0x02,0x0b,0x93,
- 0xe5,0x17,0x24,0xfc,0x50,0x7a,0x30,0x00,0x77,0x90,0x0d,0xcb,0x75,0xf0,0x80,
- 0x12,0x03,0x2c,0x90,0x0d,0xce,0x75,0xf0,0x80,0x12,0x03,0x2c,0xc2,0x02,0x75,
- 0x82,0xff,0x12,0x06,0x9f,0x7a,0x03,0xc3,0xea,0x95,0x17,0x50,0x12,0xc2,0x02,
- 0x75,0x82,0x00,0xc0,0x02,0x12,0x06,0x9f,0x12,0x03,0xad,0xd0,0x02,0x0a,0x80,
- 0xe8,0xd2,0x81,0x90,0x0d,0xcb,0x75,0xf0,0x80,0x12,0x03,0x2c,0x80,0x36,0x75,
- 0x82,0x02,0x12,0x03,0xad,0x75,0x0c,0x04,0x90,0x00,0x17,0x75,0xf0,0x40,0x12,
- 0x03,0x73,0xc2,0x02,0x75,0x82,0xff,0x12,0x06,0x9f,0x7a,0x03,0xc3,0xea,0x95,
- 0x17,0x50,0x12,0xc2,0x02,0x75,0x82,0x00,0xc0,0x02,0x12,0x06,0x9f,0x12,0x03,
- 0xad,0xd0,0x02,0x0a,0x80,0xe8,0xd2,0x81,0x75,0x82,0x36,0x12,0x06,0x90,0x75,
- 0x82,0xf5,0x12,0x06,0x78,0xaa,0x82,0xba,0x01,0xf5,0x75,0x82,0x3a,0x12,0x06,
- 0x90,0x30,0x04,0x08,0x75,0x82,0x35,0x12,0x06,0x90,0x80,0x38,0x75,0x82,0x34,
- 0x12,0x06,0x90,0x80,0x30,0x75,0x82,0xf5,0x12,0x06,0x78,0xaa,0x82,0xba,0x0d,
- 0x02,0x80,0x23,0x75,0x82,0x36,0x12,0x06,0x90,0x75,0x82,0xf5,0x12,0x06,0x78,
- 0xaa,0x82,0xba,0x01,0xf5,0x75,0x82,0x3a,0x12,0x06,0x90,0x75,0x82,0x3b,0x12,
- 0x06,0x90,0x75,0x82,0x34,0x12,0x06,0x90,0x75,0x93,0x40,0x75,0x94,0x02,0xd0,
- 0xd0,0xd0,0x01,0xd0,0x00,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,
- 0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0xd0,0x21,0x32,0x7a,0x01,
- 0xea,0x60,0x3f,0x75,0x82,0x3d,0xc0,0x02,0x12,0x06,0x90,0xe5,0x82,0xd0,0x02,
- 0x54,0xf0,0xfb,0x60,0x21,0xbb,0x10,0x02,0x80,0x0f,0xbb,0x70,0xe4,0x75,0x82,
- 0x3b,0xc0,0x02,0x12,0x06,0x90,0xd0,0x02,0x80,0xd8,0x30,0x03,0x06,0x75,0x82,
- 0x36,0x12,0x06,0x90,0x7a,0x00,0x80,0xcb,0x20,0x03,0x06,0x75,0x82,0x34,0x12,
- 0x06,0x90,0x7a,0x00,0x80,0xbe,0x22,0xaa,0x82,0x75,0x1b,0x01,0x8a,0x1c,0xc2,
- 0xe9,0xd2,0x03,0x90,0x0d,0x5f,0xe4,0x93,0xfa,0x74,0xcf,0x5a,0xf5,0x11,0x75,
- 0x82,0x18,0x12,0x06,0x07,0x75,0x82,0x36,0x12,0x06,0x90,0x75,0x82,0x33,0x12,
- 0x06,0x90,0x12,0x0c,0x10,0x7a,0x00,0x7b,0x00,0x8a,0x04,0x8b,0x05,0x0a,0xba,
- 0x00,0x01,0x0b,0xc3,0xec,0x94,0xfa,0xed,0x94,0x00,0x50,0x25,0x75,0x0d,0x1b,
- 0x75,0x0e,0x00,0x75,0x0f,0x40,0x75,0x10,0x02,0x75,0x82,0x7f,0xc0,0x02,0xc0,
- 0x03,0x12,0x05,0xc9,0x75,0x82,0x35,0x12,0x06,0x90,0x12,0x0c,0x10,0xd0,0x03,
- 0xd0,0x02,0x80,0xc9,0x90,0x0d,0x5f,0xe4,0x93,0xf5,0x11,0x75,0x82,0x18,0x12,
- 0x06,0x07,0xc2,0x03,0x12,0x0c,0x10,0x75,0x94,0x02,0xd2,0xe9,0x22,0x43,0x89,
- 0x01,0xd2,0x8c,0x22,0x20,0xf7,0x10,0x30,0xf6,0x11,0x88,0x83,0xa8,0x82,0x20,
- 0xf5,0x07,0xf6,0xa8,0x83,0x75,0x83,0x00,0x22,0xf2,0x80,0xf7,0xf0,0x22,0x20,
- 0xf7,0x14,0x30,0xf6,0x14,0x88,0x83,0xa8,0x82,0x20,0xf5,0x07,0xe6,0xa8,0x83,
- 0x75,0x83,0x00,0x22,0xe2,0x80,0xf7,0xe4,0x93,0x22,0xe0,0x22,0x75,0x82,0x00,
- 0x22,0x0d,0x0a,0x00,0x52,0x65,0x61,0x64,0x79,0x00,0x54,0x58,0x20,0x44,0x6f,
- 0x6e,0x65,0x00,0x53,0x79,0x6e,0x74,0x61,0x78,0x20,0x65,0x72,0x72,0x6f,0x72,
- 0x00,0x0d,0x0a,0x00,0x2d,0x1b,0x16,0x85,0x0b,0x3b,0x05,0x95,0x03,0xb4,0x02,
- 0xc3,0x01,0xd2,0x01,0x59,0x00,0xe1,0x00,0x68,0x29,0x2e,0x06,0x47,0xd3,0x91,
- 0x3e,0x1a,0x45,0x01,0x01,0x06,0x00,0x10,0x0b,0xda,0x8a,0x75,0x13,0x22,0xc1,
- 0x35,0x07,0x03,0x38,0x16,0x6c,0x43,0x40,0x91,0x46,0x50,0x78,0x56,0x10,0xa9,
- 0x0a,0x00,0x11,0x41,0x00,0x57,0x7f,0x3f,0x98,0x31,0x0b,0x0d,0x0a,0x00,0x54,
- 0x58,0x20,0x44,0x6f,0x6e,0x65,0x00,0x52,0x65,0x67,0x20,0x30,0x78,0x00,0x20,
- 0x3d,0x20,0x30,0x78,0x00,0x20,0x20,0x20,0x00,0x50,0x41,0x54,0x41,0x42,0x4c,
- 0x45,0x5b,0x00,0x5d,0x20,0x3d,0x20,0x30,0x78,0x00,0x20,0x20,0x00,0x43,0x43,
- 0x31,0x31,0x30,0x30,0x20,0x52,0x65,0x61,0x64,0x20,0x53,0x74,0x61,0x74,0x75,
- 0x73,0x3a,0x20,0x00,0x20,0x20,0x57,0x72,0x69,0x74,0x65,0x20,0x53,0x74,0x61,
- 0x74,0x75,0x73,0x3a,0x20,0x00,0x0d,0x0a,0x00,0x52,0x58,0x3a,0x20,0x00,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
-};
diff --git a/boop/tools/toolsmenu.c b/boop/tools/toolsmenu.c
deleted file mode 100644
index d2b3173..0000000
--- a/boop/tools/toolsmenu.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-#include "global.h"
-#include "menu.h"
-#include "scart_icp.h"
-#include "redirector.h"
-#include "fs20.h"
-
-const struct MENU_ENTRY toolsMenuEntries[] =
-{
- { scart_icp, 0, FUNCENTRY, "Scart ICP", "Program the SCART unit" }, // tools/scarticp.c
-#if FF_UART_REDIRECT
- { uarto_redirector, 0, FUNCENTRY, "Redirector", "Serial redirector" }, // serial/redirector.c
-#endif
- { fs20_decoder, 0, FUNCENTRY, "FS20 decoder", "FS20 decoder" } // cc1100/fs20.c
-
-};
-
-const struct MENU toolsMenu =
-{
- NUM_OF_ELEMENTS (toolsMenuEntries), (MENU_ENTRY*)&toolsMenuEntries, "Tools"
-};
diff --git a/boop/tools/toolsmenu.h b/boop/tools/toolsmenu.h
deleted file mode 100644
index 4411339..0000000
--- a/boop/tools/toolsmenu.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-#ifndef TOOLSMENU_H
-#define TOOLSMENU_H
-
-extern const struct MENU toolsMenu;
-
-#endif
diff --git a/boop/version.h b/boop/version.h
deleted file mode 100644
index b2ffa08..0000000
--- a/boop/version.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#define SVNVERSION 00
-