diff --git a/apps/Chess/Makefile b/apps/Chess/Makefile new file mode 100644 index 00000000..96b41eb8 --- /dev/null +++ b/apps/Chess/Makefile @@ -0,0 +1,34 @@ +API=../../api +CC=arm-none-eabi-gcc +OBJCOPY=arm-none-eabi-objcopy +AR=arm-none-eabi-ar +CFLAGS=-DNDEBUG -ggdb3 -I$(API) -Os -mcpu=cortex-m7 -mthumb -mfpu=fpv5-sp-d16 -mfloat-abi=hard -fno-common -fdata-sections -ffunction-sections -fno-exceptions +LDFLAGS=-Wl,-L$(API) -Wl,--gc-sections -Wl,--entry=entrypoint --specs=nosys.specs -nostartfiles -Wl,-Ur -lapi + +%.o: %.c + $(CC) $(CFLAGS) -c $< + +ifeq ($(OS),Windows_NT) +# Windows Version +all: app.elf app.icon + +$(API)/libapi.a: + $(MAKE) -C $(API) + +app.elf: main.o board.o moves.o minimax.o ui.o $(API)/libapi.a + $(CC) $^ -o $@ $(CFLAGS) $(LDFLAGS) + +app.icon: icon.png + python ../../tool/png2icon.py $< $@ + +clean: + rm -f *.elf *.o *.icon + +else +# Linux Version +app.elf: main.o + $(CC) $^ -o $@ $(CFLAGS) $(LDFLAGS) + +clean: + rm -f *.elf *.o +endif diff --git a/apps/Chess/app.elf b/apps/Chess/app.elf new file mode 100644 index 00000000..30fe8c5e Binary files /dev/null and b/apps/Chess/app.elf differ diff --git a/apps/Chess/app.icon b/apps/Chess/app.icon new file mode 100644 index 00000000..1dc183b3 Binary files /dev/null and b/apps/Chess/app.icon differ diff --git a/apps/Chess/assets/bishop.h b/apps/Chess/assets/bishop.h new file mode 100644 index 00000000..9ea1f75b --- /dev/null +++ b/apps/Chess/assets/bishop.h @@ -0,0 +1,233 @@ +#ifndef __BISHOP_H__ +#define __BISHOP_H__ + +#include + +const uint16_t bishop_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, + 0xDEDB, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xDEDB, 0xDEDB, 0xDEDB, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, + 0xDEDB, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, + 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, + 0xDEDB, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0x0000, + 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, + 0xDEDB, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, + 0xDEDB, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define BISHOP_WIDTH 42 +#define BISHOP_HEIGHT 42 + +#endif // __BISHOP_H__ diff --git a/apps/Chess/assets/bishop.png b/apps/Chess/assets/bishop.png new file mode 100644 index 00000000..a75a9af7 Binary files /dev/null and b/apps/Chess/assets/bishop.png differ diff --git a/apps/Chess/assets/bishop1.h b/apps/Chess/assets/bishop1.h new file mode 100644 index 00000000..83b515a6 --- /dev/null +++ b/apps/Chess/assets/bishop1.h @@ -0,0 +1,233 @@ +#ifndef __BISHOP1_H__ +#define __BISHOP1_H__ + +#include + +const uint16_t bishop1_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, + 0x4A49, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4A49, 0x4A49, 0x4A49, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, + 0x4A49, 0x4A49, 0x4A49, 0x2945, 0x2945, 0x2945, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x2945, 0x2945, 0x2945, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x2945, + 0x2945, 0x2945, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, + 0x39C7, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, + 0x39C7, 0x39C7, 0x39C7, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x4A49, + 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x0000, + 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, + 0x39C7, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, + 0x39C7, 0x39C7, 0x39C7, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, + 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, + 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, + 0x5ACB, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, + 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, 0x4A49, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, + 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, + 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define BISHOP1_WIDTH 42 +#define BISHOP1_HEIGHT 42 + +#endif // __BISHOP1_H__ diff --git a/apps/Chess/assets/bishop1.png b/apps/Chess/assets/bishop1.png new file mode 100644 index 00000000..9725f5ed Binary files /dev/null and b/apps/Chess/assets/bishop1.png differ diff --git a/apps/Chess/assets/king.h b/apps/Chess/assets/king.h new file mode 100644 index 00000000..babb3488 --- /dev/null +++ b/apps/Chess/assets/king.h @@ -0,0 +1,233 @@ +#ifndef __KING_H__ +#define __KING_H__ + +#include + +const uint16_t king_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, + 0xAD55, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xAD55, 0xAD55, 0xAD55, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define KING_WIDTH 42 +#define KING_HEIGHT 42 + +#endif // __KING_H__ diff --git a/apps/Chess/assets/king.png b/apps/Chess/assets/king.png new file mode 100644 index 00000000..8da73d0c Binary files /dev/null and b/apps/Chess/assets/king.png differ diff --git a/apps/Chess/assets/king1.h b/apps/Chess/assets/king1.h new file mode 100644 index 00000000..362fe2f5 --- /dev/null +++ b/apps/Chess/assets/king1.h @@ -0,0 +1,233 @@ +#ifndef __KING1_H__ +#define __KING1_H__ + +#include + +const uint16_t king1_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, + 0x4A49, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4A49, 0x4A49, 0x4A49, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, + 0x2945, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, 0x4A49, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x2945, 0x2945, 0x2945, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, + 0x4A49, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x5ACB, 0x5ACB, 0x5ACB, + 0x4A49, 0x4A49, 0x4A49, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, + 0x5ACB, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x39C7, 0x39C7, 0x39C7, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x5ACB, 0x5ACB, 0x5ACB, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, + 0x5ACB, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4A49, 0x4A49, 0x4A49, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, 0x4A49, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, + 0x4A49, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, + 0x4A49, 0x4A49, 0x4A49, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define KING1_WIDTH 42 +#define KING1_HEIGHT 42 + +#endif // __KING1_H__ diff --git a/apps/Chess/assets/king1.png b/apps/Chess/assets/king1.png new file mode 100644 index 00000000..720cfa0f Binary files /dev/null and b/apps/Chess/assets/king1.png differ diff --git a/apps/Chess/assets/knight.h b/apps/Chess/assets/knight.h new file mode 100644 index 00000000..8e97c09d --- /dev/null +++ b/apps/Chess/assets/knight.h @@ -0,0 +1,233 @@ +#ifndef __KNIGHT_H__ +#define __KNIGHT_H__ + +#include + +const uint16_t knight_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0x0000, + 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define KNIGHT_WIDTH 42 +#define KNIGHT_HEIGHT 42 + +#endif // __KNIGHT_H__ diff --git a/apps/Chess/assets/knight.png b/apps/Chess/assets/knight.png new file mode 100644 index 00000000..5da9551c Binary files /dev/null and b/apps/Chess/assets/knight.png differ diff --git a/apps/Chess/assets/knight1.h b/apps/Chess/assets/knight1.h new file mode 100644 index 00000000..a20fd72c --- /dev/null +++ b/apps/Chess/assets/knight1.h @@ -0,0 +1,233 @@ +#ifndef __KNIGHT1_H__ +#define __KNIGHT1_H__ + +#include + +const uint16_t knight1_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, 0x4228, 0x4228, + 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, + 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, + 0x528A, 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, + 0x4228, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, + 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, + 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, + 0x4228, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x39C7, + 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4228, 0x4228, 0x4228, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, + 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x0000, 0x0000, 0x0000, + 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x4228, 0x4228, 0x4228, 0x39C7, + 0x39C7, 0x39C7, 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, 0x39C7, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x4228, 0x4228, + 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x4228, 0x4228, 0x4228, 0x39C7, + 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, + 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x4228, 0x4228, + 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, + 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, + 0x528A, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x0000, 0x0000, 0x0000, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x528A, 0x528A, 0x528A, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, + 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x0000, + 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, 0x4228, 0x4228, + 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x0000, 0x0000, + 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, + 0x4228, 0x4228, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, + 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, + 0x528A, 0x4228, 0x4228, 0x4228, 0x0000, 0x0000, 0x0000, 0x528A, + 0x528A, 0x528A, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, + 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, 0x39C7, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x39C7, + 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define KNIGHT1_WIDTH 42 +#define KNIGHT1_HEIGHT 42 + +#endif // __KNIGHT1_H__ diff --git a/apps/Chess/assets/knight1.png b/apps/Chess/assets/knight1.png new file mode 100644 index 00000000..c534b8d6 Binary files /dev/null and b/apps/Chess/assets/knight1.png differ diff --git a/apps/Chess/assets/pawn.h b/apps/Chess/assets/pawn.h new file mode 100644 index 00000000..eac419c5 --- /dev/null +++ b/apps/Chess/assets/pawn.h @@ -0,0 +1,233 @@ +#ifndef __PAWN_H__ +#define __PAWN_H__ + +#include + +const uint16_t pawn_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, 0xB596, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, + 0xD6BA, 0xD6BA, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, 0xB596, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, + 0xD6BA, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define PAWN_WIDTH 42 +#define PAWN_HEIGHT 42 + +#endif // __PAWN_H__ diff --git a/apps/Chess/assets/pawn.png b/apps/Chess/assets/pawn.png new file mode 100644 index 00000000..c34cce53 Binary files /dev/null and b/apps/Chess/assets/pawn.png differ diff --git a/apps/Chess/assets/pawn1.h b/apps/Chess/assets/pawn1.h new file mode 100644 index 00000000..e227ce90 --- /dev/null +++ b/apps/Chess/assets/pawn1.h @@ -0,0 +1,233 @@ +#ifndef __PAWN1_H__ +#define __PAWN1_H__ + +#include + +const uint16_t pawn1_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, 0x4228, 0x4228, 0x4228, + 0x4228, 0x4228, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, 0x4228, + 0x4228, 0x4228, 0x4228, 0x4228, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, + 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, + 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x528A, 0x528A, 0x528A, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, + 0x528A, 0x528A, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x528A, 0x528A, 0x528A, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, + 0x4228, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, + 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, + 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x528A, 0x528A, + 0x528A, 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x528A, 0x528A, 0x528A, 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x528A, 0x528A, 0x528A, 0x4228, 0x4228, 0x4228, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, 0x4228, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4228, 0x4228, + 0x4228, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x4228, 0x4228, 0x4228, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define PAWN1_WIDTH 42 +#define PAWN1_HEIGHT 42 + +#endif // __PAWN1_H__ diff --git a/apps/Chess/assets/pawn1.png b/apps/Chess/assets/pawn1.png new file mode 100644 index 00000000..b90295d7 Binary files /dev/null and b/apps/Chess/assets/pawn1.png differ diff --git a/apps/Chess/assets/queen.h b/apps/Chess/assets/queen.h new file mode 100644 index 00000000..4e1d429e --- /dev/null +++ b/apps/Chess/assets/queen.h @@ -0,0 +1,233 @@ +#ifndef __QUEEN_H__ +#define __QUEEN_H__ + +#include + +const uint16_t queen_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, + 0xDEDB, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x0000, 0x0000, 0x0000, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x0000, + 0x0000, 0x0000, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, + 0xDEDB, 0xDEDB, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x0000, 0x0000, 0x0000, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, + 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, 0xC638, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xC638, + 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xDEDB, 0xDEDB, + 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define QUEEN_WIDTH 42 +#define QUEEN_HEIGHT 42 + +#endif // __QUEEN_H__ diff --git a/apps/Chess/assets/queen.png b/apps/Chess/assets/queen.png new file mode 100644 index 00000000..90f26672 Binary files /dev/null and b/apps/Chess/assets/queen.png differ diff --git a/apps/Chess/assets/queen1.h b/apps/Chess/assets/queen1.h new file mode 100644 index 00000000..ec8515ff --- /dev/null +++ b/apps/Chess/assets/queen1.h @@ -0,0 +1,233 @@ +#ifndef __QUEEN1_H__ +#define __QUEEN1_H__ + +#include + +const uint16_t queen1_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x39C7, 0x39C7, 0x39C7, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, + 0x4A49, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, 0x4A49, 0x0000, 0x0000, + 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x0000, 0x0000, 0x0000, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, 0x4A49, 0x4A49, + 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x0000, + 0x0000, 0x0000, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x4A49, + 0x4A49, 0x4A49, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x0000, 0x0000, 0x0000, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, + 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x39C7, 0x39C7, 0x39C7, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, 0x39C7, 0x39C7, + 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x5ACB, 0x5ACB, 0x5ACB, + 0x39C7, 0x39C7, 0x39C7, 0x2945, 0x2945, 0x2945, 0x2945, 0x2945, + 0x2945, 0x2945, 0x2945, 0x2945, 0x18C3, 0x18C3, 0x18C3, 0x18C3, + 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, +}; + +#define QUEEN1_WIDTH 42 +#define QUEEN1_HEIGHT 42 + +#endif // __QUEEN1_H__ diff --git a/apps/Chess/assets/queen1.png b/apps/Chess/assets/queen1.png new file mode 100644 index 00000000..b238f175 Binary files /dev/null and b/apps/Chess/assets/queen1.png differ diff --git a/apps/Chess/assets/rook.h b/apps/Chess/assets/rook.h new file mode 100644 index 00000000..b9696a27 --- /dev/null +++ b/apps/Chess/assets/rook.h @@ -0,0 +1,233 @@ +#ifndef __ROOK_H__ +#define __ROOK_H__ + +#include + +const uint16_t rook_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, + 0xD6BA, 0xD6BA, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, + 0xD6BA, 0xD6BA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0x8C51, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, + 0xD6BA, 0xD6BA, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, + 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, + 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0xC638, 0xC638, 0xC638, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, + 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, + 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, + 0xC638, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, 0xC638, 0xC638, + 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xC638, + 0xC638, 0xC638, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0xD6BA, 0xD6BA, + 0xD6BA, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0x8C51, 0x8C51, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0xD6BA, 0xD6BA, 0xD6BA, 0xC638, 0xC638, 0xC638, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0xD6BA, 0xD6BA, 0xD6BA, 0xC638, 0xC638, 0xC638, + 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, 0xB596, + 0xB596, 0xB596, 0xB596, 0xB596, 0xAD55, 0xAD55, 0xAD55, 0xAD55, + 0xAD55, 0xAD55, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, 0x8C51, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, +}; + +#define ROOK_WIDTH 42 +#define ROOK_HEIGHT 42 + +#endif // __ROOK_H__ diff --git a/apps/Chess/assets/rook.png b/apps/Chess/assets/rook.png new file mode 100644 index 00000000..8d43fad2 Binary files /dev/null and b/apps/Chess/assets/rook.png differ diff --git a/apps/Chess/assets/rook1.h b/apps/Chess/assets/rook1.h new file mode 100644 index 00000000..a6488e73 --- /dev/null +++ b/apps/Chess/assets/rook1.h @@ -0,0 +1,233 @@ +#ifndef __ROOK1_H__ +#define __ROOK1_H__ + +#include + +const uint16_t rook1_data[] = { + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x52AA, + 0x52AA, 0x52AA, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x2124, 0x2124, 0x2124, 0x1082, 0x1082, 0x1082, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x52AA, 0x52AA, 0x52AA, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, + 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, 0x1082, 0x1082, + 0x1082, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x52AA, 0x52AA, 0x52AA, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x3186, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, + 0x1082, 0x1082, 0x1082, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x52AA, 0x52AA, 0x52AA, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, + 0x2124, 0x2124, 0x1082, 0x1082, 0x1082, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x52AA, + 0x52AA, 0x52AA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x2124, 0x2124, 0x2124, 0x1082, 0x1082, 0x1082, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x52AA, 0x52AA, 0x52AA, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, + 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, 0x1082, 0x1082, + 0x1082, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39E7, 0x39E7, + 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x3186, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, + 0x1082, 0x1082, 0x1082, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, + 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, + 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, + 0x2124, 0x2124, 0x1082, 0x1082, 0x1082, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, + 0x4A49, 0x4A49, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, + 0x39E7, 0x39E7, 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x2124, 0x2124, 0x2124, 0x1082, 0x1082, 0x1082, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39E7, 0x39E7, 0x39E7, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, + 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, 0x4A49, 0x39E7, + 0x39E7, 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x4A49, 0x4A49, + 0x4A49, 0x39E7, 0x39E7, 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, + 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, + 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, + 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x3186, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, + 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, + 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x3186, 0x3186, 0x3186, + 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, + 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x3186, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, + 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, + 0x0000, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, + 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x3186, 0x3186, + 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, + 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, + 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x39E7, 0x39E7, 0x39E7, 0x39E7, + 0x39E7, 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0x0000, 0x0000, 0x0000, 0x52AA, 0x52AA, 0x52AA, 0x4A49, 0x4A49, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x39E7, 0x39E7, 0x39E7, 0x3186, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, + 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x52AA, 0x52AA, 0x52AA, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x39E7, 0x39E7, + 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, + 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x52AA, + 0x52AA, 0x52AA, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, + 0x39E7, 0x39E7, 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, + 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x52AA, 0x52AA, + 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x4A49, 0x4A49, 0x4A49, 0x4A49, + 0x4A49, 0x4A49, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x39E7, + 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x2124, 0x2124, + 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x4A49, 0x4A49, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x39E7, 0x39E7, 0x39E7, 0x39E7, + 0x39E7, 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, + 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, + 0x0000, 0x0000, 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x52AA, + 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x4A49, 0x39E7, 0x39E7, + 0x39E7, 0x39E7, 0x39E7, 0x39E7, 0x3186, 0x3186, 0x3186, 0x3186, + 0x3186, 0x3186, 0x2124, 0x2124, 0x2124, 0x10A2, 0x10A2, 0x10A2, + 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, 0xF81F, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF81F, + 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0xF81F, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF81F, 0xF81F, 0xF81F, +}; + +#define ROOK1_WIDTH 42 +#define ROOK1_HEIGHT 42 + +#endif // __ROOK1_H__ diff --git a/apps/Chess/assets/rook1.png b/apps/Chess/assets/rook1.png new file mode 100644 index 00000000..f1f6d2e9 Binary files /dev/null and b/apps/Chess/assets/rook1.png differ diff --git a/apps/Chess/board.c b/apps/Chess/board.c new file mode 100644 index 00000000..0a64b113 --- /dev/null +++ b/apps/Chess/board.c @@ -0,0 +1,97 @@ +#include "board.h" +#include + +void init_board(char board[BOARD_SIZE][BOARD_SIZE]) +{ + // Clear board + for (int x = 0; x < BOARD_SIZE; x++) { + for (int y = 0; y < BOARD_SIZE; y++) { + board[x][y] = EMPTY; + } + } + + // White pieces (y=0, y=1) + board[0][0] = WHITE_R; + board[1][0] = WHITE_N; + board[2][0] = WHITE_B; + board[3][0] = WHITE_Q; + board[4][0] = WHITE_K; + board[5][0] = WHITE_B; + board[6][0] = WHITE_N; + board[7][0] = WHITE_R; + + for (int x = 0; x < BOARD_SIZE; x++) { + board[x][1] = WHITE_P; + } + + // Black pieces (y=7, y=6) + board[0][7] = BLACK_R; + board[1][7] = BLACK_N; + board[2][7] = BLACK_B; + board[3][7] = BLACK_Q; + board[4][7] = BLACK_K; + board[5][7] = BLACK_B; + board[6][7] = BLACK_N; + board[7][7] = BLACK_R; + + for (int x = 0; x < BOARD_SIZE; x++) { + board[x][6] = BLACK_P; + } +} + +void copyBoard(char board[BOARD_SIZE][BOARD_SIZE], char boardCopy[BOARD_SIZE][BOARD_SIZE]) +{ + for (int x = 0; x < BOARD_SIZE; x++) { + for (int y = 0; y < BOARD_SIZE; y++) { + boardCopy[x][y] = board[x][y]; + } + } +} + +void makeMove(char board[BOARD_SIZE][BOARD_SIZE], int x1, int y1, int x2, int y2) +{ + board[x2][y2] = board[x1][y1]; + board[x1][y1] = EMPTY; +} + +int isWhite(char ch) +{ + switch (ch) { + case WHITE_B: + case WHITE_K: + case WHITE_Q: + case WHITE_N: + case WHITE_R: + case WHITE_P: + return 1; + default: + return 0; + } +} + +int isBlack(char ch) +{ + switch (ch) { + case BLACK_B: + case BLACK_K: + case BLACK_Q: + case BLACK_N: + case BLACK_R: + case BLACK_P: + return 1; + default: + return 0; + } +} + +char whichType(char p) +{ + return p; // Placeholder if needed, or just return the char +} + +int is_move_king_white = 0; +int is_move_king_black = 0; +int is_move_right_rook_white = 0; +int is_move_left_rook_white = 0; +int is_move_right_rook_black = 0; +int is_move_left_rook_black = 0; diff --git a/apps/Chess/board.h b/apps/Chess/board.h new file mode 100644 index 00000000..42440f0f --- /dev/null +++ b/apps/Chess/board.h @@ -0,0 +1,20 @@ +#ifndef BOARD_H +#define BOARD_H + +#include "chess_defs.h" + +void init_board(char board[BOARD_SIZE][BOARD_SIZE]); +void copyBoard(char board[BOARD_SIZE][BOARD_SIZE], char boardCopy[BOARD_SIZE][BOARD_SIZE]); +void makeMove(char board[BOARD_SIZE][BOARD_SIZE], int x1, int y1, int x2, int y2); +int isWhite(char ch); +int isBlack(char ch); +char whichType(char p); + +extern int is_move_king_white; +extern int is_move_king_black; +extern int is_move_right_rook_white; +extern int is_move_left_rook_white; +extern int is_move_right_rook_black; +extern int is_move_left_rook_black; + +#endif diff --git a/apps/Chess/chess_defs.h b/apps/Chess/chess_defs.h new file mode 100644 index 00000000..59d68e9c --- /dev/null +++ b/apps/Chess/chess_defs.h @@ -0,0 +1,51 @@ +#ifndef CHESS_DEFS_H +#define CHESS_DEFS_H + +#include +#include +#include + +#define BOARD_SIZE 8 + +// Piece definitions (matching Chess-In-C-master) +#define WHITE_P 'm' +#define WHITE_B 'b' +#define WHITE_N 'n' +#define WHITE_R 'r' +#define WHITE_Q 'q' +#define WHITE_K 'k' + +#define BLACK_P 'M' +#define BLACK_B 'B' +#define BLACK_N 'N' +#define BLACK_R 'R' +#define BLACK_Q 'Q' +#define BLACK_K 'K' + +#define EMPTY ' ' + +#define WHITE 1 +#define BLACK 0 + +#define COLOR_BLACK 0x0000 // #000000 +#define COLOR_WHITE 0xFFFF // #FFFFFF +#define COLOR_RED 0xF800 // #FF0000 +#define COLOR_UPSILON 0x7D19 // #7BA1CD +#define COLOR_TRANSPARENT 0xF81F +#define COLOR_SQUARE_LIGHT 0xEF7A // #EBECD0 +#define COLOR_SQUARE_DARK 0x74AA // #739552 +#define COLOR_MOVE_INDICATOR 0x7BEF + +typedef struct Position { + int x; + int y; +} Pos; + +typedef struct Move { + char type; + Pos pos_start; + Pos pos_end; + struct Move* next; +} Move; + +#endif diff --git a/apps/Chess/icon.png b/apps/Chess/icon.png new file mode 100644 index 00000000..64a3527a Binary files /dev/null and b/apps/Chess/icon.png differ diff --git a/apps/Chess/icon.xcf b/apps/Chess/icon.xcf new file mode 100644 index 00000000..60aaf93d Binary files /dev/null and b/apps/Chess/icon.xcf differ diff --git a/apps/Chess/img2h.py b/apps/Chess/img2h.py new file mode 100644 index 00000000..bd01a2b3 --- /dev/null +++ b/apps/Chess/img2h.py @@ -0,0 +1,75 @@ +from PIL import Image +import sys +import os + +def convert_to_rgb565(r, g, b): + # Convert RGB888 to RGB565 + r = (r >> 3) & 0x1F + g = (g >> 2) & 0x3F + b = (b >> 3) & 0x1F + return (r << 11) | (g << 5) | b + +def png_to_header(png_path, header_path, variable_name): + # Open image with alpha channel support + img = Image.open(png_path) + img = img.convert("RGBA") # Keep alpha channel + width, height = img.size + + # Convert pixels to RGB565 + pixels = [] + for y in range(height): + for x in range(width): + r, g, b, a = img.getpixel((x, y)) + + # Convert transparent pixels (alpha < 128) to bright pink (magic color for transparency) + if a < 128: + r, g, b = 255, 0, 255 # Bright pink (magenta) 0xF81F in RGB565 + + pixel = convert_to_rgb565(r, g, b) + pixels.append(pixel) + + # Generate header file + with open(header_path, "w") as f: + f.write(f"#ifndef __{variable_name.upper()}_H__\n") + f.write(f"#define __{variable_name.upper()}_H__\n\n") + f.write("#include \n\n") + + # Write pixel data + f.write("const uint16_t {variable_name}_data[] = {{\n") + for i in range(0, len(pixels), 8): + line = ["0x%04X" % p for p in pixels[i:i+8]] + f.write(" " + ", ".join(line) + ",\n") + f.write("};\n\n") + + # Write image info + f.write(f"#define {variable_name.upper()}_WIDTH {width}\n") + f.write(f"#define {variable_name.upper()}_HEIGHT {height}\n\n") + + f.write(f"#endif // __{variable_name.upper()}_H__\n") + +if __name__ == "__main__": + # Convert all PNG files in assets directory + assets_dir = "assets" + + if not os.path.exists(assets_dir): + print(f"Error: {assets_dir} directory not found") + sys.exit(1) + + png_files = [f for f in os.listdir(assets_dir) if f.endswith(".png")] + + if not png_files: + print(f"No PNG files found in {assets_dir}") + sys.exit(1) + + for png_file in png_files: + png_path = os.path.join(assets_dir, png_file) + variable_name = os.path.splitext(png_file)[0].replace("-", "_") + header_path = os.path.join(assets_dir, f"{variable_name}.h") + + try: + png_to_header(png_path, header_path, variable_name) + print(f"Converted {png_file} -> {variable_name}.h") + except Exception: + print(f"Error converting {png_file}: {Exception}") + + print(f"\nDone! Converted {len(png_files)} files.") diff --git a/apps/Chess/main.c b/apps/Chess/main.c new file mode 100644 index 00000000..c7bc673d --- /dev/null +++ b/apps/Chess/main.c @@ -0,0 +1,362 @@ +#include "board.h" +#include "chess_defs.h" +#include "extapp_api.h" +#include "minimax.h" +#include "moves.h" +#include "ui.h" +#include +#include +#include +#include + +typedef enum { + MODE_PVP, + MODE_PVAI +} GameMode; + +GameMode game_mode = MODE_PVP; +int ai_difficulty = 1; // 0=Easy, 1=Normal, 2=Hard +char board[BOARD_SIZE][BOARD_SIZE]; +bool white_turn = true; +Move* current_possible_moves = NULL; + +void waitForKeyPressed() +{ + while (!extapp_scanKeyboard()) { + extapp_msleep(10); + } +} + +void waitForKeyReleased() +{ + while (extapp_scanKeyboard()) { + extapp_msleep(10); + } +} + +void extapp_main() +{ + waitForKeyReleased(); + + while (true) { + int cursor_row = 4; + int cursor_col = 4; + bool piece_selected = false; + int selected_row = -1; + int selected_col = -1; + + // Menu Loop + int menu_option = 0; + bool menu_active = true; + + srand(extapp_millis()); // Seed random number generator + + while (menu_active) { + const char* diff_text = "Normal"; + if (ai_difficulty == 0) + diff_text = "Easy"; + else if (ai_difficulty == 2) + diff_text = "Hard"; + + MenuItem main_items[] = { + { "Player vs Player", NULL }, + { "Player vs AI", NULL }, + { "AI difficulty", diff_text } + }; + + int choice = show_menu("CHESS", main_items, 3, menu_option); + + if (choice == -1) { + return; + } + + menu_option = choice; + + if (choice == 0) { + game_mode = MODE_PVP; + menu_active = false; + } else if (choice == 1) { + game_mode = MODE_PVAI; + menu_active = false; + } else if (choice == 2) { + MenuItem diff_items[] = { + { "Easy", NULL }, + { "Normal", NULL }, + { "Hard", NULL } + }; + int diff = show_menu("CHESS", diff_items, 3, ai_difficulty); + if (diff != -1) { + ai_difficulty = diff; + } + } + } + + init_board(board); + white_turn = true; + char last_move_str[16] = ""; + + waitForKeyReleased(); + + extapp_pushRectUniform(0, 0, LCD_WIDTH, LCD_HEIGHT, COLOR_WHITE); + + int check_row = -1; + int check_col = -1; + if (isCheck(board, white_turn ? WHITE : BLACK) == 1) { + Pos kPos = kingPosition(board, white_turn ? WHITE : BLACK); + if (kPos.x != -1) { + check_col = kPos.x; + check_row = 7 - kPos.y; + } + } + + draw_board(board, cursor_row, cursor_col, false, NULL, check_row, check_col); + draw_info_panel(board, cursor_row, cursor_col, false, -1, -1, white_turn, (check_row != -1), last_move_str); + + bool back_to_menu = false; + uint64_t last_cursor_move_time = 0; + + while (true) { + // AI Turn + if (game_mode == MODE_PVAI && !white_turn) { + extapp_msleep(100); // Small delay + + // Generate moves for AI (Black) + Move* ai_moves = getMoves(board, BLACK); + if (ai_moves == NULL || ai_moves->type == 'l' || ai_moves->type == 't') { + // Game Over + if (ai_moves) + freeMoves(ai_moves); + extapp_drawTextLarge("GAME OVER", 100, 100, COLOR_RED, COLOR_WHITE, false); + waitForKeyReleased(); + waitForKeyPressed(); + back_to_menu = true; + break; + } + + // Run Minimax avec difficulté variable + // 0=Easy (depth 1), 1=Normal (depth 2), 2=Hard (depth 3) + int depth = ai_difficulty + 1; + Move* best_move = minimaxManager(board, ai_moves, BLACK, depth, '\0'); + + if (best_move != NULL) { + // Apply move + makeMove(board, best_move->pos_start.x, best_move->pos_start.y, best_move->pos_end.x, best_move->pos_end.y); + snprintf(last_move_str, sizeof(last_move_str), "%c%d -> %c%d", 'a' + best_move->pos_start.x, best_move->pos_start.y + 1, 'a' + best_move->pos_end.x, best_move->pos_end.y + 1); + // Handle promotion (auto queen for AI for now) + if (best_move->type != 'c' && best_move->type != 'a' && best_move->type != 'l' && best_move->type != 't') { + if (board[best_move->pos_end.x][best_move->pos_end.y] == BLACK_P && best_move->pos_end.y == 0) { + board[best_move->pos_end.x][best_move->pos_end.y] = BLACK_Q; + } + } + + freeMoves(best_move); + white_turn = !white_turn; + } else { + // No move found? + } + + check_row = -1; + check_col = -1; + if (isCheck(board, white_turn ? WHITE : BLACK) == 1) { + Pos kPos = kingPosition(board, white_turn ? WHITE : BLACK); + if (kPos.x != -1) { + check_col = kPos.x; + check_row = 7 - kPos.y; + } + } + + draw_board(board, cursor_row, cursor_col, false, NULL, check_row, check_col); + draw_info_panel(board, cursor_row, cursor_col, false, -1, -1, white_turn, (check_row != -1), last_move_str); + continue; + } + + uint64_t keys = extapp_scanKeyboard(); + uint64_t current_time = extapp_millis(); + if (keys & SCANCODE_Home) { + return; + } + if (keys & SCANCODE_Back) { + break; + } + + // OK key to select/move + if (keys & SCANCODE_OK || keys & SCANCODE_EXE) { + if (!piece_selected) { + // Select a piece + int bx = cursor_col; + int by = 7 - cursor_row; + char piece = board[bx][by]; + + if (piece != EMPTY) { + bool is_white_piece = isWhite(piece); + if ((white_turn && is_white_piece) || (!white_turn && !is_white_piece)) { + piece_selected = true; + selected_row = cursor_row; + selected_col = cursor_col; + + // Calculate possible moves for this piece + if (current_possible_moves) + freeMoves(current_possible_moves); + + Move* all_moves = getMoves(board, white_turn ? WHITE : BLACK); + + // Filter moves starting from (bx, by) + Move* filtered_moves = NULL; + Move* m = all_moves; + while (m != NULL) { + if (m->pos_start.x == bx && m->pos_start.y == by) { + Move* new_node = cloneMove(m); + new_node->next = filtered_moves; + filtered_moves = new_node; + } + m = m->next; + } + freeMoves(all_moves); + current_possible_moves = filtered_moves; + + // Optimization: Only redraw the selected square and possible moves + // Redraw selected square + draw_square(board, cursor_row, cursor_col, true, false, (cursor_row == check_row && cursor_col == check_col)); + + // Redraw possible moves + Move* pm = current_possible_moves; + while (pm != NULL) { + int r = 7 - pm->pos_end.y; + int c = pm->pos_end.x; + if (r != cursor_row || c != cursor_col) { + draw_square(board, r, c, false, true, (r == check_row && c == check_col)); + } + pm = pm->next; + } + + draw_info_panel(board, cursor_row, cursor_col, piece_selected, selected_row, selected_col, white_turn, (check_row != -1), last_move_str); + waitForKeyReleased(); + } + } + } else { + // Move or deselect + // Check if cursor pos is in possible moves + int target_x = cursor_col; + int target_y = 7 - cursor_row; + + bool valid_move = false; + Move* m = current_possible_moves; + Move* selected_move = NULL; + + while (m != NULL) { + if (m->pos_end.x == target_x && m->pos_end.y == target_y) { + valid_move = true; + selected_move = m; + break; + } + m = m->next; + } + + if (valid_move) { + // Perform the move + makeMove(board, selected_move->pos_start.x, selected_move->pos_start.y, selected_move->pos_end.x, selected_move->pos_end.y); + snprintf(last_move_str, sizeof(last_move_str), "%c%d -> %c%d", 'a' + selected_move->pos_start.x, selected_move->pos_start.y + 1, 'a' + selected_move->pos_end.x, selected_move->pos_end.y + 1); + + // Handle promotion (ask user? default to Queen for now) + if (board[target_x][target_y] == WHITE_P && target_y == 7) { + board[target_x][target_y] = WHITE_Q; + } else if (board[target_x][target_y] == BLACK_P && target_y == 0) { + board[target_x][target_y] = BLACK_Q; + } + + white_turn = !white_turn; // Switch turn + piece_selected = false; + selected_row = -1; + selected_col = -1; + if (current_possible_moves) { + freeMoves(current_possible_moves); + current_possible_moves = NULL; + } + + check_row = -1; + check_col = -1; + if (isCheck(board, white_turn ? WHITE : BLACK) == 1) { + Pos kPos = kingPosition(board, white_turn ? WHITE : BLACK); + if (kPos.x != -1) { + check_col = kPos.x; + check_row = 7 - kPos.y; + } + } + + draw_board(board, cursor_row, cursor_col, false, NULL, check_row, check_col); + draw_info_panel(board, cursor_row, cursor_col, false, -1, -1, white_turn, (check_row != -1), last_move_str); + } else { + // Deselect + piece_selected = false; + selected_row = -1; + selected_col = -1; + if (current_possible_moves) { + // Optimization: Clear move indicators + Move* pm = current_possible_moves; + while (pm != NULL) { + int r = 7 - pm->pos_end.y; + int c = pm->pos_end.x; + if (r != cursor_row || c != cursor_col) { + draw_square(board, r, c, false, false, (r == check_row && c == check_col)); + } + pm = pm->next; + } + freeMoves(current_possible_moves); + current_possible_moves = NULL; + } + + // Redraw cursor square + draw_square(board, cursor_row, cursor_col, true, false, (cursor_row == check_row && cursor_col == check_col)); + + draw_info_panel(board, cursor_row, cursor_col, false, -1, -1, white_turn, (check_row != -1), last_move_str); + } + waitForKeyReleased(); + } + } + + int new_row = cursor_row; + int new_col = cursor_col; + + if (current_time - last_cursor_move_time > 150) { + if (keys & SCANCODE_Up) { + new_row--; + } + if (keys & SCANCODE_Down) { + new_row++; + } + if (keys & SCANCODE_Left) { + new_col--; + } + if (keys & SCANCODE_Right) { + new_col++; + } + } + + if (new_row < 0) + new_row = 0; + if (new_row > 7) + new_row = 7; + if (new_col < 0) + new_col = 0; + if (new_col > 7) + new_col = 7; + + if (new_row != cursor_row || new_col != cursor_col) { + draw_cursor_move(board, cursor_row, cursor_col, new_row, new_col, current_possible_moves, check_row, check_col); + cursor_row = new_row; + cursor_col = new_col; + draw_info_panel(board, cursor_row, cursor_col, piece_selected, selected_row, selected_col, white_turn, (check_row != -1), last_move_str); + last_cursor_move_time = current_time; + } + + extapp_msleep(10); + } + + if (current_possible_moves) { + freeMoves(current_possible_moves); + current_possible_moves = NULL; + } + } + + return; +} \ No newline at end of file diff --git a/apps/Chess/minimax.c b/apps/Chess/minimax.c new file mode 100644 index 00000000..33c50c92 --- /dev/null +++ b/apps/Chess/minimax.c @@ -0,0 +1,384 @@ +#include "minimax.h" +#include +#include + +#define INF 100000 +#define VAL_P 10 +#define VAL_N 30 +#define VAL_B 35 +#define VAL_R 50 +#define VAL_Q 90 +#define VAL_K 900 + +unsigned int boardConter = 1; + +// Piece-Square Tables +const int knightScore[8][8] = { + { 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 2, 2, 2, 2, 2, 2, 1 }, { 1, 2, 3, 3, 3, 3, 2, 1 }, { 1, 2, 3, 4, 4, 3, 2, 1 }, + { 1, 2, 3, 4, 4, 3, 2, 1 }, { 1, 2, 3, 3, 3, 3, 2, 1 }, { 1, 2, 2, 2, 2, 2, 2, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1 } +}; +const int bishopScore[8][8] = { + { 4, 3, 2, 1, 1, 2, 3, 4 }, { 3, 4, 3, 2, 2, 3, 4, 3 }, { 2, 3, 4, 3, 3, 4, 3, 2 }, { 1, 2, 3, 4, 4, 3, 2, 1 }, + { 1, 2, 3, 4, 4, 3, 2, 1 }, { 2, 3, 4, 3, 3, 4, 3, 2 }, { 3, 4, 3, 2, 2, 3, 4, 3 }, { 4, 3, 2, 1, 1, 2, 3, 4 } +}; +const int queenScore[8][8] = { + { 1, 1, 1, 3, 1, 1, 1, 1 }, { 1, 2, 3, 3, 3, 1, 1, 1 }, { 1, 4, 3, 3, 3, 4, 2, 1 }, { 1, 2, 3, 3, 3, 2, 2, 1 }, + { 1, 2, 3, 3, 3, 2, 2, 1 }, { 1, 4, 3, 3, 3, 4, 2, 1 }, { 1, 2, 3, 3, 3, 1, 1, 1 }, { 1, 1, 1, 3, 1, 1, 1, 1 } +}; +const int rookScore[8][8] = { + { 4, 3, 4, 4, 4, 4, 3, 4 }, { 4, 4, 4, 4, 4, 4, 4, 4 }, { 1, 1, 2, 3, 3, 2, 1, 1 }, { 1, 2, 3, 4, 4, 3, 2, 1 }, + { 1, 2, 3, 4, 4, 3, 2, 1 }, { 1, 1, 2, 3, 3, 2, 1, 1 }, { 4, 4, 4, 4, 4, 4, 4, 4 }, { 4, 3, 4, 4, 4, 4, 3, 4 } +}; +const int whitePawnScore[8][8] = { + { 8, 8, 8, 8, 8, 8, 8, 8 }, { 8, 8, 8, 8, 8, 8, 8, 8 }, { 5, 6, 6, 7, 7, 6, 6, 5 }, { 2, 3, 3, 5, 5, 3, 3, 2 }, + { 1, 2, 3, 4, 4, 3, 2, 1 }, { 1, 2, 3, 3, 3, 3, 2, 1 }, { 1, 1, 1, 0, 0, 1, 1, 1 }, { 0, 0, 0, 0, 0, 0, 0, 0 } +}; +const int blackPawnScore[8][8] = { + { 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 0, 0, 1, 1, 1 }, { 1, 2, 3, 3, 3, 3, 2, 1 }, { 1, 2, 3, 4, 4, 3, 2, 1 }, + { 2, 3, 3, 5, 5, 3, 3, 2 }, { 5, 6, 6, 7, 7, 6, 6, 5 }, { 8, 8, 8, 8, 8, 8, 8, 8 }, { 8, 8, 8, 8, 8, 8, 8, 8 } +}; + +int get_piece_value(char piece, int x, int y) +{ + int base = 0; + int pos_val = 0; + int table_y = 7 - y; + int table_x = x; + + switch (piece) { + case WHITE_P: + base = VAL_P; + pos_val = whitePawnScore[table_y][table_x]; + break; + case WHITE_N: + base = VAL_N; + pos_val = knightScore[table_y][table_x]; + break; + case WHITE_B: + base = VAL_B; + pos_val = bishopScore[table_y][table_x]; + break; + case WHITE_R: + base = VAL_R; + pos_val = rookScore[table_y][table_x]; + break; + case WHITE_Q: + base = VAL_Q; + pos_val = queenScore[table_y][table_x]; + break; + case WHITE_K: + base = VAL_K; + pos_val = 0; + break; + case BLACK_P: + base = VAL_P; + pos_val = blackPawnScore[table_y][table_x]; + break; + case BLACK_N: + base = VAL_N; + pos_val = knightScore[table_y][table_x]; + break; + case BLACK_B: + base = VAL_B; + pos_val = bishopScore[table_y][table_x]; + break; + case BLACK_R: + base = VAL_R; + pos_val = rookScore[table_y][table_x]; + break; + case BLACK_Q: + base = VAL_Q; + pos_val = queenScore[table_y][table_x]; + break; + case BLACK_K: + base = VAL_K; + pos_val = 0; + break; + default: + return 0; + } + return base + pos_val; +} + +int scoring(int color, char board[BOARD_SIZE][BOARD_SIZE]) +{ + int score_w = 0; + int score_b = 0; + for (int x = 0; x < BOARD_SIZE; x++) { + for (int y = 0; y < BOARD_SIZE; y++) { + char p = board[x][y]; + if (p == EMPTY) + continue; + if (p >= 'a' && p <= 'z') { // White + score_w += get_piece_value(p, x, y); + } else { // Black + score_b += get_piece_value(p, x, y); + } + } + } + return (color == WHITE) ? (score_w - score_b) : (score_b - score_w); +} + +int countMoves(Move* moves) +{ + int counter = 0; + if (moves == NULL || moves->type == 'l' || moves->type == 't') + return 0; + while (moves != NULL) { + counter++; + moves = moves->next; + } + return counter; +} + +int isPromotionMin(Move* m, int color) +{ + if (color && m->type == 'm') { + if (m->pos_end.y == 7) + return 1; + } else if (!color && m->type == 'M') { + if (m->pos_end.y == 0) + return 1; + } + return 0; +} + +char whichPiece(int i, int color) +{ + if (color) { + if (i == 0) + return ('b'); + else if (i == 1) + return ('n'); + else if (i == 2) + return ('r'); + else if (i == 3) + return ('q'); + } else { + if (i == 0) + return ('B'); + else if (i == 1) + return ('N'); + else if (i == 2) + return ('R'); + else if (i == 3) + return ('Q'); + } + return '\0'; +} + +Move* promotion(int color, Move* moves) +{ + Move* retList = NULL; + Move* current = NULL; + for (int i = 0; i < 4; i++) { + if (retList == NULL) { + retList = cloneMove(moves); + if (retList == NULL) + return NULL; + retList->type = whichPiece(i, color); + current = retList; + } else { + current->next = cloneMove(moves); + if (current->next == NULL) { + free(retList); + return NULL; + } + current = current->next; + current->type = whichPiece(i, color); + } + } + return retList; +} + +int negamax(int depth, char board[BOARD_SIZE][BOARD_SIZE], int color, int alpha, int beta) +{ + boardConter++; + + if (depth == 0) { + return scoring(color, board); + } + + Move* moves = getMoves(board, color); + if (moves == NULL) + return 0; + + if (moves->type == 'l') { // Checkmate + freeMoves(moves); + return -INF + (100 - depth); + } + if (moves->type == 't') { // Stalemate + freeMoves(moves); + return 0; + } + + Move* m = moves; + int bestVal = -INF; + + while (m != NULL) { + char piece = board[m->pos_start.x][m->pos_start.y]; + char eatpiece = board[m->pos_end.x][m->pos_end.y]; + + Move* movesToProcess = m; + Move* nextMove = m->next; + Move* promoList = NULL; + + if (isPromotionMin(m, color)) { + promoList = promotion(color, m); + movesToProcess = promoList; + } else { + m->next = NULL; + } + + Move* subM = movesToProcess; + while (subM != NULL) { + if (subM->type == 'c') { + makeMove(board, subM->pos_start.x, subM->pos_start.y, subM->pos_end.x, subM->pos_end.y); + makeMove(board, 4, 7 * (1 - color), 4 - (2 * (left_right(subM->pos_start.x) - 2)), 7 * (1 - color)); + } else { + makeMove(board, subM->pos_start.x, subM->pos_start.y, subM->pos_end.x, subM->pos_end.y); + board[subM->pos_end.x][subM->pos_end.y] = subM->type; + } + + int val = -negamax(depth - 1, board, 1 - color, -beta, -alpha); + + board[subM->pos_start.x][subM->pos_start.y] = piece; + board[subM->pos_end.x][subM->pos_end.y] = eatpiece; + if (subM->type == 'c') { + board[4][7 * (1 - color)] = (color == WHITE) ? 'k' : 'K'; + board[(4) - (2 * (left_right(subM->pos_start.x) - 2))][7 * (1 - color)] = EMPTY; + } + + if (val > bestVal) { + bestVal = val; + } + if (bestVal > alpha) { + alpha = bestVal; + } + if (alpha >= beta) { + if (promoList) { + // Should free remaining promo moves if any, but we rely on freeMoves(moves) later? + // No, promoList is separate. + // But we are in a sub-loop. + } + break; + } + + subM = subM->next; + } + + if (promoList) + freeMoves(promoList); + else + m->next = nextMove; + + if (alpha >= beta) + break; + + m = nextMove; + } + + freeMoves(moves); + return bestVal; +} + +Move* shuffleMoves(Move* head) +{ + if (!head || !head->next) + return head; + int count = countMoves(head); + Move** array = (Move**)malloc(count * sizeof(Move*)); + if (!array) + return head; + Move* curr = head; + for (int i = 0; i < count; i++) { + array[i] = curr; + curr = curr->next; + } + for (int i = count - 1; i > 0; i--) { + int j = rand() % (i + 1); + Move* temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + head = array[0]; + curr = head; + for (int i = 1; i < count; i++) { + curr->next = array[i]; + curr = curr->next; + } + curr->next = NULL; + free(array); + return head; +} + +Move* minimaxManager(char board[BOARD_SIZE][BOARD_SIZE], Move* moves, int color, unsigned int depth, char score) +{ + moves = shuffleMoves(moves); + boardConter = 1; + + int bestVal = -INF; + Move* bestMove = NULL; + int alpha = -INF; + int beta = INF; + + Move* m = moves; + while (m != NULL) { + char piece = board[m->pos_start.x][m->pos_start.y]; + char eatpiece = board[m->pos_end.x][m->pos_end.y]; + + Move* movesToProcess = m; + Move* nextMove = m->next; + Move* promoList = NULL; + + if (isPromotionMin(m, color)) { + promoList = promotion(color, m); + movesToProcess = promoList; + } else { + m->next = NULL; + } + + Move* subM = movesToProcess; + while (subM != NULL) { + if (subM->type == 'c') { + makeMove(board, subM->pos_start.x, subM->pos_start.y, subM->pos_end.x, subM->pos_end.y); + makeMove(board, 4, 7 * (1 - color), 4 - (2 * (left_right(subM->pos_start.x) - 2)), 7 * (1 - color)); + } else { + makeMove(board, subM->pos_start.x, subM->pos_start.y, subM->pos_end.x, subM->pos_end.y); + board[subM->pos_end.x][subM->pos_end.y] = subM->type; + } + + int val = -negamax(depth - 1, board, 1 - color, -beta, -alpha); + + board[subM->pos_start.x][subM->pos_start.y] = piece; + board[subM->pos_end.x][subM->pos_end.y] = eatpiece; + if (subM->type == 'c') { + board[4][7 * (1 - color)] = (color == WHITE) ? 'k' : 'K'; + board[(4) - (2 * (left_right(subM->pos_start.x) - 2))][7 * (1 - color)] = EMPTY; + } + + if (val > bestVal) { + bestVal = val; + if (bestMove) + freeMoves(bestMove); + bestMove = cloneMove(subM); + bestMove->next = NULL; + } + if (bestVal > alpha) { + alpha = bestVal; + } + + subM = subM->next; + } + + if (promoList) + freeMoves(promoList); + else + m->next = nextMove; + + m = nextMove; + } + + freeMoves(moves); + return bestMove; +} diff --git a/apps/Chess/minimax.h b/apps/Chess/minimax.h new file mode 100644 index 00000000..19d827b8 --- /dev/null +++ b/apps/Chess/minimax.h @@ -0,0 +1,12 @@ +#ifndef MINIMAX_H +#define MINIMAX_H + +#include "board.h" +#include "chess_defs.h" +#include "moves.h" + +#define valBest 700 + +Move* minimaxManager(char board[BOARD_SIZE][BOARD_SIZE], Move* moves, int color, unsigned int depth, char score); + +#endif diff --git a/apps/Chess/moves.c b/apps/Chess/moves.c new file mode 100644 index 00000000..de716cce --- /dev/null +++ b/apps/Chess/moves.c @@ -0,0 +1,769 @@ +#include "moves.h" +#include "board.h" +#include +#include + +// Forward declarations +Move *pawnMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves); +Move *bishopMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves); +Move *rookMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves); +Move *knightMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves); +Move *queenMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves); +Move *kingMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves); +Move *castelingMove(char board[BOARD_SIZE][BOARD_SIZE], int color, int side, Move *moves); +int isKingMove(int color); +int whichRook(int color, int side); + +void freeMoves(Move *moves) +{ + Move *current = moves; + while (moves != NULL) + { + Move *next = moves->next; + free(moves); + moves = next; + } +} + +Move *createMove(int x, int y, int xnew, int ynew, char type) +{ + Move *retMove = (Move *)malloc(sizeof(Move)); + if (retMove == NULL) + return NULL; + + retMove->pos_start.x = x; + retMove->pos_start.y = y; + retMove->pos_end.x = xnew; + retMove->pos_end.y = ynew; + retMove->type = type; + retMove->next = NULL; + return retMove; +} + +Move *cloneMove(Move *move) +{ + if (move == NULL) + return NULL; + return createMove(move->pos_start.x, move->pos_start.y, move->pos_end.x, move->pos_end.y, move->type); +} + +Move *legalMove(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int xnew, int ynew, int color, Move *moves) +{ + int flag; + if ((0 <= xnew) && (xnew < BOARD_SIZE) && (0 <= ynew) && (ynew < BOARD_SIZE)) + { + char target = board[xnew][ynew]; + if ((target == EMPTY) || (color && isBlack(target)) || (color == 0 && isWhite(target))) + { + // Make move + char piece = board[x][y]; + board[xnew][ynew] = piece; + board[x][y] = EMPTY; + + flag = isCheck(board, color); + + // Unmake move + board[x][y] = piece; + board[xnew][ynew] = target; + + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, xnew, ynew, piece); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + moves = node; + } + else + { + node->next = moves; + moves = node; + } + } + } + } + return moves; +} + +Move *pawnMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves) +{ + char boardCopy[BOARD_SIZE][BOARD_SIZE]; + int flag; + if (color) + { + if (board[x][y + 1] == EMPTY) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x, y + 1); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x, y + 1, WHITE_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + if (y == 1 && board[x][y + 2] == EMPTY) + { // two steps from the starting position + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x, y + 2); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x, y + 2, WHITE_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + if (x > 0 && isBlack(board[x - 1][y + 1])) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x - 1, y + 1); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x - 1, y + 1, WHITE_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + if (x < BOARD_SIZE - 1 && isBlack(board[x + 1][y + 1])) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x + 1, y + 1); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x + 1, y + 1, WHITE_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + } + else + { + if (board[x][y - 1] == EMPTY) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x, y - 1); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x, y - 1, BLACK_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + if (y == BOARD_SIZE - 2 && board[x][y - 2] == EMPTY) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x, y - 2); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x, y - 2, BLACK_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + if (x > 0 && isWhite(board[x - 1][y - 1])) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x - 1, y - 1); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x - 1, y - 1, BLACK_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + if (x < BOARD_SIZE - 1 && isWhite(board[x + 1][y - 1])) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, x, y, x + 1, y - 1); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + Move *node = createMove(x, y, x + 1, y - 1, BLACK_P); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + free(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + } + return moves; +} + +Move *bishopMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves) +{ + int left_up = 1; + int right_up = 1; + int left_down = 1; + int right_down = 1; + for (int k = 1; k < BOARD_SIZE; k++) + { + if (right_up) + { + moves = legalMove(board, x, y, x + k, y + k, color, moves); + if (moves == NULL) + return NULL; + if ((x + k == BOARD_SIZE - 1) || (y + k == BOARD_SIZE - 1)) + right_up = 0; + if ((x == BOARD_SIZE - 1) || (y == BOARD_SIZE - 1) || board[x + k][y + k] != EMPTY) + right_up = 0; + } + if (left_up) + { + moves = legalMove(board, x, y, x - k, y + k, color, moves); + if (moves == NULL) + return NULL; + if ((y + k == BOARD_SIZE - 1) || (x - k == 0)) + left_up = 0; + if ((x == 0) || (y == BOARD_SIZE - 1) || board[x - k][y + k] != EMPTY) + left_up = 0; + } + if (left_down) + { + moves = legalMove(board, x, y, x - k, y - k, color, moves); + if (moves == NULL) + return NULL; + if ((x - k == 0) || (y - k == 0)) + left_down = 0; + if ((x == 0) || (y == 0) || board[x - k][y - k] != EMPTY) + left_down = 0; + } + if (right_down) + { + moves = legalMove(board, x, y, x + k, y - k, color, moves); + if (moves == NULL) + return NULL; + if ((y - k == 0) || (x + k == BOARD_SIZE - 1)) + right_down = 0; + if ((x == BOARD_SIZE - 1) || (y == 0) || board[x + k][y - k] != EMPTY) + right_down = 0; + } + } + return moves; +} + +Move *rookMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves) +{ + int left = 1; + int right = 1; + int down = 1; + int up = 1; + for (int k = 1; k < BOARD_SIZE; k++) + { + if (up) + { + moves = legalMove(board, x, y, x, y + k, color, moves); + if (moves == NULL) + return NULL; + if (y + k == BOARD_SIZE - 1) + up = 0; + if ((y == BOARD_SIZE - 1) || board[x][y + k] != EMPTY) + up = 0; + } + if (down) + { + moves = legalMove(board, x, y, x, y - k, color, moves); + if (moves == NULL) + return NULL; + if (y - k == 0) + down = 0; + if ((y == 0) || board[x][y - k] != EMPTY) + down = 0; + } + if (left) + { + moves = legalMove(board, x, y, x - k, y, color, moves); + if (moves == NULL) + return NULL; + if (x - k == 0) + left = 0; + if ((x == 0) || board[x - k][y] != EMPTY) + left = 0; + } + if (right) + { + moves = legalMove(board, x, y, x + k, y, color, moves); + if (moves == NULL) + return NULL; + if (x + k == BOARD_SIZE - 1) + right = 0; + if ((x == BOARD_SIZE - 1) || board[x + k][y] != EMPTY) + right = 0; + } + } + if (board[x][y] == 'r' - (32 * (1 - color))) + { + if (((isKingMove(color)) == 0) && board[4][7 - (7 * color)] == KING(color)) + { + if (whichRook(color, 0) == 0 && x == 0 && y == 7 - (7 * color) && board[0][7 - (7 * color)] == ROOK(color)) + { + moves = castelingMove(board, color, 0, moves); + if (moves == NULL) + { + return NULL; + } + } + if (whichRook(color, 1) == 0 && x == 7 && y == 7 - (7 * color) && board[7][7 - (7 * color)] == ROOK(color)) + { + moves = castelingMove(board, color, 1, moves); + if (moves == NULL) + { + return NULL; + } + } + } + } + return moves; +} + +Move *knightMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves) +{ + for (int i = 0; i < BOARD_SIZE; i++) + { + moves = legalMove(board, x, y, x + ((left_right(i) - 2) * (direction(i))), y + ((up_down(i) - 2) * (direction(BOARD_SIZE - 1 - i))), color, moves); + if (moves == NULL) + return NULL; + } + return moves; +} + +Move *queenMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves) +{ + moves = bishopMovesList(board, x, y, color, moves); + moves = rookMovesList(board, x, y, color, moves); + return moves; +} + +Move *kingMovesList(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int color, Move *moves) +{ + int y2 = 0, x2 = 0; + for (int i = 0; i < BOARD_SIZE; i++) + { + y2 = (((direction_to_go(i)) / 10) - 1); + x2 = (((direction_to_go(i)) % 10) - 1); + moves = legalMove(board, x, y, x + x2, y + y2, color, moves); + if (moves == NULL) + return NULL; + } + return moves; +} + +int isKingMove(int color) +{ + if (color) + return is_move_king_white; + else + return is_move_king_black; +} + +int whichRook(int color, int side) +{ + if (color == 1 && side == 1) + return is_move_right_rook_white; + if (color == 1 && side == 0) + return is_move_left_rook_white; + if (color == 0 && side == 1) + return is_move_right_rook_black; + if (color == 0 && side == 0) + return is_move_left_rook_black; + return -1; +} + +Move *getMoves(char board[BOARD_SIZE][BOARD_SIZE], int color) +{ + Move *moves = (Move *)malloc(sizeof(Move)); + if (moves == NULL) + return NULL; + moves->type = 'a'; + moves->pos_start.x = -1; + moves->pos_start.y = -1; + moves->pos_end.x = -1; + moves->pos_end.y = -1; + moves->next = NULL; + for (int x = 0; x < BOARD_SIZE; x++) + { + for (int y = 0; y < BOARD_SIZE; y++) + { + if (!color) + { + switch (board[x][y]) + { + case BLACK_B: + moves = bishopMovesList(board, x, y, color, moves); + break; + case BLACK_K: + moves = kingMovesList(board, x, y, color, moves); + break; + case BLACK_Q: + moves = queenMovesList(board, x, y, color, moves); + break; + case BLACK_N: + moves = knightMovesList(board, x, y, color, moves); + break; + case BLACK_R: + moves = rookMovesList(board, x, y, color, moves); + break; + case BLACK_P: + moves = pawnMovesList(board, x, y, color, moves); + break; + } + } + else + { + switch (board[x][y]) + { + case WHITE_B: + moves = bishopMovesList(board, x, y, color, moves); + break; + case WHITE_K: + moves = kingMovesList(board, x, y, color, moves); + break; + case WHITE_Q: + moves = queenMovesList(board, x, y, color, moves); + break; + case WHITE_N: + moves = knightMovesList(board, x, y, color, moves); + break; + case WHITE_R: + moves = rookMovesList(board, x, y, color, moves); + break; + case WHITE_P: + moves = pawnMovesList(board, x, y, color, moves); + break; + } + } + if (moves == NULL) + return NULL; + } + } + if (moves->type == 'a') + { + int isCheckBool = isCheck(board, color); + if (isCheckBool == 0) + return NULL; + if (isCheckBool == 1) + moves->type = 'l'; + else + moves->type = 't'; + } + return moves; +} + +Pos kingPosition(char board[BOARD_SIZE][BOARD_SIZE], int color) +{ + Pos pos; + pos.x = -1; + pos.y = -1; + for (int x = 0; x < BOARD_SIZE; x++) + { + for (int y = 0; y < BOARD_SIZE; y++) + { + if (color && board[x][y] == WHITE_K) + { + pos.x = x; + pos.y = y; + return pos; + } + if (color == 0 && board[x][y] == BLACK_K) + { + pos.x = x; + pos.y = y; + return pos; + } + } + } + return pos; +} + +int isCheck(char board[BOARD_SIZE][BOARD_SIZE], int color) +{ + Pos pos = kingPosition(board, color); + int x1 = 0, y1 = 0, x2 = 0, y2 = 0; + if (pos.x == -1) + { + return 0; + } + if (color && (pos.y + 1) < BOARD_SIZE) + { + if ((pos.x + 1) < BOARD_SIZE) + { + if (board[pos.x + 1][pos.y + 1] == BLACK_P) + { + return 1; + } + } + if ((pos.x - 1) > -1) + { + if (board[pos.x - 1][pos.y + 1] == BLACK_P) + { + return 1; + } + } + } + if (color == 0 && (pos.y - 1) > -1) + { + if ((pos.x + 1) < BOARD_SIZE) + { + if (board[pos.x + 1][pos.y - 1] == WHITE_P) + { + return 1; + } + } + if ((pos.x - 1) > -1) + { + if (board[pos.x - 1][pos.y - 1] == WHITE_P) + { + return 1; + } + } + } + for (int i = 0; i < BOARD_SIZE; i++) + { + x1 = ((direction(BOARD_SIZE - i - 1))) * ((up_down(i)) - 2); + y1 = ((direction(i))) * ((left_right(i)) - 2); + x2 = (((direction_to_go(i)) / 10) - 1); + y2 = (((direction_to_go(i)) % 10) - 1); + if ((0 <= pos.y + y1) && (pos.y + y1 < BOARD_SIZE) && (0 <= pos.x + x1) && (pos.x + x1 < BOARD_SIZE)) + { + if (board[pos.x + x1][pos.y + y1] == KNIGHT(!color)) + { + return 1; + } + } + if ((0 <= pos.y + y2) && (pos.y + y2 < BOARD_SIZE) && (0 <= pos.x + x2) && (pos.x + x2 < BOARD_SIZE)) + { + if (board[pos.x + x2][pos.y + y2] == KING(!color)) + { + return 1; + } + } + for (int j = 1; j < BOARD_SIZE; j++) + { + y1 = j * (((direction_to_go(i)) / 10) - 1); + x1 = j * (((direction_to_go(i)) % 10) - 1); + if ((0 <= (pos.y + y1) && (pos.y + y1) < BOARD_SIZE) && (0 <= (pos.x + x1) && (pos.x + x1) < BOARD_SIZE)) + { + if (board[pos.x + x1][pos.y + y1] != EMPTY) + { + if ((board[pos.x + x1][pos.y + y1] == QUEEN(!color)) || (board[pos.x + x1][pos.y + y1] == type(!color, i))) + { + return 1; + } + break; + } + } + } + } + return -1; +} + +int isEmpty(char board[BOARD_SIZE][BOARD_SIZE], int color, int side) +{ + for (int i = 1; i < 4; i++) + { + if ((4) + (i * (left_right(2 * (1 - side)) - 2)) > 0 && ((4) + (i * (left_right(2 * (1 - side)) - 2)) < (BOARD_SIZE - 1))) + { + if (board[(4) + (i * ((left_right(2 * (1 - side)) - 2)))][(7 - (7 * color))] != EMPTY) + { + return 0; + } + } + } + return 1; +} + +Move *castelingMove(char board[BOARD_SIZE][BOARD_SIZE], int color, int side, Move *moves) +{ + char boardCopy[BOARD_SIZE][BOARD_SIZE]; + Move *node; + int flag = isCheck(board, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + if (isEmpty(board, color, side)) + { + copyBoard(board, boardCopy); + makeMove(boardCopy, 7 * side, (7 - (7 * color)), (4) + (left_right(2 * (1 - side)) - 2), (7 - (7 * color))); + makeMove(boardCopy, (4), (7 - (7 * color)), (4) + 2 * (left_right(2 * (1 - side)) - 2), (7 - (7 * color))); + flag = isCheck(boardCopy, color); + if (flag == 0) + { + freeMoves(moves); + return NULL; + } + if (flag == -1) + { + node = createMove(7 * side, (7 - (7 * color)), (4) + (left_right(2 * (1 - side)) - 2), (7 - (7 * color)), 'c'); + if (node == NULL) + { + freeMoves(moves); + return NULL; + } + if (moves->type == 'a') + { + freeMoves(moves); + } + else + { + node->next = moves; + } + moves = node; + } + } + } + return moves; +} diff --git a/apps/Chess/moves.h b/apps/Chess/moves.h new file mode 100644 index 00000000..351939bf --- /dev/null +++ b/apps/Chess/moves.h @@ -0,0 +1,35 @@ +#ifndef MOVES_H +#define MOVES_H + +#include "board.h" +#include "chess_defs.h" + +#define direction(x) ((x > 3) ? (2) : (1)) +#define up_down(x) ((x % 2 < 1) ? (3) : (1)) +#define left_right(x) (((x / 2) % 2 < 1) ? (3) : (1)) + +#define direction_to_go(x) ((x > 3) ? deg_0_180(x % 4) : deg_180_360(x % 4)) +#define deg_0_180(x) ((x > 1) ? or_0_45(x % 2) : or_90_135(x % 2)) +#define deg_180_360(x) ((x > 1) ? or_180_225(x % 2) : or_270_315(x % 2)) +#define or_0_45(x) ((x > 0) ? (12) : (22)) +#define or_90_135(x) ((x % 2 > 0) ? (21) : (20)) +#define or_180_225(x) ((x > 0) ? (10) : (0)) +#define or_270_315(x) ((x % 2 > 0) ? (1) : (2)) + +#define type(color, i) ((color) ? (white_Orthogonal_Diagonal(i)) : (black_Orthogonal_Diagonal(i))) +#define white_Orthogonal_Diagonal(i) ((i % 2 < 1) ? (WHITE_B) : (WHITE_R)) +#define black_Orthogonal_Diagonal(i) ((i % 2 < 1) ? (BLACK_B) : (BLACK_R)) +#define QUEEN(color) ((color) ? (WHITE_Q) : (BLACK_Q)) +#define KNIGHT(color) ((color) ? (WHITE_N) : (BLACK_N)) +#define KING(color) ((color) ? (WHITE_K) : (BLACK_K)) +#define ROOK(color) ((color) ? (WHITE_R) : (BLACK_R)) + +Move* getMoves(char board[BOARD_SIZE][BOARD_SIZE], int color); +void freeMoves(Move* moves); +int isCheck(char board[BOARD_SIZE][BOARD_SIZE], int color); +Move* createMove(int x, int y, int xnew, int ynew, char type); +Move* legalMove(char board[BOARD_SIZE][BOARD_SIZE], int x, int y, int xnew, int ynew, int color, Move* moves); +Move* cloneMove(Move* move); +Pos kingPosition(char board[BOARD_SIZE][BOARD_SIZE], int color); + +#endif diff --git a/apps/Chess/sources.mak b/apps/Chess/sources.mak new file mode 100644 index 00000000..1d526c9e --- /dev/null +++ b/apps/Chess/sources.mak @@ -0,0 +1,7 @@ +app_external_src += $(addprefix $(EXTAPP_PATH)/,\ + main.c \ + board.c \ + moves.c \ + minimax.c \ + ui.c \ +) diff --git a/apps/Chess/ui.c b/apps/Chess/ui.c new file mode 100644 index 00000000..2ac9bd1e --- /dev/null +++ b/apps/Chess/ui.c @@ -0,0 +1,498 @@ +#include "ui.h" + +#include +#include + +#include "board.h" +#include "extapp_api.h" + +// Include assets +#include "assets/bishop.h" +#include "assets/bishop1.h" +#include "assets/king.h" +#include "assets/king1.h" +#include "assets/knight.h" +#include "assets/knight1.h" +#include "assets/pawn.h" +#include "assets/pawn1.h" +#include "assets/queen.h" +#include "assets/queen1.h" +#include "assets/rook.h" +#include "assets/rook1.h" + +// Board dimensions +#define BOARD_X 0 +#define BOARD_Y 0 +#define SQUARE_SIZE (LCD_HEIGHT / 8) +#define PIECE_SCALE 0.7 +#define INFO_PANEL_X (8 * SQUARE_SIZE) +#define INFO_PANEL_WIDTH (LCD_WIDTH - INFO_PANEL_X) + +// Colors +#define COLOR_MENU_BG 0xFFDF // #FFFAFF +#define COLOR_OPTION_BG 0xFFFF // #FFFEFF +#define COLOR_OPTION_ACTIVE_BG 0xE71C // #E6E2E6 +#define COLOR_TRIANGLE 0xFD70 // #FFAD83 +#define COLOR_BORDER 0xEF7D // #EEEEEE +#define COLOR_SUBTEXT 0x6B6D // #6A6D6A +#define COLOR_SELECTION_OVERLAY 0xFFE0 // #FFFF00 +#define COLOR_MASK_LSB 0xF7DE +#define COLOR_CHECK 0xEB0A // #EB6150 + +// Menu layout +#define MENU_MARGIN_TOP 38 +#define MENU_MARGIN_SIDE 15 +#define MENU_OPTION_WIDTH (LCD_WIDTH - 2 * MENU_MARGIN_SIDE) +#define MENU_OPTION_HEIGHT 34 + +void draw_piece_to_buffer(uint16_t* buffer, int buffer_width, int buffer_height, char piece) +{ + const uint16_t* piece_data = NULL; + int width = 0, height = 0; + + switch (piece) { + case WHITE_P: + piece_data = pawn_data; + width = PAWN_WIDTH; + height = PAWN_HEIGHT; + break; + case BLACK_P: + piece_data = pawn1_data; + width = PAWN1_WIDTH; + height = PAWN1_HEIGHT; + break; + case WHITE_R: + piece_data = rook_data; + width = ROOK_WIDTH; + height = ROOK_HEIGHT; + break; + case BLACK_R: + piece_data = rook1_data; + width = ROOK1_WIDTH; + height = ROOK1_HEIGHT; + break; + case WHITE_N: + piece_data = knight_data; + width = KNIGHT_WIDTH; + height = KNIGHT_HEIGHT; + break; + case BLACK_N: + piece_data = knight1_data; + width = KNIGHT1_WIDTH; + height = KNIGHT1_HEIGHT; + break; + case WHITE_B: + piece_data = bishop_data; + width = BISHOP_WIDTH; + height = BISHOP_HEIGHT; + break; + case BLACK_B: + piece_data = bishop1_data; + width = BISHOP1_WIDTH; + height = BISHOP1_HEIGHT; + break; + case WHITE_Q: + piece_data = queen_data; + width = QUEEN_WIDTH; + height = QUEEN_HEIGHT; + break; + case BLACK_Q: + piece_data = queen1_data; + width = QUEEN1_WIDTH; + height = QUEEN1_HEIGHT; + break; + case WHITE_K: + piece_data = king_data; + width = KING_WIDTH; + height = KING_HEIGHT; + break; + case BLACK_K: + piece_data = king1_data; + width = KING1_WIDTH; + height = KING1_HEIGHT; + break; + default: + return; + } + + if (piece_data == NULL) + return; + + int scaled_width = (int)(width * PIECE_SCALE); + int scaled_height = (int)(height * PIECE_SCALE); + int offset_x = (buffer_width - scaled_width) / 2; + int offset_y = (buffer_height - scaled_height) / 2; + + for (int py = 0; py < scaled_height; py++) { + for (int px = 0; px < scaled_width; px++) { + int orig_x = (int)(px / PIECE_SCALE); + int orig_y = (int)(py / PIECE_SCALE); + if (orig_x >= width) + orig_x = width - 1; + if (orig_y >= height) + orig_y = height - 1; + + uint16_t color = piece_data[orig_y * width + orig_x]; + if (color != COLOR_TRANSPARENT) { + int buf_x = offset_x + px; + int buf_y = offset_y + py; + if (buf_x >= 0 && buf_x < buffer_width && buf_y >= 0 && buf_y < buffer_height) { + buffer[buf_y * buffer_width + buf_x] = color; + } + } + } + } +} + +void draw_move_indicator_to_buffer(uint16_t* buffer, int buffer_width, int buffer_height) +{ + int center_x = buffer_width / 2; + int center_y = buffer_height / 2; + int radius = buffer_width / 6; + + for (int dy = -radius; dy <= radius; dy++) { + for (int dx = -radius; dx <= radius; dx++) { + if (dx * dx + dy * dy <= radius * radius) { + int x = center_x + dx; + int y = center_y + dy; + if (x >= 0 && x < buffer_width && y >= 0 && y < buffer_height) { + uint16_t existing_pixel = buffer[y * buffer_width + x]; + uint16_t r = (existing_pixel >> 11) & 0x1F; + uint16_t g = (existing_pixel >> 5) & 0x3F; + uint16_t b = existing_pixel & 0x1F; + + // Apply rgba(0, 0, 0, 0.45) -> multiply by 0.55 + r = (r * 55) / 100; + g = (g * 55) / 100; + b = (b * 55) / 100; + + uint16_t blended = (r << 11) | (g << 5) | b; + buffer[y * buffer_width + x] = blended; + } + } + } + } +} + +void draw_square(char board[BOARD_SIZE][BOARD_SIZE], int row, int col, bool selected, bool is_possible_move, bool is_check) +{ + int x = BOARD_X + col * SQUARE_SIZE; + int y = BOARD_Y + row * SQUARE_SIZE; + + uint16_t buffer[SQUARE_SIZE * SQUARE_SIZE]; + + bool is_light = ((row + col) % 2 == 0); + uint16_t bg_color = is_light ? COLOR_SQUARE_LIGHT : COLOR_SQUARE_DARK; + uint16_t text_color = is_light ? COLOR_SQUARE_DARK : COLOR_SQUARE_LIGHT; + + if (is_check) { + // Blend bg_color with COLOR_CHECK (alpha 0.8) + int r_src = (COLOR_CHECK >> 11) & 0x1F; + int g_src = (COLOR_CHECK >> 5) & 0x3F; + int b_src = (COLOR_CHECK) & 0x1F; + + int r_dst = (bg_color >> 11) & 0x1F; + int g_dst = (bg_color >> 5) & 0x3F; + int b_dst = (bg_color) & 0x1F; + + int r = (r_src * 8 + r_dst * 2) / 10; + int g = (g_src * 8 + g_dst * 2) / 10; + int b = (b_src * 8 + b_dst * 2) / 10; + + bg_color = (r << 11) | (g << 5) | b; + } + + // Fill background + for (int i = 0; i < SQUARE_SIZE * SQUARE_SIZE; i++) { + buffer[i] = bg_color; + } + + // Draw selection + if (selected) { + for (int i = 0; i < SQUARE_SIZE * SQUARE_SIZE; i++) { + buffer[i] = ((buffer[i] & COLOR_MASK_LSB) >> 1) + ((COLOR_SELECTION_OVERLAY & COLOR_MASK_LSB) >> 1); + } + bg_color = ((bg_color & COLOR_MASK_LSB) >> 1) + ((COLOR_SELECTION_OVERLAY & COLOR_MASK_LSB) >> 1); + } + + // Draw piece + int board_x = col; + int board_y = 7 - row; + if (board[board_x][board_y] != EMPTY) { + draw_piece_to_buffer(buffer, SQUARE_SIZE, SQUARE_SIZE, board[board_x][board_y]); + } + + // Draw move indicator + if (is_possible_move) { + draw_move_indicator_to_buffer(buffer, SQUARE_SIZE, SQUARE_SIZE); + } + + // Push buffer + extapp_pushRect(x, y, SQUARE_SIZE, SQUARE_SIZE, buffer); + + // Draw coordinates + char buffer_text[2] = { 0, 0 }; + if (col == 0) { + buffer_text[0] = '8' - row; + extapp_drawTextSmall(buffer_text, x + 2, y + 2, text_color, bg_color, false); + } + + if (row == 7) { + buffer_text[0] = 'a' + col; + extapp_drawTextSmall(buffer_text, x + SQUARE_SIZE - 9, y + SQUARE_SIZE - 12, text_color, bg_color, false); + } +} + +void draw_cursor_move(char board[BOARD_SIZE][BOARD_SIZE], int old_row, int old_col, int new_row, int new_col, + Move* possible_moves, int check_row, int check_col) +{ + bool old_is_move = false; + bool new_is_move = false; + + if (possible_moves != NULL) { + Move* m = possible_moves; + while (m != NULL) { + int r = 7 - m->pos_end.y; + int c = m->pos_end.x; + if (r == old_row && c == old_col) + old_is_move = true; + if (r == new_row && c == new_col) + new_is_move = true; + m = m->next; + } + } + + bool old_is_check = (old_row == check_row && old_col == check_col); + bool new_is_check = (new_row == check_row && new_col == check_col); + + draw_square(board, old_row, old_col, false, old_is_move, old_is_check); + draw_square(board, new_row, new_col, true, new_is_move, new_is_check); +} + +void draw_board(char board[BOARD_SIZE][BOARD_SIZE], int sel_row, int sel_col, bool show_moves, Move* possible_moves, int check_row, int check_col) +{ + bool moves_map[8][8]; + memset(moves_map, 0, sizeof(moves_map)); + + if (show_moves && possible_moves != NULL) { + Move* m = possible_moves; + while (m != NULL) { + // Map move coordinates (x,y) to screen coordinates (row,col) + // x = col + // y = 7 - row => row = 7 - y + int r = 7 - m->pos_end.y; + int c = m->pos_end.x; + if (r >= 0 && r < 8 && c >= 0 && c < 8) { + moves_map[r][c] = true; + } + m = m->next; + } + } + + for (int row = 0; row < 8; row++) { + for (int col = 0; col < 8; col++) { + bool is_check = (row == check_row && col == check_col); + draw_square(board, row, col, (row == sel_row && col == sel_col), moves_map[row][col], is_check); + } + } +} + +const char* get_piece_name(char piece) +{ + switch (piece) { + case WHITE_P: + return "Pawn W"; + case BLACK_P: + return "Pawn B"; + case WHITE_R: + return "Rook W"; + case BLACK_R: + return "Rook B"; + case WHITE_N: + return "Knight W"; + case BLACK_N: + return "Knight B"; + case WHITE_B: + return "Bishop W"; + case BLACK_B: + return "Bishop B"; + case WHITE_Q: + return "Queen W"; + case BLACK_Q: + return "Queen B"; + case WHITE_K: + return "King W"; + case BLACK_K: + return "King B"; + default: + return ""; + } +} + +void draw_info_panel(char board[BOARD_SIZE][BOARD_SIZE], int cursor_row, int cursor_col, bool piece_selected, + int selected_row, int selected_col, bool white_turn, bool is_check, const char* last_move_str) +{ + int x = INFO_PANEL_X; + int y = 0; + int width = INFO_PANEL_WIDTH; + + extapp_pushRectUniform(x, y, width, LCD_HEIGHT, COLOR_WHITE); + + int offset_y = 5; + extapp_drawTextSmall("Turn:", x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + offset_y += 12; + if (white_turn) { + extapp_drawTextSmall("White", x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + } else { + extapp_drawTextSmall("Black", x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + } + + if (is_check) { + offset_y += 20; + extapp_drawTextSmall("CHECK!", x + 5, offset_y, 0xF800, COLOR_WHITE, false); // Red color + } + + offset_y += 20; + extapp_drawTextSmall("Position:", x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + offset_y += 12; + char pos[4]; + pos[0] = 'a' + cursor_col; + pos[1] = '8' - cursor_row; + pos[2] = '\0'; + extapp_drawTextSmall(pos, x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + + if (last_move_str && last_move_str[0] != '\0') { + offset_y += 20; + extapp_drawTextSmall("Last Move:", x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + offset_y += 12; + extapp_drawTextSmall(last_move_str, x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + } + + if (piece_selected && selected_row >= 0 && selected_col >= 0) { + offset_y += 20; + extapp_drawTextSmall("Selected:", x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + offset_y += 12; + // Map selected_row/col to board coords + int bx = selected_col; + int by = 7 - selected_row; + const char* piece_name = get_piece_name(board[bx][by]); + extapp_drawTextSmall(piece_name, x + 5, offset_y, COLOR_BLACK, COLOR_WHITE, false); + } +} + +static void draw_menu_triangle(int x, int y) +{ + for (int i = 0; i < 8; i++) { + int y_off = (i * 5) / 8; + int h = 10 - 2 * y_off; + if (h > 0) { + extapp_pushRectUniform(x + i, y + y_off, 1, h, COLOR_TRIANGLE); + } + } +} + +/// @brief +/// @param index +/// @param text +/// @param selected +/// @param has_sub +/// @param sub_text +static void draw_menu_option(int index, const char* text, bool selected, bool has_sub, const char* sub_text, bool draw_borders) +{ + int x = MENU_MARGIN_SIDE; + int y = MENU_MARGIN_TOP + index * (MENU_OPTION_HEIGHT - 1); + int w = MENU_OPTION_WIDTH; + int h = MENU_OPTION_HEIGHT; + + uint16_t bg_color = selected ? COLOR_OPTION_ACTIVE_BG : COLOR_OPTION_BG; + + // Fill background + extapp_pushRectUniform(x + 1, y + 1, w - 2, h - 2, bg_color); + + // Draw borders + if (draw_borders) { + extapp_pushRectUniform(x, y, w, 1, COLOR_BORDER); // Top + extapp_pushRectUniform(x, y + h - 1, w, 1, COLOR_BORDER); // Bottom + extapp_pushRectUniform(x, y, 1, h, COLOR_BORDER); // Left + extapp_pushRectUniform(x + w - 1, y, 1, h, COLOR_BORDER); // Right + } + + // Text + extapp_drawTextLarge(text, x + 11, y + 7, COLOR_BLACK, bg_color, false); + + // Triangle + if (has_sub) { + int triangle_x = x + w - 10 - 8; + draw_menu_triangle(triangle_x, y + 12); + + if (sub_text != NULL) { + int text_w = extapp_drawTextLarge(sub_text, 0, 0, 0, 0, true); + int text_x = triangle_x + 8 - text_w; + extapp_drawTextSmall(sub_text, text_x, y + 11, COLOR_SUBTEXT, bg_color, false); + } + } +} + +int show_menu(const char* title, const MenuItem* items, int count, int initial_selection) +{ + int selected = initial_selection; + if (selected < 0) + selected = 0; + if (selected >= count) + selected = count - 1; + + // Wait for key release + while (extapp_scanKeyboard()) { + extapp_msleep(10); + } + + // Initial Draw + extapp_pushRectUniform(0, 0, LCD_WIDTH, LCD_HEIGHT, COLOR_MENU_BG); + + if (title) { + extapp_pushRectUniform(0, 0, LCD_WIDTH, 18, COLOR_UPSILON); + int t_width = strlen(title) * 7; + extapp_drawTextSmall(title, (LCD_WIDTH - t_width) / 2, 3, COLOR_WHITE, COLOR_UPSILON, false); + } + + for (int i = 0; i < count; i++) { + draw_menu_option(i, items[i].text, i == selected, items[i].sub_text != NULL, items[i].sub_text, true); + } + + uint64_t last_move_time = 0; + while (true) { + uint64_t keys = extapp_scanKeyboard(); + uint64_t current_time = extapp_millis(); + int old_selected = selected; + bool selection_changed = false; + + if (current_time - last_move_time > 150) { + if (keys & SCANCODE_Up) { + if (selected > 0) { + selected--; + selection_changed = true; + } + } else if (keys & SCANCODE_Down) { + if (selected < count - 1) { + selected++; + selection_changed = true; + } + } + } + + if (keys & SCANCODE_OK || keys & SCANCODE_EXE) { + return selected; + } else if (keys & SCANCODE_Home || keys & SCANCODE_Back) { + return -1; + } + + if (selection_changed) { + extapp_waitForVBlank(); + draw_menu_option(old_selected, items[old_selected].text, false, items[old_selected].sub_text != NULL, items[old_selected].sub_text, false); + draw_menu_option(selected, items[selected].text, true, items[selected].sub_text != NULL, items[selected].sub_text, false); + last_move_time = current_time; + } + + extapp_msleep(10); + } +} diff --git a/apps/Chess/ui.h b/apps/Chess/ui.h new file mode 100644 index 00000000..f9f1729d --- /dev/null +++ b/apps/Chess/ui.h @@ -0,0 +1,21 @@ +#ifndef UI_H +#define UI_H + +#include "chess_defs.h" +#include + +typedef struct { + const char* text; + const char* sub_text; +} MenuItem; + +void draw_board(char board[BOARD_SIZE][BOARD_SIZE], int sel_row, int sel_col, bool show_moves, Move* possible_moves, int check_row, int check_col); +void draw_square(char board[BOARD_SIZE][BOARD_SIZE], int row, int col, bool selected, bool is_possible_move, bool is_check); +void draw_cursor_move(char board[BOARD_SIZE][BOARD_SIZE], int old_row, int old_col, int new_row, int new_col, Move* possible_moves, int check_row, int check_col); +void draw_info_panel(char board[BOARD_SIZE][BOARD_SIZE], int cursor_row, int cursor_col, bool piece_selected, int selected_row, int selected_col, bool white_turn, bool is_check, const char* last_move_str); + +// Generic menu function that handles the loop and drawing +// Returns the selected index, or -1 if Back/Home was pressed +int show_menu(const char* title, const MenuItem* items, int count, int initial_selection); + +#endif diff --git a/apps/apps.js b/apps/apps.js index 20d34bbd..394131da 100644 --- a/apps/apps.js +++ b/apps/apps.js @@ -17,5 +17,6 @@ angular.module('nwas').service('apps', function() { { name: "Compressor", description: {en: "Compress your files", fr: "Compressez vos fichiers"} }, { name: "Backup", description: {en: "Backup scripts wirelessly", fr: "Sauvegardez vos fichiers sans fil"} }, { name: "HoldemPoker", description: {en: "A Texas Hold'em Poker Game", fr: "Un jeu de Texas Hold'em"} }, + { name: "Chess", description: {en: "Chess Game", fr: "Jeu d'échecs"} }, ]; });