From 56a94fae627cfbf755e891721b93040d0d9ea8de Mon Sep 17 00:00:00 2001 From: Nebuleon Fumika Date: Mon, 24 Feb 2014 06:46:46 +0000 Subject: [PATCH] Initial commit. --- .gitignore | 5 + COPYRIGHT | 3 + Makefile | 54 + Makefile.rules | 25 + README.md | 11 + bg.c | 34 + bg.h | 28 + data/default.gcw0.desktop | 9 + draw.c | 70 + draw.h | 8 + game.c | 306 ++ game.h | 107 + init.c | 72 + init.h | 31 + main.c | 56 + main.h | 37 + platform.h | 59 + platform/general.c | 110 + platform/opendingux.c | 106 + score.c | 117 + score.h | 27 + text.c | 272 ++ text.h | 62 + title.c | 113 + title.h | 27 + unifont.c | 9773 +++++++++++++++++++++++++++++++++++++ unifont.h | 29 + 27 files changed, 11551 insertions(+) create mode 100644 .gitignore create mode 100644 COPYRIGHT create mode 100644 Makefile create mode 100644 Makefile.rules create mode 100644 README.md create mode 100644 bg.c create mode 100644 bg.h create mode 100644 data/default.gcw0.desktop create mode 100644 draw.c create mode 100644 draw.h create mode 100644 game.c create mode 100644 game.h create mode 100644 init.c create mode 100644 init.h create mode 100644 main.c create mode 100644 main.h create mode 100644 platform.h create mode 100644 platform/general.c create mode 100644 platform/opendingux.c create mode 100644 score.c create mode 100644 score.h create mode 100644 text.c create mode 100644 text.h create mode 100644 title.c create mode 100644 title.h create mode 100644 unifont.c create mode 100644 unifont.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d63f0d0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.o +ativayeban +ativayeban-od +ativayeban-od.opk +.opk_data/ diff --git a/COPYRIGHT b/COPYRIGHT new file mode 100644 index 0000000..0d173e7 --- /dev/null +++ b/COPYRIGHT @@ -0,0 +1,3 @@ +The code for Ativayeban is licensed under the GNU General Public License, version 2 or later at your option. + +Code (c) Nebuleon Fumika \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..05ff2ff --- /dev/null +++ b/Makefile @@ -0,0 +1,54 @@ +TARGET ?= ativayeban + +ifeq ($(TARGET), ativayeban-od) + CC := mipsel-linux-gcc + STRIP := mipsel-linux-strip + OBJS = platform/opendingux.o +else + CC := gcc + STRIP := strip + OBJS = platform/general.o +endif + +SYSROOT := $(shell $(CC) --print-sysroot) +SDL_CFLAGS := $(shell $(SYSROOT)/usr/bin/sdl-config --cflags) +SDL_LIBS := $(shell $(SYSROOT)/usr/bin/sdl-config --libs) + +OBJS += main.o init.o title.o game.o score.o bg.o draw.o text.o unifont.o + +HEADERS += main.h init.h platform.h title.h game.h score.h bg.h draw.h text.h unifont.h + +INCLUDE := -I. +DEFS := + +CFLAGS = $(SDL_CFLAGS) -Wall -Wno-unused-variable \ + -O2 -fomit-frame-pointer $(DEFS) $(INCLUDE) +LDFLAGS := $(SDL_LIBS) -lm -lSDL_image + +include Makefile.rules + +.PHONY: all opk + +all: $(TARGET) + +$(TARGET): $(OBJS) + +opk: $(TARGET).opk + +$(TARGET).opk: $(TARGET) + $(SUM) " OPK $@" + $(CMD)rm -rf .opk_data + $(CMD)cp -r data .opk_data + $(CMD)cp $< .opk_data/$(TARGET) + $(CMD)$(STRIP) .opk_data/$(TARGET) + $(CMD)mksquashfs .opk_data $@ -all-root -noappend -no-exports -no-xattrs -no-progress >/dev/null + +# The two below declarations ensure that editing a .c file recompiles only that +# file, but editing a .h file recompiles everything. +# Courtesy of Maarten ter Huurne. + +# Each object file depends on its corresponding source file. +$(C_OBJS): %.o: %.c + +# Object files all depend on all the headers. +$(OBJS): $(HEADERS) diff --git a/Makefile.rules b/Makefile.rules new file mode 100644 index 0000000..504f8f8 --- /dev/null +++ b/Makefile.rules @@ -0,0 +1,25 @@ +ifdef V + CMD:= + SUM:=@\# +else + CMD:=@ + SUM:=@echo +endif + +.PHONY: $(TARGET) +$(TARGET): $(OBJS) + $(SUM) " LD $@" + $(CMD)$(CC) $(CFLAGS) $^ $(LDFLAGS) -o $@ + +%.o: %.c + $(SUM) " CC $@" + $(CMD)$(CC) $(CFLAGS) -c $< -o $@ + +%.o: %.S + $(SUM) " AS $@" + $(CMD)$(CC) $(ASFLAGS) -c $< -o $@ + +.PHONY: clean +clean: + $(SUM) " CLEAN ." + $(CMD)rm -rf $(OBJS) $(TARGET) $(DATA_TO_CLEAN) diff --git a/README.md b/README.md new file mode 100644 index 0000000..2044e45 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +ativayeban + +You are a ball and you must fall into the holes to avoid being crushed by the top of the screen! + +This game requires SDL 1.2 and a C compiler. It is optimised for low-resolution screens. + +Everything's under the GPL version 2. + +To compile this for PC, use `make clean; make` on a PC with SDL. You'll then get a windowed SDL game. + +To compile this for OpenDingux, use `make TARGET=ativayeban-od clean; make TARGET=ativayeban-od opk` on a PC with the `PATH` set to include your OpenDingux mipsel toolchain. \ No newline at end of file diff --git a/bg.c b/bg.c new file mode 100644 index 0000000..6b5fc25 --- /dev/null +++ b/bg.c @@ -0,0 +1,34 @@ +/* + * Ativayeban, background rendering code file + * Copyright (C) 2014 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include + +#include "SDL.h" + +#include "main.h" + +void AdvanceBackground(uint32_t Milliseconds) +{ +} + +void DrawBackground(void) +{ + SDL_Rect ScreenRect = { .x = 0, .y = 0, .w = Screen->w, .h = Screen->h }; + SDL_FillRect(Screen, &ScreenRect, SDL_MapRGB(Screen->format, 0, 0, 0)); +} diff --git a/bg.h b/bg.h new file mode 100644 index 0000000..87d4289 --- /dev/null +++ b/bg.h @@ -0,0 +1,28 @@ +/* + * Ativayeban, background rendering header + * Copyright (C) 2014 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _BG_H_ +#define _BG_H_ + +#include + +extern void AdvanceBackground(uint32_t Milliseconds); +extern void DrawBackground(void); + +#endif /* !defined(_BG_H_) */ diff --git a/data/default.gcw0.desktop b/data/default.gcw0.desktop new file mode 100644 index 0000000..342034f --- /dev/null +++ b/data/default.gcw0.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] + +Name=Ativayeban +Comment=Fall through a labyrinth. Avoid getting crushed! +Exec=ativayeban-od +Terminal=false +Type=Application +StartupNotify=true +Categories=games; diff --git a/draw.c b/draw.c new file mode 100644 index 0000000..2513462 --- /dev/null +++ b/draw.c @@ -0,0 +1,70 @@ +#include +#include + +#include "SDL.h" + +/* + * SDL_Surface 32-bit circle-fill algorithm without using trig + * + * While I humbly call this "Celdecea's Method", odds are that the + * procedure has already been documented somewhere long ago. All of + * the circle-fill examples I came across utilized trig functions or + * scanning neighbor pixels. This algorithm identifies the width of + * a semi-circle at each pixel height and draws a scan-line covering + * that width. + * + * The code is not optimized but very fast, owing to the fact that it + * alters pixels in the provided surface directly rather than through + * function calls. + * + * http://content.gpwiki.org/index.php/SDL:Tutorials:Drawing_and_Filling_Circles + */ +void DRAW_FillCircle(SDL_Surface *surface, int cx, int cy, int radius, Uint32 pixel) +{ + if (SDL_MUSTLOCK(surface)) + SDL_LockSurface(surface); + // Note that there is more to altering the bitrate of this + // method than just changing this value. See how pixels are + // altered at the following web page for tips: + // http://www.libsdl.org/intro.en/usingvideo.html + static const int BPP = 4; + + float r = (float) radius; + float dy; + + for (dy = 1.0f; dy <= r; dy += 1.0f) + { + // This loop is unrolled a bit, only iterating through half of the + // height of the circle. The result is used to draw a scan line and + // its mirror image below it. + + // The following formula has been simplified from our original. We + // are using half of the width of the circle because we are provided + // with a center and we need left/right coordinates. + + float dx = floorf(sqrtf((2.0f * r * dy) - (dy * dy))); + int x = cx - dx; + if (x < 0) + x = 0; + + // Grab a pointer to the left-most pixel for each half of the circle + Uint8 *target_pixel_a = (Uint8 *)surface->pixels + ((int)(cy + r - dy)) * surface->pitch + x * BPP; + Uint8 *target_pixel_b = (Uint8 *)surface->pixels + ((int)(cy - r + dy)) * surface->pitch + x * BPP; + + for (; x <= cx + dx && x < surface->w; x++) + { + // Range check in Y (clip to the surface's bounds) + // for both pixels to be drawn. + if ((int) (cy + r - dy) >= 0 + && (int) (cy + r - dy) < surface->h) + *(Uint32 *)target_pixel_a = pixel; + if ((int) (cy - r + dy) >= 0 + && (int) (cy - r + dy) < surface->h) + *(Uint32 *)target_pixel_b = pixel; + target_pixel_a += BPP; + target_pixel_b += BPP; + } + } + if (SDL_MUSTLOCK(surface)) + SDL_UnlockSurface(surface); +} \ No newline at end of file diff --git a/draw.h b/draw.h new file mode 100644 index 0000000..75e934d --- /dev/null +++ b/draw.h @@ -0,0 +1,8 @@ +#ifndef _DRAW_H_ +#define _DRAW_H_ + +#include "SDL.h" + +extern void DRAW_FillCircle(SDL_Surface *surface, int cx, int cy, int radius, Uint32 pixel); + +#endif /* !defined(_DRAW_H_) */ diff --git a/game.c b/game.c new file mode 100644 index 0000000..ca8b028 --- /dev/null +++ b/game.c @@ -0,0 +1,306 @@ +/* + * Ativayeban, game code file + * Copyright (C) 2014 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#define __STDC_FORMAT_MACROS +#include +#include + +#include "SDL.h" +#include "SDL_image.h" + +#include "main.h" +#include "init.h" +#include "platform.h" +#include "game.h" +#include "score.h" +#include "draw.h" +#include "bg.h" +#include "text.h" + +static uint32_t Score; + +static bool Boost; +static bool Pause; + +// Where the player is. (Center, meters.) +static float PlayerX; +static float PlayerY; +// Where the player is going. (Meters per second.) +static float PlayerSpeedX; +static float PlayerSpeedY; + +// The last value returned by GetMovement. +static int16_t PlayerAccelX; + +// What the player avoids. +static struct AtivayebanRect* Rectangles = NULL; +static uint32_t RectangleCount = 0; + +static float GenDistance; + +void GameGatherInput(bool* Continue) +{ + SDL_Event ev; + + while (SDL_PollEvent(&ev)) + { + PlayerAccelX = GetMovement(&ev); + if (IsPauseEvent(&ev)) + Pause = !Pause; + else if (IsExitGameEvent(&ev)) + { + *Continue = false; + return; + } + } +} + +static void AnimationControl(Uint32 Milliseconds) +{ +} + +void GameDoLogic(bool* Continue, bool* Error, Uint32 Milliseconds) +{ + if (!Pause) + { + bool PointAwarded = false; + uint32_t Millisecond; + for (Millisecond = 0; Millisecond < Milliseconds; Millisecond++) + { + // Scroll all rectangles toward the top... + int32_t i; + for (i = RectangleCount - 1; i >= 0; i--) + { + Rectangles[i].Top += FIELD_SCROLL / 1000; + Rectangles[i].Bottom += FIELD_SCROLL / 1000; + // If the player is past a rectangle, award the player with a + // point. But there is a pair of them per row! + if (!Rectangles[i].Passed + && Rectangles[i].Top > PlayerY + PLAYER_SIZE / 2) + { + Rectangles[i].Passed = true; + if (!PointAwarded) + { + Score++; + PointAwarded = true; + } + } + // If a rectangle is past the top side, remove it. + if (Rectangles[i].Bottom > FIELD_HEIGHT) + { + memmove(&Rectangles[i], &Rectangles[i + 1], (RectangleCount - i) * sizeof(struct AtivayebanRect)); + RectangleCount--; + } + } + // ... as well as the ball. + PlayerY += FIELD_SCROLL / 1000; + // Generate a pair of rectangles now if needed. + if (RectangleCount == 0 || Rectangles[RectangleCount - 1].Bottom >= GenDistance) + { + float Top; + if (RectangleCount == 0) + Top = FIELD_SCROLL / 1000; + else + { + Top = Rectangles[RectangleCount - 1].Bottom - GenDistance; + GenDistance += RECT_GEN_SPEED; + } + Rectangles = realloc(Rectangles, (RectangleCount + 2) * sizeof(struct AtivayebanRect)); + RectangleCount += 2; + Rectangles[RectangleCount - 2].Passed = Rectangles[RectangleCount - 1].Passed = false; + Rectangles[RectangleCount - 2].Top = Rectangles[RectangleCount - 1].Top = Top; + Rectangles[RectangleCount - 2].Bottom = Rectangles[RectangleCount - 1].Bottom = Top - RECT_HEIGHT; + // Where's the place for the player to go through? + float GapLeft = (FIELD_WIDTH / 16.0f) + ((float) rand() / (float) RAND_MAX) * (FIELD_WIDTH - GAP_WIDTH - (FIELD_WIDTH / 16.0f)); + Rectangles[RectangleCount - 2].Left = 0; + Rectangles[RectangleCount - 2].Right = GapLeft; + Rectangles[RectangleCount - 1].Left = GapLeft + GAP_WIDTH; + Rectangles[RectangleCount - 1].Right = FIELD_WIDTH; + } + // Update the speed at which the player is going. + PlayerSpeedX += ((float) PlayerAccelX / 32767.0f) * ACCELERATION / 1000; + + // Update the player's position and speed. + + // Left and right edges (X). If the horizontal speed would run the + // ball into an edge, use up some of the energy in the impact and + // rebound the ball. + if (PlayerSpeedX < 0 && PlayerX - PLAYER_SIZE / 2 + PlayerSpeedX / 1000 < 0) + { + PlayerX = PLAYER_SIZE / 2 + + ((PlayerX - PLAYER_SIZE / 2) - (PlayerSpeedX / 1000)) * FIELD_REBOUND; + PlayerSpeedX = -PlayerSpeedX * FIELD_REBOUND; + } + else if (PlayerSpeedX > 0 && PlayerX + PLAYER_SIZE / 2 + PlayerSpeedX / 1000 > FIELD_WIDTH) + { + PlayerX = FIELD_WIDTH - PLAYER_SIZE / 2 + + (FIELD_WIDTH - (PlayerX + PLAYER_SIZE / 2) - (PlayerSpeedX / 1000)) * FIELD_REBOUND; + PlayerSpeedX = -PlayerSpeedX * FIELD_REBOUND; + } + else + { + PlayerX += PlayerSpeedX / 1000; + } + + // Is the ball on a rectangle? + bool OnRectangle = false; + + for (i = RectangleCount - 1; i >= 0; i--) + { + // Stop considering rectangles if they are higher than the ball + // (Y). + if (PlayerY - PLAYER_SIZE / 2 < Rectangles[i].Top + LOWER_EPSILON) + break; + // If the ball is in range (X)... + // TODO Circle physics. + if ((PlayerX - PLAYER_SIZE / 2 >= Rectangles[i].Left + && PlayerX - PLAYER_SIZE / 2 <= Rectangles[i].Right) + || (PlayerX + PLAYER_SIZE / 2 >= Rectangles[i].Left + && PlayerX + PLAYER_SIZE / 2 <= Rectangles[i].Right)) + { + // Is the distance in range, and is the ball going up slowly + // enough (Y)? + if (PlayerY - PLAYER_SIZE / 2 < Rectangles[i].Top + UPPER_EPSILON + && PlayerSpeedY >= 0.0f + && PlayerSpeedY < UPPER_EPSILON) + { + OnRectangle = true; + PlayerSpeedY = 0.0f; + // Also make sure the ball appears to be on the rectangle (Y). + PlayerY = Rectangles[i].Top + PLAYER_SIZE / 2; + break; + } + // If the ball would cross the rectangle during this + // millisecond, make it rebound instead (Y). + else if (PlayerY - PLAYER_SIZE / 2 >= Rectangles[i].Top + && PlayerY - PLAYER_SIZE / 2 + PlayerSpeedY / 1000 < Rectangles[i].Top) + { + PlayerY = PlayerY + + ((PlayerY - PLAYER_SIZE / 2) - Rectangles[i].Top - (PlayerSpeedY / 1000)) * RECT_REBOUND; + PlayerSpeedY = -PlayerSpeedY * RECT_REBOUND; + break; + } + } + } + + if (OnRectangle) + { + // If so, apply friction to the player's speed (X). + PlayerSpeedX *= 1.0f - FRICTION; + } + else + { + // If not, apply gravity (Y). + PlayerSpeedY += GRAVITY / 1000; + PlayerY += PlayerSpeedY / 1000; + } + + // Bottom edge (Y). + // If the ball arrives below the bottom edge, act as if it had + // arrived on the bottom edge. + if (PlayerY - PLAYER_SIZE / 2 < 0) + { + PlayerY = PLAYER_SIZE / 2; + PlayerSpeedY = -PlayerSpeedY * FIELD_REBOUND; + } + + // If the ball has collided with the top of the field, + // and it is not going down, the player's game is over. + if (PlayerY + PLAYER_SIZE / 2 >= FIELD_HEIGHT + && PlayerSpeedY >= 0.0f) + { + ToScore(Score); + break; + } + } + + AdvanceBackground(Milliseconds); + } + + AnimationControl(Milliseconds); +} + +void GameOutputFrame() +{ + // Draw the background. + DrawBackground(); + + // Draw the rectangles. + uint32_t i; + for (i = 0; i < RectangleCount; i++) + { + SDL_Rect ColumnDestRect = { + .x = (int) roundf(Rectangles[i].Left * SCREEN_WIDTH / FIELD_WIDTH), + .y = SCREEN_HEIGHT - (int) roundf(Rectangles[i].Top * SCREEN_HEIGHT / FIELD_HEIGHT), + .w = (int) ((Rectangles[i].Right - Rectangles[i].Left) * SCREEN_WIDTH / FIELD_WIDTH), + .h = (int) ((Rectangles[i].Top - Rectangles[i].Bottom) * SCREEN_HEIGHT / FIELD_HEIGHT) + }; + SDL_FillRect(Screen, &ColumnDestRect, SDL_MapRGB(Screen->format, 128, 128, 128)); + } + + // Draw the character. + DRAW_FillCircle(Screen, (int) roundf(PlayerX * SCREEN_WIDTH / FIELD_WIDTH), (int) roundf(SCREEN_HEIGHT - PlayerY * SCREEN_HEIGHT / FIELD_HEIGHT), (int) ((PLAYER_SIZE / 2) * SCREEN_WIDTH / FIELD_WIDTH), SDL_MapRGB(Screen->format, 255, 255, 255)); + + // Draw the player's current score. + char ScoreString[17]; + sprintf(ScoreString, "Score%10" PRIu32, Score); + if (SDL_MUSTLOCK(Screen)) + SDL_LockSurface(Screen); + PrintStringOutline32(ScoreString, + SDL_MapRGB(Screen->format, 255, 255, 255), + SDL_MapRGB(Screen->format, 0, 0, 0), + Screen->pixels, + Screen->pitch, + 0, + 0, + SCREEN_WIDTH, + SCREEN_HEIGHT, + RIGHT, + TOP); + if (SDL_MUSTLOCK(Screen)) + SDL_UnlockSurface(Screen); + + SDL_Flip(Screen); +} + +void ToGame(void) +{ + Score = 0; + Boost = false; + Pause = false; + PlayerX = FIELD_WIDTH / 2; + PlayerY = FIELD_HEIGHT - PLAYER_SIZE / 2; + PlayerSpeedX = 0.0f; + PlayerSpeedY = GRAVITY / 200 - FIELD_SCROLL / 200; + PlayerAccelX = 0; + if (Rectangles != NULL) + { + free(Rectangles); + Rectangles = NULL; + } + RectangleCount = 0; + GenDistance = RECT_GEN_START; + + GatherInput = GameGatherInput; + DoLogic = GameDoLogic; + OutputFrame = GameOutputFrame; +} diff --git a/game.h b/game.h new file mode 100644 index 0000000..71b09eb --- /dev/null +++ b/game.h @@ -0,0 +1,107 @@ +/* + * Ativayeban, game header + * Copyright (C) 2014 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _GAME_H_ +#define _GAME_H_ + +// When determining whether the ball is on a rectangle, the distance between +// the bottom of the ball and the top of the rectangle can be less than this +// and the ball will be considered to be on the rectangle. This avoids rebound +// from applying indefinitely. +// Given in meters. +#define UPPER_EPSILON 0.02f + +// When determining whether the ball is on a rectangle, the distance between +// the bottom of the ball and the top of the rectangle must be more than this. +// This is meant to guard against fuzzy floating-point equality comparisons. +// Given in meters. +#define LOWER_EPSILON -0.001f + +// All speed and acceleration modifiers follow the same directions. +// Vertically: Positive values go upward, and negative values go downward. +// Horizontally: Positive values go rightward, and negative values go leftward. + +// The horizontal acceleration when the user presses to go to the right fully. +// Negated and multiplied by a fraction when going to the left or not fully in +// one direction, respectively. +// Given in (meters per second) per second (m/s^2). +#define ACCELERATION 4.00f + +// The gravitational force exerted by the bottom of the screen. +// Given in (meters per second) per second (m/s^2). +#define GRAVITY -9.78f /* like Earth */ + +// The friction exerted on the ball by the rectangles. It places an implicit +// maximum on the speed allowable for the ball, as well as stops the ball +// slowly when the player stops accelerating in one direction. +// Given as the proportion of the original speed lost per millisecond. +#define FRICTION 0.002f + +// The proportion of the ball's energy that remains in it after hitting a +// rectangle. The ball goes against its collision trajectory after rebounding. +#define RECT_REBOUND 0.20f + +// The proportion of the ball's energy that remains in it after hitting one of +// the edges of the field. The ball goes against its collision trajectory, +// but only horizontally, after rebounding. +#define FIELD_REBOUND 0.50f + +// The speed at which the screen scrolls. +// Given in meters per second (m/s). +#define FIELD_SCROLL 1.00f + +// The distance between the edges of two successive rectangles to begin with. +// Given in meters. +#define RECT_GEN_START 2.00f + +// The change in distance between the edges of two successive rectangles as +// the player passes through each of them. +// Given in meters (per rectangle). +#define RECT_GEN_SPEED -0.01f + +// The height of each rectangle. +// Given in meters. +#define RECT_HEIGHT 0.25f + +// The width of the area to leave empty for the player to pass through. +// Given in meters. +#define GAP_WIDTH 0.75f + +// The width and height of the player's character. +// Given in meters. +#define PLAYER_SIZE 0.37f + +// The width of the playing field. +// Given in meters. +#define FIELD_WIDTH 5.33f + +#define FIELD_HEIGHT (SCREEN_HEIGHT * (FIELD_WIDTH / SCREEN_WIDTH)) + +struct AtivayebanRect +{ + float Left; + float Top; + float Right; + float Bottom; + bool Passed; +}; + +extern void ToGame(void); + +#endif /* !defined(_GAME_H_) */ diff --git a/init.c b/init.c new file mode 100644 index 0000000..f84adfa --- /dev/null +++ b/init.c @@ -0,0 +1,72 @@ +/* + * Ativayeban, initialisation code file + * Copyright (C) 2014 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include + +#include "SDL.h" +#include "SDL_image.h" + +#include "main.h" +#include "init.h" +#include "platform.h" +#include "title.h" + +void Initialize(bool* Continue, bool* Error) +{ + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) + { + *Continue = false; *Error = true; + printf("SDL initialisation failed: %s\n", SDL_GetError()); + SDL_ClearError(); + return; + } + else + printf("SDL initialisation succeeded\n"); + + Screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 32, SDL_HWSURFACE | +#ifdef SDL_TRIPLEBUF + SDL_TRIPLEBUF +#else + SDL_DOUBLEBUF +#endif + ); + + if (Screen == NULL) + { + *Continue = false; *Error = true; + printf("SDL_SetVideoMode failed: %s\n", SDL_GetError()); + SDL_ClearError(); + return; + } + else + printf("SDL_SetVideoMode succeeded\n"); + + SDL_ShowCursor(0); + + InitializePlatform(); + + // Title screen. (-> title.c) + ToTitleScreen(); +} + +void Finalize() +{ + SDL_Quit(); +} diff --git a/init.h b/init.h new file mode 100644 index 0000000..8a82e3f --- /dev/null +++ b/init.h @@ -0,0 +1,31 @@ +/* + * Ativayeban, initialisation header + * Copyright (C) 2014 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _INIT_H_ +#define _INIT_H_ + +#include + +#define SCREEN_WIDTH 320 +#define SCREEN_HEIGHT 240 + +void Initialize(bool* Continue, bool* Error); +void Finalize(void); + +#endif /* !defined(_INIT_H_) */ diff --git a/main.c b/main.c new file mode 100644 index 0000000..e360451 --- /dev/null +++ b/main.c @@ -0,0 +1,56 @@ +/* + * Ativayeban, main program file + * Copyright (C) 2014 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include + +#include "SDL.h" + +#include "main.h" +#include "init.h" +#include "platform.h" +#include "SDL_image.h" + +static bool Continue = true; +static bool Error = false; + + SDL_Surface* Screen = NULL; + + TGatherInput GatherInput; + TDoLogic DoLogic; + TOutputFrame OutputFrame; + +int main(int argc, char* argv[]) +{ + Initialize(&Continue, &Error); + Uint32 Duration = 16; + while (Continue) + { + GatherInput(&Continue); + if (!Continue) + break; + DoLogic(&Continue, &Error, Duration); + if (!Continue) + break; + OutputFrame(); + Duration = ToNextFrame(); + } + Finalize(); + return Error ? 1 : 0; +} diff --git a/main.h b/main.h new file mode 100644 index 0000000..0d4fd33 --- /dev/null +++ b/main.h @@ -0,0 +1,37 @@ +/* + * Ativayeban, main program header + * Copyright (C) 2014 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _MAIN_H_ +#define _MAIN_H_ + +#include +#include "SDL.h" + +#include "bg.h" + +typedef void (*TGatherInput) (bool* Continue); +typedef void (*TDoLogic) (bool* Continue, bool* Error, Uint32 Milliseconds); +typedef void (*TOutputFrame) (void); + +extern SDL_Surface* Screen; +extern TGatherInput GatherInput; +extern TDoLogic DoLogic; +extern TOutputFrame OutputFrame; + +#endif /* !defined(_MAIN_H_) */ diff --git a/platform.h b/platform.h new file mode 100644 index 0000000..0f03284 --- /dev/null +++ b/platform.h @@ -0,0 +1,59 @@ +/* + * Ativayeban, platform-specific functions, header + * Copyright (C) 2014 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include + +extern void InitializePlatform(void); + +/* + * Advances the game by a platform-appropriate time, and returns the number of + * milliseconds that have been skipped over. + */ +extern Uint32 ToNextFrame(void); + +// Is???Event returns true if the specified event is used to trigger the ??? +// function. +// EnterGamePressing: true if the event can be used to start a game from the +// title and score screens. +// EnterGameReleasing: true if the event releases buttons from the above. +// ExitGame: true if the event can be used to exit the entire application. +// Pause: true if the event can be used to pause a game in progress. + +// GetMovement returns, after updating the platform-specific input status, a +// value between -32768 and +32767 to indicate how far the ball needs to go. +// Negative values go to the left; positive values go to the right. + +// Get???Prompt returns the text that can be used to describe the actions that +// can trigger a feature on the platform. + +extern bool IsEnterGamePressingEvent(const SDL_Event* event); +extern bool IsEnterGameReleasingEvent(const SDL_Event* event); +extern const char* GetEnterGamePrompt(void); + +extern bool IsExitGameEvent(const SDL_Event* event); +extern const char* GetExitGamePrompt(void); + +extern int16_t GetMovement(const SDL_Event* event); +extern const char* GetMovementPrompt(void); + +extern bool IsPauseEvent(const SDL_Event* event); +extern const char* GetPausePrompt(void); + +extern void ResetMovement(void); diff --git a/platform/general.c b/platform/general.c new file mode 100644 index 0000000..57862da --- /dev/null +++ b/platform/general.c @@ -0,0 +1,110 @@ +/* + * Ativayeban, default platform-specific code file + * Copyright (C) 2014 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include + +#include "SDL.h" + +#include "platform.h" + +static Uint32 LastTicks = 0; +static bool LeftPressed; +static bool RightPressed; + +void InitializePlatform(void) +{ + LastTicks = SDL_GetTicks(); +} + +Uint32 ToNextFrame(void) +{ + SDL_Delay(8); + Uint32 Ticks = SDL_GetTicks(); + Uint32 Duration = Ticks - LastTicks; + LastTicks = Ticks; + return Duration; +} + +bool IsEnterGamePressingEvent(const SDL_Event* event) +{ + return event->type == SDL_KEYDOWN + && (event->key.keysym.sym == SDLK_RETURN + || event->key.keysym.sym == SDLK_SPACE); +} + +bool IsEnterGameReleasingEvent(const SDL_Event* event) +{ + return event->type == SDL_KEYUP + && (event->key.keysym.sym == SDLK_RETURN + || event->key.keysym.sym == SDLK_SPACE); +} + +const char* GetEnterGamePrompt(void) +{ + return "Enter/Space"; +} + +bool IsExitGameEvent(const SDL_Event* event) +{ + return event->type == SDL_QUIT + || (event->type == SDL_KEYDOWN + && event->key.keysym.sym == SDLK_ESCAPE); +} + +const char* GetExitGamePrompt(void) +{ + return "Esc"; +} + +int16_t GetMovement(const SDL_Event* event) +{ + if (event->type == SDL_KEYUP + || event->type == SDL_KEYDOWN) + { + if (event->key.keysym.sym == SDLK_LEFT) + LeftPressed = event->type == SDL_KEYDOWN; + else if (event->key.keysym.sym == SDLK_RIGHT) + RightPressed = event->type == SDL_KEYDOWN; + } + return (LeftPressed) + ? ((RightPressed) ? 0 : -32768) + : ((RightPressed) ? 32767 : 0); +} + +const char* GetMovementPrompt(void) +{ + return "Left/Right"; +} + +bool IsPauseEvent(const SDL_Event* event) +{ + return event->type == SDL_KEYDOWN + && event->key.keysym.sym == SDLK_p; +} + +const char* GetPausePrompt(void) +{ + return "P"; +} + +void ResetMovement(void) +{ + LeftPressed = RightPressed = false; +} diff --git a/platform/opendingux.c b/platform/opendingux.c new file mode 100644 index 0000000..f3bc442 --- /dev/null +++ b/platform/opendingux.c @@ -0,0 +1,106 @@ +/* + * Ativayeban, OpenDingux platform-specific code file + * Copyright (C) 2014 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include + +#include "SDL.h" + +#include "platform.h" + +static bool LeftPressed; +static bool RightPressed; + +void InitializePlatform(void) +{ +} + +Uint32 ToNextFrame(void) +{ + // OpenDingux waits for vertical sync by itself. + return 16; +} + +bool IsEnterGamePressingEvent(const SDL_Event* event) +{ + return event->type == SDL_KEYDOWN + && (event->key.keysym.sym == SDLK_LCTRL /* A */ + || event->key.keysym.sym == SDLK_RETURN /* Start */); +} + +bool IsEnterGameReleasingEvent(const SDL_Event* event) +{ + return event->type == SDL_KEYUP + && (event->key.keysym.sym == SDLK_LCTRL /* A */ + || event->key.keysym.sym == SDLK_RETURN /* Start */); +} + +const char* GetEnterGamePrompt(void) +{ + return "A/Start"; +} + +bool IsExitGameEvent(const SDL_Event* event) +{ + return event->type == SDL_QUIT + || (event->type == SDL_KEYDOWN + && (event->key.keysym.sym == SDLK_LALT /* B */ + || event->key.keysym.sym == SDLK_ESCAPE /* Select */)); +} + +const char* GetExitGamePrompt(void) +{ + return "B/Select"; +} + +int16_t GetMovement(const SDL_Event* event) +{ + if (event->type == SDL_KEYUP + || event->type == SDL_KEYDOWN) + { + if (event->key.keysym.sym == SDLK_LEFT) + LeftPressed = event->type == SDL_KEYDOWN; + else if (event->key.keysym.sym == SDLK_RIGHT) + RightPressed = event->type == SDL_KEYDOWN; + } + return (LeftPressed) + ? ((RightPressed) ? 0 : -32768) + : ((RightPressed) ? 32767 : 0); +} + +const char* GetMovementPrompt(void) +{ + return "D-pad Left/Right"; +} + +bool IsPauseEvent(const SDL_Event* event) +{ + return event->type == SDL_KEYDOWN + && event->key.keysym.sym == SDLK_RETURN /* Start */; +} + +const char* GetPausePrompt(void) +{ + return "Start"; +} + +void ResetMovement(void) +{ + LeftPressed = RightPressed = false; +} diff --git a/score.c b/score.c new file mode 100644 index 0000000..2541bcf --- /dev/null +++ b/score.c @@ -0,0 +1,117 @@ +/* + * Ativayeban, score screen code file + * Copyright (C) 2014 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#define __STDC_FORMAT_MACROS +#include + +#include "SDL.h" + +#include "main.h" +#include "init.h" +#include "platform.h" +#include "game.h" +#include "score.h" +#include "bg.h" +#include "text.h" + +static bool WaitingForRelease = false; + +static char* ScoreMessage = NULL; + +void ScoreGatherInput(bool* Continue) +{ + SDL_Event ev; + + while (SDL_PollEvent(&ev)) + { + if (IsEnterGamePressingEvent(&ev)) + WaitingForRelease = true; + else if (IsEnterGameReleasingEvent(&ev)) + { + WaitingForRelease = false; + ToGame(); + if (ScoreMessage != NULL) + { + free(ScoreMessage); + ScoreMessage = NULL; + } + return; + } + else if (IsExitGameEvent(&ev)) + { + *Continue = false; + if (ScoreMessage != NULL) + { + free(ScoreMessage); + ScoreMessage = NULL; + } + return; + } + } +} + +void ScoreDoLogic(bool* Continue, bool* Error, Uint32 Milliseconds) +{ + AdvanceBackground(Milliseconds); +} + +void ScoreOutputFrame() +{ + DrawBackground(); + if (SDL_MUSTLOCK(Screen)) + SDL_LockSurface(Screen); + PrintStringOutline32(ScoreMessage, + SDL_MapRGB(Screen->format, 255, 255, 255), + SDL_MapRGB(Screen->format, 0, 0, 0), + Screen->pixels, + Screen->pitch, + 0, + 0, + SCREEN_WIDTH, + SCREEN_HEIGHT, + CENTER, + MIDDLE); + if (SDL_MUSTLOCK(Screen)) + SDL_UnlockSurface(Screen); + + SDL_Flip(Screen); +} + +void ToScore(uint32_t Score) +{ + if (ScoreMessage != NULL) + { + free(ScoreMessage); + ScoreMessage = NULL; + } + int Length = 2, NewLength; + ScoreMessage = malloc(Length); + + while ((NewLength = snprintf(ScoreMessage, Length, "GAME OVER\n\nYour score was %" PRIu32 "\n\nPress %s to play again\nor %s to exit", Score, GetEnterGamePrompt(), GetExitGamePrompt())) >= Length) + { + Length = NewLength + 1; + ScoreMessage = realloc(ScoreMessage, Length); + } + + GatherInput = ScoreGatherInput; + DoLogic = ScoreDoLogic; + OutputFrame = ScoreOutputFrame; +} diff --git a/score.h b/score.h new file mode 100644 index 0000000..3d5f966 --- /dev/null +++ b/score.h @@ -0,0 +1,27 @@ +/* + * Ativayeban, score screen header + * Copyright (C) 2014 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _SCORE_H_ +#define _SCORE_H_ + +#include + +extern void ToScore(uint32_t Score); + +#endif /* !defined(_SCORE_H_) */ diff --git a/text.c b/text.c new file mode 100644 index 0000000..006634c --- /dev/null +++ b/text.c @@ -0,0 +1,272 @@ +/* + * Ativayeban, text rendering code file + * Copyright (C) 2013 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include + +#include "text.h" +#include "unifont.h" + +static uint32_t CutString(const char* String, const uint32_t MaxWidth, + struct StringCut* Cuts, uint32_t CutsAllocated) +{ + uint32_t Cut = 0; + uint32_t CutStart = 0, Cur = 0, CutWidth = 0; + uint32_t LastSpace = -1; + bool SpaceInCut = false; + while (String[Cur] != '\0') + { + if (String[Cur] != '\n') + { + if (String[Cur] == ' ') + { + LastSpace = Cur; + SpaceInCut = true; + } + CutWidth += _font_width[(uint8_t) String[Cur]]; + } + + if (String[Cur] == '\n' || CutWidth > MaxWidth) + { + if (Cut < CutsAllocated) + Cuts[Cut].Start = CutStart; + if (String[Cur] == '\n') + { + if (Cut < CutsAllocated) + Cuts[Cut].End = Cur; + } + else if (CutWidth > MaxWidth) + { + if (SpaceInCut) + { + if (Cut < CutsAllocated) + Cuts[Cut].End = LastSpace; + Cur = LastSpace; + } + else + { + if (Cut < CutsAllocated) + Cuts[Cut].End = Cur; + Cur--; // Next iteration redoes this character + } + } + CutStart = Cur + 1; + CutWidth = 0; + SpaceInCut = false; + Cut++; + } + Cur++; + } + + if (Cut < CutsAllocated) + { + Cuts[Cut].Start = CutStart; + Cuts[Cut].End = Cur; + } + return Cut + 1; +} + +uint32_t GetSectionRenderedWidth(const char* String, const uint32_t Start, const uint32_t End) +{ + uint32_t Result = 0, i; + for (i = Start; i < End; i++) + Result += _font_width[(uint8_t) String[i]]; + return Result; +} + +void PrintString16(const char* String, uint16_t TextColor, + void* Dest, uint32_t DestPitch, uint32_t X, uint32_t Y, uint32_t Width, uint32_t Height, + enum HorizontalAlignment HorizontalAlignment, enum VerticalAlignment VerticalAlignment) +{ + struct StringCut* Cuts = malloc((Height / _font_height) * sizeof(struct StringCut)); + uint32_t CutCount = CutString(String, Width, Cuts, Height / _font_height), Cut; + if (CutCount > Height / _font_height) + CutCount = Height / _font_height; + + for (Cut = 0; Cut < CutCount; Cut++) + { + uint32_t TextWidth = GetSectionRenderedWidth(String, Cuts[Cut].Start, Cuts[Cut].End); + uint32_t LineX, LineY; + switch (HorizontalAlignment) + { + case LEFT: LineX = X; break; + case CENTER: LineX = X + (Width - TextWidth) / 2; break; + case RIGHT: LineX = (X + Width) - TextWidth; break; + default: LineX = 0; /* shouldn't happen */ break; + } + switch (VerticalAlignment) + { + case TOP: + LineY = Y + Cut * _font_height; + break; + case MIDDLE: + LineY = Y + (Height - CutCount * _font_height) / 2 + Cut * _font_height; + break; + case BOTTOM: + LineY = (Y + Height) - (CutCount - Cut) * _font_height; + break; + default: + LineY = 0; /* shouldn't happen */ + break; + } + + uint32_t Cur; + for (Cur = Cuts[Cut].Start; Cur < Cuts[Cut].End; Cur++) + { + uint32_t glyph_offset = (uint32_t) String[Cur] * _font_height; + uint32_t glyph_width = _font_width[(uint8_t) String[Cur]]; + uint32_t glyph_column, glyph_row; + uint16_t current_halfword; + + for(glyph_row = 0; glyph_row < _font_height; glyph_row++, glyph_offset++) + { + current_halfword = _font_bits[glyph_offset]; + for (glyph_column = 0; glyph_column < glyph_width; glyph_column++) + { + if ((current_halfword >> (15 - glyph_column)) & 0x01) + *(uint16_t*) ((uint8_t*) Dest + (LineY + glyph_row) * DestPitch + (LineX + glyph_column) * sizeof(uint16_t)) = TextColor; + } + } + + LineX += glyph_width; + } + } + + free(Cuts); +} + +void PrintString32(const char* String, uint32_t TextColor, + void* Dest, uint32_t DestPitch, uint32_t X, uint32_t Y, uint32_t Width, uint32_t Height, + enum HorizontalAlignment HorizontalAlignment, enum VerticalAlignment VerticalAlignment) +{ + struct StringCut* Cuts = malloc((Height / _font_height) * sizeof(struct StringCut)); + uint32_t CutCount = CutString(String, Width, Cuts, Height / _font_height), Cut; + if (CutCount > Height / _font_height) + CutCount = Height / _font_height; + + for (Cut = 0; Cut < CutCount; Cut++) + { + uint32_t TextWidth = GetSectionRenderedWidth(String, Cuts[Cut].Start, Cuts[Cut].End); + uint32_t LineX, LineY; + switch (HorizontalAlignment) + { + case LEFT: LineX = X; break; + case CENTER: LineX = X + (Width - TextWidth) / 2; break; + case RIGHT: LineX = (X + Width) - TextWidth; break; + default: LineX = 0; /* shouldn't happen */ break; + } + switch (VerticalAlignment) + { + case TOP: + LineY = Y + Cut * _font_height; + break; + case MIDDLE: + LineY = Y + (Height - CutCount * _font_height) / 2 + Cut * _font_height; + break; + case BOTTOM: + LineY = (Y + Height) - (CutCount - Cut) * _font_height; + break; + default: + LineY = 0; /* shouldn't happen */ + break; + } + + uint32_t Cur; + for (Cur = Cuts[Cut].Start; Cur < Cuts[Cut].End; Cur++) + { + uint32_t glyph_offset = (uint32_t) String[Cur] * _font_height; + uint32_t glyph_width = _font_width[(uint8_t) String[Cur]]; + uint32_t glyph_column, glyph_row; + uint16_t current_halfword; + + for(glyph_row = 0; glyph_row < _font_height; glyph_row++, glyph_offset++) + { + current_halfword = _font_bits[glyph_offset]; + for (glyph_column = 0; glyph_column < glyph_width; glyph_column++) + { + if ((current_halfword >> (15 - glyph_column)) & 0x01) + *(uint32_t*) ((uint8_t*) Dest + (LineY + glyph_row) * DestPitch + (LineX + glyph_column) * sizeof(uint32_t)) = TextColor; + } + } + + LineX += glyph_width; + } + } + + free(Cuts); +} + +uint32_t GetRenderedWidth(const char* str) +{ + struct StringCut* Cuts = malloc(sizeof(struct StringCut)); + uint32_t CutCount = CutString(str, UINT32_MAX, Cuts, 1); + if (CutCount > 1) + { + Cuts = realloc(Cuts, CutCount * sizeof(struct StringCut)); + CutString(str, UINT32_MAX, Cuts, CutCount); + } + + uint32_t Result = 0, LineWidth, Cut; + for (Cut = 0; Cut < CutCount; Cut++) + { + LineWidth = 0; + uint32_t Cur; + for (Cur = Cuts[Cut].Start; Cur < Cuts[Cut].End; Cur++) + { + LineWidth += _font_width[(uint8_t) str[Cur]]; + } + if (LineWidth > Result) + Result = LineWidth; + } + + free(Cuts); + + return Result; +} + +uint32_t GetRenderedHeight(const char* str) +{ + return CutString(str, UINT32_MAX, NULL, 0) * _font_height; +} + +void PrintStringOutline16(const char* String, uint16_t TextColor, uint16_t OutlineColor, + void* Dest, uint32_t DestPitch, uint32_t X, uint32_t Y, uint32_t Width, uint32_t Height, + enum HorizontalAlignment HorizontalAlignment, enum VerticalAlignment VerticalAlignment) +{ + uint32_t sx, sy; + for (sx = 0; sx <= 2; sx++) + for (sy = 0; sy <= 2; sy++) + if (!(sx == 1 && sy == 1)) + PrintString16(String, OutlineColor, Dest, DestPitch, X + sx, Y + sy, Width - 2, Height - 2, HorizontalAlignment, VerticalAlignment); + PrintString16(String, TextColor, Dest, DestPitch, X + 1, Y + 1, Width - 2, Height - 2, HorizontalAlignment, VerticalAlignment); +} + +void PrintStringOutline32(const char* String, uint32_t TextColor, uint32_t OutlineColor, + void* Dest, uint32_t DestPitch, uint32_t X, uint32_t Y, uint32_t Width, uint32_t Height, + enum HorizontalAlignment HorizontalAlignment, enum VerticalAlignment VerticalAlignment) +{ + uint32_t sx, sy; + for (sx = 0; sx <= 2; sx++) + for (sy = 0; sy <= 2; sy++) + if (!(sx == 1 && sy == 1)) + PrintString32(String, OutlineColor, Dest, DestPitch, X + sx, Y + sy, Width - 2, Height - 2, HorizontalAlignment, VerticalAlignment); + PrintString32(String, TextColor, Dest, DestPitch, X + 1, Y + 1, Width - 2, Height - 2, HorizontalAlignment, VerticalAlignment); +} + diff --git a/text.h b/text.h new file mode 100644 index 0000000..8cfa86b --- /dev/null +++ b/text.h @@ -0,0 +1,62 @@ +/* + * Ativayeban, text rendering header + * Copyright (C) 2013 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _TEXT_H_ +#define _TEXT_H_ + +#include + +enum HorizontalAlignment { + LEFT, + CENTER, + RIGHT +}; + +enum VerticalAlignment { + TOP, + MIDDLE, + BOTTOM +}; + +struct StringCut { + uint32_t Start; // Starting character index of the cut, inclusive. + uint32_t End; // Ending character index of the cut, exclusive. +}; + +void PrintString16(const char* String, uint16_t TextColor, + void* Dest, uint32_t DestPitch, uint32_t X, uint32_t Y, uint32_t Width, uint32_t Height, + enum HorizontalAlignment HorizontalAlignment, enum VerticalAlignment VerticalAlignment); + +void PrintStringOutline16(const char* String, uint16_t TextColor, uint16_t OutlineColor, + void* Dest, uint32_t DestPitch, uint32_t X, uint32_t Y, uint32_t Width, uint32_t Height, + enum HorizontalAlignment HorizontalAlignment, enum VerticalAlignment VerticalAlignment); + +void PrintString32(const char* String, uint32_t TextColor, + void* Dest, uint32_t DestPitch, uint32_t X, uint32_t Y, uint32_t Width, uint32_t Height, + enum HorizontalAlignment HorizontalAlignment, enum VerticalAlignment VerticalAlignment); + +void PrintStringOutline32(const char* String, uint32_t TextColor, uint32_t OutlineColor, + void* Dest, uint32_t DestPitch, uint32_t X, uint32_t Y, uint32_t Width, uint32_t Height, + enum HorizontalAlignment HorizontalAlignment, enum VerticalAlignment VerticalAlignment); + +extern uint32_t GetRenderedWidth(const char* str); + +extern uint32_t GetRenderedHeight(const char* str); + +#endif /* !defined(_TEXT_H_) */ diff --git a/title.c b/title.c new file mode 100644 index 0000000..0b088b3 --- /dev/null +++ b/title.c @@ -0,0 +1,113 @@ +/* + * Ativayeban, title screen code file + * Copyright (C) 2014 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include + +#include "SDL.h" +#include "SDL_image.h" + +#include "main.h" +#include "init.h" +#include "platform.h" +#include "game.h" +#include "title.h" +#include "bg.h" +#include "text.h" + +static bool WaitingForRelease = false; +static char* WelcomeMessage = NULL; + +void TitleScreenGatherInput(bool* Continue) +{ + SDL_Event ev; + + while (SDL_PollEvent(&ev)) + { + if (IsEnterGamePressingEvent(&ev)) + WaitingForRelease = true; + else if (IsEnterGameReleasingEvent(&ev)) + { + WaitingForRelease = false; + ToGame(); + if (WelcomeMessage != NULL) + { + free(WelcomeMessage); + WelcomeMessage = NULL; + } + return; + } + else if (IsExitGameEvent(&ev)) + { + *Continue = false; + if (WelcomeMessage != NULL) + { + free(WelcomeMessage); + WelcomeMessage = NULL; + } + return; + } + } +} + +void TitleScreenDoLogic(bool* Continue, bool* Error, Uint32 Milliseconds) +{ + AdvanceBackground(Milliseconds); +} + +void TitleScreenOutputFrame() +{ + DrawBackground(); + + if (SDL_MUSTLOCK(Screen)) + SDL_LockSurface(Screen); + PrintStringOutline32(WelcomeMessage, + SDL_MapRGB(Screen->format, 255, 255, 255), + SDL_MapRGB(Screen->format, 0, 0, 0), + Screen->pixels, + Screen->pitch, + 0, + 0, + SCREEN_WIDTH, + SCREEN_HEIGHT, + CENTER, + MIDDLE); + if (SDL_MUSTLOCK(Screen)) + SDL_UnlockSurface(Screen); + + SDL_Flip(Screen); +} + +void ToTitleScreen(void) +{ + if (WelcomeMessage == NULL) + { + int Length = 2, NewLength; + WelcomeMessage = malloc(Length); + while ((NewLength = snprintf(WelcomeMessage, Length, "Welcome to ATIVAYEBAN\n\nPress %s to play\nor %s to exit\n\nIn-game:\n%s to move around\n%s to pause\n%s to exit", GetEnterGamePrompt(), GetExitGamePrompt(), GetMovementPrompt(), GetPausePrompt(), GetExitGamePrompt())) >= Length) + { + Length = NewLength + 1; + WelcomeMessage = realloc(WelcomeMessage, Length); + } + } + + GatherInput = TitleScreenGatherInput; + DoLogic = TitleScreenDoLogic; + OutputFrame = TitleScreenOutputFrame; +} diff --git a/title.h b/title.h new file mode 100644 index 0000000..3889370 --- /dev/null +++ b/title.h @@ -0,0 +1,27 @@ +/* + * Ativayeban, title screen header + * Copyright (C) 2014 Nebuleon Fumika + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _TITLE_H_ +#define _TITLE_H_ + +#include + +extern void ToTitleScreen(void); + +#endif /* !defined(_TITLE_H_) */ diff --git a/unifont.c b/unifont.c new file mode 100644 index 0000000..ab00054 --- /dev/null +++ b/unifont.c @@ -0,0 +1,9773 @@ +/* + * GNU Unifont, font data + * Copyright (C) 1998 Roman Czyborra + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* Generated by convbdf on Sun Sep 22 19:55:38 2013. */ + +/* Font information: + name: unifont + facename: -gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1 + w x h: 16x16 + size: 256 + ascent: 14 + descent: 2 + depth: 0 + first char: 0 (0x00) + last char: 255 (0xff) + default char: 32 (0x20) + proportional: yes + +*/ + +const unsigned char _font_height = 16; + +/* Font character bitmap data. */ +const unsigned short _font_bits[] = { + +/* Character 0 (0x00): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | * * * * * | + | ** * * * * | + | * ** * * * | + | * * ** **** | + | | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4a50, +0x6a50, +0x5a50, +0x499e, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 1 (0x01): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** ** * * | + | * * * * * | + | ** * * **** | + | * * * * * | + | *** ** * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3992, +0x4252, +0x325e, +0x0a52, +0x7192, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 2 (0x02): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** *** * * | + | * * * * | + | ** * ** | + | * * * * | + | *** * * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3ba4, +0x4124, +0x3118, +0x0924, +0x7124, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 3 (0x03): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | **** *** * * | + | * * * * | + | **** * ** | + | * * * * | + | **** * * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7ba4, +0x4124, +0x7918, +0x4124, +0x7924, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 4 (0x04): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | **** ** ***** | + | * * * * | + | **** * * * | + | * * * * | + | **** ** * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x79be, +0x4248, +0x7a48, +0x4248, +0x7988, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 5 (0x05): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | **** * * ** | + | * * * * * | + | **** ** * * * | + | * * ** * ** | + | **** * * *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7a4c, +0x4252, +0x7b52, +0x42d6, +0x7a4e, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 6 (0x06): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | ** ** * * | + | * * * * * | + | **** * ** | + | * * * * * | + | * * ** * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x31a4, +0x4a28, +0x7a30, +0x4a28, +0x49a4, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 7 (0x07): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** **** * | + | * * * * | + | *** **** * | + | * * * * | + | *** **** **** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x73d0, +0x4a10, +0x73d0, +0x4a10, +0x73de, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 8 (0x08): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | **** *** | + | * * * | + | **** ** | + | * * * | + | **** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x78e0, +0x4500, +0x78c0, +0x4420, +0x79c0, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 9 (0x09): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | * * ***** | + | * * * | + | ***** * | + | * * * | + | * * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x45f0, +0x4440, +0x7c40, +0x4440, +0x4440, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 10 (0x0a): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | * ***** | + | * * | + | * ***** | + | * * | + | ***** * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x41f0, +0x4100, +0x41f0, +0x4100, +0x7d00, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 11 (0x0b): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | * * ***** | + | * * * | + | * * * | + | * * * | + | * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x45f0, +0x4440, +0x4440, +0x2840, +0x1040, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 12 (0x0c): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | ***** ***** | + | * * | + | ***** ***** | + | * * | + | * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7df0, +0x4100, +0x7df0, +0x4100, +0x4100, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 13 (0x0d): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | **** **** | + | * * * | + | * **** | + | * * * | + | **** * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3de0, +0x4110, +0x41e0, +0x4120, +0x3d10, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 14 (0x0e): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | **** *** | + | * * * | + | *** * * | + | * * * | + | **** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3ce0, +0x4110, +0x3910, +0x0510, +0x78e0, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 15 (0x0f): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | **** ***** | + | * * | + | *** * | + | * * | + | **** ***** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3df0, +0x4040, +0x3840, +0x0440, +0x79f0, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 16 (0x10): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** * *** | + | * * * * | + | * * * *** | + | * * * * | + | *** *** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7238, +0x4a20, +0x4a38, +0x4a20, +0x73b8, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 17 (0x11): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** ** * | + | * * * ** | + | * * * * | + | * * * * | + | *** ** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7188, +0x4a18, +0x4a08, +0x4a08, +0x719c, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 18 (0x12): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** ** ** | + | * * * * | + | * * * * | + | * * * * | + | *** ** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7198, +0x4a04, +0x4a08, +0x4a10, +0x719c, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 19 (0x13): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** ** ** | + | * * * * | + | * * * ** | + | * * * * | + | *** ** ** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7198, +0x4a04, +0x4a18, +0x4a04, +0x7198, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 20 (0x14): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** ** * | + | * * * ** | + | * * * * * | + | * * * *** | + | *** ** * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7184, +0x4a0c, +0x4a14, +0x4a1c, +0x7184, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 21 (0x15): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | * * ** * * | + | ** * * * * * | + | ** * * * ** | + | * ** **** * * | + | * * * * * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4992, +0x6a54, +0x6a58, +0x5bd4, +0x4a52, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 22 (0x16): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | ** * * * * | + | * * * ** * | + | ** * * ** | + | * * * * | + | *** * * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3452, +0x429a, +0x3116, +0x0912, +0x7112, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 23 (0x17): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | **** *** *** | + | * * * * | + | **** * *** | + | * * * * | + | **** * *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7bb8, +0x4124, +0x7938, +0x4124, +0x7938, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 24 (0x18): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | ** ** * * | + | * * * ** * | + | * **** * ** | + | * * * * * | + | ** * * * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3324, +0x44b4, +0x47ac, +0x44a4, +0x34a4, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 25 (0x19): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | ***** * * | + | * ** ** | + | ***** * * * | + | * * * | + | ***** * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7d10, +0x41b0, +0x7d50, +0x4110, +0x7d10, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 26 (0x1a): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** * * *** | + | * * * * * | + | ** * * *** | + | * * * * * | + | *** ** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3a5c, +0x4252, +0x325c, +0x0a52, +0x719c, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 27 (0x1b): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | **** *** *** | + | * * * | + | **** ** * | + | * * * | + | **** *** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x79ce, +0x4210, +0x7990, +0x4050, +0x7b8e, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 28 (0x1c): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | **** *** | + | * * | + | **** ** | + | * * | + | * *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x79c0, +0x4200, +0x7980, +0x4040, +0x4380, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 29 (0x1d): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** *** | + | * * | + | * ** ** | + | * * * | + | *** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x39c0, +0x4200, +0x5980, +0x4840, +0x3b80, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 30 (0x1e): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** *** | + | * * * | + | *** ** | + | * * * | + | * * *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x71c0, +0x4a00, +0x7180, +0x5040, +0x4b80, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 31 (0x1f): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | * * *** | + | * * * | + | * * ** | + | * * * | + | ** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x49c0, +0x4a00, +0x4980, +0x4840, +0x3380, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 32 (0x20): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 33 (0x21): + width 8 + +--------+ + | | + | | + | | + | | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0000, +0x0800, +0x0800, +0x0000, +0x0000, + +/* Character 34 (0x22): + width 8 + +--------+ + | | + | | + | * * | + | * * | + | * * | + | * * | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x2200, +0x2200, +0x2200, +0x2200, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 35 (0x23): + width 8 + +--------+ + | | + | | + | | + | | + | * * | + | * * | + | * * | + | ****** | + | * * | + | * * | + | ****** | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x1200, +0x1200, +0x1200, +0x7e00, +0x2400, +0x2400, +0x7e00, +0x4800, +0x4800, +0x4800, +0x0000, +0x0000, + +/* Character 36 (0x24): + width 8 + +--------+ + | | + | | + | | + | | + | * | + | ***** | + | * * *| + | * * | + | *** | + | *** | + | * *| + | * * *| + | ***** | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0800, +0x3e00, +0x4900, +0x4800, +0x3800, +0x0e00, +0x0900, +0x4900, +0x3e00, +0x0800, +0x0000, +0x0000, + +/* Character 37 (0x25): + width 8 + +--------+ + | | + | | + | | + | | + | ** *| + | * * * | + | * * * | + | ** * | + | * | + | * | + | * ** | + | * * *| + | * * *| + | * ** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3100, +0x4a00, +0x4a00, +0x3400, +0x0800, +0x0800, +0x1600, +0x2900, +0x2900, +0x4600, +0x0000, +0x0000, + +/* Character 38 (0x26): + width 8 + +--------+ + | | + | | + | | + | | + | *** | + | * * | + | * * | + | * * | + | *** | + | *** *| + | * * *| + | * * | + | * ** | + | *** *| + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x1c00, +0x2200, +0x2200, +0x2200, +0x1c00, +0x3900, +0x4500, +0x4200, +0x4600, +0x3900, +0x0000, +0x0000, + +/* Character 39 (0x27): + width 8 + +--------+ + | | + | | + | * | + | * | + | * | + | * | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0800, +0x0800, +0x0800, +0x0800, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 40 (0x28): + width 8 + +--------+ + | | + | | + | | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0400, +0x0800, +0x0800, +0x1000, +0x1000, +0x1000, +0x1000, +0x1000, +0x1000, +0x0800, +0x0800, +0x0400, +0x0000, + +/* Character 41 (0x29): + width 8 + +--------+ + | | + | | + | | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x2000, +0x1000, +0x1000, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x1000, +0x1000, +0x2000, +0x0000, + +/* Character 42 (0x2a): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | * | + | * * *| + | * * * | + | *** | + | * * * | + | * * *| + | * | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0800, +0x4900, +0x2a00, +0x1c00, +0x2a00, +0x4900, +0x0800, +0x0000, +0x0000, +0x0000, + +/* Character 43 (0x2b): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | * | + | * | + | * | + | *******| + | * | + | * | + | * | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0800, +0x0800, +0x0800, +0x7f00, +0x0800, +0x0800, +0x0800, +0x0000, +0x0000, +0x0000, + +/* Character 44 (0x2c): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | ** | + | * | + | * | + | * | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x1800, +0x0800, +0x0800, +0x1000, + +/* Character 45 (0x2d): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | | + | | + | | + | ****** | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7e00, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 46 (0x2e): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | ** | + | ** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x1800, +0x1800, +0x0000, +0x0000, + +/* Character 47 (0x2f): + width 8 + +--------+ + | | + | | + | | + | | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0200, +0x0200, +0x0400, +0x0800, +0x0800, +0x1000, +0x1000, +0x2000, +0x4000, +0x4000, +0x0000, +0x0000, + +/* Character 48 (0x30): + width 8 + +--------+ + | | + | | + | | + | | + | ** | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | ** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x1800, +0x2400, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x2400, +0x1800, +0x0000, +0x0000, + +/* Character 49 (0x31): + width 8 + +--------+ + | | + | | + | | + | | + | * | + | ** | + | * * | + | * | + | * | + | * | + | * | + | * | + | * | + | ***** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0800, +0x1800, +0x2800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x3e00, +0x0000, +0x0000, + +/* Character 50 (0x32): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + | * * | + | * | + | ** | + | * | + | * | + | * | + | * | + | ****** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x0200, +0x0c00, +0x1000, +0x2000, +0x4000, +0x4000, +0x7e00, +0x0000, +0x0000, + +/* Character 51 (0x33): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + | * * | + | * | + | *** | + | * | + | * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x0200, +0x1c00, +0x0200, +0x0200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 52 (0x34): + width 8 + +--------+ + | | + | | + | | + | | + | * | + | ** | + | * * | + | * * | + | * * | + | * * | + | ****** | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0400, +0x0c00, +0x1400, +0x2400, +0x4400, +0x4400, +0x7e00, +0x0400, +0x0400, +0x0400, +0x0000, +0x0000, + +/* Character 53 (0x35): + width 8 + +--------+ + | | + | | + | | + | | + | ****** | + | * | + | * | + | * | + | ***** | + | * | + | * | + | * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x7e00, +0x4000, +0x4000, +0x4000, +0x7c00, +0x0200, +0x0200, +0x0200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 54 (0x36): + width 8 + +--------+ + | | + | | + | | + | | + | *** | + | * | + | * | + | * | + | ***** | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x1c00, +0x2000, +0x4000, +0x4000, +0x7c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 55 (0x37): + width 8 + +--------+ + | | + | | + | | + | | + | ****** | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x7e00, +0x0200, +0x0200, +0x0400, +0x0400, +0x0400, +0x0800, +0x0800, +0x0800, +0x0800, +0x0000, +0x0000, + +/* Character 56 (0x38): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + | * * | + | * * | + | **** | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4200, +0x3c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 57 (0x39): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + | * * | + | * * | + | ***** | + | * | + | * | + | * | + | * | + | *** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4200, +0x3e00, +0x0200, +0x0200, +0x0200, +0x0400, +0x3800, +0x0000, +0x0000, + +/* Character 58 (0x3a): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | ** | + | ** | + | | + | | + | | + | ** | + | ** | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x1800, +0x1800, +0x0000, +0x0000, +0x0000, +0x1800, +0x1800, +0x0000, +0x0000, +0x0000, + +/* Character 59 (0x3b): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | ** | + | ** | + | | + | | + | | + | ** | + | * | + | * | + | * | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x1800, +0x1800, +0x0000, +0x0000, +0x0000, +0x1800, +0x0800, +0x0800, +0x1000, +0x0000, + +/* Character 60 (0x3c): + width 8 + +--------+ + | | + | | + | | + | | + | | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0200, +0x0400, +0x0800, +0x1000, +0x2000, +0x1000, +0x0800, +0x0400, +0x0200, +0x0000, +0x0000, + +/* Character 61 (0x3d): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | | + | ****** | + | | + | | + | | + | ****** | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7e00, +0x0000, +0x0000, +0x0000, +0x7e00, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 62 (0x3e): + width 8 + +--------+ + | | + | | + | | + | | + | | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4000, +0x2000, +0x1000, +0x0800, +0x0400, +0x0800, +0x1000, +0x2000, +0x4000, +0x0000, +0x0000, + +/* Character 63 (0x3f): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + | * * | + | * | + | * | + | * | + | * | + | | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x0200, +0x0400, +0x0800, +0x0800, +0x0000, +0x0800, +0x0800, +0x0000, +0x0000, + +/* Character 64 (0x40): + width 8 + +--------+ + | | + | | + | | + | | + | *** | + | * * | + | * * * | + | * * ** | + | * * * | + | * * * | + | * * * | + | * *** | + | * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x1c00, +0x2200, +0x4a00, +0x5600, +0x5200, +0x5200, +0x5200, +0x4e00, +0x2000, +0x1e00, +0x0000, +0x0000, + +/* Character 65 (0x41): + width 8 + +--------+ + | | + | | + | | + | | + | ** | + | * * | + | * * | + | * * | + | * * | + | ****** | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x1800, +0x2400, +0x2400, +0x4200, +0x4200, +0x7e00, +0x4200, +0x4200, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 66 (0x42): + width 8 + +--------+ + | | + | | + | | + | | + | ***** | + | * * | + | * * | + | * * | + | ***** | + | * * | + | * * | + | * * | + | * * | + | ***** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x7c00, +0x4200, +0x4200, +0x4200, +0x7c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x7c00, +0x0000, +0x0000, + +/* Character 67 (0x43): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + | * * | + | * | + | * | + | * | + | * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4000, +0x4000, +0x4000, +0x4000, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 68 (0x44): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x7800, +0x4400, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4400, +0x7800, +0x0000, +0x0000, + +/* Character 69 (0x45): + width 8 + +--------+ + | | + | | + | | + | | + | ****** | + | * | + | * | + | * | + | ***** | + | * | + | * | + | * | + | * | + | ****** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x7e00, +0x4000, +0x4000, +0x4000, +0x7c00, +0x4000, +0x4000, +0x4000, +0x4000, +0x7e00, +0x0000, +0x0000, + +/* Character 70 (0x46): + width 8 + +--------+ + | | + | | + | | + | | + | ****** | + | * | + | * | + | * | + | ***** | + | * | + | * | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x7e00, +0x4000, +0x4000, +0x4000, +0x7c00, +0x4000, +0x4000, +0x4000, +0x4000, +0x4000, +0x0000, +0x0000, + +/* Character 71 (0x47): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + | * * | + | * | + | * | + | * *** | + | * * | + | * * | + | * ** | + | *** * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4000, +0x4000, +0x4e00, +0x4200, +0x4200, +0x4600, +0x3a00, +0x0000, +0x0000, + +/* Character 72 (0x48): + width 8 + +--------+ + | | + | | + | | + | | + | * * | + | * * | + | * * | + | * * | + | ****** | + | * * | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x4200, +0x7e00, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 73 (0x49): + width 8 + +--------+ + | | + | | + | | + | | + | ***** | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | ***** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3e00, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x3e00, +0x0000, +0x0000, + +/* Character 74 (0x4a): + width 8 + +--------+ + | | + | | + | | + | | + | *****| + | * | + | * | + | * | + | * | + | * | + | * | + | * * | + | * * | + | *** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x1f00, +0x0400, +0x0400, +0x0400, +0x0400, +0x0400, +0x0400, +0x4400, +0x4400, +0x3800, +0x0000, +0x0000, + +/* Character 75 (0x4b): + width 8 + +--------+ + | | + | | + | | + | | + | * * | + | * * | + | * * | + | * * | + | ** | + | ** | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x4200, +0x4400, +0x4800, +0x5000, +0x6000, +0x6000, +0x5000, +0x4800, +0x4400, +0x4200, +0x0000, +0x0000, + +/* Character 76 (0x4c): + width 8 + +--------+ + | | + | | + | | + | | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | ****** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x4000, +0x4000, +0x4000, +0x4000, +0x4000, +0x4000, +0x4000, +0x4000, +0x4000, +0x7e00, +0x0000, +0x0000, + +/* Character 77 (0x4d): + width 8 + +--------+ + | | + | | + | | + | | + | * * | + | * * | + | ** ** | + | ** ** | + | * ** * | + | * ** * | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x4200, +0x4200, +0x6600, +0x6600, +0x5a00, +0x5a00, +0x4200, +0x4200, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 78 (0x4e): + width 8 + +--------+ + | | + | | + | | + | | + | * * | + | ** * | + | ** * | + | * * * | + | * * * | + | * * * | + | * * * | + | * ** | + | * ** | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x4200, +0x6200, +0x6200, +0x5200, +0x5200, +0x4a00, +0x4a00, +0x4600, +0x4600, +0x4200, +0x0000, +0x0000, + +/* Character 79 (0x4f): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 80 (0x50): + width 8 + +--------+ + | | + | | + | | + | | + | ***** | + | * * | + | * * | + | * * | + | ***** | + | * | + | * | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x7c00, +0x4200, +0x4200, +0x4200, +0x7c00, +0x4000, +0x4000, +0x4000, +0x4000, +0x4000, +0x0000, +0x0000, + +/* Character 81 (0x51): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * ** * | + | ** ** | + | **** | + | **| + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x5a00, +0x6600, +0x3c00, +0x0300, +0x0000, + +/* Character 82 (0x52): + width 8 + +--------+ + | | + | | + | | + | | + | ***** | + | * * | + | * * | + | * * | + | ***** | + | * * | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x7c00, +0x4200, +0x4200, +0x4200, +0x7c00, +0x4800, +0x4400, +0x4400, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 83 (0x53): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + | * * | + | * | + | ** | + | ** | + | * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4000, +0x3000, +0x0c00, +0x0200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 84 (0x54): + width 8 + +--------+ + | | + | | + | | + | | + | *******| + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x7f00, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0000, +0x0000, + +/* Character 85 (0x55): + width 8 + +--------+ + | | + | | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 86 (0x56): + width 8 + +--------+ + | | + | | + | | + | | + | * *| + | * *| + | * *| + | * * | + | * * | + | * * | + | * * | + | * * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x4100, +0x4100, +0x4100, +0x2200, +0x2200, +0x2200, +0x1400, +0x1400, +0x0800, +0x0800, +0x0000, +0x0000, + +/* Character 87 (0x57): + width 8 + +--------+ + | | + | | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * ** * | + | * ** * | + | ** ** | + | ** ** | + | * * | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x4200, +0x5a00, +0x5a00, +0x6600, +0x6600, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 88 (0x58): + width 8 + +--------+ + | | + | | + | | + | | + | * * | + | * * | + | * * | + | * * | + | ** | + | ** | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x4200, +0x4200, +0x2400, +0x2400, +0x1800, +0x1800, +0x2400, +0x2400, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 89 (0x59): + width 8 + +--------+ + | | + | | + | | + | | + | * *| + | * *| + | * * | + | * * | + | * * | + | * | + | * | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x4100, +0x4100, +0x2200, +0x2200, +0x1400, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0000, +0x0000, + +/* Character 90 (0x5a): + width 8 + +--------+ + | | + | | + | | + | | + | ****** | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | ****** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x7e00, +0x0200, +0x0200, +0x0400, +0x0800, +0x1000, +0x2000, +0x4000, +0x4000, +0x7e00, +0x0000, +0x0000, + +/* Character 91 (0x5b): + width 8 + +--------+ + | | + | | + | | + | *** | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | *** | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0e00, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0e00, +0x0000, + +/* Character 92 (0x5c): + width 8 + +--------+ + | | + | | + | | + | | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x4000, +0x4000, +0x2000, +0x1000, +0x1000, +0x0800, +0x0800, +0x0400, +0x0200, +0x0200, +0x0000, +0x0000, + +/* Character 93 (0x5d): + width 8 + +--------+ + | | + | | + | | + | *** | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | *** | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x7000, +0x1000, +0x1000, +0x1000, +0x1000, +0x1000, +0x1000, +0x1000, +0x1000, +0x1000, +0x1000, +0x7000, +0x0000, + +/* Character 94 (0x5e): + width 8 + +--------+ + | | + | | + | ** | + | * * | + | * * | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x1800, +0x2400, +0x4200, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 95 (0x5f): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | *******| + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7f00, +0x0000, + +/* Character 96 (0x60): + width 8 + +--------+ + | | + | * | + | * | + | * | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x2000, +0x1000, +0x0800, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 97 (0x61): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | **** | + | * * | + | * | + | ***** | + | * * | + | * * | + | * ** | + | *** * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x0200, +0x3e00, +0x4200, +0x4200, +0x4600, +0x3a00, +0x0000, +0x0000, + +/* Character 98 (0x62): + width 8 + +--------+ + | | + | | + | | + | * | + | * | + | * | + | * *** | + | ** * | + | * * | + | * * | + | * * | + | * * | + | ** * | + | * *** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x4000, +0x4000, +0x4000, +0x5c00, +0x6200, +0x4200, +0x4200, +0x4200, +0x4200, +0x6200, +0x5c00, +0x0000, +0x0000, + +/* Character 99 (0x63): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | **** | + | * * | + | * | + | * | + | * | + | * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4000, +0x4000, +0x4000, +0x4000, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 100 (0x64): + width 8 + +--------+ + | | + | | + | | + | * | + | * | + | * | + | *** * | + | * ** | + | * * | + | * * | + | * * | + | * * | + | * ** | + | *** * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0200, +0x0200, +0x0200, +0x3a00, +0x4600, +0x4200, +0x4200, +0x4200, +0x4200, +0x4600, +0x3a00, +0x0000, +0x0000, + +/* Character 101 (0x65): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | **** | + | * * | + | * * | + | ****** | + | * | + | * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x7e00, +0x4000, +0x4000, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 102 (0x66): + width 8 + +--------+ + | | + | | + | | + | ** | + | * | + | * | + | * | + | ***** | + | * | + | * | + | * | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0c00, +0x1000, +0x1000, +0x1000, +0x7c00, +0x1000, +0x1000, +0x1000, +0x1000, +0x1000, +0x1000, +0x0000, +0x0000, + +/* Character 103 (0x67): + width 8 + +--------+ + | | + | | + | | + | | + | | + | * | + | *** * | + | * * | + | * * | + | * * | + | *** | + | * | + | **** | + | * * | + | * * | + | **** | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0200, +0x3a00, +0x4400, +0x4400, +0x4400, +0x3800, +0x2000, +0x3c00, +0x4200, +0x4200, +0x3c00, + +/* Character 104 (0x68): + width 8 + +--------+ + | | + | | + | | + | * | + | * | + | * | + | * *** | + | ** * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x4000, +0x4000, +0x4000, +0x5c00, +0x6200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 105 (0x69): + width 8 + +--------+ + | | + | | + | | + | * | + | * | + | | + | ** | + | * | + | * | + | * | + | * | + | * | + | * | + | ***** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0800, +0x0800, +0x0000, +0x1800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x3e00, +0x0000, +0x0000, + +/* Character 106 (0x6a): + width 8 + +--------+ + | | + | | + | | + | * | + | * | + | | + | ** | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * * | + | ** | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0400, +0x0400, +0x0000, +0x0c00, +0x0400, +0x0400, +0x0400, +0x0400, +0x0400, +0x0400, +0x0400, +0x4800, +0x3000, + +/* Character 107 (0x6b): + width 8 + +--------+ + | | + | | + | | + | | + | * | + | * | + | * * | + | * * | + | * * | + | ** | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x4000, +0x4000, +0x4400, +0x4800, +0x5000, +0x6000, +0x5000, +0x4800, +0x4400, +0x4200, +0x0000, +0x0000, + +/* Character 108 (0x6c): + width 8 + +--------+ + | | + | | + | | + | | + | ** | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | ***** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x1800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x3e00, +0x0000, +0x0000, + +/* Character 109 (0x6d): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | *** ** | + | * * *| + | * * *| + | * * *| + | * * *| + | * * *| + | * * *| + | * * *| + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7600, +0x4900, +0x4900, +0x4900, +0x4900, +0x4900, +0x4900, +0x4900, +0x0000, +0x0000, + +/* Character 110 (0x6e): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | * *** | + | ** * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x5c00, +0x6200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 111 (0x6f): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | **** | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 112 (0x70): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | * *** | + | ** * | + | * * | + | * * | + | * * | + | * * | + | ** * | + | * *** | + | * | + | * | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x5c00, +0x6200, +0x4200, +0x4200, +0x4200, +0x4200, +0x6200, +0x5c00, +0x4000, +0x4000, + +/* Character 113 (0x71): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | *** * | + | * ** | + | * * | + | * * | + | * * | + | * * | + | * ** | + | *** * | + | * | + | * | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3a00, +0x4600, +0x4200, +0x4200, +0x4200, +0x4200, +0x4600, +0x3a00, +0x0200, +0x0200, + +/* Character 114 (0x72): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | * *** | + | ** * | + | * * | + | * | + | * | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x5c00, +0x6200, +0x4200, +0x4000, +0x4000, +0x4000, +0x4000, +0x4000, +0x0000, +0x0000, + +/* Character 115 (0x73): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | **** | + | * * | + | * | + | ** | + | ** | + | * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4000, +0x3000, +0x0c00, +0x0200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 116 (0x74): + width 8 + +--------+ + | | + | | + | | + | | + | * | + | * | + | ***** | + | * | + | * | + | * | + | * | + | * | + | * | + | ** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x1000, +0x1000, +0x7c00, +0x1000, +0x1000, +0x1000, +0x1000, +0x1000, +0x1000, +0x0c00, +0x0000, +0x0000, + +/* Character 117 (0x75): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * ** | + | *** * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4600, +0x3a00, +0x0000, +0x0000, + +/* Character 118 (0x76): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | ** | + | ** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x2400, +0x2400, +0x2400, +0x1800, +0x1800, +0x0000, +0x0000, + +/* Character 119 (0x77): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | * *| + | * * *| + | * * *| + | * * *| + | * * *| + | * * *| + | * * *| + | ** ** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4100, +0x4900, +0x4900, +0x4900, +0x4900, +0x4900, +0x4900, +0x3600, +0x0000, +0x0000, + +/* Character 120 (0x78): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | * * | + | * * | + | * * | + | ** | + | ** | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4200, +0x4200, +0x2400, +0x1800, +0x1800, +0x2400, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 121 (0x79): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * ** | + | ** * | + | * | + | * | + | **** | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x2600, +0x1a00, +0x0200, +0x0200, +0x3c00, + +/* Character 122 (0x7a): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | ****** | + | * | + | * | + | * | + | * | + | * | + | * | + | ****** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7e00, +0x0200, +0x0400, +0x0800, +0x1000, +0x2000, +0x4000, +0x7e00, +0x0000, +0x0000, + +/* Character 123 (0x7b): + width 8 + +--------+ + | | + | | + | | + | ** | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | ** | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0c00, +0x1000, +0x1000, +0x0800, +0x0800, +0x1000, +0x1000, +0x0800, +0x0800, +0x1000, +0x1000, +0x0c00, +0x0000, + +/* Character 124 (0x7c): + width 8 + +--------+ + | | + | | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + +--------+ */ +0x0000, +0x0000, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, + +/* Character 125 (0x7d): + width 8 + +--------+ + | | + | | + | | + | ** | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | ** | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x3000, +0x0800, +0x0800, +0x1000, +0x1000, +0x0800, +0x0800, +0x1000, +0x1000, +0x0800, +0x0800, +0x3000, +0x0000, + +/* Character 126 (0x7e): + width 8 + +--------+ + | | + | | + | | + | ** *| + | * * *| + | * ** | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x3100, +0x4900, +0x4600, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 127 (0x7f): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** **** * | + | * * * * | + | * * **** * | + | * * * * | + | *** **** **** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x73d0, +0x4a10, +0x4bd0, +0x4a10, +0x73de, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 128 (0x80): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** ** *** | + | * * * * * * | + | *** **** * * | + | * * * * * | + | * * * *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x719c, +0x4a52, +0x73d2, +0x4252, +0x425c, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 129 (0x81): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | * * ** *** | + | * * * * * * | + | **** * * *** | + | * * * * * | + | * * ** * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x499c, +0x4a52, +0x7a5c, +0x4a50, +0x4990, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 130 (0x82): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** *** * * | + | * * * * * * | + | *** *** **** | + | * * * * * | + | *** * * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7392, +0x4a52, +0x739e, +0x4a12, +0x7212, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 131 (0x83): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | * * *** * * | + | ** * * * * * | + | * ** *** **** | + | * * * * * * | + | * * *** * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4b92, +0x6a52, +0x5b9e, +0x4a52, +0x4b92, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 132 (0x84): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** * * *** | + | * ** * * * | + | * * ** * * | + | * * * * * | + | *** * * *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x74b8, +0x26a4, +0x25a4, +0x24a4, +0x74b8, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 133 (0x85): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | * * **** * | + | ** * * * | + | * ** **** * | + | * * * * | + | * * **** **** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4bd0, +0x6a10, +0x5bd0, +0x4a10, +0x4bde, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 134 (0x86): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** *** ** | + | * * * * | + | ** ** **** | + | * * * * | + | *** *** * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x39cc, +0x4212, +0x319e, +0x0852, +0x7392, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 135 (0x87): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | **** *** ** | + | * * * * | + | **** ** **** | + | * * * * | + | **** *** * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x79cc, +0x4212, +0x799e, +0x4052, +0x7b92, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 136 (0x88): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | * * *** *** | + | * * * * | + | **** * ** | + | * * * * | + | * * * *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4b9c, +0x4920, +0x7918, +0x4904, +0x4938, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 137 (0x89): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | * * *** *** | + | * * * * | + | **** * * | + | * * * * | + | * * * ** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4bb8, +0x4908, +0x7908, +0x4908, +0x4930, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 138 (0x8a): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | * * *** ** | + | * * * * | + | * * * * | + | * * * * | + | * * ** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x45cc, +0x4490, +0x4488, +0x2884, +0x1098, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 139 (0x8b): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** * *** | + | * * * * * | + | *** * * * | + | * * * * | + | * **** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x721c, +0x4a12, +0x7212, +0x4212, +0x43dc, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 140 (0x8c): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** * * * | + | * * * * * | + | *** * * * | + | * * * * | + | * **** ** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7212, +0x4a12, +0x7212, +0x4212, +0x43cc, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 141 (0x8d): + width 8 + +--------+ + | | + | | + | | + | | + | | + | *** * | + | * * * | + | *** * | + | * * * | + | * * * | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7200, +0x4a00, +0x7200, +0x5200, +0x4a00, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 142 (0x8e): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** *** *** | + | * * * | + | ** ** ** | + | * * * | + | *** *** **** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x39dc, +0x4202, +0x318c, +0x0850, +0x739e, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 143 (0x8f): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** *** *** | + | * * * | + | ** ** ** | + | * * * | + | *** *** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x39dc, +0x4202, +0x318c, +0x0842, +0x739c, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 144 (0x90): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** *** *** | + | * * * * | + | * * * ** | + | * * * * | + | *** *** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x71ce, +0x4a10, +0x4a0c, +0x4a02, +0x71dc, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 145 (0x91): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** * * * | + | * * * * ** | + | *** * * * | + | * * * * | + | * ** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7244, +0x4a4c, +0x7244, +0x4244, +0x418e, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 146 (0x92): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** * * *** | + | * * * * * | + | *** * * ** | + | * * * * | + | * ** **** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x725c, +0x4a42, +0x724c, +0x4250, +0x419e, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 147 (0x93): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** *** *** | + | * * * | + | ** * ** | + | * * * | + | *** * *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3b9c, +0x4120, +0x3118, +0x0904, +0x7138, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 148 (0x94): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** *** * * | + | * * * * | + | * * **** | + | * * * * | + | *** *** * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x39d2, +0x4212, +0x421e, +0x4212, +0x39d2, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 149 (0x95): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | * * * * | + | ** ** * * | + | * * * * * * | + | * * ** ** | + | * * * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4510, +0x6d10, +0x5550, +0x45b0, +0x4510, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 150 (0x96): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** *** ** | + | * * * * * | + | ** *** **** | + | * * * * | + | *** * * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3b8c, +0x4252, +0x339e, +0x0a12, +0x7212, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 151 (0x97): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | **** *** ** | + | * * * * * | + | **** *** **** | + | * * * * | + | **** * * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7b8c, +0x4252, +0x7b9e, +0x4212, +0x7a12, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 152 (0x98): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** ** *** | + | * * * * | + | ** * * ** | + | * * * * | + | *** ** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x398e, +0x4250, +0x324c, +0x0a42, +0x719c, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 153 (0x99): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | ** *** ** * | + | * * * * | + | * * ** * * | + | * * * * * | + | ** *** ** * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x339a, +0x4422, +0x25a2, +0x14a2, +0x639a, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 154 (0x9a): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** *** *** | + | * * * | + | ** * * | + | * * * | + | *** *** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x39dc, +0x4208, +0x3208, +0x0a08, +0x71dc, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 155 (0x9b): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** *** *** | + | * * * | + | * ** * | + | * * * | + | *** *** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x39dc, +0x4208, +0x4188, +0x4048, +0x3b9c, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 156 (0x9c): + width 8 + +--------+ + | | + | | + | | + | | + | | + | ***** | + | * * | + | * * | + | * * | + | ** * | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3e00, +0x4400, +0x2400, +0x1400, +0x6400, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 157 (0x9d): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | ** *** *** | + | * * * * | + | * * ** * | + | * * * * | + | ** *** *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x31ce, +0x4a10, +0x4990, +0x4850, +0x338e, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 158 (0x9e): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | *** * * | + | * * ** ** | + | *** * * * | + | * * * | + | * * * | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7220, +0x4b60, +0x72a0, +0x4220, +0x4220, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 159 (0x9f): + width 16 + +----------------+ + | | + | | + | | + | | + | | + | ** *** *** | + | * * * * * | + | **** *** * | + | * * * * | + | * * * *** | + | | + | | + | | + | | + | | + | | + +----------------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x338e, +0x4a50, +0x7b90, +0x4a10, +0x4a0e, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 160 (0xa0): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 161 (0xa1): + width 8 + +--------+ + | | + | | + | | + | | + | * | + | * | + | | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0800, +0x0800, +0x0000, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0000, +0x0000, + +/* Character 162 (0xa2): + width 8 + +--------+ + | | + | | + | | + | | + | * | + | * | + | ***** | + | * * *| + | * * | + | * * | + | * * *| + | ***** | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0800, +0x0800, +0x3e00, +0x4900, +0x4800, +0x4800, +0x4900, +0x3e00, +0x0800, +0x0800, +0x0000, +0x0000, + +/* Character 163 (0xa3): + width 8 + +--------+ + | | + | | + | | + | | + | *** | + | * | + | * | + | * | + | ***** | + | * | + | * | + | * | + | ***** | + | ** *| + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0e00, +0x1000, +0x1000, +0x1000, +0x7c00, +0x1000, +0x1000, +0x1000, +0x3e00, +0x6100, +0x0000, +0x0000, + +/* Character 164 (0xa4): + width 8 + +--------+ + | | + | | + | | + | | + | | + | * * | + | * * | + | **** | + | * * | + | * * | + | **** | + | * * | + | * * | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4200, +0x2400, +0x3c00, +0x2400, +0x2400, +0x3c00, +0x2400, +0x4200, +0x0000, +0x0000, +0x0000, + +/* Character 165 (0xa5): + width 8 + +--------+ + | | + | | + | | + | | + | * *| + | * * | + | * * | + | * | + | *******| + | * | + | *******| + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x4100, +0x2200, +0x1400, +0x0800, +0x7f00, +0x0800, +0x7f00, +0x0800, +0x0800, +0x0800, +0x0000, +0x0000, + +/* Character 166 (0xa6): + width 8 + +--------+ + | | + | | + | | + | | + | * | + | * | + | * | + | * | + | | + | | + | * | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0800, +0x0800, +0x0800, +0x0800, +0x0000, +0x0000, +0x0800, +0x0800, +0x0800, +0x0800, +0x0000, +0x0000, + +/* Character 167 (0xa7): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + | * | + | **** | + | * * | + | * * | + | **** | + | * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4000, +0x3c00, +0x4200, +0x4200, +0x3c00, +0x0200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 168 (0xa8): + width 8 + +--------+ + | * * | + | * * | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x2400, +0x2400, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 169 (0xa9): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + |* ** *| + |* * * *| + |* * *| + |* * *| + |* * * *| + |* ** *| + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x9900, +0xa500, +0xa100, +0xa100, +0xa500, +0x9900, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 170 (0xaa): + width 8 + +--------+ + | | + | | + | *** | + | * | + | **** | + | * * | + | **** | + | | + | ***** | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x1c00, +0x0200, +0x1e00, +0x2200, +0x1e00, +0x0000, +0x3e00, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 171 (0xab): + width 8 + +--------+ + | | + | | + | | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x1200, +0x1200, +0x2400, +0x2400, +0x4800, +0x2400, +0x2400, +0x1200, +0x1200, +0x0000, +0x0000, + +/* Character 172 (0xac): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | ****** | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7e00, +0x0200, +0x0200, +0x0200, +0x0000, +0x0000, + +/* Character 173 (0xad): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | | + | | + | | + | ****** | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x7e00, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 174 (0xae): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + |* *** *| + |* * * *| + |* * * *| + |* *** *| + |* * * *| + |* * * *| + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0xb900, +0xa500, +0xa500, +0xb900, +0xa900, +0xa500, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 175 (0xaf): + width 8 + +--------+ + | | + | | + | ****** | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x7e00, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 176 (0xb0): + width 8 + +--------+ + | * | + | * * | + | * * | + | * | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x1000, +0x2800, +0x2800, +0x1000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 177 (0xb1): + width 8 + +--------+ + | | + | | + | | + | | + | * | + | * | + | * | + | *******| + | * | + | * | + | * | + | | + | *******| + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0800, +0x0800, +0x0800, +0x7f00, +0x0800, +0x0800, +0x0800, +0x0000, +0x7f00, +0x0000, +0x0000, +0x0000, + +/* Character 178 (0xb2): + width 8 + +--------+ + | | + | | + | *** | + | * * | + | * | + | *** | + | * | + | * | + | ***** | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x1c00, +0x2200, +0x0200, +0x1c00, +0x2000, +0x2000, +0x3e00, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 179 (0xb3): + width 8 + +--------+ + | | + | | + | *** | + | * * | + | * | + | *** | + | * | + | * * | + | *** | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x1c00, +0x2200, +0x0200, +0x1c00, +0x0200, +0x2200, +0x1c00, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 180 (0xb4): + width 8 + +--------+ + | | + | * | + | * | + | * | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0400, +0x0800, +0x1000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 181 (0xb5): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | | + | | + | * * | + | * * | + | * * | + | * * | + | ** ** | + | * * * | + | * | + | * | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x2200, +0x2200, +0x2200, +0x2200, +0x3600, +0x2a00, +0x2000, +0x2000, + +/* Character 182 (0xb6): + width 8 + +--------+ + | | + | | + | | + | ***** | + | **** * | + | **** * | + | **** * | + | **** * | + | *** * | + | * * | + | * * | + | * * | + | * * | + | * * | + | *** | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x3e00, +0x7a00, +0x7a00, +0x7a00, +0x7a00, +0x3a00, +0x0a00, +0x0a00, +0x0a00, +0x0a00, +0x0a00, +0x0e00, +0x0000, + +/* Character 183 (0xb7): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | | + | | + | ** | + | ** | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x1800, +0x1800, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 184 (0xb8): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | | + | * | + | ** | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0800, +0x3000, + +/* Character 185 (0xb9): + width 8 + +--------+ + | | + | | + | * | + | ** | + | * * | + | * | + | * | + | * | + | * | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0800, +0x1800, +0x2800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 186 (0xba): + width 8 + +--------+ + | | + | | + | *** | + | * * | + | * * | + | * * | + | *** | + | | + | ***** | + | | + | | + | | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x1c00, +0x2200, +0x2200, +0x2200, +0x1c00, +0x0000, +0x3e00, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 187 (0xbb): + width 8 + +--------+ + | | + | | + | | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4800, +0x4800, +0x2400, +0x2400, +0x1200, +0x2400, +0x2400, +0x4800, +0x4800, +0x0000, +0x0000, + +/* Character 188 (0xbc): + width 8 + +--------+ + | | + | | + | | + | | + | * * | + | ** * | + | * * | + | * * | + | * * | + | * * | + | * ** | + | * * * | + | * *** | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x2200, +0x6200, +0x2400, +0x2800, +0x2800, +0x1200, +0x1600, +0x2a00, +0x4e00, +0x4200, +0x0000, +0x0000, + +/* Character 189 (0xbd): + width 8 + +--------+ + | | + | | + | | + | | + | * * | + | ** * | + | * * | + | * * | + | * * | + | * * | + | ** * | + | * * | + | * * | + | * *** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x2200, +0x6200, +0x2400, +0x2800, +0x2800, +0x1400, +0x1a00, +0x2200, +0x4400, +0x4e00, +0x0000, +0x0000, + +/* Character 190 (0xbe): + width 8 + +--------+ + | | + | | + | | + | | + | ** * | + | * * | + | * * | + | ** | + | ** * | + | * * | + | * ** | + | * * * | + | * *** | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x6200, +0x1200, +0x2400, +0x1800, +0x6800, +0x1200, +0x1600, +0x2a00, +0x4e00, +0x4200, +0x0000, +0x0000, + +/* Character 191 (0xbf): + width 8 + +--------+ + | | + | | + | | + | | + | * | + | * | + | | + | * | + | * | + | ** | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0800, +0x0800, +0x0000, +0x0800, +0x0800, +0x3000, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 192 (0xc0): + width 8 + +--------+ + | ** | + | ** | + | | + | | + | ** | + | * * | + | * * | + | * * | + | * * | + | ****** | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x3000, +0x0c00, +0x0000, +0x0000, +0x1800, +0x2400, +0x2400, +0x4200, +0x4200, +0x7e00, +0x4200, +0x4200, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 193 (0xc1): + width 8 + +--------+ + | ** | + | ** | + | | + | | + | ** | + | * * | + | * * | + | * * | + | * * | + | ****** | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x0c00, +0x3000, +0x0000, +0x0000, +0x1800, +0x2400, +0x2400, +0x4200, +0x4200, +0x7e00, +0x4200, +0x4200, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 194 (0xc2): + width 8 + +--------+ + | ** | + | * * | + | | + | | + | ** | + | * * | + | * * | + | * * | + | * * | + | ****** | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x1800, +0x2400, +0x0000, +0x0000, +0x1800, +0x2400, +0x2400, +0x4200, +0x4200, +0x7e00, +0x4200, +0x4200, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 195 (0xc3): + width 8 + +--------+ + | ** * | + | * ** | + | | + | | + | ** | + | * * | + | * * | + | * * | + | * * | + | ****** | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x3200, +0x4c00, +0x0000, +0x0000, +0x1800, +0x2400, +0x2400, +0x4200, +0x4200, +0x7e00, +0x4200, +0x4200, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 196 (0xc4): + width 8 + +--------+ + | * * | + | * * | + | | + | | + | ** | + | * * | + | * * | + | * * | + | * * | + | ****** | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x2400, +0x2400, +0x0000, +0x0000, +0x1800, +0x2400, +0x2400, +0x4200, +0x4200, +0x7e00, +0x4200, +0x4200, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 197 (0xc5): + width 8 + +--------+ + | ** | + | * * | + | ** | + | | + | ** | + | * * | + | * * | + | * * | + | * * | + | ****** | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x1800, +0x2400, +0x1800, +0x0000, +0x1800, +0x2400, +0x2400, +0x4200, +0x4200, +0x7e00, +0x4200, +0x4200, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 198 (0xc6): + width 8 + +--------+ + | | + | | + | | + | | + | *****| + | * * | + | * * | + | * * | + | *******| + | * * | + | * * | + | * * | + | * * | + | * ****| + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x1f00, +0x2800, +0x4800, +0x4800, +0x7f00, +0x4800, +0x4800, +0x4800, +0x4800, +0x4f00, +0x0000, +0x0000, + +/* Character 199 (0xc7): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + | * * | + | * | + | * | + | * | + | * | + | * * | + | * * | + | **** | + | * | + | ** | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4000, +0x4000, +0x4000, +0x4000, +0x4200, +0x4200, +0x3c00, +0x0800, +0x3000, + +/* Character 200 (0xc8): + width 8 + +--------+ + | ** | + | ** | + | | + | | + | ****** | + | * | + | * | + | * | + | ***** | + | * | + | * | + | * | + | * | + | ****** | + | | + | | + +--------+ */ +0x3000, +0x0c00, +0x0000, +0x0000, +0x7e00, +0x4000, +0x4000, +0x4000, +0x7c00, +0x4000, +0x4000, +0x4000, +0x4000, +0x7e00, +0x0000, +0x0000, + +/* Character 201 (0xc9): + width 8 + +--------+ + | ** | + | ** | + | | + | | + | ****** | + | * | + | * | + | * | + | ***** | + | * | + | * | + | * | + | * | + | ****** | + | | + | | + +--------+ */ +0x0c00, +0x3000, +0x0000, +0x0000, +0x7e00, +0x4000, +0x4000, +0x4000, +0x7c00, +0x4000, +0x4000, +0x4000, +0x4000, +0x7e00, +0x0000, +0x0000, + +/* Character 202 (0xca): + width 8 + +--------+ + | ** | + | * * | + | | + | | + | ****** | + | * | + | * | + | * | + | ***** | + | * | + | * | + | * | + | * | + | ****** | + | | + | | + +--------+ */ +0x1800, +0x2400, +0x0000, +0x0000, +0x7e00, +0x4000, +0x4000, +0x4000, +0x7c00, +0x4000, +0x4000, +0x4000, +0x4000, +0x7e00, +0x0000, +0x0000, + +/* Character 203 (0xcb): + width 8 + +--------+ + | * * | + | * * | + | | + | | + | ****** | + | * | + | * | + | * | + | ***** | + | * | + | * | + | * | + | * | + | ****** | + | | + | | + +--------+ */ +0x2400, +0x2400, +0x0000, +0x0000, +0x7e00, +0x4000, +0x4000, +0x4000, +0x7c00, +0x4000, +0x4000, +0x4000, +0x4000, +0x7e00, +0x0000, +0x0000, + +/* Character 204 (0xcc): + width 8 + +--------+ + | ** | + | ** | + | | + | | + | ***** | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | ***** | + | | + | | + +--------+ */ +0x1800, +0x0600, +0x0000, +0x0000, +0x3e00, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x3e00, +0x0000, +0x0000, + +/* Character 205 (0xcd): + width 8 + +--------+ + | ** | + | ** | + | | + | | + | ***** | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | ***** | + | | + | | + +--------+ */ +0x0c00, +0x3000, +0x0000, +0x0000, +0x3e00, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x3e00, +0x0000, +0x0000, + +/* Character 206 (0xce): + width 8 + +--------+ + | ** | + | * * | + | | + | | + | ***** | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | ***** | + | | + | | + +--------+ */ +0x1800, +0x2400, +0x0000, +0x0000, +0x3e00, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x3e00, +0x0000, +0x0000, + +/* Character 207 (0xcf): + width 8 + +--------+ + | * * | + | * * | + | | + | | + | ***** | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | * | + | ***** | + | | + | | + +--------+ */ +0x2400, +0x2400, +0x0000, +0x0000, +0x3e00, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x3e00, +0x0000, +0x0000, + +/* Character 208 (0xd0): + width 8 + +--------+ + | | + | | + | | + | | + | **** | + | * * | + | * * | + | * * | + |**** * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x7800, +0x4400, +0x4200, +0x4200, +0xf200, +0x4200, +0x4200, +0x4200, +0x4400, +0x7800, +0x0000, +0x0000, + +/* Character 209 (0xd1): + width 8 + +--------+ + | ** * | + | * ** | + | | + | | + | * * | + | ** * | + | ** * | + | * * * | + | * * * | + | * * * | + | * * * | + | * ** | + | * ** | + | * * | + | | + | | + +--------+ */ +0x3200, +0x4c00, +0x0000, +0x0000, +0x4200, +0x6200, +0x6200, +0x5200, +0x5200, +0x4a00, +0x4a00, +0x4600, +0x4600, +0x4200, +0x0000, +0x0000, + +/* Character 210 (0xd2): + width 8 + +--------+ + | ** | + | ** | + | | + | | + | **** | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x3000, +0x0c00, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 211 (0xd3): + width 8 + +--------+ + | ** | + | ** | + | | + | | + | **** | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0c00, +0x3000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 212 (0xd4): + width 8 + +--------+ + | ** | + | * * | + | | + | | + | **** | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x1800, +0x2400, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 213 (0xd5): + width 8 + +--------+ + | ** * | + | * ** | + | | + | | + | **** | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x3200, +0x4c00, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 214 (0xd6): + width 8 + +--------+ + | * * | + | * * | + | | + | | + | **** | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x2400, +0x2400, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 215 (0xd7): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | | + | * * | + | * * | + | ** | + | * * | + | * * | + | | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x4200, +0x2400, +0x1800, +0x2400, +0x4200, +0x0000, +0x0000, +0x0000, +0x0000, + +/* Character 216 (0xd8): + width 8 + +--------+ + | | + | | + | | + | * | + | *** * | + | * * | + | * ** | + | * * * | + | * * * | + | * * * | + | * * * | + | ** * | + | * * | + | * *** | + | * | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0200, +0x3a00, +0x4400, +0x4600, +0x4a00, +0x4a00, +0x5200, +0x5200, +0x6200, +0x2200, +0x5c00, +0x4000, +0x0000, + +/* Character 217 (0xd9): + width 8 + +--------+ + | ** | + | ** | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x3000, +0x0c00, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 218 (0xda): + width 8 + +--------+ + | ** | + | ** | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0c00, +0x3000, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 219 (0xdb): + width 8 + +--------+ + | ** | + | * * | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x1800, +0x2400, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 220 (0xdc): + width 8 + +--------+ + | * * | + | * * | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x2400, +0x2400, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 221 (0xdd): + width 8 + +--------+ + | ** | + | ** | + | | + | | + | * *| + | * *| + | * * | + | * * | + | * * | + | * | + | * | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0c00, +0x3000, +0x0000, +0x0000, +0x4100, +0x4100, +0x2200, +0x2200, +0x1400, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0000, +0x0000, + +/* Character 222 (0xde): + width 8 + +--------+ + | | + | | + | | + | * | + | * | + | **** | + | * * | + | * * | + | * * | + | * * | + | **** | + | * | + | * | + | * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x4000, +0x4000, +0x7800, +0x4400, +0x4200, +0x4200, +0x4400, +0x7800, +0x4000, +0x4000, +0x4000, +0x0000, +0x0000, + +/* Character 223 (0xdf): + width 8 + +--------+ + | | + | | + | | + | | + | *** | + | * * | + | * * | + | * * | + | ***** | + | * * | + | * * | + | * * | + | ** * | + | * *** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x3800, +0x4400, +0x4400, +0x4400, +0x7c00, +0x4200, +0x4200, +0x4200, +0x6200, +0x5c00, +0x0000, +0x0000, + +/* Character 224 (0xe0): + width 8 + +--------+ + | | + | | + | ** | + | ** | + | | + | | + | **** | + | * * | + | * | + | ***** | + | * * | + | * * | + | * ** | + | *** * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x3000, +0x0c00, +0x0000, +0x0000, +0x3c00, +0x4200, +0x0200, +0x3e00, +0x4200, +0x4200, +0x4600, +0x3a00, +0x0000, +0x0000, + +/* Character 225 (0xe1): + width 8 + +--------+ + | | + | | + | ** | + | ** | + | | + | | + | **** | + | * * | + | * | + | ***** | + | * * | + | * * | + | * ** | + | *** * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0c00, +0x3000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x0200, +0x3e00, +0x4200, +0x4200, +0x4600, +0x3a00, +0x0000, +0x0000, + +/* Character 226 (0xe2): + width 8 + +--------+ + | | + | | + | ** | + | * * | + | | + | | + | **** | + | * * | + | * | + | ***** | + | * * | + | * * | + | * ** | + | *** * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x1800, +0x2400, +0x0000, +0x0000, +0x3c00, +0x4200, +0x0200, +0x3e00, +0x4200, +0x4200, +0x4600, +0x3a00, +0x0000, +0x0000, + +/* Character 227 (0xe3): + width 8 + +--------+ + | | + | | + | ** * | + | * ** | + | | + | | + | **** | + | * * | + | * | + | ***** | + | * * | + | * * | + | * ** | + | *** * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x3200, +0x4c00, +0x0000, +0x0000, +0x3c00, +0x4200, +0x0200, +0x3e00, +0x4200, +0x4200, +0x4600, +0x3a00, +0x0000, +0x0000, + +/* Character 228 (0xe4): + width 8 + +--------+ + | | + | | + | * * | + | * * | + | | + | | + | **** | + | * * | + | * | + | ***** | + | * * | + | * * | + | * ** | + | *** * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x2400, +0x2400, +0x0000, +0x0000, +0x3c00, +0x4200, +0x0200, +0x3e00, +0x4200, +0x4200, +0x4600, +0x3a00, +0x0000, +0x0000, + +/* Character 229 (0xe5): + width 8 + +--------+ + | | + | ** | + | * * | + | ** | + | | + | | + | **** | + | * * | + | * | + | ***** | + | * * | + | * * | + | * ** | + | *** * | + | | + | | + +--------+ */ +0x0000, +0x1800, +0x2400, +0x1800, +0x0000, +0x0000, +0x3c00, +0x4200, +0x0200, +0x3e00, +0x4200, +0x4200, +0x4600, +0x3a00, +0x0000, +0x0000, + +/* Character 230 (0xe6): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | ***** | + | * * *| + | * *| + | ******| + | * * | + | * * | + | * * *| + | ***** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3e00, +0x4900, +0x0900, +0x3f00, +0x4800, +0x4800, +0x4900, +0x3e00, +0x0000, +0x0000, + +/* Character 231 (0xe7): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | **** | + | * * | + | * | + | * | + | * | + | * | + | * * | + | **** | + | * | + | ** | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4000, +0x4000, +0x4000, +0x4000, +0x4200, +0x3c00, +0x0800, +0x3000, + +/* Character 232 (0xe8): + width 8 + +--------+ + | | + | | + | ** | + | ** | + | | + | | + | **** | + | * * | + | * * | + | ****** | + | * | + | * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x3000, +0x0c00, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x7e00, +0x4000, +0x4000, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 233 (0xe9): + width 8 + +--------+ + | | + | | + | ** | + | ** | + | | + | | + | **** | + | * * | + | * * | + | ****** | + | * | + | * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0c00, +0x3000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x7e00, +0x4000, +0x4000, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 234 (0xea): + width 8 + +--------+ + | | + | | + | ** | + | * * | + | | + | | + | **** | + | * * | + | * * | + | ****** | + | * | + | * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x1800, +0x2400, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x7e00, +0x4000, +0x4000, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 235 (0xeb): + width 8 + +--------+ + | | + | | + | * * | + | * * | + | | + | | + | **** | + | * * | + | * * | + | ****** | + | * | + | * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x2400, +0x2400, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x7e00, +0x4000, +0x4000, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 236 (0xec): + width 8 + +--------+ + | | + | | + | ** | + | ** | + | | + | | + | ** | + | * | + | * | + | * | + | * | + | * | + | * | + | ***** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x3000, +0x0c00, +0x0000, +0x0000, +0x1800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x3e00, +0x0000, +0x0000, + +/* Character 237 (0xed): + width 8 + +--------+ + | | + | | + | ** | + | ** | + | | + | | + | ** | + | * | + | * | + | * | + | * | + | * | + | * | + | ***** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0c00, +0x3000, +0x0000, +0x0000, +0x1800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x3e00, +0x0000, +0x0000, + +/* Character 238 (0xee): + width 8 + +--------+ + | | + | | + | ** | + | * * | + | | + | | + | ** | + | * | + | * | + | * | + | * | + | * | + | * | + | ***** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x1800, +0x2400, +0x0000, +0x0000, +0x1800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x3e00, +0x0000, +0x0000, + +/* Character 239 (0xef): + width 8 + +--------+ + | | + | | + | * * | + | * * | + | | + | | + | ** | + | * | + | * | + | * | + | * | + | * | + | * | + | ***** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x2400, +0x2400, +0x0000, +0x0000, +0x1800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x0800, +0x3e00, +0x0000, +0x0000, + +/* Character 240 (0xf0): + width 8 + +--------+ + | | + | | + | ** * | + | ** | + | * * | + | * * | + | * | + | ***** | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x3200, +0x0c00, +0x1400, +0x2200, +0x0200, +0x3e00, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 241 (0xf1): + width 8 + +--------+ + | | + | | + | ** * | + | * ** | + | | + | | + | * *** | + | ** * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x3200, +0x4c00, +0x0000, +0x0000, +0x5c00, +0x6200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x0000, +0x0000, + +/* Character 242 (0xf2): + width 8 + +--------+ + | | + | | + | ** | + | ** | + | | + | | + | **** | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x3000, +0x0c00, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 243 (0xf3): + width 8 + +--------+ + | | + | | + | ** | + | ** | + | | + | | + | **** | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0c00, +0x3000, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 244 (0xf4): + width 8 + +--------+ + | | + | | + | ** | + | * * | + | | + | | + | **** | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x1800, +0x2400, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 245 (0xf5): + width 8 + +--------+ + | | + | | + | ** * | + | * ** | + | | + | | + | **** | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x3200, +0x4c00, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 246 (0xf6): + width 8 + +--------+ + | | + | | + | * * | + | * * | + | | + | | + | **** | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | **** | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x2400, +0x2400, +0x0000, +0x0000, +0x3c00, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x3c00, +0x0000, +0x0000, + +/* Character 247 (0xf7): + width 8 + +--------+ + | | + | | + | | + | | + | | + | | + | ** | + | | + | | + | ****** | + | | + | | + | ** | + | | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x1800, +0x0000, +0x0000, +0x7e00, +0x0000, +0x0000, +0x1800, +0x0000, +0x0000, +0x0000, + +/* Character 248 (0xf8): + width 8 + +--------+ + | | + | | + | | + | | + | | + | * | + | **** | + | * ** | + | * * * | + | * * * | + | * * * | + | * * * | + | ** * | + | **** | + | * | + | | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x0000, +0x0200, +0x3c00, +0x4600, +0x4a00, +0x4a00, +0x5200, +0x5200, +0x6200, +0x3c00, +0x4000, +0x0000, + +/* Character 249 (0xf9): + width 8 + +--------+ + | | + | | + | ** | + | ** | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * ** | + | *** * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x3000, +0x0c00, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4600, +0x3a00, +0x0000, +0x0000, + +/* Character 250 (0xfa): + width 8 + +--------+ + | | + | | + | ** | + | ** | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * ** | + | *** * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x0c00, +0x3000, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4600, +0x3a00, +0x0000, +0x0000, + +/* Character 251 (0xfb): + width 8 + +--------+ + | | + | | + | ** | + | * * | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * ** | + | *** * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x1800, +0x2400, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4600, +0x3a00, +0x0000, +0x0000, + +/* Character 252 (0xfc): + width 8 + +--------+ + | | + | | + | * * | + | * * | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * * | + | * ** | + | *** * | + | | + | | + +--------+ */ +0x0000, +0x0000, +0x2400, +0x2400, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x4600, +0x3a00, +0x0000, +0x0000, + +/* Character 253 (0xfd): + width 8 + +--------+ + | | + | | + | ** | + | ** | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * ** | + | ** * | + | * | + | * | + | **** | + +--------+ */ +0x0000, +0x0000, +0x0c00, +0x3000, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x2600, +0x1a00, +0x0200, +0x0200, +0x3c00, + +/* Character 254 (0xfe): + width 8 + +--------+ + | | + | | + | | + | | + | * | + | * | + | **** | + | * * | + | * * | + | * * | + | * * | + | * * | + | ** | + | * | + | * | + | * | + +--------+ */ +0x0000, +0x0000, +0x0000, +0x0000, +0x2000, +0x2000, +0x3c00, +0x2200, +0x2200, +0x2200, +0x2400, +0x2800, +0x3000, +0x2000, +0x2000, +0x2000, + +/* Character 255 (0xff): + width 8 + +--------+ + | | + | | + | * * | + | * * | + | | + | | + | * * | + | * * | + | * * | + | * * | + | * * | + | * ** | + | ** * | + | * | + | * | + | **** | + +--------+ */ +0x0000, +0x0000, +0x2400, +0x2400, +0x0000, +0x0000, +0x4200, +0x4200, +0x4200, +0x4200, +0x4200, +0x2600, +0x1a00, +0x0200, +0x0200, +0x3c00, +}; + +/* Character width data. */ +const unsigned char _font_width[] = { + 16, /* (0x00) */ + 16, /* (0x01) */ + 16, /* (0x02) */ + 16, /* (0x03) */ + 16, /* (0x04) */ + 16, /* (0x05) */ + 16, /* (0x06) */ + 16, /* (0x07) */ + 16, /* (0x08) */ + 16, /* (0x09) */ + 16, /* (0x0a) */ + 16, /* (0x0b) */ + 16, /* (0x0c) */ + 16, /* (0x0d) */ + 16, /* (0x0e) */ + 16, /* (0x0f) */ + 16, /* (0x10) */ + 16, /* (0x11) */ + 16, /* (0x12) */ + 16, /* (0x13) */ + 16, /* (0x14) */ + 16, /* (0x15) */ + 16, /* (0x16) */ + 16, /* (0x17) */ + 16, /* (0x18) */ + 16, /* (0x19) */ + 16, /* (0x1a) */ + 16, /* (0x1b) */ + 16, /* (0x1c) */ + 16, /* (0x1d) */ + 16, /* (0x1e) */ + 16, /* (0x1f) */ + 8, /* (0x20) */ + 8, /* (0x21) */ + 8, /* (0x22) */ + 8, /* (0x23) */ + 8, /* (0x24) */ + 8, /* (0x25) */ + 8, /* (0x26) */ + 8, /* (0x27) */ + 8, /* (0x28) */ + 8, /* (0x29) */ + 8, /* (0x2a) */ + 8, /* (0x2b) */ + 8, /* (0x2c) */ + 8, /* (0x2d) */ + 8, /* (0x2e) */ + 8, /* (0x2f) */ + 8, /* (0x30) */ + 8, /* (0x31) */ + 8, /* (0x32) */ + 8, /* (0x33) */ + 8, /* (0x34) */ + 8, /* (0x35) */ + 8, /* (0x36) */ + 8, /* (0x37) */ + 8, /* (0x38) */ + 8, /* (0x39) */ + 8, /* (0x3a) */ + 8, /* (0x3b) */ + 8, /* (0x3c) */ + 8, /* (0x3d) */ + 8, /* (0x3e) */ + 8, /* (0x3f) */ + 8, /* (0x40) */ + 8, /* (0x41) */ + 8, /* (0x42) */ + 8, /* (0x43) */ + 8, /* (0x44) */ + 8, /* (0x45) */ + 8, /* (0x46) */ + 8, /* (0x47) */ + 8, /* (0x48) */ + 8, /* (0x49) */ + 8, /* (0x4a) */ + 8, /* (0x4b) */ + 8, /* (0x4c) */ + 8, /* (0x4d) */ + 8, /* (0x4e) */ + 8, /* (0x4f) */ + 8, /* (0x50) */ + 8, /* (0x51) */ + 8, /* (0x52) */ + 8, /* (0x53) */ + 8, /* (0x54) */ + 8, /* (0x55) */ + 8, /* (0x56) */ + 8, /* (0x57) */ + 8, /* (0x58) */ + 8, /* (0x59) */ + 8, /* (0x5a) */ + 8, /* (0x5b) */ + 8, /* (0x5c) */ + 8, /* (0x5d) */ + 8, /* (0x5e) */ + 8, /* (0x5f) */ + 8, /* (0x60) */ + 8, /* (0x61) */ + 8, /* (0x62) */ + 8, /* (0x63) */ + 8, /* (0x64) */ + 8, /* (0x65) */ + 8, /* (0x66) */ + 8, /* (0x67) */ + 8, /* (0x68) */ + 8, /* (0x69) */ + 8, /* (0x6a) */ + 8, /* (0x6b) */ + 8, /* (0x6c) */ + 8, /* (0x6d) */ + 8, /* (0x6e) */ + 8, /* (0x6f) */ + 8, /* (0x70) */ + 8, /* (0x71) */ + 8, /* (0x72) */ + 8, /* (0x73) */ + 8, /* (0x74) */ + 8, /* (0x75) */ + 8, /* (0x76) */ + 8, /* (0x77) */ + 8, /* (0x78) */ + 8, /* (0x79) */ + 8, /* (0x7a) */ + 8, /* (0x7b) */ + 8, /* (0x7c) */ + 8, /* (0x7d) */ + 8, /* (0x7e) */ + 16, /* (0x7f) */ + 16, /* (0x80) */ + 16, /* (0x81) */ + 16, /* (0x82) */ + 16, /* (0x83) */ + 16, /* (0x84) */ + 16, /* (0x85) */ + 16, /* (0x86) */ + 16, /* (0x87) */ + 16, /* (0x88) */ + 16, /* (0x89) */ + 16, /* (0x8a) */ + 16, /* (0x8b) */ + 16, /* (0x8c) */ + 8, /* (0x8d) */ + 16, /* (0x8e) */ + 16, /* (0x8f) */ + 16, /* (0x90) */ + 16, /* (0x91) */ + 16, /* (0x92) */ + 16, /* (0x93) */ + 16, /* (0x94) */ + 16, /* (0x95) */ + 16, /* (0x96) */ + 16, /* (0x97) */ + 16, /* (0x98) */ + 16, /* (0x99) */ + 16, /* (0x9a) */ + 16, /* (0x9b) */ + 8, /* (0x9c) */ + 16, /* (0x9d) */ + 16, /* (0x9e) */ + 16, /* (0x9f) */ + 8, /* (0xa0) */ + 8, /* (0xa1) */ + 8, /* (0xa2) */ + 8, /* (0xa3) */ + 8, /* (0xa4) */ + 8, /* (0xa5) */ + 8, /* (0xa6) */ + 8, /* (0xa7) */ + 8, /* (0xa8) */ + 8, /* (0xa9) */ + 8, /* (0xaa) */ + 8, /* (0xab) */ + 8, /* (0xac) */ + 8, /* (0xad) */ + 8, /* (0xae) */ + 8, /* (0xaf) */ + 8, /* (0xb0) */ + 8, /* (0xb1) */ + 8, /* (0xb2) */ + 8, /* (0xb3) */ + 8, /* (0xb4) */ + 8, /* (0xb5) */ + 8, /* (0xb6) */ + 8, /* (0xb7) */ + 8, /* (0xb8) */ + 8, /* (0xb9) */ + 8, /* (0xba) */ + 8, /* (0xbb) */ + 8, /* (0xbc) */ + 8, /* (0xbd) */ + 8, /* (0xbe) */ + 8, /* (0xbf) */ + 8, /* (0xc0) */ + 8, /* (0xc1) */ + 8, /* (0xc2) */ + 8, /* (0xc3) */ + 8, /* (0xc4) */ + 8, /* (0xc5) */ + 8, /* (0xc6) */ + 8, /* (0xc7) */ + 8, /* (0xc8) */ + 8, /* (0xc9) */ + 8, /* (0xca) */ + 8, /* (0xcb) */ + 8, /* (0xcc) */ + 8, /* (0xcd) */ + 8, /* (0xce) */ + 8, /* (0xcf) */ + 8, /* (0xd0) */ + 8, /* (0xd1) */ + 8, /* (0xd2) */ + 8, /* (0xd3) */ + 8, /* (0xd4) */ + 8, /* (0xd5) */ + 8, /* (0xd6) */ + 8, /* (0xd7) */ + 8, /* (0xd8) */ + 8, /* (0xd9) */ + 8, /* (0xda) */ + 8, /* (0xdb) */ + 8, /* (0xdc) */ + 8, /* (0xdd) */ + 8, /* (0xde) */ + 8, /* (0xdf) */ + 8, /* (0xe0) */ + 8, /* (0xe1) */ + 8, /* (0xe2) */ + 8, /* (0xe3) */ + 8, /* (0xe4) */ + 8, /* (0xe5) */ + 8, /* (0xe6) */ + 8, /* (0xe7) */ + 8, /* (0xe8) */ + 8, /* (0xe9) */ + 8, /* (0xea) */ + 8, /* (0xeb) */ + 8, /* (0xec) */ + 8, /* (0xed) */ + 8, /* (0xee) */ + 8, /* (0xef) */ + 8, /* (0xf0) */ + 8, /* (0xf1) */ + 8, /* (0xf2) */ + 8, /* (0xf3) */ + 8, /* (0xf4) */ + 8, /* (0xf5) */ + 8, /* (0xf6) */ + 8, /* (0xf7) */ + 8, /* (0xf8) */ + 8, /* (0xf9) */ + 8, /* (0xfa) */ + 8, /* (0xfb) */ + 8, /* (0xfc) */ + 8, /* (0xfd) */ + 8, /* (0xfe) */ + 8, /* (0xff) */ +}; diff --git a/unifont.h b/unifont.h new file mode 100644 index 0000000..ee33320 --- /dev/null +++ b/unifont.h @@ -0,0 +1,29 @@ +/* + * GNU Unifont, usage header + * Copyright (C) 1998 Roman Czyborra + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _UNIFONT_H_ +#define _UNIFONT_H_ + +extern const unsigned char _font_height; + +extern const unsigned short _font_bits[]; + +extern const unsigned char _font_width[]; + +#endif /* _UNIFONT_H_ */