diff options
-rwxr-xr-x | scripts/manifest2header.awk | 13 | ||||
-rwxr-xr-x | scripts/tiled.mk.awk | 16 | ||||
-rwxr-xr-x | scripts/tilemap2png | 47 | ||||
-rwxr-xr-x | scripts/tilemap2tiled | 42 | ||||
-rwxr-xr-x | scripts/tilepack | 22 | ||||
-rw-r--r-- | src/makefile | 14 | ||||
-rw-r--r-- | src/ppu/consts.h | 6 | ||||
-rw-r--r-- | src/ppu/ppu.c | 24 | ||||
-rw-r--r-- | src/ppu/ppu.h | 3 | ||||
-rw-r--r-- | src/ppusim/sim.c | 33 | ||||
-rw-r--r-- | src/ppusim/sim.h | 4 | ||||
-rw-r--r-- | src/static/.gitignore | 6 | ||||
-rw-r--r-- | src/static/air.hex | 17 | ||||
-rw-r--r-- | src/static/makefile | 42 | ||||
-rw-r--r-- | src/static/shop.hex | 331 | ||||
-rw-r--r-- | src/static/slime.hex | 24 | ||||
-rw-r--r-- | src/static/world.h | 1 | ||||
-rw-r--r-- | src/static/world.hex | 514 | ||||
-rw-r--r-- | src/stm32/setup.c | 4 | ||||
-rw-r--r-- | src/tilemap.h | 7 |
20 files changed, 1146 insertions, 24 deletions
diff --git a/scripts/manifest2header.awk b/scripts/manifest2header.awk new file mode 100755 index 0000000..15cd682 --- /dev/null +++ b/scripts/manifest2header.awk @@ -0,0 +1,13 @@ +#!/bin/awk -f +BEGIN { + offset = 0 + print "#pragma once" +} +1 { + print "#define HH_TM_"toupper($1)"_OFFSET "offset + print "#define HH_TM_"toupper($1)"_SIZE "$2 + offset += $2 +} +END { + print "#define HH_TM_SIZE "offset +} diff --git a/scripts/tiled.mk.awk b/scripts/tiled.mk.awk new file mode 100755 index 0000000..7728cf3 --- /dev/null +++ b/scripts/tiled.mk.awk @@ -0,0 +1,16 @@ +#!/bin/awk -f +BEGIN { + targets="" + print "tiled_dir:\n\tmkdir -p tiled" +} +1 { + for (i = 0; i < $2; i++) { + target = sprintf("tiled/%s_%02d.png", $1,i) + printf target" " + targets = targets" "target + } + printf "&: %s.bin\n",$1 + printf "\t$(TILEMAP2TILED) $<\n\n" +} +END { print "tiled: tiled_dir"targets } + diff --git a/scripts/tilemap2png b/scripts/tilemap2png new file mode 100755 index 0000000..e37bfab --- /dev/null +++ b/scripts/tilemap2png @@ -0,0 +1,47 @@ +#!/bin/python3 +# read packed tilemap file from stdin and output png on stdout + +import sys +import io +import struct +from PIL import Image + +color_map = ( + (0x00, 0x00, 0x00), + (0x24, 0x24, 0x24), + (0x49, 0x49, 0x49), + (0x6d, 0x6d, 0x6d), + (0x92, 0x92, 0x92), + (0xb6, 0xb6, 0xb6), + (0xda, 0xda, 0xda), + (0xff, 0xff, 0xff), +) + +buf = [] +for byte in sys.stdin.buffer.read(): + buf.append(byte) + +size_horizontal = 16 * 16 +size_vertical = ((len(buf) // 104) // 16 + 1) * 16 +img = Image.new('RGB', (size_horizontal, size_vertical)) + +i = 0 +sprite_idx = 0 +for x in range(0, len(buf), 2): + word = 0x0000 + word |= buf[x] + word |= buf[x+1] << 8 + + for p in range(5): + img.putpixel(((i % 16) + (16 * (sprite_idx % 16)), (i // 16) + (16 * (sprite_idx // 16))), color_map[(word >> (p * 3)) & 0b111]) + i += 1 + if i > 0xff: + i = 0 + sprite_idx += 1 + break + +with io.BytesIO() as out: + img.save(out, format="PNG") + sys.stdout.buffer.write(out.getvalue()) + sys.stdout.buffer.flush() + diff --git a/scripts/tilemap2tiled b/scripts/tilemap2tiled new file mode 100755 index 0000000..905f801 --- /dev/null +++ b/scripts/tilemap2tiled @@ -0,0 +1,42 @@ +#!/bin/python3 +# read packed tilemap file from argv[1] and output pngs + +import sys +import io +import struct +from PIL import Image + +color_map = ( + (0x00, 0x00, 0x00), + (0x24, 0x24, 0x24), + (0x49, 0x49, 0x49), + (0x6d, 0x6d, 0x6d), + (0x92, 0x92, 0x92), + (0xb6, 0xb6, 0xb6), + (0xda, 0xda, 0xda), + (0xff, 0xff, 0xff), +) + +img = Image.new('RGB', (16, 16)) + +buf = "" +with open(sys.argv[1], "rb") as f: + buf = f.read() + +i = 0 +sprite_idx = 0 +for x in range(0, len(buf), 2): + word = 0x0000 + word |= buf[x] + word |= buf[x+1] << 8 + + for p in range(5): + img.putpixel((i % 16, i // 16), color_map[(word >> (p * 3)) & 0b111]) + i += 1 + if i > 0xff: + i = 0 + img.save(f"tiled/{sys.argv[1].replace('.bin','')}_{str(sprite_idx).zfill(2)}.png", format="PNG") + img = Image.new('RGB', (16, 16)) + sprite_idx += 1 + break + diff --git a/scripts/tilepack b/scripts/tilepack new file mode 100755 index 0000000..a07cbb6 --- /dev/null +++ b/scripts/tilepack @@ -0,0 +1,22 @@ +#!/bin/python3 +# read bytes from input and pack into ppu format +# each input sprite is 256 bytes + +import sys +import struct + +i = 0 +word = 0x0000 +for byte in sys.stdin.buffer.read(): + pixel_idx = i % 5 + word |= (byte & 0b111) << 3 * pixel_idx + + if pixel_idx == 4 or i == 0xff: + sys.stdout.buffer.write(struct.pack('<H', word)) + word = 0x0000 + + i += 1 + if i > 0xff: i = 0 + +sys.stdout.buffer.flush() + diff --git a/src/makefile b/src/makefile index c30840d..ac67c86 100644 --- a/src/makefile +++ b/src/makefile @@ -82,7 +82,15 @@ $(TARGET).bin: $(TARGET).elf PHONY += flash flash: $(TARGET).bin - st-flash --reset write $(TARGET).bin 0x08000000 + st-flash --reset write $< 0x08000000 + +# see definition of g_hh_tilemap_rom in stm32/setup.c +PHONY += rom +rom: static/tilemap.bin + st-flash --reset write $< 0x08033000 + +static/tilemap.bin static/tilemap.h &: + $(MAKE) -C static all %-ds.o: %.c $(CC) -c $(CFLAGS) $< -o $@ @@ -103,4 +111,8 @@ PHONY += clean clean: $(RM) $(TARGET).bin $(TARGET).elf $(OBJS) +PHONY += distclean +distclean: clean + $(MAKE) -C static clean + .PHONY: $(PHONY) diff --git a/src/ppu/consts.h b/src/ppu/consts.h index a27b7b7..d7caf5e 100644 --- a/src/ppu/consts.h +++ b/src/ppu/consts.h @@ -55,3 +55,9 @@ #define HH_PPU_VRAM_AUX_OFFSET ((hh_ppu_addr_t) 0xde00) /** @brief auxiliary memory size in words */ #define HH_PPU_VRAM_AUX_SIZE ((hh_ppu_addr_t) 0x0002) + +/** @brief sprite size in bytes */ +#define HH_PPU_BYTE_SPRITE_SIZE (HH_PPU_VRAM_TMM_SPRITE_SIZE * sizeof(hh_ppu_data_t)) +/** @brief sprite size in 32-bit words (for stm) */ +#define HH_PPU_NATIVE_SPRITE_SIZE (HH_PPU_BYTE_SPRITE_SIZE / sizeof(uint32_t)) + diff --git a/src/ppu/ppu.c b/src/ppu/ppu.c index df14b9f..1f46b16 100644 --- a/src/ppu/ppu.c +++ b/src/ppu/ppu.c @@ -3,6 +3,7 @@ #include "ppu/consts.h" #include "ppu/internals.h" #include "ppu/ppu.h" +#include "tilemap.h" void hh_ppu_update_foreground(unsigned index, hh_s_ppu_loc_fam_entry e) { hh_s_ppu_vram_data s = hh_ppu_2nat_fam(e); @@ -46,3 +47,26 @@ void hh_ppu_update_color(unsigned palette_index, unsigned color_index, hh_ppu_rg hh_ppu_vram_write(c); free(c.data); } + +void hh_ppu_load_tilemap() { + for (size_t sprite_idx = 0; sprite_idx < HH_TM_SIZE; sprite_idx++) { + for (size_t word_idx = 0; word_idx < HH_PPU_NATIVE_SPRITE_SIZE; word_idx++) { + uint32_t native_word = g_hh_tilemap_rom[word_idx + sprite_idx * HH_PPU_NATIVE_SPRITE_SIZE]; + uint32_t native_word_bytes[4] = { // TODO: check endianness of stm32 + (native_word >> 24) & 0xff, + (native_word >> 16) & 0xff, + (native_word >> 8) & 0xff, + (native_word >> 0) & 0xff, + }; + uint16_t ppu_words[2] = { + (native_word_bytes[2] << 8) | (native_word_bytes[3] << 0), + (native_word_bytes[0] << 8) | (native_word_bytes[1] << 0), + }; + hh_ppu_vram_write((hh_s_ppu_vram_data) { + .data = ppu_words, + .offset = HH_PPU_VRAM_TMM_OFFSET + sprite_idx * HH_PPU_VRAM_TMM_SPRITE_SIZE + word_idx * 2, + .size = 2, + }); + } + } +} diff --git a/src/ppu/ppu.h b/src/ppu/ppu.h index 75d97c1..46b58af 100644 --- a/src/ppu/ppu.h +++ b/src/ppu/ppu.h @@ -23,3 +23,6 @@ void hh_ppu_update_palette_table(hh_ppu_loc_palette_table_t table); void hh_ppu_update_palette(unsigned palette_index, hh_ppu_loc_palette_data_t palette); /** @brief update single color in palette */ void hh_ppu_update_color(unsigned palette_index, unsigned color_index, hh_ppu_rgb_color_t color); + +/** @brief copy g_hh_tilemap_rom into PPU vram */ +void hh_ppu_load_tilemap(); diff --git a/src/ppusim/sim.c b/src/ppusim/sim.c index 8b67acc..0f8d687 100644 --- a/src/ppusim/sim.c +++ b/src/ppusim/sim.c @@ -10,9 +10,11 @@ #include "ppusim/mem.h" #include "ppusim/sim.h" #include "ppusim/work.h" +#include "tilemap.h" SDL_Window *g_hh_window = NULL; SDL_Renderer *g_hh_renderer = NULL; +uint32_t* g_hh_tilemap_rom = NULL; void hh_ppu_init() { SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS); @@ -25,38 +27,27 @@ void hh_ppu_init() { g_hh_ppusim_vram = malloc(sizeof(hh_ppu_data_t) * 0xffff); memset(g_hh_ppusim_vram, 0x0000, 0xffff); + hh_ppusim_load_tilemap(); + hh_ppu_load_tilemap(); } -void hh_ppu_load_tilemap() { - //TODO: remove magic file name here - char* filename = "static/tiles.bin"; - FILE* fp = fopen(filename,"rb"); - if (!fp){ - fprintf(stderr,"Error: Failed to load tiles."); - return;//error - } - int sprite_size = (HH_PPU_SPRITE_WIDTH * HH_PPU_SPRITE_HEIGHT); - fseek(fp, 0, SEEK_END);//goto EOF - int _size = ftell(fp)/sprite_size; - fseek(fp, 0, 0);//goto start of file +void hh_ppusim_load_tilemap() { + FILE* fp = fopen("static/tilemap.bin", "rb"); - for (int i = 0; i < _size; i++) { - uint8_t data[sprite_size]; + fseek(fp, 0, SEEK_END); + size_t file_size = ftell(fp); + rewind(fp); - fread(data,sizeof(uint8_t),sprite_size,fp); - - hh_s_ppu_vram_data sprite = hh_ppu_2nat_sprite(data); - sprite.offset = i*HH_PPU_VRAM_TMM_SPRITE_SIZE; - hh_ppu_vram_write(sprite); - free(sprite.data); - } + g_hh_tilemap_rom = malloc(file_size); + fread(g_hh_tilemap_rom, file_size, 1, fp); fclose(fp); } void hh_ppu_deinit() { free(g_hh_ppusim_threads); free(g_hh_ppusim_vram); + free(g_hh_tilemap_rom); SDL_DestroyRenderer(g_hh_renderer); SDL_DestroyWindow(g_hh_window); diff --git a/src/ppusim/sim.h b/src/ppusim/sim.h index 4d1d718..218d61d 100644 --- a/src/ppusim/sim.h +++ b/src/ppusim/sim.h @@ -5,5 +5,5 @@ /** @brief max framerate for PPUSIM */ #define HH_PPUSIM_FRAMERATE 60 -/** @brief pump tilemap from rom to ppu ram */ -void hh_ppu_load_tilemap(); //ppu sim? +/** @brief load static/tilemap.bin into memory */ +void hh_ppusim_load_tilemap(); diff --git a/src/static/.gitignore b/src/static/.gitignore new file mode 100644 index 0000000..348c5b9 --- /dev/null +++ b/src/static/.gitignore @@ -0,0 +1,6 @@ +**/*.bin +**/*.meta +manifest.txt +tilemap.h +tiled/* +tiled.mk diff --git a/src/static/air.hex b/src/static/air.hex new file mode 100644 index 0000000..5160cd6 --- /dev/null +++ b/src/static/air.hex @@ -0,0 +1,17 @@ +00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + diff --git a/src/static/makefile b/src/static/makefile new file mode 100644 index 0000000..6025a55 --- /dev/null +++ b/src/static/makefile @@ -0,0 +1,42 @@ +XXD := xxd +TILEPACK := ../../scripts/tilepack +MANIFEST2HEADER := ../../scripts/manifest2header.awk +TILEDMK := ../../scripts/tiled.mk.awk +TILEMAP2TILED := ../../scripts/tilemap2tiled + +INPUT += air.hex \ + shop.hex \ + slime.hex \ + world.hex +USER_META += world.h + +OUT_BIN := $(patsubst %.hex,%.bin, $(INPUT)) +OUT_META := $(patsubst %.hex,%.meta, $(INPUT)) + +.PHONY: all clean + +all: tilemap.bin tilemap.h + +%.bin: %.hex + sed 's/;.*//g' $< | $(XXD) -r | $(TILEPACK) > $@ + +%.meta: %.bin + wc -c $< | tr '.' ' ' | awk '1 { print $$2" "$$1 / 104 }' > $@ + +manifest.txt: $(OUT_BIN) $(OUT_META) + cat $(OUT_META) > $@ + +tilemap.bin: manifest.txt $(OUT_BIN) + awk '1 { print $$1".bin" }' $< | xargs cat > $@ + +tilemap.h: manifest.txt + $(MANIFEST2HEADER) $< > $@ + cat $(USER_META) >> $@ + +tiled.mk: manifest.txt + $(TILEDMK) < $< > $@ + +include tiled.mk + +clean: + $(RM) -r $(OUT_BIN) $(OUT_META) manifest.txt tilemap.h tilemap.bin tiled.mk tiled diff --git a/src/static/shop.hex b/src/static/shop.hex new file mode 100644 index 0000000..8c08feb --- /dev/null +++ b/src/static/shop.hex @@ -0,0 +1,331 @@ +;indices: 9 +;75 24 38 +;a5 30 30 +;cf 57 3c +;1e 1d 39 +;40 27 51 +;7a 36 7b +;10 14 1f +;eb ed e9 +;17 20 38 + +000000: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +000010: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +000020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000030: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000040: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000050: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000060: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000070: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000080: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000090: 06 01 00 00 00 00 00 00 00 00 00 00 00 00 00 01 +0000a0: 06 01 00 00 00 00 00 00 00 00 00 00 00 00 00 01 +0000b0: 06 06 01 00 00 00 00 00 00 00 00 00 00 00 01 06 +0000c0: 06 06 06 01 00 00 00 00 00 00 00 00 00 01 06 06 +0000d0: 06 06 06 06 01 01 00 00 00 00 00 01 01 06 06 06 +0000e0: 06 06 06 06 06 06 01 01 01 01 01 06 06 06 06 06 +0000f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000100: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000110: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000120: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000130: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000140: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000150: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000160: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000170: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000180: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000190: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0001a0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0001b0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0001c0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0001d0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0001e0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0001f0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000200: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000210: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000220: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000230: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000240: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000250: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000260: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000270: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000280: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000290: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +0002a0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +0002b0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +0002c0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +0002d0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +0002e0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +0002f0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000300: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000310: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000320: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06 +000330: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06 +000340: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06 +000350: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06 +000360: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06 +000370: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06 +000380: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06 +000390: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06 +0003a0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06 +0003b0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06 +0003c0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06 +0003d0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06 +0003e0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06 +0003f0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06 +000400: 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 +000410: 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 +000420: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000430: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000440: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000450: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000460: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000470: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000480: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000490: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +0004a0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +0004b0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +0004c0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +0004d0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +0004e0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +0004f0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06 +000500: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +000510: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +000520: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000530: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000540: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000550: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000560: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000570: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000580: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000590: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0005a0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0005b0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0005c0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0005d0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0005e0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +0005f0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +000600: 01 01 01 01 01 01 01 01 06 06 06 06 06 06 06 06 +000610: 01 01 01 01 01 01 01 01 06 06 06 06 06 06 06 06 +000620: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06 +000630: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06 +000640: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06 +000650: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06 +000660: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06 +000670: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06 +000680: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06 +000690: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06 +0006a0: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06 +0006b0: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06 +0006c0: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06 +0006d0: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06 +0006e0: 01 01 01 01 01 01 01 01 06 06 06 06 06 06 06 06 +0006f0: 01 01 01 01 01 01 01 01 06 06 06 06 06 06 06 06 +000700: 06 06 06 06 06 06 06 01 06 06 06 06 06 06 01 01 +000710: 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01 01 +000720: 06 06 06 06 06 01 06 06 06 06 06 06 06 01 01 01 +000730: 06 06 06 06 01 06 06 06 06 06 06 06 01 06 01 01 +000740: 06 06 06 01 06 06 06 06 06 06 06 01 06 06 01 01 +000750: 06 06 01 06 06 06 06 06 06 06 01 06 06 06 01 01 +000760: 06 01 06 06 06 06 06 06 06 01 06 06 06 06 01 01 +000770: 01 06 06 06 06 06 06 06 01 06 06 06 06 06 01 01 +000780: 06 06 06 06 06 06 06 01 06 06 06 06 06 06 01 01 +000790: 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01 01 +0007a0: 06 06 06 06 06 01 06 06 06 06 06 06 06 01 01 01 +0007b0: 06 06 06 06 01 06 06 06 06 06 06 06 01 06 01 01 +0007c0: 06 06 06 01 06 06 06 06 06 06 06 01 06 06 01 01 +0007d0: 06 06 01 06 06 06 06 06 06 06 01 06 06 06 01 01 +0007e0: 06 01 06 06 06 06 06 06 06 01 06 06 06 06 01 01 +0007f0: 01 06 06 06 06 06 06 06 01 06 06 06 06 06 01 01 +000800: 06 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01 +000810: 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01 06 +000820: 06 06 06 06 06 01 06 06 06 06 06 06 06 01 06 06 +000830: 06 06 06 06 01 06 06 06 06 06 06 06 01 06 06 06 +000840: 06 06 06 01 06 06 06 06 06 06 06 01 06 06 06 06 +000850: 06 06 01 06 06 06 06 06 06 06 01 06 06 06 06 06 +000860: 06 01 06 06 06 06 06 06 06 01 06 06 06 06 06 06 +000870: 01 06 06 06 06 06 06 06 01 06 06 06 06 06 06 06 +000880: 06 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01 +000890: 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01 06 +0008a0: 06 06 06 06 06 01 06 06 06 06 06 06 06 01 06 06 +0008b0: 06 06 06 06 01 06 06 06 06 06 06 06 01 06 06 06 +0008c0: 06 06 06 01 06 06 06 06 06 06 06 01 06 06 06 06 +0008d0: 06 06 01 06 06 06 06 06 06 06 01 06 06 06 06 06 +0008e0: 06 01 06 06 06 06 06 06 06 01 06 06 06 06 06 06 +0008f0: 01 06 06 06 06 06 06 06 01 06 06 06 06 06 06 06 +000900: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +000910: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +000920: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000930: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000940: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000950: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000960: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000970: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000980: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000990: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0009a0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0009b0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0009c0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0009d0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0009e0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0009f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000a00: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000a10: 06 06 06 01 01 06 06 06 06 06 06 06 06 06 06 06 +000a20: 06 06 01 01 01 01 06 06 06 06 06 06 06 06 06 06 +000a30: 06 01 01 01 01 01 01 06 06 06 06 06 06 06 06 06 +000a40: 06 01 01 01 01 01 01 06 06 06 06 06 06 06 06 06 +000a50: 06 06 01 01 01 01 06 06 06 06 06 06 06 06 06 06 +000a60: 06 06 06 01 01 06 06 06 06 06 06 06 06 06 06 06 +000a70: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000a80: 06 06 06 06 06 06 06 06 06 06 01 01 06 06 06 06 +000a90: 06 06 06 06 06 06 06 06 06 01 01 01 01 06 06 06 +000aa0: 06 06 06 06 06 06 06 06 01 01 01 01 01 01 06 06 +000ab0: 06 06 06 06 06 06 06 06 01 01 01 01 01 01 06 06 +000ac0: 06 06 06 06 06 06 06 06 06 01 01 01 01 06 06 06 +000ad0: 06 06 06 06 06 06 06 06 06 06 01 01 06 06 06 06 +000ae0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000af0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000b00: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000b10: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000b20: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000b30: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000b40: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000b50: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000b60: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000b70: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000b80: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000b90: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000ba0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000bb0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000bc0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000bd0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000be0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000bf0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06 +000c00: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000c10: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000c20: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000c30: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000c40: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000c50: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000c60: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +000c70: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 +000c80: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 +000c90: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 +000ca0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 +000cb0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 +000cc0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 +000cd0: 06 06 06 06 06 06 01 01 01 01 06 06 06 06 06 01 +000ce0: 06 06 06 06 06 01 01 01 01 01 06 06 06 06 06 01 +000cf0: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 01 +000d00: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 01 +000d10: 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06 01 +000d20: 06 06 06 06 01 01 01 01 06 06 06 06 06 06 06 01 +000d30: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 +000d40: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 +000d50: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 +000d60: 06 06 06 06 06 06 01 01 01 01 06 06 06 06 06 01 +000d70: 06 06 06 06 06 01 01 01 01 01 06 06 06 06 06 01 +000d80: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 01 +000d90: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 01 +000da0: 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06 01 +000db0: 06 06 06 06 01 01 01 01 06 06 06 06 06 06 06 01 +000dc0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 +000dd0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 +000de0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 +000df0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 +000e00: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 06 +000e10: 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06 06 +000e20: 06 06 06 06 01 01 01 01 06 06 06 06 06 06 06 06 +000e30: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000e40: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000e50: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000e60: 06 06 06 06 06 06 01 01 01 01 06 06 06 06 06 06 +000e70: 06 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06 +000e80: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 06 +000e90: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 06 +000ea0: 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06 06 +000eb0: 06 06 06 06 01 01 01 01 06 06 06 06 06 06 06 06 +000ec0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000ed0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000ee0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000ef0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000f00: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000f10: 06 07 07 06 07 06 07 07 07 07 06 06 06 06 06 06 +000f20: 06 07 07 06 07 06 06 07 07 06 06 06 06 06 06 06 +000f30: 06 07 07 07 07 06 06 07 07 06 06 07 07 07 07 06 +000f40: 06 07 07 06 07 06 06 07 07 06 06 06 06 06 06 06 +000f50: 06 07 07 06 07 06 07 07 07 07 06 06 06 06 06 06 +000f60: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000f70: 06 07 07 07 07 07 07 07 07 07 07 07 07 07 07 06 +000f80: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000f90: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +000fa0: 06 07 07 07 07 06 07 07 07 07 06 07 07 07 07 06 +000fb0: 06 07 06 06 06 06 07 07 06 06 06 07 07 06 07 06 +000fc0: 06 07 07 07 07 06 07 07 06 06 06 07 07 06 07 06 +000fd0: 06 06 06 07 07 06 07 07 06 06 06 07 07 06 07 06 +000fe0: 06 07 07 07 07 06 07 07 07 07 06 07 07 07 07 06 +000ff0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001000: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001010: 07 07 07 07 06 07 07 07 07 06 07 07 07 07 06 07 +001020: 07 06 06 06 06 07 07 06 06 06 07 07 06 07 06 07 +001030: 07 07 07 07 06 07 07 06 06 06 07 07 06 07 06 07 +001040: 06 06 07 07 06 07 07 06 06 06 07 07 06 07 06 07 +001050: 07 07 07 07 06 07 07 07 07 06 07 07 07 07 06 07 +001060: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001070: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001080: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001090: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0010a0: 07 07 07 07 06 07 07 07 07 06 07 07 06 06 06 06 +0010b0: 07 07 06 07 06 07 07 06 06 06 07 07 06 06 06 06 +0010c0: 07 07 07 06 06 07 07 07 07 06 06 06 06 06 06 07 +0010d0: 07 07 06 07 06 07 07 06 06 06 07 07 06 06 07 06 +0010e0: 07 07 06 07 06 07 07 07 07 06 07 07 06 06 07 07 +0010f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001100: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001110: 07 07 07 06 07 07 07 07 06 07 07 06 06 06 06 06 +001120: 07 06 07 06 07 07 06 06 06 07 07 06 06 06 06 07 +001130: 07 07 06 06 07 07 07 07 06 06 06 06 06 06 07 07 +001140: 07 06 07 06 07 07 06 06 06 07 07 06 06 07 06 07 +001150: 07 06 07 06 07 07 07 07 06 07 07 06 06 07 07 07 +001160: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001170: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001180: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001190: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0011a0: 06 07 07 07 06 06 06 06 06 07 07 06 06 06 06 07 +0011b0: 07 06 07 07 06 06 06 06 07 07 07 06 06 06 06 06 +0011c0: 06 07 07 06 06 06 06 07 07 07 06 06 06 07 07 07 +0011d0: 07 07 06 06 06 06 07 07 07 06 06 06 07 07 06 06 +0011e0: 07 06 06 06 06 07 07 07 06 06 06 06 07 07 07 06 +0011f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001200: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001210: 07 07 07 06 06 07 07 07 07 07 06 06 06 06 07 07 +001220: 07 07 06 06 06 06 06 07 07 07 06 06 06 07 06 07 +001230: 07 06 06 06 06 06 07 07 07 06 06 06 07 07 07 07 +001240: 07 06 06 06 06 07 07 07 06 06 06 07 06 07 07 06 +001250: 06 06 06 06 07 07 07 06 06 06 06 07 07 07 06 06 +001260: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001270: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001280: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001290: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0012a0: 07 07 06 06 06 06 07 07 07 06 06 06 07 06 06 07 +0012b0: 07 07 06 06 07 06 06 07 07 06 06 07 06 06 07 07 +0012c0: 07 06 06 06 06 07 07 07 06 06 06 06 07 07 07 06 +0012d0: 06 06 06 07 06 07 07 06 06 06 06 07 07 07 06 06 +0012e0: 06 06 06 07 07 07 06 06 06 06 07 07 07 06 06 06 +0012f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001300: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001310: 07 06 06 06 06 07 07 07 06 06 06 06 06 06 06 06 +001320: 07 06 06 06 07 06 07 07 06 06 06 06 06 06 06 06 +001330: 06 06 06 06 07 07 07 06 06 06 06 06 06 06 06 06 +001340: 06 06 06 07 07 07 06 06 06 06 06 06 06 06 06 06 +001350: 06 06 07 07 07 06 06 06 06 06 06 06 06 06 06 06 +001360: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001370: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001380: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +001390: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 +0013a0: 06 06 06 07 07 07 07 06 06 06 06 06 06 06 06 06 +0013b0: 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06 06 +0013c0: 06 06 07 07 07 06 06 06 06 06 06 06 06 06 06 06 +0013d0: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06 +0013e0: 06 07 07 07 06 06 06 06 06 06 06 06 06 06 06 06 +0013f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
\ No newline at end of file diff --git a/src/static/slime.hex b/src/static/slime.hex new file mode 100644 index 0000000..ce20533 --- /dev/null +++ b/src/static/slime.hex @@ -0,0 +1,24 @@ +;slime sprite +;indices: 4 +;23 32 56 +;25 51 45 +;70 130 50 +;117 167 67 + +00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +40: 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00 00 +50: 00 00 00 01 03 03 03 03 03 03 01 00 00 00 00 00 +60: 00 00 01 03 03 03 03 03 03 03 03 01 00 00 00 00 +70: 00 01 03 03 03 03 03 03 03 01 02 03 01 00 00 00 +80: 01 03 03 03 01 02 03 03 03 01 01 03 03 01 00 00 +90: 01 03 03 03 01 01 03 03 03 03 03 03 03 03 01 00 +a0: 01 03 03 03 03 03 03 03 02 03 03 03 03 03 02 01 +b0: 01 02 03 03 03 03 03 03 03 03 03 03 03 02 02 01 +c0: 00 01 02 03 03 03 03 03 03 03 03 02 02 02 02 01 +d0: 00 00 01 02 02 03 03 03 02 02 02 02 02 02 01 00 +e0: 00 00 00 01 02 02 02 02 02 02 02 02 02 01 00 00 +f0: 00 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 + diff --git a/src/static/world.h b/src/static/world.h new file mode 100644 index 0000000..081b157 --- /dev/null +++ b/src/static/world.h @@ -0,0 +1 @@ +#define HH_TM_WORLD_DUMMY_OFFSET (HH_TM_WORLD_OFFSET + 5) diff --git a/src/static/world.hex b/src/static/world.hex new file mode 100644 index 0000000..446f3dd --- /dev/null +++ b/src/static/world.hex @@ -0,0 +1,514 @@ +;TODO split up file +;Tilemap (all current tiles) +0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +0100: 06 06 06 06 06 05 06 06 06 06 06 05 06 06 06 06 +0110: 06 05 05 05 05 03 05 05 05 05 05 03 05 05 05 05 +0120: 06 05 04 04 04 03 05 05 05 05 05 03 05 05 05 05 +0130: 06 04 04 04 04 02 02 02 02 02 02 02 02 02 02 02 +0140: 06 04 04 04 04 02 02 03 03 03 03 03 03 02 03 03 +0150: 05 04 04 04 04 02 03 03 03 03 03 03 03 02 03 03 +0160: 05 04 04 04 04 02 03 03 03 03 03 03 03 02 03 03 +0170: 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02 02 +0180: 06 06 04 04 04 04 04 02 02 02 03 03 03 03 02 02 +0190: 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02 +01a0: 05 04 04 04 04 04 04 02 02 03 03 03 03 03 03 02 +01b0: 05 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02 +01c0: 00 05 04 04 04 04 04 04 02 02 03 03 03 03 03 03 +01d0: 00 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03 +01e0: 00 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03 +01f0: 06 06 06 05 05 05 02 02 02 02 02 02 02 02 02 02 +0200: 06 06 06 05 06 06 06 06 06 06 06 05 06 06 06 06 +0210: 05 05 05 03 05 05 05 05 05 05 05 03 05 05 05 05 +0220: 05 05 05 03 05 05 05 05 05 05 05 03 05 05 05 05 +0230: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +0240: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03 +0250: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03 +0260: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03 +0270: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +0280: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02 +0290: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02 +02a0: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02 +02b0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +02c0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03 +02d0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03 +02e0: 02 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03 +02f0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +0300: 06 06 06 05 06 06 06 06 06 06 05 06 06 06 06 06 +0310: 05 05 05 03 05 05 05 05 05 05 03 05 05 05 05 06 +0320: 05 05 05 03 05 05 05 05 05 05 03 04 04 05 05 06 +0330: 02 02 02 02 02 02 02 02 02 02 02 04 04 04 04 06 +0340: 03 03 03 03 03 02 03 03 03 03 02 04 04 04 04 06 +0350: 03 03 03 03 03 02 03 03 03 03 02 04 04 04 04 05 +0360: 03 03 03 03 03 02 03 03 03 03 02 04 04 04 04 05 +0370: 02 02 02 02 02 02 02 02 02 02 02 03 03 03 03 05 +0380: 03 03 03 03 03 03 03 02 04 04 04 04 04 05 05 00 +0390: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00 +03a0: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00 +03b0: 02 02 02 02 02 02 02 02 02 02 02 05 05 06 06 06 +03c0: 03 02 03 03 03 03 03 03 03 02 04 04 04 04 04 06 +03d0: 03 02 03 03 03 03 03 03 03 02 04 04 04 04 04 06 +03e0: 03 02 03 03 03 03 03 03 03 02 04 04 04 04 04 05 +03f0: 02 02 02 02 02 02 02 02 02 02 02 02 03 03 03 05 +0400: 06 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02 +0410: 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02 +0420: 05 04 04 04 04 04 04 02 02 03 03 03 03 03 02 02 +0430: 05 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02 +0440: 00 05 04 04 04 03 02 03 03 03 03 03 03 02 03 03 +0450: 00 05 04 04 04 02 03 03 03 03 03 03 03 02 03 03 +0460: 00 04 04 04 04 02 03 03 03 03 03 02 02 02 02 03 +0470: 06 06 05 05 02 02 02 02 02 02 02 02 02 02 02 02 +0480: 06 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02 +0490: 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02 +04a0: 05 04 04 04 04 04 04 02 02 03 03 03 03 03 03 02 +04b0: 05 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02 +04c0: 00 05 05 04 04 04 04 03 02 03 03 03 03 03 03 03 +04d0: 00 05 04 04 04 04 04 04 02 02 03 03 03 03 03 03 +04e0: 00 05 04 04 04 04 04 04 02 02 03 03 03 03 03 03 +04f0: 00 05 03 03 03 03 03 02 02 02 02 02 02 02 02 02 +0500: 03 03 02 02 02 03 03 03 03 03 03 02 02 03 03 03 +0510: 03 03 03 02 03 03 03 03 03 03 03 02 03 03 03 03 +0520: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 03 03 +0530: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +0540: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03 +0550: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03 +0560: 03 03 03 03 03 02 03 03 03 03 03 03 02 02 02 03 +0570: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +0580: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 02 02 +0590: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02 +05a0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02 +05b0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +05c0: 02 02 02 03 03 03 03 03 03 02 03 03 03 03 03 03 +05d0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03 +05e0: 03 02 03 03 03 03 03 03 02 02 02 03 03 03 03 03 +05f0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +0600: 03 03 03 02 03 03 03 03 03 03 03 02 04 04 05 00 +0610: 03 03 03 02 03 03 03 03 03 03 03 02 04 04 05 00 +0620: 03 03 02 02 03 03 03 03 03 03 03 02 04 04 04 00 +0630: 02 02 02 02 02 02 02 02 02 02 02 02 02 06 06 06 +0640: 03 03 03 03 03 02 03 03 03 02 04 04 04 04 04 06 +0650: 03 03 03 03 03 02 03 03 03 02 04 04 04 04 04 05 +0660: 03 03 03 03 03 02 03 03 03 02 04 04 04 04 04 05 +0670: 02 02 02 02 02 02 02 02 02 02 02 03 03 03 03 05 +0680: 03 03 03 03 03 03 03 02 04 04 04 04 04 05 05 00 +0690: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00 +06a0: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00 +06b0: 02 02 02 02 02 02 02 02 02 02 02 03 03 06 06 06 +06c0: 03 02 03 03 03 03 03 03 03 02 04 04 04 04 04 06 +06d0: 03 02 03 03 03 03 03 03 03 02 04 04 04 04 04 05 +06e0: 03 02 03 03 03 03 03 03 03 02 04 04 04 04 04 05 +06f0: 02 02 02 02 02 02 02 02 02 02 02 02 03 03 03 05 +0700: 06 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02 +0710: 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02 +0720: 05 04 04 04 04 04 04 02 02 03 03 03 03 03 02 02 +0730: 05 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02 +0740: 00 05 04 04 04 03 02 03 03 03 03 03 03 02 03 03 +0750: 00 05 04 04 04 02 03 03 03 03 03 03 03 02 03 03 +0760: 00 04 04 04 04 02 03 03 03 03 03 02 02 02 02 03 +0770: 06 06 05 05 02 02 02 02 02 02 02 02 02 02 02 02 +0780: 06 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02 +0790: 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02 +07a0: 05 04 04 04 04 04 04 02 02 03 03 03 03 03 03 02 +07b0: 05 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02 +07c0: 00 05 05 04 04 04 04 04 04 04 04 02 02 02 02 04 +07d0: 00 05 05 04 04 04 04 04 04 04 04 04 02 04 04 04 +07e0: 00 06 05 05 05 04 04 04 04 04 04 04 03 04 04 04 +07f0: 00 06 06 06 05 05 05 05 05 05 05 05 03 05 05 05 +0800: 03 03 02 02 02 03 03 03 03 03 03 02 02 03 03 03 +0810: 03 03 03 02 03 03 03 03 03 03 03 02 03 03 03 03 +0820: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 03 03 +0830: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +0840: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03 +0850: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03 +0860: 03 03 03 03 03 02 03 03 03 03 03 03 02 02 02 03 +0870: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +0880: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 02 02 +0890: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02 +08a0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02 +08b0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +08c0: 04 04 04 04 04 04 04 04 03 03 03 04 04 04 04 04 +08d0: 04 04 04 04 04 04 04 04 04 03 03 04 04 04 04 04 +08e0: 04 04 04 04 04 04 04 04 04 03 04 04 04 04 04 04 +08f0: 05 05 05 05 05 05 05 05 05 03 05 05 05 05 05 05 +0900: 03 03 03 02 03 03 03 03 03 03 03 02 04 04 05 00 +0910: 03 03 03 02 03 03 03 03 03 03 03 02 04 04 05 00 +0920: 03 03 02 02 03 03 03 03 03 03 03 02 04 04 04 00 +0930: 02 02 02 02 02 02 02 02 02 02 02 02 02 06 06 06 +0940: 03 03 03 03 03 02 03 03 03 02 04 04 04 04 04 06 +0950: 03 03 03 03 03 02 03 03 03 02 04 04 04 04 04 05 +0960: 03 03 03 03 03 02 03 03 03 02 04 04 04 04 04 05 +0970: 02 02 02 02 02 02 02 02 02 02 02 03 03 03 03 05 +0980: 03 03 03 03 03 03 03 02 04 04 04 04 04 05 05 00 +0990: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00 +09a0: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00 +09b0: 02 02 02 02 02 02 03 03 03 03 03 03 03 06 06 06 +09c0: 04 04 03 03 03 04 04 04 04 04 04 04 04 04 05 06 +09d0: 04 04 04 03 03 04 04 04 04 04 04 04 04 05 05 05 +09e0: 04 04 04 03 04 04 04 04 04 04 04 05 05 05 05 06 +09f0: 05 05 05 03 05 05 05 05 05 05 05 05 05 06 06 06 +0a00: 06 06 06 06 06 05 06 06 06 06 06 05 06 06 06 06 +0a10: 06 05 05 05 05 03 05 05 05 05 05 03 05 05 05 05 +0a20: 06 05 04 04 04 03 05 05 05 05 05 03 05 05 05 05 +0a30: 06 04 04 04 04 02 02 02 02 02 02 02 02 02 02 02 +0a40: 06 04 04 04 04 02 02 03 03 03 03 03 03 02 03 03 +0a50: 05 04 04 04 04 02 03 03 03 03 03 03 03 02 03 03 +0a60: 05 04 04 04 04 02 03 03 03 03 03 03 03 02 03 03 +0a70: 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02 02 +0a80: 06 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02 +0a90: 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02 +0aa0: 05 04 04 04 04 04 04 02 02 03 03 03 03 03 03 02 +0ab0: 05 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02 +0ac0: 00 05 05 04 04 04 04 04 04 04 04 02 02 02 02 04 +0ad0: 00 05 05 04 04 04 04 04 04 04 04 04 02 04 04 04 +0ae0: 00 06 05 05 05 04 04 04 04 04 04 04 03 04 04 04 +0af0: 00 06 06 06 05 05 05 05 05 05 05 05 03 05 05 05 +0b00: 06 06 06 05 06 06 06 06 06 06 06 05 06 06 06 06 +0b10: 05 05 05 03 05 05 05 05 05 05 05 03 05 05 05 05 +0b20: 05 05 05 03 05 05 05 05 05 05 05 03 05 05 05 05 +0b30: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +0b40: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03 +0b50: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03 +0b60: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03 +0b70: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +0b80: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 02 02 +0b90: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02 +0ba0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02 +0bb0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +0bc0: 04 04 04 04 04 04 04 04 03 03 03 04 04 04 04 04 +0bd0: 04 04 04 04 04 04 04 04 04 03 03 04 04 04 04 04 +0be0: 04 04 04 04 04 04 04 04 04 03 04 04 04 04 04 04 +0bf0: 05 05 05 05 05 05 05 05 05 03 05 05 05 05 05 05 +0c00: 06 06 06 05 06 06 06 06 06 06 05 06 06 06 06 06 +0c10: 05 05 05 03 05 05 05 05 05 05 03 05 05 05 05 06 +0c20: 05 05 05 03 05 05 05 05 05 05 03 04 04 05 05 06 +0c30: 02 02 02 02 02 02 02 02 02 02 02 04 04 04 04 06 +0c40: 03 03 03 03 03 02 03 03 03 03 02 04 04 04 04 06 +0c50: 03 03 03 03 03 02 03 03 03 03 02 04 04 04 04 05 +0c60: 03 03 03 03 03 02 03 03 03 03 02 04 04 04 04 05 +0c70: 02 02 02 02 02 02 02 02 02 02 02 03 03 03 03 05 +0c80: 03 03 03 03 03 03 03 02 04 04 04 04 04 05 05 00 +0c90: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00 +0ca0: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00 +0cb0: 02 02 02 02 02 02 03 03 03 03 03 03 03 06 06 06 +0cc0: 04 04 03 03 03 04 04 04 04 04 04 04 04 04 05 06 +0cd0: 04 04 04 03 03 04 04 04 04 04 04 04 04 05 05 05 +0ce0: 04 04 04 03 04 04 04 04 04 04 04 05 05 05 05 06 +0cf0: 05 05 05 03 05 05 05 05 05 05 05 05 05 06 06 06 +0d00: 06 06 06 06 06 05 06 06 06 06 05 06 06 06 06 06 +0d10: 06 05 05 05 05 03 05 05 05 05 03 05 05 05 05 06 +0d20: 06 05 04 04 04 03 05 05 05 05 03 04 04 05 05 06 +0d30: 06 04 04 04 04 02 02 02 02 02 02 04 04 04 04 06 +0d40: 06 04 04 04 04 02 02 03 03 03 02 04 04 04 04 06 +0d50: 05 04 04 04 04 02 03 03 03 03 02 04 04 04 04 05 +0d60: 05 04 04 04 04 02 03 03 03 03 02 04 04 04 04 05 +0d70: 03 03 03 03 03 02 02 02 02 02 02 03 03 03 03 05 +0d80: 06 06 04 04 04 04 04 02 04 04 04 04 04 05 05 00 +0d90: 05 04 04 04 04 04 04 02 04 04 04 04 04 04 05 00 +0da0: 05 04 04 04 04 04 04 02 04 04 04 04 04 04 05 00 +0db0: 05 03 03 03 03 03 02 02 02 02 02 05 05 06 06 06 +0dc0: 00 05 04 04 04 04 04 04 03 02 04 04 04 04 04 06 +0dd0: 00 05 04 04 04 04 04 04 03 02 04 04 04 04 04 06 +0de0: 00 05 04 04 04 04 04 04 03 02 04 04 04 04 04 05 +0df0: 06 06 06 05 05 05 02 02 02 02 02 02 03 03 03 05 +0e00: 06 04 04 04 04 04 04 02 03 03 03 02 04 04 05 00 +0e10: 05 04 04 04 04 04 04 02 03 03 03 02 04 04 05 00 +0e20: 05 04 04 04 04 04 04 02 03 03 03 02 04 04 04 00 +0e30: 05 03 03 03 03 03 02 02 02 02 02 02 02 06 06 06 +0e40: 00 05 04 04 04 03 02 03 03 02 04 04 04 04 04 06 +0e50: 00 05 04 04 04 02 03 03 03 02 04 04 04 04 04 05 +0e60: 00 04 04 04 04 02 03 03 03 02 03 04 04 04 04 05 +0e70: 06 06 05 05 02 02 02 02 02 02 02 03 03 03 03 05 +0e80: 06 04 04 04 04 04 04 02 04 04 04 04 04 05 05 00 +0e90: 05 04 04 04 04 04 04 02 04 04 04 04 04 04 05 00 +0ea0: 05 04 04 04 04 04 04 02 04 04 04 04 04 04 05 00 +0eb0: 05 03 03 03 03 03 02 02 02 02 02 03 03 06 06 06 +0ec0: 00 05 05 04 04 04 03 03 03 03 03 04 04 04 04 06 +0ed0: 00 05 04 04 04 04 03 03 03 03 04 04 04 04 04 05 +0ee0: 00 05 04 04 04 03 03 03 03 03 04 04 04 04 04 05 +0ef0: 00 05 03 03 03 03 03 02 02 02 02 02 03 03 03 05 +0f00: 06 04 04 04 04 04 04 02 03 03 03 02 04 04 05 00 +0f10: 05 04 04 04 04 04 04 02 03 03 03 02 04 04 05 00 +0f20: 05 04 04 04 04 04 04 02 03 03 03 02 04 04 04 00 +0f30: 05 03 03 03 03 03 02 02 02 02 02 02 02 06 06 06 +0f40: 00 05 04 04 04 03 02 03 03 02 04 04 04 04 04 06 +0f50: 00 05 04 04 04 02 03 03 03 02 04 04 04 04 04 05 +0f60: 00 04 04 04 04 02 03 03 03 02 04 04 04 04 04 05 +0f70: 06 06 05 05 02 02 02 02 02 02 02 03 03 03 03 05 +0f80: 06 04 04 04 04 04 04 02 04 04 04 04 04 05 05 00 +0f90: 05 04 04 04 04 04 04 02 04 04 04 04 04 04 05 00 +0fa0: 05 04 04 04 04 04 04 02 04 04 04 04 04 04 05 00 +0fb0: 05 03 03 03 03 03 02 02 03 03 03 03 03 06 06 06 +0fc0: 00 05 05 04 04 04 04 04 04 04 04 04 04 04 05 06 +0fd0: 00 05 05 04 04 04 04 04 04 04 04 04 04 05 05 05 +0fe0: 00 06 05 05 05 04 04 04 04 04 04 05 05 05 05 06 +0ff0: 00 06 06 06 05 05 05 05 05 05 05 05 05 06 06 06 +1000: 03 03 02 02 02 03 03 03 03 03 03 02 02 03 03 03 +1010: 03 03 03 02 03 03 03 03 03 03 03 02 03 03 03 03 +1020: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 03 03 +1030: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1040: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03 +1050: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03 +1060: 03 03 03 03 03 02 03 03 03 03 03 03 02 02 02 03 +1070: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1080: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 02 02 +1090: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02 +10a0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02 +10b0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +10c0: 02 02 02 03 03 03 03 03 03 02 03 03 03 04 04 04 +10d0: 03 02 03 03 03 03 03 03 03 02 03 03 04 04 04 04 +10e0: 03 02 03 03 03 03 03 03 02 02 02 03 04 04 04 04 +10f0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1100: 03 03 02 02 02 03 03 03 03 03 03 02 02 03 03 03 +1110: 03 03 03 02 03 03 03 03 03 03 03 02 03 03 03 03 +1120: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 03 03 +1130: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1140: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03 +1150: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03 +1160: 03 03 03 03 03 02 03 03 03 03 03 03 02 02 02 03 +1170: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1180: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 02 02 +1190: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02 +11a0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02 +11b0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +11c0: 02 02 02 04 04 03 03 03 03 02 03 03 03 03 03 03 +11d0: 04 02 04 04 04 04 03 03 03 02 03 03 03 03 03 03 +11e0: 04 02 04 04 04 04 03 03 02 02 02 03 03 03 03 03 +11f0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1200: 03 03 02 02 02 03 03 03 03 03 03 02 02 05 05 05 +1210: 03 03 03 02 03 03 03 03 03 03 03 02 03 05 05 05 +1220: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 05 05 +1230: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1240: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03 +1250: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03 +1260: 03 03 03 03 03 02 03 03 03 03 03 03 02 02 02 03 +1270: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1280: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 02 02 +1290: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02 +12a0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02 +12b0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +12c0: 02 02 02 03 03 03 03 03 03 02 03 03 03 03 03 03 +12d0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03 +12e0: 03 02 03 03 03 03 03 03 02 02 02 03 03 03 03 03 +12f0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1300: 06 05 02 02 02 03 03 03 03 03 03 02 02 03 03 03 +1310: 05 05 05 02 03 03 03 03 03 03 03 02 03 03 03 03 +1320: 05 05 03 02 03 03 03 03 03 03 02 02 02 03 03 03 +1330: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1340: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03 +1350: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03 +1360: 03 03 03 03 03 02 03 03 03 03 03 03 02 02 02 03 +1370: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1380: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 02 02 +1390: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02 +13a0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02 +13b0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +13c0: 02 02 02 03 03 03 03 03 03 02 03 03 03 03 03 03 +13d0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03 +13e0: 03 02 03 03 03 03 03 03 02 02 02 03 03 03 03 03 +13f0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1400: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1410: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1420: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1430: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1440: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1450: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1460: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1470: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1480: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1490: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +14a0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +14b0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +14c0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +14d0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +14e0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +14f0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1500: 03 03 02 02 02 03 03 03 03 03 03 02 02 03 03 03 +1510: 03 03 03 02 03 03 03 03 03 03 03 02 03 03 03 03 +1520: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 03 03 +1530: 02 02 02 02 02 02 02 02 02 02 02 02 02 01 01 01 +1540: 03 03 03 03 02 02 03 03 02 02 02 02 02 01 02 02 +1550: 03 03 03 03 03 02 02 02 02 02 02 02 02 01 02 02 +1560: 03 03 03 03 03 01 02 02 02 02 02 02 01 01 01 02 +1570: 02 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 +1580: 02 03 03 03 02 02 02 01 02 02 02 02 02 02 01 01 +1590: 03 03 03 03 02 02 02 01 02 02 02 02 02 02 02 01 +15a0: 03 03 03 03 02 02 01 01 01 01 02 02 02 02 01 01 +15b0: 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01 +15c0: 02 02 02 03 03 02 02 02 02 01 02 02 02 01 01 01 +15d0: 03 02 03 03 03 02 02 02 02 01 02 02 01 01 01 01 +15e0: 03 02 03 03 03 03 02 02 01 01 01 02 01 01 01 01 +15f0: 02 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 +1600: 03 03 02 02 02 03 03 03 03 03 03 02 02 03 03 03 +1610: 03 03 03 02 03 03 03 03 03 03 03 02 03 03 03 03 +1620: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 03 03 +1630: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1640: 02 02 02 02 01 01 02 02 02 02 02 02 02 01 02 02 +1650: 02 02 02 02 02 01 02 02 02 02 02 02 02 01 02 02 +1660: 02 02 02 02 02 01 02 02 02 02 02 02 01 01 01 02 +1670: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1680: 01 02 02 02 02 02 02 01 02 02 02 02 02 02 01 01 +1690: 01 02 02 02 02 02 02 01 02 02 02 02 02 02 02 01 +16a0: 01 02 02 02 01 01 01 01 01 01 02 02 02 02 02 01 +16b0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +16c0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +16d0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +16e0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +16f0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1700: 03 03 02 02 02 03 03 03 03 03 03 02 02 03 03 03 +1710: 03 03 03 02 03 03 03 03 03 03 03 02 03 03 03 03 +1720: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 03 03 +1730: 01 01 01 01 02 02 02 02 02 02 02 02 02 02 02 02 +1740: 02 02 02 02 01 01 03 03 03 03 03 03 03 02 03 03 +1750: 02 02 02 02 02 01 02 02 03 03 03 03 03 02 03 03 +1760: 02 02 02 02 02 01 02 02 02 03 03 03 02 02 02 03 +1770: 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02 02 +1780: 01 02 02 02 02 02 02 01 02 02 03 03 03 03 02 02 +1790: 02 02 02 02 02 02 02 01 02 02 02 03 03 03 03 02 +17a0: 02 02 02 02 02 02 01 01 01 01 02 03 03 03 03 02 +17b0: 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02 +17c0: 01 01 01 02 02 02 02 02 02 01 02 03 03 03 03 03 +17d0: 01 01 02 02 02 02 02 02 02 01 02 03 03 03 03 03 +17e0: 01 01 02 02 02 02 02 02 01 01 01 03 03 03 03 03 +17f0: 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02 +1800: 03 03 02 02 02 02 02 02 02 02 02 01 01 01 01 01 +1810: 03 03 03 02 03 02 02 02 02 02 02 01 01 01 01 01 +1820: 03 03 03 02 03 02 02 02 02 02 01 01 01 01 01 01 +1830: 02 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 +1840: 03 03 03 03 02 01 02 02 02 02 02 02 01 01 01 01 +1850: 03 03 03 03 02 01 02 02 02 02 02 02 01 01 01 01 +1860: 03 03 03 03 02 01 02 02 02 02 02 01 01 01 01 01 +1870: 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01 +1880: 02 03 03 03 02 02 02 01 02 02 02 01 01 01 01 01 +1890: 03 03 03 03 02 02 02 01 02 02 02 01 01 01 01 01 +18a0: 03 03 03 03 02 02 01 01 01 01 02 01 01 01 01 01 +18b0: 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01 +18c0: 02 02 02 03 02 02 02 02 02 01 02 02 01 01 01 01 +18d0: 03 02 03 03 03 02 02 02 02 01 02 02 02 01 01 01 +18e0: 03 02 03 03 02 02 02 02 01 01 01 02 02 01 01 01 +18f0: 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01 +1900: 01 01 01 01 01 02 02 02 02 02 02 02 02 03 03 03 +1910: 01 01 01 01 02 02 02 02 02 02 02 02 03 03 03 03 +1920: 01 01 01 01 02 02 02 02 02 02 02 02 02 03 03 03 +1930: 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02 02 +1940: 01 01 01 01 01 02 02 02 02 02 03 03 03 02 03 03 +1950: 01 01 01 01 01 02 02 02 02 02 03 03 03 02 03 03 +1960: 01 01 01 01 01 01 02 02 02 02 03 03 02 02 02 03 +1970: 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02 +1980: 01 01 01 01 02 02 02 01 02 02 02 03 03 03 02 02 +1990: 01 01 01 01 02 02 02 01 02 02 02 03 03 03 03 02 +19a0: 01 01 01 01 01 02 01 01 01 01 02 03 03 03 03 02 +19b0: 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02 +19c0: 01 01 01 01 01 02 02 02 02 01 02 03 03 03 03 03 +19d0: 01 01 01 01 02 02 02 02 02 01 02 03 03 03 03 03 +19e0: 01 01 01 01 02 02 02 02 01 01 02 03 03 03 03 03 +19f0: 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02 +1a00: 03 03 02 02 01 02 02 02 02 02 02 01 01 02 01 01 +1a10: 03 03 03 02 02 02 02 02 02 02 02 01 02 02 02 01 +1a20: 03 03 03 02 02 02 02 02 02 02 01 01 01 02 02 02 +1a30: 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01 +1a40: 03 03 03 03 01 01 02 02 02 02 02 02 02 01 02 02 +1a50: 03 03 03 03 02 01 02 02 02 02 02 02 02 01 02 02 +1a60: 03 03 03 03 03 01 02 02 02 02 02 02 01 01 01 02 +1a70: 02 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 +1a80: 02 03 03 03 03 03 02 01 02 02 02 02 02 02 01 01 +1a90: 03 03 03 03 03 03 03 02 02 02 02 02 02 02 02 01 +1aa0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02 +1ab0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1ac0: 02 02 02 03 03 03 03 03 03 02 03 03 03 03 03 03 +1ad0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03 +1ae0: 03 02 03 03 03 03 03 03 02 02 02 03 03 03 03 03 +1af0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1b00: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1b10: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1b20: 02 01 01 01 01 01 01 01 01 01 01 01 01 01 02 02 +1b30: 01 01 01 01 01 01 01 01 02 02 02 02 01 01 01 01 +1b40: 02 02 02 02 01 01 02 02 02 02 02 02 02 01 02 02 +1b50: 02 02 02 02 02 01 02 02 02 02 02 02 02 01 02 02 +1b60: 02 02 02 02 02 01 02 02 02 02 02 02 01 01 01 02 +1b70: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +1b80: 01 02 02 02 02 02 02 01 02 02 02 02 02 02 01 01 +1b90: 02 02 02 02 02 02 02 01 02 02 02 02 02 02 02 01 +1ba0: 03 03 02 02 02 02 01 01 01 01 02 02 02 02 02 01 +1bb0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1bc0: 02 02 02 03 03 03 03 03 03 02 03 03 03 03 03 03 +1bd0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03 +1be0: 03 02 03 03 03 03 03 03 02 02 02 03 03 03 03 03 +1bf0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1c00: 01 01 01 01 01 02 02 02 02 02 02 02 02 03 03 03 +1c10: 02 02 02 01 02 02 02 02 02 02 02 02 03 03 03 03 +1c20: 02 02 02 01 02 02 02 02 02 02 01 02 02 03 03 03 +1c30: 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02 +1c40: 02 02 02 02 01 01 02 02 02 02 02 03 03 02 03 03 +1c50: 02 02 02 02 02 01 02 02 02 02 02 03 03 02 03 03 +1c60: 02 02 02 02 02 01 02 02 02 02 02 03 02 02 02 03 +1c70: 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02 02 +1c80: 01 02 02 02 02 02 02 01 02 02 03 03 03 03 02 02 +1c90: 02 02 02 02 02 02 02 01 02 03 03 03 03 03 03 02 +1ca0: 02 02 02 02 02 02 01 02 02 02 03 03 03 03 03 02 +1cb0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1cc0: 02 02 02 03 03 03 03 03 03 02 03 03 03 03 03 03 +1cd0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03 +1ce0: 03 02 03 03 03 03 03 03 02 02 02 03 03 03 03 03 +1cf0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +1d00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +1d10: 00 00 01 01 01 01 01 00 00 00 01 01 01 00 00 00 +1d20: 00 00 00 00 01 00 00 00 00 01 00 00 00 01 00 00 +1d30: 00 00 00 00 01 00 00 00 00 01 00 00 00 01 00 00 +1d40: 00 00 00 00 01 00 00 00 00 01 00 00 00 01 00 00 +1d50: 00 00 00 00 01 00 00 00 00 01 00 00 00 01 00 00 +1d60: 00 00 00 00 01 00 00 00 00 00 01 01 01 00 00 00 +1d70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +1d80: 00 00 01 01 01 01 00 00 00 00 01 01 01 00 00 00 +1d90: 00 00 01 00 00 00 01 00 00 01 00 00 00 01 00 00 +1da0: 00 00 01 00 00 00 01 00 00 01 00 00 00 01 00 00 +1db0: 00 00 01 00 00 00 01 00 00 01 00 00 00 01 00 00 +1dc0: 00 00 01 00 00 00 01 00 00 01 00 00 00 01 00 00 +1dd0: 00 00 01 01 01 01 00 00 00 00 01 01 01 00 00 00 +1de0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +1df0: 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 00 +1e00: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 +1e10: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 +1e20: 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 +1e30: 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 +1e40: 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 +1e50: 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 +1e60: 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 +1e70: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 +1e80: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 +1e90: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 +1ea0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +1eb0: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 +1ec0: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 +1ed0: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 +1ee0: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 +1ef0: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 +1f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +1f10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +1f20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +1f30: 00 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00 +1f40: 00 00 00 00 00 01 00 00 00 00 01 00 00 00 00 00 +1f50: 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 +1f60: 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 +1f70: 00 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 +1f80: 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 +1f90: 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 +1fa0: 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 +1fb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +1fc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +1fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +1fe0: 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 +1ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 diff --git a/src/stm32/setup.c b/src/stm32/setup.c index 2c3552b..2102347 100644 --- a/src/stm32/setup.c +++ b/src/stm32/setup.c @@ -8,6 +8,10 @@ #include "main.h" #include "setup.h" #include "ppu/ppu.h" +#include "tilemap.h" + +// hex(0x0803_ffff - 0xd000 + 1) (stm32f091rc rm0091 table 5, flash memory organization) +uint32_t* g_hh_tilemap_rom = 0x08033000; UART_HandleTypeDef huart2 = { .Instance = USART2, diff --git a/src/tilemap.h b/src/tilemap.h new file mode 100644 index 0000000..2f8b709 --- /dev/null +++ b/src/tilemap.h @@ -0,0 +1,7 @@ +#pragma once +#include <stdint.h> + +#include "static/tilemap.h" + +extern uint32_t* g_hh_tilemap_rom; + |