Initial work on boot screen

This commit is contained in:
Peter Weingartner 2024-08-19 22:12:40 -04:00
parent 57c48f1ef9
commit fda10b8287
24 changed files with 1481 additions and 44 deletions

View file

@ -12,11 +12,16 @@
#include "boot.h"
#include "memory.h"
#include "proc.h"
#include "dev/txt_screen.h"
#include "dev/sprites.h"
#include "dev/tiles.h"
#include "vicky_general.h"
#include "rsrc/sprites/boot_sprites.h"
#include "rsrc/tiles/boot_tiles.h"
#include <string.h>
const uint32_t boot_record_alignment = 8192; // Number of bytes for boot record alignement
const uint32_t boot_firmware_address = 0x380000;
enum boot_src_e {
BOOT_SRC_NONE = 0, // Nothing more to check
@ -36,10 +41,9 @@ typedef struct boot_record_s {
char signature2;
uint32_t start_address;
uint8_t version;
uint8_t reserved0;
uint8_t reserved1;
uint8_t reserved2;
char * text_data;
uint32_t icon_address;
uint32_t clut_address;
const char * name;
} boot_record_t, *boot_record_p;
/**
@ -133,3 +137,81 @@ void boot_launch() {
}
}
}
/**
* @brief Setup the boot screen
*
*/
void boot_screen() {
// txt_set_mode(0, TXT_MODE_TEXT | TXT_MODE_SPRITE);
*tvky_mstr_ctrl = (uint16_t)(VKY_MCR_TILE | VKY_MCR_SPRITE | VKY_MCR_GRAPHICS | VKY_MCR_TEXT_OVERLAY | VKY_MCR_TEXT);
tvky_bg_color->blue = 0;
tvky_bg_color->green = 0;
tvky_bg_color->red = 0;
for (int i = 0; i < 4 * 256; i++) {
VKY_GR_CLUT_0[i] = boot_clut[i];
VKY_GR_CLUT_1[i] = boot_clut[i] >> 2;
}
// Set up the tiles for the background
tile_init();
sprite_init();
tile_set_assign(0, (uint8_t *)boot_tiles_pixels, false);
tile_set_update(0);
tile_map_assign(0, (uint16_t *)boot_tiles_map, 42, 32, 1);
tile_map_position(0, 0, 0);
tile_map_enable(0, true);
tile_map_update(0);
// Make tile map 0 the top layer
*tvky_layers = 0x0444;
short base_x = 14*8;
short base_y = 21*8;
// Set up the text window for the boot messaging
t_rect boot_text_window;
boot_text_window.origin.x = 20;
boot_text_window.origin.y = 19;
boot_text_window.size.width = 40;
boot_text_window.size.height = 12;
txt_set_region(0, &boot_text_window);
txt_print(0, "Scanning for bootable devices...\n\n");
sprite_assign(0, cartridge_pixels, 0, 0);
sprite_assign(1, ram_pixels, 0, 0);
sprite_assign(2, sd_ext_pixels, 0, 0);
sprite_assign(3, sd_int_pixels, 0, 0);
sprite_assign(4, rom_pixels, 0, 0);
sprite_clut(0, 1);
sprite_clut(1, 0);
sprite_clut(2, 1);
sprite_clut(3, 0);
sprite_clut(4, 0);
sprite_position(0, base_x, base_y);
sprite_position(1, base_x + 32, base_y);
sprite_position(2, base_x + 32*2, base_y);
sprite_position(3, base_x + 32*3, base_y);
sprite_position(4, base_x + 32*4, base_y);
sprite_enable(0, true);
sprite_enable(1, true);
sprite_enable(2, true);
sprite_enable(3, true);
sprite_enable(4, true);
// txt_print(0, "1: Start 'Frogger' from the cartridge.\n");
txt_print(0, "1: Start 'Foobar' in RAM.\n");
// txt_print(0, "3: Start from external SD card.\n");
txt_print(0, "2: Start from internal SD card.\n");
txt_print(0, "3: Start 'f/Manager'.\n");
}

View file

@ -20,4 +20,10 @@
*/
extern void boot_launch();
/**
* @brief Setup the boot screen
*
*/
extern void boot_screen();
#endif

View file

@ -58,7 +58,7 @@ static void cart_flash_system_id_exit() {
*
* @return short the code describing the cartridge (-1 for none found)
*/
short cart_id() {
SYSTEMCALL short cart_id() {
if (cart_id_memo == CART_ID_UNDEF) {
// Start off assuming we don't have anything in the slot
cart_id_memo = -1;
@ -91,7 +91,7 @@ short cart_id() {
* @brief Erase the entire flash memory
*
*/
void cart_erase() {
SYSTEMCALL void cart_erase() {
if (cart_id() == CART_ID_FLASH) {
cart_flash_command(0x80);
cart_flash_command(0x10);
@ -108,7 +108,7 @@ void cart_erase() {
* @param address the address to write to (in CPU address space)
* @param value the byte to write to the address
*/
void cart_write(uint32_t address, uint8_t value) {
SYSTEMCALL void cart_write_b(uint32_t address, uint8_t value) {
uint32_t cart_base_address = (uint32_t)cartridge;
uint32_t cart_end_address = 0xf7ffff;
uint8_t current_value = 0;
@ -122,8 +122,37 @@ void cart_write(uint32_t address, uint8_t value) {
*dest = value;
// Wait for the value to show up at the destination
long target_jiffies = timers_jiffies() + 5;
long target_jiffies = timers_jiffies() + 3;
while (timers_jiffies() < target_jiffies) ;
}
}
}
/**
* @brief Write a block of bytes to the flash cartridge (if present)
*
* @param dest the address within the flash cartridge to start writing to
* @param src the address in regular memory to start reading from
* @param count the number of bytes to write
*/
SYSTEMCALL void cart_write(uint32_t dest, uint32_t src, int count) {
uint32_t cart_base_address = (uint32_t)cartridge;
uint32_t cart_end_address = 0xf7ffff;
uint8_t current_value = 0;
if (cart_id() == CART_ID_FLASH) {
if ((cart_base_address <= src) && (cart_end_address >= src + count)) {
for (int x = 0; x < count; x++) {
volatile uint8_t * dest_position = ((volatile uint8_t *)(dest + x));
uint8_t * src_position = (uint8_t *)(src + x);
cart_flash_command(0xa0);
*dest_position = *src_position;
// Wait for the value to show up at the destination
long target_jiffies = timers_jiffies() + 3;
while (timers_jiffies() < target_jiffies) ;
}
}
}
}

View file

@ -14,6 +14,8 @@
#include <stdint.h>
#include "sys_macros.h"
#define CART_ID_UNDEF -2
#define CART_ID_NONE -1
#define CART_ID_RAM 0
@ -24,13 +26,13 @@
*
* @return short the code describing the cartridge (-1 for none found)
*/
extern short cart_id();
extern SYSTEMCALL short cart_id();
/**
* @brief Erase the entire flash memory
*
*/
extern void cart_erase();
extern SYSTEMCALL void cart_erase();
/**
* @brief Write a byte to the flash memory
@ -38,6 +40,15 @@ extern void cart_erase();
* @param address the address to write to (in CPU address space)
* @param value the byte to write to the address
*/
extern void cart_write(uint32_t address, uint8_t value);
extern SYSTEMCALL void cart_write_b(uint32_t address, uint8_t value);
/**
* @brief Write a block of bytes to the flash cartridge (if present)
*
* @param dest the address within the flash cartridge to start writing to
* @param src the address in regular memory to start reading from
* @param count the number of bytes to write
*/
extern SYSTEMCALL void cart_write(uint32_t dest, uint32_t src, int count);
#endif

View file

@ -52,7 +52,7 @@ INCLUDES=-I.. -I../include
CFLAGS=$(INCLUDES) $(CFLAGS_FOR_UNIT) -l
ASFLAGS=$(INCLUDES)
SRCS = block.c channel.c console.c fsys.c txt_screen.c rtc.c uart.c $(SRCS_FOR_UNIT) # pata.c bitmap.c dma.c ps2.c sdc.c
SRCS = block.c channel.c console.c fsys.c sprites.c tiles.c txt_screen.c rtc.c uart.c $(SRCS_FOR_UNIT) # pata.c bitmap.c dma.c ps2.c sdc.c
OBJS = $(patsubst %.c,%.o,$(SRCS))
OBJS4RM = $(subst /,\\,$(OBJS))

110
src/dev/sprites.c Normal file
View file

@ -0,0 +1,110 @@
/**
* @file sprites.c
* @author your name (you@domain.com)
* @brief Simple support for sprites
* @version 0.1
* @date 2024-08-19
*
* @copyright Copyright (c) 2024
*
*/
#include <string.h>
#include "sprites.h"
#include "F256/vicky_ii.h"
#define SPRITE_MAX 16
static t_sprite sprite_shadow[SPRITE_MAX];
/**
* @brief Update a sprite's hardware registers from the shadow registers
*
* @param sprite the number of the sprite
*/
static void sprite_update(uint8_t sprite) {
memcpy(&vky_sprite[sprite], &sprite_shadow[sprite], sizeof(t_sprite));
}
/**
* @brief Set the basic information about the sprite
*
* @param sprite the number of the sprite
* @param address the address of the bitmap for the sprite
* @param size the size of the sprite (0 = 32x32, 1 = 24x24, 2 = 16x16, 3 = 8x8)
* @param layer the number of the layer for the sprite
*/
void sprite_assign(uint8_t sprite, const uint8_t * address, uint8_t size, uint8_t layer) {
if (sprite < SPRITE_MAX) {
sprite_shadow[sprite].address = (p_far24)address;
uint8_t tmp = sprite_shadow[sprite].control & 0x87; // Mask off the size and layer bits
tmp |= (size & 0x03) << 5; // Add in the new size
tmp |= (layer & 0x03) << 3; // Add in the new layer
sprite_shadow[sprite].control = tmp;
sprite_update(sprite);
}
}
/**
* @brief Set the color lookup table for the sprite
*
* @param sprite the number of the sprite
* @param clut the number of the graphics color lookup table to use
*/
void sprite_clut(uint8_t sprite, uint8_t clut) {
if (sprite < SPRITE_MAX) {
uint8_t tmp = sprite_shadow[sprite].control & 0xf1; // Mask off the clut bits
tmp |= (clut & 0x03) << 1; // Add in the new clut
sprite_shadow[sprite].control = tmp;
sprite_update(sprite);
}
}
/**
* @brief Set the position of the sprite
*
* @param sprite the number of the sprite
* @param x the column for the sprite
* @param y the row for the sprite
*/
void sprite_position(uint8_t sprite, uint16_t x, uint16_t y) {
if (sprite < SPRITE_MAX) {
sprite_shadow[sprite].x = x;
sprite_shadow[sprite].y = y;
sprite_update(sprite);
}
}
/**
* @brief Enable or disable a sprite
*
* @param sprite the number of the sprite
* @param is_enabled if true display the sprite, if false hide the sprite
*/
void sprite_enable(uint8_t sprite, bool is_enabled) {
if (sprite < SPRITE_MAX) {
if (is_enabled) {
sprite_shadow[sprite].control |= 0x01;
} else {
sprite_shadow[sprite].control &= 0xfe;
}
sprite_update(sprite);
}
}
/**
* @brief Initialize the sprite registers
*
*/
void sprite_init() {
for (int i = 0; i < SPRITE_MAX; i++) {
memset(&sprite_shadow[i], 0, sizeof(t_sprite));
sprite_update(i);
}
}

59
src/dev/sprites.h Normal file
View file

@ -0,0 +1,59 @@
/**
* @file sprites.h
* @author your name (you@domain.com)
* @brief
* @version 0.1
* @date 2024-08-19
*
* @copyright Copyright (c) 2024
*
*/
#ifndef __sprites_h__
#define __sprites_h__
#include <stdint.h>
#include <stdbool.h>
/**
* @brief Set the basic information about the sprite
*
* @param sprite the number of the sprite
* @param address the address of the bitmap for the sprite
* @param size the size of the sprite (0 = 32x32, 1 = 24x24, 2 = 16x16, 3 = 8x8)
* @param layer the number of the layer for the sprite
*/
extern void sprite_assign(uint8_t sprite, const uint8_t * address, uint8_t size, uint8_t layer);
/**
* @brief Set the color lookup table for the sprite
*
* @param sprite the number of the sprite
* @param clut the number of the graphics color lookup table to use
*/
extern void sprite_clut(uint8_t sprite, uint8_t clut);
/**
* @brief Set the position of the sprite
*
* @param sprite the number of the sprite
* @param x the column for the sprite
* @param y the row for the sprite
*/
extern void sprite_position(uint8_t sprite, uint16_t x, uint16_t y);
/**
* @brief Enable or disable a sprite
*
* @param sprite the number of the sprite
* @param is_enabled if true display the sprite, if false hide the sprite
*/
extern void sprite_enable(uint8_t sprite, bool is_enabled);
/**
* @brief Initialize the sprite registers
*
*/
extern void sprite_init();
#endif

111
src/dev/tiles.c Normal file
View file

@ -0,0 +1,111 @@
#include <string.h>
#include "tiles.h"
#include "F256/vicky_ii.h"
static t_tile_set tile_set_shadow[VKY_TILESET_MAX];
static t_tile_map tile_map_shadow[VKY_TILEMAP_MAX];
/**
* @brief Setup a tile set
*
* @param set the number of the tile set (0 - 7)
* @param address pointer to the bitmap for the tile set
* @param is_square if true, layout of image is square, if false it is 8 or 16 pixels wide
*/
void tile_set_assign(uint8_t set, uint8_t * address, bool is_square) {
if (set <= VKY_TILESET_MAX) {
tile_set_shadow[set].address = (p_far24)address;
if (is_square) {
tile_set_shadow[set].control = VKY_TILESET_SQUARE;
} else {
tile_set_shadow[set].control = 0;
}
}
}
/**
* @brief Update the hardware tile set from its shadow
*
* @param set the number of the tile set (0 - 7)
*/
void tile_set_update(uint8_t set) {
vky_tile_sets[set].address = tile_set_shadow[set].address;
vky_tile_sets[set].control = tile_set_shadow[set].control;
}
/**
* @brief Initialize the tiles
*
*/
void tile_init() {
memset(tile_set_shadow, 0, VKY_TILESET_MAX * sizeof(t_tile_set));
memset(tile_map_shadow, 0, VKY_TILEMAP_MAX * sizeof(t_tile_map));
}
/**
* @brief Setup a tile map
*
* @param map the number of the tile map (0 - 2)
* @param address pointer to the actual tile map data
* @param width number of columns in the map
* @param height number of rows in the map
* @param size if 0, tiles are 16x16... if 1, tiles are 8x8
*/
void tile_map_assign(uint8_t map, uint16_t * address, uint8_t width, uint8_t height, uint8_t size) {
if (map <= VKY_TILEMAP_MAX) {
tile_map_shadow[map].address = (p_far24)address;
tile_map_shadow[map].width = width;
tile_map_shadow[map].height = height;
if (size == 0) {
tile_map_shadow[map].control &= ~VKY_TILEMAP_SIZE;
} else {
tile_map_shadow[map].control |= VKY_TILEMAP_SIZE;
}
}
}
/**
* @brief Set the scoll position of the tile map
*
* @param map the number of the tile map (0 - 2)
* @param x the horizontal scroll position
* @param y the vertical scroll position
*/
void tile_map_position(uint8_t map, uint16_t x, uint16_t y) {
if (map <= VKY_TILEMAP_MAX) {
tile_map_shadow[map].x = x;
tile_map_shadow[map].y = y;
}
}
/**
* @brief Enable or disable the tile map
*
* @param map the number of the tile map (0 - 2)
* @param is_enabled if true, the map should be displayed, if false it should not
*/
void tile_map_enable(uint8_t map, bool is_enabled) {
if (map <= VKY_TILEMAP_MAX) {
if (is_enabled) {
tile_map_shadow[map].control |= VKY_TILEMAP_ENABLE;
} else {
tile_map_shadow[map].control &= ~VKY_TILEMAP_ENABLE;
}
}
}
/**
* @brief Update the hardware tile map from its shadow
*
* @param map the number of the tile map (0 - 2)
*/
void tile_map_update(uint8_t map) {
vky_tile_maps[map].address = tile_map_shadow[map].address;
vky_tile_maps[map].width = tile_map_shadow[map].width;
vky_tile_maps[map].height = tile_map_shadow[map].height;
vky_tile_maps[map].x = tile_map_shadow[map].x;
vky_tile_maps[map].y = tile_map_shadow[map].y;
vky_tile_maps[map].control = tile_map_shadow[map].control;
}

75
src/dev/tiles.h Normal file
View file

@ -0,0 +1,75 @@
/**
* @file tiles.h
* @author your name (you@domain.com)
* @brief Provide some basic tile functions
* @version 0.1
* @date 2024-08-18
*
* @copyright Copyright (c) 2024
*
*/
#ifndef __tiles_h__
#define __tiles_h__
#include <stdbool.h>
#include <stdint.h>
/**
* @brief Setup a tile set
*
* @param set the number of the tile set (0 - 7)
* @param address pointer to the bitmap for the tile set
* @param is_square if true, layout of image is square, if false it is 8 or 16 pixels wide
*/
extern void tile_set_assign(uint8_t set, uint8_t * address, bool is_square);
/**
* @brief Update the hardware tile set from its shadow
*
* @param set the number of the tile set (0 - 7)
*/
extern void tile_set_update(uint8_t set);
/**
* @brief Initialize the tiles
*
*/
extern void tile_init();
/**
* @brief Setup a tile map
*
* @param map the number of the tile map (0 - 2)
* @param address pointer to the actual tile map data
* @param width number of columns in the map
* @param height number of rows in the map
* @param size if 0, tiles are 16x16... if 1, tiles are 8x8
*/
extern void tile_map_assign(uint8_t map, uint16_t * address, uint8_t width, uint8_t height, uint8_t size);
/**
* @brief Set the scoll position of the tile map
*
* @param map the number of the tile map (0 - 2)
* @param x the horizontal scroll position
* @param y the vertical scroll position
*/
extern void tile_map_position(uint8_t map, uint16_t x, uint16_t y);
/**
* @brief Enable or disable the tile map
*
* @param map the number of the tile map (0 - 2)
* @param is_enabled if true, the map should be displayed, if false it should not
*/
extern void tile_map_enable(uint8_t map, bool is_enabled);
/**
* @brief Update the hardware tile map from its shadow
*
* @param map the number of the tile map (0 - 2)
*/
extern void tile_map_update(uint8_t set);
#endif

View file

@ -71,7 +71,9 @@ typedef struct tvky_crsr_ctrl_s {
#define VKY_MCR_RES_320x240 0x0600
#define VKY_MCR_RES_320x200 0x0700
#define tvky_brdr_ctrl ((volatile tvky_border_ctrl_p)0xf01004)
#define tvky_layers ((volatile __attribute__((far)) uint16_t *)0xf01002)
#define tvky_brdr_ctrl ((volatile __attribute__((far)) tvky_border_ctrl_p)0xf01004)
#define vky_brdr_ctrl ((volatile __attribute__((far)) uint8_t *)0xf01004)
#define vky_brdr_col_blue ((volatile __attribute__((far)) uint8_t *)0xf01005)
@ -118,6 +120,23 @@ typedef volatile __attribute__((far24)) uint8_t *p_far24;
#define bm0_control ((volatile __attribute__((far)) uint8_t *)0xf01100)
#define bm0_address ((volatile __attribute__((far)) uint8_t *)0xf01101)
//
// Sprite graphics registers
//
/**
* @brief Registers for a given sprite
*
*/
typedef struct s_sprite {
uint8_t control;
p_far24 address;
uint16_t x;
uint16_t y;
} t_sprite, *p_sprite;
#define vky_sprite ((volatile __attribute__((far)) p_sprite)0xf01900)
#define MousePointer_Mem_A ((volatile __attribute__((far)) uint8_t *)0xf00c00)
#define MousePtr_A_CTRL_Reg ((volatile __attribute__((far)) uint8_t *)0xf016e0)
#define MousePtr_En 0x0001
@ -128,6 +147,42 @@ typedef volatile __attribute__((far24)) uint8_t *p_far24;
#define MousePtr_A_Mouse1 ((volatile __attribute__((far)) uint8_t *)0xf016e7)
#define MousePtr_A_Mouse2 ((volatile __attribute__((far)) uint8_t *)0xf016e8)
/**
* @brief Structure to represent a tile set (the bitmap providing the tiles)
*
*/
typedef struct s_tile_set {
p_far24 address;
uint8_t control;
} t_tile_set, *p_tile_set;
#define VKY_TILESET_SQUARE 0x08
#define VKY_TILESET_MAX 7
#define vky_tile_sets ((volatile __attribute__((far)) p_tile_set)0xf01280)
/**
* @brief Structure to represent a tile map (the assignments of tiles to positions)
*
*/
typedef struct s_tile_map {
uint8_t control;
p_far24 address;
uint8_t width;
uint8_t reserved1;
uint8_t height;
uint8_t reserved2;
uint16_t x;
uint16_t y;
} t_tile_map, *p_tile_map;
#define VKY_TILEMAP_ENABLE 0x01
#define VKY_TILEMAP_SIZE 0x10 /* 0 = 16x16, 1 = 8x8 */
#define VKY_TILEMAP_MAX 2
#define vky_tile_maps ((volatile __attribute__((far)) p_tile_map)0xf01200)
//
// Video RAM
//

View file

@ -10,7 +10,11 @@
*/
#ifdef __CALYPSI_CORE_65816__
#define SYSTEMCALL __attribute__((simple_call))
//
// System calls on the 65816 pass parameters primarily on stack using the Calypsi
// simple call convention and save/restore the direct page and data bank registers.
//
#define SYSTEMCALL __attribute__((simple_call)) __attribute__((saveds))
#else
#define SYSTEMCALL
#endif

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,156 @@
uint8_t boot_clut[] = {
0x88, 0x99, 0xF6, 0xff,
0x60, 0x6C, 0xF3, 0xff,
0x40, 0x4E, 0xE8, 0xff,
0x23, 0x1C, 0xE5, 0xff,
0x1D, 0x19, 0xDD, 0xff,
0x16, 0x17, 0xD0, 0xff,
0x11, 0x14, 0xC4, 0xff,
0x0A, 0x12, 0xB0, 0xff,
0xB1, 0x8F, 0xF4, 0xff,
0x92, 0x62, 0xF0, 0xff,
0x7A, 0x40, 0xEC, 0xff,
0x63, 0x1E, 0xE9, 0xff,
0x60, 0x1B, 0xD8, 0xff,
0x5B, 0x18, 0xC2, 0xff,
0x57, 0x14, 0xAD, 0xff,
0x4F, 0x0E, 0x88, 0xff,
0xD8, 0x93, 0xCE, 0xff,
0xC8, 0x68, 0xBA, 0xff,
0xBC, 0x47, 0xAB, 0xff,
0xB0, 0x27, 0x9C, 0xff,
0xAA, 0x24, 0x8E, 0xff,
0xA2, 0x1F, 0x7B, 0xff,
0x9A, 0x1B, 0x6A, 0xff,
0x8C, 0x14, 0x4A, 0xff,
0xDB, 0x9D, 0xB3, 0xff,
0xCD, 0x75, 0x95, 0xff,
0xC2, 0x57, 0x7E, 0xff,
0xB7, 0x3A, 0x67, 0xff,
0xB1, 0x35, 0x5E, 0xff,
0xA8, 0x2D, 0x51, 0xff,
0xA0, 0x27, 0x45, 0xff,
0x92, 0x1B, 0x31, 0xff,
0xDA, 0xA8, 0x9F, 0xff,
0xCB, 0x86, 0x79, 0xff,
0xC0, 0x6B, 0x5C, 0xff,
0xB5, 0x51, 0x3F, 0xff,
0xAB, 0x49, 0x39, 0xff,
0x9F, 0x3F, 0x30, 0xff,
0x93, 0x35, 0x28, 0xff,
0x7E, 0x23, 0x1A, 0xff,
0xFF, 0xBF, 0xAF, 0xff,
0xFF, 0xA7, 0x91, 0xff,
0xFE, 0x8F, 0x73, 0xff,
0xFC, 0x77, 0x56, 0xff,
0xEF, 0x6C, 0x4E, 0xff,
0xDE, 0x5E, 0x45, 0xff,
0xCE, 0x50, 0x3B, 0xff,
0xB1, 0x36, 0x2A, 0xff,
0xFA, 0xD4, 0x81, 0xff,
0xF7, 0xC3, 0x4F, 0xff,
0xF6, 0xB6, 0x29, 0xff,
0xF4, 0xA9, 0x03, 0xff,
0xE5, 0x9B, 0x03, 0xff,
0xD1, 0x88, 0x02, 0xff,
0xBD, 0x77, 0x02, 0xff,
0x9B, 0x57, 0x01, 0xff,
0xEA, 0xDE, 0x80, 0xff,
0xE1, 0xD0, 0x4D, 0xff,
0xDA, 0xC6, 0x26, 0xff,
0xD4, 0xBC, 0x00, 0xff,
0xC1, 0xAC, 0x00, 0xff,
0xA7, 0x97, 0x00, 0xff,
0x8F, 0x83, 0x00, 0xff,
0x64, 0x60, 0x00, 0xff,
0xC4, 0xCB, 0x80, 0xff,
0xAC, 0xB6, 0x4D, 0xff,
0x9A, 0xA6, 0x26, 0xff,
0x88, 0x96, 0x00, 0xff,
0x7B, 0x89, 0x00, 0xff,
0x6B, 0x79, 0x00, 0xff,
0x5C, 0x69, 0x00, 0xff,
0x40, 0x4D, 0x00, 0xff,
0x72, 0xD5, 0x72, 0xff,
0x41, 0xBD, 0x42, 0xff,
0x2B, 0xAF, 0x2B, 0xff,
0x24, 0x9B, 0x25, 0xff,
0x08, 0x8F, 0x0A, 0xff,
0x07, 0x7E, 0x0A, 0xff,
0x00, 0x6F, 0x05, 0xff,
0x02, 0x53, 0x0D, 0xff,
0xA5, 0xE1, 0xC5, 0xff,
0x81, 0xD5, 0xAE, 0xff,
0x65, 0xCC, 0x9C, 0xff,
0x4A, 0xC3, 0x8B, 0xff,
0x42, 0xB3, 0x7C, 0xff,
0x38, 0x9F, 0x68, 0xff,
0x2F, 0x8B, 0x55, 0xff,
0x1E, 0x69, 0x33, 0xff,
0x9C, 0xEE, 0xE6, 0xff,
0x75, 0xE7, 0xDC, 0xff,
0x57, 0xE1, 0xD4, 0xff,
0x39, 0xDC, 0xCD, 0xff,
0x33, 0xCA, 0xC0, 0xff,
0x2B, 0xB4, 0xAF, 0xff,
0x24, 0x9D, 0x9E, 0xff,
0x17, 0x77, 0x82, 0xff,
0x9D, 0xF5, 0xFF, 0xff,
0x76, 0xF1, 0xFF, 0xff,
0x58, 0xEE, 0xFF, 0xff,
0x3B, 0xEB, 0xFF, 0xff,
0x35, 0xD8, 0xFD, 0xff,
0x2D, 0xC0, 0xFB, 0xff,
0x25, 0xA8, 0xF9, 0xff,
0x17, 0x7F, 0xF5, 0xff,
0x82, 0xE0, 0xFF, 0xff,
0x4F, 0xD5, 0xFF, 0xff,
0x28, 0xCA, 0xFF, 0xff,
0x07, 0xC1, 0xFF, 0xff,
0x00, 0xB3, 0xFF, 0xff,
0x00, 0xA0, 0xFF, 0xff,
0x00, 0x8F, 0xFF, 0xff,
0x00, 0x6F, 0xFF, 0xff,
0x80, 0xCC, 0xFF, 0xff,
0x4D, 0xB7, 0xFF, 0xff,
0x26, 0xA7, 0xFF, 0xff,
0x00, 0x98, 0xFF, 0xff,
0x00, 0x8C, 0xFB, 0xff,
0x00, 0x7C, 0xF5, 0xff,
0x00, 0x6C, 0xEF, 0xff,
0x00, 0x51, 0xE6, 0xff,
0x91, 0xAB, 0xFF, 0xff,
0x65, 0x8A, 0xFF, 0xff,
0x43, 0x70, 0xFF, 0xff,
0x22, 0x57, 0xFF, 0xff,
0x1E, 0x51, 0xF4, 0xff,
0x19, 0x4A, 0xE6, 0xff,
0x15, 0x43, 0xD8, 0xff,
0x0C, 0x36, 0xBF, 0xff,
0xA4, 0xAA, 0xBC, 0xff,
0x7F, 0x88, 0xA1, 0xff,
0x63, 0x6E, 0x8D, 0xff,
0x48, 0x55, 0x79, 0xff,
0x41, 0x4C, 0x6D, 0xff,
0x37, 0x40, 0x5D, 0xff,
0x2E, 0x34, 0x4E, 0xff,
0x23, 0x27, 0x3E, 0xff,
0xEE, 0xEE, 0xEE, 0xff,
0xE0, 0xE0, 0xE0, 0xff,
0xBD, 0xBD, 0xBD, 0xff,
0x9E, 0x9E, 0x9E, 0xff,
0x75, 0x75, 0x75, 0xff,
0x61, 0x61, 0x61, 0xff,
0x42, 0x42, 0x42, 0xff,
0x21, 0x21, 0x21, 0xff,
0xC5, 0xBE, 0xB0, 0xff,
0xAE, 0xA4, 0x90, 0xff,
0x9C, 0x90, 0x78, 0xff,
0x8B, 0x7D, 0x60, 0xff,
0x7A, 0x6E, 0x54, 0xff,
0x64, 0x5A, 0x45, 0xff,
0x4F, 0x47, 0x37, 0xff,
0x38, 0x32, 0x26, 0xff,
0x00, 0x00, 0x00, 0xff,
0xFF, 0xFF, 0xFF, 0xff,
};

View file

@ -0,0 +1,374 @@
#ifndef __boot_sprites_h__
#define __boot_sprites_h__
#include <stdint.h>
const uint8_t boot_clut[] = {
0x88, 0x99, 0xF6, 0xff,
0x60, 0x6C, 0xF3, 0xff,
0x40, 0x4E, 0xE8, 0xff,
0x23, 0x1C, 0xE5, 0xff,
0x1D, 0x19, 0xDD, 0xff,
0x16, 0x17, 0xD0, 0xff,
0x11, 0x14, 0xC4, 0xff,
0x0A, 0x12, 0xB0, 0xff,
0xB1, 0x8F, 0xF4, 0xff,
0x92, 0x62, 0xF0, 0xff,
0x7A, 0x40, 0xEC, 0xff,
0x63, 0x1E, 0xE9, 0xff,
0x60, 0x1B, 0xD8, 0xff,
0x5B, 0x18, 0xC2, 0xff,
0x57, 0x14, 0xAD, 0xff,
0x4F, 0x0E, 0x88, 0xff,
0xD8, 0x93, 0xCE, 0xff,
0xC8, 0x68, 0xBA, 0xff,
0xBC, 0x47, 0xAB, 0xff,
0xB0, 0x27, 0x9C, 0xff,
0xAA, 0x24, 0x8E, 0xff,
0xA2, 0x1F, 0x7B, 0xff,
0x9A, 0x1B, 0x6A, 0xff,
0x8C, 0x14, 0x4A, 0xff,
0xDB, 0x9D, 0xB3, 0xff,
0xCD, 0x75, 0x95, 0xff,
0xC2, 0x57, 0x7E, 0xff,
0xB7, 0x3A, 0x67, 0xff,
0xB1, 0x35, 0x5E, 0xff,
0xA8, 0x2D, 0x51, 0xff,
0xA0, 0x27, 0x45, 0xff,
0x92, 0x1B, 0x31, 0xff,
0xDA, 0xA8, 0x9F, 0xff,
0xCB, 0x86, 0x79, 0xff,
0xC0, 0x6B, 0x5C, 0xff,
0xB5, 0x51, 0x3F, 0xff,
0xAB, 0x49, 0x39, 0xff,
0x9F, 0x3F, 0x30, 0xff,
0x93, 0x35, 0x28, 0xff,
0x7E, 0x23, 0x1A, 0xff,
0xFF, 0xBF, 0xAF, 0xff,
0xFF, 0xA7, 0x91, 0xff,
0xFE, 0x8F, 0x73, 0xff,
0xFC, 0x77, 0x56, 0xff,
0xEF, 0x6C, 0x4E, 0xff,
0xDE, 0x5E, 0x45, 0xff,
0xCE, 0x50, 0x3B, 0xff,
0xB1, 0x36, 0x2A, 0xff,
0xFA, 0xD4, 0x81, 0xff,
0xF7, 0xC3, 0x4F, 0xff,
0xF6, 0xB6, 0x29, 0xff,
0xF4, 0xA9, 0x03, 0xff,
0xE5, 0x9B, 0x03, 0xff,
0xD1, 0x88, 0x02, 0xff,
0xBD, 0x77, 0x02, 0xff,
0x9B, 0x57, 0x01, 0xff,
0xEA, 0xDE, 0x80, 0xff,
0xE1, 0xD0, 0x4D, 0xff,
0xDA, 0xC6, 0x26, 0xff,
0xD4, 0xBC, 0x00, 0xff,
0xC1, 0xAC, 0x00, 0xff,
0xA7, 0x97, 0x00, 0xff,
0x8F, 0x83, 0x00, 0xff,
0x64, 0x60, 0x00, 0xff,
0xC4, 0xCB, 0x80, 0xff,
0xAC, 0xB6, 0x4D, 0xff,
0x9A, 0xA6, 0x26, 0xff,
0x88, 0x96, 0x00, 0xff,
0x7B, 0x89, 0x00, 0xff,
0x6B, 0x79, 0x00, 0xff,
0x5C, 0x69, 0x00, 0xff,
0x40, 0x4D, 0x00, 0xff,
0x72, 0xD5, 0x72, 0xff,
0x41, 0xBD, 0x42, 0xff,
0x2B, 0xAF, 0x2B, 0xff,
0x24, 0x9B, 0x25, 0xff,
0x08, 0x8F, 0x0A, 0xff,
0x07, 0x7E, 0x0A, 0xff,
0x00, 0x6F, 0x05, 0xff,
0x02, 0x53, 0x0D, 0xff,
0xA5, 0xE1, 0xC5, 0xff,
0x81, 0xD5, 0xAE, 0xff,
0x65, 0xCC, 0x9C, 0xff,
0x4A, 0xC3, 0x8B, 0xff,
0x42, 0xB3, 0x7C, 0xff,
0x38, 0x9F, 0x68, 0xff,
0x2F, 0x8B, 0x55, 0xff,
0x1E, 0x69, 0x33, 0xff,
0x9C, 0xEE, 0xE6, 0xff,
0x75, 0xE7, 0xDC, 0xff,
0x57, 0xE1, 0xD4, 0xff,
0x39, 0xDC, 0xCD, 0xff,
0x33, 0xCA, 0xC0, 0xff,
0x2B, 0xB4, 0xAF, 0xff,
0x24, 0x9D, 0x9E, 0xff,
0x17, 0x77, 0x82, 0xff,
0x9D, 0xF5, 0xFF, 0xff,
0x76, 0xF1, 0xFF, 0xff,
0x58, 0xEE, 0xFF, 0xff,
0x3B, 0xEB, 0xFF, 0xff,
0x35, 0xD8, 0xFD, 0xff,
0x2D, 0xC0, 0xFB, 0xff,
0x25, 0xA8, 0xF9, 0xff,
0x17, 0x7F, 0xF5, 0xff,
0x82, 0xE0, 0xFF, 0xff,
0x4F, 0xD5, 0xFF, 0xff,
0x28, 0xCA, 0xFF, 0xff,
0x07, 0xC1, 0xFF, 0xff,
0x00, 0xB3, 0xFF, 0xff,
0x00, 0xA0, 0xFF, 0xff,
0x00, 0x8F, 0xFF, 0xff,
0x00, 0x6F, 0xFF, 0xff,
0x80, 0xCC, 0xFF, 0xff,
0x4D, 0xB7, 0xFF, 0xff,
0x26, 0xA7, 0xFF, 0xff,
0x00, 0x98, 0xFF, 0xff,
0x00, 0x8C, 0xFB, 0xff,
0x00, 0x7C, 0xF5, 0xff,
0x00, 0x6C, 0xEF, 0xff,
0x00, 0x51, 0xE6, 0xff,
0x91, 0xAB, 0xFF, 0xff,
0x65, 0x8A, 0xFF, 0xff,
0x43, 0x70, 0xFF, 0xff,
0x22, 0x57, 0xFF, 0xff,
0x1E, 0x51, 0xF4, 0xff,
0x19, 0x4A, 0xE6, 0xff,
0x15, 0x43, 0xD8, 0xff,
0x0C, 0x36, 0xBF, 0xff,
0xA4, 0xAA, 0xBC, 0xff,
0x7F, 0x88, 0xA1, 0xff,
0x63, 0x6E, 0x8D, 0xff,
0x48, 0x55, 0x79, 0xff,
0x41, 0x4C, 0x6D, 0xff,
0x37, 0x40, 0x5D, 0xff,
0x2E, 0x34, 0x4E, 0xff,
0x23, 0x27, 0x3E, 0xff,
0xEE, 0xEE, 0xEE, 0xff,
0xE0, 0xE0, 0xE0, 0xff,
0xBD, 0xBD, 0xBD, 0xff,
0x9E, 0x9E, 0x9E, 0xff,
0x75, 0x75, 0x75, 0xff,
0x61, 0x61, 0x61, 0xff,
0x42, 0x42, 0x42, 0xff,
0x21, 0x21, 0x21, 0xff,
0xC5, 0xBE, 0xB0, 0xff,
0xAE, 0xA4, 0x90, 0xff,
0x9C, 0x90, 0x78, 0xff,
0x8B, 0x7D, 0x60, 0xff,
0x7A, 0x6E, 0x54, 0xff,
0x64, 0x5A, 0x45, 0xff,
0x4F, 0x47, 0x37, 0xff,
0x38, 0x32, 0x26, 0xff,
0x00, 0x00, 0x00, 0xff,
0xFF, 0xFF, 0xFF, 0xff,
};
const uint8_t cartridge_pixels[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x3B, 0x4B, 0x63, 0x7B, 0x07, 0x8D, 0x8D, 0x8D, 0x8D, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x3B, 0x4B, 0x63, 0x7B, 0x07, 0x8D, 0x8D, 0x8D, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x3B, 0x4B, 0x63, 0x7B, 0x07, 0x8D, 0x8D, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x3B, 0x4B, 0x63, 0x7B, 0x07, 0x8D, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x3B, 0x4B, 0x63, 0x7B, 0x07, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x49, 0x64, 0x49, 0x64, 0x49, 0x64, 0x49, 0x64, 0x49, 0x64, 0x49, 0x64, 0x49, 0x64, 0x49, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x49, 0x64, 0x49, 0x64, 0x49, 0x64, 0x49, 0x64, 0x49, 0x64, 0x49, 0x64, 0x49, 0x64, 0x49, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const uint8_t foenix_pixels[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x17, 0x17, 0x17, 0x17, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x15, 0x15, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x16, 0x16, 0x16, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x16, 0x16, 0x16, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x17, 0x17, 0x17, 0x17, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const uint8_t ram_pixels[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x88, 0x88, 0x88, 0x8E, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x88, 0x8E, 0x8E, 0x88, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x88, 0x88, 0x8E, 0x88, 0x88, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x88, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x88, 0x88, 0x88, 0x8E, 0x8E, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x88, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x88, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x88, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const uint8_t rom_pixels[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x88, 0x88, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x88, 0x88, 0x8E, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x88, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x88, 0x8E, 0x88, 0x88, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x88, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x88, 0x88, 0x88, 0x8E, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x88, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x88, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x88, 0x8E, 0x8E, 0x88, 0x8E, 0x8E, 0x88, 0x88, 0x88, 0x8E, 0x8E, 0x88, 0x8E, 0x8E, 0x8E, 0x88, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x64, 0x64, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const uint8_t sd_ext_pixels[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x98, 0x98, 0x98, 0x88, 0x98, 0x88, 0x88, 0x98, 0x88, 0x98, 0x98, 0x98, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x98, 0x88, 0x88, 0x88, 0x98, 0x88, 0x88, 0x98, 0x88, 0x88, 0x98, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x98, 0x98, 0x88, 0x88, 0x88, 0x98, 0x98, 0x88, 0x88, 0x88, 0x98, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x98, 0x88, 0x88, 0x88, 0x98, 0x88, 0x88, 0x98, 0x88, 0x88, 0x98, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x98, 0x98, 0x98, 0x88, 0x98, 0x88, 0x88, 0x98, 0x88, 0x88, 0x98, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const uint8_t sd_int_pixels[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x04, 0x64, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x98, 0x98, 0x98, 0x88, 0x98, 0x88, 0x88, 0x98, 0x88, 0x98, 0x98, 0x98, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x88, 0x98, 0x88, 0x88, 0x98, 0x98, 0x88, 0x98, 0x88, 0x88, 0x98, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x88, 0x98, 0x88, 0x88, 0x98, 0x88, 0x98, 0x98, 0x88, 0x88, 0x98, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x88, 0x98, 0x88, 0x88, 0x98, 0x88, 0x88, 0x98, 0x88, 0x88, 0x98, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x98, 0x98, 0x98, 0x88, 0x98, 0x88, 0x88, 0x98, 0x88, 0x88, 0x98, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x07, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
#endif

View file

@ -0,0 +1,25 @@
import re
import sys
mode = 0
with open("sprite_clut.h", "w") as clut_file:
clut_file.write("uint8_t sprite_clut[] = {\n")
with open("arrow.txt", "r") as sprite_data:
for line in sprite_data:
if re.match(r'^begin palette', line):
mode = 1
elif re.match(r'end palette', line):
break
else:
m = re.match(r'^(\d+)\s+(\d+)\s+(\d+)\s+', line)
if m:
red = int(m.group(1))
green = int(m.group(2))
blue = int(m.group(3))
clut_line = "\t0x{0:02X}, 0x{1:02X}, 0x{2:02X}, 0xff,\n".format(blue, green, red)
clut_file.write(clut_line)
clut_file.write("};\n")

View file

@ -0,0 +1,28 @@
import re
import sys
mode = 0
sprite_name = sys.argv[1]
input_file = "{}.txt".format(sprite_name)
out_file = "{}.h".format(sprite_name)
with open(out_file, "w") as index_file:
index_file.write("uint8_t {0}_pixels[] = {1}\n".format(sprite_name, "{"))
with open(input_file, "r") as sprite_data:
for line in sprite_data:
if re.match(r'^begin indices', line):
mode = 1
elif re.match(r'end indices', line):
break
elif mode == 1:
indices = re.findall(r'\d+', line)
index_file.write("\t")
for index in indices:
value = int(index)
index_file.write("0x{0:02X}, ".format(value))
index_file.write("\n")
index_file.write("};\n")

Binary file not shown.

Binary file not shown.

308
src/rsrc/tiles/boot_tiles.h Normal file
View file

@ -0,0 +1,308 @@
#ifndef __boot_tiles_h__
#define __boot_tiles_h__
#include <stdint.h>
const uint8_t boot_tiles_pixels[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x27, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x27,
0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x23, 0x23,
0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x23, 0x23,
0x27, 0x23, 0x23, 0x20, 0x20, 0x23, 0x23, 0x27,
0x27, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x27,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x23, 0x23, 0x23, 0x04, 0x67, 0x63, 0x4A, 0x3B,
0x20, 0x20, 0x04, 0x67, 0x63, 0x4A, 0x3B, 0x20,
0x20, 0x04, 0x67, 0x63, 0x4A, 0x3B, 0x20, 0x20,
0x04, 0x67, 0x63, 0x4A, 0x3B, 0x23, 0x23, 0x23,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x3B, 0x4A, 0x63, 0x67, 0x04, 0x23, 0x23, 0x23,
0x20, 0x3B, 0x4A, 0x63, 0x67, 0x04, 0x20, 0x20,
0x20, 0x20, 0x3B, 0x4A, 0x63, 0x67, 0x04, 0x20,
0x23, 0x23, 0x23, 0x3B, 0x4A, 0x63, 0x67, 0x04,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x27, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x27,
0x23, 0x23, 0x20, 0x20, 0x20, 0x20, 0x23, 0x27,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x27,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x27,
0x23, 0x23, 0x20, 0x20, 0x20, 0x20, 0x23, 0x27,
0x27, 0x23, 0x23, 0x20, 0x20, 0x23, 0x23, 0x27,
0x27, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x27,
0x00, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x17,
0x00, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x17,
0x00, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x17,
0x00, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x17,
0x00, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x17,
0x00, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x17,
0x00, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x17,
0x00, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x00,
0x17, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x00,
0x17, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x00,
0x17, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x00,
0x17, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x00,
0x17, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x00,
0x17, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x00,
0x17, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x00,
0x27, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x27,
0x27, 0x23, 0x23, 0x20, 0x20, 0x23, 0x23, 0x27,
0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x23, 0x23,
0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x23, 0x23,
0x27, 0x23, 0x23, 0x20, 0x20, 0x23, 0x23, 0x27,
0x27, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x27,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x27, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x27,
0x27, 0x23, 0x23, 0x20, 0x20, 0x23, 0x23, 0x27,
0x23, 0x23, 0x20, 0x20, 0x20, 0x20, 0x23, 0x27,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x27,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x27,
0x23, 0x23, 0x20, 0x20, 0x20, 0x20, 0x23, 0x27,
0x27, 0x23, 0x23, 0x20, 0x20, 0x23, 0x23, 0x27,
0x27, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x27,
0x27, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x27,
0x27, 0x23, 0x23, 0x20, 0x20, 0x23, 0x23, 0x27,
0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x23, 0x23,
0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x23, 0x23,
0x27, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x27,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x27, 0x27, 0x23, 0x20, 0x20, 0x23, 0x27, 0x27,
0x27, 0x23, 0x23, 0x20, 0x20, 0x23, 0x23, 0x27,
0x23, 0x23, 0x20, 0x20, 0x20, 0x20, 0x23, 0x27,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x27,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x27,
0x23, 0x23, 0x20, 0x20, 0x20, 0x20, 0x23, 0x27,
0x27, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x27,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x27,
0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x23, 0x23,
0x00, 0x00, 0x00, 0x00, 0x27, 0x23, 0x20, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x27, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x23, 0x23, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x20, 0x23, 0x27, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x27, 0x23, 0x20, 0x20, 0x20,
0x27, 0x27, 0x27, 0x23, 0x20, 0x20, 0x20, 0x20,
0x23, 0x23, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x23, 0x23, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20,
0x27, 0x27, 0x27, 0x23, 0x20, 0x20, 0x20, 0x20,
0x17, 0x17, 0x17, 0x27, 0x23, 0x20, 0x20, 0x20,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x17, 0x17, 0x17, 0x17, 0x20, 0x20, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20,
0x20, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x17, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x17, 0x17, 0x17, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20, 0x20,
0x20, 0x20, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20,
0x20, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20, 0x20,
0x20, 0x20, 0x17, 0x17, 0x20, 0x20, 0x20, 0x20,
0x20, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20,
0x20, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20, 0x20,
0x20, 0x17, 0x17, 0x20, 0x20, 0x20, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x17, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x17, 0x17, 0x20, 0x20,
0x20, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x17, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x20, 0x17, 0x17, 0x20,
0x17, 0x17, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20,
0x17, 0x17, 0x20, 0x20, 0x20, 0x17, 0x17, 0x20,
0x17, 0x17, 0x20, 0x20, 0x20, 0x17, 0x17, 0x20,
0x20, 0x17, 0x17, 0x17, 0x17, 0x17, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x23, 0x27, 0x00, 0x00, 0x00,
0x20, 0x20, 0x20, 0x20, 0x23, 0x27, 0x27, 0x27,
0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x23, 0x23,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x23, 0x23,
0x20, 0x20, 0x20, 0x20, 0x23, 0x27, 0x27, 0x27,
0x20, 0x20, 0x20, 0x23, 0x27, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x27, 0x23, 0x20, 0x20,
0x17, 0x17, 0x17, 0x17, 0x17, 0x27, 0x23, 0x23,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x27, 0x27,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x20, 0x20, 0x23, 0x27, 0x17, 0x17, 0x17, 0x17,
0x23, 0x23, 0x27, 0x17, 0x17, 0x17, 0x17, 0x17,
0x27, 0x27, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17
};
const uint16_t boot_tiles_map[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 3, 18, 19, 20, 21, 22, 23, 24, 25, 25, 19, 26, 27, 28, 29, 3, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 7, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 7, 7, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
#endif

View file

@ -481,44 +481,48 @@ int main(int argc, char * argv[]) {
test_sysinfo();
printf("Foenix Toolbox v%d.%04d.%04d\n", VER_MAJOR, VER_MINOR, VER_BUILD);
// printf("Foenix Toolbox v%d.%04d.%04d\n", VER_MAJOR, VER_MINOR, VER_BUILD);
const char * test_data = "Hello, world!";
// const char * test_data = "Hello, world!";
volatile uint8_t * cartridge = ((volatile uint8_t *)0xf40000);
// volatile uint8_t * cartridge = ((volatile uint8_t *)0xf40000);
short cartridge_id = cart_id();
switch(cartridge_id) {
case CART_ID_NONE:
printf("No cartridge detected.\n");
break;
// short cartridge_id = cart_id();
// switch(cartridge_id) {
// case CART_ID_NONE:
// printf("No cartridge detected.\n");
// break;
case CART_ID_RAM:
printf("RAM cartridge detected.\n");
break;
// case CART_ID_RAM:
// printf("RAM cartridge detected.\n");
// break;
case CART_ID_FLASH:
printf("FLASH cartridge detected.\n");
// printf("Attempting to erase the flash cartridge.\n");
// cart_erase();
// printf("Attempting to program the flash cartridge.\n");
// for (int i = 0; i < strlen(test_data); i++) {
// cart_write(0xf40000 + i, test_data[i]);
// }
// case CART_ID_FLASH:
// printf("FLASH cartridge detected.\n");
// // printf("Attempting to erase the flash cartridge.\n");
// // cart_erase();
// // printf("Attempting to program the flash cartridge.\n");
// // for (int i = 0; i < strlen(test_data); i++) {
// // cart_write(0xf40000 + i, test_data[i]);
// // }
// for (int j = 0; j < strlen(test_data); j++) {
// txt_put(0, cartridge[j]);
// }
// // for (int j = 0; j < strlen(test_data); j++) {
// // txt_put(0, cartridge[j]);
// // }
// printf("\n");
break;
// // printf("\n");
// break;
default:
printf("Unable to determine whether a cartridge is present.\n");
break;
}
// default:
// printf("Unable to determine whether a cartridge is present.\n");
// break;
// }
test_kbd();
boot_screen();
while (1) ;
// test_kbd();
// printf("Initializing IEC\n");
// result = iec_init();