diff --git a/src/boot.c b/src/boot.c index c994069..070d7cf 100644 --- a/src/boot.c +++ b/src/boot.c @@ -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 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"); +} \ No newline at end of file diff --git a/src/boot.h b/src/boot.h index e45c4d6..7b5e235 100644 --- a/src/boot.h +++ b/src/boot.h @@ -20,4 +20,10 @@ */ extern void boot_launch(); +/** + * @brief Setup the boot screen + * + */ +extern void boot_screen(); + #endif diff --git a/src/cartridge.c b/src/cartridge.c index 54cdae9..2c7a4f9 100644 --- a/src/cartridge.c +++ b/src/cartridge.c @@ -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) ; + } + } + } +} diff --git a/src/cartridge.h b/src/cartridge.h index e41951e..fb723dc 100644 --- a/src/cartridge.h +++ b/src/cartridge.h @@ -14,6 +14,8 @@ #include +#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 \ No newline at end of file diff --git a/src/dev/Makefile b/src/dev/Makefile index 7756c6c..b540d60 100644 --- a/src/dev/Makefile +++ b/src/dev/Makefile @@ -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)) diff --git a/src/dev/sprites.c b/src/dev/sprites.c new file mode 100644 index 0000000..99ed5fe --- /dev/null +++ b/src/dev/sprites.c @@ -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 + +#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); + } +} \ No newline at end of file diff --git a/src/dev/sprites.h b/src/dev/sprites.h new file mode 100644 index 0000000..2a2d915 --- /dev/null +++ b/src/dev/sprites.h @@ -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 +#include + +/** + * @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 \ No newline at end of file diff --git a/src/dev/tiles.c b/src/dev/tiles.c new file mode 100644 index 0000000..36d9534 --- /dev/null +++ b/src/dev/tiles.c @@ -0,0 +1,111 @@ + +#include + +#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; +} \ No newline at end of file diff --git a/src/dev/tiles.h b/src/dev/tiles.h new file mode 100644 index 0000000..f7f1c05 --- /dev/null +++ b/src/dev/tiles.h @@ -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 +#include + +/** + * @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 \ No newline at end of file diff --git a/src/include/F256/vicky_ii.h b/src/include/F256/vicky_ii.h index c5b1c0f..f3a7ecf 100644 --- a/src/include/F256/vicky_ii.h +++ b/src/include/F256/vicky_ii.h @@ -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 // diff --git a/src/include/sys_macros.h b/src/include/sys_macros.h index 8a4aadd..777100d 100644 --- a/src/include/sys_macros.h +++ b/src/include/sys_macros.h @@ -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 diff --git a/src/rsrc/sprites/Arrow.aseprite b/src/rsrc/sprites/Arrow.aseprite new file mode 100644 index 0000000..864c280 Binary files /dev/null and b/src/rsrc/sprites/Arrow.aseprite differ diff --git a/src/rsrc/sprites/Cartridge Icon.aseprite b/src/rsrc/sprites/Cartridge Icon.aseprite new file mode 100644 index 0000000..f50606d Binary files /dev/null and b/src/rsrc/sprites/Cartridge Icon.aseprite differ diff --git a/src/rsrc/sprites/Foenix Logo.aseprite b/src/rsrc/sprites/Foenix Logo.aseprite new file mode 100644 index 0000000..b4f93a2 Binary files /dev/null and b/src/rsrc/sprites/Foenix Logo.aseprite differ diff --git a/src/rsrc/sprites/Memory Icon.aseprite b/src/rsrc/sprites/Memory Icon.aseprite new file mode 100644 index 0000000..74b95c0 Binary files /dev/null and b/src/rsrc/sprites/Memory Icon.aseprite differ diff --git a/src/rsrc/sprites/SD Card Icon.aseprite b/src/rsrc/sprites/SD Card Icon.aseprite new file mode 100644 index 0000000..e67b223 Binary files /dev/null and b/src/rsrc/sprites/SD Card Icon.aseprite differ diff --git a/src/rsrc/sprites/boot_clut.h b/src/rsrc/sprites/boot_clut.h new file mode 100644 index 0000000..9c901c4 --- /dev/null +++ b/src/rsrc/sprites/boot_clut.h @@ -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, +}; diff --git a/src/rsrc/sprites/boot_sprites.h b/src/rsrc/sprites/boot_sprites.h new file mode 100644 index 0000000..bda3c59 --- /dev/null +++ b/src/rsrc/sprites/boot_sprites.h @@ -0,0 +1,374 @@ + +#ifndef __boot_sprites_h__ +#define __boot_sprites_h__ + +#include + +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 diff --git a/src/rsrc/sprites/extract_clut.py b/src/rsrc/sprites/extract_clut.py new file mode 100644 index 0000000..9ee6c65 --- /dev/null +++ b/src/rsrc/sprites/extract_clut.py @@ -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") diff --git a/src/rsrc/sprites/extract_indicies.py b/src/rsrc/sprites/extract_indicies.py new file mode 100644 index 0000000..4aab9ef --- /dev/null +++ b/src/rsrc/sprites/extract_indicies.py @@ -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") diff --git a/src/rsrc/tiles/Boot Tiles Flattened.aseprite b/src/rsrc/tiles/Boot Tiles Flattened.aseprite new file mode 100644 index 0000000..dbb623e Binary files /dev/null and b/src/rsrc/tiles/Boot Tiles Flattened.aseprite differ diff --git a/src/rsrc/tiles/Boot Tiles.aseprite b/src/rsrc/tiles/Boot Tiles.aseprite new file mode 100644 index 0000000..09246b6 Binary files /dev/null and b/src/rsrc/tiles/Boot Tiles.aseprite differ diff --git a/src/rsrc/tiles/boot_tiles.h b/src/rsrc/tiles/boot_tiles.h new file mode 100644 index 0000000..c30d75f --- /dev/null +++ b/src/rsrc/tiles/boot_tiles.h @@ -0,0 +1,308 @@ +#ifndef __boot_tiles_h__ +#define __boot_tiles_h__ + +#include + +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 diff --git a/src/toolbox.c b/src/toolbox.c index ff7f43e..bb77e35 100644 --- a/src/toolbox.c +++ b/src/toolbox.c @@ -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();