From 60699af63f92f43cc4b4b9e3050fcdd2a8468281 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Wed, 10 Apr 2019 15:14:00 -0400 Subject: add opengl fronend, remove sdl frontend, refactor build system --- frontends/calculator/CEdev/bin/C1ERRORS.DAT | 181 ++ frontends/calculator/CEdev/bin/License | 120 + frontends/calculator/CEdev/bin/PLCError.dll | Bin 0 -> 29184 bytes frontends/calculator/CEdev/bin/convhex | Bin 0 -> 22664 bytes frontends/calculator/CEdev/bin/convpng | Bin 0 -> 158920 bytes frontends/calculator/CEdev/bin/convtile | Bin 0 -> 28040 bytes frontends/calculator/CEdev/bin/eZ80.ini | 18 + frontends/calculator/CEdev/bin/ez80cc.con | 23 + frontends/calculator/CEdev/bin/ez80cc.exe | Bin 0 -> 77824 bytes frontends/calculator/CEdev/bin/fasmg | Bin 0 -> 52454 bytes frontends/calculator/CEdev/bin/make.exe | Bin 0 -> 208896 bytes frontends/calculator/CEdev/bin/p1.exe | Bin 0 -> 294912 bytes frontends/calculator/CEdev/bin/p2.exe | Bin 0 -> 188416 bytes frontends/calculator/CEdev/bin/p3.exe | Bin 0 -> 835584 bytes frontends/calculator/CEdev/bin/zds2.version | 7 + .../CEdev/examples/debugging/bin/DEMO.8xp | Bin 0 -> 584 bytes .../CEdev/examples/debugging/bin/DEMO.bin | Bin 0 -> 508 bytes .../CEdev/examples/debugging/bin/DEMO.dbg | Bin 0 -> 971 bytes .../CEdev/examples/debugging/bin/DEMO.map | 35 + .../calculator/CEdev/examples/debugging/makefile | 18 + .../CEdev/examples/debugging/obj/main.src | 484 ++++ .../calculator/CEdev/examples/debugging/readme.md | 10 + .../CEdev/examples/debugging/screenshot.png | Bin 0 -> 139570 bytes .../calculator/CEdev/examples/debugging/src/main.c | 47 + .../CEdev/examples/delay/autotester.json | 39 + frontends/calculator/CEdev/examples/delay/makefile | 15 + .../calculator/CEdev/examples/delay/readme.md | 9 + .../calculator/CEdev/examples/delay/src/main.c | 16 + .../CEdev/examples/fileio_detect/autotester.json | 33 + .../CEdev/examples/fileio_detect/bin/DEMO.8xp | Bin 0 -> 557 bytes .../CEdev/examples/fileio_detect/bin/DEMO.bin | Bin 0 -> 481 bytes .../CEdev/examples/fileio_detect/bin/DEMO.map | 148 ++ .../CEdev/examples/fileio_detect/makefile | 15 + .../CEdev/examples/fileio_detect/obj/main.src | 182 ++ .../CEdev/examples/fileio_detect/readme.md | 11 + .../CEdev/examples/fileio_detect/screenshot.png | Bin 0 -> 1369 bytes .../CEdev/examples/fileio_detect/src/main.c | 47 + .../examples/fileio_detectany/autotester.json | 33 + .../CEdev/examples/fileio_detectany/bin/DEMO.8xp | Bin 0 -> 568 bytes .../CEdev/examples/fileio_detectany/bin/DEMO.bin | Bin 0 -> 492 bytes .../CEdev/examples/fileio_detectany/bin/DEMO.map | 148 ++ .../CEdev/examples/fileio_detectany/makefile | 15 + .../CEdev/examples/fileio_detectany/obj/main.src | 190 ++ .../CEdev/examples/fileio_detectany/readme.md | 11 + .../CEdev/examples/fileio_detectany/screenshot.png | Bin 0 -> 1369 bytes .../CEdev/examples/fileio_detectany/src/main.c | 49 + .../examples/fileio_factorize/autotester.badjson | 37 + .../CEdev/examples/fileio_factorize/makefile | 15 + .../CEdev/examples/fileio_factorize/readme.md | 12 + .../CEdev/examples/fileio_factorize/screenshot.png | Bin 0 -> 2335 bytes .../CEdev/examples/fileio_factorize/src/main.c | 75 + .../examples/fileio_os_vars/autotester.badjson | 65 + .../CEdev/examples/fileio_os_vars/makefile | 15 + .../CEdev/examples/fileio_os_vars/readme.md | 10 + .../CEdev/examples/fileio_os_vars/screenshot.png | Bin 0 -> 3032 bytes .../CEdev/examples/fileio_os_vars/src/main.c | 101 + .../examples/fileio_read_write/autotester.json | 33 + .../CEdev/examples/fileio_read_write/bin/DEMO.8xp | Bin 0 -> 827 bytes .../CEdev/examples/fileio_read_write/bin/DEMO.bin | Bin 0 -> 751 bytes .../CEdev/examples/fileio_read_write/bin/DEMO.map | 154 ++ .../CEdev/examples/fileio_read_write/makefile | 15 + .../CEdev/examples/fileio_read_write/obj/main.src | 343 +++ .../CEdev/examples/fileio_read_write/readme.md | 10 + .../examples/fileio_read_write/screenshot.png | Bin 0 -> 54385 bytes .../CEdev/examples/fileio_read_write/src/main.c | 88 + .../CEdev/examples/fileio_rename/autotester.json | 33 + .../CEdev/examples/fileio_rename/makefile | 15 + .../CEdev/examples/fileio_rename/readme.md | 8 + .../CEdev/examples/fileio_rename/src/main.c | 77 + .../CEdev/examples/fileio_tokens/autotester.json | 33 + .../CEdev/examples/fileio_tokens/makefile | 15 + .../CEdev/examples/fileio_tokens/readme.md | 10 + .../CEdev/examples/fileio_tokens/screenshot.png | Bin 0 -> 1702 bytes .../CEdev/examples/fileio_tokens/src/main.c | 59 + .../CEdev/examples/gfx_blitting/autotester.json | 46 + .../CEdev/examples/gfx_blitting/makefile | 15 + .../CEdev/examples/gfx_blitting/readme.md | 7 + .../CEdev/examples/gfx_blitting/src/main.c | 47 + .../examples/gfx_buffered_cube/autotester.json | 40 + .../CEdev/examples/gfx_buffered_cube/makefile | 15 + .../CEdev/examples/gfx_buffered_cube/readme.md | 10 + .../examples/gfx_buffered_cube/screenshot.gif | Bin 0 -> 103190 bytes .../CEdev/examples/gfx_buffered_cube/src/main.c | 113 + .../CEdev/examples/gfx_char/autotester.json | 30 + .../calculator/CEdev/examples/gfx_char/makefile | 15 + .../calculator/CEdev/examples/gfx_char/readme.md | 10 + .../CEdev/examples/gfx_char/screenshot.png | Bin 0 -> 967 bytes .../calculator/CEdev/examples/gfx_char/src/main.c | 52 + .../CEdev/examples/gfx_clipping/autotester.json | 52 + .../CEdev/examples/gfx_clipping/makefile | 15 + .../CEdev/examples/gfx_clipping/readme.md | 10 + .../CEdev/examples/gfx_clipping/screenshot.gif | Bin 0 -> 94716 bytes .../CEdev/examples/gfx_clipping/src/main.c | 85 + .../CEdev/examples/gfx_floodfill/autotester.json | 36 + .../CEdev/examples/gfx_floodfill/makefile | 15 + .../CEdev/examples/gfx_floodfill/readme.md | 10 + .../CEdev/examples/gfx_floodfill/screenshot.gif | Bin 0 -> 8036 bytes .../CEdev/examples/gfx_floodfill/src/main.c | 50 + .../gfx_fullscreen_tiled_image/autotester.json | 31 + .../examples/gfx_fullscreen_tiled_image/makefile | 15 + .../examples/gfx_fullscreen_tiled_image/readme.md | 9 + .../gfx_fullscreen_tiled_image/screenshot.png | Bin 0 -> 143527 bytes .../gfx_fullscreen_tiled_image/src/gfx/convpng.ini | 15 + .../gfx_fullscreen_tiled_image/src/gfx/tiles_gfx.c | 4 + .../gfx_fullscreen_tiled_image/src/gfx/tiles_gfx.h | 8 + .../gfx_fullscreen_tiled_image/src/gfx/tileset.c | 18 + .../gfx_fullscreen_tiled_image/src/gfx/tileset.png | Bin 0 -> 182649 bytes .../gfx_fullscreen_tiled_image/src/gfx/var_gfx.8xv | Bin 0 -> 56118 bytes .../gfx_fullscreen_tiled_image/src/gfx/var_gfx.c | 31 + .../gfx_fullscreen_tiled_image/src/gfx/var_gfx.h | 31 + .../examples/gfx_fullscreen_tiled_image/src/main.c | 66 + .../CEdev/examples/gfx_hello_world/autotester.json | 40 + .../CEdev/examples/gfx_hello_world/makefile | 15 + .../CEdev/examples/gfx_hello_world/readme.md | 10 + .../CEdev/examples/gfx_hello_world/screenshot.png | Bin 0 -> 856 bytes .../CEdev/examples/gfx_hello_world/src/main.c | 46 + .../CEdev/examples/gfx_light_dark/autotester.json | 63 + .../CEdev/examples/gfx_light_dark/makefile | 15 + .../CEdev/examples/gfx_light_dark/readme.md | 10 + .../CEdev/examples/gfx_light_dark/screenshot.gif | Bin 0 -> 67785 bytes .../CEdev/examples/gfx_light_dark/src/main.c | 59 + .../CEdev/examples/gfx_rletsprite/autotester.json | 30 + .../CEdev/examples/gfx_rletsprite/makefile | 15 + .../CEdev/examples/gfx_rletsprite/readme.md | 10 + .../CEdev/examples/gfx_rletsprite/screenshot.png | Bin 0 -> 6999 bytes .../examples/gfx_rletsprite/src/gfx/convpng.ini | 5 + .../examples/gfx_rletsprite/src/gfx/logo_gfx.c | 203 ++ .../examples/gfx_rletsprite/src/gfx/logo_gfx.h | 17 + .../CEdev/examples/gfx_rletsprite/src/gfx/ubuntu.c | 25 + .../examples/gfx_rletsprite/src/gfx/ubuntu.png | Bin 0 -> 1427 bytes .../CEdev/examples/gfx_rletsprite/src/main.c | 109 + .../examples/gfx_shapes_shift/autotester.json | 63 + .../CEdev/examples/gfx_shapes_shift/makefile | 15 + .../CEdev/examples/gfx_shapes_shift/readme.md | 10 + .../CEdev/examples/gfx_shapes_shift/screenshot.gif | Bin 0 -> 14726 bytes .../CEdev/examples/gfx_shapes_shift/src/main.c | 112 + .../CEdev/examples/gfx_sprite/autotester.json | 31 + .../calculator/CEdev/examples/gfx_sprite/makefile | 15 + .../calculator/CEdev/examples/gfx_sprite/readme.md | 10 + .../CEdev/examples/gfx_sprite/screenshot.png | Bin 0 -> 6597 bytes .../CEdev/examples/gfx_sprite/src/gfx/convpng.ini | 4 + .../CEdev/examples/gfx_sprite/src/gfx/logo_gfx.c | 195 ++ .../CEdev/examples/gfx_sprite/src/gfx/logo_gfx.h | 17 + .../CEdev/examples/gfx_sprite/src/gfx/ubuntu.c | 40 + .../CEdev/examples/gfx_sprite/src/gfx/ubuntu.png | Bin 0 -> 1404 bytes .../CEdev/examples/gfx_sprite/src/main.c | 39 + .../examples/gfx_sprite_compress/autotester.json | 33 + .../CEdev/examples/gfx_sprite_compress/makefile | 15 + .../CEdev/examples/gfx_sprite_compress/readme.md | 10 + .../examples/gfx_sprite_compress/screenshot.png | Bin 0 -> 29221 bytes .../examples/gfx_sprite_compress/src/gfx/all_gfx.c | 262 ++ .../examples/gfx_sprite_compress/src/gfx/all_gfx.h | 13 + .../examples/gfx_sprite_compress/src/gfx/apple.c | 667 +++++ .../examples/gfx_sprite_compress/src/gfx/apple.png | Bin 0 -> 59927 bytes .../gfx_sprite_compress/src/gfx/convpng.ini | 5 + .../CEdev/examples/gfx_sprite_compress/src/main.c | 45 + .../CEdev/examples/gfx_sprite_keys/autotester.json | 31 + .../CEdev/examples/gfx_sprite_keys/makefile | 15 + .../CEdev/examples/gfx_sprite_keys/readme.md | 10 + .../CEdev/examples/gfx_sprite_keys/screenshot.gif | Bin 0 -> 57679 bytes .../examples/gfx_sprite_keys/src/gfx/convpng.ini | 4 + .../examples/gfx_sprite_keys/src/gfx/logo_gfx.c | 195 ++ .../examples/gfx_sprite_keys/src/gfx/logo_gfx.h | 17 + .../examples/gfx_sprite_keys/src/gfx/ubuntu.c | 40 + .../examples/gfx_sprite_keys/src/gfx/ubuntu.png | Bin 0 -> 1404 bytes .../CEdev/examples/gfx_sprite_keys/src/main.c | 89 + .../examples/gfx_sprite_rotate/autotester.json | 33 + .../CEdev/examples/gfx_sprite_rotate/makefile | 15 + .../CEdev/examples/gfx_sprite_rotate/readme.md | 10 + .../examples/gfx_sprite_rotate/screenshot.png | Bin 0 -> 5159 bytes .../examples/gfx_sprite_rotate/src/gfx/convpng.ini | 4 + .../examples/gfx_sprite_rotate/src/gfx/logo_gfx.c | 196 ++ .../examples/gfx_sprite_rotate/src/gfx/logo_gfx.h | 15 + .../examples/gfx_sprite_rotate/src/gfx/ubuntu.c | 40 + .../examples/gfx_sprite_rotate/src/gfx/ubuntu.png | Bin 0 -> 1404 bytes .../CEdev/examples/gfx_sprite_rotate/src/main.c | 37 + .../gfx_sprite_rotate_scale/autotester.json | 33 + .../examples/gfx_sprite_rotate_scale/makefile | 15 + .../examples/gfx_sprite_rotate_scale/readme.md | 9 + .../gfx_sprite_rotate_scale/screenshot.gif | Bin 0 -> 238242 bytes .../gfx_sprite_rotate_scale/src/gfx/convpng.ini | 4 + .../gfx_sprite_rotate_scale/src/gfx/logo_gfx.c | 196 ++ .../gfx_sprite_rotate_scale/src/gfx/logo_gfx.h | 15 + .../gfx_sprite_rotate_scale/src/gfx/ubuntu.c | 40 + .../gfx_sprite_rotate_scale/src/gfx/ubuntu.png | Bin 0 -> 1404 bytes .../examples/gfx_sprite_rotate_scale/src/main.c | 44 + .../examples/gfx_sprites_appvar/autotester.json | 31 + .../CEdev/examples/gfx_sprites_appvar/makefile | 15 + .../CEdev/examples/gfx_sprites_appvar/readme.md | 10 + .../examples/gfx_sprites_appvar/screenshot.png | Bin 0 -> 2839 bytes .../examples/gfx_sprites_appvar/src/gfx/all_gfx.c | 4 + .../examples/gfx_sprites_appvar/src/gfx/all_gfx.h | 8 + .../gfx_sprites_appvar/src/gfx/convpng.ini | 16 + .../examples/gfx_sprites_appvar/src/gfx/mint.c | 4 + .../examples/gfx_sprites_appvar/src/gfx/mint.png | Bin 0 -> 1809 bytes .../examples/gfx_sprites_appvar/src/gfx/ubuntu.c | 4 + .../examples/gfx_sprites_appvar/src/gfx/ubuntu.png | Bin 0 -> 1404 bytes .../gfx_sprites_appvar/src/gfx/var_gfx.8xv | Bin 0 -> 2640 bytes .../examples/gfx_sprites_appvar/src/gfx/var_gfx.c | 27 + .../examples/gfx_sprites_appvar/src/gfx/var_gfx.h | 18 + .../CEdev/examples/gfx_sprites_appvar/src/main.c | 42 + .../CEdev/examples/gfx_template/iconc.png | Bin 0 -> 910 bytes .../CEdev/examples/gfx_template/makefile | 15 + .../CEdev/examples/gfx_template/readme.md | 12 + .../CEdev/examples/gfx_template/src/main.c | 64 + .../CEdev/examples/gfx_tilemap/autotester.json | 43 + .../calculator/CEdev/examples/gfx_tilemap/makefile | 15 + .../CEdev/examples/gfx_tilemap/readme.md | 10 + .../CEdev/examples/gfx_tilemap/screenshot.gif | Bin 0 -> 360772 bytes .../CEdev/examples/gfx_tilemap/src/gfx/convpng.ini | 5 + .../CEdev/examples/gfx_tilemap/src/gfx/tiles_gfx.c | 82 + .../CEdev/examples/gfx_tilemap/src/gfx/tiles_gfx.h | 271 ++ .../CEdev/examples/gfx_tilemap/src/gfx/tileset.c | 2694 ++++++++++++++++++++ .../CEdev/examples/gfx_tilemap/src/gfx/tileset.png | Bin 0 -> 12899 bytes .../CEdev/examples/gfx_tilemap/src/main.c | 102 + .../CEdev/examples/gfx_tilemap/src/tilemapdata.c | 30 + .../examples/gfx_tilemap_appvar/autotester.json | 43 + .../CEdev/examples/gfx_tilemap_appvar/makefile | 15 + .../CEdev/examples/gfx_tilemap_appvar/readme.md | 10 + .../examples/gfx_tilemap_appvar/screenshot.gif | Bin 0 -> 360772 bytes .../gfx_tilemap_appvar/src/gfx/convpng.ini | 14 + .../gfx_tilemap_appvar/src/gfx/tiles_gfx.c | 4 + .../gfx_tilemap_appvar/src/gfx/tiles_gfx.h | 10 + .../examples/gfx_tilemap_appvar/src/gfx/tileset.c | 134 + .../gfx_tilemap_appvar/src/gfx/tileset.png | Bin 0 -> 12899 bytes .../gfx_tilemap_appvar/src/gfx/var_gfx.8xv | Bin 0 -> 33252 bytes .../examples/gfx_tilemap_appvar/src/gfx/var_gfx.c | 31 + .../examples/gfx_tilemap_appvar/src/gfx/var_gfx.h | 148 ++ .../CEdev/examples/gfx_tilemap_appvar/src/main.c | 106 + .../examples/gfx_tilemap_appvar/src/tilemapdata.c | 30 + .../examples/gfx_tilemap_compress/autotester.json | 43 + .../CEdev/examples/gfx_tilemap_compress/makefile | 15 + .../CEdev/examples/gfx_tilemap_compress/readme.md | 10 + .../gfx_tilemap_compress/src/gfx/convpng.ini | 6 + .../gfx_tilemap_compress/src/gfx/tiles_gfx.c | 82 + .../gfx_tilemap_compress/src/gfx/tiles_gfx.h | 142 ++ .../gfx_tilemap_compress/src/gfx/tileset.c | 726 ++++++ .../gfx_tilemap_compress/src/gfx/tileset.png | Bin 0 -> 12899 bytes .../CEdev/examples/gfx_tilemap_compress/src/main.c | 119 + .../gfx_tilemap_compress/src/tilemapdata.c | 16 + .../gfx_tilemap_compress/src/tilemapdata.h | 9 + .../calculator/CEdev/examples/hello_world/makefile | 15 + .../CEdev/examples/hello_world/readme.md | 9 + .../CEdev/examples/hello_world/screenshot.png | Bin 0 -> 1701 bytes .../CEdev/examples/hello_world/src/main.c | 48 + .../CEdev/examples/keypad_arrows/autotester.json | 61 + .../CEdev/examples/keypad_arrows/makefile | 15 + .../CEdev/examples/keypad_arrows/readme.md | 10 + .../CEdev/examples/keypad_arrows/screenshot.gif | Bin 0 -> 6859 bytes .../CEdev/examples/keypad_arrows/src/main.c | 49 + .../examples/keypad_multiple_keys/autotester.json | 62 + .../CEdev/examples/keypad_multiple_keys/makefile | 15 + .../CEdev/examples/keypad_multiple_keys/readme.md | 10 + .../examples/keypad_multiple_keys/screenshot.gif | Bin 0 -> 5495 bytes .../CEdev/examples/keypad_multiple_keys/src/main.c | 60 + .../calculator/CEdev/examples/lcd_fade/makefile | 15 + .../calculator/CEdev/examples/lcd_fade/readme.md | 8 + .../calculator/CEdev/examples/lcd_fade/src/main.c | 29 + .../calculator/CEdev/examples/lcd_fill/makefile | 15 + .../calculator/CEdev/examples/lcd_fill/readme.md | 10 + .../CEdev/examples/lcd_fill/screenshot.gif | Bin 0 -> 6473 bytes .../calculator/CEdev/examples/lcd_fill/src/main.c | 30 + frontends/calculator/CEdev/examples/makefile | 12 + .../CEdev/examples/os_input/autotester.json | 38 + .../calculator/CEdev/examples/os_input/makefile | 15 + .../calculator/CEdev/examples/os_input/readme.md | 9 + .../CEdev/examples/os_input/screenshot.png | Bin 0 -> 7676 bytes .../calculator/CEdev/examples/os_input/src/main.c | 36 + .../CEdev/examples/random/autotester.json | 30 + .../calculator/CEdev/examples/random/bin/DEMO.8xp | Bin 0 -> 381 bytes .../calculator/CEdev/examples/random/bin/DEMO.bin | Bin 0 -> 305 bytes .../calculator/CEdev/examples/random/bin/DEMO.map | 143 ++ .../calculator/CEdev/examples/random/makefile | 15 + .../calculator/CEdev/examples/random/obj/main.src | 69 + .../calculator/CEdev/examples/random/readme.md | 9 + .../CEdev/examples/random/screenshot.png | Bin 0 -> 213249 bytes .../calculator/CEdev/examples/random/src/main.c | 19 + .../CEdev/examples/random/test/expected.bin | Bin 0 -> 153600 bytes .../CEdev/examples/real_time_clock/makefile | 15 + .../CEdev/examples/real_time_clock/readme.md | 10 + .../CEdev/examples/real_time_clock/screenshot.gif | Bin 0 -> 9251 bytes .../CEdev/examples/real_time_clock/src/main.c | 39 + .../CEdev/examples/second_counter/makefile | 15 + .../CEdev/examples/second_counter/readme.md | 10 + .../CEdev/examples/second_counter/screenshot.gif | Bin 0 -> 5999 bytes .../CEdev/examples/second_counter/src/main.c | 43 + .../CEdev/examples/second_counter2/makefile | 15 + .../CEdev/examples/second_counter2/readme.md | 10 + .../CEdev/examples/second_counter2/screenshot.gif | Bin 0 -> 4146 bytes .../CEdev/examples/second_counter2/src/main.c | 57 + .../calculator/CEdev/examples/stopwatch/makefile | 15 + .../calculator/CEdev/examples/stopwatch/readme.md | 10 + .../CEdev/examples/stopwatch/screenshot.png | Bin 0 -> 40879 bytes .../calculator/CEdev/examples/stopwatch/src/main.c | 60 + .../calculator/CEdev/examples/template/iconc.png | Bin 0 -> 910 bytes .../calculator/CEdev/examples/template/makefile | 15 + .../calculator/CEdev/examples/template/readme.md | 14 + .../calculator/CEdev/examples/template/src/main.c | 30 + frontends/calculator/CEdev/include/.linker_script | 305 +++ frontends/calculator/CEdev/include/.makefile | 213 ++ frontends/calculator/CEdev/include/assert.h | 19 + frontends/calculator/CEdev/include/compression.h | 27 + frontends/calculator/CEdev/include/ctype.h | 30 + frontends/calculator/CEdev/include/debug.h | 124 + frontends/calculator/CEdev/include/decompress.h | 23 + frontends/calculator/CEdev/include/errno.h | 15 + .../calculator/CEdev/include/fasmg-ez80/ez80.inc | 862 +++++++ .../calculator/CEdev/include/fasmg-ez80/ld.fasmg | 759 ++++++ .../CEdev/include/fasmg-ez80/ti84pceg.inc | 61 + .../CEdev/include/fasmg-ez80/tiformat.inc | 105 + frontends/calculator/CEdev/include/fileioc.h | 509 ++++ frontends/calculator/CEdev/include/float.h | 75 + frontends/calculator/CEdev/include/format.h | 109 + frontends/calculator/CEdev/include/graphx.h | 1514 +++++++++++ frontends/calculator/CEdev/include/intce.h | 93 + frontends/calculator/CEdev/include/iso646.h | 18 + frontends/calculator/CEdev/include/keypadc.h | 255 ++ .../calculator/CEdev/include/lib/ce/fileioc.h | 2 + frontends/calculator/CEdev/include/lib/ce/graphx.h | 2 + .../calculator/CEdev/include/lib/ce/keypadc.h | 2 + frontends/calculator/CEdev/include/limits.h | 35 + frontends/calculator/CEdev/include/math.h | 67 + frontends/calculator/CEdev/include/setjmp.h | 21 + frontends/calculator/CEdev/include/stdarg.h | 15 + frontends/calculator/CEdev/include/stdbool.h | 23 + frontends/calculator/CEdev/include/stddef.h | 28 + frontends/calculator/CEdev/include/stdint.h | 19 + frontends/calculator/CEdev/include/stdio.h | 66 + frontends/calculator/CEdev/include/stdlib.h | 102 + frontends/calculator/CEdev/include/string.h | 49 + frontends/calculator/CEdev/include/tice.h | 2082 +++++++++++++++ frontends/calculator/CEdev/include/usb.h | 52 + frontends/calculator/CEdev/lib/ccleanup.src | 14 + frontends/calculator/CEdev/lib/cstartup.src | 75 + frontends/calculator/CEdev/lib/fileio/fclose.src | 53 + frontends/calculator/CEdev/lib/fileio/feof.src | 88 + frontends/calculator/CEdev/lib/fileio/fgetc.src | 39 + frontends/calculator/CEdev/lib/fileio/fgets.src | 121 + frontends/calculator/CEdev/lib/fileio/files.src | 13 + frontends/calculator/CEdev/lib/fileio/fopen.src | 71 + frontends/calculator/CEdev/lib/fileio/fputc.src | 43 + frontends/calculator/CEdev/lib/fileio/fputs.src | 101 + frontends/calculator/CEdev/lib/fileio/fread.src | 51 + frontends/calculator/CEdev/lib/fileio/fseek.src | 47 + frontends/calculator/CEdev/lib/fileio/ftell.src | 43 + frontends/calculator/CEdev/lib/fileio/fwrite.src | 51 + frontends/calculator/CEdev/lib/fileio/remove.src | 50 + frontends/calculator/CEdev/lib/libheader.src | 55 + frontends/calculator/CEdev/lib/libload.lib | 1 + frontends/calculator/CEdev/lib/libload/fileioc.lib | 35 + frontends/calculator/CEdev/lib/libload/graphx.lib | 95 + frontends/calculator/CEdev/lib/libload/keypadc.lib | 5 + frontends/calculator/CEdev/lib/linked/acos.src | 6 + frontends/calculator/CEdev/lib/linked/asin.src | 6 + frontends/calculator/CEdev/lib/linked/atan.src | 6 + frontends/calculator/CEdev/lib/linked/atan2.src | 6 + frontends/calculator/CEdev/lib/linked/atof.src | 6 + frontends/calculator/CEdev/lib/linked/ceil.src | 6 + frontends/calculator/CEdev/lib/linked/cos.src | 6 + frontends/calculator/CEdev/lib/linked/cosh.src | 6 + frontends/calculator/CEdev/lib/linked/exp.src | 6 + frontends/calculator/CEdev/lib/linked/fabs.src | 6 + frontends/calculator/CEdev/lib/linked/floor.src | 6 + frontends/calculator/CEdev/lib/linked/fmod.src | 6 + frontends/calculator/CEdev/lib/linked/frexp.src | 6 + frontends/calculator/CEdev/lib/linked/ldexp.src | 6 + frontends/calculator/CEdev/lib/linked/log.src | 6 + frontends/calculator/CEdev/lib/linked/log10.src | 6 + frontends/calculator/CEdev/lib/linked/modf.src | 6 + frontends/calculator/CEdev/lib/linked/pow.src | 6 + frontends/calculator/CEdev/lib/linked/sin.src | 6 + frontends/calculator/CEdev/lib/linked/sinh.src | 6 + frontends/calculator/CEdev/lib/linked/sqrt.src | 6 + frontends/calculator/CEdev/lib/linked/strtod.src | 6 + frontends/calculator/CEdev/lib/linked/tan.src | 6 + frontends/calculator/CEdev/lib/linked/tanh.src | 6 + frontends/calculator/CEdev/lib/linked/ufltinfo.src | 7 + frontends/calculator/CEdev/lib/linked/ufltrnd.src | 7 + frontends/calculator/CEdev/lib/shared/abort.src | 13 + frontends/calculator/CEdev/lib/shared/abs.src | 17 + frontends/calculator/CEdev/lib/shared/atoi.src | 22 + frontends/calculator/CEdev/lib/shared/atol.src | 8 + .../calculator/CEdev/lib/shared/atomic_load_32.src | 61 + .../CEdev/lib/shared/atomic_load_decreasing_32.src | 89 + .../CEdev/lib/shared/atomic_load_increasing_32.src | 88 + frontends/calculator/CEdev/lib/shared/atos.src | 8 + frontends/calculator/CEdev/lib/shared/bdivs.src | 44 + frontends/calculator/CEdev/lib/shared/bdivu.src | 41 + frontends/calculator/CEdev/lib/shared/bldix.src | 25 + frontends/calculator/CEdev/lib/shared/bldiy.src | 17 + frontends/calculator/CEdev/lib/shared/bmuls.src | 25 + frontends/calculator/CEdev/lib/shared/bmulu.src | 24 + frontends/calculator/CEdev/lib/shared/brems.src | 40 + frontends/calculator/CEdev/lib/shared/bremu.src | 39 + frontends/calculator/CEdev/lib/shared/bsearch.src | 195 ++ frontends/calculator/CEdev/lib/shared/bshl.src | 18 + frontends/calculator/CEdev/lib/shared/bshrs.src | 29 + frontends/calculator/CEdev/lib/shared/bshru.src | 18 + frontends/calculator/CEdev/lib/shared/bstix.src | 19 + frontends/calculator/CEdev/lib/shared/bstiy.src | 18 + frontends/calculator/CEdev/lib/shared/calloc.src | 27 + frontends/calculator/CEdev/lib/shared/case.src | 27 + frontends/calculator/CEdev/lib/shared/case16.src | 17 + frontends/calculator/CEdev/lib/shared/case16d.src | 17 + frontends/calculator/CEdev/lib/shared/case24.src | 17 + frontends/calculator/CEdev/lib/shared/case24d.src | 17 + frontends/calculator/CEdev/lib/shared/case8.src | 17 + frontends/calculator/CEdev/lib/shared/case8d.src | 17 + frontends/calculator/CEdev/lib/shared/debugger.src | 12 + frontends/calculator/CEdev/lib/shared/delay.src | 92 + frontends/calculator/CEdev/lib/shared/div.src | 54 + .../calculator/CEdev/lib/shared/dzx7_standard.src | 106 + .../calculator/CEdev/lib/shared/dzx7_turbo.src | 117 + frontends/calculator/CEdev/lib/shared/finite.src | 19 + frontends/calculator/CEdev/lib/shared/fpadd.src | 25 + frontends/calculator/CEdev/lib/shared/fpcmp.src | 27 + frontends/calculator/CEdev/lib/shared/fpdata.src | 17 + frontends/calculator/CEdev/lib/shared/fpdiv.src | 28 + frontends/calculator/CEdev/lib/shared/fpftol.src | 20 + frontends/calculator/CEdev/lib/shared/fpltof.src | 20 + frontends/calculator/CEdev/lib/shared/fpmul.src | 26 + frontends/calculator/CEdev/lib/shared/fpneg.src | 32 + frontends/calculator/CEdev/lib/shared/fppack.src | 28 + frontends/calculator/CEdev/lib/shared/fpsub.src | 27 + frontends/calculator/CEdev/lib/shared/fpultof.src | 22 + frontends/calculator/CEdev/lib/shared/fpupop1.src | 48 + frontends/calculator/CEdev/lib/shared/fpupop2.src | 47 + frontends/calculator/CEdev/lib/shared/frameset.src | 12 + .../calculator/CEdev/lib/shared/frameset0.src | 9 + frontends/calculator/CEdev/lib/shared/frbmuls.src | 53 + frontends/calculator/CEdev/lib/shared/frbtof.src | 17 + frontends/calculator/CEdev/lib/shared/free.src | 180 ++ frontends/calculator/CEdev/lib/shared/frftob.src | 17 + frontends/calculator/CEdev/lib/shared/frftoi.src | 17 + frontends/calculator/CEdev/lib/shared/frftos.src | 17 + frontends/calculator/CEdev/lib/shared/frftoub.src | 17 + frontends/calculator/CEdev/lib/shared/frftoui.src | 17 + frontends/calculator/CEdev/lib/shared/frftous.src | 17 + frontends/calculator/CEdev/lib/shared/frimuls.src | 81 + frontends/calculator/CEdev/lib/shared/frimulu.src | 112 + frontends/calculator/CEdev/lib/shared/fritof.src | 17 + frontends/calculator/CEdev/lib/shared/frsmuls.src | 61 + frontends/calculator/CEdev/lib/shared/frsmulu.src | 51 + frontends/calculator/CEdev/lib/shared/frstof.src | 17 + frontends/calculator/CEdev/lib/shared/frubtof.src | 17 + frontends/calculator/CEdev/lib/shared/fruitof.src | 17 + frontends/calculator/CEdev/lib/shared/frustof.src | 17 + frontends/calculator/CEdev/lib/shared/gamma.src | 439 ++++ .../calculator/CEdev/lib/shared/getstringinput.src | 136 + frontends/calculator/CEdev/lib/shared/iand.src | 19 + frontends/calculator/CEdev/lib/shared/icmpzero.src | 20 + frontends/calculator/CEdev/lib/shared/idivs.src | 20 + frontends/calculator/CEdev/lib/shared/idivu.src | 21 + frontends/calculator/CEdev/lib/shared/ildix.src | 17 + frontends/calculator/CEdev/lib/shared/ildiy.src | 17 + frontends/calculator/CEdev/lib/shared/imuls.src | 19 + frontends/calculator/CEdev/lib/shared/imulu.src | 24 + frontends/calculator/CEdev/lib/shared/indcall.src | 14 + frontends/calculator/CEdev/lib/shared/ineg.src | 16 + frontends/calculator/CEdev/lib/shared/inot.src | 15 + .../calculator/CEdev/lib/shared/interrupts.src | 142 ++ frontends/calculator/CEdev/lib/shared/ior.src | 19 + frontends/calculator/CEdev/lib/shared/irems.src | 19 + frontends/calculator/CEdev/lib/shared/iremu.src | 21 + frontends/calculator/CEdev/lib/shared/isalnum.src | 28 + frontends/calculator/CEdev/lib/shared/isalpha.src | 27 + frontends/calculator/CEdev/lib/shared/isascii.src | 19 + frontends/calculator/CEdev/lib/shared/iscntrl.src | 27 + frontends/calculator/CEdev/lib/shared/isdigit.src | 27 + frontends/calculator/CEdev/lib/shared/isgraph.src | 28 + frontends/calculator/CEdev/lib/shared/ishl.src | 20 + frontends/calculator/CEdev/lib/shared/ishrs.src | 20 + frontends/calculator/CEdev/lib/shared/ishru.src | 20 + frontends/calculator/CEdev/lib/shared/isinf.src | 20 + frontends/calculator/CEdev/lib/shared/islower.src | 29 + frontends/calculator/CEdev/lib/shared/isnan.src | 20 + frontends/calculator/CEdev/lib/shared/isprint.src | 28 + frontends/calculator/CEdev/lib/shared/ispunct.src | 28 + frontends/calculator/CEdev/lib/shared/isspace.src | 28 + frontends/calculator/CEdev/lib/shared/istix.src | 18 + frontends/calculator/CEdev/lib/shared/istiy.src | 18 + frontends/calculator/CEdev/lib/shared/isupper.src | 28 + frontends/calculator/CEdev/lib/shared/isxdigit.src | 28 + frontends/calculator/CEdev/lib/shared/itol.src | 16 + frontends/calculator/CEdev/lib/shared/ixor.src | 19 + frontends/calculator/CEdev/lib/shared/labs.src | 24 + frontends/calculator/CEdev/lib/shared/ladd.src | 20 + frontends/calculator/CEdev/lib/shared/land.src | 19 + frontends/calculator/CEdev/lib/shared/lcmps.src | 19 + frontends/calculator/CEdev/lib/shared/lcmpu.src | 19 + frontends/calculator/CEdev/lib/shared/lcmpzero.src | 16 + frontends/calculator/CEdev/lib/shared/ldiv.src | 79 + frontends/calculator/CEdev/lib/shared/ldivs.src | 19 + frontends/calculator/CEdev/lib/shared/ldivu.src | 20 + frontends/calculator/CEdev/lib/shared/lldix.src | 17 + frontends/calculator/CEdev/lib/shared/lldiy.src | 17 + frontends/calculator/CEdev/lib/shared/lmuls.src | 19 + frontends/calculator/CEdev/lib/shared/lmulu.src | 22 + frontends/calculator/CEdev/lib/shared/lneg.src | 16 + frontends/calculator/CEdev/lib/shared/lnot.src | 16 + frontends/calculator/CEdev/lib/shared/log2.src | 27 + frontends/calculator/CEdev/lib/shared/longjmp.src | 4 + frontends/calculator/CEdev/lib/shared/lor.src | 19 + frontends/calculator/CEdev/lib/shared/lrems.src | 19 + frontends/calculator/CEdev/lib/shared/lremu.src | 19 + frontends/calculator/CEdev/lib/shared/lshl.src | 19 + frontends/calculator/CEdev/lib/shared/lshrs.src | 19 + frontends/calculator/CEdev/lib/shared/lshru.src | 19 + frontends/calculator/CEdev/lib/shared/lstix.src | 17 + frontends/calculator/CEdev/lib/shared/lstiy.src | 17 + frontends/calculator/CEdev/lib/shared/lsub.src | 19 + frontends/calculator/CEdev/lib/shared/lxor.src | 19 + frontends/calculator/CEdev/lib/shared/malloc.src | 225 ++ frontends/calculator/CEdev/lib/shared/maptab.src | 158 ++ frontends/calculator/CEdev/lib/shared/memchr.src | 6 + frontends/calculator/CEdev/lib/shared/memcmp.src | 6 + frontends/calculator/CEdev/lib/shared/memcpy.src | 6 + frontends/calculator/CEdev/lib/shared/memmove.src | 6 + frontends/calculator/CEdev/lib/shared/memset.src | 26 + frontends/calculator/CEdev/lib/shared/os.src | 14 + .../calculator/CEdev/lib/shared/os_textbuffer.src | 22 + .../calculator/CEdev/lib/shared/print_globals.src | 47 + .../calculator/CEdev/lib/shared/print_putch.src | 51 + .../CEdev/lib/shared/print_putstring.src | 246 ++ .../calculator/CEdev/lib/shared/print_sputch.src | 46 + frontends/calculator/CEdev/lib/shared/qsort.src | 378 +++ frontends/calculator/CEdev/lib/shared/rand.src | 13 + frontends/calculator/CEdev/lib/shared/random.src | 110 + frontends/calculator/CEdev/lib/shared/realloc.src | 125 + .../CEdev/lib/shared/removeallbreakpoints.src | 12 + .../CEdev/lib/shared/removeallwatchpoints.src | 12 + .../CEdev/lib/shared/removebreakpoint.src | 16 + .../CEdev/lib/shared/removewatchpoint.src | 16 + frontends/calculator/CEdev/lib/shared/round.src | 44 + frontends/calculator/CEdev/lib/shared/sand.src | 19 + frontends/calculator/CEdev/lib/shared/sbrk.src | 49 + frontends/calculator/CEdev/lib/shared/scmpzero.src | 16 + frontends/calculator/CEdev/lib/shared/sdivs.src | 20 + frontends/calculator/CEdev/lib/shared/sdivu.src | 21 + frontends/calculator/CEdev/lib/shared/seqcase.src | 25 + frontends/calculator/CEdev/lib/shared/seqcased.src | 26 + .../calculator/CEdev/lib/shared/setbreakpoint.src | 16 + frontends/calculator/CEdev/lib/shared/setflag.src | 22 + frontends/calculator/CEdev/lib/shared/setjmp.src | 6 + .../CEdev/lib/shared/setreadwatchpoint.src | 18 + .../CEdev/lib/shared/setreadwritewatchpoint.src | 18 + .../calculator/CEdev/lib/shared/setwatchpoint.src | 18 + .../CEdev/lib/shared/setwritewatchpoint.src | 18 + frontends/calculator/CEdev/lib/shared/sldix.src | 17 + frontends/calculator/CEdev/lib/shared/sldiy.src | 18 + frontends/calculator/CEdev/lib/shared/smuls.src | 21 + frontends/calculator/CEdev/lib/shared/smulu.src | 21 + frontends/calculator/CEdev/lib/shared/sneg.src | 16 + frontends/calculator/CEdev/lib/shared/snot.src | 16 + frontends/calculator/CEdev/lib/shared/sor.src | 20 + frontends/calculator/CEdev/lib/shared/sprintf.src | 7 + frontends/calculator/CEdev/lib/shared/sqrtf.src | 37 + frontends/calculator/CEdev/lib/shared/srand.src | 12 + frontends/calculator/CEdev/lib/shared/srandom.src | 29 + frontends/calculator/CEdev/lib/shared/srems.src | 21 + frontends/calculator/CEdev/lib/shared/sremu.src | 21 + frontends/calculator/CEdev/lib/shared/sshl.src | 22 + frontends/calculator/CEdev/lib/shared/sshrs.src | 20 + frontends/calculator/CEdev/lib/shared/sshru.src | 20 + frontends/calculator/CEdev/lib/shared/sstix.src | 19 + frontends/calculator/CEdev/lib/shared/sstiy.src | 19 + frontends/calculator/CEdev/lib/shared/stoi.src | 16 + frontends/calculator/CEdev/lib/shared/stoiu.src | 16 + .../calculator/CEdev/lib/shared/strcasecmp.src | 6 + frontends/calculator/CEdev/lib/shared/strcat.src | 6 + frontends/calculator/CEdev/lib/shared/strchr.src | 6 + frontends/calculator/CEdev/lib/shared/strcmp.src | 6 + frontends/calculator/CEdev/lib/shared/strcpy.src | 6 + frontends/calculator/CEdev/lib/shared/strcspn.src | 6 + frontends/calculator/CEdev/lib/shared/strdup.src | 35 + frontends/calculator/CEdev/lib/shared/strlen.src | 6 + .../calculator/CEdev/lib/shared/strncasecmp.src | 6 + frontends/calculator/CEdev/lib/shared/strncat.src | 6 + frontends/calculator/CEdev/lib/shared/strncmp.src | 6 + frontends/calculator/CEdev/lib/shared/strncpy.src | 6 + frontends/calculator/CEdev/lib/shared/strndup.src | 46 + frontends/calculator/CEdev/lib/shared/strnlen.src | 27 + frontends/calculator/CEdev/lib/shared/strpbrk.src | 6 + frontends/calculator/CEdev/lib/shared/strrchr.src | 6 + frontends/calculator/CEdev/lib/shared/strspn.src | 5 + frontends/calculator/CEdev/lib/shared/strstr.src | 6 + frontends/calculator/CEdev/lib/shared/strtok.src | 5 + frontends/calculator/CEdev/lib/shared/strtol.src | 370 +++ frontends/calculator/CEdev/lib/shared/strtoul.src | 403 +++ frontends/calculator/CEdev/lib/shared/sxor.src | 18 + frontends/calculator/CEdev/lib/shared/tice.src | 241 ++ frontends/calculator/CEdev/lib/shared/tolower.src | 4 + frontends/calculator/CEdev/lib/shared/toupper.src | 4 + frontends/calculator/CEdev/lib/shared/udtoe.src | 411 +++ frontends/calculator/CEdev/lib/shared/udtof.src | 982 +++++++ frontends/calculator/CEdev/lib/shared/udtog.src | 173 ++ frontends/calculator/CEdev/lib/shared/uitoa.src | 65 + frontends/calculator/CEdev/lib/shared/uldiv.src | 128 + frontends/calculator/CEdev/lib/shared/ultoa.src | 472 ++++ frontends/calculator/CEdev/lib/shared/uprint.src | 516 ++++ frontends/calculator/CEdev/lib/shared/upscan.src | 802 ++++++ frontends/calculator/CEdev/lib/shared/ureverse.src | 112 + frontends/calculator/CEdev/lib/shared/usb.src | 21 + frontends/calculator/CEdev/lib/shared/uscan.src | 1822 +++++++++++++ frontends/calculator/CEdev/lib/shared/usscan.src | 630 +++++ frontends/calculator/CEdev/lib/shared/ustoa.src | 71 + frontends/calculator/CEdev/lib/shared/uuitoa.src | 64 + frontends/calculator/CEdev/lib/shared/uultoa.src | 326 +++ frontends/calculator/CEdev/lib/shared/uustoa.src | 64 + frontends/calculator/CEdev/lib/shared/vsprintf.src | 64 + .../calculator/CEdev/lib/shared/zx7_Decompress.src | 117 + frontends/calculator/CEdev/lib/static/acos.src | 54 + frontends/calculator/CEdev/lib/static/asin.src | 178 ++ frontends/calculator/CEdev/lib/static/atan.src | 341 +++ frontends/calculator/CEdev/lib/static/atan2.src | 179 ++ frontends/calculator/CEdev/lib/static/atof.src | 20 + frontends/calculator/CEdev/lib/static/ceil.src | 31 + frontends/calculator/CEdev/lib/static/cos.src | 33 + frontends/calculator/CEdev/lib/static/exp.src | 234 ++ frontends/calculator/CEdev/lib/static/fabs.src | 14 + frontends/calculator/CEdev/lib/static/floor.src | 114 + frontends/calculator/CEdev/lib/static/fmod.src | 135 + frontends/calculator/CEdev/lib/static/frexp.src | 141 + frontends/calculator/CEdev/lib/static/ldexp.src | 194 ++ frontends/calculator/CEdev/lib/static/log.src | 233 ++ frontends/calculator/CEdev/lib/static/log10.src | 48 + frontends/calculator/CEdev/lib/static/modf.src | 166 ++ frontends/calculator/CEdev/lib/static/pow.src | 187 ++ frontends/calculator/CEdev/lib/static/sin.src | 340 +++ frontends/calculator/CEdev/lib/static/sinh.src | 377 +++ frontends/calculator/CEdev/lib/static/sqrt.src | 83 + frontends/calculator/CEdev/lib/static/strtod.src | 534 ++++ frontends/calculator/CEdev/lib/static/tan.src | 330 +++ frontends/calculator/CEdev/lib/static/tanh.src | 129 + frontends/calculator/CEdev/lib/static/ufltinfo.src | 511 ++++ frontends/calculator/CEdev/lib/static/ufltrnd.src | 210 ++ 636 files changed, 42487 insertions(+) create mode 100644 frontends/calculator/CEdev/bin/C1ERRORS.DAT create mode 100644 frontends/calculator/CEdev/bin/License create mode 100755 frontends/calculator/CEdev/bin/PLCError.dll create mode 100755 frontends/calculator/CEdev/bin/convhex create mode 100755 frontends/calculator/CEdev/bin/convpng create mode 100755 frontends/calculator/CEdev/bin/convtile create mode 100644 frontends/calculator/CEdev/bin/eZ80.ini create mode 100755 frontends/calculator/CEdev/bin/ez80cc.con create mode 100755 frontends/calculator/CEdev/bin/ez80cc.exe create mode 100755 frontends/calculator/CEdev/bin/fasmg create mode 100755 frontends/calculator/CEdev/bin/make.exe create mode 100755 frontends/calculator/CEdev/bin/p1.exe create mode 100755 frontends/calculator/CEdev/bin/p2.exe create mode 100755 frontends/calculator/CEdev/bin/p3.exe create mode 100644 frontends/calculator/CEdev/bin/zds2.version create mode 100644 frontends/calculator/CEdev/examples/debugging/bin/DEMO.8xp create mode 100644 frontends/calculator/CEdev/examples/debugging/bin/DEMO.bin create mode 100644 frontends/calculator/CEdev/examples/debugging/bin/DEMO.dbg create mode 100644 frontends/calculator/CEdev/examples/debugging/bin/DEMO.map create mode 100644 frontends/calculator/CEdev/examples/debugging/makefile create mode 100644 frontends/calculator/CEdev/examples/debugging/obj/main.src create mode 100644 frontends/calculator/CEdev/examples/debugging/readme.md create mode 100644 frontends/calculator/CEdev/examples/debugging/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/debugging/src/main.c create mode 100644 frontends/calculator/CEdev/examples/delay/autotester.json create mode 100644 frontends/calculator/CEdev/examples/delay/makefile create mode 100644 frontends/calculator/CEdev/examples/delay/readme.md create mode 100644 frontends/calculator/CEdev/examples/delay/src/main.c create mode 100644 frontends/calculator/CEdev/examples/fileio_detect/autotester.json create mode 100644 frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.8xp create mode 100644 frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.bin create mode 100644 frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.map create mode 100644 frontends/calculator/CEdev/examples/fileio_detect/makefile create mode 100644 frontends/calculator/CEdev/examples/fileio_detect/obj/main.src create mode 100644 frontends/calculator/CEdev/examples/fileio_detect/readme.md create mode 100644 frontends/calculator/CEdev/examples/fileio_detect/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/fileio_detect/src/main.c create mode 100644 frontends/calculator/CEdev/examples/fileio_detectany/autotester.json create mode 100644 frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.8xp create mode 100644 frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.bin create mode 100644 frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.map create mode 100644 frontends/calculator/CEdev/examples/fileio_detectany/makefile create mode 100644 frontends/calculator/CEdev/examples/fileio_detectany/obj/main.src create mode 100644 frontends/calculator/CEdev/examples/fileio_detectany/readme.md create mode 100644 frontends/calculator/CEdev/examples/fileio_detectany/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/fileio_detectany/src/main.c create mode 100644 frontends/calculator/CEdev/examples/fileio_factorize/autotester.badjson create mode 100644 frontends/calculator/CEdev/examples/fileio_factorize/makefile create mode 100644 frontends/calculator/CEdev/examples/fileio_factorize/readme.md create mode 100644 frontends/calculator/CEdev/examples/fileio_factorize/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/fileio_factorize/src/main.c create mode 100644 frontends/calculator/CEdev/examples/fileio_os_vars/autotester.badjson create mode 100644 frontends/calculator/CEdev/examples/fileio_os_vars/makefile create mode 100644 frontends/calculator/CEdev/examples/fileio_os_vars/readme.md create mode 100644 frontends/calculator/CEdev/examples/fileio_os_vars/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/fileio_os_vars/src/main.c create mode 100644 frontends/calculator/CEdev/examples/fileio_read_write/autotester.json create mode 100644 frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.8xp create mode 100644 frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.bin create mode 100644 frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.map create mode 100644 frontends/calculator/CEdev/examples/fileio_read_write/makefile create mode 100644 frontends/calculator/CEdev/examples/fileio_read_write/obj/main.src create mode 100644 frontends/calculator/CEdev/examples/fileio_read_write/readme.md create mode 100644 frontends/calculator/CEdev/examples/fileio_read_write/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/fileio_read_write/src/main.c create mode 100644 frontends/calculator/CEdev/examples/fileio_rename/autotester.json create mode 100644 frontends/calculator/CEdev/examples/fileio_rename/makefile create mode 100644 frontends/calculator/CEdev/examples/fileio_rename/readme.md create mode 100644 frontends/calculator/CEdev/examples/fileio_rename/src/main.c create mode 100644 frontends/calculator/CEdev/examples/fileio_tokens/autotester.json create mode 100644 frontends/calculator/CEdev/examples/fileio_tokens/makefile create mode 100644 frontends/calculator/CEdev/examples/fileio_tokens/readme.md create mode 100644 frontends/calculator/CEdev/examples/fileio_tokens/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/fileio_tokens/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_blitting/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_blitting/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_blitting/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_blitting/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_buffered_cube/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_buffered_cube/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_buffered_cube/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_buffered_cube/screenshot.gif create mode 100644 frontends/calculator/CEdev/examples/gfx_buffered_cube/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_char/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_char/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_char/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_char/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/gfx_char/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_clipping/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_clipping/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_clipping/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_clipping/screenshot.gif create mode 100644 frontends/calculator/CEdev/examples/gfx_clipping/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_floodfill/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_floodfill/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_floodfill/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_floodfill/screenshot.gif create mode 100644 frontends/calculator/CEdev/examples/gfx_floodfill/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/convpng.ini create mode 100644 frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tiles_gfx.c create mode 100644 frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tiles_gfx.h create mode 100644 frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tileset.c create mode 100644 frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tileset.png create mode 100644 frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.8xv create mode 100644 frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.c create mode 100644 frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.h create mode 100644 frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_hello_world/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_hello_world/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_hello_world/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_hello_world/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/gfx_hello_world/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_light_dark/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_light_dark/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_light_dark/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_light_dark/screenshot.gif create mode 100644 frontends/calculator/CEdev/examples/gfx_light_dark/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_rletsprite/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_rletsprite/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_rletsprite/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_rletsprite/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/convpng.ini create mode 100644 frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/logo_gfx.c create mode 100644 frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/logo_gfx.h create mode 100644 frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/ubuntu.c create mode 100644 frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/ubuntu.png create mode 100644 frontends/calculator/CEdev/examples/gfx_rletsprite/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_shapes_shift/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_shapes_shift/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_shapes_shift/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_shapes_shift/screenshot.gif create mode 100644 frontends/calculator/CEdev/examples/gfx_shapes_shift/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/convpng.ini create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/logo_gfx.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/logo_gfx.h create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/ubuntu.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/ubuntu.png create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_compress/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_compress/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_compress/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_compress/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/all_gfx.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/all_gfx.h create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/apple.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/apple.png create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/convpng.ini create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_compress/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_keys/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_keys/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_keys/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_keys/screenshot.gif create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/convpng.ini create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/logo_gfx.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/logo_gfx.h create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/ubuntu.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/ubuntu.png create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_keys/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/convpng.ini create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/logo_gfx.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/logo_gfx.h create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/ubuntu.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/ubuntu.png create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/screenshot.gif create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/convpng.ini create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/logo_gfx.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/logo_gfx.h create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/ubuntu.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/ubuntu.png create mode 100644 frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprites_appvar/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_sprites_appvar/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_sprites_appvar/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_sprites_appvar/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/all_gfx.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/all_gfx.h create mode 100644 frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/convpng.ini create mode 100644 frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/mint.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/mint.png create mode 100644 frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/ubuntu.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/ubuntu.png create mode 100644 frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.8xv create mode 100644 frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.c create mode 100644 frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.h create mode 100644 frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_template/iconc.png create mode 100644 frontends/calculator/CEdev/examples/gfx_template/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_template/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_template/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap/screenshot.gif create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/convpng.ini create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tiles_gfx.c create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tiles_gfx.h create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tileset.c create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tileset.png create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap/src/tilemapdata.c create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_appvar/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_appvar/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_appvar/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_appvar/screenshot.gif create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/convpng.ini create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tiles_gfx.c create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tiles_gfx.h create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tileset.c create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tileset.png create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.8xv create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.c create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.h create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/tilemapdata.c create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_compress/autotester.json create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_compress/makefile create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_compress/readme.md create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/convpng.ini create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tiles_gfx.c create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tiles_gfx.h create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tileset.c create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tileset.png create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/main.c create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/tilemapdata.c create mode 100644 frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/tilemapdata.h create mode 100644 frontends/calculator/CEdev/examples/hello_world/makefile create mode 100644 frontends/calculator/CEdev/examples/hello_world/readme.md create mode 100644 frontends/calculator/CEdev/examples/hello_world/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/hello_world/src/main.c create mode 100644 frontends/calculator/CEdev/examples/keypad_arrows/autotester.json create mode 100644 frontends/calculator/CEdev/examples/keypad_arrows/makefile create mode 100644 frontends/calculator/CEdev/examples/keypad_arrows/readme.md create mode 100644 frontends/calculator/CEdev/examples/keypad_arrows/screenshot.gif create mode 100644 frontends/calculator/CEdev/examples/keypad_arrows/src/main.c create mode 100644 frontends/calculator/CEdev/examples/keypad_multiple_keys/autotester.json create mode 100644 frontends/calculator/CEdev/examples/keypad_multiple_keys/makefile create mode 100644 frontends/calculator/CEdev/examples/keypad_multiple_keys/readme.md create mode 100644 frontends/calculator/CEdev/examples/keypad_multiple_keys/screenshot.gif create mode 100644 frontends/calculator/CEdev/examples/keypad_multiple_keys/src/main.c create mode 100644 frontends/calculator/CEdev/examples/lcd_fade/makefile create mode 100644 frontends/calculator/CEdev/examples/lcd_fade/readme.md create mode 100644 frontends/calculator/CEdev/examples/lcd_fade/src/main.c create mode 100644 frontends/calculator/CEdev/examples/lcd_fill/makefile create mode 100644 frontends/calculator/CEdev/examples/lcd_fill/readme.md create mode 100644 frontends/calculator/CEdev/examples/lcd_fill/screenshot.gif create mode 100644 frontends/calculator/CEdev/examples/lcd_fill/src/main.c create mode 100644 frontends/calculator/CEdev/examples/makefile create mode 100644 frontends/calculator/CEdev/examples/os_input/autotester.json create mode 100644 frontends/calculator/CEdev/examples/os_input/makefile create mode 100644 frontends/calculator/CEdev/examples/os_input/readme.md create mode 100644 frontends/calculator/CEdev/examples/os_input/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/os_input/src/main.c create mode 100644 frontends/calculator/CEdev/examples/random/autotester.json create mode 100644 frontends/calculator/CEdev/examples/random/bin/DEMO.8xp create mode 100644 frontends/calculator/CEdev/examples/random/bin/DEMO.bin create mode 100644 frontends/calculator/CEdev/examples/random/bin/DEMO.map create mode 100644 frontends/calculator/CEdev/examples/random/makefile create mode 100644 frontends/calculator/CEdev/examples/random/obj/main.src create mode 100644 frontends/calculator/CEdev/examples/random/readme.md create mode 100644 frontends/calculator/CEdev/examples/random/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/random/src/main.c create mode 100644 frontends/calculator/CEdev/examples/random/test/expected.bin create mode 100644 frontends/calculator/CEdev/examples/real_time_clock/makefile create mode 100644 frontends/calculator/CEdev/examples/real_time_clock/readme.md create mode 100644 frontends/calculator/CEdev/examples/real_time_clock/screenshot.gif create mode 100644 frontends/calculator/CEdev/examples/real_time_clock/src/main.c create mode 100644 frontends/calculator/CEdev/examples/second_counter/makefile create mode 100644 frontends/calculator/CEdev/examples/second_counter/readme.md create mode 100644 frontends/calculator/CEdev/examples/second_counter/screenshot.gif create mode 100644 frontends/calculator/CEdev/examples/second_counter/src/main.c create mode 100644 frontends/calculator/CEdev/examples/second_counter2/makefile create mode 100644 frontends/calculator/CEdev/examples/second_counter2/readme.md create mode 100644 frontends/calculator/CEdev/examples/second_counter2/screenshot.gif create mode 100644 frontends/calculator/CEdev/examples/second_counter2/src/main.c create mode 100644 frontends/calculator/CEdev/examples/stopwatch/makefile create mode 100644 frontends/calculator/CEdev/examples/stopwatch/readme.md create mode 100644 frontends/calculator/CEdev/examples/stopwatch/screenshot.png create mode 100644 frontends/calculator/CEdev/examples/stopwatch/src/main.c create mode 100644 frontends/calculator/CEdev/examples/template/iconc.png create mode 100644 frontends/calculator/CEdev/examples/template/makefile create mode 100644 frontends/calculator/CEdev/examples/template/readme.md create mode 100644 frontends/calculator/CEdev/examples/template/src/main.c create mode 100644 frontends/calculator/CEdev/include/.linker_script create mode 100644 frontends/calculator/CEdev/include/.makefile create mode 100644 frontends/calculator/CEdev/include/assert.h create mode 100644 frontends/calculator/CEdev/include/compression.h create mode 100644 frontends/calculator/CEdev/include/ctype.h create mode 100644 frontends/calculator/CEdev/include/debug.h create mode 100644 frontends/calculator/CEdev/include/decompress.h create mode 100644 frontends/calculator/CEdev/include/errno.h create mode 100644 frontends/calculator/CEdev/include/fasmg-ez80/ez80.inc create mode 100644 frontends/calculator/CEdev/include/fasmg-ez80/ld.fasmg create mode 100644 frontends/calculator/CEdev/include/fasmg-ez80/ti84pceg.inc create mode 100644 frontends/calculator/CEdev/include/fasmg-ez80/tiformat.inc create mode 100644 frontends/calculator/CEdev/include/fileioc.h create mode 100644 frontends/calculator/CEdev/include/float.h create mode 100644 frontends/calculator/CEdev/include/format.h create mode 100644 frontends/calculator/CEdev/include/graphx.h create mode 100644 frontends/calculator/CEdev/include/intce.h create mode 100644 frontends/calculator/CEdev/include/iso646.h create mode 100644 frontends/calculator/CEdev/include/keypadc.h create mode 100644 frontends/calculator/CEdev/include/lib/ce/fileioc.h create mode 100644 frontends/calculator/CEdev/include/lib/ce/graphx.h create mode 100644 frontends/calculator/CEdev/include/lib/ce/keypadc.h create mode 100644 frontends/calculator/CEdev/include/limits.h create mode 100644 frontends/calculator/CEdev/include/math.h create mode 100644 frontends/calculator/CEdev/include/setjmp.h create mode 100644 frontends/calculator/CEdev/include/stdarg.h create mode 100644 frontends/calculator/CEdev/include/stdbool.h create mode 100644 frontends/calculator/CEdev/include/stddef.h create mode 100644 frontends/calculator/CEdev/include/stdint.h create mode 100644 frontends/calculator/CEdev/include/stdio.h create mode 100644 frontends/calculator/CEdev/include/stdlib.h create mode 100644 frontends/calculator/CEdev/include/string.h create mode 100644 frontends/calculator/CEdev/include/tice.h create mode 100644 frontends/calculator/CEdev/include/usb.h create mode 100644 frontends/calculator/CEdev/lib/ccleanup.src create mode 100644 frontends/calculator/CEdev/lib/cstartup.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fclose.src create mode 100644 frontends/calculator/CEdev/lib/fileio/feof.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fgetc.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fgets.src create mode 100644 frontends/calculator/CEdev/lib/fileio/files.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fopen.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fputc.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fputs.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fread.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fseek.src create mode 100644 frontends/calculator/CEdev/lib/fileio/ftell.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fwrite.src create mode 100644 frontends/calculator/CEdev/lib/fileio/remove.src create mode 100644 frontends/calculator/CEdev/lib/libheader.src create mode 100644 frontends/calculator/CEdev/lib/libload.lib create mode 100644 frontends/calculator/CEdev/lib/libload/fileioc.lib create mode 100644 frontends/calculator/CEdev/lib/libload/graphx.lib create mode 100644 frontends/calculator/CEdev/lib/libload/keypadc.lib create mode 100644 frontends/calculator/CEdev/lib/linked/acos.src create mode 100644 frontends/calculator/CEdev/lib/linked/asin.src create mode 100644 frontends/calculator/CEdev/lib/linked/atan.src create mode 100644 frontends/calculator/CEdev/lib/linked/atan2.src create mode 100644 frontends/calculator/CEdev/lib/linked/atof.src create mode 100644 frontends/calculator/CEdev/lib/linked/ceil.src create mode 100644 frontends/calculator/CEdev/lib/linked/cos.src create mode 100644 frontends/calculator/CEdev/lib/linked/cosh.src create mode 100644 frontends/calculator/CEdev/lib/linked/exp.src create mode 100644 frontends/calculator/CEdev/lib/linked/fabs.src create mode 100644 frontends/calculator/CEdev/lib/linked/floor.src create mode 100644 frontends/calculator/CEdev/lib/linked/fmod.src create mode 100644 frontends/calculator/CEdev/lib/linked/frexp.src create mode 100644 frontends/calculator/CEdev/lib/linked/ldexp.src create mode 100644 frontends/calculator/CEdev/lib/linked/log.src create mode 100644 frontends/calculator/CEdev/lib/linked/log10.src create mode 100644 frontends/calculator/CEdev/lib/linked/modf.src create mode 100644 frontends/calculator/CEdev/lib/linked/pow.src create mode 100644 frontends/calculator/CEdev/lib/linked/sin.src create mode 100644 frontends/calculator/CEdev/lib/linked/sinh.src create mode 100644 frontends/calculator/CEdev/lib/linked/sqrt.src create mode 100644 frontends/calculator/CEdev/lib/linked/strtod.src create mode 100644 frontends/calculator/CEdev/lib/linked/tan.src create mode 100644 frontends/calculator/CEdev/lib/linked/tanh.src create mode 100644 frontends/calculator/CEdev/lib/linked/ufltinfo.src create mode 100644 frontends/calculator/CEdev/lib/linked/ufltrnd.src create mode 100644 frontends/calculator/CEdev/lib/shared/abort.src create mode 100644 frontends/calculator/CEdev/lib/shared/abs.src create mode 100644 frontends/calculator/CEdev/lib/shared/atoi.src create mode 100644 frontends/calculator/CEdev/lib/shared/atol.src create mode 100644 frontends/calculator/CEdev/lib/shared/atomic_load_32.src create mode 100644 frontends/calculator/CEdev/lib/shared/atomic_load_decreasing_32.src create mode 100644 frontends/calculator/CEdev/lib/shared/atomic_load_increasing_32.src create mode 100644 frontends/calculator/CEdev/lib/shared/atos.src create mode 100644 frontends/calculator/CEdev/lib/shared/bdivs.src create mode 100644 frontends/calculator/CEdev/lib/shared/bdivu.src create mode 100644 frontends/calculator/CEdev/lib/shared/bldix.src create mode 100644 frontends/calculator/CEdev/lib/shared/bldiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/bmuls.src create mode 100644 frontends/calculator/CEdev/lib/shared/bmulu.src create mode 100644 frontends/calculator/CEdev/lib/shared/brems.src create mode 100644 frontends/calculator/CEdev/lib/shared/bremu.src create mode 100644 frontends/calculator/CEdev/lib/shared/bsearch.src create mode 100644 frontends/calculator/CEdev/lib/shared/bshl.src create mode 100644 frontends/calculator/CEdev/lib/shared/bshrs.src create mode 100644 frontends/calculator/CEdev/lib/shared/bshru.src create mode 100644 frontends/calculator/CEdev/lib/shared/bstix.src create mode 100644 frontends/calculator/CEdev/lib/shared/bstiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/calloc.src create mode 100644 frontends/calculator/CEdev/lib/shared/case.src create mode 100644 frontends/calculator/CEdev/lib/shared/case16.src create mode 100644 frontends/calculator/CEdev/lib/shared/case16d.src create mode 100644 frontends/calculator/CEdev/lib/shared/case24.src create mode 100644 frontends/calculator/CEdev/lib/shared/case24d.src create mode 100644 frontends/calculator/CEdev/lib/shared/case8.src create mode 100644 frontends/calculator/CEdev/lib/shared/case8d.src create mode 100644 frontends/calculator/CEdev/lib/shared/debugger.src create mode 100644 frontends/calculator/CEdev/lib/shared/delay.src create mode 100644 frontends/calculator/CEdev/lib/shared/div.src create mode 100644 frontends/calculator/CEdev/lib/shared/dzx7_standard.src create mode 100644 frontends/calculator/CEdev/lib/shared/dzx7_turbo.src create mode 100644 frontends/calculator/CEdev/lib/shared/finite.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpadd.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpcmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpdata.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpdiv.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpftol.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpltof.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpmul.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpneg.src create mode 100644 frontends/calculator/CEdev/lib/shared/fppack.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpsub.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpultof.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpupop1.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpupop2.src create mode 100644 frontends/calculator/CEdev/lib/shared/frameset.src create mode 100644 frontends/calculator/CEdev/lib/shared/frameset0.src create mode 100644 frontends/calculator/CEdev/lib/shared/frbmuls.src create mode 100644 frontends/calculator/CEdev/lib/shared/frbtof.src create mode 100644 frontends/calculator/CEdev/lib/shared/free.src create mode 100644 frontends/calculator/CEdev/lib/shared/frftob.src create mode 100644 frontends/calculator/CEdev/lib/shared/frftoi.src create mode 100644 frontends/calculator/CEdev/lib/shared/frftos.src create mode 100644 frontends/calculator/CEdev/lib/shared/frftoub.src create mode 100644 frontends/calculator/CEdev/lib/shared/frftoui.src create mode 100644 frontends/calculator/CEdev/lib/shared/frftous.src create mode 100644 frontends/calculator/CEdev/lib/shared/frimuls.src create mode 100644 frontends/calculator/CEdev/lib/shared/frimulu.src create mode 100644 frontends/calculator/CEdev/lib/shared/fritof.src create mode 100644 frontends/calculator/CEdev/lib/shared/frsmuls.src create mode 100644 frontends/calculator/CEdev/lib/shared/frsmulu.src create mode 100644 frontends/calculator/CEdev/lib/shared/frstof.src create mode 100644 frontends/calculator/CEdev/lib/shared/frubtof.src create mode 100644 frontends/calculator/CEdev/lib/shared/fruitof.src create mode 100644 frontends/calculator/CEdev/lib/shared/frustof.src create mode 100644 frontends/calculator/CEdev/lib/shared/gamma.src create mode 100644 frontends/calculator/CEdev/lib/shared/getstringinput.src create mode 100644 frontends/calculator/CEdev/lib/shared/iand.src create mode 100644 frontends/calculator/CEdev/lib/shared/icmpzero.src create mode 100644 frontends/calculator/CEdev/lib/shared/idivs.src create mode 100644 frontends/calculator/CEdev/lib/shared/idivu.src create mode 100644 frontends/calculator/CEdev/lib/shared/ildix.src create mode 100644 frontends/calculator/CEdev/lib/shared/ildiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/imuls.src create mode 100644 frontends/calculator/CEdev/lib/shared/imulu.src create mode 100644 frontends/calculator/CEdev/lib/shared/indcall.src create mode 100644 frontends/calculator/CEdev/lib/shared/ineg.src create mode 100644 frontends/calculator/CEdev/lib/shared/inot.src create mode 100644 frontends/calculator/CEdev/lib/shared/interrupts.src create mode 100644 frontends/calculator/CEdev/lib/shared/ior.src create mode 100644 frontends/calculator/CEdev/lib/shared/irems.src create mode 100644 frontends/calculator/CEdev/lib/shared/iremu.src create mode 100644 frontends/calculator/CEdev/lib/shared/isalnum.src create mode 100644 frontends/calculator/CEdev/lib/shared/isalpha.src create mode 100644 frontends/calculator/CEdev/lib/shared/isascii.src create mode 100644 frontends/calculator/CEdev/lib/shared/iscntrl.src create mode 100644 frontends/calculator/CEdev/lib/shared/isdigit.src create mode 100644 frontends/calculator/CEdev/lib/shared/isgraph.src create mode 100644 frontends/calculator/CEdev/lib/shared/ishl.src create mode 100644 frontends/calculator/CEdev/lib/shared/ishrs.src create mode 100644 frontends/calculator/CEdev/lib/shared/ishru.src create mode 100644 frontends/calculator/CEdev/lib/shared/isinf.src create mode 100644 frontends/calculator/CEdev/lib/shared/islower.src create mode 100644 frontends/calculator/CEdev/lib/shared/isnan.src create mode 100644 frontends/calculator/CEdev/lib/shared/isprint.src create mode 100644 frontends/calculator/CEdev/lib/shared/ispunct.src create mode 100644 frontends/calculator/CEdev/lib/shared/isspace.src create mode 100644 frontends/calculator/CEdev/lib/shared/istix.src create mode 100644 frontends/calculator/CEdev/lib/shared/istiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/isupper.src create mode 100644 frontends/calculator/CEdev/lib/shared/isxdigit.src create mode 100644 frontends/calculator/CEdev/lib/shared/itol.src create mode 100644 frontends/calculator/CEdev/lib/shared/ixor.src create mode 100644 frontends/calculator/CEdev/lib/shared/labs.src create mode 100644 frontends/calculator/CEdev/lib/shared/ladd.src create mode 100644 frontends/calculator/CEdev/lib/shared/land.src create mode 100644 frontends/calculator/CEdev/lib/shared/lcmps.src create mode 100644 frontends/calculator/CEdev/lib/shared/lcmpu.src create mode 100644 frontends/calculator/CEdev/lib/shared/lcmpzero.src create mode 100644 frontends/calculator/CEdev/lib/shared/ldiv.src create mode 100644 frontends/calculator/CEdev/lib/shared/ldivs.src create mode 100644 frontends/calculator/CEdev/lib/shared/ldivu.src create mode 100644 frontends/calculator/CEdev/lib/shared/lldix.src create mode 100644 frontends/calculator/CEdev/lib/shared/lldiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/lmuls.src create mode 100644 frontends/calculator/CEdev/lib/shared/lmulu.src create mode 100644 frontends/calculator/CEdev/lib/shared/lneg.src create mode 100644 frontends/calculator/CEdev/lib/shared/lnot.src create mode 100644 frontends/calculator/CEdev/lib/shared/log2.src create mode 100644 frontends/calculator/CEdev/lib/shared/longjmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/lor.src create mode 100644 frontends/calculator/CEdev/lib/shared/lrems.src create mode 100644 frontends/calculator/CEdev/lib/shared/lremu.src create mode 100644 frontends/calculator/CEdev/lib/shared/lshl.src create mode 100644 frontends/calculator/CEdev/lib/shared/lshrs.src create mode 100644 frontends/calculator/CEdev/lib/shared/lshru.src create mode 100644 frontends/calculator/CEdev/lib/shared/lstix.src create mode 100644 frontends/calculator/CEdev/lib/shared/lstiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/lsub.src create mode 100644 frontends/calculator/CEdev/lib/shared/lxor.src create mode 100644 frontends/calculator/CEdev/lib/shared/malloc.src create mode 100644 frontends/calculator/CEdev/lib/shared/maptab.src create mode 100644 frontends/calculator/CEdev/lib/shared/memchr.src create mode 100644 frontends/calculator/CEdev/lib/shared/memcmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/memcpy.src create mode 100644 frontends/calculator/CEdev/lib/shared/memmove.src create mode 100644 frontends/calculator/CEdev/lib/shared/memset.src create mode 100644 frontends/calculator/CEdev/lib/shared/os.src create mode 100644 frontends/calculator/CEdev/lib/shared/os_textbuffer.src create mode 100644 frontends/calculator/CEdev/lib/shared/print_globals.src create mode 100644 frontends/calculator/CEdev/lib/shared/print_putch.src create mode 100644 frontends/calculator/CEdev/lib/shared/print_putstring.src create mode 100644 frontends/calculator/CEdev/lib/shared/print_sputch.src create mode 100644 frontends/calculator/CEdev/lib/shared/qsort.src create mode 100644 frontends/calculator/CEdev/lib/shared/rand.src create mode 100644 frontends/calculator/CEdev/lib/shared/random.src create mode 100644 frontends/calculator/CEdev/lib/shared/realloc.src create mode 100644 frontends/calculator/CEdev/lib/shared/removeallbreakpoints.src create mode 100644 frontends/calculator/CEdev/lib/shared/removeallwatchpoints.src create mode 100644 frontends/calculator/CEdev/lib/shared/removebreakpoint.src create mode 100644 frontends/calculator/CEdev/lib/shared/removewatchpoint.src create mode 100644 frontends/calculator/CEdev/lib/shared/round.src create mode 100644 frontends/calculator/CEdev/lib/shared/sand.src create mode 100644 frontends/calculator/CEdev/lib/shared/sbrk.src create mode 100644 frontends/calculator/CEdev/lib/shared/scmpzero.src create mode 100644 frontends/calculator/CEdev/lib/shared/sdivs.src create mode 100644 frontends/calculator/CEdev/lib/shared/sdivu.src create mode 100644 frontends/calculator/CEdev/lib/shared/seqcase.src create mode 100644 frontends/calculator/CEdev/lib/shared/seqcased.src create mode 100644 frontends/calculator/CEdev/lib/shared/setbreakpoint.src create mode 100644 frontends/calculator/CEdev/lib/shared/setflag.src create mode 100644 frontends/calculator/CEdev/lib/shared/setjmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/setreadwatchpoint.src create mode 100644 frontends/calculator/CEdev/lib/shared/setreadwritewatchpoint.src create mode 100644 frontends/calculator/CEdev/lib/shared/setwatchpoint.src create mode 100644 frontends/calculator/CEdev/lib/shared/setwritewatchpoint.src create mode 100644 frontends/calculator/CEdev/lib/shared/sldix.src create mode 100644 frontends/calculator/CEdev/lib/shared/sldiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/smuls.src create mode 100644 frontends/calculator/CEdev/lib/shared/smulu.src create mode 100644 frontends/calculator/CEdev/lib/shared/sneg.src create mode 100644 frontends/calculator/CEdev/lib/shared/snot.src create mode 100644 frontends/calculator/CEdev/lib/shared/sor.src create mode 100644 frontends/calculator/CEdev/lib/shared/sprintf.src create mode 100644 frontends/calculator/CEdev/lib/shared/sqrtf.src create mode 100644 frontends/calculator/CEdev/lib/shared/srand.src create mode 100644 frontends/calculator/CEdev/lib/shared/srandom.src create mode 100644 frontends/calculator/CEdev/lib/shared/srems.src create mode 100644 frontends/calculator/CEdev/lib/shared/sremu.src create mode 100644 frontends/calculator/CEdev/lib/shared/sshl.src create mode 100644 frontends/calculator/CEdev/lib/shared/sshrs.src create mode 100644 frontends/calculator/CEdev/lib/shared/sshru.src create mode 100644 frontends/calculator/CEdev/lib/shared/sstix.src create mode 100644 frontends/calculator/CEdev/lib/shared/sstiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/stoi.src create mode 100644 frontends/calculator/CEdev/lib/shared/stoiu.src create mode 100644 frontends/calculator/CEdev/lib/shared/strcasecmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/strcat.src create mode 100644 frontends/calculator/CEdev/lib/shared/strchr.src create mode 100644 frontends/calculator/CEdev/lib/shared/strcmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/strcpy.src create mode 100644 frontends/calculator/CEdev/lib/shared/strcspn.src create mode 100644 frontends/calculator/CEdev/lib/shared/strdup.src create mode 100644 frontends/calculator/CEdev/lib/shared/strlen.src create mode 100644 frontends/calculator/CEdev/lib/shared/strncasecmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/strncat.src create mode 100644 frontends/calculator/CEdev/lib/shared/strncmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/strncpy.src create mode 100644 frontends/calculator/CEdev/lib/shared/strndup.src create mode 100644 frontends/calculator/CEdev/lib/shared/strnlen.src create mode 100644 frontends/calculator/CEdev/lib/shared/strpbrk.src create mode 100644 frontends/calculator/CEdev/lib/shared/strrchr.src create mode 100644 frontends/calculator/CEdev/lib/shared/strspn.src create mode 100644 frontends/calculator/CEdev/lib/shared/strstr.src create mode 100644 frontends/calculator/CEdev/lib/shared/strtok.src create mode 100644 frontends/calculator/CEdev/lib/shared/strtol.src create mode 100644 frontends/calculator/CEdev/lib/shared/strtoul.src create mode 100644 frontends/calculator/CEdev/lib/shared/sxor.src create mode 100644 frontends/calculator/CEdev/lib/shared/tice.src create mode 100644 frontends/calculator/CEdev/lib/shared/tolower.src create mode 100644 frontends/calculator/CEdev/lib/shared/toupper.src create mode 100644 frontends/calculator/CEdev/lib/shared/udtoe.src create mode 100644 frontends/calculator/CEdev/lib/shared/udtof.src create mode 100644 frontends/calculator/CEdev/lib/shared/udtog.src create mode 100644 frontends/calculator/CEdev/lib/shared/uitoa.src create mode 100644 frontends/calculator/CEdev/lib/shared/uldiv.src create mode 100644 frontends/calculator/CEdev/lib/shared/ultoa.src create mode 100644 frontends/calculator/CEdev/lib/shared/uprint.src create mode 100644 frontends/calculator/CEdev/lib/shared/upscan.src create mode 100644 frontends/calculator/CEdev/lib/shared/ureverse.src create mode 100644 frontends/calculator/CEdev/lib/shared/usb.src create mode 100644 frontends/calculator/CEdev/lib/shared/uscan.src create mode 100644 frontends/calculator/CEdev/lib/shared/usscan.src create mode 100644 frontends/calculator/CEdev/lib/shared/ustoa.src create mode 100644 frontends/calculator/CEdev/lib/shared/uuitoa.src create mode 100644 frontends/calculator/CEdev/lib/shared/uultoa.src create mode 100644 frontends/calculator/CEdev/lib/shared/uustoa.src create mode 100644 frontends/calculator/CEdev/lib/shared/vsprintf.src create mode 100644 frontends/calculator/CEdev/lib/shared/zx7_Decompress.src create mode 100644 frontends/calculator/CEdev/lib/static/acos.src create mode 100644 frontends/calculator/CEdev/lib/static/asin.src create mode 100644 frontends/calculator/CEdev/lib/static/atan.src create mode 100644 frontends/calculator/CEdev/lib/static/atan2.src create mode 100644 frontends/calculator/CEdev/lib/static/atof.src create mode 100644 frontends/calculator/CEdev/lib/static/ceil.src create mode 100644 frontends/calculator/CEdev/lib/static/cos.src create mode 100644 frontends/calculator/CEdev/lib/static/exp.src create mode 100644 frontends/calculator/CEdev/lib/static/fabs.src create mode 100644 frontends/calculator/CEdev/lib/static/floor.src create mode 100644 frontends/calculator/CEdev/lib/static/fmod.src create mode 100644 frontends/calculator/CEdev/lib/static/frexp.src create mode 100644 frontends/calculator/CEdev/lib/static/ldexp.src create mode 100644 frontends/calculator/CEdev/lib/static/log.src create mode 100644 frontends/calculator/CEdev/lib/static/log10.src create mode 100644 frontends/calculator/CEdev/lib/static/modf.src create mode 100644 frontends/calculator/CEdev/lib/static/pow.src create mode 100644 frontends/calculator/CEdev/lib/static/sin.src create mode 100644 frontends/calculator/CEdev/lib/static/sinh.src create mode 100644 frontends/calculator/CEdev/lib/static/sqrt.src create mode 100644 frontends/calculator/CEdev/lib/static/strtod.src create mode 100644 frontends/calculator/CEdev/lib/static/tan.src create mode 100644 frontends/calculator/CEdev/lib/static/tanh.src create mode 100644 frontends/calculator/CEdev/lib/static/ufltinfo.src create mode 100644 frontends/calculator/CEdev/lib/static/ufltrnd.src (limited to 'frontends/calculator/CEdev') diff --git a/frontends/calculator/CEdev/bin/C1ERRORS.DAT b/frontends/calculator/CEdev/bin/C1ERRORS.DAT new file mode 100644 index 0000000..375755b --- /dev/null +++ b/frontends/calculator/CEdev/bin/C1ERRORS.DAT @@ -0,0 +1,181 @@ +-- +-- Preprocessor error messages +-- +45 +Illegal constant expression in directive +Concatenation at end-of-file. Ignored +Illegal token +Illegal redefinition of macro "%s" +Incorrect number of arguments for macro "%s" +Unbalanced parentheses in macro call "%s" +Cannot redefine "%s" keyword +Illegal directive +Illegal "#if" directive syntax +Bad preprocessor file. Aborted +Illegal macro call syntax +Integer constant too large +Identifier "%s" is undefined +Illegal #include argument +Macro "%s" requires arguments +Illegal "#define" directive syntax +Unterminated comment in preprocessor directive +Unterminated quoted string +Escape sequence ASCII code too large to fit in char +Character not within radix +More than four characters in string constant +End of file encountered before end of macro call +Macro expansion caused line to be too long +"##" cannot be first or last token in replacement string +"#" must be followed by an argument name +Illegal "#line" directive syntax +Cannot undefine macro "%s" +End-of-file found before "#endif" directive +"#else" not within #if and #endif directives +Illegal constant expression +Illegal macro name "%s" +Extra "#endif" found +Division by zero encountered +Floating point constant over/underflow +Concatenated string too long +Identifier longer than 32 characters +Unsupported CPU "%s" in pragma +Unsupported or poorly formed pragma +"%s" +Unexpected end of file +Unmatched "#else" found +Unmatched "#elif" found +"#" preceeded by non whitespace character +Unterminated quoted character +Empty file encountered +-- +-- Front-End error messages +-- +125 +Syntax error +Function "%s" already declared +Constant integer expression expected +Constant expression overflow +Function return type mismatch for "%s" +Argument type mismatch for argument %s +Cannot take address of un-subscripted array +Function call argument cannot be void type +Identifier "%s" is not a variable or enumeration constant name +Cannot return a value from a function returning "void" +Expression must be arithmetic, structure, union or pointer type +Integer constant too large +Expression not compatible with function return type +Function cannot return value of type array or function +Structure or union member may not be of function type +Cannot declare a typedef within a structure or union +Illegal bit field declaration +Unterminated quoted string +Escape sequence ASCII code too large to fit in char +Character not within radix +More than one character in string constant +Illegal declaration specifier +Only "const" and "volatile" may be specified with a struct, union, enum, or typedef +Cannot specify both long and short in declaration specifier +Only type qualifiers may be specified within pointer declarations +Identifier "%s" already declared within current scope +Identifier "%s" not in function argument list, ignored +Name of formal parameter not given +Identifier "%s" not defined within current scope +Cannot have more than one default per switch statement +Label "%s" is already declared +Label "%s" not declared +"continue" statement not within loop body +"break" statement not within switch body or loop body +"case" statement must be within switch body +"default" statement must be within switch body +Case value "%s" already declared +Expression is not a pointer +Expression is not a function locator +Expression to left of "." or "->" is not a structure or union +Identifier "%s" is not a member of %s structure +Object cannot be subscripted +Array subscript must be of integral type +Cannot dereference a pointer to "void" +Cannot compare a pointer to a non-pointer +Pointers to different types may not be compared +Pointers may not be added +A Pointer and a non-integral may not be subtracted +Pointers to different types may not be subtracted +Unexpected end of file encountered +Unrecoverable parse error encountered +Operand must be a modifiable lvalue +Operands are not assignment compatible +%s must be arithmetic type +%s must be integral type +%s must be arithmetic or pointer type +Expression must be an lvalue +Cannot assign to an object of constant type +Cannot subtract a pointer from an arithmetic expression +An array is not a legal lvalue +Cannot take address of a bit field +Cannot take address of variable with register storage class +Conditional expression operands are not compatible +Casting a non-pointer to a pointer +Type name of cast must be scalar type +Operand to cast must be scalar type +Expression is not a structure or union +Expression is not a pointer to a structure or union +Cannot take size of void, function, or bit field types +Actual parameter has no corresponding formal parameter +Formal parameter has no corresponding actual parameter +Argument type is not compatible with formal parameter +Identifier "%s" is not a structure or union tag +Identifier "%s" is not a structure tag +Identifier "%s" is not a union tag +Structure or union tag "%s" is not defined +Only one storage class may be given in a declaration +Type specifier cannot have both "unsigned" and "signed" +"unsigned" and "signed" may be used in conjunction only with "char", "short", "int" or "long" +"long" may be used in conjunction only with "int", or "double" +Illegal bit field length +Too many initializers for object +Static objects may be initialized with constant expressions only +Array "%s" has too many initializers +Structure "%s" has too many initializers +Dimension size may not be zero, negative or omitted +First dimension of "%s" may not be omitted +Dimension size must be greater than zero +Only "register" storage class is allowed for formal parameter +Cannot take size of array with missing dimension size +Identifier "%s" already declared with different type or linkage +Cannot perform pointer arithmetic on pointer to void +Cannot initialize object with "extern" storage class +Missing "%s" detected +Recursive structure declaration +Initializer is not assignment compatible +Empty parameter list is an obsolescent feature +No function prototype "%s" in scope +"old style" formal parameter declarations are obsolescent +Data objects cannot have "io" storage class +Cannot shift by a fract +Only one memory space can be specified +Unrecognized/invalid type specifier +Integer promotion not performed (ANSI Promotions disabled) +Ignoring space specifier (e.g. near, far, rom) on local, parameter or struct member +Ignoring const or volatile qualifier +Cannot initialize typedef +Aggregate or union objects may be initialized with constant expressions only +Operands are not cast compatible +Ignoring space specifier (e.g. near, far) on function +Invalid use of placement or alignment option +Inconsistent use of placement or alignment options +No previous use of placement or alignment options +Function %s must return a value +Function return type defaults to int +Signed/unsigned mismatch +"%s" Initialization needs curly braces +Cannot open include file "%s" +Function definition declared auto +Parameter type given in both old style and new style +Cannot perform pointer arithmetic on function pointer +Type defaults to int +Statement has no effect +Indirectly called function must be of reentrant type +Conflicting string placement directive in string constant + + + diff --git a/frontends/calculator/CEdev/bin/License b/frontends/calculator/CEdev/bin/License new file mode 100644 index 0000000..163b0f5 --- /dev/null +++ b/frontends/calculator/CEdev/bin/License @@ -0,0 +1,120 @@ +License-To-Use Agreement for Zilog Software. + +BY CLICKING "Yes" IN THIS INSTALL PROGRAM, YOU AGREE TO BE BOUND BY +THE FOLLOWING TERMS. IF THE INDIVIDUAL INSTALLING THIS SOFTWARE IS AN +EMPLOYEE, AGENT, CONTRACTOR OR ASSISTANT OF AN ENTITY THAT HAS PURCHASED +THE RIGHT TO USE THE SOFTWARE ENCLOSED, THEN AS USED IN THIS AGREEMENT, THE +TERM "YOU" REFERS TO SUCH INDIVIDUAL'S EMPLOYER, ITS AFFILIATES AND +SUBSIDIARIES, IF ANY. OTHERWISE, IF THE PRECEDING SENTENCE DOES NOT APPLY, +AS USED IN THIS AGREEMENT THE TERM "YOU" REFERS TO THE INDIVIDUAL OPENING +THIS PACKAGE + +1. License: Zilog grants you license to use the current version of +the enclosed (Zilog interface & control software) "Programs" and on-line +& written documentation (together herein referred to as, "The Licensed +Software") solely for your own internal purposes, for an unlimited period +of time and under the conditions and restrictions as set out in this +Agreement. + +2. Restrictions: The Licensed Software and documentation in whole +or in part are copyrighted and the title to all copies is retained by Zilog +and/or its Licensors. Except as provided for in Clause 3, you may not +modify, adapt, translate, create derivative works, disassemble, decompile, +imitate or otherwise reverse engineer the Licensed Software. + +3. Compiler Products: You are granted a royalty free right to reproduce +and distribute certain parts of the runtime modules and libraries +("Module") of the Licensed Software provided that you: (a) distribute the +Module in object form only and only in conjunction with and as part of your +software program ("Application") into which it is incorporated; (b) do not +use Zilog's name, logo or trademarks to market your application; (c) agree +to indemnify, hold harmless and defend Zilog or its Licensors from and +against any claims or lawsuits, including attorney's fees, that arise or +result from the use or distribution of your Application; (d) prohibit users +of your Application from modifying, adapting, translating, creating +derivative works, reverse engineering, decompiling or disassembling the +Module. The files that constitute the Module are identified in the +documentation and/or on-line "README" file. + +4. Warranty & Disclaimer: Licensed Software is provided "AS IS" and +without a warranty of any kind. Zilog's entire liability and your +exclusive remedy under this warranty will be the corrections of defects in +media or replacement of media. ZILOG AND ITS LICENSORS DISCLAIMS ALL OTHER +WARRANTIES, EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTY OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT +EXCEPT TO THE EXTENT THAT THESE DISCLAIMERS ARE HELD TO BE LEGALLY INVALID. + +5. High Risk Activities: The Licensed Software is not fault-tolerant +and is not designed, manufactured or intended for use in conjunction with +on-line control equipment in hazardous environments requiring fail-safe +performance such as; in operation of nuclear facilities, (air) craft +navigation or communications systems, air traffic control, direct life +support machines, or weapons systems ("High Risk Activities") in which the +failure of the Licensed Software could lead directly to death, personal +injury or severe physical or environmental damage. Zilog and its licensors +specifically disclaim any express or implied warranty to High Risk +Activities. + +6. Limitation of Liability: TO THE EXTENT NOT PROHIBITED BY APPLICATION +LAW, ZILOG OR ITS LICENSORS WILL NOT BE LIABLE FOR ANY LOST REVENUE, PROFIT +OR DATA, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTIAL OR PUNITIVE +DAMAGE HOWEVER CAUSED AND REGARDLESS OF THEORY OF LIABILITY ARISING OUT OF +THE USE OF OR INABILITY TOUSE THE "Licensed Software", EVEN IF ZILOG HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. In no event, shall +Zilog's liability whether in contract, tort (including negligence), or +otherwise exceed the license fee paid for the Licensed Software. + +7. Ownership: The copyrights and all other and industrial property rights +for the protection of information with respect to the Licensed Software +(including the methods and techniques on which it is based) is retained by +Zilog and its licensors. Nothing in this Agreement serves to transfer such +rights. + +8. Termination: This Agreement is effective until terminated. You +may terminate this Agreement at any time by destroying all copies of the +Licensed Software. This Agreement will terminate immediately without +notice from Zilog if you fail to comply with any provision of this +Agreement. + +9. Export Regulations: All software and technical data delivered +under this Agreement are subject to U.S. Export control laws and may be +subject to export or import regulations in other countries. You agree to +comply strictly with all such laws and regulations and acknowledge that you +have the responsibility to obtain such licenses to export, re-export or +import as may be required after delivery to you. + +10. Entire Agreement: This Agreement is the entire agreement between you +and Zilog relating to the Licensed Software and supersedes all prior or +contemporaneous oral or written communications, proposals and +representations with respect to its subject matter. No variations of the +terms of this consent, including an express waiver of the terms of this +Agreement, in writing and signed by an officer of Zilog. + +11. Governing Law: This Agreement is governed by the laws of the State +of California and the controlling U.S. federal law. No choice of law rules +of any jurisdiction will apply. The parties hereby submit to the +jurisdiction of, and wave any venue objections against the United States +District Court for the Northern District of California, the Superior Court +of the State of California for the County of Santa Clara, and any mutually +agreed to alternative dispute resolution proceeding taking place in Santa +Clara County, California, in any litigation or claims arising out of this +Agreement. + +12. Copyright Notices: The Licensed Software governed by this agreement +contains the following copyrights and trademarks appearing within the +software or within the source code generating the software, affixed on the +packaging and/or labeling or within the operational displays of the +software. The copyright notice shall be recognized whether visibly labeled +or contained within the Licensed Software by acceptance of this Agreement. + +Copyright (c) 1985 - 2012 Zilog Inc. Milpitas, California + +And/or by other parties by inclusion. The Files governed by this License +Agreement may contain restricted information and are or may be UNPUBLISHED +PROPRIETARY SOURCE CODE OF THE Owners. The Copyright Notices above do not +evidence any actual or intended publication of such source code. + + + + + diff --git a/frontends/calculator/CEdev/bin/PLCError.dll b/frontends/calculator/CEdev/bin/PLCError.dll new file mode 100755 index 0000000..8bd2f8d Binary files /dev/null and b/frontends/calculator/CEdev/bin/PLCError.dll differ diff --git a/frontends/calculator/CEdev/bin/convhex b/frontends/calculator/CEdev/bin/convhex new file mode 100755 index 0000000..fd67fe7 Binary files /dev/null and b/frontends/calculator/CEdev/bin/convhex differ diff --git a/frontends/calculator/CEdev/bin/convpng b/frontends/calculator/CEdev/bin/convpng new file mode 100755 index 0000000..88c811a Binary files /dev/null and b/frontends/calculator/CEdev/bin/convpng differ diff --git a/frontends/calculator/CEdev/bin/convtile b/frontends/calculator/CEdev/bin/convtile new file mode 100755 index 0000000..8944851 Binary files /dev/null and b/frontends/calculator/CEdev/bin/convtile differ diff --git a/frontends/calculator/CEdev/bin/eZ80.ini b/frontends/calculator/CEdev/bin/eZ80.ini new file mode 100644 index 0000000..883aff4 --- /dev/null +++ b/frontends/calculator/CEdev/bin/eZ80.ini @@ -0,0 +1,18 @@ +[Compiler] +ProcessorFamily = 0x200 +AUsSizedByType = 0 +NewAUatTypeChange = 0 +BitfieldSize = 24 +IntSize = 24 +DoubleSize = 32 +PointerSize = 24 +NearPointerSize = 24 +FarPointerSize = 24 +Bank0PointerSize = 24 +Bank1PointerSize = 24 +FunctionPointerSize = 24 +CharIsSigned = 1 + +[Backend] +BitfieldsPackL2R = 1 + diff --git a/frontends/calculator/CEdev/bin/ez80cc.con b/frontends/calculator/CEdev/bin/ez80cc.con new file mode 100755 index 0000000..7a43075 --- /dev/null +++ b/frontends/calculator/CEdev/bin/ez80cc.con @@ -0,0 +1,23 @@ +/* eZ80CC.CON */ +/* Compiler Configuration File */ + +-STRICT +-ALIAS +-PROMOTE +-CONST:ROM +-QUIET +-EXPMAC +-OPTSIZE +-LOCALOPT +-LOCALCOPY +-LOCALCSE +-LOCALFOLD +-GLOBALOPT +-GLOBALCOPY +-GLOBALCSE +-GLOBALFOLD +-JMPOPT +-LOOPOPT +-PEEPHOLE +-NOMODSECT +-ASM diff --git a/frontends/calculator/CEdev/bin/ez80cc.exe b/frontends/calculator/CEdev/bin/ez80cc.exe new file mode 100755 index 0000000..102d096 Binary files /dev/null and b/frontends/calculator/CEdev/bin/ez80cc.exe differ diff --git a/frontends/calculator/CEdev/bin/fasmg b/frontends/calculator/CEdev/bin/fasmg new file mode 100755 index 0000000..64f8526 Binary files /dev/null and b/frontends/calculator/CEdev/bin/fasmg differ diff --git a/frontends/calculator/CEdev/bin/make.exe b/frontends/calculator/CEdev/bin/make.exe new file mode 100755 index 0000000..61ce9e9 Binary files /dev/null and b/frontends/calculator/CEdev/bin/make.exe differ diff --git a/frontends/calculator/CEdev/bin/p1.exe b/frontends/calculator/CEdev/bin/p1.exe new file mode 100755 index 0000000..ac3a6a3 Binary files /dev/null and b/frontends/calculator/CEdev/bin/p1.exe differ diff --git a/frontends/calculator/CEdev/bin/p2.exe b/frontends/calculator/CEdev/bin/p2.exe new file mode 100755 index 0000000..4e97a26 Binary files /dev/null and b/frontends/calculator/CEdev/bin/p2.exe differ diff --git a/frontends/calculator/CEdev/bin/p3.exe b/frontends/calculator/CEdev/bin/p3.exe new file mode 100755 index 0000000..cd95b52 Binary files /dev/null and b/frontends/calculator/CEdev/bin/p3.exe differ diff --git a/frontends/calculator/CEdev/bin/zds2.version b/frontends/calculator/CEdev/bin/zds2.version new file mode 100644 index 0000000..01178a9 --- /dev/null +++ b/frontends/calculator/CEdev/bin/zds2.version @@ -0,0 +1,7 @@ +/***************************************/ +/* updated by buildbot - DO NOT EDIT */ +/***************************************/ +[version info] +version_number=5.2.0 +build_number=11121401 + diff --git a/frontends/calculator/CEdev/examples/debugging/bin/DEMO.8xp b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.8xp new file mode 100644 index 0000000..477a3d0 Binary files /dev/null and b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.8xp differ diff --git a/frontends/calculator/CEdev/examples/debugging/bin/DEMO.bin b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.bin new file mode 100644 index 0000000..10c5c3c Binary files /dev/null and b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.bin differ diff --git a/frontends/calculator/CEdev/examples/debugging/bin/DEMO.dbg b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.dbg new file mode 100644 index 0000000..8430b95 Binary files /dev/null and b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.dbg differ diff --git a/frontends/calculator/CEdev/examples/debugging/bin/DEMO.map b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.map new file mode 100644 index 0000000..4462134 --- /dev/null +++ b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.map @@ -0,0 +1,35 @@ +Segment Base Top High Length +-------- ------ ------ ------ ------- +icon D1A882 D1A882 0h +launcher D1A882 D1A882 0h +libs D1A882 D1A882 0h +startup D1A882 D1A8C1 3Fh +cleanup D1A8C1 D1A8D5 14h +exit D1A8D5 D1A8DB 6h +code D1A8DB D1A9D6 FBh +data D1A9D6 D1A9D6 0h +strsect D1A9D6 D1AA7B A5h +text D1AA7B D1AA7B 0h +bss D031F6 D031F6 D13FD6 0h +header D1A87F D1A882 3h + +Label Value +------------------------- ------ +_os_DisableHomeTextBuffer = D1A8DB +_os_EnableHomeTextBuffer = D1A8ED +_dbg_Debugger = D1A8FF +_dbg_RemoveAllBreakpoints = D1A905 +_dbg_RemoveWatchpoint = D1A90B +_dbg_SetWatchpoint = D1A915 +_dbg_RemoveAllWatchpoints = D1A921 +_dbg_SetWriteWatchpoint = D1A927 +_abort = D1A933 +_sprintf = 0000BC +__ccleanup = D1A8C1 +_errno = D008DC +_init = D1A882 +_exit = D1A8D7 +__exit = D1A8B0 +__exitsp = D1A8B0 +__errsp = D1A8B0 +_main = D1A93C diff --git a/frontends/calculator/CEdev/examples/debugging/makefile b/frontends/calculator/CEdev/examples/debugging/makefile new file mode 100644 index 0000000..3ea542a --- /dev/null +++ b/frontends/calculator/CEdev/examples/debugging/makefile @@ -0,0 +1,18 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +# This is just so the main makefile in $CEDEV/examples makes this one be like "make debug" +.DEFAULT_GOAL := debug + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/debugging/obj/main.src b/frontends/calculator/CEdev/examples/debugging/obj/main.src new file mode 100644 index 0000000..4a90981 --- /dev/null +++ b/frontends/calculator/CEdev/examples/debugging/obj/main.src @@ -0,0 +1,484 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -debug -optsize -noreduceopt -nomodsect -peephole -globalopt +; -localcse -const=ROM + FILE "SRC\MAIN.C" + .assume ADL=1 +.DEBUG "C" + SEGMENT CODE +.BEGREC "NONAME0",9 +.DEFINE "sign" +.VALUE 0 +.CLASS 8 +.TYPE 2 +.ENDEF +.DEFINE "exp" +.VALUE 1 +.CLASS 8 +.TYPE 2 +.ENDEF +.DEFINE "mant" +.VALUE 2 +.CLASS 8 +.DIM 7 +.TYPE 108 +.ENDEF +.ENDREC "NONAME0" +.BEGREC "NONAME1",18 +.DEFINE "real" +.VALUE 0 +.CLASS 8 +.TAG "NONAME0" +.TYPE 8 +.ENDEF +.DEFINE "imag" +.VALUE 9 +.CLASS 8 +.TAG "NONAME0" +.TYPE 8 +.ENDEF +.ENDREC "NONAME1" +.BEGREC "NONAME2",11 +.DEFINE "dim" +.VALUE 0 +.CLASS 8 +.TYPE 13 +.ENDEF +.DEFINE "items" +.VALUE 2 +.CLASS 8 +.DIM 1 +.TAG "NONAME0" +.TYPE 104 +.ENDEF +.ENDREC "NONAME2" +.BEGREC "NONAME3",20 +.DEFINE "dim" +.VALUE 0 +.CLASS 8 +.TYPE 13 +.ENDEF +.DEFINE "items" +.VALUE 2 +.CLASS 8 +.DIM 1 +.TAG "NONAME1" +.TYPE 104 +.ENDEF +.ENDREC "NONAME3" +.BEGREC "NONAME4",11 +.DEFINE "cols" +.VALUE 0 +.CLASS 8 +.TYPE 12 +.ENDEF +.DEFINE "rows" +.VALUE 1 +.CLASS 8 +.TYPE 12 +.ENDEF +.DEFINE "items" +.VALUE 2 +.CLASS 8 +.DIM 1 +.TAG "NONAME0" +.TYPE 104 +.ENDEF +.ENDREC "NONAME4" +.BEGREC "NONAME5",3 +.DEFINE "len" +.VALUE 0 +.CLASS 8 +.TYPE 13 +.ENDEF +.DEFINE "data" +.VALUE 2 +.CLASS 8 +.DIM 1 +.TYPE 98 +.ENDEF +.ENDREC "NONAME5" +.BEGREC "NONAME6",3 +.DEFINE "len" +.VALUE 0 +.CLASS 8 +.TYPE 13 +.ENDEF +.DEFINE "data" +.VALUE 2 +.CLASS 8 +.DIM 1 +.TYPE 98 +.ENDEF +.ENDREC "NONAME6" +.BEGREC "NONAME7",3 +.DEFINE "size" +.VALUE 0 +.CLASS 8 +.TYPE 13 +.ENDEF +.DEFINE "data" +.VALUE 2 +.CLASS 8 +.DIM 1 +.TYPE 108 +.ENDEF +.ENDREC "NONAME7" +.BEGREC "fmt_type",19 +.DEFINE "status" +.VALUE 0 +.CLASS 8 +.TYPE 12 +.ENDEF +.DEFINE "flags" +.VALUE 1 +.CLASS 8 +.TYPE 12 +.ENDEF +.DEFINE "size" +.VALUE 2 +.CLASS 8 +.TYPE 2 +.ENDEF +.DEFINE "chr" +.VALUE 3 +.CLASS 8 +.TYPE 2 +.ENDEF +.DEFINE "type" +.VALUE 4 +.CLASS 8 +.TYPE 2 +.ENDEF +.DEFINE "field_width" +.VALUE 5 +.CLASS 8 +.TYPE 2 +.ENDEF +.DEFINE "precision" +.VALUE 6 +.CLASS 8 +.TYPE 2 +.ENDEF +.DEFINE "set_begin" +.VALUE 7 +.CLASS 8 +.TYPE 34 +.ENDEF +.DEFINE "set_end" +.VALUE 10 +.CLASS 8 +.TYPE 34 +.ENDEF +.DEFINE "pad_whole" +.VALUE 13 +.CLASS 8 +.TYPE 12 +.ENDEF +.DEFINE "pad_pre_fract" +.VALUE 14 +.CLASS 8 +.TYPE 12 +.ENDEF +.DEFINE "pad_post_fract" +.VALUE 15 +.CLASS 8 +.TYPE 12 +.ENDEF +.DEFINE "pad_at" +.VALUE 16 +.CLASS 8 +.TYPE 34 +.ENDEF +.ENDREC "fmt_type" +.BEGREC "flt_info",12 +.DEFINE "flags" +.VALUE 0 +.CLASS 8 +.TYPE 12 +.ENDEF +.DEFINE "exp" +.VALUE 1 +.CLASS 8 +.TYPE 2 +.ENDEF +.DEFINE "digits" +.VALUE 2 +.CLASS 8 +.DIM 10 +.TYPE 108 +.ENDEF +.ENDREC "flt_info" +.BEGREC "NONAME8",6 +.DEFINE "quot" +.VALUE 0 +.CLASS 8 +.TYPE 4 +.ENDEF +.DEFINE "rem" +.VALUE 3 +.CLASS 8 +.TYPE 4 +.ENDEF +.ENDREC "NONAME8" +.BEGREC "NONAME9",8 +.DEFINE "quot" +.VALUE 0 +.CLASS 8 +.TYPE 5 +.ENDEF +.DEFINE "rem" +.VALUE 4 +.CLASS 8 +.TYPE 5 +.ENDEF +.ENDREC "NONAME9" +.BEGREC "header",6 +.DEFINE "s" +.VALUE 0 +.CLASS 11 +.TAG "NONAME10" +.TYPE 8 +.ENDEF +.DEFINE "x" +.VALUE 0 +.CLASS 11 +.TYPE 2 +.ENDEF +.ENDREC "header" +.BEGREC "NONAME10",6 +.DEFINE "ptr" +.VALUE 0 +.CLASS 8 +.TAG "header" +.TYPE 40 +.ENDEF +.DEFINE "size" +.VALUE 3 +.CLASS 8 +.TYPE 14 +.ENDEF +.ENDREC "NONAME10" +.BEGREC "__stdio_file",1 +.DEFINE "slot" +.VALUE 0 +.CLASS 8 +.TYPE 12 +.ENDEF +.ENDREC "__stdio_file" +; 1 #include +; 2 #include +; 3 #include +; 4 #include +; 5 +; 6 #include +; 7 #include +; 8 +; 9 /* +; 10 * Even though debug.h has prototypes for Debugger, SetWriteWatchpoint, SetWatchpoint, RemoveWatchpoint, RemoveAllWatchpoints, RemoveAllBreakpoints... +; 11 * you have to use the dbg_ prefix as shown here: +; 12 */ +; 13 +; 14 void main(void) { +_main: +.DEFINE "_main" + +.VALUE _main + +.CLASS 2 + +.TYPE 65 + +.ENDEF + +.BEGFUNC "main",14,"_main" + +.LINE 14 + +.DEFINE "dbg_test_var_2" + +.CLASS 65 + +.VALUE -1 + +.TYPE 12 + +.ENDEF + +.DEFINE "dbg_test_var_1" + +.CLASS 65 + +.VALUE -4 + +.TYPE 4 + +.ENDEF + + PUSH IX + LD IX,0 + ADD IX,SP + PUSH BC + DEC SP +; 15 /* Set the intial value of some variables */ +; 16 int dbg_test_var_1 = 10; +.LINE 16 + + LD BC,10 + LD (IX+-4),BC +; 17 uint8_t dbg_test_var_2 = 3; +.LINE 17 + + LD (IX+-1),3 +; 18 +; 19 /* Print a simple debugging string */ +; 20 dbg_sprintf(dbgout, "This is the start of a CEmu debugging test\n"); +.LINE 20 + + LD BC,L__0 + PUSH BC + LD BC,16449536 + PUSH BC + CALL _sprintf + POP BC + POP BC +; 21 +; 22 /* You can enter the debugger manually */ +; 23 dbg_Debugger(); +.LINE 23 + + CALL _dbg_Debugger +; 24 +; 25 /* Set a watchpoint that will break anytime we write/change this variable */ +; 26 dbg_SetWriteWatchpoint(&dbg_test_var_1, sizeof dbg_test_var_1); +.LINE 26 + + LD BC,3 + PUSH BC + PEA IX+-4 + CALL _dbg_SetWriteWatchpoint + POP BC + POP BC +; 27 +; 28 /* Set a non breaking watchpoint just so we can see what is in this variable at any given time */ +; 29 dbg_SetWatchpoint(&dbg_test_var_2, sizeof dbg_test_var_2); +.LINE 29 + + LD BC,1 + PUSH BC + PEA IX+-1 + CALL _dbg_SetWatchpoint + POP BC + POP BC +; 30 +; 31 /* Now, let's write to the variable to see what happens (Go to the 'Watchpoints' tab in CEmu to view the status) */ +; 32 dbg_test_var_1 = 5; +.LINE 32 + + LD BC,5 + LD (IX+-4),BC +; 33 +; 34 /* Remove the watchpoint that we had set */ +; 35 dbg_RemoveWatchpoint(&dbg_test_var_1); +.LINE 35 + + PEA IX+-4 + CALL _dbg_RemoveWatchpoint + POP BC +; 36 dbg_RemoveWatchpoint(&dbg_test_var_2); +.LINE 36 + + PEA IX+-1 + CALL _dbg_RemoveWatchpoint + POP BC +; 37 +; 38 /* We can also use those */ +; 39 dbg_RemoveAllWatchpoints(); +.LINE 39 + + CALL _dbg_RemoveAllWatchpoints +; 40 dbg_RemoveAllBreakpoints(); +.LINE 40 + + CALL _dbg_RemoveAllBreakpoints +; 41 +; 42 /* Set this value to zero */ +; 43 dbg_test_var_2 = 0; +.LINE 43 + + LD (IX+-1),0 +; 44 +; 45 /* Fail this assertion */ +; 46 assert(dbg_test_var_2); +.LINE 46 + + LD A,(IX+-1) + OR A,A + JR NZ,L_3 + LD BC,46 + PUSH BC + LD BC,L__2 + PUSH BC + LD BC,L__3 + PUSH BC + LD BC,L__4 + PUSH BC + LD BC,16449536 + PUSH BC + CALL _sprintf + POP BC + POP BC + POP BC + POP BC + POP BC + CALL _abort +; 47 } +L_3: +.LINE 47 + + LD SP,IX + POP IX + RET + + +;**************************** _main *************************** +;Name Addr/Register Size Type +;_abort IMPORT ----- function +;_dbg_RemoveAllBreakpoints IMPORT ----- function +;_dbg_RemoveAllWatchpoints IMPORT ----- function +;_dbg_RemoveWatchpoint IMPORT ----- function +;_dbg_SetWatchpoint IMPORT ----- function +;_dbg_SetWriteWatchpoint IMPORT ----- function +;_dbg_Debugger IMPORT ----- function +;_sprintf IMPORT ----- function +;dbg_test_var_1 IX-4 3 variable +;dbg_test_var_2 IX-1 1 variable + + +; Stack Frame Size: 10 (bytes) +; Spill Code: 0 (instruction) + + +.ENDFUNC "main",47,"_main" + SEGMENT STRSECT +L__0: + DB "This is the start of a CEmu debugging test" + DB 10,0 +L__2: + DB "Z:\\HOME\\WALTZ\\DOCUMENTS\\TOOLCHAIN\\EXAMPLES\\DEBUGGING\\SRC\\MAIN.C" + DB 0 +L__3: + DB "dbg_test_var_2" + DB 0 +L__4: + DB "Assertion failure: %s, file: %s, line %d" + DB 10,0 + XREF _dbg_RemoveAllBreakpoints:ROM + XREF _dbg_RemoveAllWatchpoints:ROM + XREF _dbg_RemoveWatchpoint:ROM + XREF _dbg_SetWriteWatchpoint:ROM + XREF _dbg_SetWatchpoint:ROM + XREF _dbg_Debugger:ROM + XREF _sprintf:ROM + XREF _abort:ROM + XDEF _main + END diff --git a/frontends/calculator/CEdev/examples/debugging/readme.md b/frontends/calculator/CEdev/examples/debugging/readme.md new file mode 100644 index 0000000..9d95f90 --- /dev/null +++ b/frontends/calculator/CEdev/examples/debugging/readme.md @@ -0,0 +1,10 @@ +### Debugging Demo + +This demo demonstrates how to use a few of the debugging features implemented in CEmu + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/debugging/screenshot.png b/frontends/calculator/CEdev/examples/debugging/screenshot.png new file mode 100644 index 0000000..7c7ab17 Binary files /dev/null and b/frontends/calculator/CEdev/examples/debugging/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/debugging/src/main.c b/frontends/calculator/CEdev/examples/debugging/src/main.c new file mode 100644 index 0000000..67b5bac --- /dev/null +++ b/frontends/calculator/CEdev/examples/debugging/src/main.c @@ -0,0 +1,47 @@ +#include +#include +#include +#include + +#include +#include + +/* + * Even though debug.h has prototypes for Debugger, SetWriteWatchpoint, SetWatchpoint, RemoveWatchpoint, RemoveAllWatchpoints, RemoveAllBreakpoints... + * you have to use the dbg_ prefix as shown here: + */ + +void main(void) { + /* Set the intial value of some variables */ + int dbg_test_var_1 = 10; + uint8_t dbg_test_var_2 = 3; + + /* Print a simple debugging string */ + dbg_sprintf(dbgout, "This is the start of a CEmu debugging test\n"); + + /* You can enter the debugger manually */ + dbg_Debugger(); + + /* Set a watchpoint that will break anytime we write/change this variable */ + dbg_SetWriteWatchpoint(&dbg_test_var_1, sizeof dbg_test_var_1); + + /* Set a non breaking watchpoint just so we can see what is in this variable at any given time */ + dbg_SetWatchpoint(&dbg_test_var_2, sizeof dbg_test_var_2); + + /* Now, let's write to the variable to see what happens (Go to the 'Watchpoints' tab in CEmu to view the status) */ + dbg_test_var_1 = 5; + + /* Remove the watchpoint that we had set */ + dbg_RemoveWatchpoint(&dbg_test_var_1); + dbg_RemoveWatchpoint(&dbg_test_var_2); + + /* We can also use those */ + dbg_RemoveAllWatchpoints(); + dbg_RemoveAllBreakpoints(); + + /* Set this value to zero */ + dbg_test_var_2 = 0; + + /* Fail this assertion */ + assert(dbg_test_var_2); +} diff --git a/frontends/calculator/CEdev/examples/delay/autotester.json b/frontends/calculator/CEdev/examples/delay/autotester.json new file mode 100644 index 0000000..4eabd14 --- /dev/null +++ b/frontends/calculator/CEdev/examples/delay/autotester.json @@ -0,0 +1,39 @@ +{ + "__comment": "FIXME timing is way too lenient because the autotester framework and travis are trash", + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "hashWait|1", + "delay|4500", + "hashWait|2", + "hashWait|3" + ], + "hashes": { + "1": { + "description": "Waiting for 5000 ms...", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "690F0EEC" ] + }, + "2": { + "description": "Done", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "948248E" ], + "timeout": 1100 + }, + "3": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} diff --git a/frontends/calculator/CEdev/examples/delay/makefile b/frontends/calculator/CEdev/examples/delay/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/delay/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/delay/readme.md b/frontends/calculator/CEdev/examples/delay/readme.md new file mode 100644 index 0000000..0110f27 --- /dev/null +++ b/frontends/calculator/CEdev/examples/delay/readme.md @@ -0,0 +1,9 @@ +### Delay Demo + +Demonstrates using the millisecond delay function in tice.h. + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. diff --git a/frontends/calculator/CEdev/examples/delay/src/main.c b/frontends/calculator/CEdev/examples/delay/src/main.c new file mode 100644 index 0000000..2fb8c41 --- /dev/null +++ b/frontends/calculator/CEdev/examples/delay/src/main.c @@ -0,0 +1,16 @@ +#include +#include +#include +#include + +void main(void) { + /* Clear the homescreen */ + os_ClrHome(); + + /* Wait for 5 seconds */ + os_PutStrFull("Waiting for 5000 ms..."); + delay(5000); + os_SetCursorPos(1, 22); + os_PutStrFull("Done"); + delay(100); +} diff --git a/frontends/calculator/CEdev/examples/fileio_detect/autotester.json b/frontends/calculator/CEdev/examples/fileio_detect/autotester.json new file mode 100644 index 0000000..b8563a6 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detect/autotester.json @@ -0,0 +1,33 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|1000", + "hash|1", + "key|enter", + "delay|200", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "'LibLoad' is displayed", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "D874E0B0" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.8xp b/frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.8xp new file mode 100644 index 0000000..d4fc967 Binary files /dev/null and b/frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.8xp differ diff --git a/frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.bin b/frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.bin new file mode 100644 index 0000000..a2a9ac4 Binary files /dev/null and b/frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.bin differ diff --git a/frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.map b/frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.map new file mode 100644 index 0000000..082420b --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.map @@ -0,0 +1,148 @@ +Segment Base Top High Length +-------- ------ ------ ------ ------- +icon D1A882 D1A882 0h +launcher D1A882 D1A8DA 58h +libs D1A8DA D1A8F6 1Ch +startup D1A8F6 D1A935 3Fh +cleanup D1A935 D1A949 14h +exit D1A949 D1A94F 6h +code D1A94F D1AA3B ECh +data D1AA3B D1AA5D 22h +strsect D1AA5D D1AA5D 0h +text D1AA5D D1AA60 3h +bss D031F6 D031F6 D13FD6 0h +header D1A87F D1A882 3h + +Label Value +------------------------- ------ +_os_DisableHomeTextBuffer = D1A94F +_os_EnableHomeTextBuffer = D1A961 +_boot_GetBootMajorVer = 000080 +_boot_GetHardwareVer = 000084 +_boot_GetBootMinorVer = 00008C +_boot_DebugPrintf = 0000B4 +_boot_ClearVRAM = 000374 +_boot_TurnOff = 000388 +_boot_NewLine = 000390 +_boot_Set6MHzMode = 00039C +_boot_Set48MHzMode = 0003A0 +_boot_Set6MHzModeI = 0003A4 +_boot_Set48MHzModeI = 0003A8 +_boot_GetBatteryStatus = 0003B0 +_boot_WaitShort = 0003B4 +_boot_CheckOnPressed = 00057C +_boot_SetDate = 000598 +_boot_GetDate = 0005A8 +_boot_GetTime = 0005B0 +_boot_SetTime = 0005B4 +_boot_IsAfterNoon = 0005C8 +_os_NewLine = 0207F0 +_os_PushErrorHandler = 021C78 +_os_PopErrorHandler = 021C7C +_os_ThrowError = 021C80 +_os_RealCopy = 021C84 +_os_RealAsinRad = 021C88 +_os_RealAcosRad = 021C8C +_os_RealAtanRad = 021C90 +_os_RealAdd = 021C94 +_os_CplxSquare = 021C98 +_os_RealCompare = 021C9C +_os_RealCosRad = 021CA0 +_os_RealRadToDeg = 021CA4 +_os_RealDiv = 021CA8 +_os_RealExp = 021CAC +_os_RealFloor = 021CB0 +_os_RealToStr = 021CB4 +_os_RealFrac = 021CB8 +_os_RealGcd = 021CBC +_os_RealRoundInt = 021CC0 +_os_RealLcm = 021CC4 +_os_RealLog = 021CC8 +_os_RealMax = 021CCC +_os_RealMin = 021CD0 +_os_RealMul = 021CD4 +_os_RealNcr = 021CD8 +_os_RealNeg = 021CDC +_os_RealNpr = 021CE0 +_os_RealPow = 021CE4 +_os_RealDegToRad = 021CE8 +_os_RealRandInt = 021CEC +_os_RealInv = 021CF0 +_os_RealMod = 021CF4 +_os_RealRound = 021CF8 +_os_RealSinRad = 021CFC +_os_RealSqrt = 021D00 +_os_RealSub = 021D04 +_os_RealTanRad = 021D08 +_os_StrToReal = 021D0C +_os_RealInt = 021D10 +_os_SetFlagBits = 021D14 +_os_ResetFlagBits = 021D18 +_os_TestFlagBits = 021D1C +_os_SetFlagByte = 021D20 +_os_GetFlagByte = 021D24 +_os_GetCursorPos = 021D28 +_os_PutStrFull = 021D2C +_os_PutStrLine = 021D30 +_os_SetCursorPos = 021D34 +_os_AppInit = 021D40 +_os_GetKey = 021D38 +_os_GetCSC = 021D3C +_os_DisableCursor = 021DE4 +_os_EnableCursor = 021DE8 +_os_FontDrawText = 021E00 +_os_FontGetHeight = 021E14 +_os_FontGetWidth = 021E18 +_os_InitDrawing = 021E1C +_os_SetDrawBGColor = 021E20 +_os_SetDrawFGColor = 021E24 +_os_FontSelect = 021E28 +_os_RclAns = 021E70 +_os_SetTimer1 = 021EC8 +_os_DisableTimer1 = 021ECC +_os_GetSystemStats = 021ED4 +_os_GetDrawBGColor = 021EE4 +_os_GetDrawFGColor = 021EE8 +_os_FontGetID = 021EEC +_os_RealToInt24 = 021EF4 +_os_Int24ToReal = 021EF8 +_os_ForceCmdNoChar = 021FA8 +_os_GetSymTablePtr = 021FB0 +_os_NextSymEntry = 021FB4 +_os_ChkFindSym = 021FB8 +_os_MemChk = 021FF0 +_os_SetTimer2 = 022080 +_os_DisableTimer2 = 022084 +_os_FloatToReal = 022170 +_os_RealToFloat = 022174 +_os_FontDrawTransText = 022178 +_os_CreateAppVar = 022184 +_asm_MoveDown = 0207F4 +_asm_MoveUp = 020800 +_asm_ClrLCDFull = 020808 +_asm_ClrLCD = 02080C +_asm_ClrTxtShd = 020818 +_asm_HomeUp = 020828 +_asm_RunIndicOn = 020844 +_asm_RunIndicOff = 020848 +_asm_DelRes = 020E5C +_asm_DisableAPD = 021134 +_asm_EnableAPD = 021138 +_asm_DrawStatusBar = 021A3C +_asm_ArcChk = 022040 +__OS = D1A973 +__frameset0 = D1A97D +__icmpzero = D1A988 +__frameset = D1A98D +__findlibload = D1A882 +__ccleanup = D1A935 +_errno = D008DC +_init = D1A882 +_exit = D1A94B +__exit = D1A924 +__exitsp = D1A924 +__errsp = D1A924 +_printText = D1AA19 +_main = D1A99B +_ti_CloseAll = D1A8EE +_ti_Detect = D1A8F2 diff --git a/frontends/calculator/CEdev/examples/fileio_detect/makefile b/frontends/calculator/CEdev/examples/fileio_detect/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detect/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/fileio_detect/obj/main.src b/frontends/calculator/CEdev/examples/fileio_detect/obj/main.src new file mode 100644 index 0000000..aef9b8b --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detect/obj/main.src @@ -0,0 +1,182 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -noreduceopt -nomodsect -peephole -globalopt +; -localcse -const=ROM + FILE "SRC\MAIN.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 #include +; 4 #include +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 +; 10 #include +; 11 +; 12 /* Function prototypes */ +; 13 void printText(int8_t xpos, int8_t ypos, const char *text); +; 14 +; 15 /* Main Function */ +; 16 void main(void) { +_main: + LD HL,-10 + CALL __frameset +; 17 /* Declare some variables -- search_pos must be NULL to begin with */ +; 18 uint8_t *search_pos = NULL; + LD BC,0 + LD (IX+-10),BC +; 19 int8_t y = 0; + LD (IX+-1),0 +; 20 ti_var_t myVar; +; 21 char *var_name; +; 22 +; 23 /* First couple bytes of the LibLoad AppVar, which is known to exist * +; 24 /* Technically is a null-terminated string, if an odd looking one */ +; 25 const char search_string[] = { 0xBF, 0xFE, 0x00 }; + LEA DE,IX+-7 +; 26 +; 27 /* Clear the homescreen */ +; 28 os_ClrHome(); + LD BC,_asm_ClrLCD + PUSH BC + LD HL,_0temp0 + LD BC,3 + LDIR + CALL __OS + POP BC + LD BC,_asm_HomeUp + PUSH BC + CALL __OS + POP BC + LD BC,_asm_DrawStatusBar + PUSH BC + CALL __OS + POP BC + JR L_4 +; 29 +; 30 /* Find all of the variables that start with this string */ +; 31 while ((var_name = ti_Detect(&search_pos, search_string)) != NULL) { +L_5: +; 32 /* Print the name of the variable (Should be LibLoad) */ +; 33 printText(0, y++, var_name); + LD C,(IX+-1) + INC (IX+-1) + LD DE,(IX+-4) + PUSH DE + LD B,0 + PUSH BC + LD BC,0 + PUSH BC + CALL _printText + POP BC + POP BC + POP BC +; 34 } +L_4: + PEA IX+-7 + PEA IX+-10 + CALL _ti_Detect + POP BC + POP BC + LD (IX+-4),HL + CALL __icmpzero + JR NZ,L_5 +; 35 +; 36 /* Wait for a key */ +; 37 while (!os_GetCSC()); +L_8: + CALL _os_GetCSC + OR A,A + JR Z,L_8 +; 38 +; 39 /* Close all open files */ +; 40 ti_CloseAll(); + CALL _ti_CloseAll +; 41 } + LD SP,IX + POP IX + RET + + +;**************************** _main *************************** +;Name Addr/Register Size Type +;_ti_CloseAll IMPORT ----- function +;_os_GetCSC IMPORT ----- function +;_ti_Detect IMPORT ----- function +;_printText IMPORT ----- function +;_asm_DrawStatusBar IMPORT ----- function +;_asm_HomeUp IMPORT ----- function +;_asm_ClrLCD IMPORT ----- function +;__OS IMPORT ----- function +;_0temp0 STATIC 3 variable +;search_pos IX-10 3 variable +;search_string IX-7 3 variable +;var_name IX-4 3 variable +;y IX-1 1 variable + + +; Stack Frame Size: 16 (bytes) +; Spill Code: 0 (instruction) + + + SEGMENT TEXT +_0temp0: + DB 191 + DB 254 + DB 0 + SEGMENT CODE +; 42 +; 43 /* Draw text on the homescreen at the given X/Y location */ +; 44 void printText(int8_t xpos, int8_t ypos, const char *text) { +_printText: + CALL __frameset0 +; 45 os_SetCursorPos(ypos, xpos); + LD C,(IX+6) + LD B,0 + PUSH BC + LD C,(IX+9) + PUSH BC + CALL _os_SetCursorPos + POP BC + POP BC +; 46 os_PutStrFull(text); + LD BC,(IX+12) + PUSH BC + CALL _os_PutStrFull + POP BC +; 47 } + LD SP,IX + POP IX + RET + + +;**************************** _printText *************************** +;Name Addr/Register Size Type +;_os_PutStrFull IMPORT ----- function +;_os_SetCursorPos IMPORT ----- function +;text IX+12 3 parameter +;ypos IX+9 1 parameter +;xpos IX+6 1 parameter + + +; Stack Frame Size: 15 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_Detect:ROM + XREF _ti_CloseAll:ROM + XREF _asm_DrawStatusBar:ROM + XREF _asm_ClrLCD:ROM + XREF _asm_HomeUp:ROM + XREF __OS:ROM + XREF _os_GetCSC:ROM + XREF _os_PutStrFull:ROM + XREF _os_SetCursorPos:ROM + XREF __frameset0:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _printText + XDEF _main + END diff --git a/frontends/calculator/CEdev/examples/fileio_detect/readme.md b/frontends/calculator/CEdev/examples/fileio_detect/readme.md new file mode 100644 index 0000000..41ecb73 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detect/readme.md @@ -0,0 +1,11 @@ +### FileIO File Detection Demo + +This demo shows how to use the ti_Detect function to search for a varible that starts with a particular sequence of bytes +LibLoad is used because it is known to exist for demonstration. + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/fileio_detect/screenshot.png b/frontends/calculator/CEdev/examples/fileio_detect/screenshot.png new file mode 100644 index 0000000..d5c9e73 Binary files /dev/null and b/frontends/calculator/CEdev/examples/fileio_detect/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/fileio_detect/src/main.c b/frontends/calculator/CEdev/examples/fileio_detect/src/main.c new file mode 100644 index 0000000..d3be5a5 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detect/src/main.c @@ -0,0 +1,47 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include + +/* Function prototypes */ +void printText(int8_t xpos, int8_t ypos, const char *text); + +/* Main Function */ +void main(void) { + /* Declare some variables -- search_pos must be NULL to begin with */ + uint8_t *search_pos = NULL; + int8_t y = 0; + ti_var_t myVar; + char *var_name; + + /* First couple bytes of the LibLoad AppVar, which is known to exist * + /* Technically is a null-terminated string, if an odd looking one */ + const char search_string[] = { 0xBF, 0xFE, 0x00 }; + + /* Clear the homescreen */ + os_ClrHome(); + + /* Find all of the variables that start with this string */ + while ((var_name = ti_Detect(&search_pos, search_string)) != NULL) { + /* Print the name of the variable (Should be LibLoad) */ + printText(0, y++, var_name); + } + + /* Wait for a key */ + while (!os_GetCSC()); + + /* Close all open files */ + ti_CloseAll(); +} + +/* Draw text on the homescreen at the given X/Y location */ +void printText(int8_t xpos, int8_t ypos, const char *text) { + os_SetCursorPos(ypos, xpos); + os_PutStrFull(text); +} diff --git a/frontends/calculator/CEdev/examples/fileio_detectany/autotester.json b/frontends/calculator/CEdev/examples/fileio_detectany/autotester.json new file mode 100644 index 0000000..b8563a6 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detectany/autotester.json @@ -0,0 +1,33 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|1000", + "hash|1", + "key|enter", + "delay|200", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "'LibLoad' is displayed", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "D874E0B0" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.8xp b/frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.8xp new file mode 100644 index 0000000..9bd4645 Binary files /dev/null and b/frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.8xp differ diff --git a/frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.bin b/frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.bin new file mode 100644 index 0000000..36a8f64 Binary files /dev/null and b/frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.bin differ diff --git a/frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.map b/frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.map new file mode 100644 index 0000000..4b8f06a --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.map @@ -0,0 +1,148 @@ +Segment Base Top High Length +-------- ------ ------ ------ ------- +icon D1A882 D1A882 0h +launcher D1A882 D1A8DA 58h +libs D1A8DA D1A8F6 1Ch +startup D1A8F6 D1A935 3Fh +cleanup D1A935 D1A949 14h +exit D1A949 D1A94F 6h +code D1A94F D1AA46 F7h +data D1AA46 D1AA68 22h +strsect D1AA68 D1AA68 0h +text D1AA68 D1AA6B 3h +bss D031F6 D031F6 D13FD6 0h +header D1A87F D1A882 3h + +Label Value +------------------------- ------ +_os_DisableHomeTextBuffer = D1A94F +_os_EnableHomeTextBuffer = D1A961 +_boot_GetBootMajorVer = 000080 +_boot_GetHardwareVer = 000084 +_boot_GetBootMinorVer = 00008C +_boot_DebugPrintf = 0000B4 +_boot_ClearVRAM = 000374 +_boot_TurnOff = 000388 +_boot_NewLine = 000390 +_boot_Set6MHzMode = 00039C +_boot_Set48MHzMode = 0003A0 +_boot_Set6MHzModeI = 0003A4 +_boot_Set48MHzModeI = 0003A8 +_boot_GetBatteryStatus = 0003B0 +_boot_WaitShort = 0003B4 +_boot_CheckOnPressed = 00057C +_boot_SetDate = 000598 +_boot_GetDate = 0005A8 +_boot_GetTime = 0005B0 +_boot_SetTime = 0005B4 +_boot_IsAfterNoon = 0005C8 +_os_NewLine = 0207F0 +_os_PushErrorHandler = 021C78 +_os_PopErrorHandler = 021C7C +_os_ThrowError = 021C80 +_os_RealCopy = 021C84 +_os_RealAsinRad = 021C88 +_os_RealAcosRad = 021C8C +_os_RealAtanRad = 021C90 +_os_RealAdd = 021C94 +_os_CplxSquare = 021C98 +_os_RealCompare = 021C9C +_os_RealCosRad = 021CA0 +_os_RealRadToDeg = 021CA4 +_os_RealDiv = 021CA8 +_os_RealExp = 021CAC +_os_RealFloor = 021CB0 +_os_RealToStr = 021CB4 +_os_RealFrac = 021CB8 +_os_RealGcd = 021CBC +_os_RealRoundInt = 021CC0 +_os_RealLcm = 021CC4 +_os_RealLog = 021CC8 +_os_RealMax = 021CCC +_os_RealMin = 021CD0 +_os_RealMul = 021CD4 +_os_RealNcr = 021CD8 +_os_RealNeg = 021CDC +_os_RealNpr = 021CE0 +_os_RealPow = 021CE4 +_os_RealDegToRad = 021CE8 +_os_RealRandInt = 021CEC +_os_RealInv = 021CF0 +_os_RealMod = 021CF4 +_os_RealRound = 021CF8 +_os_RealSinRad = 021CFC +_os_RealSqrt = 021D00 +_os_RealSub = 021D04 +_os_RealTanRad = 021D08 +_os_StrToReal = 021D0C +_os_RealInt = 021D10 +_os_SetFlagBits = 021D14 +_os_ResetFlagBits = 021D18 +_os_TestFlagBits = 021D1C +_os_SetFlagByte = 021D20 +_os_GetFlagByte = 021D24 +_os_GetCursorPos = 021D28 +_os_PutStrFull = 021D2C +_os_PutStrLine = 021D30 +_os_SetCursorPos = 021D34 +_os_AppInit = 021D40 +_os_GetKey = 021D38 +_os_GetCSC = 021D3C +_os_DisableCursor = 021DE4 +_os_EnableCursor = 021DE8 +_os_FontDrawText = 021E00 +_os_FontGetHeight = 021E14 +_os_FontGetWidth = 021E18 +_os_InitDrawing = 021E1C +_os_SetDrawBGColor = 021E20 +_os_SetDrawFGColor = 021E24 +_os_FontSelect = 021E28 +_os_RclAns = 021E70 +_os_SetTimer1 = 021EC8 +_os_DisableTimer1 = 021ECC +_os_GetSystemStats = 021ED4 +_os_GetDrawBGColor = 021EE4 +_os_GetDrawFGColor = 021EE8 +_os_FontGetID = 021EEC +_os_RealToInt24 = 021EF4 +_os_Int24ToReal = 021EF8 +_os_ForceCmdNoChar = 021FA8 +_os_GetSymTablePtr = 021FB0 +_os_NextSymEntry = 021FB4 +_os_ChkFindSym = 021FB8 +_os_MemChk = 021FF0 +_os_SetTimer2 = 022080 +_os_DisableTimer2 = 022084 +_os_FloatToReal = 022170 +_os_RealToFloat = 022174 +_os_FontDrawTransText = 022178 +_os_CreateAppVar = 022184 +_asm_MoveDown = 0207F4 +_asm_MoveUp = 020800 +_asm_ClrLCDFull = 020808 +_asm_ClrLCD = 02080C +_asm_ClrTxtShd = 020818 +_asm_HomeUp = 020828 +_asm_RunIndicOn = 020844 +_asm_RunIndicOff = 020848 +_asm_DelRes = 020E5C +_asm_DisableAPD = 021134 +_asm_EnableAPD = 021138 +_asm_DrawStatusBar = 021A3C +_asm_ArcChk = 022040 +__OS = D1A973 +__frameset0 = D1A97D +__icmpzero = D1A988 +__frameset = D1A98D +__findlibload = D1A882 +__ccleanup = D1A935 +_errno = D008DC +_init = D1A882 +_exit = D1A94B +__exit = D1A924 +__exitsp = D1A924 +__errsp = D1A924 +_printText = D1AA24 +_main = D1A99B +_ti_CloseAll = D1A8EE +_ti_DetectAny = D1A8F2 diff --git a/frontends/calculator/CEdev/examples/fileio_detectany/makefile b/frontends/calculator/CEdev/examples/fileio_detectany/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detectany/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/fileio_detectany/obj/main.src b/frontends/calculator/CEdev/examples/fileio_detectany/obj/main.src new file mode 100644 index 0000000..4e2f655 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detectany/obj/main.src @@ -0,0 +1,190 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -noreduceopt -nomodsect -peephole -globalopt +; -localcse -const=ROM + FILE "SRC\MAIN.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 #include +; 4 #include +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 +; 10 #include +; 11 +; 12 /* Function prototypes */ +; 13 void printText(int8_t xpos, int8_t ypos, const char *text); +; 14 +; 15 /* Main Function */ +; 16 void main(void) { +_main: + LD HL,-11 + CALL __frameset +; 17 /* Declare some variables -- search_pos must be NULL to begin with */ +; 18 uint8_t *search_pos = NULL, type; + LD BC,0 + LD (IX+-11),BC +; 19 int8_t y = 0; + LD (IX+-1),0 +; 20 ti_var_t myVar; +; 21 char *var_name; +; 22 +; 23 /* First couple bytes of the LibLoad AppVar, which is known to exist * +; 24 /* Technically is a null-terminated string, if an odd looking one */ +; 25 const char search_string[] = { 0xBF, 0xFE, 0x00 }; + LEA DE,IX+-8 +; 26 +; 27 /* Clear the homescreen */ +; 28 os_ClrHome(); + LD BC,_asm_ClrLCD + PUSH BC + LD HL,_0temp0 + LD BC,3 + LDIR + CALL __OS + POP BC + LD BC,_asm_HomeUp + PUSH BC + CALL __OS + POP BC + LD BC,_asm_DrawStatusBar + PUSH BC + CALL __OS + POP BC + JR L_5 +; 29 +; 30 /* Find all of the variables that start with this string */ +; 31 while ((var_name = ti_DetectAny(&search_pos, search_string, &type)) != NULL) { +L_6: +; 32 if (type == TI_APPVAR_TYPE) { + LD A,(IX+-2) + CP A,21 + JR NZ,L_5 +; 33 /* Print the name of the variable (Should be LibLoad) */ +; 34 printText(0, y++, var_name); + LD C,(IX+-1) + INC (IX+-1) + LD DE,(IX+-5) + PUSH DE + LD B,0 + PUSH BC + LD BC,0 + PUSH BC + CALL _printText + POP BC + POP BC + POP BC +; 35 } +; 36 } +L_5: + PEA IX+-2 + PEA IX+-8 + PEA IX+-11 + CALL _ti_DetectAny + POP BC + POP BC + POP BC + LD (IX+-5),HL + CALL __icmpzero + JR NZ,L_6 +; 37 +; 38 /* Wait for a key */ +; 39 while (!os_GetCSC()); +L_9: + CALL _os_GetCSC + OR A,A + JR Z,L_9 +; 40 +; 41 /* Close all open files */ +; 42 ti_CloseAll(); + CALL _ti_CloseAll +; 43 } + LD SP,IX + POP IX + RET + + +;**************************** _main *************************** +;Name Addr/Register Size Type +;_ti_CloseAll IMPORT ----- function +;_os_GetCSC IMPORT ----- function +;_ti_DetectAny IMPORT ----- function +;_printText IMPORT ----- function +;_asm_DrawStatusBar IMPORT ----- function +;_asm_HomeUp IMPORT ----- function +;_asm_ClrLCD IMPORT ----- function +;__OS IMPORT ----- function +;_0temp0 STATIC 3 variable +;search_pos IX-11 3 variable +;search_string IX-8 3 variable +;var_name IX-5 3 variable +;type IX-2 1 variable +;y IX-1 1 variable + + +; Stack Frame Size: 17 (bytes) +; Spill Code: 0 (instruction) + + + SEGMENT TEXT +_0temp0: + DB 191 + DB 254 + DB 0 + SEGMENT CODE +; 44 +; 45 /* Draw text on the homescreen at the given X/Y location */ +; 46 void printText(int8_t xpos, int8_t ypos, const char *text) { +_printText: + CALL __frameset0 +; 47 os_SetCursorPos(ypos, xpos); + LD C,(IX+6) + LD B,0 + PUSH BC + LD C,(IX+9) + PUSH BC + CALL _os_SetCursorPos + POP BC + POP BC +; 48 os_PutStrFull(text); + LD BC,(IX+12) + PUSH BC + CALL _os_PutStrFull + POP BC +; 49 } + LD SP,IX + POP IX + RET + + +;**************************** _printText *************************** +;Name Addr/Register Size Type +;_os_PutStrFull IMPORT ----- function +;_os_SetCursorPos IMPORT ----- function +;text IX+12 3 parameter +;ypos IX+9 1 parameter +;xpos IX+6 1 parameter + + +; Stack Frame Size: 15 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_DetectAny:ROM + XREF _ti_CloseAll:ROM + XREF _asm_DrawStatusBar:ROM + XREF _asm_ClrLCD:ROM + XREF _asm_HomeUp:ROM + XREF __OS:ROM + XREF _os_GetCSC:ROM + XREF _os_PutStrFull:ROM + XREF _os_SetCursorPos:ROM + XREF __frameset0:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _printText + XDEF _main + END diff --git a/frontends/calculator/CEdev/examples/fileio_detectany/readme.md b/frontends/calculator/CEdev/examples/fileio_detectany/readme.md new file mode 100644 index 0000000..21a7e26 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detectany/readme.md @@ -0,0 +1,11 @@ +### FileIO File Detection Demo + +This demo shows how to use the ti_DetectAny function to search for a variable that starts with a particular sequence of bytes +LibLoad is used because it is known to exist for demonstration. + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/fileio_detectany/screenshot.png b/frontends/calculator/CEdev/examples/fileio_detectany/screenshot.png new file mode 100644 index 0000000..d5c9e73 Binary files /dev/null and b/frontends/calculator/CEdev/examples/fileio_detectany/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/fileio_detectany/src/main.c b/frontends/calculator/CEdev/examples/fileio_detectany/src/main.c new file mode 100644 index 0000000..6809123 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detectany/src/main.c @@ -0,0 +1,49 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include + +/* Function prototypes */ +void printText(int8_t xpos, int8_t ypos, const char *text); + +/* Main Function */ +void main(void) { + /* Declare some variables -- search_pos must be NULL to begin with */ + uint8_t *search_pos = NULL, type; + int8_t y = 0; + ti_var_t myVar; + char *var_name; + + /* First couple bytes of the LibLoad AppVar, which is known to exist * + /* Technically is a null-terminated string, if an odd looking one */ + const char search_string[] = { 0xBF, 0xFE, 0x00 }; + + /* Clear the homescreen */ + os_ClrHome(); + + /* Find all of the variables that start with this string */ + while ((var_name = ti_DetectAny(&search_pos, search_string, &type)) != NULL) { + if (type == TI_APPVAR_TYPE) { + /* Print the name of the variable (Should be LibLoad) */ + printText(0, y++, var_name); + } + } + + /* Wait for a key */ + while (!os_GetCSC()); + + /* Close all open files */ + ti_CloseAll(); +} + +/* Draw text on the homescreen at the given X/Y location */ +void printText(int8_t xpos, int8_t ypos, const char *text) { + os_SetCursorPos(ypos, xpos); + os_PutStrFull(text); +} diff --git a/frontends/calculator/CEdev/examples/fileio_factorize/autotester.badjson b/frontends/calculator/CEdev/examples/fileio_factorize/autotester.badjson new file mode 100644 index 0000000..1e97c78 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_factorize/autotester.badjson @@ -0,0 +1,37 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", --> type input in Ans ; expect known output back in Ans + "delay|500", + "hash|1", + "key|enter", + "delay|200", + "hash|2" + ], + +******* Broken JSON TODO : +******* implement autotester var handling feature ******* + + "hashes": { + "1": { + "description": "Variable Ans is a list [TODO]", + "start": "var_complex_B", + "size": "var_size", + "expected_CRCs": [ "" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/fileio_factorize/makefile b/frontends/calculator/CEdev/examples/fileio_factorize/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_factorize/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/fileio_factorize/readme.md b/frontends/calculator/CEdev/examples/fileio_factorize/readme.md new file mode 100644 index 0000000..196474c --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_factorize/readme.md @@ -0,0 +1,12 @@ +### FileIO Factorize Demo + +This demo demonstrates a way to compute the factors of a input number in Ans + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + + + diff --git a/frontends/calculator/CEdev/examples/fileio_factorize/screenshot.png b/frontends/calculator/CEdev/examples/fileio_factorize/screenshot.png new file mode 100644 index 0000000..924c14d Binary files /dev/null and b/frontends/calculator/CEdev/examples/fileio_factorize/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/fileio_factorize/src/main.c b/frontends/calculator/CEdev/examples/fileio_factorize/src/main.c new file mode 100644 index 0000000..3be9992 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_factorize/src/main.c @@ -0,0 +1,75 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include + +void prime_factors(unsigned int n); + +int primes[512]; +unsigned int total_primes = 0; + +/* Main Function */ +void main(void) { + /* Declare some variables */ + real_t *real_in; + list_t *list_out; + unsigned i; + int in; + + /* Clear the homescreen */ + os_ClrHome(); + + /* Get the answer variable */ + if (ti_RclVar(TI_REAL_TYPE, ti_Ans, &real_in)) return; + if ((in = os_RealToInt24(real_in)) < 1) return; + + /* Get the prime factors of the input */ + prime_factors((unsigned)in); + + /* Create a list to store the primes */ + if (!total_primes) return; + list_out = ti_MallocList(total_primes); // Same as ti_AllocList(total_primes, malloc) + + /* Write out the list of primes */ + for (i=0; iitems[i] = os_Int24ToReal(primes[i]); + } + + /* Set the new answer */ + ti_SetVar(TI_REAL_LIST_TYPE, ti_Ans, list_out); +} + +/* Store to an array all the prime numbers */ +void prime_factors(unsigned int n) { + unsigned int div, end; + + while (!(n % 2)) { + primes[total_primes++] = 2; + n /= 2; + } + + if (n == 1) return; + + div = 3; + end = sqrt(n); + + while (div <= end) { + if (!(n % div)) { + do { + primes[total_primes++] = div; + n /= div; + } while (!(n % div)); + if (n == 1) return; + end = sqrt(n); + } + div += 2; + } + + primes[total_primes++] = n; +} diff --git a/frontends/calculator/CEdev/examples/fileio_os_vars/autotester.badjson b/frontends/calculator/CEdev/examples/fileio_os_vars/autotester.badjson new file mode 100644 index 0000000..dbf9e3d --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_os_vars/autotester.badjson @@ -0,0 +1,65 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|500", + "hash|1", + "hash|2", + "hash|3", + "hash|4", + "hash|5", + "key|enter", + "delay|200", + "hash|6" + ], + +******* Broken JSON TODO : +******* implement autotester var handling feature ******* + + "hashes": { + "1": { + "description": "Variable B is complex 1.5+2.5i", + "start": "var_complex_B", + "size": "var_size", + "expected_CRCs": [ "" ] + }, + "2": { + "description": "Variable A is real 1.5", + "start": "var_real_A", + "size": "var_size", + "expected_CRCs": [ "" ] + }, + "3": { + "description": "Variable Y1 is equation 2+2", + "start": "var", + "size": "var_equation_Y1", + "expected_CRCs": [ "" ] + }, + "4": { + "description": "Variable L1 is list {1.5,2.5,3.5}", + "start": "var", + "size": "var_list_L1", + "expected_CRCs": [ "" ] + }, + "5": { + "description": "Variable Ans is matrix [[2.5,2.5]]", + "start": "var_Ans", + "size": "var_size", + "expected_CRCs": [ "" ] + }, + "6": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/fileio_os_vars/makefile b/frontends/calculator/CEdev/examples/fileio_os_vars/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_os_vars/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/fileio_os_vars/readme.md b/frontends/calculator/CEdev/examples/fileio_os_vars/readme.md new file mode 100644 index 0000000..d628217 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_os_vars/readme.md @@ -0,0 +1,10 @@ +### FileIO OS Variables Demo + +This demo shows how to use the different OS variable accessing functions. + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/fileio_os_vars/screenshot.png b/frontends/calculator/CEdev/examples/fileio_os_vars/screenshot.png new file mode 100644 index 0000000..8bcb253 Binary files /dev/null and b/frontends/calculator/CEdev/examples/fileio_os_vars/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/fileio_os_vars/src/main.c b/frontends/calculator/CEdev/examples/fileio_os_vars/src/main.c new file mode 100644 index 0000000..657f9d9 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_os_vars/src/main.c @@ -0,0 +1,101 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +/* Some function prototypes. Maybe in the future these functions will become a library */ +cplx_t Int24sToCplx(int real, int imag); +cplx_t FloatsToCplx(float real, float imag); +cplx_t RealsToCplx(real_t real, real_t imag); +cplx_t StrsToCplx(char *real, char **real_end, char *imag, char **imag_end); + +/* Main Function */ +void main(void) { + /* Declare some variables */ + equ_t *my_equ; + list_t *my_list; + matrix_t *my_matrix; + real_t my_real; + cplx_t my_cplx; + real_t real_1_5 = os_FloatToReal(1.5); + real_t real_2_5 = os_FloatToReal(2.5); + real_t real_3_5 = os_FloatToReal(3.5); + + /* Store the value '1.5+2.5i' into the variable B */ + my_cplx = FloatsToCplx(1.5, 2.5); + ti_SetVar(TI_CPLX_TYPE, ti_B, &my_cplx); + + /* Store the value '1.5' into the variable A */ + my_real = real_1_5; + ti_SetVar(TI_REAL_TYPE, ti_A, &my_real); + + /* Store the equation "2+2" into the Y1 variable */ + my_equ = ti_MallocEqu(3); // Same as ti_AllocEqu(3, malloc) + my_equ->data[0] = '2'; + my_equ->data[1] = tAdd; + my_equ->data[2] = '2'; + ti_SetVar(TI_EQU_TYPE, ti_Y1, my_equ); + free(my_equ); + + /* Store the list {1.5,2.5,3.5} to L1 */ + my_list = ti_MallocList(3); // Same as ti_AllocList(3, malloc) + my_list->items[0] = real_1_5; + my_list->items[1] = real_2_5; + my_list->items[2] = real_3_5; + ti_SetVar(TI_REAL_LIST_TYPE, ti_L1, my_list); + free(my_list); + + /* Store the matrix [[2.5,2.5]] to Ans */ + my_matrix = ti_MallocMatrix(1,2); // Same as ti_AllocMatrix(1, 2, malloc) + matrix_element(my_matrix, 0, 0) = real_2_5; + matrix_element(my_matrix, 0, 1) = real_2_5; + ti_SetVar(TI_MATRIX_TYPE, ti_Ans, my_matrix); + free(my_matrix); +} + +/* Stores some ints to a complex variable type */ +cplx_t Int24sToCplx(int real, int imag) { + cplx_t res; + res.real = os_Int24ToReal(real); + res.real.sign |= TI_CPLX_TYPE; + res.imag = os_Int24ToReal(imag); + res.imag.sign |= TI_CPLX_TYPE; + return res; +} + +/* Stores some floats to a complex variable type */ +cplx_t FloatsToCplx(float real, float imag) { + cplx_t res; + res.real = os_FloatToReal(real); + res.real.sign |= TI_CPLX_TYPE; + res.imag = os_FloatToReal(imag); + res.imag.sign |= TI_CPLX_TYPE; + return res; +} + +/* Converts a pair of reals to a complex number */ +cplx_t RealsToCplx(real_t real, real_t imag) { + cplx_t res; + res.real = real; + res.real.sign |= TI_CPLX_TYPE; + res.imag = imag; + res.imag.sign |= TI_CPLX_TYPE; + return res; +} + +/* Converts strings to a complex variable type */ +cplx_t StrsToCplx(char *real, char **real_end, char *imag, char **imag_end) { + cplx_t res; + res.real = os_StrToReal(real, real_end); + res.real.sign |= TI_CPLX_TYPE; + res.imag = os_StrToReal(imag, imag_end); + res.imag.sign |= TI_CPLX_TYPE; + return res; +} diff --git a/frontends/calculator/CEdev/examples/fileio_read_write/autotester.json b/frontends/calculator/CEdev/examples/fileio_read_write/autotester.json new file mode 100644 index 0000000..bd30851 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_read_write/autotester.json @@ -0,0 +1,33 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|1000", + "hash|1", + "key|enter", + "delay|200", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "Assert that the read was succesful", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "D720F0D9" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.8xp b/frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.8xp new file mode 100644 index 0000000..8c3e091 Binary files /dev/null and b/frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.8xp differ diff --git a/frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.bin b/frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.bin new file mode 100644 index 0000000..0b69716 Binary files /dev/null and b/frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.bin differ diff --git a/frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.map b/frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.map new file mode 100644 index 0000000..7cf5131 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.map @@ -0,0 +1,154 @@ +Segment Base Top High Length +-------- ------ ------ ------ ------- +icon D1A882 D1A882 0h +launcher D1A882 D1A8DA 58h +libs D1A8DA D1A906 2Ch +startup D1A906 D1A945 3Fh +cleanup D1A945 D1A959 14h +exit D1A959 D1A95F 6h +code D1A95F D1AB0A 1ABh +data D1AB0A D1AB2F 25h +strsect D1AB2F D1AB6E 3Fh +text D1AB6E D1AB6E 0h +bss D031F6 D03207 D13FD6 11h +header D1A87F D1A882 3h + +Label Value +------------------------- ------ +_os_DisableHomeTextBuffer = D1A95F +_os_EnableHomeTextBuffer = D1A971 +_boot_GetBootMajorVer = 000080 +_boot_GetHardwareVer = 000084 +_boot_GetBootMinorVer = 00008C +_boot_DebugPrintf = 0000B4 +_boot_ClearVRAM = 000374 +_boot_TurnOff = 000388 +_boot_NewLine = 000390 +_boot_Set6MHzMode = 00039C +_boot_Set48MHzMode = 0003A0 +_boot_Set6MHzModeI = 0003A4 +_boot_Set48MHzModeI = 0003A8 +_boot_GetBatteryStatus = 0003B0 +_boot_WaitShort = 0003B4 +_boot_CheckOnPressed = 00057C +_boot_SetDate = 000598 +_boot_GetDate = 0005A8 +_boot_GetTime = 0005B0 +_boot_SetTime = 0005B4 +_boot_IsAfterNoon = 0005C8 +_os_NewLine = 0207F0 +_os_PushErrorHandler = 021C78 +_os_PopErrorHandler = 021C7C +_os_ThrowError = 021C80 +_os_RealCopy = 021C84 +_os_RealAsinRad = 021C88 +_os_RealAcosRad = 021C8C +_os_RealAtanRad = 021C90 +_os_RealAdd = 021C94 +_os_CplxSquare = 021C98 +_os_RealCompare = 021C9C +_os_RealCosRad = 021CA0 +_os_RealRadToDeg = 021CA4 +_os_RealDiv = 021CA8 +_os_RealExp = 021CAC +_os_RealFloor = 021CB0 +_os_RealToStr = 021CB4 +_os_RealFrac = 021CB8 +_os_RealGcd = 021CBC +_os_RealRoundInt = 021CC0 +_os_RealLcm = 021CC4 +_os_RealLog = 021CC8 +_os_RealMax = 021CCC +_os_RealMin = 021CD0 +_os_RealMul = 021CD4 +_os_RealNcr = 021CD8 +_os_RealNeg = 021CDC +_os_RealNpr = 021CE0 +_os_RealPow = 021CE4 +_os_RealDegToRad = 021CE8 +_os_RealRandInt = 021CEC +_os_RealInv = 021CF0 +_os_RealMod = 021CF4 +_os_RealRound = 021CF8 +_os_RealSinRad = 021CFC +_os_RealSqrt = 021D00 +_os_RealSub = 021D04 +_os_RealTanRad = 021D08 +_os_StrToReal = 021D0C +_os_RealInt = 021D10 +_os_SetFlagBits = 021D14 +_os_ResetFlagBits = 021D18 +_os_TestFlagBits = 021D1C +_os_SetFlagByte = 021D20 +_os_GetFlagByte = 021D24 +_os_GetCursorPos = 021D28 +_os_PutStrFull = 021D2C +_os_PutStrLine = 021D30 +_os_SetCursorPos = 021D34 +_os_AppInit = 021D40 +_os_GetKey = 021D38 +_os_GetCSC = 021D3C +_os_DisableCursor = 021DE4 +_os_EnableCursor = 021DE8 +_os_FontDrawText = 021E00 +_os_FontGetHeight = 021E14 +_os_FontGetWidth = 021E18 +_os_InitDrawing = 021E1C +_os_SetDrawBGColor = 021E20 +_os_SetDrawFGColor = 021E24 +_os_FontSelect = 021E28 +_os_RclAns = 021E70 +_os_SetTimer1 = 021EC8 +_os_DisableTimer1 = 021ECC +_os_GetSystemStats = 021ED4 +_os_GetDrawBGColor = 021EE4 +_os_GetDrawFGColor = 021EE8 +_os_FontGetID = 021EEC +_os_RealToInt24 = 021EF4 +_os_Int24ToReal = 021EF8 +_os_ForceCmdNoChar = 021FA8 +_os_GetSymTablePtr = 021FB0 +_os_NextSymEntry = 021FB4 +_os_ChkFindSym = 021FB8 +_os_MemChk = 021FF0 +_os_SetTimer2 = 022080 +_os_DisableTimer2 = 022084 +_os_FloatToReal = 022170 +_os_RealToFloat = 022174 +_os_FontDrawTransText = 022178 +_os_CreateAppVar = 022184 +_asm_MoveDown = 0207F4 +_asm_MoveUp = 020800 +_asm_ClrLCDFull = 020808 +_asm_ClrLCD = 02080C +_asm_ClrTxtShd = 020818 +_asm_HomeUp = 020828 +_asm_RunIndicOn = 020844 +_asm_RunIndicOff = 020848 +_asm_DelRes = 020E5C +_asm_DisableAPD = 021134 +_asm_EnableAPD = 021138 +_asm_DrawStatusBar = 021A3C +_asm_ArcChk = 022040 +__OS = D1A983 +__frameset0 = D1A98D +__frameset = D1A998 +_strcpy = 0000CC +__findlibload = D1A882 +__ccleanup = D1A945 +_errno = D008DC +_init = D1A882 +_exit = D1A95B +__exit = D1A934 +__exitsp = D1A934 +__errsp = D1A934 +_printText = D1AAE8 +_main = D1A9A6 +_data = D031F6 +_appvarName = D1AB2C +_ti_CloseAll = D1A8EE +_ti_Open = D1A8F2 +_ti_Write = D1A8F6 +_ti_Read = D1A8FA +_ti_Rewind = D1A8FE +_ti_GetName = D1A902 diff --git a/frontends/calculator/CEdev/examples/fileio_read_write/makefile b/frontends/calculator/CEdev/examples/fileio_read_write/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_read_write/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/fileio_read_write/obj/main.src b/frontends/calculator/CEdev/examples/fileio_read_write/obj/main.src new file mode 100644 index 0000000..3371816 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_read_write/obj/main.src @@ -0,0 +1,343 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -noreduceopt -nomodsect -peephole -globalopt +; -localcse -const=ROM + FILE "SRC\MAIN.C" + .assume ADL=1 + SEGMENT STRSECT +L__0: + DB "AppVar" + DB 0 + SEGMENT DATA +_appvarName: + DW24 L__0 + SEGMENT BSS +_data: + DS 17 +; 1 #include +; 2 #include +; 3 #include +; 4 #include +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 +; 10 #include +; 11 +; 12 /* Declare some variables */ +; 13 const char *appvarName = "AppVar"; +; 14 +; 15 typedef struct { +; 16 char name[15]; +; 17 uint8_t var1; +; 18 uint8_t var2; +; 19 } data_t; +; 20 +; 21 data_t data; + SEGMENT CODE +; 22 +; 23 #define VAR1_VALUE 10 +; 24 #define VAR2_VALUE 20 +; 25 +; 26 /* Function prototypes */ +; 27 void printText(int8_t xpos, int8_t ypos, const char *text); +; 28 +; 29 /* Main Function */ +; 30 void main(void) { +_main: + LD HL,-11 + CALL __frameset +; 31 char nameBuffer[10]; +; 32 ti_var_t myAppVar; +; 33 int x; +; 34 +; 35 /* Clear the homescreen */ +; 36 os_ClrHome(); + LD BC,_asm_ClrLCD + PUSH BC + CALL __OS + POP BC + LD BC,_asm_HomeUp + PUSH BC + CALL __OS + POP BC + LD BC,_asm_DrawStatusBar + PUSH BC + CALL __OS + POP BC +; 37 +; 38 /* Declare some variable values */ +; 39 strcpy(data.name, "My Data"); + LD BC,L__1 + PUSH BC + LD BC,_data + PUSH BC + CALL _strcpy + POP BC + POP BC +; 40 data.var1 = VAR1_VALUE; + LD A,10 + LD (_data+15),A +; 41 data.var2 = VAR2_VALUE; + LD A,20 + LD (_data+16),A +; 42 +; 43 /* Close any files that may be open already */ +; 44 ti_CloseAll(); + CALL _ti_CloseAll +; 45 +; 46 /* Open a new variable; deleting it if it already exists */ +; 47 myAppVar = ti_Open(appvarName, "w"); + LD BC,L__2 + PUSH BC + LD BC,(_appvarName) + PUSH BC + CALL _ti_Open + POP BC + POP BC + LD (IX+-1),A +; 48 +; 49 /* Make sure we opened okay */ +; 50 if (!myAppVar) goto err; + OR A,A + JR Z,L_3 +; 51 +; 52 /* Write the structure to the appvar */ +; 53 if (ti_Write(&data, sizeof(data_t), 1, myAppVar) != 1) goto err; + LD C,(IX+-1) + LD B,0 + PUSH BC + LD BC,1 + PUSH BC + LD BC,17 + PUSH BC + LD BC,_data + PUSH BC + CALL _ti_Write + POP BC + POP BC + POP BC + POP BC + LD BC,1 + OR A,A + SBC HL,BC + JR NZ,L_3 +; 54 +; 55 /* Go back to the start of the file */ +; 56 if (ti_Rewind(myAppVar) == EOF) goto err; + LD C,(IX+-1) + LD B,0 + PUSH BC + CALL _ti_Rewind + POP BC + LD BC,16777215 + OR A,A + SBC HL,BC + JR Z,L_3 +; 57 +; 58 /* Let's read it just to make sure we wrote it correctly */ +; 59 if (ti_Read(&data, sizeof(data_t), 1, myAppVar) != 1) goto err; + LD C,(IX+-1) + LD B,0 + PUSH BC + LD BC,1 + PUSH BC + LD BC,17 + PUSH BC + LD BC,_data + PUSH BC + CALL _ti_Read + POP BC + POP BC + POP BC + POP BC + LD BC,1 + OR A,A + SBC HL,BC + JR NZ,L_3 +; 60 +; 61 /* Make sure we read these variables correctly too */ +; 62 if (data.var1 != VAR1_VALUE && data.var2 != VAR2_VALUE) goto err; + LD A,(_data+15) + CP A,10 + JR Z,L_14 + LD A,(_data+16) + CP A,20 + JR NZ,L_3 +L_14: +; 63 +; 64 /* Ensure the name of the AppVar is correct */ +; 65 ti_GetName(nameBuffer, myAppVar); + LD C,(IX+-1) + LD B,0 + PUSH BC + PEA IX+-11 + CALL _ti_GetName + POP BC + POP BC +; 66 +; 67 printText(0, 0, "Appvar: "); + LD BC,L__9 + PUSH BC + LD BC,0 + PUSH BC + PUSH BC + CALL _printText + POP BC + POP BC + POP BC +; 68 printText(8, 0, nameBuffer); + PEA IX+-11 + LD BC,0 + PUSH BC + LD BC,8 + PUSH BC + CALL _printText + POP BC + POP BC + POP BC +; 69 printText(0, 1, "Read was successful"); + LD BC,L__10 + PUSH BC + LD BC,1 + PUSH BC + LD BC,0 + PUSH BC + CALL _printText + POP BC + POP BC + POP BC +; 70 goto noerr; + JR L_16 +L_3: +; 71 +; 72 err: +; 73 printText(0, 0, "An error occured"); + LD BC,L__11 + PUSH BC + LD BC,0 + PUSH BC + PUSH BC + CALL _printText + POP BC + POP BC + POP BC +; 74 noerr: +; 75 +; 76 /* Pause */ +; 77 while (!os_GetCSC()); +L_16: + CALL _os_GetCSC + OR A,A + JR Z,L_16 +; 78 +; 79 /* Close all open files */ +; 80 ti_CloseAll(); + CALL _ti_CloseAll +; 81 } + LD SP,IX + POP IX + RET + + +;**************************** _main *************************** +;Name Addr/Register Size Type +;_os_GetCSC IMPORT ----- function +;_printText IMPORT ----- function +;_ti_GetName IMPORT ----- function +;_ti_Read IMPORT ----- function +;_ti_Rewind IMPORT ----- function +;_ti_Write IMPORT ----- function +;_appvarName STATIC 3 variable +;_ti_Open IMPORT ----- function +;_ti_CloseAll IMPORT ----- function +;_data STATIC 17 variable +;_strcpy IMPORT ----- function +;_asm_DrawStatusBar IMPORT ----- function +;_asm_HomeUp IMPORT ----- function +;_asm_ClrLCD IMPORT ----- function +;__OS IMPORT ----- function +;nameBuffer IX-11 10 variable +;myAppVar IX-1 1 variable + + +; Stack Frame Size: 17 (bytes) +; Spill Code: 0 (instruction) + + + SEGMENT STRSECT +L__1: + DB "My Data" + DB 0 +L__2: + DB "w" + DB 0 +L__9: + DB "Appvar: " + DB 0 +L__10: + DB "Read was successful" + DB 0 +L__11: + DB "An error occured" + DB 0 + SEGMENT CODE +; 82 +; 83 /* Draw text on the homescreen at the given X/Y location */ +; 84 void printText(int8_t xpos, int8_t ypos, const char *text) { +_printText: + CALL __frameset0 +; 85 os_SetCursorPos(ypos, xpos); + LD C,(IX+6) + LD B,0 + PUSH BC + LD C,(IX+9) + PUSH BC + CALL _os_SetCursorPos + POP BC + POP BC +; 86 os_PutStrFull(text); + LD BC,(IX+12) + PUSH BC + CALL _os_PutStrFull + POP BC +; 87 } + LD SP,IX + POP IX + RET + + +;**************************** _printText *************************** +;Name Addr/Register Size Type +;_os_PutStrFull IMPORT ----- function +;_os_SetCursorPos IMPORT ----- function +;text IX+12 3 parameter +;ypos IX+9 1 parameter +;xpos IX+6 1 parameter + + +; Stack Frame Size: 15 (bytes) +; Spill Code: 0 (instruction) + + + XREF _strcpy:ROM + XREF _ti_GetName:ROM + XREF _ti_Rewind:ROM + XREF _ti_Read:ROM + XREF _ti_Write:ROM + XREF _ti_Open:ROM + XREF _ti_CloseAll:ROM + XREF _asm_DrawStatusBar:ROM + XREF _asm_ClrLCD:ROM + XREF _asm_HomeUp:ROM + XREF __OS:ROM + XREF _os_GetCSC:ROM + XREF _os_PutStrFull:ROM + XREF _os_SetCursorPos:ROM + XREF __frameset0:ROM + XREF __frameset:ROM + XDEF _printText + XDEF _main + XDEF _data + XDEF _appvarName + END diff --git a/frontends/calculator/CEdev/examples/fileio_read_write/readme.md b/frontends/calculator/CEdev/examples/fileio_read_write/readme.md new file mode 100644 index 0000000..8666507 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_read_write/readme.md @@ -0,0 +1,10 @@ +### FileIO Write/Read Demo + +This example demonstrates writing some data to a file and then reading it back out to make sure it was written correctly + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/fileio_read_write/screenshot.png b/frontends/calculator/CEdev/examples/fileio_read_write/screenshot.png new file mode 100644 index 0000000..8f22d44 Binary files /dev/null and b/frontends/calculator/CEdev/examples/fileio_read_write/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/fileio_read_write/src/main.c b/frontends/calculator/CEdev/examples/fileio_read_write/src/main.c new file mode 100644 index 0000000..a776037 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_read_write/src/main.c @@ -0,0 +1,88 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include + +/* Declare some variables */ +const char *appvarName = "AppVar"; + +typedef struct { + char name[15]; + uint8_t var1; + uint8_t var2; +} data_t; + +data_t data; + +#define VAR1_VALUE 10 +#define VAR2_VALUE 20 + +/* Function prototypes */ +void printText(int8_t xpos, int8_t ypos, const char *text); + +/* Main Function */ +void main(void) { + char nameBuffer[10]; + ti_var_t myAppVar; + int x; + + /* Clear the homescreen */ + os_ClrHome(); + + /* Declare some variable values */ + strcpy(data.name, "My Data"); + data.var1 = VAR1_VALUE; + data.var2 = VAR2_VALUE; + + /* Close any files that may be open already */ + ti_CloseAll(); + + /* Open a new variable; deleting it if it already exists */ + myAppVar = ti_Open(appvarName, "w"); + + /* Make sure we opened okay */ + if (!myAppVar) goto err; + + /* Write the structure to the appvar */ + if (ti_Write(&data, sizeof(data_t), 1, myAppVar) != 1) goto err; + + /* Go back to the start of the file */ + if (ti_Rewind(myAppVar) == EOF) goto err; + + /* Let's read it just to make sure we wrote it correctly */ + if (ti_Read(&data, sizeof(data_t), 1, myAppVar) != 1) goto err; + + /* Make sure we read these variables correctly too */ + if (data.var1 != VAR1_VALUE && data.var2 != VAR2_VALUE) goto err; + + /* Ensure the name of the AppVar is correct */ + ti_GetName(nameBuffer, myAppVar); + + printText(0, 0, "Appvar: "); + printText(8, 0, nameBuffer); + printText(0, 1, "Read was successful"); + goto noerr; + +err: + printText(0, 0, "An error occured"); +noerr: + + /* Pause */ + while (!os_GetCSC()); + + /* Close all open files */ + ti_CloseAll(); +} + +/* Draw text on the homescreen at the given X/Y location */ +void printText(int8_t xpos, int8_t ypos, const char *text) { + os_SetCursorPos(ypos, xpos); + os_PutStrFull(text); +} + diff --git a/frontends/calculator/CEdev/examples/fileio_rename/autotester.json b/frontends/calculator/CEdev/examples/fileio_rename/autotester.json new file mode 100644 index 0000000..5b454c9 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_rename/autotester.json @@ -0,0 +1,33 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|1000", + "hash|1", + "key|enter", + "delay|200", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "Assert that the rename was succesful", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "94538693" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/fileio_rename/makefile b/frontends/calculator/CEdev/examples/fileio_rename/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_rename/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/fileio_rename/readme.md b/frontends/calculator/CEdev/examples/fileio_rename/readme.md new file mode 100644 index 0000000..9584b02 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_rename/readme.md @@ -0,0 +1,8 @@ +### FileIO Rename Demo + +This example demonstrates how to rename previously created files + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/fileio_rename/src/main.c b/frontends/calculator/CEdev/examples/fileio_rename/src/main.c new file mode 100644 index 0000000..6f046bb --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_rename/src/main.c @@ -0,0 +1,77 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include + +/* Function prototypes */ +void printText(int8_t xpos, int8_t ypos, const char *text); + +/* Main Function */ +void main(void) { + /* Declare some variables */ + const char *oldName = "OldFile"; + const char *newName = "NewFile"; + char nameBuffer[10]; + ti_var_t file; + bool err = true; + + /* Clear the homescreen */ + os_ClrHome(); + + /* Close any previously open files */ + ti_CloseAll(); + + /* Delete both the new and old files if they already exist */ + ti_Delete(oldName); + ti_Delete(newName); + + do { + /* Create a file with the old name */ + file = ti_Open(oldName, "w"); + if (!file) break; + + ti_GetName(nameBuffer, file); + printText(0, 0, "Old Name: "); + printText(10, 0, nameBuffer); + + /* Close the old file */ + ti_CloseAll(); + + /* Rename the old file to the new file name */ + ti_Rename(oldName, newName); + + /* Ensure the new name of the file is correct */ + file = ti_Open(newName, "r"); + if (!file) break; + + ti_GetName(nameBuffer, file); + printText(0, 1, "New Name: "); + printText(10, 1, nameBuffer); + + err = false; + } while (0); + + /* Close all open files */ + ti_CloseAll(); + + /* If an error occured, inform the user */ + if (err == true) { + printText(0, 2, "An error occured"); + } + + /* Wait for a keypress */ + while (!os_GetCSC()); +} + +/* Draw text on the homescreen at the given X/Y location */ +void printText(int8_t xpos, int8_t ypos, const char *text) { + os_SetCursorPos(ypos, xpos); + os_PutStrFull(text); +} + diff --git a/frontends/calculator/CEdev/examples/fileio_tokens/autotester.json b/frontends/calculator/CEdev/examples/fileio_tokens/autotester.json new file mode 100644 index 0000000..529758c --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_tokens/autotester.json @@ -0,0 +1,33 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|1000", + "hash|1", + "key|enter", + "delay|200", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "Blank screen", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "349F4775" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/fileio_tokens/makefile b/frontends/calculator/CEdev/examples/fileio_tokens/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_tokens/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/fileio_tokens/readme.md b/frontends/calculator/CEdev/examples/fileio_tokens/readme.md new file mode 100644 index 0000000..a1d5546 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_tokens/readme.md @@ -0,0 +1,10 @@ +### FileIO Get Token Demo + +This demo shows how to use the ti_GetDataPtr and ti_GetTokenString functions. It prints out the first two tokens in the basic prgmABC. + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/fileio_tokens/screenshot.png b/frontends/calculator/CEdev/examples/fileio_tokens/screenshot.png new file mode 100644 index 0000000..928b693 Binary files /dev/null and b/frontends/calculator/CEdev/examples/fileio_tokens/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/fileio_tokens/src/main.c b/frontends/calculator/CEdev/examples/fileio_tokens/src/main.c new file mode 100644 index 0000000..d3f6b57 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_tokens/src/main.c @@ -0,0 +1,59 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include + +/* Declare the program name */ +const char *prgmName = "ABC"; + +/* Function prototypes */ +void printText(int8_t xpos, int8_t ypos, const char *text); + +/* Main Function */ +void main(void) { + ti_var_t prgm; + char *text; + uint8_t *data_ptr; + uint8_t token_length; + uint16_t size; + int8_t y = 0; + + /* Clear the homescreen */ + os_ClrHome(); + + /* Close any files that may be open already */ + ti_CloseAll(); + + /* Open the program for reading */ + prgm = ti_OpenVar(prgmName, "r", TI_PRGM_TYPE); + + /* Make sure we opened okay */ + if (!prgm) goto err; + + data_ptr = ti_GetDataPtr(prgm); + size = ti_GetSize(prgm); + + while (size && y < 8) { + printText(0, y++, ti_GetTokenString(&data_ptr, &token_length, NULL)); + size -= token_length; + } + +err: + /* Pause */ + while (!os_GetCSC()); + + /* Close files */ + ti_CloseAll(); +} + +/* Draw text on the homescreen at the given X/Y location */ +void printText(int8_t xpos, int8_t ypos, const char *text) { + os_SetCursorPos(ypos, xpos); + os_PutStrFull(text); +} diff --git a/frontends/calculator/CEdev/examples/gfx_blitting/autotester.json b/frontends/calculator/CEdev/examples/gfx_blitting/autotester.json new file mode 100644 index 0000000..bb67e72 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_blitting/autotester.json @@ -0,0 +1,46 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "hashWait|1", + "key|enter", + "hashWait|2", + "key|enter", + "hashWait|3", + "key|enter", + "hashWait|4" + ], + "hashes": { + "1": { + "description": "Nothing blitted yet, white screen", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "3132DE74" ] + }, + "2": { + "description": "Parts of buffer blitted to screen", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "830291D3" ] + }, + "3": { + "description": "Full buffer blitted to screen", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "EA181DC1" ] + }, + "4": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} diff --git a/frontends/calculator/CEdev/examples/gfx_blitting/makefile b/frontends/calculator/CEdev/examples/gfx_blitting/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_blitting/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_blitting/readme.md b/frontends/calculator/CEdev/examples/gfx_blitting/readme.md new file mode 100644 index 0000000..caa3bcb --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_blitting/readme.md @@ -0,0 +1,7 @@ +### GraphX Blitting Demo + +This example demonstrates blitting to manually copy data from the drawing buffer to the screen buffer + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. diff --git a/frontends/calculator/CEdev/examples/gfx_blitting/src/main.c b/frontends/calculator/CEdev/examples/gfx_blitting/src/main.c new file mode 100644 index 0000000..1582583 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_blitting/src/main.c @@ -0,0 +1,47 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +/* This tutorial is meant to be played around with to get a feeling for how blitting works */ +void main(void) { + uint8_t c; + + /* Initialize the 8bpp graphics, screen cleared to white */ + gfx_Begin(); + + /* Draw to buffer instead of directly to screen */ + gfx_SetDrawBuffer(); // This is the same as gfx_SetDraw(gfx_buffer) + + /* Draw a gradient (to the buffer) */ + for (c = 0; c < 8; c++) { + gfx_SetColor(c); + gfx_FillRectangle_NoClip(c * (LCD_WIDTH / 8), 0, LCD_WIDTH / 8, LCD_HEIGHT); + } + + /* Wait for a key */ + while (!os_GetCSC()); + + /* Copy parts of the buffer to the screen */ + gfx_BlitLines(gfx_buffer, LCD_HEIGHT - 32, 32); + gfx_BlitRectangle(gfx_buffer, LCD_WIDTH / 4, LCD_HEIGHT / 4, LCD_WIDTH / 2, LCD_HEIGHT / 2); + + /* Wait for a key */ + while (!os_GetCSC()); + + /* Copy the full buffer to the screen */ + gfx_BlitBuffer(); // This is the same as gfx_Blit(gfx_buffer) + + /* Wait for a key */ + while (!os_GetCSC()); + + /* Close the graphics */ + gfx_End(); +} diff --git a/frontends/calculator/CEdev/examples/gfx_buffered_cube/autotester.json b/frontends/calculator/CEdev/examples/gfx_buffered_cube/autotester.json new file mode 100644 index 0000000..6d4c32f --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_buffered_cube/autotester.json @@ -0,0 +1,40 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|300", + "hash|1", + "hash|2", + "key|enter", + "delay|300", + "hashWait|3" + ], + "hashes": { + "1": { + "description": "The background will be white (check a part before the cube)", + "start": "vram_start", + "size": "0x500", + "expected_CRCs": [ "5DAA1FBD" ] + }, + "2": { + "description": "The background will be white (check a part after the cube)", + "start": "0xD52700", + "size": "0x500", + "expected_CRCs": [ "5DAA1FBD" ] + }, + "3": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/gfx_buffered_cube/makefile b/frontends/calculator/CEdev/examples/gfx_buffered_cube/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_buffered_cube/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_buffered_cube/readme.md b/frontends/calculator/CEdev/examples/gfx_buffered_cube/readme.md new file mode 100644 index 0000000..413aa36 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_buffered_cube/readme.md @@ -0,0 +1,10 @@ +### GraphX Cube Buffer Demo + +Draws a rotating cube which demonstartes the line and double buffering routines + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/gfx_buffered_cube/screenshot.gif b/frontends/calculator/CEdev/examples/gfx_buffered_cube/screenshot.gif new file mode 100644 index 0000000..73c97a0 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_buffered_cube/screenshot.gif differ diff --git a/frontends/calculator/CEdev/examples/gfx_buffered_cube/src/main.c b/frontends/calculator/CEdev/examples/gfx_buffered_cube/src/main.c new file mode 100644 index 0000000..422e96c --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_buffered_cube/src/main.c @@ -0,0 +1,113 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +/* Function prototypes */ +void rotate(void); + +/* Globals */ +#define ORG (-50) +#define DEG (6.0) +#define ANG (DEG * M_PI / 180.0) + +/* define the verticies for the two rectangles */ +float face1[4][2] = { + { 140, 45 }, + { 240, 45 }, + { 240, 145 }, + { 140, 145 }, +}; + +float face2[4][2] = { + { 140 + ORG, 45 - ORG }, + { 240 + ORG, 45 - ORG }, + { 240 + ORG, 145 - ORG }, + { 140 + ORG, 145 - ORG }, +}; + +/* declare some globals */ +float sin_angle, + cos_angle; + +float midx1, + midy1, + midx2, + midy2; + +/* Place main code in main */ +void main(void) { + uint8_t loop = 0; + + /* Seed the random numbers */ + srand(rtc_Time()); + + /* Get some main variables set up */ + sin_angle = sin(ANG); + cos_angle = cos(ANG); + midx1 = (face1[0][0] + face1[1][0]) / 2.0; + midy1 = (face1[1][1] + face1[2][1]) / 2.0; + midx2 = (face2[0][0] + face2[1][0]) / 2.0; + midy2 = (face2[1][1] + face2[2][1]) / 2.0; + + /* Start the graphics routines */ + gfx_Begin(); + gfx_SetDrawBuffer(); + + /* Loop until a key is pressed */ + while (!os_GetCSC()) { + + /* Change the color of the cube depending on loop (mod 16) */ + if (!((loop++) & 0xf)) { + gfx_SetColor(rand()); + } + + /* Call the rotation code */ + rotate(); + + /* Swap the buffer with the screen */ + gfx_SwapDraw(); + } + + /* End the graphics */ + gfx_End(); +} + +/* Rotation code */ +void rotate(void) { + uint8_t i, j; + float tmp1, tmp2; + + /* Compute the new vertex coordinates */ + for (i=0; i<4; i++) { + tmp1 = face1[i][0] - midx1; + tmp2 = face1[i][1] - midy1; + + face1[i][0] = midx1 + (tmp1 * cos_angle) - (tmp2 * sin_angle); + face1[i][1] = midy1 + (tmp1 * sin_angle) + (tmp2 * cos_angle); + + tmp1 = face2[i][0] - midx2; + tmp2 = face2[i][1] - midy2; + + face2[i][0] = midx2 + (tmp1 * cos_angle) - (tmp2 * sin_angle); + face2[i][1] = midy2 + (tmp1 * sin_angle) + (tmp2 * cos_angle); + } + + /* Clear the drawing buffer */ + gfx_FillScreen(gfx_white); + + /* Draw the cube */ + for (i=0; i<4; i++) { + j = i + 1 & 3; + gfx_Line(face1[i][0], face1[i][1], face1[j][0], face1[j][1]); + gfx_Line(face2[i][0], face2[i][1], face2[j][0], face2[j][1]); + gfx_Line(face1[i][0], face1[i][1], face2[i][0], face2[i][1]); + } +} diff --git a/frontends/calculator/CEdev/examples/gfx_char/autotester.json b/frontends/calculator/CEdev/examples/gfx_char/autotester.json new file mode 100644 index 0000000..66dfe16 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_char/autotester.json @@ -0,0 +1,30 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "hashWait|1", + "key|enter", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "Test flipped text on black background", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "198A8841" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} diff --git a/frontends/calculator/CEdev/examples/gfx_char/makefile b/frontends/calculator/CEdev/examples/gfx_char/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_char/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_char/readme.md b/frontends/calculator/CEdev/examples/gfx_char/readme.md new file mode 100644 index 0000000..7889ac8 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_char/readme.md @@ -0,0 +1,10 @@ +### GraphX Character Demo + +A simple demo showing an upside down string. + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/gfx_char/screenshot.png b/frontends/calculator/CEdev/examples/gfx_char/screenshot.png new file mode 100644 index 0000000..6eefa42 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_char/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_char/src/main.c b/frontends/calculator/CEdev/examples/gfx_char/src/main.c new file mode 100644 index 0000000..7d1b5ec --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_char/src/main.c @@ -0,0 +1,52 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include + +/* Use some random color as the transparent one */ +#define TRANSPARENT_COLOR 10 +#define FONT_WIDTH 8 +#define FONT_HEIGHT 8 + +/* Function prototypes */ +void printu(char *str, int x, int y); + +const char *my_str = "!!DEPPILF si txet sihT"; + +void main(void) { + /* Initialize the 8bpp graphics */ + gfx_Begin(); + gfx_FillScreen(gfx_black); + + /* Setup the colors */ + gfx_SetTextFGColor(gfx_white); + + /* Set the transparent text background color */ + gfx_SetTextBGColor(TRANSPARENT_COLOR); + gfx_SetTextTransparentColor(TRANSPARENT_COLOR); + gfx_SetMonospaceFont(FONT_WIDTH); + + /* Print some upside down text */ + printu(my_str, (LCD_WIDTH - gfx_GetStringWidth(my_str)) / 2, (LCD_HEIGHT - FONT_HEIGHT) / 2); + + /* Wait for key */ + while (!os_GetCSC()); + + /* Finish the graphics */ + gfx_End(); +} + +void printu(char *str, int x, int y) { + gfx_TempSprite(my_char, 8, 8); + + while (*str) { + gfx_TransparentSprite(gfx_RotateSpriteHalf(gfx_GetSpriteChar(*str), my_char), x, y); + x += gfx_GetCharWidth(*str++); + } +} diff --git a/frontends/calculator/CEdev/examples/gfx_clipping/autotester.json b/frontends/calculator/CEdev/examples/gfx_clipping/autotester.json new file mode 100644 index 0000000..13f45cb --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_clipping/autotester.json @@ -0,0 +1,52 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|300", + "hash|1", + "key|enter", + "delay|300", + "hash|2", + "key|right", + "key|left", + "delay|300", + "hash|3", + "key|enter", + "delay|300", + "hashWait|4" + ], + "hashes": { + "1": { + "description": "Check text scaling", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "BCD2C22B" ] + }, + "2": { + "description": "Check text clipping", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "BCD2C22B" ] + }, + "3": { + "description": "Check clipped region movement and text clipping", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "BE2F6B1A" ] + }, + "4": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/gfx_clipping/makefile b/frontends/calculator/CEdev/examples/gfx_clipping/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_clipping/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_clipping/readme.md b/frontends/calculator/CEdev/examples/gfx_clipping/readme.md new file mode 100644 index 0000000..c0f0dbb --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_clipping/readme.md @@ -0,0 +1,10 @@ +### GraphX Clipping Demo + +This example demonstrates alternating the clipping region and using clipped text properly. + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/gfx_clipping/screenshot.gif b/frontends/calculator/CEdev/examples/gfx_clipping/screenshot.gif new file mode 100644 index 0000000..1c1e5e3 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_clipping/screenshot.gif differ diff --git a/frontends/calculator/CEdev/examples/gfx_clipping/src/main.c b/frontends/calculator/CEdev/examples/gfx_clipping/src/main.c new file mode 100644 index 0000000..97f30eb --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_clipping/src/main.c @@ -0,0 +1,85 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include + +/* Use some random color as the transparent one */ +#define TRANSPARENT_COLOR 10 +#define FONT_WIDTH 8 +#define FONT_HEIGHT 8 + +void main(void) { + uint8_t key = 24; + + /* Starting text posistion */ + int x = (LCD_WIDTH / 2) - 20; + int y = (LCD_HEIGHT / 2) - 5; + + int box_stride = 1; + int box_scale = 20; + + /* Initialize the 8bpp graphics */ + gfx_Begin(); + gfx_FillScreen(gfx_black); + + /* Setup the colors */ + gfx_SetColor(gfx_white); + gfx_SetTextFGColor(gfx_red); + + /* Set the transparent text background color */ + gfx_SetTextBGColor(TRANSPARENT_COLOR); + gfx_SetTextTransparentColor(TRANSPARENT_COLOR); + + /* Print some scaled font */ + gfx_SetTextScale(2, 2); + gfx_PrintStringXY("This text is SCALED!!", 15, 10); + + /* Wait for a key before continuing */ + while (!os_GetCSC()); + + /* Configure the font to normal size, clipped, and monospaced */ + gfx_SetTextScale(1, 1); + gfx_SetTextConfig(gfx_text_clip); + gfx_SetMonospaceFont(FONT_WIDTH); + + /* Graphics routines draw to the back buffer */ + gfx_SetDrawBuffer(); + + /* Run until the [ENTER] key is pressed */ + do { + /* Check if any keys are pressed */ + if (key == sk_Left) { x--; } + if (key == sk_Right) { x++; } + if (key == sk_Down) { y++; } + if (key == sk_Up) { y--; } + if (key) { + gfx_SetClipRegion((LCD_WIDTH/2) - box_scale, (LCD_HEIGHT/2) - box_scale, (LCD_WIDTH/2) + box_scale, (LCD_HEIGHT/2) + box_scale); + + gfx_FillScreen(gfx_black); + gfx_PrintStringXY("FUN WITH CLIPPING", x, y); + + /* Draw a rectangle on the edges of the clipping region so we can see it */ + gfx_Rectangle_NoClip((LCD_WIDTH/2) - box_scale, (LCD_HEIGHT/2) - box_scale, box_scale * 2, box_scale * 2); + + /* Change the clipping region */ + box_scale += box_stride; + + /* Check if we should increase or decrease the clip region */ + if (box_scale > 100 || box_scale < 10) { + box_stride = -box_stride; + } + + /* Move the graphics so the user can see it */ + gfx_SwapDraw(); + } + } while ((key = os_GetCSC()) != sk_Enter); + + /* Usual cleanup */ + gfx_End(); +} diff --git a/frontends/calculator/CEdev/examples/gfx_floodfill/autotester.json b/frontends/calculator/CEdev/examples/gfx_floodfill/autotester.json new file mode 100644 index 0000000..01e94ee --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_floodfill/autotester.json @@ -0,0 +1,36 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|300", + "hash|1", + "key|enter", + "delay|300", + "hash|2", + "delay|300", + "key|enter", + "delay|300" + ], + "hashes": { + "1": { + "description": "A black star outline is drawn to the screen", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "7EA01B1B" ] + }, + "2": { + "description": "The rest of the screen will be filled a solid black", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "4CECC590" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/gfx_floodfill/makefile b/frontends/calculator/CEdev/examples/gfx_floodfill/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_floodfill/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_floodfill/readme.md b/frontends/calculator/CEdev/examples/gfx_floodfill/readme.md new file mode 100644 index 0000000..e94fd0d --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_floodfill/readme.md @@ -0,0 +1,10 @@ +### GraphX Flood Fill Demo + +This example demonstrates using the flood fill algorithim implemented in GraphX + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/gfx_floodfill/screenshot.gif b/frontends/calculator/CEdev/examples/gfx_floodfill/screenshot.gif new file mode 100644 index 0000000..f6408ab Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_floodfill/screenshot.gif differ diff --git a/frontends/calculator/CEdev/examples/gfx_floodfill/src/main.c b/frontends/calculator/CEdev/examples/gfx_floodfill/src/main.c new file mode 100644 index 0000000..31a2090 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_floodfill/src/main.c @@ -0,0 +1,50 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +void main(void) { + int pts[10], i; + + int rx = 100; + int ry = 100; + int cx = LCD_WIDTH / 2; + int cy = LCD_HEIGHT / 2; + + /* Build the coordinates of the polygon */ + double theta = -M_PI / 2; + double dtheta = 4 * M_PI / 5; + for (i = 0; i < 10; i += 2) { + pts[i+0] = (int)(cx + rx * cos(theta)), + pts[i+1] = (int)(cy + ry * sin(theta)); + theta += dtheta; + } + + /* Initialize the 8bpp graphics */ + gfx_Begin(); + + /* Set up the palette */ + gfx_SetColor(gfx_black); + + /* Draw a polygon on the buffer */ + gfx_Polygon(pts, 5); + + /* Pause */ + while (!os_GetCSC()); + + /* Flood fill the rest of the screen */ + gfx_FloodFill(0, 0, 0); + + /* Pause */ + while (!os_GetCSC()); + + /* Close the graphics */ + gfx_End(); +} diff --git a/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/autotester.json b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/autotester.json new file mode 100644 index 0000000..3b57eb8 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/autotester.json @@ -0,0 +1,31 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp", + "src/gfx/var_gfx.8xv" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "hashWait|1", + "key|enter", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "Fullscreen tiled image", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "2846A371" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44", "43BF8092", "5ACF1C01" ] + } + } +} diff --git a/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/makefile b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/readme.md b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/readme.md new file mode 100644 index 0000000..c656e6d --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/readme.md @@ -0,0 +1,9 @@ +### GraphX Fullscreen Image Demo + +An example of a compressed tiled image to construct a fullscreen image. + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. diff --git a/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/screenshot.png b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/screenshot.png new file mode 100644 index 0000000..68c625a Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/convpng.ini b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/convpng.ini new file mode 100644 index 0000000..3c282fe --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/convpng.ini @@ -0,0 +1,15 @@ +// Appvar to place all graphics in + +#AppvarC : var_gfx +#OutputPalettes : tiles_gfx +#PNGImages : + tileset + +// The compressed group for the tileset + +#GroupC : tiles_gfx +#Tilemap : 80,80,true +#Compression : zx7 +#PNGImages : + tileset + diff --git a/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tiles_gfx.c b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tiles_gfx.c new file mode 100644 index 0000000..7243683 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tiles_gfx.c @@ -0,0 +1,4 @@ +// convpng +#include +#include "tiles_gfx.h" + diff --git a/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tiles_gfx.h b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tiles_gfx.h new file mode 100644 index 0000000..1ae708a --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tiles_gfx.h @@ -0,0 +1,8 @@ +// convpng +// this file contains all the graphics sources for easy inclusion in a project +#ifndef __tiles_gfx__ +#define __tiles_gfx__ +#include + + +#endif diff --git a/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tileset.c b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tileset.c new file mode 100644 index 0000000..ff03cd2 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tileset.c @@ -0,0 +1,18 @@ +// convpng +#include +#include "tiles_gfx.h" + +uint8_t *tileset_tiles_compressed[12] = { + (uint8_t*)0, + (uint8_t*)3752, + (uint8_t*)7872, + (uint8_t*)12183, + (uint8_t*)15527, + (uint8_t*)20894, + (uint8_t*)25809, + (uint8_t*)30646, + (uint8_t*)35982, + (uint8_t*)41664, + (uint8_t*)46419, + (uint8_t*)50679, +}; diff --git a/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tileset.png b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tileset.png new file mode 100644 index 0000000..4baee35 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tileset.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.8xv b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.8xv new file mode 100644 index 0000000..b4981a2 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.8xv differ diff --git a/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.c b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.c new file mode 100644 index 0000000..6de6afa --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.c @@ -0,0 +1,31 @@ +// convpng +#include +#include "var_gfx.h" + +#include +uint8_t *var_gfx[2] = { + (uint8_t*)0, + (uint8_t*)55530, +}; + +bool var_gfx_init(void) { + unsigned int data, i; + ti_var_t appvar; + + ti_CloseAll(); + + appvar = ti_Open("var_gfx", "r"); + data = (unsigned int)ti_GetDataPtr(appvar) - (unsigned int)var_gfx[0]; + for (i = 0; i < var_gfx_num; i++) { + var_gfx[i] += data; + } + + ti_CloseAll(); + + data = (unsigned int)var_gfx[0] - (unsigned int)tileset_tiles_compressed[0]; + for (i = 0; i < tileset_tiles_num; i++) { + tileset_tiles_compressed[i] += data; + } + + return (bool)appvar; +} diff --git a/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.h b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.h new file mode 100644 index 0000000..23b61b1 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.h @@ -0,0 +1,31 @@ +// convpng +// this file contains all the graphics sources for easy inclusion in a project +#ifndef __var_gfx__ +#define __var_gfx__ +#include + +#include + +#define var_gfx_num 2 + +extern uint8_t *var_gfx[2]; +#define tileset_compressed ((gfx_sprite_t*)var_gfx[0]) +#define tileset_tiles_num 12 +extern uint8_t *tileset_tiles_compressed[12]; +#define tileset_tile_0_compressed ((gfx_sprite_t*)tileset_tiles_compressed[0]) +#define tileset_tile_1_compressed ((gfx_sprite_t*)tileset_tiles_compressed[1]) +#define tileset_tile_2_compressed ((gfx_sprite_t*)tileset_tiles_compressed[2]) +#define tileset_tile_3_compressed ((gfx_sprite_t*)tileset_tiles_compressed[3]) +#define tileset_tile_4_compressed ((gfx_sprite_t*)tileset_tiles_compressed[4]) +#define tileset_tile_5_compressed ((gfx_sprite_t*)tileset_tiles_compressed[5]) +#define tileset_tile_6_compressed ((gfx_sprite_t*)tileset_tiles_compressed[6]) +#define tileset_tile_7_compressed ((gfx_sprite_t*)tileset_tiles_compressed[7]) +#define tileset_tile_8_compressed ((gfx_sprite_t*)tileset_tiles_compressed[8]) +#define tileset_tile_9_compressed ((gfx_sprite_t*)tileset_tiles_compressed[9]) +#define tileset_tile_10_compressed ((gfx_sprite_t*)tileset_tiles_compressed[10]) +#define tileset_tile_11_compressed ((gfx_sprite_t*)tileset_tiles_compressed[11]) +#define sizeof_tiles_gfx_pal 512 +#define tiles_gfx_pal ((uint16_t*)var_gfx[1]) +bool var_gfx_init(void); + +#endif diff --git a/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/main.c b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/main.c new file mode 100644 index 0000000..1ed734b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/main.c @@ -0,0 +1,66 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +/* Include the graphics */ +#include "gfx/tiles_gfx.h" +#include "gfx/var_gfx.h" + +/* Include the external map data */ +extern uint8_t tilemap_map[]; + +#define TILE_WIDTH 80 +#define TILE_HEIGHT 80 + +void main(void) { + unsigned int i; + unsigned int x, y; + gfx_sprite_t *tile; + + tile = gfx_MallocSprite(TILE_WIDTH, TILE_HEIGHT); + + /* Initialize the graphics */ + if (!var_gfx_init()) { + return; + } + + /* Start the graphics */ + gfx_Begin(); + x = y = i = 0; + + /* Draw offscreen */ + gfx_SetDrawBuffer(); + + /* Decompress the tiles */ + for (; i < tileset_tiles_num; i++) { + zx7_Decompress(tile, tileset_tiles_compressed[i]); + gfx_Sprite_NoClip(tile, x, y); + x += TILE_WIDTH; + if (x >= LCD_WIDTH) { + y += TILE_HEIGHT; + x = 0; + } + } + + /* Copy to visible screen */ + gfx_SetPalette(tiles_gfx_pal, sizeof_tiles_gfx_pal, 0); + gfx_BlitBuffer(); + + /* Wait for a key */ + while (!os_GetCSC()); + + /* Close the graphics and return to the OS */ + gfx_End(); + + /* Free the earlier allocation */ + free(tile); +} diff --git a/frontends/calculator/CEdev/examples/gfx_hello_world/autotester.json b/frontends/calculator/CEdev/examples/gfx_hello_world/autotester.json new file mode 100644 index 0000000..2e8ca49 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_hello_world/autotester.json @@ -0,0 +1,40 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|300", + "hash|1", + "hash|2", + "key|enter", + "delay|300", + "hashWait|3" + ], + "hashes": { + "1": { + "description": "The background will be black (check a part before the text)", + "start": "vram_start", + "size": "0x4000", + "expected_CRCs": [ "94640B85" ] + }, + "2": { + "description": "The background will be black (check a part after the text)", + "start": "0xD4EC00", + "size": "0x4000", + "expected_CRCs": [ "94640B85" ] + }, + "3": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/gfx_hello_world/makefile b/frontends/calculator/CEdev/examples/gfx_hello_world/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_hello_world/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_hello_world/readme.md b/frontends/calculator/CEdev/examples/gfx_hello_world/readme.md new file mode 100644 index 0000000..24fed5e --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_hello_world/readme.md @@ -0,0 +1,10 @@ +### GraphX Hello World Demo + +This example of the graphics library demostrates filling the screen black and then printing `Hello World!` centered on the screen. + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/gfx_hello_world/screenshot.png b/frontends/calculator/CEdev/examples/gfx_hello_world/screenshot.png new file mode 100644 index 0000000..1a3f070 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_hello_world/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_hello_world/src/main.c b/frontends/calculator/CEdev/examples/gfx_hello_world/src/main.c new file mode 100644 index 0000000..852120e --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_hello_world/src/main.c @@ -0,0 +1,46 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#define FONT_HEIGHT 8 + +/* Function prototypes */ +void print_string_centered(const char *str); + +void main(void) { + const char *msg = "Hello World!"; + + /* Seed the random numbers */ + srand(rtc_Time()); + + /* Initialize the 8bpp graphics */ + gfx_Begin(); + + /* Fill the screen black */ + gfx_FillScreen(gfx_black); + + /* Set the random text color */ + gfx_SetTextFGColor(randInt(1, 255)); + + /* Print the message on the screen */ + print_string_centered(msg); + + /* Wait for a key to be pressed */ + while (!os_GetCSC()); + + /* Close the graphics */ + gfx_End(); +} + +/* Prints a screen centered string */ +void print_string_centered(const char *str) { + gfx_PrintStringXY(str, (LCD_WIDTH - gfx_GetStringWidth(str)) / 2, (LCD_HEIGHT - FONT_HEIGHT) / 2); +} diff --git a/frontends/calculator/CEdev/examples/gfx_light_dark/autotester.json b/frontends/calculator/CEdev/examples/gfx_light_dark/autotester.json new file mode 100644 index 0000000..772c268 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_light_dark/autotester.json @@ -0,0 +1,63 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", "delay|300", "hash|rectangles", "hash|palette_0", + "key|enter", "delay|1000", "hash|palette_25", + "key|enter", "delay|1000", "hash|palette_50", + "key|enter", "delay|1000", "hash|palette_75", + "key|enter", "delay|1000", "hash|palette_100", + "key|enter", "delay|300", "hash|after_exit" + ], + "hashes": { + "rectangles": { + "description": "Test rectangles", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "328D511E" ] + }, + "palette_0": { + "description": "Test lighten/darken fade, 0% progress", + "start": "lcdPalette", + "size": "8", + "expected_CRCs": [ "41C3BFF8" ] + }, + "palette_25": { + "description": "Test lighten/darken fade, 25% progress", + "start": "lcdPalette", + "size": "8", + "expected_CRCs": [ "5F64F889" ] + }, + "palette_50": { + "description": "Test lighten/darken fade, 50% progress", + "start": "lcdPalette", + "size": "8", + "expected_CRCs": [ "C48CEF7C" ] + }, + "palette_75": { + "description": "Test lighten/darken fade, 75% progress", + "start": "lcdPalette", + "size": "8", + "expected_CRCs": [ "81FEDD4E" ] + }, + "palette_100": { + "description": "Test lighten/darken fade, 100% progress", + "start": "lcdPalette", + "size": "8", + "expected_CRCs": [ "B451E096" ] + }, + "after_exit": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/gfx_light_dark/makefile b/frontends/calculator/CEdev/examples/gfx_light_dark/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_light_dark/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_light_dark/readme.md b/frontends/calculator/CEdev/examples/gfx_light_dark/readme.md new file mode 100644 index 0000000..e429c6c --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_light_dark/readme.md @@ -0,0 +1,10 @@ +### GraphX Lighten and Darken Demo + +Demonstrates rectangle drawing and using gfx_Darken and gfx_Lighten to modify colors in the palette to implement fade effects. + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/gfx_light_dark/screenshot.gif b/frontends/calculator/CEdev/examples/gfx_light_dark/screenshot.gif new file mode 100644 index 0000000..8470736 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_light_dark/screenshot.gif differ diff --git a/frontends/calculator/CEdev/examples/gfx_light_dark/src/main.c b/frontends/calculator/CEdev/examples/gfx_light_dark/src/main.c new file mode 100644 index 0000000..d4c0a06 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_light_dark/src/main.c @@ -0,0 +1,59 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#define color gfx_RGBTo1555(34, 55, 89) + +void main(void) { + uint8_t i = 0; + + /* Initialize the 8bpp graphics */ + gfx_Begin(); + + /* For i in 0..255 */ + do { + + /* Fade out to black */ + gfx_palette[0] = gfx_Darken(color, i); + /* Fade in from black */ + gfx_palette[1] = gfx_Darken(color, ~i); + /* Fade in from white */ + gfx_palette[3] = gfx_Lighten(color, ~i); + /* Fade out to white */ + gfx_palette[2] = gfx_Lighten(color, i); + + /* Fade out to black */ + gfx_SetColor(0); + gfx_FillRectangle_NoClip(0, 0, 160, 120); + /* Fade in from black */ + gfx_SetColor(1); + gfx_FillRectangle_NoClip(160, 0, 160, 120); + /* Fade in from white */ + gfx_SetColor(2); + gfx_FillRectangle_NoClip(0, 120, 160, 120); + /* Fade out to white */ + gfx_SetColor(3); + gfx_FillRectangle_NoClip(160, 120, 160, 120); + + /* Wait for a keypress at the start of each quarter of the fade */ + if (!(i & 0x3f)) { + while (!os_GetCSC()); + } + + /* Loop until i is 0 again because of 8 bit range */ + } while (++i); + + /* Wait for a keypress */ + while (!os_GetCSC()); + + /* Usual cleanup */ + gfx_End(); +} diff --git a/frontends/calculator/CEdev/examples/gfx_rletsprite/autotester.json b/frontends/calculator/CEdev/examples/gfx_rletsprite/autotester.json new file mode 100644 index 0000000..8093b64 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_rletsprite/autotester.json @@ -0,0 +1,30 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "hashWait|1", + "key|enter", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "Make sure the sprites are displayed properly", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "4F8D6CB" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} diff --git a/frontends/calculator/CEdev/examples/gfx_rletsprite/makefile b/frontends/calculator/CEdev/examples/gfx_rletsprite/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_rletsprite/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_rletsprite/readme.md b/frontends/calculator/CEdev/examples/gfx_rletsprite/readme.md new file mode 100644 index 0000000..b0c8df7 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_rletsprite/readme.md @@ -0,0 +1,10 @@ +### GraphX RLETSprite Demo + +Draws a sprite with RLE transparency in many clipping scenarios and converts to +and from a normal sprite with transparency. Created for testing. + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. diff --git a/frontends/calculator/CEdev/examples/gfx_rletsprite/screenshot.png b/frontends/calculator/CEdev/examples/gfx_rletsprite/screenshot.png new file mode 100644 index 0000000..9235010 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_rletsprite/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/convpng.ini b/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/convpng.ini new file mode 100644 index 0000000..bac699c --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/convpng.ini @@ -0,0 +1,5 @@ +#GroupC : logo_gfx +#Style : rlet +#TransparentColor : 255,255,255 +#PNGImages : + ubuntu diff --git a/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/logo_gfx.c b/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/logo_gfx.c new file mode 100644 index 0000000..894a456 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/logo_gfx.c @@ -0,0 +1,203 @@ +// convpng +#include +#include "logo_gfx.h" + +uint16_t logo_gfx_pal[197] = { + 0xFFFF, // 00 :: rgb(255,255,255) + 0x7C00, // 01 :: rgb(255,0,0) + 0x6800, // 02 :: rgb(212,2,2) + 0xE821, // 03 :: rgb(213,11,11) + 0xFFE0, // 04 :: rgb(255,255,0) + 0x83E0, // 05 :: rgb(0,255,0) + 0x001F, // 06 :: rgb(0,0,255) + 0x7E20, // 07 :: rgb(251,139,0) + 0x7920, // 08 :: rgb(244,72,0) + 0xFFFF, // 09 :: rgb(255,254,254) + 0x7E20, // 10 :: rgb(251,139,2) + 0x7E20, // 11 :: rgb(251,139,1) + 0xFFFF, // 12 :: rgb(255,253,253) + 0xFE20, // 13 :: rgb(251,140,4) + 0xFFFF, // 14 :: rgb(255,254,253) + 0xFECC, // 15 :: rgb(252,182,97) + 0x7A90, // 16 :: rgb(249,163,128) + 0x7FDC, // 17 :: rgb(254,244,231) + 0xF985, // 18 :: rgb(245,100,40) + 0x7F9A, // 19 :: rgb(253,225,213) + 0x7FDD, // 20 :: rgb(253,242,242) + 0x6D6B, // 21 :: rgb(226,90,90) + 0xFFBC, // 22 :: rgb(254,239,233) + 0xF921, // 23 :: rgb(244,77,7) + 0x7EED, // 24 :: rgb(252,187,107) + 0xFF99, // 25 :: rgb(254,231,203) + 0xFFFE, // 26 :: rgb(255,253,250) + 0xFF16, // 27 :: rgb(251,199,177) + 0xF921, // 28 :: rgb(244,78,8) + 0x7F31, // 29 :: rgb(253,204,143) + 0x7FDD, // 30 :: rgb(252,241,241) + 0xF18C, // 31 :: rgb(229,102,102) + 0x7B5A, // 32 :: rgb(247,212,212) + 0xFF76, // 33 :: rgb(253,221,181) + 0xF652, // 34 :: rgb(237,151,151) + 0x7652, // 35 :: rgb(236,145,145) + 0xE800, // 36 :: rgb(212,3,3) + 0x718C, // 37 :: rgb(228,98,98) + 0xFF54, // 38 :: rgb(253,214,165) + 0x7673, // 39 :: rgb(237,153,153) + 0xFF32, // 40 :: rgb(252,205,148) + 0x7EA8, // 41 :: rgb(251,169,68) + 0x6CC6, // 42 :: rgb(219,48,48) + 0x7FBA, // 43 :: rgb(254,234,211) + 0xE842, // 44 :: rgb(215,20,20) + 0xFB7B, // 45 :: rgb(250,224,224) + 0xFF77, // 46 :: rgb(253,224,187) + 0xF652, // 47 :: rgb(237,149,149) + 0x7F75, // 48 :: rgb(253,218,175) + 0x7FFE, // 49 :: rgb(254,249,249) + 0x7EEC, // 50 :: rgb(252,185,102) + 0x7FBD, // 51 :: rgb(252,236,236) + 0xFFFF, // 52 :: rgb(255,253,251) + 0x7EED, // 53 :: rgb(252,188,109) + 0x7FFF, // 54 :: rgb(254,252,252) + 0xFAF7, // 55 :: rgb(243,189,189) + 0x7B9B, // 56 :: rgb(250,225,225) + 0xFE87, // 57 :: rgb(251,164,56) + 0x7AD2, // 58 :: rgb(250,179,149) + 0xED09, // 59 :: rgb(224,70,70) + 0xECA5, // 60 :: rgb(218,43,43) + 0xFAF4, // 61 :: rgb(250,190,165) + 0x6D29, // 62 :: rgb(224,74,74) + 0x6D4A, // 63 :: rgb(225,82,82) + 0xED08, // 64 :: rgb(223,69,69) + 0x6D08, // 65 :: rgb(222,63,63) + 0x76D6, // 66 :: rgb(242,178,178) + 0xECC6, // 67 :: rgb(220,51,51) + 0xF1AD, // 68 :: rgb(229,109,109) + 0xFFDD, // 69 :: rgb(254,246,235) + 0x718C, // 70 :: rgb(228,97,97) + 0xFFBC, // 71 :: rgb(254,239,234) + 0xFF77, // 72 :: rgb(253,223,187) + 0x76D6, // 73 :: rgb(242,179,179) + 0x6863, // 74 :: rgb(216,26,26) + 0x7AB1, // 75 :: rgb(249,169,136) + 0xE843, // 76 :: rgb(215,21,21) + 0xFF9C, // 77 :: rgb(251,230,230) + 0xF9A6, // 78 :: rgb(245,108,51) + 0x7F97, // 79 :: rgb(253,225,189) + 0x7942, // 80 :: rgb(244,81,13) + 0x7FBA, // 81 :: rgb(254,236,215) + 0xFE21, // 82 :: rgb(251,143,11) + 0x7FBC, // 83 :: rgb(251,234,234) + 0xFB18, // 84 :: rgb(245,197,197) + 0x76D6, // 85 :: rgb(242,177,177) + 0x71AD, // 86 :: rgb(229,106,106) + 0xFAB2, // 87 :: rgb(249,176,144) + 0x7F9A, // 88 :: rgb(253,227,217) + 0x7FDD, // 89 :: rgb(254,242,237) + 0x7FDE, // 90 :: rgb(253,243,243) + 0x7AB1, // 91 :: rgb(249,171,139) + 0xFFBB, // 92 :: rgb(254,239,221) + 0xF694, // 93 :: rgb(240,167,167) + 0xFE87, // 94 :: rgb(251,167,61) + 0xFF7A, // 95 :: rgb(253,224,213) + 0x7F0E, // 96 :: rgb(253,193,117) + 0xFA6F, // 97 :: rgb(249,159,121) + 0x7FFE, // 98 :: rgb(255,251,247) + 0xFEAA, // 99 :: rgb(251,175,80) + 0x7694, // 100 :: rgb(239,161,161) + 0x7AF3, // 101 :: rgb(250,186,160) + 0xE801, // 102 :: rgb(213,5,5) + 0xFA6F, // 103 :: rgb(249,159,122) + 0x7FDB, // 104 :: rgb(254,241,224) + 0xF920, // 105 :: rgb(244,75,4) + 0x7A8F, // 106 :: rgb(249,160,123) + 0x7694, // 107 :: rgb(239,163,163) + 0x7B7B, // 108 :: rgb(249,220,220) + 0xE822, // 109 :: rgb(214,14,14) + 0x6D29, // 110 :: rgb(223,71,71) + 0xFAF7, // 111 :: rgb(244,192,192) + 0xFF55, // 112 :: rgb(253,215,169) + 0x7A8F, // 113 :: rgb(249,161,124) + 0xFF32, // 114 :: rgb(253,207,151) + 0x7FBB, // 115 :: rgb(253,233,224) + 0xF694, // 116 :: rgb(239,165,165) + 0xFFBC, // 117 :: rgb(254,238,231) + 0xFB39, // 118 :: rgb(247,208,208) + 0x7B38, // 119 :: rgb(246,201,201) + 0x6842, // 120 :: rgb(214,16,16) + 0x7FFF, // 121 :: rgb(254,251,251) + 0xFB7B, // 122 :: rgb(250,223,223) + 0xF16C, // 123 :: rgb(227,95,95) + 0x7672, // 124 :: rgb(237,152,152) + 0x7631, // 125 :: rgb(235,138,138) + 0xFE87, // 126 :: rgb(251,165,60) + 0xFFDD, // 127 :: rgb(254,245,240) + 0xFF33, // 128 :: rgb(252,208,154) + 0x7F79, // 129 :: rgb(252,220,207) + 0x7E41, // 130 :: rgb(251,144,12) + 0x7E42, // 131 :: rgb(251,146,19) + 0x7F36, // 132 :: rgb(251,202,182) + 0x7FDC, // 133 :: rgb(254,243,230) + 0x7963, // 134 :: rgb(244,89,24) + 0x7F0E, // 135 :: rgb(252,193,119) + 0xFE87, // 136 :: rgb(251,164,57) + 0x7A2B, // 137 :: rgb(247,138,92) + 0xFA6E, // 138 :: rgb(249,157,119) + 0xFF9B, // 139 :: rgb(253,229,219) + 0x7920, // 140 :: rgb(244,74,3) + 0xFFDE, // 141 :: rgb(254,246,243) + 0xF964, // 142 :: rgb(245,95,32) + 0xF921, // 143 :: rgb(244,76,6) + 0xFAD3, // 144 :: rgb(250,183,155) + 0xFFBA, // 145 :: rgb(254,237,216) + 0xFAD3, // 146 :: rgb(250,182,154) + 0xF985, // 147 :: rgb(245,103,44) + 0x7FFE, // 148 :: rgb(255,252,250) + 0x7FFE, // 149 :: rgb(255,251,250) + 0x6800, // 150 :: rgb(212,1,1) + 0x7B18, // 151 :: rgb(245,195,195) + 0x7AD2, // 152 :: rgb(250,178,148) + 0x7ECB, // 153 :: rgb(251,179,87) + 0x7EA8, // 154 :: rgb(251,169,69) + 0xFEAA, // 155 :: rgb(251,176,82) + 0x7652, // 156 :: rgb(236,146,146) + 0xF942, // 157 :: rgb(244,83,16) + 0xF9E9, // 158 :: rgb(246,126,76) + 0xFFDD, // 159 :: rgb(254,246,242) + 0x71EF, // 160 :: rgb(231,120,120) + 0xFB39, // 161 :: rgb(247,206,206) + 0xFF37, // 162 :: rgb(252,208,190) + 0x6D08, // 163 :: rgb(222,65,65) + 0x7FDE, // 164 :: rgb(253,244,244) + 0x7A4D, // 165 :: rgb(248,147,106) + 0xFB5A, // 166 :: rgb(248,216,216) + 0x7F79, // 167 :: rgb(253,220,206) + 0xFAD3, // 168 :: rgb(250,181,153) + 0x7F15, // 169 :: rgb(251,196,173) + 0x7F31, // 170 :: rgb(252,201,137) + 0xF9C8, // 171 :: rgb(246,116,62) + 0xFAB2, // 172 :: rgb(250,176,145) + 0xFF10, // 173 :: rgb(252,198,131) + 0x7A6E, // 174 :: rgb(248,155,117) + 0xFF9B, // 175 :: rgb(253,232,224) + 0xFFBB, // 176 :: rgb(254,240,221) + 0x7920, // 177 :: rgb(244,74,2) + 0x7FDC, // 178 :: rgb(254,243,229) + 0xFE21, // 179 :: rgb(251,141,6) + 0x7F53, // 180 :: rgb(253,210,155) + 0xF9E9, // 181 :: rgb(247,127,77) + 0xFF58, // 182 :: rgb(252,213,197) + 0xFE87, // 183 :: rgb(251,164,58) + 0xFF54, // 184 :: rgb(253,213,164) + 0xFEA9, // 185 :: rgb(251,174,78) + 0xFE21, // 186 :: rgb(251,143,10) + 0x79E8, // 187 :: rgb(246,120,67) + 0x7E87, // 188 :: rgb(251,163,54) + 0xFFDD, // 189 :: rgb(254,248,240) + 0x7F57, // 190 :: rgb(252,210,193) + 0xFF76, // 191 :: rgb(253,222,183) + 0xC3E0, // 192 :: rgb(128,255,0) + 0x0210, // 193 :: rgb(0,128,128) + 0x7E00, // 194 :: rgb(255,128,0) + 0x4030, // 195 :: rgb(128,8,128) + 0x6800, // 196 :: rgb(212,0,0) +}; \ No newline at end of file diff --git a/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/logo_gfx.h b/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/logo_gfx.h new file mode 100644 index 0000000..96abca5 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/logo_gfx.h @@ -0,0 +1,17 @@ +// convpng +// this file contains all the graphics sources for easy inclusion in a project +#ifndef __logo_gfx__ +#define __logo_gfx__ +#include + +#define logo_gfx_transparent_color_index 0 + +#define ubuntu_width 31 +#define ubuntu_height 30 +#define ubuntu_size 545 +extern uint8_t ubuntu_data[545]; +#define ubuntu ((gfx_rletsprite_t*)ubuntu_data) +#define sizeof_logo_gfx_pal 394 +extern uint16_t logo_gfx_pal[197]; + +#endif diff --git a/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/ubuntu.c b/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/ubuntu.c new file mode 100644 index 0000000..eed6d7a --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/ubuntu.c @@ -0,0 +1,25 @@ +// convpng +#include +#include "logo_gfx.h" + +// 8 bpp image +uint8_t ubuntu_data[545] = { + 31,30, // width,height + 0x00,0x04,0xC0,0x04,0x04,0x04,0x17,0x04,0x04,0x04,0x04,0xC2,0x00,0x01,0x05,0x14,0x04,0x0C,0x42,0x23,0x6C,0x05,0x01,0x01,0x00,0x01,0x05,0x13,0x06,0x09,0x15,0xC4, + 0xC4,0x03,0x6F,0x04,0x01,0x01,0x00,0x01,0x05,0x0C,0x0D,0x09,0x58,0x3D,0x4B,0x10,0x90,0x16,0xA6,0xC4,0xC4,0xC4,0xC4,0x3E,0x04,0x01,0x01,0x0C,0x0E,0x84,0x12,0x08, + 0x08,0x08,0x08,0x08,0xA9,0xA1,0xC4,0xC4,0xC4,0xC4,0x40,0x05,0x0A,0x01,0x85,0x01,0x0E,0x8B,0x17,0x08,0x08,0x08,0x08,0x08,0xA5,0x09,0xA3,0xC4,0xC4,0x96,0x55,0x05, + 0x09,0x03,0x80,0x83,0x11,0x01,0x0C,0x8A,0x08,0x08,0x08,0x08,0x08,0x17,0xA7,0xA4,0x9C,0xA0,0x97,0x06,0x08,0x04,0x70,0x0B,0x07,0x0F,0x01,0x0E,0x7F,0x86,0x69,0x8E, + 0x93,0x1C,0x08,0x9D,0xA8,0x9F,0x95,0x13,0x5B,0x09,0x04,0x07,0x06,0x5C,0x52,0x07,0x07,0x0A,0x19,0x01,0x02,0x5F,0x59,0x02,0x09,0x94,0xA2,0x9E,0x08,0x08,0x8F,0x08, + 0x08,0x3A,0x04,0x07,0x06,0x9B,0x07,0x07,0x07,0x07,0x87,0x07,0x08,0x09,0x92,0x8C,0x08,0x08,0x08,0x50,0x47,0x03,0x06,0x07,0xB0,0x0B,0x07,0x07,0x07,0x7E,0x1A,0x09, + 0x06,0x57,0x08,0x08,0x08,0x08,0x10,0x03,0x06,0x06,0xB8,0x07,0x07,0x07,0x0A,0x51,0x0A,0x07,0x09,0x4E,0x08,0x08,0x08,0x12,0x09,0x02,0x02,0x04,0x8D,0xAC,0xAE,0xBE, + 0x01,0x04,0x18,0x07,0x07,0x9A,0x0C,0x06,0x65,0x08,0x08,0x08,0x08,0x16,0x02,0x01,0x0A,0x0E,0xAB,0x08,0x08,0xB1,0x1B,0xBD,0xBA,0x07,0xAD,0x0C,0x06,0x75,0x71,0x6A, + 0x67,0x61,0x73,0x02,0x01,0x06,0x81,0x08,0x08,0x08,0x08,0xBB,0x01,0x03,0xB7,0x07,0xB4,0x14,0x01,0x06,0x13,0x08,0x08,0x08,0x08,0xB5,0x01,0x03,0xBC,0x07,0xAA,0x0C, + 0x06,0x5A,0x64,0x6B,0x74,0x5D,0x53,0x02,0x01,0x0A,0x09,0x89,0x08,0x08,0x1C,0xB6,0xB2,0xB3,0x07,0x99,0x0C,0x06,0x49,0xC4,0xC4,0xC4,0xC4,0x4D,0x02,0x02,0x0A,0x0E, + 0x1B,0x98,0xAF,0x1A,0xB9,0x07,0x07,0x82,0x45,0x0B,0x06,0x3F,0xC4,0xC4,0xC4,0x4A,0x0C,0x02,0x06,0x06,0x19,0x07,0x07,0x07,0x07,0x32,0x0A,0x06,0x37,0x02,0xC4,0xC4, + 0xC4,0x44,0x03,0x06,0x07,0x09,0x88,0x07,0x07,0x07,0x07,0x28,0x08,0x07,0x76,0x4C,0xC4,0xC4,0xC4,0x24,0x20,0x03,0x07,0x06,0x48,0x07,0x07,0x07,0x07,0x30,0x01,0x02, + 0x31,0x09,0x03,0x08,0x14,0x7D,0x03,0xC4,0xC4,0xC4,0xC4,0x1F,0x04,0x08,0x13,0x35,0x07,0x07,0x29,0x09,0x36,0x2A,0x43,0x46,0x56,0x6E,0x6D,0xC4,0xC4,0x02,0x03,0xC4, + 0x3C,0x1E,0x04,0x08,0x04,0x34,0x0F,0x0D,0x2B,0x01,0x0D,0x2F,0xC4,0xC4,0xC4,0xC4,0xC4,0xC4,0x78,0x7C,0x14,0x79,0x7A,0x38,0x05,0x0A,0x01,0x2E,0x01,0x0D,0x33,0x2C, + 0xC4,0xC4,0xC4,0xC4,0xC4,0x66,0x77,0x62,0x72,0x60,0x4F,0x06,0x0C,0x0E,0x27,0x02,0xC4,0xC4,0xC4,0xC4,0xC4,0x7B,0x09,0x63,0x07,0x07,0x0B,0x26,0x05,0x0D,0x0D,0x2D, + 0x22,0x25,0x3B,0x41,0x15,0x54,0x68,0x07,0x07,0x07,0x07,0x39,0x05,0x00,0x01,0x05,0x13,0x06,0x11,0x0A,0x07,0x07,0x07,0x5E,0x04,0x01,0x01,0x00,0x01,0x05,0x14,0x05, + 0x18,0x07,0x07,0x0D,0xBF,0x04,0x01,0x01,0x00,0x01,0x05,0x15,0x03,0x21,0x1D,0x91,0x05,0x01,0x01,0x00,0x04,0xC1,0x06,0x06,0x06,0x17,0x04,0x06,0x06,0x06,0xC3, +}; diff --git a/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/ubuntu.png b/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/ubuntu.png new file mode 100644 index 0000000..55b8ab5 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/ubuntu.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_rletsprite/src/main.c b/frontends/calculator/CEdev/examples/gfx_rletsprite/src/main.c new file mode 100644 index 0000000..8d4e485 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_rletsprite/src/main.c @@ -0,0 +1,109 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +/* Include the sprite data */ +#include "gfx/logo_gfx.h" + +#define w ubuntu_width +#define h ubuntu_height + +#define xmin ((gfx_lcdWidth-w*6)/2) +#define ymin ((gfx_lcdHeight-h*6)/2) +#define xmax (xmin+w*6) +#define ymax (ymin+h*6) + +#define xmin2 (xmin+w*7/2+4) +#define ymin2 (ymin+h*2+4) +#define xmax2 (xmin2+w-8) +#define ymax2 (ymin2+h-8) + +/* For testing conversions */ +gfx_UninitedSprite(ubuntu_normal, w, h); +gfx_UninitedRLETSprite(ubuntu_uninited, (w + 1) * h); + +void main(void) { + /* For testing conversions */ + gfx_rletsprite_t *ubuntu_malloc; + + /* Initialize the 8bpp graphics */ + gfx_Begin(); + + /* Set up the palette for our sprites */ + gfx_SetPalette(logo_gfx_pal, sizeof_logo_gfx_pal, 0); + gfx_palette[255] = gfx_RGBTo1555(192, 192, 192); + + /* Set a centered 192*192 clip region, bordered by gray and filled with color index 0 */ + gfx_FillScreen(255); + gfx_SetColor(0); + gfx_FillRectangle_NoClip(xmin, ymin, xmax - xmin, ymax - ymin); + gfx_SetClipRegion(xmin, ymin, xmax, ymax); + + /* Test no clipping */ + gfx_RLETSprite_NoClip(ubuntu, xmin + w * 3 / 2, ymin + h * 2); + gfx_RLETSprite(ubuntu, xmin + w * 5 / 2, ymin + h * 2); + + /* Test top clipping */ + gfx_RLETSprite(ubuntu, xmin + w, ymin); + gfx_RLETSprite(ubuntu, xmin + w * 2, ymin - h + 1); + gfx_RLETSprite(ubuntu, xmin + w * 3, ymin - h); + gfx_RLETSprite(ubuntu, xmin + w * 4, INT_MIN); + + /* Test bottom clipping */ + gfx_RLETSprite(ubuntu, xmin + w * 4, ymax - h); + gfx_RLETSprite(ubuntu, xmin + w * 3, ymax - 1); + gfx_RLETSprite(ubuntu, xmin + w * 2, ymax); + gfx_RLETSprite(ubuntu, xmin + w, INT_MAX); + + /* Test right clipping */ + gfx_RLETSprite(ubuntu, xmax - w, ymin + h); + gfx_RLETSprite(ubuntu, xmax - 1, ymin + h * 2); + gfx_RLETSprite(ubuntu, xmax, ymin + h * 3); + gfx_RLETSprite(ubuntu, INT_MAX, ymin + h * 4); + + /* Test left clipping */ + gfx_RLETSprite(ubuntu, xmin, ymin + h * 4); + gfx_RLETSprite(ubuntu, xmin - w + 1, ymin + h * 3); + gfx_RLETSprite(ubuntu, xmin - w, ymin + h * 2); + gfx_RLETSprite(ubuntu, INT_MIN, ymin + h); + + /* Test corner clipping */ + gfx_RLETSprite(ubuntu, xmin - w + 1, ymin - h + 1); + gfx_RLETSprite(ubuntu, xmax - 1, ymin - h + 1); + gfx_RLETSprite(ubuntu, xmax - 1, ymax - 1); + gfx_RLETSprite(ubuntu, xmin - w + 1, ymax - 1); + + /* Set a centered 16*16 clip region, bordered by gray and filled with color index 0 */ + gfx_SetColor(255); + gfx_FillRectangle_NoClip(xmin2 - 4, ymin2 - 4, xmax2 - xmin2 + 8, ymax2 - ymin2 + 8); + gfx_SetColor(0); + gfx_FillRectangle_NoClip(xmin2, ymin2, xmax2 - xmin2, ymax2 - ymin2); + gfx_SetClipRegion(xmin2, ymin2, xmax2, ymax2); + + /* Test all-around clipping */ + gfx_RLETSprite(ubuntu, xmin2 - 4, ymin2 - 4); + + /* Test conversions */ + gfx_SetTransparentColor(0); + gfx_ConvertFromRLETSprite(ubuntu, ubuntu_normal); + gfx_TransparentSprite_NoClip(ubuntu_normal, xmin + w * 3 / 2, ymin + h * 3); + gfx_ConvertToRLETSprite(ubuntu_normal, ubuntu_uninited); + gfx_RLETSprite_NoClip(ubuntu_uninited, xmin + w * 5 / 2, ymin + h * 3); + ubuntu_malloc = gfx_ConvertMallocRLETSprite(ubuntu_normal); // Same as gfx_ConvertToNewRLETSprite(ubuntu_normal, malloc) + gfx_RLETSprite_NoClip(ubuntu_malloc, xmin + w * 7 / 2, ymin + h * 3); + + /* Wait for a key to be pressed */ + while (!os_GetCSC()); + + /* Close the graphics */ + gfx_End(); +} diff --git a/frontends/calculator/CEdev/examples/gfx_shapes_shift/autotester.json b/frontends/calculator/CEdev/examples/gfx_shapes_shift/autotester.json new file mode 100644 index 0000000..af3def5 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_shapes_shift/autotester.json @@ -0,0 +1,63 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "hashWait|1", + "key|enter", + "hashWait|2", + "key|enter", + "hashWait|3", + "key|enter", + "hashWait|4", + "key|enter", + "hashWait|5", + "key|enter", + "hashWait|6" + ], + "hashes": { + "1": { + "description": "The empty and filled blue circles are drawn correctly", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "2C41178A" ] + }, + "2": { + "description": "The yellow rectangle, red circle, and blue triangle are drawn correctly", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "C8E3ED16" ] + }, + "3": { + "description": "Filled yellow rectangle, red circle, and blue triangle are drawn correctly", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "D7543DD6" ] + }, + "4": { + "description": "The screen is shifted several times", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "F2BD5102" ] + }, + "5": { + "description": "The screen displays many different triangles", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "CDE95095" ] + }, + "6": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/gfx_shapes_shift/makefile b/frontends/calculator/CEdev/examples/gfx_shapes_shift/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_shapes_shift/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_shapes_shift/readme.md b/frontends/calculator/CEdev/examples/gfx_shapes_shift/readme.md new file mode 100644 index 0000000..5f163d3 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_shapes_shift/readme.md @@ -0,0 +1,10 @@ +### GraphX Shapes and Shift Demo + +Draws different shapes, and demonstrates window shifting. + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/gfx_shapes_shift/screenshot.gif b/frontends/calculator/CEdev/examples/gfx_shapes_shift/screenshot.gif new file mode 100644 index 0000000..e6bf77b Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_shapes_shift/screenshot.gif differ diff --git a/frontends/calculator/CEdev/examples/gfx_shapes_shift/src/main.c b/frontends/calculator/CEdev/examples/gfx_shapes_shift/src/main.c new file mode 100644 index 0000000..cfa784d --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_shapes_shift/src/main.c @@ -0,0 +1,112 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +void main(void) { + uint8_t y; + uint24_t i; + + /* Triangle coordinates */ + int verts[6] = { + 160, 1, /* (x0, y0) */ + 1, 238, /* (x1, y1) */ + 318,238, /* (x2, y2) */ + }; + + /* Initialize the 8bpp graphics */ + gfx_Begin(); + gfx_SetColor(gfx_blue); + + /* Draw some circles to make sure they all look the same */ + y = 40; + for (i = 2; i < 13; i++) { + y += i; + gfx_FillCircle_NoClip(80, y, i); + y += i + 3; + } + y = 40; + for (i = 2; i < 13; i++) { + y += i; + gfx_FillCircle(240, y, i); + y += i + 3; + } + y = 40; + for (i = 2; i < 13; i++) { + y += i; + gfx_Circle(160, y, i); + y += i + 3; + } + + /* Wait for any key */ + while (!os_GetCSC()); + + gfx_FillScreen(gfx_white); + gfx_SetColor(gfx_yellow); + gfx_Rectangle(0, 0, 320, 240); + + /* Draw a blue triangle outline */ + gfx_SetColor(gfx_blue); + gfx_Polygon(verts, 3); + + /* Draw a red circle outline */ + gfx_SetColor(gfx_red); + gfx_Circle(160, 152, 80); + + /* Wait for any key */ + while (!os_GetCSC()); + + /* Draw a filled yellow rectangle */ + gfx_SetColor(gfx_yellow); + gfx_FillRectangle(0, 0, 320, 240); + + /* Draw a filled blue triangle */ + gfx_SetColor(gfx_blue); + gfx_FillTriangle(verts[0], verts[1], verts[2], verts[3], verts[4], verts[5]); + + /* Draw a filled red circle */ + gfx_SetColor(gfx_red); + gfx_FillCircle(160, 152, 80); + + /* Wait for any key */ + while (!os_GetCSC()); + + /* Shift the screen around a bit */ + gfx_ShiftDown(20); + gfx_ShiftDown(20); + gfx_ShiftLeft(20); + gfx_ShiftLeft(20); + gfx_ShiftUp(20); + gfx_ShiftRight(20); + + /* Wait for any key */ + while (!os_GetCSC()); + + gfx_FillScreen(gfx_white); + + /* Test triangle drawing */ + gfx_SetColor(gfx_blue); + gfx_FillTriangle(110, 170, 110, 70, 230, 70); + gfx_SetColor(gfx_green); + gfx_FillTriangle_NoClip(110, 170, 230, 70, 230, 170); + gfx_SetColor(gfx_black); + gfx_FillTriangle(110, 170, 200, 200, 230, 200); + gfx_FillTriangle_NoClip(140, 40, 110, 40, 230, 70); + gfx_FillTriangle(1, 1, 318, 1, 1, 1); + gfx_FillTriangle_NoClip(1, 238, 1, 238, 318, 238); + gfx_FillTriangle(1, 3, 1, 236, 1, 236); + gfx_FillTriangle_NoClip(318, 3, 318, 236, 318, 3); + + /* Wait for any key */ + while (!os_GetCSC()); + + /* Close the graphics */ + gfx_End(); +} diff --git a/frontends/calculator/CEdev/examples/gfx_sprite/autotester.json b/frontends/calculator/CEdev/examples/gfx_sprite/autotester.json new file mode 100644 index 0000000..a88868a --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite/autotester.json @@ -0,0 +1,31 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "hashWait|1", + "key|enter", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "Make sure the sprites are displayed properly", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "DF7FD32" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/gfx_sprite/makefile b/frontends/calculator/CEdev/examples/gfx_sprite/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_sprite/readme.md b/frontends/calculator/CEdev/examples/gfx_sprite/readme.md new file mode 100644 index 0000000..9c072c0 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite/readme.md @@ -0,0 +1,10 @@ +### GraphX Sprite Demo + +Draws a bunch of different styles of sprites on the screen. + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/gfx_sprite/screenshot.png b/frontends/calculator/CEdev/examples/gfx_sprite/screenshot.png new file mode 100644 index 0000000..b115cbe Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_sprite/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/convpng.ini b/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/convpng.ini new file mode 100644 index 0000000..7bd3158 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/convpng.ini @@ -0,0 +1,4 @@ +#GroupC : logo_gfx +#TransparentColor : 255,255,255 +#PNGImages : + ubuntu diff --git a/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/logo_gfx.c b/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/logo_gfx.c new file mode 100644 index 0000000..4086cdc --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/logo_gfx.c @@ -0,0 +1,195 @@ +// convpng +#include +#include "logo_gfx.h" + +uint16_t logo_gfx_pal[189] = { + 0xFFFF, // 00 :: rgb(255,255,255) + 0x7E20, // 01 :: rgb(251,139,1) + 0xFE20, // 02 :: rgb(251,140,4) + 0xFFFF, // 03 :: rgb(255,253,253) + 0x6800, // 04 :: rgb(212,2,2) + 0xE821, // 05 :: rgb(213,11,11) + 0x7E20, // 06 :: rgb(251,139,2) + 0x7E20, // 07 :: rgb(251,139,0) + 0x7920, // 08 :: rgb(244,72,0) + 0xFFFF, // 09 :: rgb(255,254,254) + 0xFFFF, // 10 :: rgb(255,254,253) + 0xFECC, // 11 :: rgb(252,182,97) + 0x7A90, // 12 :: rgb(249,163,128) + 0x7FDC, // 13 :: rgb(254,244,231) + 0xF985, // 14 :: rgb(245,100,40) + 0x7F9A, // 15 :: rgb(253,225,213) + 0x7FDD, // 16 :: rgb(253,242,242) + 0x6D6B, // 17 :: rgb(226,90,90) + 0xFFBC, // 18 :: rgb(254,239,233) + 0xF921, // 19 :: rgb(244,77,7) + 0x7EED, // 20 :: rgb(252,187,107) + 0xFF99, // 21 :: rgb(254,231,203) + 0xFFFE, // 22 :: rgb(255,253,250) + 0xFF16, // 23 :: rgb(251,199,177) + 0xF921, // 24 :: rgb(244,78,8) + 0xFE87, // 25 :: rgb(251,167,61) + 0xFFBA, // 26 :: rgb(254,237,216) + 0x7F31, // 27 :: rgb(253,204,143) + 0xFF76, // 28 :: rgb(253,222,183) + 0x7B7B, // 29 :: rgb(249,220,220) + 0xFAF7, // 30 :: rgb(244,192,192) + 0x7FDD, // 31 :: rgb(252,241,241) + 0xF18C, // 32 :: rgb(229,102,102) + 0xFE87, // 33 :: rgb(251,164,56) + 0x7B5A, // 34 :: rgb(247,212,212) + 0xFF76, // 35 :: rgb(253,221,181) + 0xF652, // 36 :: rgb(237,151,151) + 0x7652, // 37 :: rgb(236,145,145) + 0x6D29, // 38 :: rgb(224,74,74) + 0xE800, // 39 :: rgb(212,3,3) + 0x718C, // 40 :: rgb(228,98,98) + 0xFF54, // 41 :: rgb(253,214,165) + 0x7673, // 42 :: rgb(237,153,153) + 0xFF32, // 43 :: rgb(252,205,148) + 0x7EA8, // 44 :: rgb(251,169,68) + 0x6CC6, // 45 :: rgb(219,48,48) + 0x7FBA, // 46 :: rgb(254,234,211) + 0xE842, // 47 :: rgb(215,20,20) + 0xFB7B, // 48 :: rgb(250,224,224) + 0xFF77, // 49 :: rgb(253,224,187) + 0xF652, // 50 :: rgb(237,149,149) + 0x7F75, // 51 :: rgb(253,218,175) + 0x7FFE, // 52 :: rgb(254,249,249) + 0x7EEC, // 53 :: rgb(252,185,102) + 0x7FBD, // 54 :: rgb(252,236,236) + 0xFFFF, // 55 :: rgb(255,253,251) + 0x7EED, // 56 :: rgb(252,188,109) + 0x7FFF, // 57 :: rgb(254,252,252) + 0xFAF7, // 58 :: rgb(243,189,189) + 0x7B9B, // 59 :: rgb(250,225,225) + 0x7AD2, // 60 :: rgb(250,179,149) + 0xED09, // 61 :: rgb(224,70,70) + 0xECA5, // 62 :: rgb(218,43,43) + 0xFAF4, // 63 :: rgb(250,190,165) + 0x6D4A, // 64 :: rgb(225,82,82) + 0xED08, // 65 :: rgb(223,69,69) + 0x6D08, // 66 :: rgb(222,63,63) + 0x76D6, // 67 :: rgb(242,178,178) + 0xECC6, // 68 :: rgb(220,51,51) + 0xF1AD, // 69 :: rgb(229,109,109) + 0xFFDD, // 70 :: rgb(254,246,235) + 0x718C, // 71 :: rgb(228,97,97) + 0xFFBC, // 72 :: rgb(254,239,234) + 0xFF77, // 73 :: rgb(253,223,187) + 0x76D6, // 74 :: rgb(242,179,179) + 0x6863, // 75 :: rgb(216,26,26) + 0x7AB1, // 76 :: rgb(249,169,136) + 0xE843, // 77 :: rgb(215,21,21) + 0xFF9C, // 78 :: rgb(251,230,230) + 0xF9A6, // 79 :: rgb(245,108,51) + 0x7F97, // 80 :: rgb(253,225,189) + 0x7942, // 81 :: rgb(244,81,13) + 0x7FBA, // 82 :: rgb(254,236,215) + 0xFE21, // 83 :: rgb(251,143,11) + 0x7FBC, // 84 :: rgb(251,234,234) + 0xFB18, // 85 :: rgb(245,197,197) + 0x76D6, // 86 :: rgb(242,177,177) + 0x71AD, // 87 :: rgb(229,106,106) + 0xFAB2, // 88 :: rgb(249,176,144) + 0x7F9A, // 89 :: rgb(253,227,217) + 0x7FDD, // 90 :: rgb(254,242,237) + 0x7FDE, // 91 :: rgb(253,243,243) + 0x7AB1, // 92 :: rgb(249,171,139) + 0xFFBB, // 93 :: rgb(254,239,221) + 0xF694, // 94 :: rgb(240,167,167) + 0xFF7A, // 95 :: rgb(253,224,213) + 0x7F0E, // 96 :: rgb(253,193,117) + 0xFA6F, // 97 :: rgb(249,159,121) + 0x7FFE, // 98 :: rgb(255,251,247) + 0xFEAA, // 99 :: rgb(251,175,80) + 0x7694, // 100 :: rgb(239,161,161) + 0x7AF3, // 101 :: rgb(250,186,160) + 0xE801, // 102 :: rgb(213,5,5) + 0xFA6F, // 103 :: rgb(249,159,122) + 0x7FDB, // 104 :: rgb(254,241,224) + 0xF920, // 105 :: rgb(244,75,4) + 0x7A8F, // 106 :: rgb(249,160,123) + 0x7694, // 107 :: rgb(239,163,163) + 0xE822, // 108 :: rgb(214,14,14) + 0x6D29, // 109 :: rgb(223,71,71) + 0xFF55, // 110 :: rgb(253,215,169) + 0x7A8F, // 111 :: rgb(249,161,124) + 0xFF32, // 112 :: rgb(253,207,151) + 0x7FBB, // 113 :: rgb(253,233,224) + 0xF694, // 114 :: rgb(239,165,165) + 0xFFBC, // 115 :: rgb(254,238,231) + 0xFB39, // 116 :: rgb(247,208,208) + 0x7B38, // 117 :: rgb(246,201,201) + 0x6842, // 118 :: rgb(214,16,16) + 0x7FFF, // 119 :: rgb(254,251,251) + 0xFB7B, // 120 :: rgb(250,223,223) + 0xF16C, // 121 :: rgb(227,95,95) + 0x7672, // 122 :: rgb(237,152,152) + 0x7631, // 123 :: rgb(235,138,138) + 0xFE87, // 124 :: rgb(251,165,60) + 0xFFDD, // 125 :: rgb(254,245,240) + 0xFF33, // 126 :: rgb(252,208,154) + 0x7F79, // 127 :: rgb(252,220,207) + 0x7E41, // 128 :: rgb(251,144,12) + 0x7E42, // 129 :: rgb(251,146,19) + 0x7F36, // 130 :: rgb(251,202,182) + 0x7FDC, // 131 :: rgb(254,243,230) + 0x7963, // 132 :: rgb(244,89,24) + 0x7F0E, // 133 :: rgb(252,193,119) + 0xFE87, // 134 :: rgb(251,164,57) + 0x7A2B, // 135 :: rgb(247,138,92) + 0xFA6E, // 136 :: rgb(249,157,119) + 0xFF9B, // 137 :: rgb(253,229,219) + 0x7920, // 138 :: rgb(244,74,3) + 0xFFDE, // 139 :: rgb(254,246,243) + 0xF964, // 140 :: rgb(245,95,32) + 0xF921, // 141 :: rgb(244,76,6) + 0xFAD3, // 142 :: rgb(250,183,155) + 0xFAD3, // 143 :: rgb(250,182,154) + 0xF985, // 144 :: rgb(245,103,44) + 0x7FFE, // 145 :: rgb(255,252,250) + 0x7FFE, // 146 :: rgb(255,251,250) + 0x6800, // 147 :: rgb(212,1,1) + 0x7B18, // 148 :: rgb(245,195,195) + 0x7AD2, // 149 :: rgb(250,178,148) + 0x7ECB, // 150 :: rgb(251,179,87) + 0x7EA8, // 151 :: rgb(251,169,69) + 0xFEAA, // 152 :: rgb(251,176,82) + 0x7652, // 153 :: rgb(236,146,146) + 0xF942, // 154 :: rgb(244,83,16) + 0xF9E9, // 155 :: rgb(246,126,76) + 0xFFDD, // 156 :: rgb(254,246,242) + 0x71EF, // 157 :: rgb(231,120,120) + 0xFB39, // 158 :: rgb(247,206,206) + 0xFF37, // 159 :: rgb(252,208,190) + 0x6D08, // 160 :: rgb(222,65,65) + 0x7FDE, // 161 :: rgb(253,244,244) + 0x7A4D, // 162 :: rgb(248,147,106) + 0xFB5A, // 163 :: rgb(248,216,216) + 0x7F79, // 164 :: rgb(253,220,206) + 0xFAD3, // 165 :: rgb(250,181,153) + 0x7F15, // 166 :: rgb(251,196,173) + 0x7F31, // 167 :: rgb(252,201,137) + 0xF9C8, // 168 :: rgb(246,116,62) + 0xFAB2, // 169 :: rgb(250,176,145) + 0xFF10, // 170 :: rgb(252,198,131) + 0x7A6E, // 171 :: rgb(248,155,117) + 0xFF9B, // 172 :: rgb(253,232,224) + 0xFFBB, // 173 :: rgb(254,240,221) + 0x7920, // 174 :: rgb(244,74,2) + 0x7FDC, // 175 :: rgb(254,243,229) + 0xFE21, // 176 :: rgb(251,141,6) + 0x7F53, // 177 :: rgb(253,210,155) + 0xF9E9, // 178 :: rgb(247,127,77) + 0xFF58, // 179 :: rgb(252,213,197) + 0xFE87, // 180 :: rgb(251,164,58) + 0xFF54, // 181 :: rgb(253,213,164) + 0xFEA9, // 182 :: rgb(251,174,78) + 0xFE21, // 183 :: rgb(251,143,10) + 0x79E8, // 184 :: rgb(246,120,67) + 0x7E87, // 185 :: rgb(251,163,54) + 0xFFDD, // 186 :: rgb(254,248,240) + 0x7F57, // 187 :: rgb(252,210,193) + 0x6800, // 188 :: rgb(212,0,0) +}; \ No newline at end of file diff --git a/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/logo_gfx.h b/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/logo_gfx.h new file mode 100644 index 0000000..eba6d22 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/logo_gfx.h @@ -0,0 +1,17 @@ +// convpng +// this file contains all the graphics sources for easy inclusion in a project +#ifndef __logo_gfx__ +#define __logo_gfx__ +#include + +#define logo_gfx_transparent_color_index 0 + +#define ubuntu_width 32 +#define ubuntu_height 32 +#define ubuntu_size 1026 +extern uint8_t ubuntu_data[1026]; +#define ubuntu ((gfx_sprite_t*)ubuntu_data) +#define sizeof_logo_gfx_pal 378 +extern uint16_t logo_gfx_pal[189]; + +#endif diff --git a/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/ubuntu.c b/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/ubuntu.c new file mode 100644 index 0000000..ac4f3b9 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/ubuntu.c @@ -0,0 +1,40 @@ +// convpng +#include +#include "logo_gfx.h" + +// 8 bpp image +uint8_t ubuntu_data[1026] = { + 32,32, // width,height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x43,0x25,0x1D,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x11,0xBC,0xBC,0x05,0x1E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x59,0x3F,0x4C,0x0C,0x8E,0x12,0xA3,0xBC,0xBC,0xBC,0xBC,0x26,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x0E,0x08,0x08,0x08,0x08,0x08,0xA6,0x9E,0xBC,0xBC,0xBC,0xBC,0x41,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x00,0x89,0x13,0x08,0x08,0x08,0x08,0x08,0xA2,0x09,0xA0,0xBC,0xBC,0x93,0x56,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x81,0x0D,0x00,0x88,0x08,0x08,0x08,0x08,0x08,0x13,0xA4,0xA1,0x99,0x9D,0x94,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x01,0x07,0x0B,0x00,0x7D,0x84,0x69,0x8C,0x90,0x18,0x08,0x9A,0xA5,0x9C,0x92,0x0F,0x5C,0x09,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5D,0x53,0x07,0x07,0x06,0x15,0x00,0x5F,0x5A,0x00,0x00,0x91,0x9F,0x9B,0x08,0x08,0x8D,0x08,0x08,0x3C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x07,0x07,0x07,0x07,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x8F,0x8A,0x08,0x08,0x08,0x51,0x48,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAD,0x01,0x07,0x07,0x07,0x7C,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x08,0x08,0x08,0x08,0x0C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB5,0x07,0x07,0x07,0x06,0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x4F,0x08,0x08,0x08,0x0E,0x09,0x00,0x00, + 0x00,0x00,0x00,0x8B,0xA9,0xAB,0xBB,0x00,0x14,0x07,0x07,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x65,0x08,0x08,0x08,0x08,0x12,0x00,0x00, + 0x00,0x00,0x0A,0xA8,0x08,0x08,0xAE,0x17,0xBA,0xB7,0x07,0xAA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x6F,0x6A,0x67,0x61,0x71,0x00,0x00, + 0x00,0x00,0x7F,0x08,0x08,0x08,0x08,0xB8,0x00,0xB4,0x07,0xB1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x0F,0x08,0x08,0x08,0x08,0xB2,0x00,0xB9,0x07,0xA7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5B,0x64,0x6B,0x72,0x5E,0x54,0x00,0x00, + 0x00,0x00,0x09,0x87,0x08,0x08,0x18,0xB3,0xAF,0xB0,0x07,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4A,0xBC,0xBC,0xBC,0xBC,0x4E,0x00,0x00, + 0x00,0x00,0x00,0x0A,0x17,0x95,0xAC,0x16,0xB6,0x07,0x07,0x80,0x46,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xBC,0xBC,0xBC,0x4B,0x03,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x07,0x07,0x07,0x07,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3A,0x04,0xBC,0xBC,0xBC,0x45,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x86,0x07,0x07,0x07,0x07,0x2B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x4D,0xBC,0xBC,0xBC,0x27,0x22,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x49,0x07,0x07,0x07,0x07,0x33,0x00,0x34,0x09,0x00,0x00,0x00,0x10,0x7B,0x05,0xBC,0xBC,0xBC,0xBC,0x20,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x07,0x07,0x2C,0x09,0x39,0x2D,0x44,0x47,0x57,0x6D,0x6C,0xBC,0xBC,0x04,0x05,0xBC,0x3E,0x1F,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x0B,0x02,0x2E,0x00,0x32,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0x76,0x7A,0x10,0x77,0x78,0x3B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x36,0x2F,0xBC,0xBC,0xBC,0xBC,0xBC,0x66,0x75,0x62,0x70,0x60,0x50,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2A,0x04,0xBC,0xBC,0xBC,0xBC,0xBC,0x79,0x09,0x63,0x07,0x07,0x01,0x29,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x24,0x28,0x3D,0x42,0x11,0x55,0x68,0x07,0x07,0x07,0x07,0x21,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0x06,0x07,0x07,0x07,0x19,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x07,0x07,0x02,0x1C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x1B,0x1A,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; diff --git a/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/ubuntu.png b/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/ubuntu.png new file mode 100644 index 0000000..d041515 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/ubuntu.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_sprite/src/main.c b/frontends/calculator/CEdev/examples/gfx_sprite/src/main.c new file mode 100644 index 0000000..de618be --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite/src/main.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +/* Include the sprite data */ +#include "gfx/logo_gfx.h" + +void main(void) { + /* Initialize the 8bpp graphics */ + gfx_Begin(); + + /* Set up the palette for our sprites */ + gfx_SetPalette(logo_gfx_pal, sizeof_logo_gfx_pal, 0); + + /* Fill the screen with color index 0 */ + gfx_FillScreen(0); + + /* Draw a bunch of different styled sprites on the screen */ + gfx_Sprite(ubuntu, 0, 0); + gfx_Sprite_NoClip(ubuntu, 32, 32); + gfx_TransparentSprite(ubuntu, 64, 64); + gfx_TransparentSprite_NoClip(ubuntu, 96, 96); + gfx_ScaledSprite_NoClip(ubuntu, 128, 128, 2, 2); + gfx_ScaledTransparentSprite_NoClip(ubuntu, 128, 0, 3, 3); + + /* Wait for a key to be pressed */ + while (!os_GetCSC()); + + /* Close the graphics */ + gfx_End(); +} diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_compress/autotester.json b/frontends/calculator/CEdev/examples/gfx_sprite_compress/autotester.json new file mode 100644 index 0000000..553842a --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_compress/autotester.json @@ -0,0 +1,33 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|1000", + "hash|1", + "key|enter", + "delay|300", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "A green apple will be displayed", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "250E0F47" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_compress/makefile b/frontends/calculator/CEdev/examples/gfx_sprite_compress/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_compress/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_compress/readme.md b/frontends/calculator/CEdev/examples/gfx_sprite_compress/readme.md new file mode 100644 index 0000000..bd5fb0e --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_compress/readme.md @@ -0,0 +1,10 @@ +### GraphX Sprite Compression Demo + +An example of decompressing sprites created with ConvPNG. + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_compress/screenshot.png b/frontends/calculator/CEdev/examples/gfx_sprite_compress/screenshot.png new file mode 100644 index 0000000..baeabbd Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_sprite_compress/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/all_gfx.c b/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/all_gfx.c new file mode 100644 index 0000000..f546e01 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/all_gfx.c @@ -0,0 +1,262 @@ +// Converted using ConvPNG +#include +#include "all_gfx.h" + +uint16_t all_gfx_pal[256] = { + 0xFFFF, // 00 :: rgb(255,255,255) + 0x4AA4, // 01 :: rgb(146,169,33) + 0xFFFF, // 02 :: rgb(255,255,253) + 0xCAA0, // 03 :: rgb(144,173,1) + 0xCAA0, // 04 :: rgb(148,176,1) + 0xCEC0, // 05 :: rgb(154,183,3) + 0xCAC0, // 06 :: rgb(152,181,3) + 0xFFFF, // 07 :: rgb(254,255,255) + 0xFFFF, // 08 :: rgb(253,254,253) + 0x4AC0, // 09 :: rgb(150,178,2) + 0xCAA0, // 10 :: rgb(147,174,3) + 0xC684, // 11 :: rgb(142,166,29) + 0x4AA4, // 12 :: rgb(148,172,32) + 0x7BFE, // 13 :: rgb(250,250,250) + 0x5301, // 14 :: rgb(166,196,5) + 0x4EE0, // 15 :: rgb(158,188,2) + 0x4AA3, // 16 :: rgb(146,170,27) + 0x4EE0, // 17 :: rgb(156,185,3) + 0xFFFF, // 18 :: rgb(255,254,255) + 0xC680, // 19 :: rgb(141,167,3) + 0xCEE0, // 20 :: rgb(160,190,3) + 0xCAA5, // 21 :: rgb(150,173,39) + 0xCAA4, // 22 :: rgb(152,175,31) + 0x4AA5, // 23 :: rgb(147,169,45) + 0xB600, // 24 :: rgb(110,132,3) + 0xCA84, // 25 :: rgb(144,167,34) + 0x4683, // 26 :: rgb(137,160,22) + 0x7FFF, // 27 :: rgb(252,252,251) + 0x4683, // 28 :: rgb(140,162,27) + 0x4684, // 29 :: rgb(140,161,34) + 0x46A0, // 30 :: rgb(143,170,1) + 0xC682, // 31 :: rgb(142,167,19) + 0x4AA7, // 32 :: rgb(150,172,59) + 0x4AA5, // 33 :: rgb(147,169,39) + 0xFBDD, // 34 :: rgb(244,245,242) + 0xD301, // 35 :: rgb(168,198,5) + 0xFBDE, // 36 :: rgb(247,248,245) + 0xCAA3, // 37 :: rgb(150,175,24) + 0x4280, // 38 :: rgb(135,160,3) + 0xBE20, // 39 :: rgb(120,143,3) + 0x3600, // 40 :: rgb(107,129,2) + 0x3A20, // 41 :: rgb(112,136,2) + 0xCAA1, // 42 :: rgb(149,176,6) + 0xCAA6, // 43 :: rgb(151,173,46) + 0x5722, // 44 :: rgb(173,203,15) + 0x4263, // 45 :: rgb(133,154,27) + 0xC664, // 46 :: rgb(137,158,30) + 0xC241, // 47 :: rgb(129,151,12) + 0xC680, // 48 :: rgb(137,164,1) + 0x7FFF, // 49 :: rgb(252,252,253) + 0xC262, // 50 :: rgb(135,158,18) + 0x4AA1, // 51 :: rgb(146,171,8) + 0x4AA3, // 52 :: rgb(147,171,23) + 0x4AA6, // 53 :: rgb(150,172,52) + 0xC260, // 54 :: rgb(131,157,2) + 0x6BB3, // 55 :: rgb(214,234,153) + 0xD2E0, // 56 :: rgb(162,192,3) + 0x4EC2, // 57 :: rgb(153,179,13) + 0x4AA2, // 58 :: rgb(146,172,17) + 0x5721, // 59 :: rgb(172,202,5) + 0xDB22, // 60 :: rgb(177,207,20) + 0x3E46, // 61 :: rgb(124,145,53) + 0x6FD6, // 62 :: rgb(224,241,178) + 0x6BB3, // 63 :: rgb(216,235,159) + 0xE791, // 64 :: rgb(207,229,139) + 0xBE45, // 65 :: rgb(126,149,40) + 0xD702, // 66 :: rgb(170,199,15) + 0x4264, // 67 :: rgb(130,152,35) + 0xEB92, // 68 :: rgb(211,232,146) + 0x3E60, // 69 :: rgb(127,153,1) + 0xC243, // 70 :: rgb(129,151,22) + 0xEFB5, // 71 :: rgb(223,240,173) + 0x5300, // 72 :: rgb(164,194,3) + 0x4262, // 73 :: rgb(132,154,16) + 0x3E45, // 74 :: rgb(123,145,45) + 0xCAA2, // 75 :: rgb(150,175,15) + 0xF7BC, // 76 :: rgb(237,238,233) + 0xB1C0, // 77 :: rgb(98,118,4) + 0xEFB4, // 78 :: rgb(221,238,168) + 0xFFFF, // 79 :: rgb(252,253,255) + 0xBE40, // 80 :: rgb(123,149,2) + 0x4265, // 81 :: rgb(131,153,41) + 0x4AA8, // 82 :: rgb(150,172,68) + 0x77DD, // 83 :: rgb(241,242,237) + 0xC684, // 84 :: rgb(142,164,33) + 0x6FB4, // 85 :: rgb(218,236,165) + 0x6790, // 86 :: rgb(203,225,133) + 0xD2E1, // 87 :: rgb(163,192,11) + 0x3E44, // 88 :: rgb(123,145,36) + 0x2DC0, // 89 :: rgb(94,113,2) + 0x31E0, // 90 :: rgb(101,123,1) + 0x73BC, // 91 :: rgb(232,233,228) + 0xC681, // 92 :: rgb(139,164,9) + 0x3E41, // 93 :: rgb(124,146,6) + 0xCEA9, // 94 :: rgb(154,175,75) + 0xCA85, // 95 :: rgb(144,167,40) + 0x5723, // 96 :: rgb(174,203,28) + 0xDB24, // 97 :: rgb(180,208,30) + 0xDB43, // 98 :: rgb(183,214,27) + 0xBA20, // 99 :: rgb(115,140,2) + 0x4264, // 100 :: rgb(135,155,37) + 0x3A21, // 101 :: rgb(117,138,6) + 0x5B47, // 102 :: rgb(183,212,55) + 0xC685, // 103 :: rgb(142,164,38) + 0xD721, // 104 :: rgb(175,208,7) + 0x73D7, // 105 :: rgb(230,244,191) + 0xB5E0, // 106 :: rgb(106,124,4) + 0xCEAA, // 107 :: rgb(157,176,86) + 0xBE27, // 108 :: rgb(123,143,60) + 0xCEA8, // 109 :: rgb(154,175,62) + 0x3E42, // 110 :: rgb(126,146,18) + 0x73D6, // 111 :: rgb(227,242,183) + 0x5F68, // 112 :: rgb(190,217,65) + 0x5B49, // 113 :: rgb(184,211,74) + 0x636D, // 114 :: rgb(195,220,104) + 0xDB26, // 115 :: rgb(178,206,52) + 0x5F64, // 116 :: rgb(186,217,37) + 0x4ECC, // 117 :: rgb(160,178,98) + 0xD2CD, // 118 :: rgb(165,181,109) + 0x4249, // 119 :: rgb(129,147,77) + 0xDF4C, // 120 :: rgb(189,215,98) + 0xBA25, // 121 :: rgb(118,140,45) + 0xFFFE, // 122 :: rgb(254,255,249) + 0xE36B, // 123 :: rgb(196,223,92) + 0x5F69, // 124 :: rgb(191,218,76) + 0x5B48, // 125 :: rgb(181,209,65) + 0x2DA1, // 126 :: rgb(93,105,5) + 0x5302, // 127 :: rgb(166,195,15) + 0xDB41, // 128 :: rgb(181,214,11) + 0x4AA7, // 129 :: rgb(146,168,56) + 0x6F98, // 130 :: rgb(218,228,199) + 0x5B45, // 131 :: rgb(182,211,42) + 0x678F, // 132 :: rgb(203,226,123) + 0xBA24, // 133 :: rgb(119,140,32) + 0x6792, // 134 :: rgb(207,227,145) + 0xDB25, // 135 :: rgb(177,206,40) + 0xE367, // 136 :: rgb(195,223,56) + 0xE36E, // 137 :: rgb(197,221,117) + 0x6388, // 138 :: rgb(198,225,67) + 0x4EE2, // 139 :: rgb(159,187,13) + 0xBE44, // 140 :: rgb(127,149,30) + 0xBA03, // 141 :: rgb(114,133,22) + 0x4EC5, // 142 :: rgb(156,179,40) + 0x6B97, // 143 :: rgb(213,225,188) + 0x5F66, // 144 :: rgb(188,218,50) + 0x3E47, // 145 :: rgb(127,147,61) + 0x2960, // 146 :: rgb(80,89,3) + 0xBE22, // 147 :: rgb(121,141,15) + 0x5B4A, // 148 :: rgb(185,211,85) + 0xC246, // 149 :: rgb(128,150,46) + 0x5F6A, // 150 :: rgb(191,218,86) + 0xEF7A, // 151 :: rgb(222,223,214) + 0x6F7A, // 152 :: rgb(218,218,210) + 0x56EF, // 153 :: rgb(170,185,121) + 0x739B, // 154 :: rgb(227,227,221) + 0xE774, // 155 :: rgb(206,223,168) + 0x2981, // 156 :: rgb(86,97,5) + 0x5F63, // 157 :: rgb(188,219,24) + 0x3E43, // 158 :: rgb(123,145,27) + 0x7FFE, // 159 :: rgb(251,252,245) + 0x3E49, // 160 :: rgb(126,144,71) + 0x2101, // 161 :: rgb(69,66,9) + 0xEFB5, // 162 :: rgb(219,237,173) + 0x424A, // 163 :: rgb(131,147,86) + 0x678D, // 164 :: rgb(202,227,110) + 0x6758, // 165 :: rgb(208,209,195) + 0xDF65, // 166 :: rgb(193,223,41) + 0xE776, // 167 :: rgb(208,223,178) + 0x6316, // 168 :: rgb(196,195,181) + 0x2541, // 169 :: rgb(74,79,5) + 0xA903, // 170 :: rgb(79,68,22) + 0xC665, // 171 :: rgb(139,159,41) + 0x73BA, // 172 :: rgb(229,234,217) + 0x678C, // 173 :: rgb(202,228,99) + 0x6773, // 174 :: rgb(202,219,159) + 0xEB59, // 175 :: rgb(213,213,202) + 0xEF99, // 176 :: rgb(224,232,207) + 0x5EF5, // 177 :: rgb(190,185,172) + 0x638A, // 178 :: rgb(199,226,81) + 0x4EC3, // 179 :: rgb(154,180,24) + 0xC64C, // 180 :: rgb(136,151,95) + 0xB5E3, // 181 :: rgb(106,125,21) + 0x3A27, // 182 :: rgb(119,137,59) + 0x6737, // 183 :: rgb(203,201,189) + 0xBA06, // 184 :: rgb(114,133,53) + 0xC66C, // 185 :: rgb(142,157,102) + 0x6793, // 186 :: rgb(208,227,154) + 0x5B2D, // 187 :: rgb(177,201,103) + 0xBA04, // 188 :: rgb(113,134,37) + 0xCA6D, // 189 :: rgb(145,159,111) + 0xE790, // 190 :: rgb(209,232,128) + 0x6370, // 191 :: rgb(195,217,130) + 0xDB30, // 192 :: rgb(184,205,130) + 0xF7BB, // 193 :: rgb(236,239,223) + 0x5F51, // 194 :: rgb(191,211,142) + 0x3DCA, // 195 :: rgb(125,115,83) + 0x5AD4, // 196 :: rgb(182,177,161) + 0xD6F0, // 197 :: rgb(176,189,134) + 0x5B2E, // 198 :: rgb(181,204,117) + 0x4E4F, // 199 :: rgb(153,147,125) + 0x5303, // 200 :: rgb(168,196,27) + 0xD271, // 201 :: rgb(163,157,136) + 0xDF12, // 202 :: rgb(186,197,151) + 0xC1EC, // 203 :: rgb(134,125,96) + 0xE755, // 204 :: rgb(202,214,170) + 0xCA86, // 205 :: rgb(144,165,47) + 0xD692, // 206 :: rgb(174,167,149) + 0x5AF2, // 207 :: rgb(178,188,152) + 0xCA8E, // 208 :: rgb(151,164,117) + 0xB146, // 209 :: rgb(98,86,46) + 0x6353, // 210 :: rgb(194,212,154) + 0x6372, // 211 :: rgb(199,220,146) + 0x31C3, // 212 :: rgb(99,114,23) + 0xDF4E, // 213 :: rgb(190,214,115) + 0x4AAA, // 214 :: rgb(151,169,83) + 0xE334, // 215 :: rgb(195,205,168) + 0x6756, // 216 :: rgb(204,212,184) + 0xB5E5, // 217 :: rgb(107,124,41) + 0x52D2, // 218 :: rgb(168,178,144) + 0x4A2E, // 219 :: rgb(144,138,112) + 0xD705, // 220 :: rgb(172,199,43) + 0xF3D8, // 221 :: rgb(232,245,200) + 0x4EE6, // 222 :: rgb(160,185,52) + 0x4EAF, // 223 :: rgb(156,168,126) + 0x3587, // 224 :: rgb(107,97,59) + 0x39A9, // 225 :: rgb(119,106,71) + 0x5F15, // 226 :: rgb(187,194,170) + 0xC669, // 227 :: rgb(142,159,74) + 0xBE09, // 228 :: rgb(120,135,72) + 0x52E4, // 229 :: rgb(162,188,30) + 0xD2B1, // 230 :: rgb(161,173,136) + 0xD70A, // 231 :: rgb(173,200,85) + 0xAD24, // 232 :: rgb(88,77,33) + 0x4266, // 233 :: rgb(133,152,53) + 0x52E9, // 234 :: rgb(163,188,71) + 0x52EB, // 235 :: rgb(165,186,92) + 0x4687, // 236 :: rgb(142,161,55) + 0xEFB7, // 237 :: rgb(226,239,187) + 0x5707, // 238 :: rgb(171,196,59) + 0xAD84, // 239 :: rgb(94,102,31) + 0xFBDC, // 240 :: rgb(249,248,232) + 0x35E7, // 241 :: rgb(109,120,58) + 0x5A45, // 242 :: rgb(178,146,44) + 0xDE48, // 243 :: rgb(190,149,63) + 0x6689, // 244 :: rgb(203,161,74) + 0x5604, // 245 :: rgb(171,131,29) + 0x5628, // 246 :: rgb(169,137,62) + 0xC5A3, // 247 :: rgb(136,108,28) + 0xEAAB, // 248 :: rgb(214,175,88) + 0xC9E4, // 249 :: rgb(152,126,33) + 0x5EA8, // 250 :: rgb(186,168,67) + 0x3521, // 251 :: rgb(104,73,8) + 0x5E8D, // 252 :: rgb(192,163,106) + 0x4DE8, // 253 :: rgb(157,122,65) + 0xCA09, // 254 :: rgb(146,134,76) + 0x566C, // 255 :: rgb(173,152,98) +}; \ No newline at end of file diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/all_gfx.h b/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/all_gfx.h new file mode 100644 index 0000000..514fb34 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/all_gfx.h @@ -0,0 +1,13 @@ +// Converted using ConvPNG +// This file contains all the graphics sources for easier inclusion in a project +#ifndef __all_gfx__ +#define __all_gfx__ +#include + +#define apple_width 220 +#define apple_height 240 +extern uint8_t apple_compressed[21119]; +#define sizeof_all_gfx_pal 512 +extern uint16_t all_gfx_pal[256]; + +#endif diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/apple.c b/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/apple.c new file mode 100644 index 0000000..8baf3bf --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/apple.c @@ -0,0 +1,667 @@ +// Converted using ConvPNG +#include +#include "all_gfx.h" + +// 8 bpp image +uint8_t apple_compressed[21119] = { + 0xDC,0x20,0xF0,0x00,0x46,0x00,0x02,0x02,0x1B,0x12,0x12,0x07,0x4F,0x83,0x00,0x0D,0x00,0x12,0x02,0x0A,0x20,0x12,0x00,0x32,0x86,0x00,0x7A,0x12,0x22,0xD6,0x01,0x07, + 0x07,0x08,0x02,0x80,0xE4,0x4F,0x12,0x0D,0x20,0x12,0x1B,0x32,0xC0,0xDB,0x24,0x07,0x64,0x31,0xAF,0x7A,0x52,0xF0,0x00,0x02,0x8A,0xBE,0x03,0x34,0xB7,0xA8,0xB4,0x80, + 0x7A,0x9F,0xB7,0xC9,0xE1,0xCB,0x3E,0xC7,0xC1,0x0A,0x01,0x03,0x30,0xB7,0x80,0x4F,0x24,0x02,0xF0,0xA8,0xCB,0x51,0xE1,0x00,0xB7,0x9F,0x82,0xE6,0x31,0x03,0x34,0xB7, + 0x80,0x4F,0x7A,0x98,0xCB,0xE0,0xF7,0x01,0xF6,0xFD,0xFD,0xCE,0xF0,0x7A,0x02,0xA4,0xA2,0x06,0x58,0xDB,0x64,0xA9,0x9F,0x00,0xCE,0xAA,0xFB,0xFB,0xF6,0xF3,0xFC,0xFC, + 0x35,0xCC,0xB0,0xF3,0x40,0x4F,0x65,0x86,0xDB,0xBD,0xE0,0x9F,0xC7,0xE1,0xFD,0xF7,0xF0,0x00,0xDC,0x08,0xFF,0xC4,0xF0,0x1B,0x0C,0xC0,0xDB,0x03,0x07,0x00,0x9F,0xC3, + 0xA1,0xD1,0xDA,0x00,0xF9,0xF3,0xF3,0xF6,0x02,0xFC,0xED,0x9F,0x24,0x4F,0x07,0xB2,0xE4,0xA4,0xB9,0x00,0x08,0xF8,0x1B,0x03,0x0B,0xE0,0xDB,0xC8,0xB7,0xCB,0xA1,0x52, + 0xA1,0x95,0x00,0xF9,0xF8,0xF3,0xFD,0xFF,0xFC,0xB1,0x3C,0xFC,0xF0,0xE5,0x09,0x1B,0x9F,0x7A,0x31,0x42,0xDB,0x02,0xF4,0xDC,0x00,0x31,0x4F,0x02,0xA5,0xC4,0xC9,0x30, + 0xCB,0xE8,0xDC,0x1B,0xF7,0xF4,0xF4,0xD1,0xD2,0x9A,0x01,0x97,0x12,0x08,0x7A,0x0D,0x31,0x61,0xD7,0xC0,0x03,0x5E,0x83,0xDC,0x12,0xCC,0x73,0x22,0x7A,0xBB,0xE5,0xAF, + 0x81,0xDD,0xF5,0xF8,0x90,0xBB,0xF5,0xF5,0xFD,0x3C,0xD7,0x9F,0x13,0xDF,0x38,0x00,0x0C,0x27,0xCB,0xF0,0xD2,0x07,0x08,0xC4,0x01,0x4C,0xA8,0xE1,0x92,0xAE,0xF5,0x52, + 0xF2,0xF7,0xC0,0x63,0x3B,0xD3,0x12,0xBC,0x7D,0x96,0x2C,0x00,0x08,0xAC,0x18,0xDB,0xD1,0xFB,0xDE,0x68,0x94,0xF4,0xC0,0xDF,0xFC,0xB0,0xC2,0xF0,0x03,0x05,0xEE,0x64, + 0xBF,0x03,0x07,0x07,0xE0,0x03,0x22,0x08,0x9B,0x91,0xA5,0xDB,0xE1,0x4A,0xF6,0xF9,0xC8,0xBA,0xF5,0xF6,0x2E,0xC1,0x24,0x1B,0x02,0xF9,0x98,0x1A,0x02,0x00,0x08,0x9A, + 0x02,0x00,0xF3,0xD6,0xE9,0x0B,0xF0,0xCC,0xFE,0xEA,0xCC,0xDC,0x02,0xF6,0xF6,0x4C,0x24,0xEE,0x82,0x03,0x2C,0x00,0x0D,0x22,0x19,0xCE,0xC3,0xF9,0xB8,0x2A,0xF5,0xB1, + 0x74,0x96,0x69,0x0D,0xA7,0xBC,0xE9,0x06,0x20,0xD6,0x48,0xFE,0x61,0x1B,0x0D,0xF0,0xD7,0xA3,0x94,0xF2,0xDD,0x00,0xF8,0xFD,0xFD,0xC1,0x04,0x02,0x4F,0x0D,0x02,0x1B, + 0x06,0x30,0xDB,0x48,0xDD,0x1D,0x8E,0x9C,0xA7,0xFE,0xAD,0x81,0xF2,0xF4,0xF5,0xF7,0xFF,0xF0,0xB1,0x88,0x7A,0x9F,0x01,0x88,0xDA,0x13,0x10,0xBA,0x31,0x02,0x9F,0x0E, + 0xB0,0xFE,0xFF,0xF4,0x89,0xE8,0xDC,0x1C,0x9F,0xC4,0xA0,0x4F,0x31,0xC2,0xDB,0xD4,0x04,0x4F,0xE5,0xA2,0xC1,0xFF,0xF9,0xF8,0xC5,0xF7,0xCA,0x20,0x7A,0x31,0x32,0x83, + 0xDB,0x05,0xE4,0xAD,0x24,0x4F,0x07,0x7A,0x82,0xFE,0xFC,0xFC,0xE6,0x83,0xF9,0xF7,0xD8,0xB8,0x2B,0x16,0x80,0xC7,0xCF,0x72,0x7A,0x1B,0xB8,0xCD,0x7A,0xAC,0x6A,0xE0, + 0xF3,0xF8,0xBC,0xE6,0x40,0x1B,0x63,0x84,0xD8,0x8F,0xCB,0x6B,0xE4,0xA8,0xF3,0xAF,0x7E,0xF9,0x64,0xF4,0xB9,0xF2,0x6F,0xFC,0xCF,0x01,0xA4,0x00,0xC4,0x28,0xD4,0xF9, + 0xB9,0x81,0xF6,0xCC,0x12,0x1B,0x9F,0x90,0xCA,0x07,0x0D,0x07,0x4D,0x08,0x00,0x09,0xCC,0xDE,0x5C,0x00,0x05,0x19,0xC4,0x01,0x9F,0x76,0xF9,0xF6,0xFA,0xF2,0x83,0xDC, + 0xC1,0xCF,0x70,0x00,0x02,0x08,0x02,0x47,0x07,0x84,0xCB,0x05,0xDE,0xEA,0x3B,0x02,0x89,0x7C,0xF6,0xC4,0xF5,0x03,0xF9,0xCE,0x9F,0x31,0x31,0x07,0xBA,0x24,0x0D,0x3F, + 0x32,0x01,0x56,0xDF,0x1C,0xA0,0x98,0xA8,0xFE,0xDA,0x64,0x00,0xFE,0xAC,0x80,0xDB,0x12,0x9C,0xAF,0xA1,0xC4,0x90,0x80,0xA6,0xCF,0x2D,0xD0,0xC2,0x9F,0xC5,0xF6,0xF5, + 0x90,0x94,0xCA,0x0D,0x1B,0x12,0x22,0x9F,0xE0,0xCE,0xC9,0x08,0x1B,0xA5,0x00,0x0D,0x54,0x00,0x06,0xE1,0xD1,0x01,0x54,0xDB,0x00,0x00,0xAC,0xE1,0xF6,0xF2,0xC2,0x00, + 0xFD,0xA5,0x02,0x24,0xA6,0xBC,0x70,0xBC,0x89,0xD7,0x08,0x80,0xE2,0x89,0xD0,0x08,0x0A,0x12,0xBF,0x90,0xC1,0x30,0xD0,0x1A,0x02,0x22,0x99,0xF0,0xE0,0xDD,0xF9,0x37, + 0xFF,0xC1,0xC9,0xE7,0xAD,0x13,0x98,0xA8,0xA6,0x00,0x7C,0x24,0x00,0x04,0x6D,0x12,0x40,0x0D,0x50,0x85,0xDB,0x00,0xB0,0x24,0x53,0xF0,0x05,0xC1,0x24,0x8F,0x93,0xF9, + 0x20,0x96,0xF7,0xCA,0x7A,0xCB,0x0F,0x9F,0x24,0x00,0x69,0x22,0x00,0x53,0x95,0x00,0x4C,0x03,0xF3,0x0D,0x00,0x4B,0x16,0x0A,0x41,0xDF,0x03,0xA8,0xDB,0x36,0x02,0x00, + 0x7A,0xDC,0x7C,0x04,0x82,0x78,0x08,0x4F,0x12,0x53,0x00,0x07,0x07,0xD8,0x53,0x22,0xF0,0xC8,0x0B,0xAE,0x00,0xC1,0xC1,0xAC,0xAC,0x50,0xB0,0x00,0x82,0x8F,0xA7,0x00, + 0xCC,0x9B,0xC2,0xC2,0x9B,0xAE,0xE9,0xF7,0x37,0xF4,0xDE,0xCE,0x30,0xF6,0x55,0x0D,0xAE,0xCC,0xCC,0xA7,0x91,0x00,0x9B,0x52,0x00,0x8C,0x09,0x8F,0x82,0xB0,0x2E,0x5B, + 0xAC,0x89,0x00,0xCA,0x3E,0xC1,0x4C,0xF2,0x0C,0xE3,0x0F,0x31,0x4F,0x00,0xEA,0x23,0x4F,0x08,0x6E,0xE9,0x00,0x74,0x1B,0x48,0x6F,0x07,0x17,0xC2,0xDA,0xE7,0x00,0xD2, + 0x16,0x07,0x00,0x1B,0xB2,0x8C,0xA0,0xD1,0x50,0xAC,0xCC,0x16,0x8F,0xCC,0x00,0xD2,0x98,0x00,0xC2,0xC0,0x78,0xC6,0x02,0x01,0xBF,0xEB,0xF7,0x07,0xF2,0xFA,0xF3,0xF2, + 0xF3,0x0A,0xB8,0x0F,0xC0,0x04,0x8D,0x00,0x20,0xAE,0x83,0xEB,0xA7,0x33,0x61,0x82,0xDD,0x3F,0x00,0x42,0x35,0x00,0x61,0x0A,0xE4,0x82,0xDF,0x9F,0x8A,0xC1,0xF9,0x6E, + 0x05,0x0F,0x89,0x6C,0x81,0x74,0xDA,0x2A,0x04,0x8A,0xA7,0x86,0xD1,0xF3,0x6C,0xF4,0xCE,0xDD,0x8A,0xA6,0x42,0xA4,0xF2,0x00,0xA6,0x60,0xCC,0xB1,0xC0,0xA6,0x00,0xC6, + 0xC3,0x12,0x98,0x06,0xBB,0xBB,0x03,0xE7,0x94,0xBB,0x58,0xEC,0xDC,0x00,0xF4,0xFC,0xBF,0xBB,0xE7,0xBB,0x78,0x4E,0xD5,0x00,0xBF,0xCB,0x00,0xD3,0xD3,0xDB,0x0A,0x00, + 0x4F,0x82,0x00,0xC5,0x46,0x50,0x00,0xE1,0x65,0xC2,0x85,0xDF,0x48,0x70,0x9E,0x77,0x70,0x02,0xF0,0xDB,0x25,0x07,0x83,0x45,0x07,0x06,0xD8,0xAD,0x54,0xFD,0x76,0x8F, + 0x16,0xE3,0x7D,0x00,0x95,0xB2,0x82,0xDC,0xC6,0x6C,0x00,0xD9,0x18,0xE7,0x00,0xEE,0x73,0xDC,0x00,0xEE,0xEE,0xF7,0xF9,0xFA,0xFA,0xF8,0xF4,0x0C,0x78,0x7D,0xEE,0x7D, + 0x00,0x71,0x71,0x31,0x94,0x78,0x00,0x72,0xD5,0x89,0x60,0xDC,0xAE,0xA4,0x9A,0x8C,0xDB,0x09,0x06,0xA3,0x74,0xB2,0xBC,0x18,0xBE,0x8D,0x22,0x0D,0x9D,0x30,0xDD,0xAD, + 0x9F,0xB8,0x7D,0x18,0x8B,0xB7,0xF1,0x5B,0x86,0x49,0x82,0xD9,0xC1,0x8C,0xAE,0x72,0x00,0x22,0x87,0xC0,0x40,0xD5,0xB0,0xD7,0x00,0xEA,0xDE,0xDE,0xEE,0x87,0x57,0x60, + 0x57,0x1C,0x8B,0x87,0x16,0xA8,0x81,0xFA,0xF4,0xF3,0xFA,0xEE,0xDC,0x23,0x00,0x73,0xDF,0x0A,0xDD,0x0B,0xB9,0x22,0xC2,0xD3,0x82,0xDD,0xD3,0x94,0x49,0x9D,0x92,0x24, + 0x4D,0x89,0x00,0xA6,0x8F,0xDB,0x8D,0xDD,0x0B,0xB8,0x2D,0x86,0x60,0x5D,0xDB,0x0B,0x89,0x45,0x02,0x35,0xDD,0x24,0x89,0xC0,0x89,0x8F,0x99,0x9B,0xEC,0xDB,0x27,0xB5, + 0x2B,0xD8,0x0B,0xD9,0x06,0xB3,0x00,0x38,0x1A,0x48,0x57,0x7F,0x02,0x73,0x80,0xD8,0xF4,0xF4,0x00,0xFA,0x7D,0x73,0x66,0x83,0x87,0x60,0x87,0x88,0xDB,0x05,0xC2,0x82, + 0xDB,0xA7,0x50,0xD9,0xB8,0x4B,0x97,0xE7,0x94,0xA9,0x6E,0x05,0x40,0xDD,0xD5,0xFA,0x9F,0x3A,0xF5,0xC0,0xB3,0x00,0x42,0xBD,0x7A,0x32,0x24,0xF0,0xB1,0x9C,0x8A,0x27, + 0x00,0xB7,0xC2,0xC2,0x8C,0x60,0xDB,0x90,0xB3,0xA8,0xDA,0x00,0xE5,0x8B,0x05,0x03,0x11,0x48,0x06,0x14,0x42,0x60,0xC8,0x73,0x90,0x86,0xF4,0xF8,0x03,0x71,0x30,0x7D, + 0x70,0xDC,0xD8,0x00,0x66,0xDB,0x14,0x96,0x96,0x95,0x8B,0xBF,0xD9,0x04,0x8F,0x85,0xAE,0x61,0xD2,0x21,0xF6,0x5B,0xE2,0xCB,0x07,0x7F,0x00,0x20,0x00,0xAC,0x0C,0xCC, + 0xDD,0x06,0xF0,0x9F,0x7A,0xCB,0xF0,0x2F,0x86,0xDB,0x8C,0x98,0xE5,0xCE,0xB9,0x69,0xAE,0x95,0x96,0x8F,0x2A,0xF4,0xCA,0xB9,0x56,0x91,0x81,0xE7,0xEB,0xEA,0x6D,0x40, + 0xDC,0xE5,0x60,0x11,0xDF,0x57,0x09,0x57,0xDC,0x71,0xDC,0x03,0xDB,0x00,0xD4,0xEB,0x7D,0x66,0x05,0x66,0x90,0x70,0x70,0x71,0xAD,0xF4,0x28,0xF1,0xD3,0xD8,0x82,0xB4, + 0xD7,0x63,0xD8,0x97,0xD0,0x00,0xC6,0x68,0xA4,0x56,0xE9,0x02,0xA9,0x2E,0xCD,0x69,0x0C,0xC0,0x34,0xD7,0xE0,0xDC,0x9B,0xF7,0x5F,0xD6,0xC8,0xBA,0x00,0x4F,0x81,0x37, + 0xDC,0xE6,0xD3,0x0A,0xD4,0xCA,0xCC,0xCE,0x9E,0x4A,0x0D,0x53,0xB3,0x2C,0xA6,0xA4,0xDE,0x5A,0xDC,0x09,0xA1,0xE4,0xB0,0x79,0x98,0x73,0xAC,0x55,0xFF,0x20,0xDC,0x4C, + 0xB7,0x58,0x00,0x06,0x06,0x14,0x53,0x7F,0xCC,0xD3,0xC9,0xA8,0xF3,0xDD,0x00,0xD5,0x94,0x71,0x66,0x74,0x62,0x60,0x74,0xDD,0x66,0xD0,0x95,0xD5,0xD3,0xB3,0xEE,0x9C, + 0x93,0x6C,0xA0,0xB0,0xDE,0xA0,0xD8,0x50,0x56,0xDE,0x5A,0xD7,0x2C,0xBF,0xA5,0x57,0xD5,0xEE,0x36,0xDF,0x0A,0xCC,0x2B,0x3A,0xB0,0x53,0x9C,0xC3,0x85,0x83,0x0B,0xC8, + 0x88,0x12,0xC3,0xE2,0xAF,0x2D,0xE5,0x6B,0xCC,0x16,0x4F,0xD9,0x16,0x8C,0x1C,0x00,0x4B,0xED,0x59,0xB9,0x4D,0x93,0x8E,0xB0,0x1B,0xC2,0xDD,0x40,0xDC,0xC0,0xDA,0x39, + 0x05,0x00,0x11,0x05,0x09,0x11,0x14,0x38,0xC8,0x66,0x53,0x70,0xC9,0xB0,0xF3,0xDA,0x29,0xFA,0x72,0x93,0x05,0x61,0x61,0x83,0x2E,0xEF,0x90,0x8B,0xBA,0x3A,0xA4,0xC9, + 0xB2,0xB0,0xE8,0x00,0xD2,0x28,0xB7,0x8B,0xD5,0x78,0xC2,0x97,0x72,0x03,0xF7,0x3F,0xAE,0xB2,0x90,0xC6,0x22,0xF2,0x69,0x98,0x31,0x64,0x97,0x4C,0x24,0xF5,0xC4,0x5E, + 0xFF,0x87,0x10,0x26,0x3C,0xD3,0x96,0xDE,0x9F,0xC1,0xD9,0xED,0x20,0xD8,0x13,0xBA,0xBA,0x87,0xDA,0x09,0x4B,0xB3,0xD5,0x0F,0x09,0x85,0xE0,0xAB,0xB9,0xD8,0xE0,0x39, + 0x0B,0xBA,0x94,0x40,0x8E,0xB3,0x06,0x09,0x00,0x06,0x05,0x7F,0xC8,0xE5,0xDE,0xE7,0x78,0x0C,0xFA,0xF2,0xF5,0xF5,0xB7,0x8B,0xFA,0x89,0xBB,0x0A,0xE7,0x5B,0x30,0x2D, + 0xA2,0x9B,0xC1,0x32,0xA4,0x50,0x89,0x00,0x84,0xD5,0x72,0xE8,0x00,0xD8,0x14,0x94,0xB4,0x9F,0x02,0x03,0xBD,0x00,0xEE,0x00,0xB6,0x3D,0x9D,0xE5,0x47,0x00,0xA2,0xBB, + 0xC0,0xDD,0xD8,0xAF,0x30,0xAC,0x24,0xD5,0x81,0x44,0xDB,0x28,0xDD,0x19,0x24,0xB3,0x24,0x8F,0xC1,0x8C,0xD0,0x09,0x37,0xBA,0x64,0x00,0xF2,0x15,0x86,0x5A,0x08,0xA2, + 0x49,0x87,0xD7,0xBB,0x34,0xBE,0xB9,0x81,0x62,0xF9,0xDE,0xC0,0xDC,0x4B,0x16,0x69,0x8E,0x90,0xFC,0x00,0xBE,0xEE,0x76,0x21,0x84,0xFA,0xCD,0xE6,0xAE,0x36,0x87,0xA9, + 0xD8,0xAE,0xED,0xDE,0x52,0xBF,0x06,0xCE,0xC4,0x14,0x00,0x7C,0xAA,0x07,0xC7,0x91,0x66,0x73,0x73,0xCF,0xCA,0x00,0xF6,0x06,0x00,0x37,0xBB,0xBE,0xFD,0xBB,0x04,0xF9, + 0x56,0xCA,0xD4,0xEE,0xAC,0xB0,0x73,0xBC,0xD5,0xA8,0x7A,0x02,0x5A,0xEF,0xF5,0x80,0xD3,0xF6,0xAC,0xB3,0x2B,0xD8,0x09,0x92,0x00,0x86,0x2E,0x00,0xAE,0x08,0x70,0xE4, + 0xA5,0xB2,0x90,0xDF,0x28,0xFF,0x3B,0x04,0x9C,0x4C,0x97,0xAC,0x99,0xB2,0xC2,0xFA,0x00,0x03,0xF1,0xAC,0xD4,0x2E,0x13,0xE9,0x12,0x00,0xD5,0x64,0xA6,0x94,0xB7,0xDB, + 0xBE,0x00,0xC0,0x5F,0x90,0x03,0x06,0x86,0xD4,0xDD,0x03,0x73,0x61,0x3C,0xB5,0x4B,0xB7,0x4F,0xF6,0xBE,0xF7,0xA4,0x9A,0x88,0x00,0xC3,0xDE,0x4E,0xDD,0xFB,0xC1,0x25, + 0x8D,0xC0,0x94,0xDB,0x02,0x08,0x9F,0x22,0xCB,0xB4,0xC9,0x04,0xAE,0xE0,0xD6,0x40,0x29,0x40,0x56,0x00,0xBE,0xEB,0x08,0x07,0x84,0x09,0xE7,0x00,0xE2,0x84,0xC0,0xE7, + 0xC8,0x6B,0xA7,0x2E,0x06,0xC7,0x0B,0xC0,0xCE,0xAF,0x1C,0x02,0x6B,0xBF,0x12,0xE7,0xAA,0x29,0x26,0xB1,0xA6,0xB3,0x94,0x00,0x74,0x00,0x83,0xAF,0x02,0x0D,0xD2,0x0C, + 0xB0,0xB3,0x16,0x3C,0x68,0xDC,0x00,0x3C,0x87,0x7D,0x96,0x0A,0x94,0x7D,0xDC,0xC8,0xBB,0x27,0xE7,0x30,0x26,0x00,0xA0,0x34,0xBB,0x59,0xBA,0x58,0xDC,0x67,0xC3,0x02, + 0x20,0xDB,0x48,0x04,0x1B,0x1C,0x0D,0xC1,0xAC,0x9C,0xA6,0x9B,0xAF,0x24,0x40,0xA0,0xCA,0x84,0x90,0x00,0xA4,0xAD,0x6B,0x7B,0x00,0x72,0x00,0x2A,0x89,0xD5,0xD4,0x82, + 0x44,0x84,0x78,0xE7,0xCF,0xE1,0xBA,0x09,0x01,0x8F,0xBB,0x6B,0xDE,0xD1,0x00,0xA5,0x6B,0xE9,0x9D,0x14,0xE7,0x71,0x29,0x15,0xA9,0xE5,0x00,0xA0,0xBB,0xD2,0x62,0x00, + 0x74,0x83,0x02,0xD4,0x1A,0x04,0x80,0xD7,0x0B,0x66,0xFC,0x94,0xE0,0x06,0x68,0x3B,0xDC,0x1E,0x01,0xE5,0x14,0xA2,0x98,0xDC,0x29,0xC8,0xD3,0x39,0xF3,0xAE,0x02,0x00, + 0x8B,0xFD,0xF7,0x55,0xC2,0x22,0x97,0x24,0xC2,0xDB,0x04,0x6C,0x00,0xDA,0x12,0x24,0x06,0xDA,0xE5,0xA5,0xD3,0x44,0x94,0xA7,0xCA,0x00,0x89,0xD0,0x03,0x7B,0x7C,0xCC, + 0x3C,0x00,0x70,0x7C,0xD6,0x00,0x96,0xA4,0xEC,0x56,0xE8,0xE8,0x91,0x2B,0xF7,0xFA,0x05,0xE2,0x0F,0x02,0x12,0xC1,0x8E,0x94,0x58,0x11,0xCA,0x03,0x83,0x60,0x61,0x60, + 0x60,0x04,0xD5,0xCB,0x60,0x47,0xF1,0xE1,0x21,0xD9,0x83,0xBE,0x68,0xD1,0x06,0x9D,0x02,0x74,0xA2,0xB8,0x56,0x9D,0x00,0x08,0x70,0x6D,0x8A,0x4B,0x62,0x1B,0x60,0xFA, + 0x18,0x19,0x02,0x2C,0xB1,0x26,0x83,0x28,0x23,0x0E,0xDC,0x1A,0xDE,0x00,0xEA,0x45,0x00,0xEB,0x20,0x97,0xCA,0xD7,0x82,0x10,0x4C,0x31,0x12,0x20,0x97,0xB1,0x03,0x52, + 0xF3,0x31,0x09,0x4F,0x9F,0xC1,0x8F,0x27,0x93,0xD7,0x0F,0x00,0xA8,0x2A,0x82,0x4C,0x04,0x56,0x89,0xCB,0xB0,0xD6,0x00,0x8A,0xB2,0xB2,0x88,0x1F,0xA6,0xA6,0x88,0x8B, + 0x7A,0x02,0x00,0x83,0x83,0x00,0x87,0x62,0x2C,0x42,0xB2,0x5C,0xBF,0x31,0xFA,0x30,0x23,0x23,0xC7,0xAA,0x08,0xF0,0xAD,0x14,0x3C,0xF2,0x0E,0x02,0x2C,0x00,0x80,0x03, + 0x62,0x66,0x32,0x78,0x89,0x2D,0x3C,0x80,0xAC,0x00,0xDB,0x31,0x98,0xE9,0x44,0x97,0x32,0xB8,0xB0,0xE6,0x64,0x62,0xAE,0x87,0xE8,0x16,0xB7,0xA8,0x32,0x3C,0xC8,0xC4, + 0x92,0x0E,0x23,0xA9,0xE7,0xE6,0xE8,0x93,0x99,0xD3,0xBA,0xC0,0x2E,0xFC,0x4C,0xBB,0xC5,0xDC,0x06,0x8F,0x4C,0x4F,0xF2,0xA3,0x12,0x1B,0x31,0xAF,0x94,0x08,0x1C,0xAF, + 0xE8,0x03,0x69,0x05,0x22,0x9E,0xC4,0x55,0xE4,0x52,0xBE,0x86,0x6D,0x00,0xA4,0x88,0x18,0xB2,0xCE,0x19,0x8A,0x8A,0xB7,0x36,0x88,0x00,0xA6,0xF8,0x34,0x9B,0x0A,0x3C, + 0x00,0x6A,0x68,0x05,0x61,0xDA,0x3A,0xFA,0x10,0x3B,0x3B,0x2C,0x60,0xB2,0xA3,0xC2,0xAB,0x8F,0xE8,0x15,0xE7,0x10,0x00,0xC3,0xB9,0xCD,0x01,0x7B,0xA4,0x7C,0xE5,0x15, + 0xAA,0xE4,0x0A,0xB8,0xA6,0xB2,0xF4,0x61,0x8A,0xDC,0x8C,0xA2,0x80,0xDB,0x80,0x51,0x83,0xBB,0x6D,0x3C,0x2C,0x1A,0x3C,0x86,0x34,0x2C,0x3C,0x60,0x0E,0x00,0x57,0xFF, + 0x80,0xDD,0x05,0xEA,0x01,0xDB,0x8E,0x8E,0x44,0xBE,0xEB,0x30,0x76,0xC5,0xDD,0xD0,0x96,0x1B,0x02,0xA2,0xBA,0x70,0x07,0x05,0x6A,0xDA,0x09,0x08,0x03,0xDF,0x41,0x1C, + 0x02,0xF0,0xB0,0xF2,0x5E,0xDF,0xC8,0xE7,0xBA,0x89,0x0C,0x56,0xA4,0xB2,0xD2,0x2B,0x02,0x00,0xC2,0xD4,0xF0,0x08,0xD9,0xF0,0x00,0xD8,0xB0,0xA8,0xA0,0xB6,0xA0,0x92, + 0x65,0x83,0x15,0x90,0x61,0x02,0xDB,0x68,0xDD,0x91,0x62,0x96,0xB7,0xB0,0x14,0xA7,0xFA,0xD0,0xC4,0x52,0x00,0xD8,0xE0,0xCD,0x96,0x65,0x96,0xF4,0x45,0xAC,0x5B,0x19, + 0x2D,0x70,0x0E,0xA2,0xFE,0xE8,0x47,0xB9,0xAB,0x28,0x10,0x90,0xDB,0x16,0x61,0x8E,0xD4,0x45,0x0E,0x19,0x48,0x48,0x14,0x00,0x0F,0x11,0x45,0xB4,0x57,0xD2,0x80,0xDC, + 0xDE,0x6D,0x6B,0xC1,0xDD,0x99,0x91,0xBA,0x4C,0x7A,0x7B,0xF2,0xF4,0xCA,0x1D,0x48,0xA4,0x08,0x12,0x07,0x2F,0xF0,0x82,0xD2,0x2B,0xB7,0xC6,0x40,0xBE,0xA4,0xDF,0xAD, + 0xAD,0x03,0x96,0x85,0x95,0x03,0x89,0xA6,0x03,0xB0,0xD9,0xC3,0xD7,0xF9,0x1C,0x0A,0x90,0x88,0xA0,0xBC,0x98,0xF4,0xF4,0x84,0x4A,0x90,0xA6,0x56,0xA9,0x1E,0x16,0x05, + 0xA6,0xF5,0x07,0xCC,0xB3,0xFF,0xFA,0x05,0x0C,0x9B,0x2B,0xBF,0x42,0x7D,0x7C,0xB1,0x00,0x83,0xF2,0x00,0xE4,0xF0,0x45,0xE9,0xCD,0x84,0x7C,0xC9,0x4A,0xB0,0x39,0x80, + 0xD1,0xE5,0x63,0xA0,0x4D,0x9B,0x95,0xB4,0xA0,0x98,0x23,0x48,0x38,0x31,0x14,0x38,0x02,0x0F,0x39,0xE5,0x83,0xDC,0xE5,0x00,0xC0,0xDC,0x6D,0x5E,0xAB,0xD1,0xC8,0xBB, + 0xA5,0x53,0x6B,0x7A,0xAB,0x94,0xB7,0x1E,0x60,0xE7,0x07,0x53,0xB0,0xCA,0xB4,0xB1,0xBE,0x86,0x6B,0xE4,0x85,0x81,0x02,0x82,0x70,0xA8,0x00,0xAB,0xB0,0xA2,0xC3,0xD9, + 0x00,0x53,0x7C,0x84,0xAC,0xA6,0xBF,0xAC,0xDA,0x25,0xDD,0x0C,0xAB,0xBF,0x00,0x0D,0xBB,0x74,0x90,0xDC,0x00,0x1D,0xD5,0xE7,0x25,0x0D,0xB5,0xA2,0x5B,0x36,0xFB,0xF5, + 0x05,0x48,0x95,0xC0,0x4E,0xE6,0xB0,0x37,0xED,0x36,0x99,0x85,0x83,0xA6,0x4D,0xB5,0x96,0xDB,0x8F,0x92,0x0C,0x00,0x68,0x42,0x0E,0xD9,0x29,0x96,0x00,0x14,0x05,0x09, + 0xB3,0xDC,0xE5,0x51,0xB3,0xB8,0x00,0xEA,0x6B,0x5E,0x5E,0x6B,0x75,0x76,0x03,0xCF,0x8F,0xF0,0x02,0x4F,0x12,0xF4,0xD8,0x3B,0xD9,0xCA,0x90,0x4C,0xDA,0x16,0xD3,0x8C, + 0x99,0xB3,0x51,0xC7,0xF8,0x00,0xA5,0x53,0xBB,0xEB,0x04,0x88,0xD0,0x0B,0xDB,0x0A,0x0E,0xC3,0xE8,0x04,0x9C,0xEF,0xED,0xB3,0x6D,0x00,0x96,0xB5,0x92,0x0A,0x89,0x96, + 0xDA,0x99,0xB9,0x00,0xD2,0x48,0x7B,0xC4,0x1D,0x00,0xE5,0x0D,0xFA,0xDF,0x15,0x0B,0x13,0xC8,0x40,0x0F,0xBE,0xEA,0x00,0xCC,0xE9,0xC6,0xB6,0xC2,0xB1,0x85,0x99,0xDC, + 0x34,0x98,0xA5,0xF0,0x17,0x42,0x42,0x7F,0x00,0x40,0xDC,0x4B,0xC0,0xD9,0x4B,0x3A,0xB0,0xDC,0x30,0x5E,0x52,0xDB,0xC0,0xDC,0xC5,0x82,0x34,0x9F,0x07,0x94,0x83,0x75, + 0xEF,0xB0,0xDB,0x5A,0x24,0xEB,0xAB,0x86,0x95,0xBA,0xEC,0xB5,0xA2,0xC6,0xF5,0x82,0xDA,0x4C,0x00,0xF1,0x6C,0xDD,0x3B,0x00,0x9A,0x45,0xA6,0xBD,0x94,0x86,0x90,0xD7, + 0x1B,0xDB,0xAC,0xAD,0x82,0x81,0xAD,0x89,0x40,0x44,0x44,0x52,0xCA,0xBE,0xF0,0x05,0x08,0x37,0x37,0x55,0xA2,0x2F,0xA2,0x40,0x00,0xC2,0x0B,0x10,0x92,0xC3,0xE4,0xE2, + 0x04,0x72,0x80,0xD6,0x56,0xF7,0x22,0x00,0xBE,0x1D,0x71,0xA4,0x49,0xEF,0x61,0xDB,0x49,0xD0,0x96,0xFE,0xB5,0x54,0xBC,0x5A,0x94,0x53,0xCD,0xE1,0xDA,0x81,0x00,0x7F, + 0xB3,0x3A,0x09,0x04,0x03,0x80,0xE0,0x8E,0x6D,0x6D,0x18,0x20,0x52,0xD6,0x00,0x76,0xCA,0xB0,0x74,0x1B,0xC2,0x12,0x83,0x9B,0x84,0x3C,0x24,0x4C,0xD5,0xA7,0xC6,0xC0, + 0xDA,0x89,0x7C,0xBC,0xC2,0xAA,0x00,0x80,0x45,0x90,0xA6,0x86,0xBF,0x77,0xFC,0x52,0xAF,0xF6,0xE1,0x15,0x11,0x6E,0x85,0x8A,0x30,0xAD,0xBE,0xC8,0xC3,0xBC,0xB9,0x02, + 0x86,0x9B,0x81,0xCE,0xBA,0x80,0xD5,0x3F,0x55,0x3F,0xB0,0xD9,0x07,0x6F,0x69,0x69,0x4E,0x55,0x00,0xBA,0x0B,0x44,0x12,0x20,0xBA,0x05,0xA9,0x21,0x89,0x89,0x84,0x56, + 0x05,0xD8,0x17,0x12,0x20,0xF4,0x61,0xEE,0xDA,0x67,0x93,0x2A,0x80,0x80,0xED,0xB4,0x9D,0x3B,0x01,0x02,0xDC,0x48,0x95,0xF3,0xE5,0xA0,0x91,0x4B,0x09,0x06,0x14,0x04, + 0x09,0x39,0xB9,0x4A,0x35,0xDC,0x0C,0xBB,0x81,0xDF,0xE2,0x4C,0x12,0x4F,0x06,0x80,0xDB,0x9F,0xC8,0xEF,0x31,0x7A,0x6B,0x9F,0xEB,0x73,0xA1,0x91,0x80,0x96,0x7D,0xB2, + 0xF3,0x7C,0xF9,0xA5,0xA6,0x6F,0x99,0x60,0xD4,0x96,0x5D,0x8A,0x05,0x5B,0x04,0x00,0x90,0xEA,0x3C,0xE5,0x0A,0x70,0x96,0xA6,0x24,0x37,0x8D,0x00,0x3F,0x00,0xA2,0xD0, + 0x00,0xCC,0x6E,0x00,0x3E,0x07,0xC1,0xDA,0x69,0x74,0x07,0x12,0xA2,0x29,0xED,0xDD,0x0A,0x4E,0x84,0xE9,0xC1,0xCE,0x41,0xD9,0x23,0x30,0x55,0x08,0xB1,0x94,0xA4,0x96, + 0xB4,0xC7,0x79,0x70,0xFB,0x41,0xD6,0xA2,0x95,0x3C,0x50,0xDA,0xC3,0xD9,0xCE,0x70,0x57,0xC8,0x7F,0x05,0x60,0x0A,0xDA,0x09,0x01,0x2A,0x4B,0x16,0x16,0x0C,0x5F,0x81, + 0x44,0xB8,0x6B,0x02,0x99,0xD7,0x53,0x07,0x0D,0x12,0xC3,0xDD,0xEC,0xC8,0x2C,0x9B,0x43,0x02,0x07,0x34,0x79,0x9F,0xD7,0x40,0xDA,0xBF,0x7F,0xD5,0xEB,0xE6,0x8D,0xDB, + 0x1D,0x00,0x85,0xDB,0xFD,0xC2,0xAA,0xE1,0x8A,0x5B,0x84,0xBB,0x80,0xD9,0x13,0x88,0xAF,0x6A,0xB9,0xAD,0xA0,0xDA,0xA2,0xA7,0xBA,0x00,0xA3,0x2B,0xC8,0x0B,0x00,0x60, + 0x3E,0xC9,0x3E,0x60,0xED,0xDA,0xED,0x55,0x6F,0x07,0x81,0xDF,0xDD,0xDD,0xD8,0x0B,0xDB,0x5D,0x00,0x94,0xD4,0xC0,0xDA,0x4E,0xAB,0x05,0xDB,0x0A,0xAE,0x8F,0xFC,0x36, + 0x05,0x70,0x97,0x98,0xDB,0x49,0xA7,0x34,0x95,0x94,0xDC,0x0B,0x38,0xDB,0x06,0x8B,0xD9,0x00,0x0A,0x1E,0x04,0x4B,0x25,0x0B,0x16,0x10,0x54,0x81,0x95,0x40,0x75,0xCF, + 0x98,0x0D,0x97,0xBB,0xB0,0xDA,0x82,0xDE,0xC3,0x69,0x31,0x31,0xC1,0x40,0xDA,0x78,0x94,0x61,0x71,0xD5,0x51,0xD2,0x7F,0xBC,0x40,0xDA,0x80,0xB0,0xDB,0x56,0x9D,0xD7, + 0x60,0xCD,0x7B,0xE8,0x08,0xC4,0xB7,0xCE,0xD0,0x8B,0x84,0x7B,0xB2,0xB4,0x48,0x3F,0xD0,0x18,0xB9,0x73,0x06,0xB0,0x00,0x47,0xD3,0x50,0x6F,0xDA,0x61,0xCF,0xD3,0x01, + 0x00,0x3E,0x0C,0x7B,0xDD,0x00,0x06,0x47,0xDB,0x07,0x47,0x0A,0xB9,0x00,0x3E,0x07,0x0A,0xE4,0xAC,0x32,0xE6,0x25,0x94,0x40,0x90,0x7C,0xA4,0x56,0x30,0x72,0x70,0xDB, + 0xC3,0xDC,0xD6,0x0A,0x80,0xFE,0x00,0xAC,0x86,0x38,0x48,0x7C,0x8B,0xC1,0x11,0x00,0x11,0x8B,0x06,0x0A,0x03,0x0A,0x3A,0x25,0x03,0x3A,0x1F,0x5F,0x20,0xE3,0xE3,0xDC, + 0x0D,0x95,0x04,0x5B,0x7A,0x08,0xF1,0xF7,0x05,0x74,0xFB,0x07,0x1A,0x02,0x4C,0x82,0xEC,0xA8,0xD2,0xDA,0x1C,0x71,0x00,0x94,0xF7,0x90,0xB2,0xB3,0x59,0x62,0xB7,0x54, + 0x09,0x97,0x81,0x26,0xE1,0x59,0xC4,0x61,0xD9,0x6F,0xB6,0x4B,0xD9,0x45,0x9A,0x84,0xB5,0xA7,0xFF,0xD8,0x0B,0xBE,0x4A,0xDA,0x0B,0xDD,0x00,0x90,0xDE,0x2F,0x06,0xDB, + 0x0C,0xB9,0xA9,0x1C,0x69,0xA6,0x1C,0x55,0xE5,0x2C,0xDC,0x2A,0x07,0x46,0xA9,0x70,0xAD,0xAD,0x66,0x71,0x96,0xB8,0x61,0xDB,0x82,0xD4,0x23,0x92,0x92,0xAC,0x00,0xB7, + 0xB9,0xAA,0x30,0x8B,0x05,0xDB,0x60,0x39,0xDA,0x03,0x00,0x33,0x3A,0x33,0x5C,0x0B,0x17,0x81,0xEC,0xC0,0xDC,0xD0,0xDA,0xF1,0xE5,0x0D,0x45,0xB3,0x05,0xF2,0xAC,0x4F, + 0x28,0x02,0x53,0xDA,0x28,0xB6,0xA8,0xB5,0xA9,0xC2,0xDC,0x70,0x01,0x81,0xDA,0x85,0xDB,0xBD,0xC5,0x2F,0xF2,0x06,0x41,0xD4,0x86,0xD9,0x8C,0x94,0x8C,0x19,0xD4,0x2A, + 0xB2,0xEF,0x2C,0xDB,0x18,0x47,0xD8,0x4B,0x00,0x61,0xE1,0x6A,0xE6,0x69,0x89,0xDA,0x07,0xDD,0x07,0x61,0xDB,0x22,0x9F,0x61,0xDC,0x6A,0x29,0x47,0xAD,0x29,0x0A,0xB4, + 0x74,0x9F,0xC9,0xB8,0x56,0x58,0xF4,0x66,0xBD,0x00,0x8D,0x2D,0xEA,0x70,0xDC,0x7E,0x48,0x03,0xE2,0x35,0x48,0xF0,0xE4,0xAA,0x11,0x05,0x60,0x8B,0x00,0x39,0x04,0x0A, + 0x33,0x1E,0x0B,0x13,0x30,0x1A,0x19,0xDB,0x00,0xB9,0xD0,0xCA,0x82,0x0C,0x22,0x7A,0x02,0x1B,0xDB,0x20,0xB5,0x92,0x15,0x02,0xFD,0x4A,0x9B,0xA0,0x9C,0xDA,0x11,0x7D, + 0x21,0xDB,0x50,0xC0,0x90,0xC0,0xCE,0xB2,0x88,0xD3,0x85,0xB9,0x7B,0xA6,0x9A,0xD2,0x0E,0xF0,0x3B,0x0E,0xE2,0x04,0x44,0x8B,0xB5,0x86,0xB1,0xBD,0x14,0xAB,0x55,0x00, + 0xD0,0x09,0xDB,0x48,0xD0,0x11,0x21,0xDB,0x69,0x98,0xD5,0x0C,0x02,0x5A,0x21,0xB8,0x61,0xD3,0x38,0xDB,0x55,0x05,0x95,0xB6,0x5F,0x00,0x6B,0xF2,0x22,0x3C,0x61,0x68, + 0xC9,0xB7,0x0E,0x64,0xB5,0x3B,0x64,0x42,0xB8,0x14,0x36,0x11,0x06,0x00,0x11,0xF3,0xAA,0xE5,0x95,0x46,0x33,0xDA,0x00,0x26,0x5C,0x1C,0xCD,0xEC,0xC0,0xDC,0xE3,0xB9, + 0x06,0xE6,0xD7,0x5B,0x9F,0x7A,0xDD,0x02,0x08,0x0D,0x07,0x0A,0xC1,0xDB,0x7A,0x6E,0xC7,0xBF,0x02,0xC6,0xD5,0x71,0x7D,0x73,0x7D,0x87,0xCA,0xDD,0xF7,0x90,0x71,0x6F, + 0x00,0x7C,0xBC,0x2B,0xCF,0x1E,0x9D,0x02,0xD8,0x14,0x90,0x87,0xBE,0x55,0x98,0x9E,0x07,0xDA,0x1D,0xCC,0x61,0x9D,0x85,0xD8,0x95,0x8B,0x05,0xDB,0x85,0xD9,0xE5,0x0B, + 0xA3,0x30,0xDB,0x49,0x07,0x28,0xE5,0x4C,0xDB,0x0B,0x6F,0x21,0xB0,0xDC,0xB9,0xCB,0xB4,0x8E,0x77,0x37,0x02,0xFE,0x9D,0x03,0xEA,0xC5,0x90,0x5A,0xFE,0xEB,0x02,0xDA, + 0x30,0xDB,0xEC,0x02,0xDB,0x18,0x05,0xDB,0x51,0xB7,0x05,0xB3,0x39,0x06,0x33,0x80,0xDB,0x26,0x1C,0x1D,0x1D,0xCD,0x81,0xE3,0x00,0x23,0x95,0xC1,0xDC,0x0C,0xB7,0xA0, + 0xB7,0xE7,0x34,0x91,0x1C,0xD8,0xAE,0xC2,0xA1,0x86,0xBB,0x73,0x87,0x87,0xA0,0x62,0x73,0x83,0x9D,0x40,0xD9,0xA4,0x8A,0xD7,0x8A,0x83,0x4E,0x0B,0xE6,0xAB,0xA7,0x98, + 0x9C,0xC2,0x3F,0x40,0x8B,0xB7,0xBE,0x26,0x40,0x8E,0x9A,0x8F,0x4B,0x92,0x36,0xB6,0x48,0x47,0xA0,0xDB,0xC2,0xEC,0x30,0xDB,0x2B,0x10,0x05,0xB9,0x24,0x1F,0xDB,0x25, + 0xB4,0x8C,0xB9,0xA3,0x2F,0xBA,0x86,0xD9,0xB4,0x93,0xE2,0x9F,0x91,0x93,0x83,0x20,0xDB,0x2C,0x3C,0xDB,0x15,0x0E,0x80,0x69,0x48,0x01,0xDB,0x09,0xBC,0x00,0x39,0xDD, + 0x60,0x39,0xDA,0x5C,0xB0,0xDB,0x0B,0x2D,0x35,0x5E,0x52,0xB8,0x20,0xB1,0x97,0x22,0x9F,0xC3,0xDB,0xD4,0xA8,0x24,0x8B,0x49,0x4C,0x00,0x9F,0x97,0xB6,0x86,0xC2,0xC0, + 0xD5,0x90,0x9F,0x9B,0xE6,0x9F,0x61,0x57,0x62,0xAB,0xD4,0x9F,0xE0,0xE0,0x83,0x52,0x88,0x91,0x50,0xDA,0x5A,0xEE,0xEA,0xEF,0x7C,0xA4,0x8A,0xAC,0x91,0xDC,0xD3,0x7B, + 0x72,0x26,0xBE,0x4E,0xE9,0x59,0x53,0x93,0x0C,0x5B,0x4E,0xAD,0xD4,0x0B,0x81,0xD1,0x3A,0xF8,0xCA,0xCB,0xF2,0x05,0xDB,0xB5,0x90,0xCE,0xAF,0xB0,0x56,0xDD,0x14,0xE8, + 0xAE,0x40,0x03,0xBB,0xCA,0xCF,0xEA,0xA8,0x93,0x83,0x61,0xFB,0x40,0x68,0x83,0x7C,0x71,0xC0,0xE2,0x3B,0x38,0xC1,0xDC,0x14,0x8C,0x03,0x38,0x11,0x14,0xDB,0x30,0x00, + 0x2A,0x0A,0x0A,0x09,0x00,0x8B,0x2A,0x1E,0x30,0x36,0x26,0x36,0x36,0x05,0x2F,0x1A,0x2B,0x6D,0xD6,0x00,0xDC,0xDA,0xD8,0xC1,0xF3,0xE3,0x00,0x82,0x47,0xCE,0x7C,0x1B, + 0x27,0xD0,0xE0,0xDA,0x4C,0xC2,0xDA,0x49,0xA2,0x2C,0x73,0x2C,0xDA,0x2E,0x00,0xE7,0xA2,0x05,0x63,0xA6,0xD5,0x4F,0xD2,0x7D,0xB6,0x74,0x00,0xB9,0x5E,0x90,0x32,0x7B, + 0xC0,0xE4,0x07,0xDB,0x0B,0xAE,0x0C,0x8B,0xA2,0x56,0x00,0x6F,0xCF,0x13,0x84,0xDA,0xC1,0xE6,0x65,0xC8,0xF2,0x0A,0x00,0x15,0xDA,0x2A,0xE9,0x4E,0xD4,0xED,0x44,0x84, + 0xA0,0xD6,0x3C,0x84,0x89,0x04,0x03,0x89,0x78,0xA4,0x93,0x64,0x61,0xB7,0x3C,0x00,0x90,0x96,0x94,0x73,0x60,0x2C,0x42,0x0F,0xA2,0xB6,0xDF,0xCC,0x05,0x2C,0x09,0x04, + 0x00,0x09,0x05,0x34,0x2A,0x03,0x92,0xC0,0xD9,0x45,0x45,0x05,0x36,0x5D,0x2D,0x6D,0x6B,0x00,0xDB,0xDF,0xCF,0xAF,0x10,0x53,0x31,0x4F,0x50,0xDB,0x0D,0x4F,0xEC,0x49, + 0x53,0x97,0x03,0xDA,0x5D,0x12,0xDC,0x42,0x3C,0x81,0xDA,0x61,0x9D,0x6F,0xC9,0xA4,0x07,0x83,0xBC,0xEC,0xDB,0x16,0x70,0xDB,0x14,0xE8,0xB9,0xC3,0xF4,0x00,0xE2,0x0C, + 0x44,0xDB,0x2D,0xBE,0xE7,0xC5,0x7A,0xC6,0x7B,0xB0,0x7B,0xCE,0x09,0x82,0xD3,0xE7,0x0D,0x08,0x96,0x25,0xC3,0xDA,0x00,0xBC,0x06,0xB6,0xB2,0xAD,0x50,0x84,0xD6,0x7E, + 0x46,0xDE,0x18,0xA4,0x96,0xBD,0xA4,0x83,0xDB,0x0C,0xB7,0xB5,0x8F,0x1B,0x60,0xDC,0x0F,0x00,0x38,0xDB,0x0C,0xE0,0x37,0xC4,0xE6,0xA1,0x94,0x00,0x09,0xDA,0x19,0xB5, + 0x18,0x45,0x50,0xDB,0x05,0x27,0x5D,0xCD,0x5E,0x03,0xDB,0xD0,0xCE,0x71,0xAC,0x24,0x08,0x04,0xA1,0xDB,0x8E,0x82,0x00,0x07,0x0D,0x9F,0xAC,0xD8,0xD2,0xEC,0x5A,0x94, + 0x91,0x63,0xB9,0x29,0xB7,0x60,0xD5,0x3C,0xFB,0x03,0x00,0xF2,0x5B,0x88,0xBC,0xDA,0x24,0xB7,0x2F,0x04,0xD7,0xCC,0xDB,0x2C,0xB5,0xB9,0xAE,0x58,0x47,0xDB,0x4E,0xC5, + 0xF4,0xC5,0x0C,0xC1,0xDC,0x28,0xC7,0xAC,0xDA,0x39,0x00,0xC2,0xDB,0xE6,0x0A,0xD9,0x04,0xA2,0xE1,0xDB,0x5B,0x87,0xA3,0x97,0xBE,0xFD,0x2C,0xD4,0x30,0xD7,0xBA,0x00, + 0xDB,0x07,0x83,0x00,0x86,0xDC,0x76,0xDC,0xF0,0x00,0xDB,0x69,0xC8,0x8F,0x96,0xB3,0xF2,0xB8,0xE0,0x7D,0xBA,0xAE,0xF0,0xDA,0x0C,0x03,0xDA,0x28,0xB6,0xB0,0xDA,0xD9, + 0x00,0x45,0x04,0x46,0xCD,0xAA,0xF1,0x77,0xC8,0xB8,0x4C,0x1B,0x82,0x50,0xDB,0xA0,0xDC,0xF9,0xB5,0xC1,0x48,0x91,0xC0,0x12,0xBB,0xE7,0x7D,0x87,0xDB,0x69,0xAF,0x6A, + 0x80,0x00,0x91,0x45,0xA6,0x12,0xB6,0x80,0xAE,0x81,0x70,0xDB,0x58,0xB2,0xDB,0x53,0xD2,0x96,0x44,0x3F,0xAB,0x13,0x05,0xDB,0x15,0xC2,0xCA,0x9B,0x6F,0xAC,0x08,0xCB, + 0x2C,0xC5,0xAF,0xC4,0xB9,0x00,0xD2,0x8B,0xE6,0xA3,0x59,0x06,0x73,0xD9,0x92,0x4E,0xA1,0x3F,0x46,0x49,0xA3,0x9F,0x06,0xA6,0x9E,0x93,0xA9,0xF0,0x77,0xC9,0x31,0x2C, + 0x7F,0x00,0x42,0x42,0x7F,0x96,0xB2,0xDB,0x1B,0x02,0x11,0x00,0xB7,0xCC,0xA4,0x02,0x03,0xA1,0xDB,0x86,0xDA,0x04,0x63,0x76,0x9E,0x86,0x77,0xA7,0xCE,0x04,0xE2,0x97, + 0x53,0x1B,0x1B,0x12,0x38,0xCB,0x4F,0x4F,0x07,0x28,0x22,0xB0,0xDA,0x02,0xC6,0xE7,0xEE,0xEE,0x85,0xB8,0x68,0x41,0xDB,0x63,0xC7,0xB3,0xDC,0x68,0xD4,0x07,0xA6,0xB3, + 0xEC,0x83,0xBF,0xAC,0xB6,0xAD,0xF1,0x56,0xB2,0xF0,0xB8,0x8D,0x61,0xDA,0x92,0xB5,0x3F,0x50,0xAF,0x94,0xEC,0xD6,0x4E,0xB9,0x57,0xFD,0xF7,0x06,0x2A,0xF7,0xD0,0xDA, + 0x65,0x9F,0x25,0x09,0xBD,0xBF,0xD9,0x28,0xB4,0x5A,0xEF,0xC8,0xC9,0xF8,0xDB,0x50,0xD5,0x61,0xD6,0x7F,0x00,0xA9,0xFA,0x62,0x00,0x3C,0xB3,0xD6,0x02,0xBE,0xB7,0xE5, + 0xA1,0x11,0x61,0xDB,0x4F,0xC9,0x40,0xD8,0x05,0xEC,0x82,0x4B,0x03,0xB0,0xDB,0x59,0x45,0xBA,0x30,0x63,0xDC,0x1D,0xE9,0xEC,0x91,0x87,0x84,0xCF,0xD8,0x5B,0x0D,0x12, + 0x17,0xB7,0xAC,0x66,0x07,0x0D,0xB6,0x52,0x00,0xDA,0xDC,0xC8,0x60,0xCB,0xB6,0xC1,0xDC,0xDB,0x14,0x66,0xC8,0x3D,0xF2,0xA9,0x3C,0x90,0x31,0xD2,0xF6,0xD8,0xD1,0x92, + 0xA6,0x77,0x83,0x60,0xDB,0x89,0xE7,0xA3,0x91,0x4C,0xB5,0xB9,0x94,0x56,0x4E,0xAE,0x28,0x47,0xBA,0x12,0x6F,0x84,0xB5,0xA9,0x9B,0x3D,0x00,0x95,0xAF,0x84,0xDB,0xA1, + 0xFA,0x55,0x28,0x07,0x84,0xD4,0xBD,0xB4,0xD8,0x00,0xDB,0x4E,0xDA,0x0D,0x96,0xCA,0xDD,0x66,0xF5,0xE3,0xCA,0x83,0xD9,0x3B,0x02,0xD3,0x8F,0xDD,0x07,0x14,0xD6,0x94, + 0xDA,0x07,0x05,0x09,0x06,0x53,0xA6,0x76,0x86,0x3A,0x88,0xDB,0x00,0x27,0x63,0x65,0x9E,0x2C,0x95,0xE9,0xB8,0x88,0x98,0x53,0x24,0xDB,0x0F,0x89,0x6C,0xB6,0x8D,0xC2, + 0xC6,0x91,0x30,0xDA,0xCE,0x94,0xB0,0x61,0xDB,0x38,0x66,0x70,0xB9,0xD2,0x8B,0xAF,0x88,0xD0,0x7E,0x8B,0xFC,0xDD,0xC2,0xDB,0x8A,0xB6,0x98,0x04,0x7C,0xDC,0x30,0x7C, + 0xD7,0xC3,0xDB,0xEC,0x55,0x44,0xFD,0xE3,0x85,0xB2,0xE4,0xB6,0xA0,0xDC,0x4E,0xAF,0xEE,0x98,0xC6,0xAA,0x04,0x5C,0xF2,0xAB,0x04,0x27,0x93,0x16,0x07,0xB0,0xD6,0xAB, + 0x03,0xDC,0xC5,0x40,0x4C,0xED,0x84,0xB8,0x71,0xFF,0x99,0xC1,0x2A,0x6C,0xC1,0xDB,0x23,0xCD,0xA1,0x77,0xB5,0xD7,0x80,0x14,0x57,0x05,0x05,0x11,0xEF,0x02,0xB9,0x9A, + 0x06,0xED,0xA7,0x0A,0xDB,0x0C,0x00,0x5D,0x50,0xA4,0x94,0x03,0x29,0x65,0x85,0x95,0x91,0xA3,0xB8,0x21,0xB7,0x9A,0x0D,0x04,0x61,0xDB,0xF5,0xE1,0xBE,0xC8,0xB6,0x5A, + 0x90,0x19,0xC8,0x57,0x92,0xE1,0xD9,0xAB,0xEF,0x62,0xDB,0x0E,0x96,0x9B,0x66,0xCC,0xE1,0xD8,0x44,0xB8,0x83,0xAE,0xB8,0x5A,0x90,0x91,0x28,0xB2,0xD9,0x29,0xEA,0x41, + 0xA4,0xB2,0x96,0x89,0x37,0x65,0xB2,0x28,0xCB,0x58,0xC0,0x4A,0xC4,0xB2,0xCF,0x83,0x0C,0x39,0xBF,0x61,0xEC,0xC8,0x21,0xB7,0x97,0x18,0x3D,0xFB,0x49,0x00,0xF2,0xB7, + 0x44,0x89,0xB8,0x78,0xAB,0xEE,0x94,0xEB,0x5D,0x68,0x7C,0x91,0xB9,0x96,0x90,0x9D,0xAD,0xA2,0x92,0x3B,0xC1,0xDC,0x05,0x49,0x8F,0x45,0xB4,0x75,0x00,0x86,0x6A,0x2A, + 0x03,0xB4,0x94,0xC0,0xD7,0x27,0x27,0xA2,0xB7,0xA1,0x00,0x8C,0x4A,0x91,0x45,0xB8,0x56,0x87,0x12,0xAE,0xBE,0x21,0x08,0x1B,0xC2,0xBF,0xCB,0x22,0xF0,0x82,0xC8,0x7A, + 0x91,0x45,0x0E,0x27,0xEE,0x00,0x4B,0xEF,0x5F,0xA8,0xB2,0xDC,0x3B,0x81,0xDB,0x3C,0x85,0xDB,0x75,0xC6,0x70,0xC3,0xA6,0x74,0xB2,0xAA,0x00,0xFF,0x60,0x72,0xAD,0x96, + 0xA4,0x50,0x44,0xD7,0x2E,0xA2,0x03,0x81,0xBA,0x4E,0x38,0xDB,0x72,0x04,0x87,0xDB,0x14,0x2D,0x00,0x95,0xA5,0xAC,0xE1,0x93,0x9D,0x4B,0xE4,0x22,0xE8,0xD5,0x00,0x05, + 0xDA,0x72,0xB5,0xA4,0xD4,0xF0,0x94,0x7C,0x90,0xDB,0x33,0x06,0x66,0x2C,0xDC,0x67,0x3B,0x7C,0x87,0xDA,0x00,0xAE,0xEE,0x91,0x97,0xB6,0xD6,0xDF,0x1E,0x04,0xD7,0x14, + 0x00,0x1E,0x4A,0x26,0xDB,0x1D,0x00,0x81,0xDB,0x9E,0x58,0x65,0xB8,0x5D,0xC0,0x23,0xAC,0xC3,0xC0,0xDB,0x1B,0x1A,0xAC,0xA7,0xD7,0x92,0x5A,0x91,0x72,0x5D,0x85,0xDB, + 0x4A,0xA8,0x3C,0xD2,0x9B,0x97,0xF2,0xF0,0x55,0x80,0x4F,0xA8,0x03,0xA6,0x98,0xEB,0xB6,0xDB,0x17,0xDD,0x0D,0x72,0x93,0x0B,0x37,0x55,0x96,0x2A,0xCE,0xAC,0xB5,0x2C, + 0xBB,0x2C,0xC6,0x27,0xBB,0xC9,0xF9,0x00,0x13,0x4A,0xCC,0xC2,0xFB,0xC2,0xD5,0xD1,0x8D,0x44,0x5C,0x00,0xA4,0xE1,0xD9,0xE9,0x01,0x93,0x87,0xD3,0xCF,0x8B,0x71,0x02, + 0xA7,0xCD,0x69,0x73,0x8F,0x6F,0xC8,0x6B,0xEE,0xDE,0x81,0x00,0x11,0xB0,0xD6,0xB2,0xBB,0xA0,0xDB,0x3C,0x1E,0x13,0x00,0xDB,0x2D,0x95,0x24,0xD9,0x00,0x29,0x29,0x93, + 0x85,0x2D,0x4A,0xA0,0xF1,0x54,0x22,0xB5,0x55,0x02,0x0E,0x80,0xDB,0x53,0x82,0xD7,0x64,0xCA,0xB6,0xEA,0xC1,0xDA,0x38,0x20,0xDB,0x1D,0x60,0x3C,0x00,0x3F,0xD1,0x93, + 0x58,0xD7,0x5A,0x93,0x52,0xED,0xD5,0x84,0xE9,0x95,0xF2,0xBB,0x70,0x60,0xDB,0x56,0x72,0xDD,0x51,0xB9,0x61,0xDF,0xE1,0x03,0xDA,0x3B,0xA0,0xAD,0x55,0xA6,0x27,0xD8, + 0x09,0x6A,0xE8,0x4E,0x03,0x0B,0xA5,0x16,0xB0,0x2B,0xDA,0x07,0x40,0x02,0xBA,0x05,0x56,0x00,0xDF,0xCA,0xB2,0x2E,0xF2,0xF0,0xDA,0x93,0x03,0xF9,0xBF,0x77,0xDB,0x07, + 0x48,0xD6,0x82,0x48,0x23,0x57,0xA9,0xFC,0x05,0x2A,0x92,0x29,0x06,0xCC,0xF0,0xDB,0x57,0x30,0xBB,0x6B,0x00,0x36,0xDB,0x05,0x29,0x00,0xDA,0x18,0x29,0x8D,0x2C,0x58, + 0x3D,0xB8,0x99,0x5B,0xB2,0x5D,0x88,0xA1,0x08,0xC5,0xF0,0x28,0xC1,0xA7,0xDA,0x05,0xE7,0xDE,0x7F,0x62,0x59,0xB9,0x42,0xC9,0xAD,0x3C,0xAD,0xF2,0x86,0xDA,0xDB,0x09, + 0x62,0x16,0xEF,0xA8,0x04,0xD9,0x32,0xB4,0xC3,0xDC,0xDA,0x0A,0x00,0x57,0xAD,0xC9,0xF6,0x83,0x40,0xC1,0xD8,0x86,0x61,0xDC,0x20,0xBF,0x5A,0xC3,0xC8,0xB0,0xF6,0xA0, + 0x52,0x4B,0x13,0x17,0x25,0x0D,0xF3,0x06,0x04,0x87,0xDA,0x00,0x47,0x04,0xBE,0x84,0x02,0x5D,0xB1,0xB5,0xD2,0x56,0x00,0xD1,0x85,0x73,0x66,0x73,0x87,0x56,0x9F,0xEA, + 0xBA,0xEB,0xFC,0xB0,0x42,0xC2,0xDB,0x44,0x91,0xB2,0xB4,0xA2,0xBB,0x50,0x2A,0xDB,0x61,0x00,0x26,0x30,0x5C,0x26,0x48,0x94,0x29,0xB0,0x00,0x18,0x28,0x18,0x85,0x5A, + 0x79,0xF1,0x92,0x97,0x22,0x02,0xDB,0x07,0x1C,0xA7,0x9E,0xA4,0x64,0xFF,0xA6,0x7F,0x59,0x38,0x94,0xDB,0x29,0x8E,0x29,0xFF,0x3D,0xCB,0xA2,0xC0,0xA0,0xDB,0x1B,0x61, + 0x68,0x61,0xC3,0xEE,0xC6,0x96,0x94,0xDB,0x18,0x96,0xDB,0x58,0xDA,0x50,0xFD,0x93,0x86,0x86,0x05,0xDB,0x9D,0xEC,0x05,0xDB,0x4F,0x9A,0xF0,0xF7,0x0A,0x35,0x00,0x17, + 0xB2,0x0D,0x52,0x1B,0x3C,0xBD,0x60,0xDB,0x32,0x84,0x40,0xBE,0x72,0x8A,0xB6,0xF1,0xD7,0x66,0x28,0xD9,0x45,0x02,0xDB,0x57,0xD6,0xEE,0x4E,0xB5,0xC9,0x06,0x39,0x2A, + 0x00,0xDA,0x26,0x5C,0x8C,0xDB,0x00,0x65,0x8D,0x3D,0xB4,0x01,0xDF,0xCF,0xAF,0x4C,0x7A,0x7A,0x08,0x0F,0x4A,0xA7,0x53,0xB3,0xDB,0x91,0x42,0x8E,0xC8,0x8E,0x8C,0x83, + 0xDB,0x8A,0xAB,0xE1,0xC5,0x3C,0x22,0x98,0x68,0xD2,0x9A,0x97,0xEF,0x07,0x61,0x83,0xDB,0x47,0xC1,0x30,0xDB,0x05,0x96,0x72,0x89,0xBE,0x1D,0xD8,0x3D,0x90,0x14,0xB7, + 0xA5,0xB3,0x6F,0xA0,0x98,0xFA,0xED,0xED,0xA2,0x9C,0xFB,0xE7,0xDB,0x0B,0x0B,0xCA,0xDE,0xE5,0x2D,0x9D,0x9C,0x8E,0x6C,0xDC,0x28,0xDB,0x36,0x00,0x72,0xE7,0xAC,0x7D, + 0xDB,0x2E,0xB5,0x28,0xD9,0x35,0x87,0x7C,0x83,0x6A,0x7B,0xE0,0xDB,0x11,0xE8,0x00,0xD9,0x1C,0x03,0xA0,0xE4,0xB6,0x0A,0x50,0x13,0xDA,0x6B,0xED,0x60,0xDB,0x5D,0x4A, + 0x63,0xDB,0x14,0x00,0x28,0x0E,0x79,0x77,0xBD,0xDA,0x86,0xDF,0x24,0x9A,0x64,0xB6,0x12,0x86,0xC3,0xDB,0x80,0xB0,0xCA,0xC6,0xEB,0x6D,0x1F,0x16,0x7F,0x8B,0x51,0x59, + 0xD5,0x60,0xE6,0xD8,0xDB,0x6E,0xCF,0x3B,0xA5,0xEF,0xB2,0xB7,0xD7,0xEC,0xBD,0x3C,0xD0,0x04,0x7B,0x88,0x90,0x40,0xDB,0x2C,0x40,0xB3,0x2D,0xB9,0x66,0xA1,0x2E,0x0C, + 0xD7,0xFA,0xDA,0x0C,0xDB,0x0F,0xBA,0xBA,0x14,0x01,0x96,0x00,0x90,0x8B,0x37,0xBA,0xEC,0x0D,0xDB,0x2D,0xBD,0x37,0xC2,0x9C,0xDB,0x34,0x92,0x6B,0x89,0x01,0x7B,0xDB, + 0x07,0x74,0x65,0x96,0xB9,0xDB,0x1A,0x84,0xE2,0x07,0x42,0x38,0x23,0xE4,0xA3,0x7F,0x42,0x57,0x8B,0xB8,0x79,0xE3,0x41,0xDC,0x2C,0xA2,0xD3,0xC8,0xD0,0xDB,0x28,0x26, + 0xDB,0x12,0x27,0x85,0xDB,0x90,0xB9,0x5A,0xBC,0x77,0xD1,0x94,0xA8,0xA6,0x94,0xDB,0x02,0x08,0x4F,0x12,0x15,0x9F,0x9C,0x1A,0x4F,0x07,0x39,0x02,0xF0,0xA4,0xC0,0xDB, + 0xEA,0xB3,0x1B,0x8B,0x8B,0x05,0x52,0x48,0x00,0xDF,0xCD,0x8F,0x4F,0x6B,0x6C,0xED,0x02,0xF0,0x7E,0x79,0x00,0x9D,0xD3,0x70,0x4A,0x00,0x8A,0xB9,0xEE,0xA1,0x6B,0xE8, + 0x74,0x94,0xB5,0xED,0xC2,0xDB,0xA4,0x00,0x95,0x4B,0x90,0x2B,0x00,0x98,0xD2,0x2E,0x07,0x4A,0x0B,0xFF,0x5C,0xEB,0x28,0xCC,0x2C,0xB1,0x95,0x37,0xD2,0x34,0xE9,0x5B, + 0xC3,0xD1,0x33,0x56,0x89,0xB5,0x46,0x84,0x04,0x94,0x25,0x8D,0x24,0x95,0x8D,0xDD,0xBE,0xC8,0x02,0x57,0xA9,0xA0,0x76,0x14,0x00,0x92,0x80,0x8B,0xDC,0x87,0xE5,0x0A, + 0x4A,0x0A,0xDA,0x19,0xB6,0x5C,0xA3,0xA9,0x45,0x03,0x27,0x29,0xB5,0x56,0x04,0xDB,0x00,0x5A,0x79,0xE3,0xBD,0xCF,0x19,0x82,0x5B,0x31,0xB5,0x10,0x08,0x7A,0xA0,0xDB, + 0x2C,0x31,0xDB,0x0F,0x7A,0xC1,0xDB,0x02,0xCA,0xBB,0xDE,0xB3,0xB7,0xB1,0x5A,0xAA,0x82,0xB9,0xA9,0xFB,0x6E,0x86,0xA4,0x93,0xF7,0x00,0xC5,0x74,0x61,0x02,0x93,0x94, + 0xDA,0x14,0x9E,0xAA,0x8A,0xDB,0x0E,0xDE,0x14,0x70,0xCA,0xF8,0xA0,0x5D,0xC7,0x58,0xDB,0x79,0x00,0x9A,0x4E,0x9B,0x49,0xBA,0x8E,0xF9,0x60,0xE7,0xA5,0xFE,0xDE,0xEF, + 0x89,0xA6,0xBA,0x56,0x14,0x83,0x3F,0x25,0x33,0x5E,0x00,0x04,0xDB,0x03,0x7B,0x89,0x89,0x93,0x4A,0xDB,0x0B,0x95,0x4A,0xCA,0x19,0x00,0xDE,0x7F,0x48,0xB2,0xAF,0x50, + 0x57,0xDE,0x60,0xDC,0xE5,0x09,0xC8,0x8B,0x0A,0x06,0x82,0xDA,0x4A,0xFF,0x5E,0x45,0xDF,0x25,0x63,0xDB,0x0A,0x92,0x46,0x4D,0xB8,0x40,0xA0,0xB4,0xDA,0xA5,0x5B,0x10, + 0x0D,0x07,0x4F,0xB0,0xDB,0x36,0x12,0x8A,0xC0,0xDB,0x22,0x82,0xC0,0xDA,0xC0,0xEB,0x0C,0x15,0x39,0x06,0x11,0xB9,0x96,0x57,0xDB,0x1A,0xFB,0x12,0x61,0x60,0xCA,0xA9, + 0x3B,0x40,0xE2,0x3C,0x80,0x68,0x05,0xE0,0x6D,0x00,0x7C,0x20,0xDB,0x14,0x7C,0xAD,0xDB,0x16,0xA7,0x14,0xDA,0x14,0xC3,0x1A,0x85,0x6F,0x02,0x86,0x00,0x06,0xF4,0x05, + 0x02,0x3F,0xF9,0xC3,0x7A,0x00,0xA1,0x69,0x93,0x69,0x84,0x7D,0x15,0x23,0xA4,0x90,0xA1,0xDC,0x87,0xDB,0xD0,0x81,0x94,0x78,0x94,0x7D,0x41,0xDB,0x4F,0xC6,0x51,0x61, + 0xA1,0xDB,0x8F,0xE2,0x07,0x86,0x8A,0x91,0x94,0xDB,0x09,0x1E,0x02,0xDB,0xFA,0xB8,0xB2,0xDD,0x60,0xDB,0x78,0x28,0x01,0x00,0x5A,0x4D,0xB5,0x0D,0xB6,0xA3,0xDF,0xD7, + 0x94,0x10,0x4F,0xB8,0xDB,0x34,0x02,0xAD,0x1A,0x12,0x07,0x53,0xED,0xD2,0x92,0x38,0x25,0x93,0x35,0x11,0xC8,0x58,0x38,0x03,0xDC,0x7F,0xFB,0x47,0x60,0x6A,0x82,0xE3, + 0x48,0xC2,0xE4,0xAE,0x79,0x8C,0xF7,0xD0,0xAA,0x00,0xDC,0x09,0x03,0xDB,0x97,0x49,0x03,0xDB,0x01,0xE4,0x02,0xC2,0x5A,0x02,0xBA,0x08,0x06,0x52,0xBA,0xD5,0xD8,0xE9, + 0x4D,0x0D,0x2C,0x99,0xA9,0x56,0xB8,0x0B,0x3F,0xBA,0x8B,0x19,0x43,0xDC,0x8E,0x42,0x72,0x94,0xB1,0xD3,0x7D,0x77,0x80,0x73,0xA1,0xB7,0xDA,0x6E,0x5E,0xB0,0x0E,0xEC, + 0x7B,0xB9,0xD4,0x57,0xB5,0x57,0xBB,0xD8,0xDB,0x6F,0xCB,0xDC,0x00,0xA4,0xF5,0xFE,0x20,0xDB,0x25,0x27,0x93,0x4B,0xD8,0x00,0x6A,0x6A,0x4D,0x59,0x3E,0x4D,0xD9,0xBF, + 0xD1,0x94,0x4C,0xAC,0xED,0x30,0xDB,0x19,0x03,0x07,0xAC,0xDF,0x80,0xA5,0x25,0xDE,0x33,0x01,0xDB,0xDC,0xC8,0xD0,0x58,0xDC,0x35,0x7F,0x6B,0x7F,0x0A,0x6A,0x3B,0x23, + 0xDC,0xC2,0x8A,0xD6,0x15,0x23,0x21,0x9B,0x80,0x62,0x59,0xE8,0x20,0xDB,0x66,0xCF,0x7C,0x6A,0x78,0x04,0x84,0xB1,0x05,0x44,0x84,0xDC,0xC1,0xDA,0x20,0xCD,0x76,0x0D, + 0xA1,0x56,0xE1,0xB7,0xE7,0x5C,0x00,0xD5,0x15,0x29,0x41,0xEF,0x41,0xD3,0x27,0x2D,0x06,0xBA,0xC6,0x78,0x50,0xD8,0xFB,0x00,0x5F,0xDB,0x0C,0xC1,0x68,0xDA,0x2B,0xB6, + 0x92,0x0F,0x63,0x00,0xE0,0x4C,0xF7,0x05,0xC1,0xDA,0x04,0x4A,0xEF,0x0A,0xCA,0xB7,0x70,0xDB,0x61,0x27,0xDB,0x65,0xB6,0x6B,0xEA,0x58,0x00,0xDB,0x0C,0x59,0xD9,0xE4, + 0xB8,0xBE,0xBE,0x7C,0x31,0xBA,0x02,0x86,0x00,0xDB,0x24,0xB0,0x61,0xD7,0xDA,0xA3,0x92,0x0A,0xF2,0x95,0x8B,0x86,0xDB,0xDC,0x07,0x57,0x7F,0x00,0x60,0xDB,0x23,0xA0, + 0xDB,0x63,0x70,0xD7,0xF2,0xB8,0x42,0xF9,0xC6,0x80,0x82,0x81,0x62,0xC3,0xDB,0xA7,0x57,0x78,0xE8,0x94,0xF0,0xB4,0x84,0x56,0x9A,0xF6,0x89,0x5C,0x06,0xDF,0x00,0x13, + 0x0B,0x65,0xB5,0x3D,0x0F,0xF7,0x12,0x13,0x00,0x2A,0x8C,0x5A,0xB9,0x50,0xDB,0x18,0x89,0xD5,0xDB,0x51,0xB1,0x2C,0x73,0xB6,0xAC,0xDB,0x33,0xA6,0xE4,0x03,0xDB,0x0C, + 0xD2,0x35,0x02,0x05,0xCD,0xA2,0x75,0xB5,0x03,0xD7,0x0A,0x02,0xF9,0xB8,0x13,0x49,0x92,0x68,0x93,0x50,0x8B,0xDB,0x02,0x4D,0x4D,0x83,0xDC,0x94,0x40,0xE4,0xB9,0xCA, + 0x97,0x42,0x24,0xC0,0xDB,0x02,0xDF,0xCA,0xF2,0x52,0x4C,0x8F,0xAC,0x80,0xEA,0x0C,0xAB,0xC9,0x0A,0xE5,0xEE,0xE5,0x8B,0xCD,0x7A,0xD8,0x07,0x0E,0x6A,0xD7,0x8F,0xEA, + 0x9F,0x78,0x9E,0x56,0x93,0x9D,0x00,0x2F,0xF1,0xAB,0x56,0x93,0x8A,0x96,0x83,0x75,0x96,0x86,0xDB,0x84,0x4A,0x37,0x9B,0x75,0x56,0x87,0xB3,0x02,0x36,0x00,0xCD,0x5C, + 0x0B,0xF6,0x00,0x0F,0xBE,0x92,0x15,0x67,0x0C,0xBF,0x08,0x28,0xDB,0x6A,0x40,0x72,0xDB,0x0C,0x59,0x73,0x7D,0x52,0x73,0x91,0x58,0xD8,0x59,0xB7,0x6B,0x81,0x4F,0xC2, + 0x41,0xDB,0x4B,0xEC,0xA6,0x90,0xE7,0x2D,0x04,0xE9,0x55,0x03,0x02,0xA9,0x00,0x13,0xC9,0xFB,0x00,0x91,0x4D,0x00,0x63,0x3A,0x93,0x50,0xDB,0x61,0x03,0xD4,0xB8,0xB6, + 0x77,0xB8,0xCD,0x53,0x08,0x1B,0x85,0x01,0xDB,0x7A,0x8D,0x00,0x12,0x4F,0x5B,0xEE,0x72,0xB6,0x30,0x6D,0x34,0xDB,0x28,0x4B,0xDE,0xDB,0x2A,0x85,0xC2,0x7F,0xC8,0x3B, + 0x48,0xD3,0xFF,0xEE,0xBA,0x72,0x91,0xD1,0xF0,0xDE,0x79,0x61,0xE4,0x61,0xDA,0xC8,0x00,0xDB,0x0C,0x94,0xDB,0x35,0x06,0x56,0x66,0xC9,0xA8,0x12,0x16,0x99,0x89,0x5D, + 0x00,0x1F,0xE9,0x19,0xC5,0x05,0x85,0xCD,0x1D,0xFD,0xDD,0x0F,0x23,0x2C,0x1E,0xBF,0xB6,0xA6,0xDB,0x02,0x94,0x71,0x92,0x8C,0xC1,0xDB,0xDC,0x41,0xD7,0x4C,0x00,0xC8, + 0xCF,0x6B,0xB5,0xA9,0x8F,0x69,0xC7,0xF3,0x02,0x09,0x05,0xB2,0x25,0x09,0xCA,0xA1,0x13,0x81,0xDC,0x30,0x61,0xD9,0x30,0xDB,0x4E,0xCB,0xED,0x5A,0x90,0x2C,0xDB,0x06, + 0xD9,0xB8,0xE4,0x94,0x82,0x4C,0x1B,0x0D,0x15,0xB7,0x2E,0x9C,0xEA,0xA5,0x40,0xCC,0xCA,0x99,0xEB,0x8E,0x2A,0xC8,0xB6,0x39,0xE5,0x0C,0xE5,0x39,0x09,0x0F,0x65,0xC8, + 0xDC,0xC3,0xD6,0xC2,0xE2,0x2C,0x7F,0x9F,0xD5,0xD9,0x0D,0x98,0x32,0xB3,0xB7,0xCB,0xC2,0xDD,0xC8,0xB8,0x90,0x66,0xDE,0xC7,0xAB,0xBB,0xBD,0x2E,0xA9,0x73,0xD8,0x48, + 0xD3,0xC3,0xB8,0xD2,0x61,0xBB,0x92,0x87,0x94,0x81,0x00,0x96,0x7B,0xD5,0xD5,0x72,0x56,0x00,0xE8,0x19,0xA5,0x2A,0xBF,0x1B,0xAE,0x02,0x0B,0xAA,0x00,0x13,0x8A,0xB7, + 0x5A,0xFF,0xEC,0x2D,0xDB,0x28,0xB7,0xBC,0x03,0xD4,0x2B,0xC9,0x76,0xD7,0x74,0x0E,0x00,0x91,0x98,0xDA,0x3D,0x8B,0x00,0xC7,0xE9,0x94,0x37,0xC7,0x51,0x0A,0xB4,0x57, + 0xB4,0x61,0xDB,0xA4,0x03,0x5C,0xDE,0xC2,0x63,0x63,0x80,0xDC,0x2F,0x27,0xA0,0xD9,0x91,0x93,0x2A,0x02,0x90,0x94,0xD9,0xB6,0x1D,0xB4,0xE2,0x9A,0x85,0xA1,0x08,0x40, + 0xDB,0xA7,0xC9,0x60,0x53,0xDB,0xC5,0x0C,0x76,0xEA,0x16,0x2A,0x00,0x39,0x8B,0xC0,0xDB,0x04,0x05,0x03,0x14,0x7F,0xDC,0x73,0x2C,0x48,0x05,0xAA,0x91,0xD3,0x99,0xD1, + 0x05,0x2C,0xD6,0x9C,0x80,0x16,0xDB,0x16,0xBB,0x42,0x66,0x71,0x78,0x83,0xC8,0x94,0x4B,0xC1,0x09,0x8B,0x99,0x08,0xEC,0x00,0xD2,0x1D,0x78,0x00,0xBD,0xA5,0x3F,0x19, + 0xD5,0x02,0x03,0x00,0xF9,0x03,0x06,0xEC,0x00,0xF2,0x30,0xEE,0xAF,0x02,0x03,0x22,0xF9,0x00,0xA6,0xA5,0xE8,0xC3,0xDB,0xDA,0x0E,0x66,0xFB,0x60,0x69,0xC8,0x7C,0xDC, + 0x18,0x8B,0xD8,0xFF,0xBF,0x4B,0x00,0x09,0xC6,0x7C,0xDA,0x2E,0x00,0xF9,0xB9,0x45,0x22,0x8D,0x58,0xDD,0x51,0xB8,0x48,0x91,0x9C,0xA4,0xDB,0x00,0xB5,0x94,0x40,0xA3, + 0xCF,0x98,0x24,0x21,0x07,0x07,0x60,0xDB,0x6A,0x4F,0xEE,0xD7,0x68,0xC5,0x92,0x16,0xF2,0x4E,0xB9,0x7F,0x06,0x58,0x03,0xD9,0x63,0xC8,0x73,0x23,0x69,0xA7,0xD0,0xC5, + 0xCC,0xC8,0x47,0xB1,0x61,0xDB,0x79,0x80,0x40,0xDC,0x62,0xA2,0xB9,0xC1,0xDC,0x96,0x54,0x00,0x9E,0x0B,0xA4,0xC0,0x09,0x51,0x8A,0x84,0x74,0x08,0x8E,0x57,0x00,0xE5, + 0xB6,0x86,0xE5,0xB3,0x97,0x0D,0xCD,0x21,0x00,0x7A,0x18,0x0D,0xD5,0x5B,0x00,0x19,0x69,0x71,0x8C,0xB1,0xCA,0x83,0x73,0x6F,0xC2,0xAD,0xE8,0x25,0x8F,0xBD,0xC7,0x2B, + 0xE8,0xC8,0x00,0x35,0x8B,0x06,0x00,0x04,0x3D,0xC6,0x04,0xDC,0xA1,0xD9,0x61,0xDA,0x69,0x8D,0x36,0x00,0xB8,0x52,0x86,0xDB,0x95,0x94,0xDB,0x0D,0xBC,0x94,0x1A,0xE6, + 0xF0,0xC2,0xE0,0xDB,0x4F,0x6A,0x0D,0xEE,0xD2,0xC0,0xDB,0x35,0x25,0x78,0x2A,0x4F,0xDE,0x7E,0x5F,0x60,0xDB,0x1F,0x92,0xF4,0x65,0xDB,0x19,0xB8,0x52,0x99,0x5E,0x7C, + 0xDC,0x0A,0x61,0x00,0x90,0xDE,0x19,0x74,0xBA,0x28,0x73,0xDC,0x2C,0xBB,0xBF,0xD9,0xAE,0x07,0x08,0xCB,0x92,0xC8,0x0E,0x0F,0x42,0xB8,0xAC,0xB4,0xD9,0x00,0x70,0x93, + 0x1A,0x94,0x7C,0x1B,0x7C,0x8A,0xDD,0xAE,0x1B,0x17,0x50,0xF5,0xAB,0x2B,0xDE,0x0B,0x27,0xD1,0x92,0x73,0x8E,0xB6,0xB8,0x58,0xDF,0x56,0xD7,0x7B,0xCD,0xA9,0x6A,0x48, + 0xEC,0x6F,0x7B,0x79,0xCB,0xB7,0x9B,0x5C,0xDA,0x25,0x00,0xB0,0xDA,0x2E,0x26,0x30,0xA3,0x67,0xDB,0x0C,0xBC,0xA5,0xDB,0x0B,0x01,0x50,0x59,0xDD,0x52,0xF0,0x88,0xBD, + 0xA8,0x5B,0x60,0xDB,0x0C,0x24,0xAC,0xDB,0x01,0x99,0xEA,0x2B,0x3A,0x04,0x60,0xDB,0x05,0xB6,0xC9,0x6B,0x06,0xF7,0xA8,0x06,0x57,0xDB,0x0E,0x57,0x0F,0xA9,0x6A,0xBE, + 0x3C,0xE7,0x5D,0x3B,0xA6,0x5F,0xBA,0xD0,0xDC,0x1A,0x61,0x87,0xF2,0xB0,0x7B,0xD8,0x15,0x96,0x7D,0x7C,0xA1,0x9A,0xF8,0xD9,0xA5,0x35,0x94,0x06,0x7C,0x7B,0xE6,0x78, + 0xE2,0x77,0x7D,0xC7,0x2B,0x70,0xD7,0xAF,0xBD,0x24,0x00,0xD2,0xBF,0xF5,0x14,0x00,0x7B,0x4F,0x24,0x00,0x75,0x0A,0x28,0x41,0xDB,0x9F,0x49,0xDC,0xDC,0x58,0x60,0x8B, + 0xBC,0xC8,0x92,0xAE,0x76,0xCE,0x00,0x8B,0x39,0x00,0xBA,0xB0,0x45,0xEC,0xE4,0x00,0xB6,0x2E,0xFF,0xAD,0xED,0x6D,0x8C,0x26,0x00,0x99,0xEF,0x72,0xB5,0xBC,0xE1,0xC0, + 0xDB,0xB9,0xE2,0x42,0xAC,0xA1,0xDB,0xD8,0x82,0x1B,0x53,0xB0,0x2C,0xCC,0xC2,0xDB,0x14,0x2A,0x93,0x8C,0x04,0x8E,0xF0,0xDD,0xA6,0x03,0x8B,0xF9,0x8F,0x57,0x00,0x04, + 0x79,0x14,0xE2,0x4C,0xE7,0x48,0xFB,0x04,0x7E,0xB5,0x2D,0xD1,0xE8,0xDC,0x3F,0xC3,0x61,0x83,0xDB,0x41,0xCC,0xAB,0xAC,0x87,0x00,0xB0,0xE7,0xB5,0xBB,0xD9,0x0C,0x7D, + 0xA5,0x79,0x00,0xB3,0x65,0xB0,0x41,0xD6,0xCF,0xCC,0x04,0x7E,0x12,0x00,0xD6,0x1F,0x12,0x05,0x43,0x81,0x2A,0xAE,0x73,0x23,0x55,0x07,0x1F,0x4E,0x9C,0xDB,0x15,0x82, + 0x75,0xC6,0xB9,0xA0,0xF9,0x6B,0xB6,0x5A,0xE7,0xB4,0x06,0x8A,0x54,0x06,0xA0,0xA4,0x04,0xEB,0x5B,0x03,0xDE,0xC8,0xEE,0x81,0xF2,0xDC,0x42,0xB5,0xB9,0xA4,0xD1,0x00, + 0x6A,0x00,0xDB,0xD4,0xB5,0xF0,0x10,0x97,0x1B,0x4F,0xB0,0xDB,0x1F,0x4C,0xAF,0xB9,0x14,0x99,0x6D,0xDB,0x18,0xB1,0xBD,0x2A,0x57,0xEE,0x5E,0x06,0x61,0xBF,0x39,0x6A, + 0x8B,0x57,0xDB,0x8D,0x0F,0xB2,0x2E,0x78,0x82,0xDB,0x95,0x7D,0x3B,0xCE,0x17,0x00,0x6C,0x06,0x61,0xB2,0x30,0xAF,0xC3,0xD9,0xE3,0x8A,0xC9,0x27,0x87,0x0B,0x41,0xDA, + 0xC6,0xF2,0xC8,0x0A,0x71,0xDC,0x0A,0x03,0x74,0x7C,0x0D,0xBC,0x58,0xD1,0x57,0x99,0x77,0x12,0x00,0x7F,0xFF,0xDF,0x0C,0x1F,0x00,0x77,0x03,0x00,0xF5,0x15,0x25,0xB2, + 0xD8,0xDA,0x50,0xE2,0x52,0x8F,0x58,0xC7,0xD8,0xDA,0x51,0x7E,0x0A,0x04,0x56,0x03,0xB7,0x52,0xB8,0xC6,0x13,0x3A,0x33,0x74,0x26,0xFF,0x36,0x60,0x50,0xDB,0x5D,0xA0, + 0xDC,0x73,0x27,0x03,0x04,0xDB,0x81,0xD8,0xF6,0x02,0x85,0x79,0xC0,0xDB,0xDA,0xAF,0x42,0x24,0xC0,0xDB,0x0D,0x00,0x4C,0xA5,0xCA,0xC0,0x76,0x20,0x2B,0x34,0x18,0x4B, + 0xE5,0xB3,0xDB,0x56,0x59,0xCB,0xFD,0x66,0x86,0xDF,0xCB,0x38,0xE1,0x1D,0x42,0x8B,0x75,0xB1,0xE8,0x0E,0x68,0x5A,0x00,0x99,0x65,0xBF,0x53,0xAF,0x58,0xEC,0x73,0x35, + 0xE7,0x66,0xA9,0x3A,0x87,0x62,0x0B,0xD0,0xEC,0x9E,0x28,0xA6,0x15,0x61,0xBE,0x34,0x94,0x98,0xDC,0x51,0x90,0x57,0xEE,0x59,0xB1,0x52,0x98,0x69,0xB5,0x20,0xC4,0x79, + 0x0E,0x9F,0x32,0x2C,0xA3,0xEB,0x28,0x22,0x0F,0x8A,0xDB,0x0E,0xEA,0xC0,0x73,0xEE,0xEE,0xC8,0x57,0x38,0xEC,0x5F,0xDA,0x3C,0x74,0xDA,0x3B,0x7E,0x00,0xE6,0x06,0xDB, + 0x0D,0x90,0x06,0x5C,0x4B,0x3A,0xD8,0x16,0xB5,0x52,0xAC,0xEE,0xC1,0xDB,0x69,0x93,0x61,0xDB,0xD0,0x02,0xDB,0x3E,0xE4,0xBD,0x85,0x40,0xDB,0x4F,0x07,0xD7,0xEE,0x81, + 0xB0,0x99,0x75,0x6D,0x8E,0x07,0x1F,0x3A,0xDE,0xDE,0x2A,0x56,0xAB,0x63,0x09,0x65,0x01,0xED,0x02,0xDC,0xA9,0xD2,0xFF,0x78,0xCF,0x72,0xB7,0xA2,0xAE,0xD1,0x95,0x80, + 0x41,0xDE,0x85,0xDD,0x67,0x8D,0x0E,0xA5,0xA4,0x3D,0xDE,0x5B,0x0A,0x81,0x5F,0x00,0x05,0xBD,0xE1,0x85,0xD8,0x59,0x0A,0xEB,0x95,0x83,0x3C,0x05,0x53,0x86,0xAE,0xEF, + 0xCA,0x54,0x9F,0x5F,0x0D,0x3E,0xAC,0x14,0x66,0xE2,0x95,0x71,0x24,0x54,0x04,0xD5,0x45,0x87,0x7F,0x25,0xF8,0x56,0xF2,0xE3,0xBE,0xCF,0xF8,0x0A,0xD1,0xD4,0x9E,0xB9, + 0x03,0x7F,0x27,0xA3,0xDB,0x0B,0xEC,0x5A,0xE9,0x5F,0x00,0x04,0x5C,0x45,0x00,0xAA,0xEF,0x27,0x30,0x2F,0x5D,0xDB,0xF0,0x01,0xD9,0x57,0x28,0xBB,0x5E,0x00,0xB7,0x42, + 0xB5,0xA0,0xA3,0xA6,0xA8,0x16,0xDB,0x01,0x22,0xB0,0xD7,0x40,0xDB,0x17,0x64,0x0C,0xFD,0x8E,0x7A,0x8E,0xA8,0x04,0xB0,0xD8,0xB0,0xD9,0xF0,0x00,0xD7,0xB9,0x03,0x80, + 0xDB,0x23,0x3C,0xA0,0xAD,0xC1,0xCA,0x68,0xBA,0x08,0x42,0x05,0x04,0xE8,0x03,0xC1,0xBD,0x09,0x06,0x42,0x5E,0x00,0x19,0x1A,0x60,0xB9,0xBD,0xE6,0xA1,0xC3,0xE6,0x0D, + 0xB0,0xEB,0xCB,0xBE,0x02,0xB0,0xDB,0xCA,0xC7,0xF3,0xC0,0x2B,0xB2,0xB9,0xB7,0xDD,0xB2,0xB2,0xE4,0x05,0xDB,0x07,0x48,0x3A,0x69,0x8C,0xED,0xC9,0x1E,0xA2,0xA7,0x74, + 0xD7,0x0B,0x04,0xB8,0x2C,0xB2,0xAA,0x80,0xEE,0xA4,0x6C,0xDB,0x1C,0x36,0x01,0x50,0xDB,0x2B,0x5D,0xBA,0x8A,0x28,0x18,0x92,0x4E,0x01,0x4B,0x84,0xCD,0x00,0xB5,0xD4, + 0x93,0x04,0xE6,0xB7,0x4C,0x28,0xDB,0x0A,0x07,0xB9,0xEB,0xDB,0x00,0x19,0x34,0x13,0x33,0x12,0xB3,0x25,0x13,0x85,0xDB,0x0F,0xC1,0x6B,0xF7,0x6C,0x07,0xB5,0x2E,0x38, + 0x00,0x95,0xEF,0x23,0x41,0x9A,0x4C,0xF6,0x3B,0xEB,0x09,0x8E,0x29,0xDA,0xEC,0xE3,0x32,0xC9,0xED,0x08,0xEA,0xD5,0x42,0xF0,0x19,0xC0,0x24,0x87,0x91,0x29,0x26,0xCE, + 0xDA,0x99,0xC2,0xDB,0x8B,0xBA,0x13,0xD6,0xD0,0xAA,0x2F,0x00,0xE4,0x41,0x82,0x6C,0xDA,0x2D,0xE6,0x7C,0x00,0xF3,0x3A,0x57,0xBA,0x2B,0xED,0xBE,0x8F,0xA9,0xE2,0xAA, + 0xC8,0x3A,0x02,0x00,0x90,0xDB,0x2F,0xB9,0xAC,0xDB,0x12,0x45,0x87,0xDA,0x00,0xAC,0xEF,0x84,0xB7,0x65,0xC3,0xDB,0x00,0x94,0xDC,0x26,0xDB,0x00,0xB8,0xA3,0xDF,0xE2, + 0x21,0x5B,0x08,0x40,0xDB,0x52,0x02,0xEE,0x83,0xC5,0x76,0xEB,0x10,0x3A,0xDD,0x46,0x3A,0xB7,0xDB,0xC6,0x2D,0x06,0x00,0x09,0x24,0xB2,0x76,0x00,0xB7,0x49,0x14,0x43, + 0xDB,0xC0,0x01,0x73,0x70,0x83,0xC6,0xD2,0xC8,0x0E,0x2C,0x0B,0xC3,0xDB,0x09,0xB0,0xD8,0xF4,0x00,0xA6,0xF5,0x12,0xED,0xB0,0xDB,0xB5,0xF8,0xC2,0xC8,0xE6,0xCD,0xBA, + 0x16,0x2E,0xDB,0x06,0x3C,0xC6,0x94,0xD6,0xBD,0x34,0x55,0x30,0x34,0xD0,0x12,0xD6,0x6A,0x02,0x60,0x4A,0xAC,0x08,0xB7,0xAA,0xF7,0xBA,0x60,0x02,0xFD,0x03,0x6A,0x99, + 0x2A,0x75,0xDA,0xEE,0x97,0xEB,0x93,0x45,0x2A,0x05,0xDC,0xF2,0xB5,0x30,0x60,0xD8,0x34,0x50,0x2F,0x8D,0xC8,0xB2,0x29,0x65,0xEC,0x03,0xDB,0x2B,0xE0,0x26,0xCD,0x79, + 0x00,0xDB,0xD0,0xE2,0x42,0x97,0xA0,0xDB,0x1B,0x09,0xC1,0xD8,0xCA,0x99,0x03,0xDB,0x93,0x8C,0xBA,0xA5,0xA9,0x9F,0x02,0x65,0x92,0x00,0xEA,0x77,0x88,0xE4,0xDB,0x06, + 0xC8,0x90,0x18,0xA6,0x76,0x07,0xAD,0x5B,0x00,0x7F,0xBB,0x95,0x48,0x83,0xE3,0x2C,0xFA,0xC6,0x23,0xB1,0x99,0xAC,0x14,0x60,0x68,0x94,0x97,0x00,0x69,0xA8,0x7D,0x00, + 0x0E,0x25,0x99,0x22,0xC1,0xC8,0xFF,0xF6,0x3E,0xBB,0x07,0xDB,0x0B,0x00,0xE7,0x98,0xDF,0x55,0xDC,0x37,0x00,0x60,0xC4,0x77,0x38,0x5E,0xD4,0x8A,0x05,0x8A,0x42,0x8B, + 0x8B,0xD6,0x8C,0x92,0x94,0xD1,0x8E,0x0A,0x6F,0xCB,0x60,0xDB,0x5C,0xB0,0xD7,0xA5,0x00,0x27,0x85,0xDB,0x12,0xB8,0x65,0x70,0xDB,0xB7,0xCC,0xB0,0xDD,0xC0,0x01,0xD9, + 0xA3,0xBD,0xC4,0xAF,0x7A,0x85,0xC3,0xDB,0x92,0x40,0xEB,0x6B,0x19,0x1F,0xEA,0x48,0xD0,0xFE,0xBD,0x76,0x09,0x57,0xDB,0x14,0xD3,0xD7,0xB1,0x3D,0x7B,0x84,0xDD,0xA9, + 0x93,0xCB,0x99,0xDC,0x87,0x29,0x41,0xDB,0x0E,0x30,0xDB,0x65,0xC4,0x5D,0x05,0x1D,0x06,0xB7,0xCD,0x16,0xF1,0x7D,0xE9,0x4C,0xDA,0x0E,0x3B,0xC3,0x70,0xCD,0xF5,0x0A, + 0x24,0x48,0xE1,0x1D,0xCC,0x6D,0x92,0x7B,0x00,0xB4,0xBE,0xC8,0x02,0x4D,0xC4,0x88,0xDC,0xC8,0xD1,0x8E,0x38,0xCA,0x02,0xDA,0x1E,0x00,0xD2,0xF6,0xE5,0xDD,0x7D,0xF4, + 0xB4,0xD3,0xA3,0x40,0xDA,0x30,0xBE,0xB5,0xA0,0xDA,0xB9,0x00,0xB9,0xBC,0x18,0x28,0xDB,0x58,0xD9,0x26,0x5A,0xDB,0x0A,0xA8,0x98,0x50,0xDB,0x0A,0x9F,0xC1,0xEE,0x50, + 0x6B,0x52,0x5F,0x1C,0xE9,0x47,0x54,0x33,0x5B,0xB8,0x41,0xDB,0xA7,0xF9,0x01,0x61,0xDB,0x6E,0xCC,0x11,0x90,0xDB,0x32,0x9F,0xCB,0xB8,0xC8,0xFC,0xAE,0x29,0x94,0x30, + 0xDB,0xC3,0xB0,0xAC,0x0E,0x12,0xEF,0x00,0xD3,0xF9,0x03,0x79,0x0A,0x9C,0xA0,0xDC,0xB7,0xE8,0xB9,0xCB,0xC9,0xC7,0x7F,0xF8,0x07,0x28,0x82,0xE9,0xD0,0x45,0xE4,0xD3, + 0x34,0xED,0xDB,0xF5,0xBA,0x7F,0x39,0x0D,0xAB,0x0F,0xDB,0x0A,0x59,0xE5,0x02,0xD5,0xCE,0x6F,0xEC,0x81,0x0A,0x39,0xFA,0xBA,0x40,0xDA,0xC3,0xD5,0x02,0xB4,0x00,0x26, + 0x81,0xDA,0x3D,0x81,0xCE,0xDA,0x12,0xF5,0xBB,0x4A,0xA4,0x6A,0xF3,0xE0,0x93,0x46,0xB4,0xCC,0xE8,0x53,0x60,0xDB,0x00,0x76,0x5E,0x81,0x35,0x19,0x1A,0xCB,0xB5,0x8C, + 0x3D,0xF0,0x58,0x2A,0xDB,0x5A,0xF6,0x4C,0xDB,0x0B,0x06,0x87,0xB5,0x14,0x4F,0xA7,0x02,0x96,0xAB,0xED,0x3C,0xD6,0x61,0xAB,0x40,0x9C,0x38,0xE4,0x04,0xAA,0x2D,0x12, + 0x7F,0x6F,0xD2,0xF6,0x07,0x00,0xD1,0xF9,0xD7,0x69,0x00,0x23,0x13,0xA9,0x00,0xAA,0x32,0xD4,0x9C,0xC9,0x28,0xDB,0x2C,0xE3,0xAE,0x26,0xAE,0x11,0x29,0xB5,0x00,0x14, + 0x57,0x22,0x95,0xC8,0x8D,0x91,0x05,0x75,0xF9,0x67,0xA7,0xF8,0x6F,0x73,0xD7,0x14,0x06,0x39,0xC9,0xF9,0xB8,0xCA,0xD8,0x16,0xDA,0x14,0xDB,0x09,0x27,0xC3,0xDB,0xD6, + 0x0B,0x00,0x9B,0xDE,0x22,0x00,0xDB,0xB5,0xB6,0x60,0xB4,0xDB,0xA8,0x42,0x4C,0x97,0x83,0xE5,0xDE,0x38,0xCA,0x6B,0x81,0xCD,0x29,0x0B,0x1F,0xEE,0x5B,0x4B,0x5F,0x33, + 0xDB,0x0F,0x6A,0x61,0xAB,0x6F,0xCB,0x71,0x8B,0xE5,0x57,0x28,0xDD,0x28,0x0F,0xFC,0xE8,0xD0,0x3C,0x02,0xB4,0x32,0x80,0xC2,0x9B,0x9F,0xE1,0x07,0x51,0x2C,0xC0,0x50, + 0xD5,0x57,0x0E,0x0B,0x87,0xF6,0x00,0xAD,0x0F,0x0E,0xF6,0xE4,0x93,0x4C,0xA7,0xA5,0xD0,0x2C,0x86,0x67,0xB5,0x4A,0x87,0x8A,0x2D,0xFB,0x37,0x33,0x3E,0x5C,0x57,0x9F, + 0xD1,0x94,0xD9,0x9B,0xAD,0x09,0xBD,0xFB,0x00,0xDA,0xC2,0x0A,0x2A,0x44,0x94,0xC2,0xD5,0xD0,0x90,0x5C,0x26,0x95,0xEC,0x6E,0xFF,0x9A,0x63,0x88,0x1E,0x27,0x93,0xD8, + 0x50,0xD6,0x4C,0xDA,0x16,0xC8,0xF4,0x04,0xD4,0x51,0xD9,0xB7,0x08,0xDA,0xA8,0x5B,0x50,0xB7,0xA5,0xDB,0x01,0x52,0x35,0x01,0x60,0xDB,0x33,0x7D,0x0A,0x52,0x87,0xF6, + 0x60,0x68,0x11,0x6B,0x57,0x82,0xC3,0xBC,0xC8,0xE2,0x6D,0x08,0x7F,0x79,0xE3,0x56,0x02,0xA2,0x1E,0x05,0xC1,0x14,0xC0,0x0B,0x48,0x0C,0xBA,0x08,0x91,0x2A,0xAB,0x7E, + 0xF2,0xB0,0xCB,0x90,0xEC,0xED,0x85,0xA9,0x0F,0x3B,0x5D,0xC2,0x74,0x1F,0xEE,0x55,0x22,0x54,0x03,0xEB,0x15,0x33,0x61,0xD8,0x74,0x4B,0xC4,0xF5,0xE4,0x76,0x8D,0x95, + 0x02,0x5F,0x00,0x6F,0x03,0x35,0x07,0x25,0x94,0xAA,0xEB,0x26,0x48,0x00,0x95,0xED,0xAC,0xD6,0xC1,0xDF,0x18,0x28,0xD7,0x22,0x6A,0x41,0xDB,0x4D,0x30,0xDB,0x21,0x4C, + 0x60,0xDB,0x79,0xCF,0xDD,0x81,0xDB,0x20,0x15,0x81,0xDB,0x5C,0x13,0x43,0xB1,0x69,0x99,0xE1,0x00,0xDE,0x63,0xD0,0x40,0xDF,0x87,0x75,0x57,0x04,0xDA,0xB4,0xB8,0x57, + 0x8D,0x74,0x94,0xF4,0x9F,0x1A,0x08,0x0E,0x50,0xD6,0xAB,0x04,0xF0,0x5B,0xDF,0x0A,0xCA,0x0A,0xFE,0x3B,0xFD,0xC9,0x42,0xF2,0xD6,0xDD,0x44,0x20,0x0E,0xB2,0x29,0x77, + 0x16,0x00,0x0E,0x61,0xDA,0xAD,0xE8,0xED,0xC0,0x75,0x03,0xF9,0x95,0xA8,0xC4,0xB7,0x89,0x99,0x79,0xDD,0x45,0xB7,0x22,0x8E,0x5F,0xB5,0x56,0xDB,0x4E,0xC7,0xF4,0x90, + 0x9A,0xEB,0xCC,0xDB,0x12,0x2A,0xEE,0x5A,0x50,0xDC,0x87,0x08,0xB7,0x22,0xB0,0xA0,0xDB,0x60,0x5E,0xDB,0x01,0x79,0x5C,0x50,0xB8,0x50,0xB5,0xD9,0x94,0xDD,0xE1,0xBC, + 0x2A,0x6A,0xD5,0x70,0xDB,0xDB,0x7C,0x0F,0xC4,0xD9,0xBD,0xFF,0xBE,0x87,0xD4,0x00,0x5E,0xC8,0x0E,0xA8,0xDF,0xA5,0xC8,0xB9,0xAB,0xA0,0xCD,0xB0,0xAF,0xB7,0x9C,0xC3, + 0xFF,0x09,0xBA,0xEB,0xCA,0xA0,0xD2,0xA3,0xD3,0x8B,0x14,0xEC,0x22,0xF1,0xB1,0x94,0xF2,0x07,0xFA,0xA9,0x0A,0x37,0xA8,0x30,0xB0,0xDA,0xB7,0xC2,0x5D,0x11,0x00,0x86, + 0xDB,0xEB,0xB2,0xC9,0x00,0xB8,0xDE,0x00,0xB7,0x53,0x05,0xDC,0x86,0xDA,0xD5,0x13,0xBD,0xC7,0x4F,0x9E,0x00,0x28,0xDB,0x5F,0x05,0x03,0x7C,0xBA,0x4D,0x60,0xD9,0xDB, + 0x77,0x86,0x01,0xDB,0x53,0x28,0xDB,0x6F,0xCB,0xA4,0xDD,0xA1,0xDB,0x69,0xEF,0xAF,0xF2,0x70,0x32,0xEF,0xE2,0xCE,0x0F,0x0C,0x7F,0xE5,0x8B,0x38,0xE2,0x5B,0x11,0x80, + 0xD0,0xED,0xF8,0x03,0xA6,0x61,0x99,0xBC,0x01,0x57,0x00,0xBA,0x30,0xA3,0xB2,0x83,0x9D,0xC1,0x64,0xCE,0x0C,0xDA,0x25,0xC0,0x2B,0xD9,0x0F,0x04,0x24,0xEA,0x14,0x2D, + 0x8A,0xF8,0xCA,0xAF,0x4B,0xCE,0xBA,0x30,0xF9,0xAB,0x95,0x39,0x6D,0x00,0x88,0x25,0x08,0xDE,0xC4,0xF2,0xD7,0x5C,0xD8,0xB7,0xC7,0x4C,0x36,0xB5,0x52,0xCD,0xA2,0xE4, + 0xD7,0xA5,0xB8,0x27,0x04,0x0A,0x28,0xDB,0x0D,0xB8,0xB6,0xA0,0xCB,0xD0,0xE2,0xB0,0xDB,0x25,0x82,0xDB,0x0C,0xB7,0xB1,0xA9,0xEA,0x55,0x85,0xFA,0x5D,0x06,0xEE,0x63, + 0x68,0x91,0x97,0x39,0x9A,0xA9,0x11,0xB6,0xD6,0xCA,0xB7,0x4C,0xEA,0xD4,0x07,0x57,0xA1,0x9D,0x06,0x65,0x03,0xA8,0xD8,0x03,0xD8,0x58,0xC9,0x5A,0x06,0x14,0xF2,0x0E, + 0xE3,0x9C,0xA0,0xAD,0x91,0x25,0xDD,0x59,0x4B,0xB4,0x33,0x92,0x40,0xE9,0x00,0xEC,0x7D,0x53,0xCD,0xA4,0x86,0x4B,0xDC,0x0E,0x68,0xD5,0xF5,0x2A,0xD9,0x70,0xB5,0x6E, + 0xC3,0x1F,0xD6,0x9E,0x40,0xDA,0x92,0xA5,0x67,0xDA,0x0B,0xB7,0x24,0x29,0x81,0xDC,0x77,0x82,0x30,0xDB,0x14,0xD4,0xB5,0xDB,0x0A,0xE4,0xDB,0x04,0xAC,0x34,0xDB,0x0A, + 0x5E,0xDB,0x0E,0x4F,0x95,0xEC,0x33,0x24,0xA9,0x76,0x07,0xC1,0x36,0xAC,0x6E,0x39,0x76,0xF2,0x04,0xBC,0xF2,0x00,0xB9,0xC3,0xCE,0x00,0x2E,0x8B,0x57,0x00,0xA2,0xE7, + 0x4C,0x00,0xB1,0x2C,0xBD,0x16,0x48,0xB3,0xF2,0x05,0xBD,0xDB,0x21,0xF5,0xCB,0x8E,0x32,0x27,0xB2,0x00,0xFD,0x12,0xB1,0x7D,0xA4,0x61,0xD8,0x52,0x05,0x3D,0xC6,0xDB, + 0x49,0xC7,0xE5,0xB3,0x61,0xDB,0xF1,0x05,0xBE,0xCA,0x00,0xB5,0x58,0xDA,0x09,0x0C,0x25,0x13,0x82,0xDA,0x7A,0xFD,0x93,0xD7,0x2D,0xF0,0x67,0xDD,0xCD,0xCF,0xCA,0x8D, + 0x28,0xDB,0xC5,0xD4,0x20,0x92,0xE4,0xE4,0xB9,0x85,0x89,0xB7,0x02,0x41,0xDB,0xCE,0xA6,0xDB,0x04,0xCD,0x19,0xA1,0xDB,0xB0,0x01,0x2A,0xC9,0xBD,0x65,0xF0,0x7C,0x75, + 0xD9,0x71,0xD1,0xBA,0x9C,0x72,0x39,0x7F,0x15,0xB9,0x11,0x80,0x60,0x7F,0x61,0xDE,0x5F,0x04,0x0E,0x11,0x77,0x9B,0x41,0xC9,0xD5,0x05,0x02,0xAC,0xC9,0xB5,0xD7,0x72, + 0x0E,0xD5,0x04,0x05,0x86,0xE0,0x30,0x8B,0xAD,0x93,0xBF,0x84,0xED,0x03,0xC0,0xED,0xEC,0x3B,0x12,0xDA,0x0B,0x00,0x99,0xC2,0xEB,0x00,0x04,0xA8,0xCB,0xC8,0xB6,0x0C, + 0x8E,0x11,0x8E,0x1F,0x45,0x29,0x92,0x20,0xD9,0x28,0x65,0xDB,0x11,0x29,0x60,0xDB,0xB5,0x13,0x8D,0xB5,0x4D,0x00,0xDB,0xA3,0xBD,0xE6,0x85,0x54,0xEF,0x0D,0x4C,0x60, + 0x8F,0xDB,0x76,0x64,0xEB,0xB7,0x5C,0xA5,0x4D,0x30,0x26,0x8E,0xF3,0xA3,0x39,0x39,0x2A,0x63,0xAB,0x69,0xCE,0x7D,0xF7,0x6E,0xA5,0xAC,0xB7,0xF0,0x8E,0xE7,0x00,0xD3, + 0x3A,0x00,0xB2,0xA1,0x94,0xC7,0x25,0xAF,0x25,0x14,0xDB,0x07,0xF2,0xD1,0xC8,0x54,0x1C,0x96,0x0B,0x8E,0x33,0xA6,0x89,0xA4,0xD6,0xB6,0x5D,0x03,0xFD,0xFE,0x87,0xCD, + 0x4E,0x2A,0xE8,0xA5,0x09,0x06,0xA3,0xA1,0x90,0xB6,0xB1,0xDD,0xD5,0x99,0x5C,0x56,0x00,0xB3,0x53,0x4D,0xA4,0xC9,0xA1,0x65,0x65,0x4E,0x04,0x63,0x05,0xD2,0x99,0xE8, + 0x00,0xB7,0x98,0xB5,0xDB,0x52,0x91,0x61,0xDA,0x28,0xDB,0x08,0x4C,0x08,0x08,0x44,0xDB,0x05,0x24,0x4C,0xA5,0x80,0xDB,0x6B,0x35,0x1A,0xC5,0xB0,0x26,0x28,0xDB,0x25, + 0x4B,0xDB,0x0B,0xCE,0xDA,0xCF,0x16,0x06,0xE0,0x32,0x8F,0xE9,0x04,0xF3,0x03,0x09,0x85,0xDD,0xD5,0xBF,0x24,0xA4,0xAF,0x99,0x7D,0x13,0x07,0xD5,0x16,0xAC,0xCA,0xF8, + 0xB5,0x14,0x7F,0x00,0x21,0x02,0x76,0x00,0xB2,0x55,0x1C,0xCB,0x08,0x93,0xF6,0xE6,0xB6,0xE3,0x15,0x04,0xD6,0x01,0x69,0x0F,0x1E,0xC5,0xD1,0x33,0xCC,0x7B,0xE7,0xB6, + 0xDB,0x16,0xDC,0x12,0x94,0xB7,0x95,0xFD,0x65,0xBB,0x41,0xDB,0x65,0xB7,0x2B,0xCF,0xBA,0xB5,0x00,0xB5,0x2B,0xB6,0x24,0xB4,0x30,0xDB,0x06,0xC1,0xD8,0xEF,0xB4,0xDB, + 0x02,0x20,0x1C,0x30,0xD2,0x93,0xC0,0xDB,0x2A,0x4B,0xBB,0x89,0x9B,0x00,0xB7,0x2A,0xE0,0x5B,0xD6,0x0B,0xC1,0x3A,0xEC,0x19,0x1E,0xD2,0x57,0x8E,0xB5,0xFF,0x49,0x7F, + 0xF4,0x12,0x14,0xA7,0xAB,0xED,0x73,0x87,0x33,0xAF,0xDC,0x29,0xCB,0xDD,0xDB,0x00,0xBD,0xFF,0x87,0xCD,0x05,0x94,0x36,0x8A,0x93,0xD6,0x08,0x65,0xA1,0x61,0x34,0xE5, + 0xE5,0x25,0x45,0xAF,0x27,0xB0,0x60,0xDB,0x1F,0xE2,0x04,0x92,0x93,0xC2,0xDB,0x70,0xDA,0x4D,0x18,0xAB,0x2B,0xB5,0x00,0xA0,0xDB,0xE4,0xA5,0xA3,0xB9,0x10,0xD0,0xDA, + 0xB7,0xA8,0xDB,0x25,0x5B,0xDB,0x02,0x52,0x0B,0xF4,0xAD,0x30,0x33,0xA0,0xDE,0x29,0x33,0x33,0xD1,0xAF,0xBF,0xA4,0xB6,0x86,0x03,0xB8,0x54,0xEC,0x32,0xD5,0xB2,0xFF, + 0xC7,0x00,0x28,0xDE,0x4A,0xB7,0xF2,0x25,0x98,0x9C,0xED,0xA1,0xC7,0x84,0xBF,0xD3,0xAE,0x20,0xDB,0x5D,0x00,0x4E,0x06,0xDB,0x18,0xBD,0x52,0xE2,0xDB,0xBE,0x4A,0xD2, + 0x12,0x5A,0x07,0x0F,0x2A,0xD9,0x00,0x25,0x1D,0xB3,0x5C,0x6D,0xF2,0x75,0xFD,0x41,0xE3,0x3B,0xCA,0x89,0x5D,0x5D,0x27,0x16,0xEE,0xD6,0xF5,0xD1,0x91,0x29,0x20,0xDC, + 0x2C,0x6A,0xDB,0x0A,0xBC,0xBC,0x91,0x45,0xB6,0x16,0xB6,0xDB,0x04,0xA5,0x53,0x32,0xB7,0x4D,0x75,0xCD,0xDB,0x5F,0x50,0x1F,0x57,0x57,0x33,0xC0,0x49,0x00,0x59,0xE7, + 0x25,0x00,0x15,0xC1,0x06,0x80,0xAE,0x56,0xBA,0x56,0xD1,0x76,0xC1,0x52,0x95,0x91,0x2D,0xCB,0x3C,0xA4,0xAB,0xD7,0x69,0xA3,0x2D,0x00,0x95,0xC5,0xB2,0x8A,0x14,0x62, + 0xAF,0xA9,0x27,0x3A,0x30,0x02,0xDB,0x04,0x39,0x9F,0xFB,0x32,0x8A,0x49,0x06,0x22,0x90,0x32,0x39,0x00,0x4B,0x33,0xA9,0x00,0xEB,0x68,0xD8,0x3C,0x04,0xD4,0x2C,0xD7, + 0x24,0xB7,0x20,0x5D,0x2F,0x2F,0x5D,0x59,0x63,0xB3,0x5C,0xA8,0xDE,0xDF,0x55,0x07,0x24,0x00,0xB5,0xDA,0x05,0xB8,0x05,0xDA,0xA3,0x92,0xDF,0xDB,0x08,0x5D,0x93,0x12, + 0xCA,0x00,0xDB,0x17,0x0B,0x15,0x30,0x2B,0x34,0xD8,0x4D,0x30,0x00,0x61,0xDD,0x41,0xDE,0x5F,0x02,0x7C,0x7D,0x8D,0xF4,0x0C,0xE2,0xB1,0xE1,0xCA,0x00,0xBA,0x56,0xB2, + 0x0F,0x57,0xCD,0x30,0xDE,0x97,0xF8,0x2B,0x1C,0x02,0xAB,0x13,0xF3,0x09,0x53,0x93,0x2C,0xE5,0x0D,0x0F,0x9A,0xF7,0xA8,0xC2,0x12,0x04,0xBD,0xBA,0x84,0xD7,0xD3,0xA2, + 0xAC,0x5E,0x2A,0xDA,0x17,0x4B,0xD4,0xAB,0x13,0xB6,0x2C,0xDB,0x32,0xB4,0x4B,0x45,0x00,0x40,0xDA,0x5D,0x30,0x32,0x49,0xDB,0xD2,0x90,0x77,0xC5,0x48,0x18,0x00,0x8D, + 0xA6,0x00,0xBC,0x00,0x79,0xA0,0xDB,0x08,0xE4,0x77,0xB9,0xB9,0x78,0xDB,0x28,0xDC,0x01,0x35,0x5F,0x20,0x6D,0x0C,0xBD,0xCF,0x05,0xD4,0xAC,0xF7,0x40,0xDC,0x55,0x8B, + 0xC9,0xC3,0xD6,0xDB,0x17,0xB1,0x33,0x06,0xDD,0x85,0x56,0xB4,0x09,0x8B,0x42,0xDB,0x50,0xDC,0xBE,0x14,0x00,0x64,0xB3,0xEE,0x02,0x31,0x5B,0x0A,0x11,0xE6,0x0E,0x80, + 0x49,0x4A,0xB7,0x22,0xFA,0xA4,0xEC,0x5C,0xD9,0x0E,0x3A,0x4B,0xBE,0x2F,0x78,0x00,0x90,0xDB,0x22,0x25,0xA5,0x5D,0x44,0xB7,0x27,0x95,0xEC,0x65,0xB7,0x29,0x25,0x00, + 0xDA,0x09,0x0B,0xB6,0xED,0x56,0xBD,0x92,0x84,0xDF,0xE6,0x2C,0xDB,0x0C,0xAC,0xDB,0x16,0xC5,0xB8,0x40,0x20,0xCD,0x20,0x5E,0x21,0xE6,0x5A,0xDB,0x09,0x82,0xDC,0x8A, + 0xB8,0x96,0x7E,0x03,0x8E,0x16,0xED,0xB7,0xBA,0x53,0x15,0xB9,0xCE,0xB3,0x04,0xB3,0x78,0xB3,0xE9,0x11,0xAA,0x0A,0x95,0x4B,0xC2,0x0B,0xF6,0x7E,0x05,0xE6,0x00,0xFA, + 0x79,0x42,0xDA,0xF9,0x30,0x0D,0x7A,0xA4,0xD2,0x83,0xE6,0xA7,0xC2,0xE4,0xAA,0x0B,0xA5,0x7F,0xAE,0xCE,0x00,0x3A,0x3A,0x6D,0x5E,0xAF,0xAB,0x04,0x07,0x58,0x50,0xDB, + 0x53,0xC8,0xE5,0xB4,0xE1,0x00,0xD4,0x6F,0xC7,0x69,0x8C,0x1E,0xDB,0x1A,0x91,0x60,0xDB,0xD0,0xA0,0xDB,0x21,0xDA,0xAF,0x62,0xB7,0x32,0xA5,0xD7,0xB8,0x60,0x75,0xDB, + 0x52,0x0E,0xCD,0x17,0x17,0x19,0x88,0xC6,0x1A,0x1F,0x1F,0xD7,0x0B,0x13,0xFB,0x4D,0xFB,0x69,0xEB,0x57,0x03,0xC3,0x15,0xFE,0x77,0xFC,0x74,0xBE,0x53,0xBD,0xD4,0x84, + 0xDD,0xD7,0x94,0xE9,0x03,0x01,0x57,0x82,0xDA,0x97,0xD2,0xC8,0x29,0x02,0xF6,0x4E,0xF2,0xB0,0xDC,0xA5,0x15,0x11,0x4D,0x27,0xC8,0x73,0x87,0xDC,0x1E,0xD4,0x01,0xA9, + 0x56,0x0A,0x95,0x7D,0x65,0xAD,0xEA,0x8D,0xD1,0xCD,0xA2,0xDF,0x00,0x07,0x02,0x69,0x92,0x95,0xB3,0x05,0xDB,0xBA,0xCB,0x27,0x7E,0xB8,0xCA,0xC3,0x50,0xD9,0x52,0xB8, + 0x91,0x2D,0xB6,0xED,0x70,0xDB,0xCA,0xB6,0x9E,0xCB,0x13,0xBB,0xE4,0x9F,0xC0,0xDB,0xEB,0x00,0x52,0x81,0x35,0x2B,0x21,0x1F,0x5C,0x01,0x16,0x0C,0x25,0x3A,0xD7,0xD6, + 0xE0,0x13,0xBC,0xCF,0xB7,0x8C,0x49,0x9E,0x35,0xB7,0x4C,0xDB,0x17,0x07,0x2A,0xA6,0x67,0xF1,0xCC,0xA1,0x9A,0x09,0xB9,0xF3,0x8B,0x6D,0x98,0xDD,0x0B,0x2A,0x95,0xB7, + 0x5C,0x03,0x19,0x85,0xBD,0x69,0x86,0x5C,0x49,0x46,0xF5,0x09,0x0B,0x49,0xF8,0x7C,0x6C,0x00,0xB5,0xFD,0x15,0x00,0x21,0xB9,0x27,0x63,0xDB,0x0E,0x09,0x24,0xDB,0x16, + 0x85,0xDB,0x09,0xB6,0x01,0xDB,0xB4,0x28,0xDB,0x21,0xAF,0x60,0xDB,0x50,0xAF,0xDB,0x57,0xBD,0x30,0x5E,0xDB,0x6E,0x35,0xCF,0x1F,0x0B,0x19,0x0C,0x10,0x3A,0x00,0x90, + 0xDB,0x17,0x13,0xE7,0x92,0x8F,0xDF,0x05,0x73,0x06,0xBC,0x84,0xA9,0x9A,0x2A,0xA7,0x58,0xB9,0x5A,0xD9,0xDE,0x12,0x86,0x4A,0x39,0x1B,0xE7,0x00,0x87,0x9E,0x16,0xE5, + 0x24,0xEE,0xA9,0x56,0xE0,0x64,0x45,0x09,0xE3,0xAF,0xFC,0x62,0x66,0x6B,0xF3,0xA0,0x12,0xD7,0x19,0x03,0x49,0x32,0x4F,0xC7,0x86,0xD2,0x01,0x65,0xFB,0x01,0x00,0xC2, + 0xEB,0xC4,0xEB,0xDA,0x05,0x85,0xBD,0xC7,0x86,0xDB,0xC9,0xF4,0xDB,0x14,0xEE,0xA2,0xC4,0xAF,0x22,0x14,0xDB,0x04,0x5B,0xA0,0xDB,0x75,0xC3,0xDB,0xDC,0x0D,0x94,0x06, + 0x1F,0x67,0x19,0xDF,0x00,0x1F,0x34,0x25,0x25,0x33,0xB8,0xB7,0xC3,0xDE,0xE3,0x65,0x2A,0x1D,0xBC,0x24,0x97,0xA5,0xC0,0x59,0x8C,0x3E,0xF5,0xCD,0x00,0x5F,0xE1,0xC8, + 0x0E,0x98,0x96,0xDE,0x1F,0x0B,0x29,0x65,0xD4,0x73,0x17,0x54,0xEC,0x44,0x99,0xF4,0x00,0xAA,0x57,0x47,0x24,0x0E,0xBB,0xBC,0x65,0xB4,0xE5,0x66,0xB4,0x16,0xB7,0x52, + 0xCE,0xA3,0x07,0x32,0x0C,0x1D,0x1D,0x1A,0x2F,0xB9,0xA6,0x00,0xB2,0xB6,0xB2,0xC0,0xB0,0xDA,0x8C,0xDB,0x0B,0xCA,0x71,0xC4,0x97,0x24,0x09,0x81,0xDB,0x0D,0x4C,0x38, + 0xDB,0x30,0x20,0x00,0x81,0x5F,0x0B,0x2B,0x24,0x15,0x01,0xDB,0x0B,0xF5,0x5C,0x00,0x3A,0xB3,0xE1,0xC3,0x0A,0x60,0x82,0x13,0x99,0x9B,0x12,0x04,0x9C,0xD1,0xB2,0x03, + 0x85,0xDC,0xAF,0xF6,0x01,0x28,0xF1,0x44,0x85,0xF6,0x84,0xC8,0xC1,0xD2,0x11,0xD3,0x96,0x86,0x92,0x50,0x46,0xA1,0xF5,0x04,0x55,0x47,0x96,0x2A,0xEB,0xB6,0x5C,0xDE, + 0x9A,0x00,0x40,0xDA,0x90,0xE3,0x18,0x1A,0xDB,0x25,0x2E,0xDB,0x05,0x5D,0x50,0x00,0xDC,0x5A,0xF1,0xAC,0x29,0xDA,0x14,0x79,0x00,0xB8,0x2D,0x6C,0xB6,0xCA,0xCB,0xB4, + 0xB9,0xDB,0x01,0xE2,0x97,0x9F,0x0C,0x02,0xDB,0xC5,0xEC,0x84,0x52,0x6D,0x35,0x52,0x20,0xF1,0xCF,0x00,0x0B,0x1A,0xC4,0x8A,0x34,0x34,0xA3,0xFA,0xAE,0x30,0x25,0x8E, + 0xB3,0x25,0xAB,0x83,0xB0,0xDD,0x5B,0x03,0x86,0xDB,0xD1,0xC8,0xB9,0x51,0x41,0xC5,0x6F,0xAA,0x5B,0x80,0x6F,0xBE,0x2A,0xAB,0x5D,0x1A,0x75,0xA5,0xD5,0x0E,0x05,0xFC, + 0xF4,0xD3,0x9D,0xD8,0x08,0xD1,0x2B,0x33,0x02,0x07,0xE5,0x08,0x00,0x48,0x13,0xDC,0xDC,0x6C,0x81,0xD8,0xC5,0x74,0x00,0xDB,0x32,0x1A,0x1A,0x44,0x32,0x07,0xDB,0x04, + 0xA0,0x96,0x93,0x93,0x8D,0xCA,0xB7,0x60,0xDA,0x18,0x79,0xB6,0x6C,0xDC,0x59,0xB7,0x58,0xDB,0x04,0xDA,0xA8,0x9A,0x1B,0x26,0xDB,0x02,0x1B,0x53,0x98,0x60,0xDB,0x00, + 0x5E,0x52,0x5E,0x6D,0x35,0x21,0x54,0x0B,0xF0,0x51,0xDB,0xFA,0x00,0x03,0xDA,0x00,0x3A,0x16,0xDE,0xDE,0x16,0x8E,0x4B,0x04,0xCD,0x78,0xE1,0xCA,0xD4,0x6B,0x0A,0xB4, + 0x59,0xCA,0xA1,0x45,0xF5,0x59,0x8B,0xB5,0x6A,0x05,0x8B,0x12,0x95,0x8D,0x2E,0x00,0x74,0x89,0x96,0x31,0xC6,0x92,0x92,0x3F,0x39,0x4C,0x94,0xA4,0xAF,0x1E,0x9C,0xDB, + 0x2E,0x00,0xC2,0xDA,0x70,0xDB,0xB0,0xDC,0x92,0xAC,0x69,0xEE,0x7C,0xDC,0x4C,0x5D,0x92,0x94,0xF1,0xA3,0x93,0x9E,0x9E,0x90,0x44,0x9E,0xC1,0xDA,0x28,0xDB,0x76,0x81, + 0xB4,0xAC,0xDE,0xDC,0xCA,0xB7,0x5B,0x85,0x41,0xDB,0x22,0x61,0xDB,0xA0,0x94,0x6B,0xD6,0x52,0xAF,0x00,0xC0,0x85,0x15,0x15,0x10,0x82,0xD9,0x5C,0xC1,0xDB,0x2A,0x20, + 0xDB,0x16,0x3A,0x1E,0x9D,0x1F,0x04,0x83,0x37,0xB7,0x52,0xC4,0xE9,0x89,0x83,0xCE,0x04,0xDB,0x14,0xBA,0xFC,0x1D,0xAD,0x89,0x2A,0xE7,0xEB,0xF6,0xBC,0xE3,0x8D,0x9E, + 0x34,0xE5,0xD9,0xF8,0x65,0xF0,0xA5,0x23,0x0A,0xE0,0x5F,0x5A,0xAA,0x29,0xC2,0xD9,0xDE,0xC7,0x28,0xDB,0x24,0xDC,0x09,0xAF,0x87,0xA7,0x9B,0xB1,0x29,0x67,0xAB,0xB4, + 0x21,0x9E,0x43,0x58,0x55,0xFE,0x30,0xDA,0x60,0xDB,0x91,0x90,0xDB,0x32,0xB6,0xA9,0xA6,0x08,0xCF,0xA5,0x5B,0x0D,0x4C,0xDB,0x01,0x7A,0x22,0x97,0xD8,0xCF,0x27,0xBC, + 0x64,0xB8,0x6D,0xD6,0xF0,0x47,0xD0,0x72,0x01,0xAA,0x1F,0xA7,0xC7,0x92,0xAF,0x42,0x19,0x16,0xB3,0x2A,0xC1,0xD0,0x03,0xA7,0x9F,0xBC,0x9C,0x0A,0x8B,0xC2,0x65,0xB8, + 0x7F,0xCF,0x39,0xB9,0x7A,0x00,0xBE,0xCB,0x8A,0x35,0x02,0x28,0xCE,0x4F,0xBB,0x7F,0x0D,0x26,0xDB,0x34,0xB5,0xD5,0x07,0xA4,0x93,0xB7,0xDE,0xDF,0x5C,0x9A,0xD3,0xC1, + 0xD8,0xDD,0x48,0xE6,0xB8,0xDE,0x2D,0x5C,0x00,0x32,0x6F,0xCC,0x7D,0xB8,0x65,0xB4,0x64,0xB5,0x5D,0xBA,0x05,0x8E,0x4C,0xDA,0x04,0x41,0x41,0x58,0xA9,0x90,0x4F,0xC9, + 0x44,0xB4,0x6C,0x2D,0xA0,0xE4,0x92,0x16,0xB9,0xEE,0xB8,0xDB,0x21,0x7A,0x50,0xDB,0x2C,0x9A,0xD8,0xB7,0xBC,0xE1,0xD3,0x93,0xF1,0x55,0x20,0xDB,0x88,0x5F,0x87,0xBB, + 0xBB,0x25,0x3A,0xB8,0xD3,0xB3,0x8E,0x8E,0xE5,0xB2,0x1E,0x77,0x82,0x95,0xB7,0x05,0xDB,0xD4,0xBA,0xAF,0x98,0xAC,0xC7,0xEF,0xBD,0x2F,0xF0,0xD8,0xDA,0x4E,0xB7,0x56, + 0x8A,0x35,0x00,0x32,0x8E,0x4B,0x0C,0x61,0xDB,0xD5,0x0B,0x06,0x97,0xB6,0x00,0x65,0xB7,0x94,0xC4,0xA1,0xE3,0x95,0xB4,0x15,0xB7,0xCD,0xA8,0x04,0xDB,0xAF,0xCE,0x64, + 0xBA,0x2F,0xBF,0x00,0xBE,0xAC,0xDB,0x28,0xD9,0x27,0xDB,0x01,0x58,0x79,0x4A,0x20,0xDB,0x24,0x91,0xEE,0x55,0xA3,0xAE,0xEE,0x92,0x82,0xA8,0xAF,0x4C,0x15,0xDB,0x01, + 0x24,0xAC,0xA5,0x41,0xDB,0x65,0xB8,0x60,0xDB,0x20,0xB0,0xDB,0x53,0x5F,0xD1,0x8D,0x1F,0x10,0x10,0xD0,0xC6,0x25,0x16,0x16,0xDB,0x0C,0xB3,0x8D,0x16,0x0A,0x8D,0xE2, + 0x39,0xB3,0xE5,0x93,0x95,0xED,0x39,0x8D,0xF4,0x09,0x2B,0xAE,0xDD,0x0D,0xA7,0xAB,0x0D,0x2D,0xF7,0x76,0x00,0xF5,0x17,0x93,0xB2,0xB4,0x9B,0xA9,0x90,0xA6,0x0D,0x1E, + 0xBE,0x79,0x82,0xDB,0x82,0xD1,0xFB,0x03,0x04,0xDB,0x0A,0xB2,0x29,0x6D,0x84,0x5C,0x77,0x03,0x89,0x6A,0x49,0xDE,0x0B,0xDB,0x0C,0xC2,0xB2,0x03,0x46,0x6E,0xF5,0x00, + 0xEC,0x59,0x58,0x00,0x41,0x4A,0x40,0xDB,0x79,0x18,0x3D,0x91,0x91,0xD9,0x49,0xA5,0x32,0x00,0xDB,0xD8,0x98,0x53,0x85,0x14,0xEF,0x08,0x24,0x0B,0xC1,0x82,0xE2,0xC5, + 0xB8,0x2B,0xF0,0x55,0x20,0x05,0x00,0x35,0xCD,0xCD,0x17,0x70,0xC5,0x01,0x0C,0x16,0x30,0x0C,0x25,0xDE,0x32,0x0C,0x8E,0xAD,0x5C,0x33,0x9C,0xA8,0x04,0xF8,0x70,0xC0, + 0xB5,0xD7,0xA0,0xBC,0xAA,0x03,0x09,0xB0,0xDB,0x9D,0xB1,0xFE,0x0D,0x0E,0xC2,0xF6,0xEA,0xE0,0xE6,0x10,0xE8,0x59,0x79,0xA1,0x1E,0x22,0x94,0x76,0x02,0xAC,0x55,0xF2, + 0x5C,0x06,0xBB,0xBC,0x75,0x0A,0x00,0x26,0xDD,0x72,0x01,0xD3,0x00,0xC3,0xF4,0x01,0xC6,0xF3,0x95,0xB7,0x84,0xD9,0xE0,0xDB,0x4A,0xD4,0x00,0x41,0xB7,0x4B,0x79,0xDB, + 0x0E,0x80,0xCB,0xA0,0xA0,0xA5,0x9D,0xEE,0x5A,0xDA,0xEE,0x88,0x97,0x22,0x07,0x4C,0xDB,0x1D,0x07,0x84,0x96,0x97,0xD7,0xDB,0x16,0xB7,0x56,0xEF,0xAA,0x20,0x04,0x63, + 0x35,0x00,0x19,0x21,0x0C,0x00,0x68,0x34,0x97,0x34,0x60,0x16,0xDB,0x4B,0x58,0x33,0xAE,0x50,0xA1,0x55,0x06,0xAA,0xB5,0x39,0xA5,0x00,0xCC,0x08,0x97,0xBF,0xB4,0x13, + 0x2A,0xAB,0xD2,0xDC,0x00,0x98,0xCF,0x00,0x69,0x8B,0x54,0x06,0xCD,0x13,0x65,0xD0,0xCD,0xAA,0x83,0xDB,0x5C,0xD0,0x69,0x02,0xDC,0x5E,0xB6,0x8A,0xDB,0x0C,0xD8,0x24, + 0xA2,0x97,0x49,0x03,0x38,0xDB,0x54,0x04,0xA0,0xDA,0x79,0x95,0xCA,0xD4,0x3D,0x90,0x94,0xDB,0x17,0xA5,0x38,0xDB,0x35,0xCF,0xEE,0xFA,0xBA,0x15,0xDB,0x0E,0x84,0xD6, + 0xAC,0xDB,0x15,0xA9,0x34,0xF0,0xB2,0x02,0xDB,0x35,0x82,0xDB,0xB0,0xE8,0x19,0x0B,0xD2,0x95,0x9D,0xCC,0x25,0x4C,0x00,0x4B,0xC3,0x2D,0x9F,0xEC,0xA6,0x13,0x39,0x58, + 0x00,0xE0,0x4B,0xEC,0x5D,0x00,0x94,0xBC,0xC1,0xDB,0x56,0x04,0x8F,0x91,0xA0,0xDB,0x2A,0xF0,0x05,0xCA,0x98,0xDC,0x17,0x33,0x00,0x7A,0x0D,0x88,0x6D,0xD1,0x69,0x94, + 0x65,0xB6,0x38,0xDB,0x52,0x93,0x59,0xB3,0x58,0xD5,0x50,0xDB,0x14,0x2D,0x46,0x05,0x46,0x4D,0x9E,0x00,0x61,0xDB,0x4F,0xC7,0x2C,0xA4,0xFA,0x00,0xEF,0xC9,0xB8,0xDB, + 0xCA,0xA8,0xE6,0xDB,0x3C,0xDE,0x85,0x40,0xDB,0x4F,0x22,0x5C,0xAC,0xA8,0xCF,0x85,0x76,0xBC,0x47,0x17,0x17,0x89,0x6A,0x2B,0xDB,0x0B,0xDA,0x0D,0x00,0x34,0x60,0xDB, + 0x2A,0xBE,0xBA,0xC0,0xB9,0x4B,0x4B,0x88,0xD8,0x09,0x82,0xDB,0x42,0xCA,0xEE,0x19,0x11,0x6E,0x1D,0x0D,0x2E,0x00,0xEB,0xFA,0x11,0x92,0xED,0xA4,0xFE,0xA9,0xC1,0xDB, + 0x0A,0x5A,0xBC,0x16,0x4A,0x3A,0xFC,0xAB,0x5C,0x86,0xBA,0x04,0xA9,0xA6,0xBE,0xB0,0xC3,0xD9,0x01,0xC0,0xD3,0x46,0x2D,0xF0,0x00,0x04,0x46,0x8C,0x8C,0x9E,0xAA,0x02, + 0x00,0x91,0xEA,0x6D,0xEB,0x52,0x3D,0x02,0xDC,0xA0,0xD3,0x92,0xB5,0x25,0xB9,0x58,0x81,0xE2,0xAF,0x5B,0x42,0x07,0xE0,0xDB,0xC1,0xB0,0xDB,0x99,0xF0,0x7E,0xBF,0xED, + 0x89,0x81,0x4E,0xCC,0x0C,0x61,0x2B,0xDC,0x49,0x92,0xE3,0x7B,0xDC,0xB9,0xD0,0x25,0x3A,0x41,0xBC,0x49,0x94,0x4F,0xCE,0x85,0xE6,0x05,0xC0,0x84,0xC2,0xE1,0xDC,0xF7, + 0x18,0x02,0x8F,0x64,0xB3,0xB3,0xA1,0xDB,0xF6,0x06,0x11,0x94,0x92,0x4D,0xAD,0x3E,0x00,0x33,0x0E,0x11,0x57,0xC0,0x90,0xD4,0x30,0xE0,0x4A,0x0A,0xF2,0xB1,0x41,0xDB, + 0x84,0xDC,0xCA,0x00,0x1A,0xD9,0x0A,0xDB,0x0B,0xB8,0x20,0x2D,0x2E,0x1D,0xAB,0x50,0x64,0xDC,0x30,0x43,0xD9,0x90,0xDB,0x25,0xC6,0x7A,0x8E,0x49,0x81,0xDB,0x6C,0x69, + 0x92,0x45,0xB7,0xBD,0xC9,0x03,0xDB,0x4C,0xC5,0x04,0x00,0x29,0x00,0xAB,0xF0,0x98,0xCC,0x77,0x99,0x00,0x85,0xDB,0x26,0x95,0x91,0x8A,0x6D,0x88,0xB0,0xCD,0x35,0x6D, + 0x5F,0x1B,0x2B,0x15,0x0B,0xCB,0x8B,0x3A,0x5C,0x0A,0xDB,0x0D,0x02,0x8E,0xE3,0xE6,0x4B,0xD9,0x3A,0xC1,0x0D,0x02,0x8E,0x41,0xC5,0xD0,0x04,0xC2,0x30,0x06,0xB5,0xB0, + 0xD1,0xB0,0xCB,0xA9,0xB5,0xAF,0x0B,0x27,0x0E,0xC2,0xDF,0xDF,0xD1,0xC5,0x05,0x03,0x3D,0xE3,0x55,0x17,0x1D,0x05,0xD9,0xA6,0xA6,0x12,0x3A,0xDA,0xB7,0xE6,0xAA,0xDA, + 0x8D,0xB3,0x05,0x0E,0x10,0x15,0xBD,0x1B,0xA5,0xF9,0x83,0xD7,0xCC,0x00,0x67,0x67,0x1C,0x32,0x30,0x1C,0x1A,0xD8,0x18,0x32,0x2E,0xAB,0xD7,0x28,0x64,0x03,0x2D,0x6E, + 0x12,0x5D,0x8C,0x43,0x12,0xB5,0x41,0x83,0xDB,0x03,0x9C,0xDB,0x29,0x91,0x32,0xB5,0x94,0xDC,0x28,0xDA,0x1A,0xA8,0xEE,0x90,0x08,0x08,0xA4,0xA7,0x96,0x00,0x1B,0xCC, + 0xF2,0x5C,0x84,0x81,0xDB,0x79,0xE4,0xA9,0xF0,0x20,0x17,0x40,0xDB,0x10,0xC1,0xDB,0x1F,0x82,0x82,0x0C,0x80,0xDB,0x8E,0xDE,0xAB,0x8B,0xC1,0xB5,0x4B,0x49,0x9E,0x57, + 0x97,0x82,0xC1,0xB3,0xB2,0x03,0xB5,0xA0,0xBA,0x48,0x25,0xBC,0xFF,0x04,0x1A,0xF9,0x18,0x20,0xB7,0x30,0x2A,0xC0,0xEE,0x0B,0xD2,0x68,0xDB,0x28,0xD4,0x2A,0x10,0x74, + 0xA2,0x91,0x8C,0x2A,0xAE,0x6A,0x8C,0xEC,0xC7,0x94,0x03,0xDB,0x15,0xAC,0x15,0xC7,0xB3,0x80,0xDB,0x1C,0x67,0x1D,0x61,0x1D,0xD9,0xE8,0x01,0x97,0x2E,0x0B,0x2E,0x64, + 0x43,0x64,0x00,0xDD,0xC3,0x5D,0xA4,0x91,0x8A,0xED,0x41,0xF2,0xD9,0xD6,0xF0,0x70,0xDB,0xB2,0xB6,0x88,0xDB,0x00,0xB7,0x9A,0x24,0x02,0x42,0x02,0x61,0xDB,0xDD,0x98, + 0x3E,0xCC,0x94,0x96,0xDB,0x02,0x75,0xEB,0x6B,0x97,0xEC,0xB8,0x2B,0xAD,0x9D,0xCC,0xE8,0xDB,0x29,0xF0,0x70,0xDB,0xEF,0x85,0xCC,0x0A,0xDB,0x02,0xEA,0xDE,0x83,0xDC, + 0xCA,0x06,0x0C,0x9C,0x58,0xF1,0x5A,0xDA,0xAD,0xB3,0xD9,0x69,0x9E,0x2E,0xF7,0x24,0xDB,0x0C,0xC7,0x12,0x25,0x85,0xDB,0xAA,0xF0,0x04,0xC3,0xF7,0x12,0xA8,0x89,0xC2, + 0xCF,0x50,0xFB,0xE4,0x00,0xDB,0x07,0x03,0x03,0x7F,0x2B,0x00,0x35,0xB7,0xC8,0xAB,0x07,0x1F,0x13,0x22,0x20,0xDD,0x6A,0xEC,0x1A,0x0A,0x0B,0x19,0x1D,0x2E,0xDA,0x0C, + 0xBF,0xB2,0xC0,0xA4,0x8C,0xD5,0xEC,0x64,0x45,0x05,0x6E,0x2F,0xAA,0xED,0x8C,0xC3,0xDB,0x00,0xB9,0xA8,0x48,0x4A,0x91,0x8A,0x6C,0x00,0xB5,0xF0,0x94,0xDB,0x04,0xA5, + 0x5B,0x0D,0x2A,0xDB,0x19,0xB7,0x53,0xCC,0x85,0x8F,0xCA,0xE6,0x76,0x80,0xDB,0xEB,0x5E,0x81,0xBC,0xE1,0xD2,0x93,0xE5,0xA9,0x15,0xBB,0xCC,0x0C,0x7D,0xC8,0xB6,0x15, + 0x8E,0xB0,0xDB,0x61,0xEB,0xDC,0xE9,0x06,0x8A,0xBB,0x00,0x16,0x13,0xEF,0x59,0x9E,0xD5,0x47,0xA7,0x55,0x2A,0x0E,0x48,0x10,0xA0,0x9A,0x04,0x4B,0x52,0xAA,0xE8,0x0F, + 0xE5,0xB2,0xE4,0xE8,0x05,0xDC,0x28,0xD5,0xAA,0x07,0xAC,0x00,0xBE,0xAE,0x0A,0xA9,0xFD,0x1E,0x51,0xA5,0x84,0xDA,0x50,0xDB,0x0B,0x1C,0x0B,0x1C,0xEF,0x5D,0xE8,0x56, + 0x64,0xE8,0xB3,0xE0,0x00,0xD8,0x43,0x69,0x43,0x8C,0x45,0xB5,0x41,0xDC,0x61,0xDB,0x69,0x96,0x30,0xDA,0x58,0xDB,0x30,0xD0,0xDB,0x6B,0xA8,0xEE,0x0A,0x74,0xB9,0x8E, + 0xCD,0x24,0x29,0x5B,0x82,0x94,0x1D,0x76,0x00,0x02,0xDB,0x52,0x40,0xDA,0x90,0xDB,0x37,0xCC,0x93,0xBE,0xB7,0xD5,0xA0,0xDB,0x4A,0x16,0xDB,0x18,0xE2,0x52,0x9B,0x69, + 0xA8,0xC4,0x00,0xBE,0xCF,0xC7,0x16,0xF9,0x75,0x0E,0x49,0x93,0xF6,0x00,0x0E,0xF1,0xB4,0xF3,0xB6,0xC2,0x14,0xD9,0x1B,0xA7,0x52,0xC5,0x5A,0x21,0x4B,0x70,0xDD,0x92, + 0x08,0x92,0x41,0x1F,0x61,0x00,0xDB,0x76,0x05,0xDB,0x17,0xA1,0x2A,0x1C,0x90,0x4A,0xB6,0x2A,0xB0,0x28,0x90,0xDB,0xC8,0xB6,0x51,0xE9,0x60,0x51,0xD8,0x9E,0xB0,0xDC, + 0x98,0xB6,0xB0,0xDB,0xFA,0xBA,0x42,0xB6,0xAC,0xDF,0xC3,0xDB,0x92,0x41,0x98,0x53,0x08,0x0A,0xAA,0xEF,0x02,0xDC,0xCC,0x82,0xCC,0x58,0xCA,0xDB,0x2F,0x75,0xE2,0x26, + 0xDB,0x05,0x2B,0x1A,0x00,0x21,0x15,0x00,0x34,0x42,0xB7,0xC1,0xA3,0x6D,0x61,0xD6,0x38,0xDB,0x59,0xB9,0x2C,0xB3,0xCA,0x12,0x0A,0x4C,0xA5,0xA1,0xAF,0x85,0xDB,0x01, + 0xC7,0x33,0x39,0x5B,0x08,0x8C,0x74,0x23,0xBA,0xF6,0xDA,0x1F,0x3B,0x13,0x4B,0xDE,0x2E,0xA5,0xD8,0xD3,0x77,0x06,0x3F,0xA5,0x00,0x10,0xDC,0x0C,0xD5,0x25,0x05,0xBA, + 0xFE,0xC2,0xD7,0x9D,0xC8,0x54,0xA4,0x98,0x81,0xD8,0x82,0xDE,0x49,0x40,0xD9,0xC5,0x02,0x51,0xEC,0x95,0x04,0xDB,0x8F,0xC9,0x85,0xDA,0xE1,0x00,0xDA,0xC8,0x00,0xB6, + 0x4C,0xA3,0xB6,0x8A,0xDF,0xDA,0xDD,0xCD,0xCA,0xD0,0x4F,0xA5,0x83,0x87,0x02,0x08,0x12,0x4F,0xA8,0x25,0xD8,0xD7,0x2A,0xF0,0x76,0x57,0xCC,0xB5,0xEE,0xB2,0xB7,0xD4, + 0x00,0x5F,0xDC,0x0A,0x25,0xDB,0x0A,0xB4,0x06,0x16,0x05,0x8E,0xED,0x02,0x00,0x25,0x61,0xBC,0x41,0xA7,0x72,0x95,0x4B,0xB5,0xEA,0x90,0x95,0xBA,0x0C,0xB0,0x4E,0x16, + 0xAE,0xAD,0x9F,0xEC,0x24,0xD2,0x37,0x33,0x07,0xDC,0x07,0x4B,0x2A,0x0A,0x13,0xA6,0xB4,0xD5,0x09,0x34,0x39,0xAE,0x00,0x34,0x00,0xB5,0xBE,0x1F,0x4C,0xCE,0x5C,0x98, + 0xE1,0x17,0x26,0xFD,0x57,0x00,0xBE,0xD0,0xDF,0x17,0xB2,0xD2,0x00,0xE0,0x8C,0x41,0x95,0xD3,0x94,0xB7,0x26,0x95,0x92,0x9C,0x09,0x97,0x82,0x20,0xDA,0x5C,0x00,0xA5, + 0xB7,0x79,0xDD,0x6A,0xEE,0x00,0x85,0x80,0xDB,0x1B,0x12,0x09,0x07,0x53,0x97,0xD8,0x13,0x94,0xBD,0xEB,0xDB,0x0E,0x00,0x40,0xDB,0xE5,0xA8,0x17,0xD1,0x93,0x15,0x21, + 0xCD,0x91,0x06,0xDB,0x94,0x0A,0x10,0xA8,0x05,0x21,0x05,0xDC,0x06,0xA2,0xCA,0x15,0x91,0x79,0x97,0x78,0x13,0xA9,0x61,0xDB,0x2C,0x81,0xDC,0xA4,0xC8,0x8B,0xD8,0xF0, + 0x7B,0x83,0xD9,0x08,0xF3,0x5D,0xF3,0x64,0xF3,0x0C,0x5E,0x01,0x9C,0xD8,0xDB,0x2B,0x15,0x39,0x10,0xAB,0x39,0xDB,0x0C,0x4E,0x10,0x17,0xBF,0x9B,0xB9,0xA6,0x9C,0xDB, + 0x2A,0x06,0x89,0xB8,0x0B,0x95,0xB6,0x77,0xBB,0xBC,0xC5,0x49,0x6E,0x80,0xDB,0x43,0xE9,0xE9,0x64,0x6E,0xB1,0xE9,0x60,0x4A,0xDB,0x43,0x98,0xDB,0x12,0x91,0x05,0xDA, + 0xDA,0x83,0xE4,0x81,0xDB,0xBD,0x41,0xDB,0xAB,0xEE,0x5B,0xEE,0x58,0x50,0xDA,0x24,0xF1,0x0D,0xCC,0xD2,0xAF,0xCE,0xA9,0xB7,0x5D,0x00,0x75,0xBF,0x83,0xDC,0x52,0xC1, + 0xE7,0x19,0xC3,0xCD,0x0C,0xCA,0xF2,0xB7,0xDD,0xD5,0x0C,0x41,0x90,0x63,0xFA,0x44,0x00,0x2B,0x0C,0xA4,0x8E,0x09,0xB3,0xE8,0xBE,0x95,0xD1,0x86,0x1E,0xE5,0xCF,0x54, + 0x13,0xCA,0x96,0x6D,0x2B,0xFC,0x16,0x00,0x0C,0xA3,0xF2,0xB3,0xFF,0xF9,0x36,0xE7,0xF0,0x0D,0xFA,0xB2,0xF7,0xEA,0x13,0x17,0xA8,0x20,0xD9,0x29,0x53,0x17,0x60,0xDC, + 0x1F,0xB2,0xB7,0xC2,0xCF,0xB5,0x07,0x00,0x1A,0xA9,0xEF,0x1C,0x2E,0x4A,0xF2,0x2D,0xB5,0xEE,0x1B,0x2F,0x6E,0x6E,0xC5,0xE5,0xB2,0xAA,0xEB,0x41,0xF9,0xB8,0x41,0xDA, + 0x00,0xEC,0xD2,0x8C,0x51,0xB8,0x5D,0x81,0x94,0x77,0x77,0xC9,0xFA,0xEE,0xAD,0xE6,0xEE,0x42,0x22,0x08,0x31,0x12,0x14,0xDB,0x04,0x08,0xC0,0xDB,0xCA,0x4D,0xC5,0xE1, + 0x95,0x00,0x6B,0xF1,0x9F,0x04,0x17,0x5F,0x00,0x75,0x61,0xDB,0x61,0x90,0x84,0x8F,0xA0,0xB4,0x16,0xB3,0xF5,0xF3,0x97,0xD7,0xCA,0xD4,0xEB,0xA7,0x76,0x33,0x08,0x03, + 0xA5,0xC7,0xB0,0xDB,0xC9,0x00,0x2B,0x16,0xBC,0x00,0x35,0xDA,0x3B,0x00,0xA2,0x2A,0x2C,0x7A,0x10,0x09,0x1D,0x2B,0x60,0xDB,0x4A,0x16,0xDB,0x07,0x15,0xCD,0x5C,0x20, + 0xDB,0x2E,0x0B,0x00,0xE6,0xA0,0x60,0xDB,0xB9,0xA9,0xB9,0x00,0x40,0xDB,0x95,0x95,0xC1,0xDB,0x58,0x41,0xDB,0xD4,0xFE,0x50,0xDB,0x5A,0x91,0x61,0xDB,0x49,0x91,0xAD, + 0xEE,0x80,0xDB,0x97,0x22,0x07,0x85,0x82,0xDB,0xC9,0x00,0x24,0xC1,0xC3,0xDB,0x00,0xB0,0xDB,0x50,0x6D,0xDB,0x14,0x5E,0x20,0xDA,0x36,0xDB,0x0B,0x21,0x8A,0x4B,0xDB, + 0x0B,0xDC,0x0D,0x04,0x25,0x5E,0xF1,0x4B,0xB7,0xA9,0xC2,0xB9,0xDE,0xB3,0xAB,0xE1,0xB2,0xCB,0xB1,0x7E,0x0E,0xD2,0x93,0x49,0x9A,0xB7,0x26,0x16,0x1F,0x7D,0x21,0x03, + 0x05,0xDB,0x0E,0x89,0xF8,0x15,0xED,0x3F,0x14,0x0A,0x68,0x9A,0x34,0xA2,0x06,0x15,0x67,0x50,0xDB,0xFC,0x00,0xD6,0xD8,0x00,0x0B,0xD1,0x4E,0xDD,0x14,0xD2,0xEB,0x2D, + 0xBB,0xEB,0xED,0x59,0x41,0xDB,0x41,0xE2,0xDE,0x85,0x20,0xDB,0x12,0x6C,0x3D,0xCA,0x85,0xDA,0xE6,0xDC,0x92,0x92,0x3E,0xCA,0xFC,0x70,0xA8,0xD7,0x5E,0xF4,0x35,0x7A, + 0xF0,0x11,0xA5,0xD7,0xCF,0x20,0xDB,0x52,0xB4,0x93,0xC8,0xB7,0x17,0x35,0xA0,0xDC,0x4A,0x21,0xDB,0x09,0x0C,0x75,0x00,0xA7,0xA0,0xDB,0xCB,0xB1,0x00,0x4A,0x33,0xA3, + 0x96,0xB9,0x5E,0xA8,0x0B,0xEA,0xEA,0x8E,0xEB,0x05,0x16,0xBF,0xE2,0x04,0x71,0x2C,0x21,0xDB,0xD8,0x18,0xCF,0x13,0x2B,0x6D,0x7C,0x43,0x0B,0x06,0x81,0xDB,0x87,0xDA, + 0xE2,0x74,0xDB,0x0C,0x3A,0xCE,0x1E,0x19,0x61,0xDC,0x16,0xD3,0x17,0xA8,0x29,0x54,0x03,0xDB,0x85,0xB5,0x51,0xAA,0xED,0x51,0x82,0xDB,0x91,0x8D,0x58,0x4B,0x00,0x4A, + 0xB8,0xE5,0x91,0x86,0xDB,0xB4,0x4B,0x91,0xD9,0x05,0xA0,0xDF,0x80,0xA5,0x2A,0xDA,0xEE,0x54,0x24,0x2C,0xEE,0xAB,0x00,0xD1,0xE0,0x02,0x22,0x9A,0xAF,0x65,0xD7,0xB8, + 0x87,0xDB,0x00,0x4F,0xCD,0x60,0xDA,0x20,0x50,0x6D,0xDB,0x1F,0x2B,0x20,0x03,0x78,0x86,0x86,0x90,0xFE,0xE8,0x73,0x04,0x98,0x00,0x3A,0x13,0xD7,0x50,0xE2,0x76,0x08, + 0xD9,0x15,0x03,0x90,0xB7,0x16,0xEA,0xEB,0x25,0x8E,0x3A,0xAB,0x99,0x82,0xDB,0x92,0xC0,0x92,0x8E,0xEA,0xF7,0x86,0x84,0x50,0xDB,0x55,0x2B,0x05,0xD4,0x3E,0x48,0x85, + 0xB8,0xA5,0x58,0x01,0xE6,0x5C,0xDB,0x28,0xC3,0x70,0xDC,0x4A,0x32,0xDC,0x0C,0x54,0xBB,0x96,0x2E,0xDB,0x0D,0x43,0x95,0x16,0x43,0xDB,0x18,0xD8,0x47,0x06,0xDB,0xDC, + 0x12,0x05,0xDA,0xA5,0x92,0x06,0xDB,0xCA,0xFA,0xEE,0xDF,0xB9,0x10,0x08,0x02,0xB8,0xDB,0x68,0x94,0x5B,0x50,0x98,0xDB,0x26,0x99,0xDB,0x05,0x81,0x86,0xDB,0x93,0x9C, + 0xAA,0xD8,0xDB,0x65,0xBD,0x86,0x8D,0x90,0xA8,0x01,0x80,0xDB,0x6E,0x21,0xA5,0x3A,0x61,0x10,0xF0,0x25,0xDD,0x59,0xBB,0x50,0xD4,0x28,0x8E,0xB7,0x93,0x25,0xCB,0x00, + 0xED,0x55,0x05,0x57,0x2B,0x08,0x69,0x93,0x40,0xCA,0x35,0xB0,0xDB,0xA0,0xF2,0x94,0xDB,0x1D,0x10,0x09,0xAD,0xE6,0x3E,0xBF,0xCB,0xF9,0x99,0xE5,0x6E,0xCD,0x67,0x94, + 0xAF,0x9D,0xBE,0xCD,0xA7,0x86,0xDB,0xD7,0x1D,0x02,0x84,0xDB,0xA1,0xD8,0x41,0xDA,0x60,0xDB,0x95,0x50,0x3D,0xDA,0x4A,0xB6,0x57,0xB7,0xD2,0x83,0xDB,0xAF,0xEE,0x52, + 0x31,0x07,0x16,0xDB,0x05,0x7A,0x93,0x15,0x1B,0x4C,0x5C,0x85,0x49,0xB7,0x14,0x5E,0x6D,0xDB,0x15,0xAC,0x35,0xCF,0x19,0x86,0x44,0x16,0xB7,0x9F,0x05,0x01,0x1F,0x1F, + 0xE5,0x0F,0xF6,0x10,0x11,0x9A,0x52,0x4F,0xB5,0xCE,0x9C,0x17,0x78,0xDC,0x56,0xE2,0x49,0x15,0x2A,0xEF,0xE2,0x92,0x15,0xA9,0x33,0x81,0xDB,0x10,0x87,0xDB,0x00,0x28, + 0xDB,0x64,0xB7,0x34,0x28,0x01,0x17,0xCB,0x6B,0xD5,0x24,0xDA,0x0C,0xB4,0x8B,0xAB,0xAB,0xB3,0x2F,0x00,0xBA,0x29,0x41,0xDB,0x41,0x16,0xDB,0x09,0x3D,0x82,0xDB,0xB3, + 0xDB,0xDA,0x0C,0xDB,0x2D,0xCA,0xDA,0x98,0xEE,0xB5,0x4F,0xEE,0x43,0x1B,0x40,0xDB,0x53,0x60,0x9A,0xDB,0xCA,0xC3,0xDB,0x00,0x92,0xA8,0x6C,0xB8,0xAC,0xDB,0x34,0x98, + 0x50,0x35,0xDB,0x50,0x94,0x60,0xBE,0x2B,0x98,0xDA,0x31,0xFB,0xC3,0xDB,0xAE,0x0C,0x9A,0x14,0x34,0xCE,0x54,0xF1,0x77,0x87,0x25,0x01,0x19,0x15,0xA0,0xBD,0xE5,0x69, + 0x00,0x09,0x34,0x13,0xA8,0x17,0xDD,0xBC,0x2B,0x41,0xDC,0x53,0xA3,0x69,0x9F,0xA2,0x0F,0x0B,0x03,0xDB,0x37,0xF2,0x3C,0xAC,0xA0,0xDB,0xFE,0x44,0x4B,0x27,0x50,0xDB, + 0x4E,0xCD,0xDB,0x0C,0x2D,0xDA,0x25,0xDB,0x0E,0x07,0xC9,0xB8,0x41,0x53,0x00,0x86,0xDB,0xFB,0xB6,0xC7,0xF3,0x84,0xDB,0x85,0xB7,0x91,0xB6,0xD7,0x97,0xE4,0xDD,0x30, + 0xDB,0x09,0x08,0x05,0x02,0x0D,0x4C,0x98,0x12,0xB8,0x76,0xCB,0xB8,0xB9,0x2D,0x00,0x20,0x45,0xB8,0x5D,0xC3,0x5C,0xC0,0x17,0xA6,0x08,0x2B,0xF4,0x2B,0x0C,0x86,0x0B, + 0xBB,0xA5,0x17,0x50,0x07,0xEC,0xD0,0xE6,0x5F,0xDC,0xD0,0xC3,0x55,0xDA,0x55,0x06,0xDD,0xA1,0xCB,0x08,0x83,0x36,0xAF,0x5E,0x33,0xDC,0x16,0xFF,0x6F,0x10,0x07,0x45, + 0x7F,0x21,0x1A,0x1D,0x00,0x70,0x8C,0x21,0xB6,0xC0,0x98,0xB7,0xAC,0xBA,0xB4,0x84,0x7B,0x54,0xC7,0x92,0xB6,0x64,0xE6,0xA5,0x49,0xA1,0x9A,0x00,0x8A,0xB4,0xCA,0xB7, + 0x54,0x95,0xB9,0xA3,0xEE,0x00,0xFF,0xAD,0xCA,0xD6,0xA0,0xDA,0x0C,0xB9,0xDB,0x29,0x92,0x39,0xA5,0xD1,0x92,0x08,0xAD,0xEF,0x43,0x02,0x41,0xDB,0xCD,0xA9,0x14,0xB8, + 0x40,0xDB,0x6F,0xC8,0x12,0xDB,0x1E,0x00,0xDB,0x0B,0x21,0xF3,0x1A,0x90,0x0C,0x96,0x0B,0x2B,0x10,0x96,0xE4,0x10,0xC1,0xD8,0x59,0x00,0xFB,0xF7,0x0C,0x09,0x33,0xBD, + 0xA4,0x34,0xA8,0xBA,0x1F,0xA4,0x92,0xB4,0xC7,0xEF,0x10,0xA7,0x92,0x01,0x04,0xDB,0x92,0xE8,0x19,0xAD,0x4C,0xC5,0xE6,0x00,0xEF,0x49,0x05,0x83,0xBC,0xDB,0x16,0x1D, + 0xB4,0x49,0x1A,0x41,0xDB,0x43,0x26,0x00,0xDA,0x14,0xD8,0x17,0xB4,0xD6,0xDA,0x16,0xDB,0x08,0x91,0x80,0xDB,0xB9,0xA4,0xA4,0x93,0xA9,0xA6,0xE7,0xA5,0x92,0x4B,0xD8, + 0x08,0x64,0xDB,0x35,0x03,0x1B,0x4A,0xA9,0xD8,0x54,0x94,0x9C,0xDC,0x2C,0xDB,0x15,0x17,0x87,0x75,0x00,0x86,0xDC,0xCB,0xF4,0x84,0x4A,0x0B,0x92,0x2B,0xC4,0x7E,0xD4, + 0x1D,0x0B,0xDB,0x65,0xBB,0x5D,0x85,0x55,0x04,0x1B,0xCC,0xB4,0x81,0xEA,0x25,0x05,0x4B,0x15,0x07,0xD8,0x2F,0xDB,0x5A,0xDB,0xB0,0x15,0xCD,0xD2,0x05,0x3A,0xB7,0xAF, + 0xF1,0x3C,0x96,0x6A,0x04,0x19,0x00,0xD5,0x08,0x1C,0xB3,0xD5,0x03,0x66,0x04,0x54,0x54,0x93,0x96,0xEC,0xB5,0x00,0x27,0xB8,0x2B,0x8C,0x00,0xDD,0x0B,0xD7,0x0B,0x03, + 0xA4,0x8D,0xA0,0xDB,0x2C,0xE9,0xE9,0xDA,0x26,0x82,0xBB,0xDB,0x0D,0x92,0x2C,0xB6,0xAA,0xA5,0x61,0xE0,0xDB,0xC1,0xFB,0xC1,0x32,0x94,0x4C,0xDB,0x1A,0x82,0xCA,0xDB, + 0x0B,0x2B,0xDA,0x0A,0xB8,0x23,0x15,0x6D,0x0C,0xC2,0x8F,0xCB,0x8C,0x0D,0xAC,0xF5,0xEA,0xDA,0xC2,0xDB,0xC3,0xD1,0xEF,0x3A,0x94,0x24,0x3A,0xBC,0x00,0xC1,0xF6,0x10, + 0xD2,0x56,0xC5,0x58,0xDB,0x5B,0xA7,0x75,0x02,0x0B,0xD4,0x00,0x21,0x89,0x92,0x86,0xDA,0x97,0x39,0x03,0x01,0x5F,0xF4,0x00,0x36,0xDB,0x13,0x04,0xDF,0x94,0x00,0xB2, + 0x56,0x00,0x1D,0xA0,0xD9,0xAE,0xB5,0x92,0x00,0xD6,0xEC,0x40,0xDF,0x73,0x95,0x00,0x02,0xDB,0x91,0x82,0xDB,0xFA,0xB8,0x45,0xED,0xA0,0xDB,0xC9,0xB6,0x22,0x61,0xD8, + 0x61,0xC2,0x0C,0x07,0xDB,0x03,0x7D,0xBE,0x79,0xE2,0xF4,0xBD,0x70,0xDB,0x26,0x17,0xDB,0x0F,0xA1,0x2C,0xDB,0x38,0xF0,0xF5,0x0F,0x12,0x01,0x84,0xDB,0xA4,0xA8,0x21, + 0xB0,0xDB,0xE4,0x00,0xDA,0x0A,0x88,0x6B,0xE6,0x7A,0xE0,0x0E,0xBA,0x4E,0x35,0x15,0x17,0xC2,0xDB,0xAF,0x10,0x12,0x1A,0xD2,0x05,0x01,0x93,0xB0,0x01,0x32,0xA3,0x8E, + 0x15,0x21,0x54,0x0B,0x0F,0x61,0xD5,0x95,0xAF,0xD0,0x03,0xD6,0x75,0xFE,0x39,0xB8,0x52,0x92,0x30,0x9E,0xDB,0x9B,0xBB,0xA8,0xB6,0x90,0xE9,0x90,0xDB,0x3D,0xD0,0x00, + 0x92,0x1B,0x98,0xC9,0xCE,0xC2,0x10,0xB5,0x00,0x8B,0x18,0x9F,0xAC,0xAF,0xB8,0x24,0x75,0xA1,0xDC,0xCC,0xAB,0xE9,0x93,0x54,0x00,0xDB,0x19,0xAD,0x50,0xDB,0x61,0x8B, + 0x62,0xF9,0x21,0xD6,0x0F,0x15,0xCE,0x12,0xB0,0x00,0x1F,0xAB,0xA5,0xFF,0xAA,0xD4,0xB0,0xD9,0xA0,0xC0,0xB5,0xE2,0xED,0x15,0xC0,0xFA,0x2E,0x88,0x69,0x2E,0xBB,0x70, + 0xDB,0xA0,0xD8,0x5E,0x21,0x00,0xB3,0x55,0x53,0x28,0xE6,0x2D,0x0B,0x87,0x2C,0xDB,0x0E,0x32,0x64,0xFC,0x92,0x67,0x04,0xDC,0x95,0xFF,0x81,0xD5,0x8C,0x9E,0x61,0xDB, + 0x85,0xD0,0x06,0xDB,0xDC,0x1D,0x00,0xAC,0xEE,0x78,0xDB,0x01,0xDF,0xCF,0xA5,0x9A,0x53,0x08,0x0F,0x05,0xDB,0x81,0xDE,0x9F,0x4C,0x64,0xB8,0x99,0xB0,0xDC,0x90,0xB8, + 0xA7,0xCB,0x7A,0x00,0xC1,0x8D,0x2B,0x78,0x00,0xD1,0x2C,0x0B,0xAA,0x2F,0xEB,0x28,0xE5,0x25,0xD9,0x0F,0x00,0xCA,0xAB,0xD2,0x0F,0x11,0x0B,0xBE,0x05,0x00,0xBA,0xD6, + 0xE7,0x9B,0x3E,0x98,0xDB,0x2E,0x94,0x6E,0x00,0x40,0xDB,0xAB,0x49,0x53,0xE7,0x97,0x94,0x47,0x54,0x0B,0xAE,0xE5,0xA1,0x8B,0x1A,0xAD,0x2B,0xB7,0x24,0xAB,0x48,0xDB, + 0x7C,0xB7,0x51,0xCA,0x00,0x46,0x9E,0xF0,0x5A,0xB0,0x2B,0xDB,0x0B,0xA4,0x97,0x79,0x02,0x61,0xDA,0x28,0xDB,0x30,0xA3,0xDB,0x68,0xBD,0x93,0xDA,0x64,0xD7,0xB6,0x0D, + 0x70,0x08,0x00,0xF1,0xB5,0x6F,0x1D,0x9F,0xE2,0x12,0xAF,0x84,0xDB,0xB3,0xAA,0x12,0xDB,0x18,0x89,0x58,0xDB,0x48,0xA4,0x12,0x87,0xAA,0x02,0x9A,0xCE,0x15,0x60,0xDA, + 0x97,0x00,0xCC,0x0F,0x0F,0x04,0xB7,0xE6,0xC2,0xBE,0xAF,0x81,0x26,0x58,0x6D,0xDB,0x69,0xA8,0x53,0xA4,0x45,0xE3,0x65,0xCC,0xD2,0x0C,0x93,0x78,0x1C,0xDA,0x5D,0x54, + 0x4E,0x96,0xBC,0xE6,0x5F,0x21,0xCA,0x18,0xDD,0x2B,0x32,0x0B,0x8D,0x4A,0xDC,0x0C,0xDA,0x1D,0xCD,0x02,0x07,0xD9,0x01,0x44,0xAF,0xE9,0xE6,0x00,0xDB,0x09,0x1E,0xC7, + 0xC1,0xDC,0x79,0xD9,0x00,0xBA,0x77,0x03,0x80,0x72,0x2E,0xEE,0xB6,0x4F,0xD8,0xDC,0x1B,0x07,0xA9,0xC3,0x61,0xDB,0x37,0xC3,0x64,0xB8,0x98,0xC9,0xB8,0x99,0x85,0xDC, + 0xAE,0xF2,0xB6,0x53,0x26,0x96,0x87,0x0C,0x6D,0xDB,0x30,0x91,0xB9,0xAE,0x92,0xC8,0xB3,0xCD,0xA0,0xA3,0xB3,0xE5,0xB2,0x8D,0xB8,0xF1,0x65,0x1D,0xB8,0x8D,0xFC,0x23, + 0x94,0x15,0xEE,0x5F,0xBA,0x2E,0xD4,0x56,0x01,0xCB,0x19,0xB6,0x29,0xEA,0xF1,0xEC,0xF4,0xE6,0x2D,0x2D,0x21,0x5F,0xEB,0x6C,0xD6,0xA9,0x48,0x21,0x54,0xF4,0x67,0x50, + 0x54,0xDF,0x28,0x54,0xA6,0xA8,0xAE,0xAC,0xDE,0x30,0xDF,0xBA,0x04,0x8F,0x4B,0xDB,0x0D,0x9F,0x12,0x51,0xDC,0x00,0xA4,0xCA,0xDA,0x16,0xB4,0x5A,0x00,0x6C,0x62,0xB5, + 0xA2,0xB6,0xAB,0x80,0xE4,0xA5,0x5B,0x24,0x20,0x7A,0x00,0x88,0x00,0x7A,0x1B,0xB7,0xCD,0x47,0xC5,0x86,0xDB,0x00,0xCD,0xCA,0xB6,0xE6,0xAD,0x50,0xDB,0xCE,0xEC,0xD2, + 0x8F,0x4C,0xAB,0xB0,0xDB,0xC1,0xA5,0x54,0x40,0xDB,0x19,0xB2,0xB8,0xCB,0xA3,0x0F,0xB4,0xBF,0x92,0xEA,0xAD,0xEE,0x6D,0xD9,0x6A,0x2C,0xE9,0x2D,0xA3,0xB9,0x3D,0x43, + 0xDC,0x09,0xCF,0x86,0x8A,0x44,0x67,0xC1,0xDB,0x45,0xB2,0x49,0x8B,0x61,0xD5,0x16,0xDB,0x16,0xE8,0xB5,0x9F,0x32,0x85,0xDC,0xCA,0xA3,0x4A,0x60,0xDA,0xB0,0xDC,0xB2, + 0xB5,0xE4,0x00,0xED,0x50,0xB7,0x98,0x4C,0x9F,0x82,0x40,0xDB,0x09,0x02,0x08,0x24,0x5B,0xB1,0xE2,0x75,0x30,0xDB,0x4A,0xDC,0x14,0xB7,0x54,0x90,0x55,0x82,0x76,0x83, + 0x55,0x87,0xD4,0x82,0x56,0x09,0x16,0xA0,0xB2,0xF0,0x0E,0xB0,0x2F,0x1A,0x0B,0xBE,0x3E,0x0B,0x02,0xEB,0xDD,0x92,0x6E,0x19,0xEB,0x00,0xFC,0xFB,0x02,0xE1,0xC4,0x0B, + 0xAF,0xFF,0x82,0xEB,0x21,0x60,0xDC,0xCA,0xCD,0x94,0xE6,0x5F,0xCD,0x45,0xCD,0x85,0xDB,0xAC,0xE5,0xE1,0xDB,0xD8,0x00,0xDB,0x5E,0xD8,0x4A,0xB9,0x5A,0x9D,0x5B,0xC9, + 0xCC,0xDA,0x14,0xDC,0x16,0xC8,0xF6,0xC9,0xEA,0xDF,0xDC,0xCE,0x80,0xC8,0x7A,0x08,0x24,0xDB,0x0C,0xDC,0x13,0x4C,0x65,0xE2,0x92,0xB8,0x5E,0x79,0xAB,0x52,0x6D,0x97, + 0x56,0x8E,0x65,0x87,0x59,0xC8,0x56,0x83,0x2B,0xEE,0x0E,0x08,0x40,0xDB,0xBC,0xB0,0xAF,0xD5,0xF7,0x0F,0xA8,0xFF,0x05,0x0D,0x0A,0x0D,0xB7,0xDB,0xBC,0xC9,0xA0,0xDA, + 0xEC,0x00,0xDB,0x29,0xBE,0xFF,0x03,0x22,0xA2,0x1A,0xAB,0xB9,0x3F,0x00,0x06,0x0E,0xAB,0x1B,0xDB,0x09,0x52,0x00,0xAB,0xE8,0x06,0x9B,0x64,0x88,0xB8,0xED,0xE8,0x6C, + 0xB6,0xB2,0xB1,0xAB,0x82,0xA9,0x05,0xA6,0xA4,0xE6,0xA1,0xC2,0xDC,0x50,0xDB,0xAE,0xB7,0x3E,0xCF,0xA8,0xB7,0x61,0x9F,0xB5,0x04,0x61,0xDB,0x42,0x80,0x22,0xDC,0xCD, + 0xCC,0xCF,0xB4,0x94,0xF0,0x00,0xDC,0xB4,0x98,0x90,0xDB,0x28,0xB1,0xAF,0xEB,0x68,0xDB,0x3A,0x00,0xB8,0xEB,0x0F,0xC3,0x9F,0xD8,0x0A,0x92,0x2B,0xC6,0x0D,0x03,0x01, + 0x5D,0x86,0x28,0xDB,0x6B,0xF8,0x61,0xDB,0xD1,0x11,0x9D,0x61,0xFA,0x2A,0x8E,0x73,0x03,0x85,0xDB,0xD8,0x09,0xD7,0x65,0xEA,0xD9,0x04,0xB7,0x22,0x1D,0xA9,0x00,0xA2, + 0x32,0xBD,0x69,0x64,0x00,0x2E,0xC2,0xDA,0xF2,0xD8,0xEC,0x00,0xDB,0x2D,0x92,0x2E,0xFB,0xAE,0xA2,0x66,0xDB,0x06,0xB4,0xDB,0x16,0xED,0xB9,0xB6,0x20,0x08,0x9C,0xDB, + 0x03,0x07,0x0D,0x4C,0x82,0x94,0x49,0x14,0xF1,0xEB,0xEB,0x72,0x6B,0x00,0x95,0xB8,0x5D,0x8C,0x2C,0xBA,0x99,0xE6,0xC8,0x02,0xDB,0x1D,0x07,0xAD,0xC8,0x92,0xB3,0x10, + 0xF2,0xDA,0x94,0xF4,0x1F,0x5C,0xB2,0xAE,0xA3,0xF1,0xA0,0xDC,0x93,0xA1,0xBE,0x1D,0x00,0xCA,0xC7,0x4E,0x0B,0x15,0xD2,0x93,0x50,0xDB,0xBA,0x05,0x82,0x1A,0xCB,0x09, + 0x12,0x83,0x60,0xDA,0x76,0xCD,0x00,0xDA,0x14,0x00,0x43,0xB7,0xC9,0x91,0x8C,0x27,0xDB,0x04,0xE9,0xCA,0xEE,0x6C,0xE2,0x01,0x41,0xDB,0xB9,0x65,0xB6,0xAD,0xED,0x5C, + 0x80,0x12,0x06,0xDB,0x24,0x4F,0x04,0x4F,0x53,0xB0,0x8F,0xD7,0x48,0xDB,0x4C,0xB8,0x53,0xF2,0xC2,0x2B,0x9E,0x9F,0xC3,0xDC,0x00,0xB3,0xED,0x90,0xBD,0x2F,0xDA,0x28, + 0xCC,0x13,0x0B,0x85,0xDB,0x85,0xB7,0xBF,0xB7,0x07,0xA4,0xB4,0xC0,0xDB,0x21,0xB2,0xDC,0xB9,0x13,0x53,0x92,0x39,0xFA,0x08,0x23,0xF2,0x54,0x1D,0x68,0xDB,0x4E,0xDA, + 0x1C,0x00,0xA0,0xDB,0x95,0x88,0x00,0x98,0xDB,0x09,0x79,0x6C,0x96,0xF0,0x62,0xB6,0x91,0xED,0x42,0x07,0x00,0x1B,0x00,0x09,0x40,0x00,0x31,0x07,0x24,0xAC,0x8F,0xCC, + 0xC2,0xDB,0xF3,0xE3,0xDB,0x05,0xD6,0xAD,0xF4,0x05,0xDC,0x16,0xBC,0xDB,0x15,0xD0,0x57,0xAB,0x36,0xB9,0x54,0xC0,0xF6,0xDB,0x0B,0x21,0xEA,0xCB,0xB6,0x2A,0xD6,0x0C, + 0xDB,0x0B,0x13,0x1F,0x92,0x4D,0xF4,0xE8,0xB8,0x2C,0xA3,0xA8,0xC8,0x24,0xAF,0xEC,0xD2,0xB4,0x00,0x1F,0xDD,0x08,0x31,0x97,0xC3,0x34,0x76,0x1C,0xCE,0x49,0x2E,0x81, + 0xDB,0x67,0x61,0xDA,0x1E,0xDB,0x16,0x8A,0x93,0xA2,0x00,0x3D,0xA6,0xA6,0x50,0xDB,0xE7,0xA5,0xDB,0x01,0xC5,0xE2,0xAF,0xF4,0xB7,0x13,0x83,0xDB,0x4F,0x02,0x35,0x1B, + 0x9F,0xF1,0x27,0xA5,0xCA,0xF1,0x59,0x03,0xDB,0x91,0x49,0x25,0x00,0xC4,0xEA,0xB1,0x2C,0xBE,0x2B,0x9C,0xAF,0xD0,0xED,0xA8,0xFC,0x0B,0xDB,0x3C,0xD5,0x9B,0x00,0xAE, + 0x9A,0xAF,0x7A,0xA1,0x2D,0x9A,0xBB,0x28,0x85,0x1A,0xB2,0x47,0x19,0x31,0x57,0x13,0x9D,0x3D,0x01,0xBD,0xDB,0xAE,0x1B,0x2B,0xE8,0x7A,0x00,0xD1,0x09,0xD6,0xEA,0xE9, + 0x05,0xE8,0x64,0xE5,0x5E,0x00,0x83,0xDD,0xE2,0x0B,0x05,0x4C,0x41,0xDF,0x12,0x65,0xDD,0xF6,0xB3,0x01,0xE3,0x57,0xE3,0xB7,0x29,0xA0,0xC9,0xE5,0xA4,0x9D,0xC8,0xD8, + 0x1B,0xDA,0x41,0x40,0xDB,0x7C,0xBF,0xC1,0x2D,0xAF,0xD7,0xF1,0x65,0xDB,0x04,0x6B,0x50,0xDB,0x50,0x93,0x5B,0xCE,0xDB,0xCD,0xF4,0x06,0xAE,0x12,0x15,0xBB,0xCA,0x97, + 0x10,0x54,0x99,0x50,0x1F,0xDB,0x75,0x17,0xB5,0x37,0xFB,0xF7,0xD4,0x3B,0xEA,0xCA,0xDB,0x15,0x2B,0xE1,0x29,0xDC,0x6B,0xED,0x72,0x36,0x50,0x44,0xDB,0x54,0x00,0xCF, + 0xC5,0x87,0xD8,0x01,0x94,0xB0,0x50,0xDB,0x27,0x43,0xDB,0x04,0x41,0x58,0xDB,0x2C,0x3D,0xDB,0x30,0xD9,0xA5,0xEE,0xBB,0x80,0x35,0xCF,0xD7,0xED,0x60,0x7A,0xDB,0x08, + 0x82,0x50,0xDB,0x5D,0x07,0x86,0x89,0x7A,0x53,0x9A,0x9E,0xCD,0x28,0xDB,0x25,0xC2,0xEA,0xDD,0x09,0x11,0x99,0x6D,0x34,0xA8,0xD9,0xE5,0xCC,0xDB,0x09,0x0B,0x81,0xDB, + 0x2B,0x61,0xDB,0x4B,0xD2,0x6D,0x92,0x6F,0xD7,0x87,0xC9,0x08,0x10,0xDB,0x1C,0x00,0xB9,0xE1,0x29,0xBF,0x69,0x85,0x20,0xDE,0x7E,0x00,0x06,0xD9,0x16,0x8B,0x88,0x51, + 0xA0,0xDB,0x95,0x0D,0x41,0x73,0x00,0x04,0xDB,0x96,0x00,0xC6,0xF6,0xC9,0xEB,0xB9,0xA4,0x91,0xD8,0x5B,0x22,0x59,0xB5,0x61,0xB6,0x04,0xB9,0x00,0x2C,0x02,0x24,0xC9, + 0xAA,0xD7,0xCF,0x6B,0xF1,0x3A,0x94,0x24,0x5E,0xDC,0x09,0xC2,0xDB,0x87,0xF6,0x10,0xB9,0xB8,0xB0,0xAA,0xB0,0xDC,0xCA,0xB3,0xE6,0x90,0xFB,0x00,0x94,0xA0,0xDB,0xC3, + 0xE1,0x11,0xA2,0xBA,0xBB,0x00,0xC8,0x0B,0xDE,0x94,0x15,0xA9,0x0D,0x15,0x72,0xDD,0xEC,0x17,0xDB,0x34,0x17,0x67,0xD5,0x00,0xBF,0xC6,0x64,0xAB,0xD3,0x09,0xE9,0xC2, + 0xDB,0xD6,0xF3,0x91,0x06,0x41,0x41,0xDB,0x28,0xDC,0x6F,0xCC,0x49,0x91,0x39,0xB6,0x04,0xD8,0x82,0x22,0x0D,0x15,0x87,0xDB,0xD0,0x38,0x2D,0x0D,0x22,0xAC,0x2C,0xA5, + 0xE2,0xB8,0xA3,0x41,0xDB,0x20,0x22,0x96,0x5B,0xCB,0xD8,0xDB,0x55,0x07,0x05,0xA3,0x95,0x80,0xF5,0xBF,0xE4,0xC4,0xA0,0xDB,0x17,0x61,0x01,0xDB,0x78,0x0A,0xAE,0x39, + 0x54,0x04,0x89,0xA4,0x5F,0x28,0xDB,0x2A,0x19,0x06,0x4A,0xFF,0x92,0x38,0xF6,0xAF,0x7C,0xDB,0x6F,0x54,0xD1,0xE5,0xDB,0x4C,0x98,0xE1,0xDB,0xDC,0x01,0x09,0xC1,0xD9, + 0xA7,0x02,0x4A,0xDB,0x0A,0xA7,0x9A,0xDA,0x05,0xA3,0x92,0xB6,0xD0,0xB1,0xDB,0xAC,0xD5,0xFF,0x04,0xB0,0x14,0x15,0xB4,0xBC,0x2A,0x1B,0xE3,0x45,0x97,0x26,0x95,0xDC, + 0x16,0xDB,0x16,0xB8,0x4B,0x6D,0xBA,0x2B,0xD1,0x7B,0x0C,0xA7,0xD3,0x26,0x19,0x0C,0xDC,0x0A,0xAE,0x9E,0x0A,0xAB,0x00,0xC3,0x95,0x5F,0xC3,0xD5,0x00,0xCF,0xAF,0x1D, + 0x53,0x05,0x48,0x00,0xAA,0x57,0x08,0x32,0x8E,0x5D,0xA8,0xF7,0x83,0xC4,0x02,0x75,0xB8,0x86,0xDB,0xE1,0xB1,0x89,0x93,0x12,0xDB,0x09,0x4A,0xA7,0x00,0xB6,0x2A,0xC8, + 0x76,0xBD,0x92,0x95,0xDB,0x8D,0x53,0xEB,0x7C,0x00,0xB4,0x88,0x12,0x12,0x24,0xDB,0x0E,0x2A,0xC9,0xE2,0x4F,0x68,0x95,0xC5,0xB0,0xDC,0x8C,0xDB,0x0B,0x95,0x49,0x23, + 0xFE,0x04,0xBA,0x05,0xA3,0x09,0x01,0xDB,0x15,0x7D,0xC3,0xDF,0x03,0x00,0xDE,0x9A,0xBA,0xD2,0xF8,0xD8,0xD4,0x73,0xCC,0x61,0xDD,0x72,0x00,0x87,0xDB,0x00,0x55,0x09, + 0x13,0x69,0xA2,0xAF,0xE9,0x26,0xC8,0xE6,0x0B,0x1C,0x1C,0x5D,0x2E,0x81,0xDF,0x04,0xA3,0x28,0x2E,0xD7,0xCB,0x9C,0xD9,0x2D,0x00,0x4A,0x3D,0x00,0x85,0xDB,0x84,0xDA, + 0xC4,0xB6,0x5B,0x94,0xB2,0x90,0x12,0x4A,0xDB,0x16,0xDA,0x16,0x2C,0x4F,0xD2,0x95,0xC9,0xB8,0x99,0x39,0xB8,0x4E,0xDB,0x09,0x6D,0x82,0xDB,0xED,0x8A,0x17,0x64,0xB1, + 0x01,0xA5,0xCE,0xA2,0xB4,0x94,0x94,0xB5,0x05,0x34,0x85,0xDB,0xE2,0xE5,0x19,0xD7,0xC5,0x1F,0x3A,0x1A,0x1C,0x00,0x99,0x4F,0x86,0x68,0xD8,0x2B,0x09,0xD5,0x2E,0x34, + 0xEB,0x3C,0xCB,0x3C,0x1D,0x10,0x1A,0x32,0x88,0xDB,0x05,0x2D,0x11,0x00,0x46,0x46,0x00,0xDB,0x41,0x98,0xDB,0x38,0x04,0xE0,0xDB,0x2C,0x6C,0xA0,0xDA,0x32,0xB6,0x48, + 0xB9,0xB6,0x48,0x12,0x2B,0xDB,0x08,0x94,0x9B,0x52,0x53,0x95,0x61,0xDA,0x64,0xB8,0x5E,0x24,0x6B,0xEB,0xE4,0xCB,0xB6,0x2C,0x04,0x81,0x81,0xA7,0xCF,0x2C,0x15,0x5F, + 0xA1,0x28,0x83,0xAE,0xF9,0x24,0xAF,0x29,0x5D,0xCC,0x01,0x9D,0xE6,0x9E,0xEB,0x05,0x5F,0xBA,0x04,0x03,0x50,0x1C,0xFA,0x78,0x0B,0xED,0x74,0x15,0xFC,0xAC,0x1A,0xE9, + 0x2A,0xB2,0xED,0xC2,0xD6,0xCD,0xF2,0xB7,0xB5,0xDA,0x88,0x5D,0x81,0xF8,0x09,0xD5,0x49,0xB3,0xC4,0x46,0x51,0xDB,0x00,0xBD,0xD9,0xBC,0x09,0x8C,0x8C,0x95,0x41,0xDA, + 0x79,0x2D,0x83,0xAC,0x91,0xDA,0x2B,0xDB,0x37,0xC8,0xDE,0xC9,0xB1,0xDB,0x4C,0x82,0xD5,0x00,0x0C,0xAA,0x00,0xAB,0x5F,0x5B,0xC0,0x4E,0x94,0x88,0x6B,0xA0,0xDB,0xEF, + 0x04,0xE5,0x2F,0xFF,0x6C,0xDC,0x2C,0xAC,0xA6,0x00,0xB3,0xF2,0xB5,0xC2,0x8A,0x00,0xDF,0xCE,0xCD,0x0A,0xC8,0x2A,0xD6,0x05,0x21,0xE5,0x19,0xB8,0x68,0x94,0x67,0xB0, + 0xDB,0xFB,0x0E,0x00,0xC2,0x72,0x67,0xAB,0x5E,0xB3,0xB0,0xDA,0xF2,0x00,0xB9,0x99,0x8D,0x25,0xB5,0x25,0x8C,0x06,0xDB,0xDC,0x04,0x58,0x58,0xEB,0xEC,0x61,0xDC,0x73, + 0xA4,0x41,0xDB,0x4A,0xED,0xB7,0x20,0x9A,0x0D,0xD8,0xDB,0x32,0xE6,0x18,0x22,0xB0,0xCC,0xDC,0x45,0x86,0xDB,0x94,0x86,0x35,0x81,0xDA,0x12,0x81,0xDC,0xCD,0x17,0x29, + 0xB8,0x59,0x9D,0x49,0xFB,0x12,0xBC,0xA8,0xB3,0x0E,0x50,0x00,0xCF,0x28,0x1C,0xAA,0xB0,0xBF,0x4D,0x67,0x16,0x2A,0xFA,0xF5,0x0E,0x38,0x74,0x29,0xDC,0x1D,0x0C,0xA4, + 0x91,0x50,0xDB,0x22,0x43,0x70,0x00,0xD4,0xC9,0x00,0x41,0xE9,0x03,0xDB,0xD5,0x09,0x9E,0xC8,0x81,0xDB,0xA0,0x3E,0xDB,0x02,0xAF,0x22,0x00,0x31,0x4F,0x0D,0x80,0xDB, + 0x1B,0x4C,0x11,0x8F,0xD7,0xCA,0x39,0xE3,0x85,0xDC,0x2D,0xF1,0x07,0xDB,0x04,0x61,0xDC,0x73,0xAB,0x61,0xDC,0x3C,0xF9,0x73,0xB3,0x74,0x06,0xA2,0x53,0x82,0xD8,0x0B, + 0x46,0x04,0x1C,0xD6,0xF7,0xB0,0x36,0x83,0x33,0x84,0xDB,0x8D,0x86,0xA4,0x02,0x19,0xDB,0x04,0x54,0xA1,0xDB,0xD2,0x00,0xE8,0xE1,0xDA,0x6B,0xF1,0x22,0xF3,0xAA,0x8C, + 0x00,0xC0,0xDB,0x4A,0x95,0x8D,0xDB,0x0A,0x92,0x4A,0xDB,0x0B,0xA4,0x96,0xE6,0xED,0xA7,0xAC,0x7A,0xCF,0x48,0x00,0x36,0xDB,0x02,0x12,0x24,0xDE,0xCE,0x26,0xAA,0x6F, + 0xAE,0xAA,0x00,0xA7,0x05,0x88,0xBA,0xDB,0x09,0x03,0xCE,0xA8,0x92,0x15,0x2B,0x49,0x80,0xC2,0xB3,0x74,0x8C,0x98,0xA3,0xB9,0xB2,0xB0,0xDC,0xDA,0x1B,0xCD,0x8E,0x69, + 0x98,0x6B,0x00,0x21,0xFB,0xA9,0x41,0xD8,0x54,0x16,0xDB,0x12,0x91,0xB6,0x2D,0x49,0x28,0xDC,0x60,0xD9,0x9E,0xB0,0xDB,0x58,0x41,0xDA,0x76,0x06,0xCA,0xE5,0x79,0x79, + 0x84,0xDA,0xC1,0xDB,0x21,0xB6,0x0A,0x98,0x24,0x02,0xA6,0x08,0x35,0xDB,0x0C,0xEF,0x8E,0x08,0x53,0x87,0xEC,0xDC,0x32,0xB8,0x9C,0xDB,0x25,0xBF,0xE9,0x52,0x97,0xF0, + 0x00,0xD8,0xC3,0xCE,0x03,0xCB,0x84,0xDA,0x04,0x15,0x40,0xDB,0x24,0x54,0x9A,0x49,0x26,0x95,0x4A,0x00,0x06,0xA2,0xAB,0x61,0x2E,0xDB,0x6A,0x10,0x1C,0xA7,0x9B,0x1F, + 0x5B,0x1C,0xC7,0xDA,0xEF,0xF2,0x19,0xAB,0xEE,0xAB,0x00,0xA0,0xDB,0x2C,0x49,0x2F,0xDB,0x29,0x8F,0x28,0xDB,0x14,0x8C,0xD4,0x1C,0xA6,0xF9,0x02,0xB6,0x5B,0xCB,0xF8, + 0x00,0xDA,0x4C,0xDB,0x14,0xB6,0x40,0xDF,0xE6,0xC4,0xB7,0x4C,0x3F,0x7A,0x07,0xE5,0x83,0x42,0xB8,0xA2,0xB6,0x05,0x31,0x12,0x7A,0xC1,0xAF,0xA4,0x95,0xE1,0xDB,0x65, + 0xB8,0x61,0xD8,0x12,0xDB,0x19,0xB7,0x77,0x01,0x00,0x57,0x86,0x6B,0xEF,0x4B,0xC5,0x61,0xD7,0x53,0x9D,0x85,0xCA,0x58,0x00,0xD8,0x5E,0xC3,0x74,0x08,0xBF,0x09,0x54, + 0x43,0xDB,0x29,0xB0,0xDB,0xE6,0xB1,0xAA,0xF3,0xC1,0xDC,0x54,0x33,0xC9,0xE1,0xDB,0x22,0xED,0xA7,0x2F,0xDB,0x0C,0xD1,0x26,0x00,0x48,0x4A,0x05,0x79,0x8C,0xDB,0x0A, + 0xA3,0x90,0xDA,0xA8,0x97,0x9F,0xC3,0xD8,0xDB,0x04,0x9F,0x19,0x82,0xDB,0x31,0xC1,0xDB,0x02,0xE2,0xE4,0xD7,0xDE,0xCE,0x34,0xDB,0x24,0xCF,0x7A,0xE7,0xCF,0xA2,0x2D, + 0x94,0x26,0x00,0xDE,0xCD,0x82,0xC9,0x82,0xD5,0x70,0xDB,0xA7,0xC3,0xB0,0xDA,0x56,0x1A,0xED,0x69,0x97,0x81,0xD5,0x1D,0x1C,0xC9,0x14,0x11,0x49,0xC4,0x5D,0x24,0x17, + 0xF4,0xAB,0x8F,0xC5,0x2B,0xC9,0x94,0x2E,0x8C,0xAB,0x49,0x46,0x42,0xDB,0x92,0x0A,0x51,0x83,0xDB,0x9E,0x00,0x8F,0xDB,0x02,0x6C,0xE4,0xC0,0xDB,0xDA,0xCF,0x3E,0xA5, + 0x53,0x88,0x55,0x4F,0xCD,0x20,0x00,0xE0,0x00,0x0D,0x22,0x2D,0x8F,0xCC,0x94,0x26,0xB9,0x29,0x96,0xEF,0xC2,0xDF,0x65,0xEF,0xD6,0xE6,0xAC,0x00,0x88,0xAA,0x05,0xE9, + 0xE1,0x1D,0x85,0xDF,0x65,0xAF,0x71,0x99,0xEC,0xAB,0xB5,0x87,0xAF,0xEC,0x05,0x29,0xBF,0x55,0x15,0x96,0xC2,0xF2,0x14,0xE8,0x17,0xB9,0x2C,0xAB,0xD1,0x06,0x32,0x32, + 0x49,0xD3,0x0C,0xAB,0xAC,0x8C,0x49,0x32,0xDB,0x2D,0xE2,0x75,0xE7,0xD7,0x0B,0x6E,0xC1,0xDF,0x00,0x0C,0x82,0xD7,0x85,0x40,0xD5,0x4E,0x41,0xDA,0x14,0x00,0xB8,0x35, + 0xB8,0xB6,0xEC,0x19,0xE4,0x77,0xB4,0xB6,0x02,0xC4,0xA8,0x22,0x0D,0x08,0x0E,0x41,0xD6,0x08,0x69,0x3B,0x1B,0x9E,0xCE,0x59,0xAA,0x45,0x52,0x2D,0xF0,0x94,0xB2,0xDD, + 0xBE,0xDC,0x00,0x95,0xAD,0x01,0xE0,0x6B,0xA0,0x95,0x54,0x8A,0xC9,0xCD,0x7E,0xF6,0xD6,0xF3,0x60,0xDB,0xE7,0x15,0xDB,0x0C,0xBD,0xBB,0x00,0xD6,0xCC,0xAE,0x94,0x1A, + 0xDB,0x1F,0xBB,0x48,0xC0,0xF5,0x82,0x76,0xB6,0x54,0xD6,0x12,0xCD,0xAA,0x4A,0xA6,0x9E,0xC0,0xD4,0x85,0x85,0xB4,0x03,0x85,0xA0,0xDA,0xB6,0xAA,0x00,0x92,0x45,0xB4, + 0xBF,0xC8,0xDA,0x92,0x2A,0xE9,0x08,0x0D,0xC2,0xDB,0xCD,0x38,0x08,0xF0,0xCE,0xD1,0xCF,0x05,0xB8,0x77,0x85,0x34,0x00,0xB7,0x82,0x84,0xD6,0xA1,0xDB,0x73,0x94,0x92, + 0xA5,0x1A,0xDE,0xB8,0x60,0xDB,0xA5,0xCA,0x5E,0x1C,0x00,0x93,0x97,0x07,0x73,0x92,0xDC,0x00,0x0F,0xC1,0xDC,0x73,0x9D,0xE5,0x0B,0xB6,0x61,0xDB,0x72,0x99,0x64,0xB0, + 0xDB,0x89,0x00,0xA0,0xDB,0x94,0xDA,0x17,0x85,0x03,0x40,0xDC,0x4A,0x94,0xDB,0x34,0x90,0xCB,0xB6,0x91,0x40,0xDF,0xC4,0xAF,0x7A,0x4E,0x08,0xA3,0x10,0x72,0xDB,0x1A, + 0xD1,0x37,0x4C,0xCE,0x4C,0xC5,0xDB,0x15,0xBD,0xCE,0x6D,0x03,0x2C,0xDB,0x30,0xD9,0x76,0x67,0x02,0xB6,0x54,0x9C,0x45,0x10,0x1F,0x85,0xB5,0xAA,0xF3,0x67,0xB2,0x00, + 0x95,0xBC,0x00,0xC0,0x2C,0xDB,0x3C,0x07,0xEF,0x27,0xDB,0x0D,0x88,0x3B,0x0D,0x07,0x97,0xD4,0x34,0x02,0x43,0x85,0xA8,0xD2,0x08,0x92,0x69,0x90,0x5D,0x00,0x05,0xCC, + 0x06,0x93,0x93,0x82,0xDA,0xBC,0x44,0x91,0x94,0xDB,0x00,0xA3,0xBD,0xD0,0xC9,0xB7,0x53,0x4E,0x7A,0xDB,0x70,0x6E,0x95,0x92,0x4A,0xAF,0x0D,0xD2,0x95,0x40,0xDC,0x61, + 0xD6,0xDC,0x74,0x00,0xD8,0x0E,0x81,0x00,0x62,0xB7,0xB0,0xDB,0x44,0x5F,0x06,0xDB,0xB5,0x1A,0x01,0x54,0x50,0xDC,0xCE,0xF0,0x82,0xC5,0xA7,0x89,0x09,0xB0,0xDB,0xA7, + 0xCB,0x9B,0x00,0x14,0xBE,0x00,0x07,0xC2,0xF7,0xDD,0xC5,0x8C,0x94,0xB2,0xE8,0x89,0x6E,0x89,0xDB,0x0D,0xC3,0xE8,0xDB,0x2E,0x00,0x44,0x91,0xC3,0xDB,0x00,0xC3,0xDA, + 0x00,0xA0,0xDB,0x53,0xE4,0xC8,0x81,0xC9,0xE2,0xC1,0x02,0x31,0x00,0x02,0x10,0x00,0x12,0x00,0x22,0x4A,0x97,0x95,0x98,0xDB,0x28,0xD6,0xD9,0x28,0xDF,0x2C,0xDA,0x2C, + 0xDB,0x16,0x2B,0xDB,0x12,0x86,0xDA,0x00,0x1D,0xE8,0x04,0xD8,0x32,0x8E,0xB0,0xDB,0xBE,0x93,0x94,0xFD,0xEB,0x9A,0xAA,0x07,0x52,0xAB,0x46,0x1A,0x75,0x00,0x13,0x9C, + 0x38,0xDB,0x51,0xB1,0x56,0xD8,0x58,0xDD,0x4E,0xB5,0x52,0x60,0x07,0xDB,0x8C,0xB0,0xDB,0x25,0x8D,0x85,0xB6,0x2A,0x00,0x58,0xB8,0xDB,0x29,0xE4,0xC8,0xC1,0xBD,0xC7, + 0xC4,0xAC,0x08,0xD4,0xC4,0xE5,0xB4,0x07,0xAA,0x00,0x1B,0xC1,0xE2,0xC5,0xC5,0xC2,0xDB,0x72,0xB8,0x98,0xDB,0x26,0x80,0xBC,0x98,0xAF,0xF1,0xEC,0xCD,0x2D,0xEC,0x6C, + 0xDC,0x24,0xE0,0x59,0x03,0xCB,0x07,0xB2,0xBF,0xB8,0x00,0xD0,0xDA,0xAA,0x10,0xC0,0x77,0x64,0x2D,0x28,0xDB,0x30,0x43,0xD0,0xCA,0x01,0x93,0x93,0xDB,0x07,0x8C,0x03, + 0x28,0xDB,0x48,0xB6,0x44,0x8D,0x8D,0xE1,0xDA,0x30,0xDB,0x2B,0x77,0xB7,0x83,0xE6,0xAF,0x1B,0x4F,0x9E,0xC9,0xDE,0x8F,0x0E,0x26,0xA6,0xFD,0x00,0xA0,0xF8,0xC1,0xD8, + 0xCF,0xA4,0x95,0xB0,0xDB,0x58,0x5E,0xDD,0x4E,0xDA,0x16,0xD7,0x08,0x67,0x80,0xDB,0xF0,0x00,0xC9,0xFE,0xFF,0x82,0xDB,0xDE,0xB0,0xF2,0xD0,0x70,0xD5,0x15,0x49,0x26, + 0x26,0x04,0x20,0xCF,0x58,0xED,0x26,0x2E,0xDA,0x0A,0xDB,0x01,0xAB,0xCD,0x2E,0x55,0xF4,0x6F,0xC6,0x61,0xCF,0x61,0xDB,0x84,0xD2,0xE1,0xDB,0x28,0xD6,0x4E,0xDA,0x17, + 0xFF,0x56,0xB6,0x58,0xDA,0x68,0x92,0xA8,0x56,0x24,0xF9,0xD9,0xB7,0x58,0xA5,0x20,0x1B,0xCD,0xC7,0xE7,0x00,0xD8,0xB4,0x12,0x4F,0x61,0x0D,0xDC,0x3A,0x95,0x2C,0xE3, + 0xB8,0x86,0x81,0xEC,0xEC,0xDD,0x0F,0xCD,0xC0,0x16,0x67,0xCD,0xAC,0x19,0xDC,0x1B,0xAB,0x07,0x19,0xB7,0x0B,0xFD,0x8E,0x08,0x65,0xD5,0xF3,0xB3,0x00,0x96,0x04,0x72, + 0xA6,0x54,0x49,0x97,0xE7,0x0C,0x1D,0x49,0x27,0x2D,0x0E,0x5F,0x00,0xB7,0x4B,0x97,0x34,0xD9,0x18,0xCE,0x56,0xE2,0x12,0x93,0x27,0x87,0xE5,0x00,0x20,0xD6,0x2B,0x8D, + 0x01,0x02,0xB0,0xDC,0x4A,0xD9,0xB7,0x43,0xB4,0xDB,0xC7,0xC7,0x77,0x9F,0xB0,0xC4,0x4F,0x12,0xE1,0xAA,0x07,0x80,0xDB,0x02,0x62,0x12,0x00,0x24,0xB0,0xD8,0xB3,0xE4, + 0xDA,0x09,0xC2,0xDB,0xC2,0xDA,0x95,0x00,0x17,0xFD,0x17,0x86,0xC9,0xAB,0x0A,0xB4,0xDE,0x9D,0x40,0xDB,0xB0,0xCC,0x9C,0xB3,0xB0,0xCA,0x89,0xDB,0x05,0x2E,0xE0,0x04, + 0xEF,0x1A,0x94,0xD8,0x0A,0x2F,0x2F,0xDD,0x5B,0xA9,0xE9,0x5E,0xC3,0x83,0xDB,0x00,0xC1,0xD2,0x5D,0xCB,0x08,0x00,0x61,0xD9,0x35,0x00,0x84,0xDA,0x81,0xDB,0x44,0xB6, + 0xBD,0x18,0xB1,0x9A,0x9F,0x92,0x10,0x00,0x31,0x23,0x85,0xDB,0x09,0xA4,0x22,0xAC,0x76,0x88,0xD6,0x94,0xDC,0x16,0x81,0xB7,0x58,0x02,0xCD,0x81,0x35,0x48,0xCD,0xD6, + 0x1D,0x03,0xE6,0xAC,0xEC,0x76,0xB3,0xF6,0xDA,0x13,0x85,0xD9,0x82,0xC5,0x2F,0x50,0xDA,0x90,0xA5,0xBE,0xA3,0x3F,0x45,0x2F,0x03,0x00,0x0D,0xF5,0x16,0x0D,0x49,0x83, + 0xD1,0x2F,0x10,0x98,0xDA,0x3B,0x00,0xDA,0x08,0x84,0x00,0x65,0xE0,0xD8,0xB5,0x94,0xDA,0x03,0xD9,0xF1,0xB8,0xF1,0xDA,0x00,0xCB,0xDB,0xC4,0x5B,0xA0,0xDA,0x39,0x02, + 0x08,0xA6,0x81,0x14,0xDB,0x36,0xB8,0xC1,0xDC,0x31,0xC9,0xAC,0xE2,0xE6,0x20,0xDC,0x14,0xE3,0xE3,0xED,0xB8,0xD7,0x12,0xCD,0xEC,0xA6,0x97,0x98,0x92,0x83,0xDB,0x32, + 0xDD,0x09,0x56,0xE1,0xCE,0xF2,0x50,0xBF,0xA2,0xA1,0xF0,0x0A,0xC4,0xB4,0x98,0xA2,0xA4,0xF0,0x08,0xDB,0x58,0x2F,0xDB,0x7D,0x09,0x0F,0x54,0x0D,0xA2,0xD0,0xD9,0x73, + 0x00,0x01,0xDA,0x65,0x65,0x4B,0xED,0x30,0xD6,0x5A,0x04,0x8D,0x2C,0xDB,0x16,0xD9,0xDB,0x0A,0xF1,0xED,0x50,0xDB,0xDA,0xAC,0x7A,0xC3,0x90,0x81,0x7D,0xE6,0x60,0x46, + 0xDB,0x0C,0xA4,0x70,0xDC,0xC0,0xDF,0x0D,0x98,0x16,0xE2,0xDA,0xD0,0xDB,0x1D,0x00,0x06,0xD6,0xDB,0x14,0xB8,0x5A,0x00,0xAB,0xC2,0xDB,0xC9,0xBB,0x1A,0x85,0xAB,0x74, + 0x9A,0xCF,0xAE,0x28,0xDB,0x61,0xB6,0x39,0xFE,0xDD,0x00,0x83,0xDB,0x46,0xDB,0x04,0x49,0xE1,0xDB,0x65,0xC5,0x69,0x15,0x2F,0x8A,0xB5,0x24,0xDB,0x34,0x09,0x65,0x50, + 0xDA,0x61,0xDB,0x38,0xDA,0x60,0xDB,0xC3,0x14,0xDB,0xCE,0x98,0x8E,0x02,0x0D,0x1B,0x02,0x04,0x60,0xDB,0xB2,0x00,0x07,0x12,0x98,0x00,0x22,0xDC,0x14,0xDF,0xD0,0xB9, + 0x56,0xDB,0x16,0xB4,0x56,0xD8,0x16,0xDB,0x15,0x03,0x44,0xB6,0x2F,0xF2,0x03,0x89,0xB2,0xAA,0x9D,0xA7,0xE4,0xAA,0x29,0xEE,0x0C,0x0E,0x60,0xDB,0xBB,0x16,0x1C,0xBC, + 0x07,0x06,0x5D,0x5D,0x9C,0xAD,0xA9,0xEA,0x56,0x27,0xD5,0x1F,0x03,0x00,0x38,0xD6,0x5E,0x00,0xD9,0x13,0x80,0xDA,0xE4,0xCB,0xC9,0xC1,0xDA,0x7A,0x85,0xD6,0x86,0xD7, + 0x04,0x08,0x85,0xA0,0x00,0xB8,0xDB,0x31,0xAB,0xE9,0x00,0x12,0x24,0x49,0x96,0x69,0x95,0x30,0xDC,0x79,0x95,0x59,0x98,0xDD,0x03,0x04,0x03,0xD5,0x2F,0x03,0xD2,0x04, + 0x46,0xA5,0x8B,0x82,0xB7,0x50,0x49,0x05,0x81,0xE4,0x45,0xAC,0x00,0x36,0xDB,0x1A,0x5D,0x93,0x61,0xDF,0x2B,0x00,0x5D,0x00,0xBC,0x06,0xD8,0x11,0x6E,0x2B,0xE2,0x20, + 0xD6,0x04,0x65,0x29,0x18,0x18,0x48,0xD9,0x51,0x00,0xD9,0xD4,0x30,0xDB,0x61,0xDA,0xE7,0xD8,0xD5,0x14,0xC4,0x77,0xFA,0x50,0x22,0x03,0xDB,0x12,0x47,0x3A,0x7A,0x9F, + 0x00,0xE5,0x4C,0x15,0x98,0xCF,0xD6,0xF2,0x74,0x95,0x30,0x64,0x51,0xD3,0xB0,0xD6,0x94,0xDB,0x30,0xAB,0x58,0x46,0xC6,0x55,0xCD,0x4C,0xBA,0x09,0x27,0xCA,0x9B,0xC2, + 0xE7,0xE8,0x00,0xDB,0x0D,0x6E,0x5D,0x05,0x6E,0x77,0x1C,0x1F,0x61,0xDB,0xE5,0x2F,0xB5,0x16,0xD8,0x16,0xD7,0x12,0x30,0x00,0x28,0xD2,0xE5,0x02,0x00,0x55,0xD4,0x00, + 0x86,0xDA,0xDB,0x03,0xBD,0xB7,0x7A,0xDA,0x05,0x12,0xA9,0xA0,0x1B,0x0D,0x06,0xA1,0xDB,0x0B,0xD6,0x33,0xE7,0x02,0x12,0x0D,0xB0,0xCF,0xD0,0xC2,0xDB,0x50,0xDD,0x29, + 0xE9,0x51,0x00,0x64,0x4F,0x00,0x43,0xA7,0x28,0xEF,0xE6,0x98,0x79,0xD6,0xC2,0xD6,0xD8,0x72,0xA2,0xB0,0xC8,0xF8,0x0E,0x08,0x4D,0x00,0x27,0x22,0x00,0x65,0x69,0x00, + 0x41,0xD9,0x6A,0x53,0x00,0x06,0xD8,0xB6,0x53,0x00,0xDB,0xE1,0xDB,0xB7,0x02,0x0D,0x07,0x0D,0x24,0x24,0x1B,0x26,0x00,0x04,0x80,0xDB,0x31,0x9F,0x08,0xAF,0x02,0x00, + 0x24,0x82,0xE2,0xB9,0xB9,0x81,0xDC,0xE9,0x74,0x00,0xD9,0x0A,0x43,0x00,0xC3,0xDB,0x03,0xD2,0x8F,0x62,0xB6,0xC2,0xC0,0x70,0xDB,0x88,0xF9,0x3B,0xBF,0x09,0x52,0x81, + 0x11,0xD2,0x09,0x24,0x06,0xB0,0x24,0x29,0xE0,0xDA,0x28,0x98,0xDB,0x13,0x4D,0x12,0xB3,0xEF,0x55,0xEE,0x57,0xC3,0xB3,0x18,0x24,0x22,0xD9,0x17,0x24,0x0D,0x00,0x38, + 0xDC,0x40,0x92,0xDB,0x00,0x0D,0x12,0x02,0x9F,0xC1,0x12,0xCF,0xDF,0xB4,0x83,0xDB,0x95,0xDA,0x06,0x41,0xD5,0x0A,0x8C,0xDC,0x0A,0xCF,0xFC,0xB0,0xA7,0xA0,0x79,0xC1, + 0xBC,0x2F,0x16,0xC6,0x11,0xE0,0xD2,0x5D,0xB0,0xD1,0xB8,0x09,0xC4,0x89,0xA0,0xD5,0xB4,0x00,0x6A,0x84,0xB6,0x4D,0x4C,0xD4,0x00,0xEF,0x58,0xEF,0xDA,0x03,0xDB,0xA5, + 0xC1,0x0D,0x22,0xDB,0x0A,0x02,0xB9,0x00,0xC2,0xDF,0x04,0x70,0xDB,0x52,0x02,0xEA,0x7C,0xC4,0x1B,0x24,0x53,0xB7,0xDC,0x03,0x3D,0x95,0x00,0x1D,0x41,0x41,0x8C,0x00, + 0x05,0xDF,0x05,0xDB,0x87,0xDD,0x00,0x09,0x9F,0xF1,0x02,0x38,0xCF,0x4D,0x08,0x12,0xD4,0x12,0x4C,0x04,0xD5,0x14,0xDF,0x13,0x04,0xD5,0xA1,0xDA,0x10,0xDB,0x0C,0xEF, + 0x00,0xF1,0xE0,0x00,0xE1,0xC7,0xA5,0x4C,0x5B,0x5B,0x4C,0x22,0x0A,0x53,0x4C,0x53,0x22,0x00,0x8B,0xDE,0x0E,0x00,0x04,0x10,0xDB,0xDE,0x42,0x00,0xE4,0x7F,0x4E,0xC6, + 0x06,0x22,0xB7,0xD0,0xA3,0xDC,0x00,0x91,0x3D,0x3D,0x4A,0x4A,0x3F,0x58,0x58,0xCB,0xE8,0x03,0xE1,0x32,0x06,0x8C,0x6E,0x38,0xDB,0x24,0xAB,0x28,0xC0,0xC5,0x8D,0x00, + 0x4B,0x29,0x05,0x41,0xD1,0x39,0xB1,0x4C,0xD6,0x05,0x5A,0x4D,0xCE,0x00,0xD8,0x16,0xD9,0x00,0xE0,0xC3,0xC9,0xA8,0xAC,0x14,0x9A,0x9A,0x5B,0x00,0x4C,0xC2,0xDC,0x93, + 0x00,0x22,0x94,0xBE,0xE1,0xDE,0x07,0xC0,0xDB,0x4F,0xB0,0xD7,0xA0,0xDC,0xE8,0x84,0x53,0xA5,0x02,0xDA,0xB4,0x77,0x77,0x6C,0x6C,0x80,0xDD,0x58,0x85,0xBC,0x00,0xE1, + 0x3A,0x00,0xDF,0x0B,0xF3,0x84,0x27,0x64,0x00,0x58,0xC5,0x55,0x07,0xDC,0x00,0x06,0xFC,0x0C,0x00,0x81,0xD4,0x21,0xB0,0x25,0x5A,0xD7,0x0F,0x00,0xD6,0x05,0x59,0xBB, + 0x00,0x7E,0x00,0xD9,0x0D,0x00,0xE0,0x80,0x00,0xCB,0xCE,0xA5,0xAF,0xA5,0x98,0x98,0xC1,0xDC,0x97,0xB0,0x02,0x9A,0xDD,0xB0,0xDF,0x9C,0xBE,0xA2,0x56,0xFD,0x1F,0x9B, + 0x48,0x74,0xDB,0x3F,0x48,0x41,0x04,0xC6,0x00,0x12,0x9F,0x98,0xDC,0x00,0xA3,0xA0,0x6C,0xB6,0xB6,0x2C,0x79,0xBC,0xDA,0x18,0x8D,0x02,0x93,0x85,0x9E,0xB0,0xE0,0xBA, + 0xCB,0x8F,0x9B,0x29,0x8E,0xF2,0xAE,0x00,0x07,0x79,0x0D,0xCA,0xAB,0x65,0xDF,0xB0,0xD2,0x49,0x4D,0x04,0xE1,0x00,0xD6,0x3C,0x00,0x80,0xDB,0xD1,0xE4,0xA0,0xCE,0xB7, + 0x6C,0xA5,0x01,0xAF,0x00,0x98,0x97,0xE6,0x00,0xBD,0x2F,0x00,0xDD,0x08,0xD2,0xBD,0x83,0xB0,0xDB,0xD4,0xEB,0x31,0x24,0xB6,0x4B,0xF0,0xF4,0x98,0x06,0xC1,0xCA,0xB9, + 0x05,0xA0,0xE4,0xB6,0xB8,0xBC,0x26,0x00,0x85,0xC4,0xFB,0xE5,0x05,0x93,0x84,0xCE,0xE5,0xA0,0x84,0xBF,0x50,0xC0,0x45,0xF1,0x0B,0x00,0x6F,0xB4,0x29,0xAD,0x4E,0xD7, + 0x13,0x11,0xB2,0x7E,0x9C,0x72,0x00,0x07,0xDB,0xA0,0x25,0xB1,0xA8,0x30,0x00,0xB7,0xDD,0xC1,0xE0,0xAF,0x45,0xBC,0x53,0x00,0xA4,0x9B,0x60,0xDC,0x41,0x00,0xDB,0x42, + 0xEB,0xEB,0x49,0x00,0x0D,0x3B,0x46,0x4D,0xCF,0x6C,0x59,0x9A,0x98,0x38,0xBD,0xA3,0xBD,0x75,0xB8,0x9D,0x84,0xDC,0x9F,0xC3,0x28,0xDF,0x65,0x90,0x2D,0xC6,0x58,0xBD, + 0x61,0xB2,0x73,0x05,0x85,0xC7,0xDC,0x0D,0x06,0x4C,0x07,0xE9,0x00,0x4D,0xE6,0x00,0xD5,0x09,0x82,0xD7,0xC7,0x00,0x92,0xE8,0xD1,0x9F,0x2C,0xC4,0x00,0xB1,0xB1,0x9C, + 0xDE,0x28,0xBB,0xB2,0xBC,0x9C,0xDE,0x24,0xF9,0x59,0x06,0xEF,0x09,0x12,0x97,0x1F,0xDA,0x0E,0x49,0xB0,0x4F,0xD9,0xF0,0x58,0xDB,0x14,0x8F,0xDA,0xCB,0xDC,0x05,0xBC, + 0xD9,0xEC,0xE2,0xE1,0xDA,0x79,0x9C,0x2C,0xEF,0x46,0x15,0x94,0xCE,0x06,0xD3,0x09,0x28,0xD6,0xD6,0x72,0xAB,0x4C,0x59,0xAB,0x51,0xA0,0xD8,0x92,0xEC,0x00,0xDA,0x02, + 0xCB,0xC9,0xCE,0xCE,0x50,0xDC,0xE5,0x00,0xBB,0x2B,0xDC,0x08,0xD2,0xBA,0x9C,0xDC,0x21,0xF9,0xB3,0x86,0x03,0xD9,0x00,0x98,0xB4,0xAC,0xD9,0x29,0x5B,0x97,0x81,0x62, + 0xA5,0xC4,0xBD,0xE4,0xEF,0xD4,0x61,0xDB,0x34,0x00,0xA1,0xCB,0x7B,0xFA,0x39,0xE8,0xCE,0xEA,0x76,0x00,0x5A,0x89,0xEC,0x09,0x02,0xD1,0x49,0x04,0xE3,0x00,0x0A,0xAD, + 0x46,0x00,0xA9,0x01,0xE8,0x30,0xE0,0xDB,0xDA,0xE3,0x00,0x82,0xDD,0x45,0xF6,0x98,0xDC,0x28,0xDD,0x23,0x83,0xDB,0x00,0x82,0xB0,0xDB,0x98,0xDA,0x13,0x0D,0x87,0xDA, + 0x53,0x20,0xD9,0x29,0xAF,0xDF,0x87,0xC4,0xC7,0xE4,0xA0,0x53,0xEC,0xE2,0xA1,0xC1,0x14,0xBE,0x11,0x67,0xEC,0x77,0x00,0x09,0x3C,0x06,0x58,0xD4,0x47,0x14,0xAE,0x81, + 0xD8,0x4A,0x00,0xAA,0x8F,0x40,0xC9,0xC7,0xC7,0xC9,0xE2,0x00,0x02,0xDD,0x64,0x97,0x4C,0x98,0xDC,0x12,0xCC,0xB1,0x44,0xAE,0xC1,0xA8,0xDB,0x49,0xE8,0x31,0x45,0xB5, + 0x82,0xDA,0xAF,0x98,0xD8,0xA8,0xB1,0xC2,0x70,0xCE,0xDB,0xC3,0xEF,0x4C,0x00,0xDB,0x2C,0xA1,0x11,0x59,0x67,0xE3,0x08,0x04,0xBF,0xB3,0x08,0xCF,0x0F,0x00,0x18,0xD4, + 0x16,0xD7,0x12,0x86,0xDB,0xB4,0x58,0xDA,0x68,0x00,0xC7,0xF0,0xDC,0x95,0x96,0x20,0x4A,0xDB,0x09,0x4A,0xB7,0x28,0xDA,0x28,0xB5,0xA5,0xDA,0x06,0xCE,0xD9,0x20,0xC3, + 0xE1,0xE0,0xD1,0xE8,0x48,0xE8,0xA0,0x08,0x7E,0x7E,0x00,0xE3,0x24,0x8A,0xA9,0x30,0xD9,0x13,0xA9,0x32,0x00,0xAA,0xB4,0xC1,0xDA,0xCB,0xD0,0x00,0xDC,0x23,0xDB,0x03, + 0xDD,0xDC,0x09,0xC2,0xDB,0x74,0x93,0x8F,0x92,0x48,0x3A,0xDB,0x0A,0x52,0xB2,0xB6,0x98,0xB5,0xBC,0x74,0x79,0xDB,0xCB,0x58,0xC3,0xDC,0x2C,0xE8,0x9B,0x2C,0xA6,0x2A, + 0x03,0x38,0xB9,0x26,0xBF,0x08,0xF8,0x0F,0xD4,0x00,0xA9,0xEE,0x00,0xA1,0x00,0xC1,0xDA,0xE1,0xD8,0x00,0xDD,0x26,0xCB,0xBB,0x29,0xC2,0xDB,0x64,0x93,0xB2,0xB6,0x99, + 0xCB,0xEE,0xE1,0x23,0xD6,0xED,0x0A,0xC2,0xDB,0x57,0xCB,0x9C,0xDB,0x30,0xDA,0x88,0xDB,0x07,0xC7,0x7A,0xA4,0x7E,0xC3,0xBA,0x29,0xC1,0x9B,0x92,0x0E,0xC3,0x00,0x01, + 0xD3,0x30,0xD7,0x58,0xD9,0x72,0x9F,0xE0,0xF0,0x00,0xDA,0xAB,0x00,0xDB,0x04,0xDB,0xE1,0xDB,0x29,0xB6,0x5B,0xCB,0xC5,0x4C,0xA7,0xE1,0xDA,0x06,0xD7,0x83,0x38,0xDB, + 0x5E,0xDA,0x71,0x00,0x24,0xB7,0xCE,0x89,0xDB,0x0C,0xDC,0x24,0xBB,0x24,0xAA,0x52,0x00,0xA9,0x0B,0x13,0x00,0xA1,0xA9,0x00,0xAA,0x46,0xD1,0x20,0xDB,0x58,0xDC,0x59, + 0xB8,0x4E,0xDB,0x11,0xE5,0xB5,0x3C,0xA3,0xDA,0x91,0x4E,0xD7,0x10,0x69,0xDF,0x93,0x5C,0x83,0xEB,0xF0,0x2A,0xEF,0xDA,0x93,0x4E,0xB8,0x58,0xDB,0x78,0x00,0x95,0x46, + 0x02,0xDF,0xA1,0x0B,0xA4,0x00,0x34,0xAA,0x41,0x49,0xB0,0xDA,0xB0,0xDB,0x9C,0xDA,0x25,0xB5,0x28,0x9B,0x80,0x8D,0xFE,0xAC,0xDA,0x20,0xE4,0xDB,0x24,0x97,0x47,0x9F, + 0x46,0x3A,0xF2,0xC6,0xAC,0xF1,0x81,0xDD,0x84,0x89,0xA1,0xDE,0x30,0xE0,0x58,0xE3,0x42,0xD0,0x00,0xD0,0xD9,0x5C,0x36,0xE4,0xB4,0xE1,0x98,0xB4,0x93,0xDB,0x94,0xB4, + 0x52,0x8E,0x4F,0xB5,0xD6,0xD8,0x11,0xE1,0xD9,0x05,0x81,0xDB,0x3D,0x13,0x42,0x44,0x21,0xDD,0x29,0xBB,0x58,0xDE,0x4A,0x9A,0x96,0xE1,0x1C,0x00,0xC1,0xE5,0x04,0x41, + 0xE8,0x2D,0x00,0xCD,0x21,0x30,0x18,0x8C,0x91,0x2B,0xE9,0x49,0x8D,0x16,0xD8,0x09,0x22,0xCA,0xB2,0x3D,0xE6,0x60,0xBC,0xDB,0x11,0x00,0x72,0xAF,0x24,0x95,0xD2,0xE2, + 0x42,0xDE,0x6B,0x8A,0x94,0xE1,0x2C,0xE2,0x2C,0xE4,0x2C,0xE6,0x27,0xE8,0x08,0xC0,0xEB,0xB0,0xEE,0x8A,0x0B,0x44,0xD1,0x4B,0x20,0x2F,0xC6,0x37,0x04,0xD6,0xEF,0xC1, + 0x84,0xD8,0xF5,0xF7,0x16,0xE5,0xB1,0xE1,0xD5,0x06,0xC9,0x93,0x1E,0xF9,0xB1,0x05,0xBD,0x59,0xEA,0x5D,0xC5,0x65,0xC0,0x61,0xE2,0x61,0xE3,0x61,0xE4,0x61,0xE6,0x38, + 0xE8,0x4C,0xEB,0x13,0x22,0x00,0xE1,0x82,0xC3,0x69,0x00,0xFB,0x25,0x00,0x33,0x45,0xC7,0x74,0xAD,0xFD,0xAC,0x13,0xAB,0xD3,0xCD,0x97,0xCE,0x00,0xD7,0x10,0x24,0x05, + 0xDB,0x28,0x00,0x31,0xDE,0x2D,0x60,0x22,0x39,0xBF,0x4B,0xCC,0xCB,0xAF,0xE3,0x0A,0xC6,0x2B,0xE6,0x0A,0xE7,0x09,0x02,0xE9,0x60,0xEC,0x98,0xEF,0x26,0x00,0xC2,0xBE, + 0x2A,0x00,0x6C,0x1E,0xCB,0x26,0x00,0x4F,0xC4,0xFF,0xF6,0xD3,0x16,0xDF,0xB1,0x40,0xD6,0x53,0x9D,0xB9,0xE1,0xDA,0xEF,0x83,0x60,0xDB,0x90,0x22,0x4F,0x4F,0xAA,0x58, + 0x60,0x94,0xDF,0x22,0x83,0xE1,0xE2,0x0B,0xC6,0x24,0x98,0xA1,0xE7,0x69,0x00,0xB7,0x42,0xEC,0x64,0x00,0xB1,0x2D,0x00,0x3D,0x1F,0xD8,0x2D,0xCF,0x54,0x02,0xA1,0xD3, + 0x41,0xD4,0x61,0xD5,0x61,0xD7,0x32,0xDE,0xD1,0x78,0x31,0x4F,0x38,0xD5,0x40,0x9C,0xDB,0x11,0xE9,0x9E,0x15,0xD6,0xD6,0xE3,0x16,0xE5,0x16,0xE7,0x17,0x00,0x84,0x96, + 0xC1,0xED,0x10,0x00,0x98,0x86,0xA5,0x00,0x21,0x96,0x33,0x5E,0x3F,0x47,0x3A,0xE6,0x91,0x0D,0xF0,0x7F,0x58,0x8F,0x90,0x5C,0xDB,0x11,0xF8,0xFC,0x24,0x9C,0xC8,0xA5, + 0xCC,0x29,0xC2,0xEA,0x25,0x00,0x5B,0x0C,0xC4,0x00,0x26,0x23,0x53,0x00,0x91,0x44,0x24,0x1E,0x83,0x90,0x38,0x04,0xDB,0xE1,0xE0,0x39,0xC8,0x24,0x9F,0x00,0xC2,0x95, + 0xE3,0x04,0x10,0x00,0x22,0xD4,0x00,0x92,0x1E,0xC8,0x26,0x3E,0x7A,0xE3,0x00,0xC2,0xCE,0x07,0x70,0xDB,0x8B,0x3A,0x4B,0x0D,0x00,0x3A,0xB0,0x47,0x61,0x00,0xBB,0x1F, + 0x11,0x1D,0x10,0x38,0xD0,0x21,0x1B,0x70,0xA4,0x83,0x00,0xD3,0x81,0x28,0xDB,0x24,0x00,0x4F,0x02,0x00,0x3C,0x0A,0xF1,0x0D,0xB1,0x0F,0x73,0x13,0xCE,0x1A,0xCB,0xD3, + 0x9C,0x90,0xF0,0x5A,0x3B,0x85,0xDB,0x90,0x00,0x07,0x07,0xAC,0x42,0x7C,0x5A,0x2F,0x72,0x1F,0x12,0x3D,0x19,0xC0,0x07,0xFE,0xDB,0x13,0xA3,0x42,0x1B,0xA3,0x00,0xA6, + 0xD7,0x19,0xAF,0x69,0xA3,0x23,0x82,0xE0,0x1F,0x95,0x08,0x17,0x02,0xDB,0x76,0x35,0x07,0x00,0x4F,0xB9,0x00,0xE3,0x46,0xE3,0x66,0xE1,0x10,0xD8,0x7E,0x98,0x0B,0x2F, + 0x97,0x08,0x7E,0x5F,0x02,0xEE,0x00,0x01,0xD3,0xDB,0x09,0xE0,0x00,0x34,0xC2,0xD3,0x01,0xBF,0xDB,0x09,0xE0,0x00,0x34,0xC2,0xD3,0x03,0x0C,0xDB,0x20,0x00,0x10, +}; diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/apple.png b/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/apple.png new file mode 100644 index 0000000..fc30924 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/apple.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/convpng.ini b/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/convpng.ini new file mode 100644 index 0000000..4662a3b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/convpng.ini @@ -0,0 +1,5 @@ +#GroupC : all_gfx +#Compression : zx7 +#PNGImages : + apple + diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/main.c b/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/main.c new file mode 100644 index 0000000..e269869 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/main.c @@ -0,0 +1,45 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +/* Include the graphics file */ +#include "gfx/all_gfx.h" + +/* Put all your code here */ +void main(void) { + /* Define our sprite */ + gfx_sprite_t *apple; + + /* Allocate space for the decompressed sprite */ + apple = gfx_MallocSprite(apple_width, apple_height); /* Same as: gfx_AllocSprite(apple_width, apple_height, malloc) */ + + /* Decompress the sprite */ + zx7_Decompress(apple, apple_compressed); + + /* Initialize the 8bpp graphics */ + gfx_Begin(); + + /* Set up the palette */ + gfx_SetPalette(all_gfx_pal, sizeof_all_gfx_pal, 0); + gfx_FillScreen(0); + + /* Draw the decompressed sprite */ + gfx_Sprite(apple, (LCD_WIDTH - 220) / 2, (LCD_HEIGHT - 240) / 2); + + /* Wait for a key */ + while (!os_GetCSC()); + + /* Please, don't forget to free the apple image memory :) */ + free(apple); + + gfx_End(); +} diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_keys/autotester.json b/frontends/calculator/CEdev/examples/gfx_sprite_keys/autotester.json new file mode 100644 index 0000000..b4ba88a --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_keys/autotester.json @@ -0,0 +1,31 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "hashWait|1", + "key|clear", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "Make sure the sprite is displayed", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "F9825FDD" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_keys/makefile b/frontends/calculator/CEdev/examples/gfx_sprite_keys/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_keys/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_keys/readme.md b/frontends/calculator/CEdev/examples/gfx_sprite_keys/readme.md new file mode 100644 index 0000000..9ee2c1b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_keys/readme.md @@ -0,0 +1,10 @@ +### GraphX/KeypadC Sprite with Keys + +Demonstrates using the GraphX and KeypadC library together to move a sprite + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_keys/screenshot.gif b/frontends/calculator/CEdev/examples/gfx_sprite_keys/screenshot.gif new file mode 100644 index 0000000..41a7b4b Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_sprite_keys/screenshot.gif differ diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/convpng.ini b/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/convpng.ini new file mode 100644 index 0000000..7bd3158 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/convpng.ini @@ -0,0 +1,4 @@ +#GroupC : logo_gfx +#TransparentColor : 255,255,255 +#PNGImages : + ubuntu diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/logo_gfx.c b/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/logo_gfx.c new file mode 100644 index 0000000..4086cdc --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/logo_gfx.c @@ -0,0 +1,195 @@ +// convpng +#include +#include "logo_gfx.h" + +uint16_t logo_gfx_pal[189] = { + 0xFFFF, // 00 :: rgb(255,255,255) + 0x7E20, // 01 :: rgb(251,139,1) + 0xFE20, // 02 :: rgb(251,140,4) + 0xFFFF, // 03 :: rgb(255,253,253) + 0x6800, // 04 :: rgb(212,2,2) + 0xE821, // 05 :: rgb(213,11,11) + 0x7E20, // 06 :: rgb(251,139,2) + 0x7E20, // 07 :: rgb(251,139,0) + 0x7920, // 08 :: rgb(244,72,0) + 0xFFFF, // 09 :: rgb(255,254,254) + 0xFFFF, // 10 :: rgb(255,254,253) + 0xFECC, // 11 :: rgb(252,182,97) + 0x7A90, // 12 :: rgb(249,163,128) + 0x7FDC, // 13 :: rgb(254,244,231) + 0xF985, // 14 :: rgb(245,100,40) + 0x7F9A, // 15 :: rgb(253,225,213) + 0x7FDD, // 16 :: rgb(253,242,242) + 0x6D6B, // 17 :: rgb(226,90,90) + 0xFFBC, // 18 :: rgb(254,239,233) + 0xF921, // 19 :: rgb(244,77,7) + 0x7EED, // 20 :: rgb(252,187,107) + 0xFF99, // 21 :: rgb(254,231,203) + 0xFFFE, // 22 :: rgb(255,253,250) + 0xFF16, // 23 :: rgb(251,199,177) + 0xF921, // 24 :: rgb(244,78,8) + 0xFE87, // 25 :: rgb(251,167,61) + 0xFFBA, // 26 :: rgb(254,237,216) + 0x7F31, // 27 :: rgb(253,204,143) + 0xFF76, // 28 :: rgb(253,222,183) + 0x7B7B, // 29 :: rgb(249,220,220) + 0xFAF7, // 30 :: rgb(244,192,192) + 0x7FDD, // 31 :: rgb(252,241,241) + 0xF18C, // 32 :: rgb(229,102,102) + 0xFE87, // 33 :: rgb(251,164,56) + 0x7B5A, // 34 :: rgb(247,212,212) + 0xFF76, // 35 :: rgb(253,221,181) + 0xF652, // 36 :: rgb(237,151,151) + 0x7652, // 37 :: rgb(236,145,145) + 0x6D29, // 38 :: rgb(224,74,74) + 0xE800, // 39 :: rgb(212,3,3) + 0x718C, // 40 :: rgb(228,98,98) + 0xFF54, // 41 :: rgb(253,214,165) + 0x7673, // 42 :: rgb(237,153,153) + 0xFF32, // 43 :: rgb(252,205,148) + 0x7EA8, // 44 :: rgb(251,169,68) + 0x6CC6, // 45 :: rgb(219,48,48) + 0x7FBA, // 46 :: rgb(254,234,211) + 0xE842, // 47 :: rgb(215,20,20) + 0xFB7B, // 48 :: rgb(250,224,224) + 0xFF77, // 49 :: rgb(253,224,187) + 0xF652, // 50 :: rgb(237,149,149) + 0x7F75, // 51 :: rgb(253,218,175) + 0x7FFE, // 52 :: rgb(254,249,249) + 0x7EEC, // 53 :: rgb(252,185,102) + 0x7FBD, // 54 :: rgb(252,236,236) + 0xFFFF, // 55 :: rgb(255,253,251) + 0x7EED, // 56 :: rgb(252,188,109) + 0x7FFF, // 57 :: rgb(254,252,252) + 0xFAF7, // 58 :: rgb(243,189,189) + 0x7B9B, // 59 :: rgb(250,225,225) + 0x7AD2, // 60 :: rgb(250,179,149) + 0xED09, // 61 :: rgb(224,70,70) + 0xECA5, // 62 :: rgb(218,43,43) + 0xFAF4, // 63 :: rgb(250,190,165) + 0x6D4A, // 64 :: rgb(225,82,82) + 0xED08, // 65 :: rgb(223,69,69) + 0x6D08, // 66 :: rgb(222,63,63) + 0x76D6, // 67 :: rgb(242,178,178) + 0xECC6, // 68 :: rgb(220,51,51) + 0xF1AD, // 69 :: rgb(229,109,109) + 0xFFDD, // 70 :: rgb(254,246,235) + 0x718C, // 71 :: rgb(228,97,97) + 0xFFBC, // 72 :: rgb(254,239,234) + 0xFF77, // 73 :: rgb(253,223,187) + 0x76D6, // 74 :: rgb(242,179,179) + 0x6863, // 75 :: rgb(216,26,26) + 0x7AB1, // 76 :: rgb(249,169,136) + 0xE843, // 77 :: rgb(215,21,21) + 0xFF9C, // 78 :: rgb(251,230,230) + 0xF9A6, // 79 :: rgb(245,108,51) + 0x7F97, // 80 :: rgb(253,225,189) + 0x7942, // 81 :: rgb(244,81,13) + 0x7FBA, // 82 :: rgb(254,236,215) + 0xFE21, // 83 :: rgb(251,143,11) + 0x7FBC, // 84 :: rgb(251,234,234) + 0xFB18, // 85 :: rgb(245,197,197) + 0x76D6, // 86 :: rgb(242,177,177) + 0x71AD, // 87 :: rgb(229,106,106) + 0xFAB2, // 88 :: rgb(249,176,144) + 0x7F9A, // 89 :: rgb(253,227,217) + 0x7FDD, // 90 :: rgb(254,242,237) + 0x7FDE, // 91 :: rgb(253,243,243) + 0x7AB1, // 92 :: rgb(249,171,139) + 0xFFBB, // 93 :: rgb(254,239,221) + 0xF694, // 94 :: rgb(240,167,167) + 0xFF7A, // 95 :: rgb(253,224,213) + 0x7F0E, // 96 :: rgb(253,193,117) + 0xFA6F, // 97 :: rgb(249,159,121) + 0x7FFE, // 98 :: rgb(255,251,247) + 0xFEAA, // 99 :: rgb(251,175,80) + 0x7694, // 100 :: rgb(239,161,161) + 0x7AF3, // 101 :: rgb(250,186,160) + 0xE801, // 102 :: rgb(213,5,5) + 0xFA6F, // 103 :: rgb(249,159,122) + 0x7FDB, // 104 :: rgb(254,241,224) + 0xF920, // 105 :: rgb(244,75,4) + 0x7A8F, // 106 :: rgb(249,160,123) + 0x7694, // 107 :: rgb(239,163,163) + 0xE822, // 108 :: rgb(214,14,14) + 0x6D29, // 109 :: rgb(223,71,71) + 0xFF55, // 110 :: rgb(253,215,169) + 0x7A8F, // 111 :: rgb(249,161,124) + 0xFF32, // 112 :: rgb(253,207,151) + 0x7FBB, // 113 :: rgb(253,233,224) + 0xF694, // 114 :: rgb(239,165,165) + 0xFFBC, // 115 :: rgb(254,238,231) + 0xFB39, // 116 :: rgb(247,208,208) + 0x7B38, // 117 :: rgb(246,201,201) + 0x6842, // 118 :: rgb(214,16,16) + 0x7FFF, // 119 :: rgb(254,251,251) + 0xFB7B, // 120 :: rgb(250,223,223) + 0xF16C, // 121 :: rgb(227,95,95) + 0x7672, // 122 :: rgb(237,152,152) + 0x7631, // 123 :: rgb(235,138,138) + 0xFE87, // 124 :: rgb(251,165,60) + 0xFFDD, // 125 :: rgb(254,245,240) + 0xFF33, // 126 :: rgb(252,208,154) + 0x7F79, // 127 :: rgb(252,220,207) + 0x7E41, // 128 :: rgb(251,144,12) + 0x7E42, // 129 :: rgb(251,146,19) + 0x7F36, // 130 :: rgb(251,202,182) + 0x7FDC, // 131 :: rgb(254,243,230) + 0x7963, // 132 :: rgb(244,89,24) + 0x7F0E, // 133 :: rgb(252,193,119) + 0xFE87, // 134 :: rgb(251,164,57) + 0x7A2B, // 135 :: rgb(247,138,92) + 0xFA6E, // 136 :: rgb(249,157,119) + 0xFF9B, // 137 :: rgb(253,229,219) + 0x7920, // 138 :: rgb(244,74,3) + 0xFFDE, // 139 :: rgb(254,246,243) + 0xF964, // 140 :: rgb(245,95,32) + 0xF921, // 141 :: rgb(244,76,6) + 0xFAD3, // 142 :: rgb(250,183,155) + 0xFAD3, // 143 :: rgb(250,182,154) + 0xF985, // 144 :: rgb(245,103,44) + 0x7FFE, // 145 :: rgb(255,252,250) + 0x7FFE, // 146 :: rgb(255,251,250) + 0x6800, // 147 :: rgb(212,1,1) + 0x7B18, // 148 :: rgb(245,195,195) + 0x7AD2, // 149 :: rgb(250,178,148) + 0x7ECB, // 150 :: rgb(251,179,87) + 0x7EA8, // 151 :: rgb(251,169,69) + 0xFEAA, // 152 :: rgb(251,176,82) + 0x7652, // 153 :: rgb(236,146,146) + 0xF942, // 154 :: rgb(244,83,16) + 0xF9E9, // 155 :: rgb(246,126,76) + 0xFFDD, // 156 :: rgb(254,246,242) + 0x71EF, // 157 :: rgb(231,120,120) + 0xFB39, // 158 :: rgb(247,206,206) + 0xFF37, // 159 :: rgb(252,208,190) + 0x6D08, // 160 :: rgb(222,65,65) + 0x7FDE, // 161 :: rgb(253,244,244) + 0x7A4D, // 162 :: rgb(248,147,106) + 0xFB5A, // 163 :: rgb(248,216,216) + 0x7F79, // 164 :: rgb(253,220,206) + 0xFAD3, // 165 :: rgb(250,181,153) + 0x7F15, // 166 :: rgb(251,196,173) + 0x7F31, // 167 :: rgb(252,201,137) + 0xF9C8, // 168 :: rgb(246,116,62) + 0xFAB2, // 169 :: rgb(250,176,145) + 0xFF10, // 170 :: rgb(252,198,131) + 0x7A6E, // 171 :: rgb(248,155,117) + 0xFF9B, // 172 :: rgb(253,232,224) + 0xFFBB, // 173 :: rgb(254,240,221) + 0x7920, // 174 :: rgb(244,74,2) + 0x7FDC, // 175 :: rgb(254,243,229) + 0xFE21, // 176 :: rgb(251,141,6) + 0x7F53, // 177 :: rgb(253,210,155) + 0xF9E9, // 178 :: rgb(247,127,77) + 0xFF58, // 179 :: rgb(252,213,197) + 0xFE87, // 180 :: rgb(251,164,58) + 0xFF54, // 181 :: rgb(253,213,164) + 0xFEA9, // 182 :: rgb(251,174,78) + 0xFE21, // 183 :: rgb(251,143,10) + 0x79E8, // 184 :: rgb(246,120,67) + 0x7E87, // 185 :: rgb(251,163,54) + 0xFFDD, // 186 :: rgb(254,248,240) + 0x7F57, // 187 :: rgb(252,210,193) + 0x6800, // 188 :: rgb(212,0,0) +}; \ No newline at end of file diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/logo_gfx.h b/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/logo_gfx.h new file mode 100644 index 0000000..eba6d22 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/logo_gfx.h @@ -0,0 +1,17 @@ +// convpng +// this file contains all the graphics sources for easy inclusion in a project +#ifndef __logo_gfx__ +#define __logo_gfx__ +#include + +#define logo_gfx_transparent_color_index 0 + +#define ubuntu_width 32 +#define ubuntu_height 32 +#define ubuntu_size 1026 +extern uint8_t ubuntu_data[1026]; +#define ubuntu ((gfx_sprite_t*)ubuntu_data) +#define sizeof_logo_gfx_pal 378 +extern uint16_t logo_gfx_pal[189]; + +#endif diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/ubuntu.c b/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/ubuntu.c new file mode 100644 index 0000000..ac4f3b9 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/ubuntu.c @@ -0,0 +1,40 @@ +// convpng +#include +#include "logo_gfx.h" + +// 8 bpp image +uint8_t ubuntu_data[1026] = { + 32,32, // width,height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x43,0x25,0x1D,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x11,0xBC,0xBC,0x05,0x1E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x59,0x3F,0x4C,0x0C,0x8E,0x12,0xA3,0xBC,0xBC,0xBC,0xBC,0x26,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x0E,0x08,0x08,0x08,0x08,0x08,0xA6,0x9E,0xBC,0xBC,0xBC,0xBC,0x41,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x00,0x89,0x13,0x08,0x08,0x08,0x08,0x08,0xA2,0x09,0xA0,0xBC,0xBC,0x93,0x56,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x81,0x0D,0x00,0x88,0x08,0x08,0x08,0x08,0x08,0x13,0xA4,0xA1,0x99,0x9D,0x94,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x01,0x07,0x0B,0x00,0x7D,0x84,0x69,0x8C,0x90,0x18,0x08,0x9A,0xA5,0x9C,0x92,0x0F,0x5C,0x09,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5D,0x53,0x07,0x07,0x06,0x15,0x00,0x5F,0x5A,0x00,0x00,0x91,0x9F,0x9B,0x08,0x08,0x8D,0x08,0x08,0x3C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x07,0x07,0x07,0x07,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x8F,0x8A,0x08,0x08,0x08,0x51,0x48,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAD,0x01,0x07,0x07,0x07,0x7C,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x08,0x08,0x08,0x08,0x0C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB5,0x07,0x07,0x07,0x06,0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x4F,0x08,0x08,0x08,0x0E,0x09,0x00,0x00, + 0x00,0x00,0x00,0x8B,0xA9,0xAB,0xBB,0x00,0x14,0x07,0x07,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x65,0x08,0x08,0x08,0x08,0x12,0x00,0x00, + 0x00,0x00,0x0A,0xA8,0x08,0x08,0xAE,0x17,0xBA,0xB7,0x07,0xAA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x6F,0x6A,0x67,0x61,0x71,0x00,0x00, + 0x00,0x00,0x7F,0x08,0x08,0x08,0x08,0xB8,0x00,0xB4,0x07,0xB1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x0F,0x08,0x08,0x08,0x08,0xB2,0x00,0xB9,0x07,0xA7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5B,0x64,0x6B,0x72,0x5E,0x54,0x00,0x00, + 0x00,0x00,0x09,0x87,0x08,0x08,0x18,0xB3,0xAF,0xB0,0x07,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4A,0xBC,0xBC,0xBC,0xBC,0x4E,0x00,0x00, + 0x00,0x00,0x00,0x0A,0x17,0x95,0xAC,0x16,0xB6,0x07,0x07,0x80,0x46,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xBC,0xBC,0xBC,0x4B,0x03,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x07,0x07,0x07,0x07,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3A,0x04,0xBC,0xBC,0xBC,0x45,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x86,0x07,0x07,0x07,0x07,0x2B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x4D,0xBC,0xBC,0xBC,0x27,0x22,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x49,0x07,0x07,0x07,0x07,0x33,0x00,0x34,0x09,0x00,0x00,0x00,0x10,0x7B,0x05,0xBC,0xBC,0xBC,0xBC,0x20,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x07,0x07,0x2C,0x09,0x39,0x2D,0x44,0x47,0x57,0x6D,0x6C,0xBC,0xBC,0x04,0x05,0xBC,0x3E,0x1F,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x0B,0x02,0x2E,0x00,0x32,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0x76,0x7A,0x10,0x77,0x78,0x3B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x36,0x2F,0xBC,0xBC,0xBC,0xBC,0xBC,0x66,0x75,0x62,0x70,0x60,0x50,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2A,0x04,0xBC,0xBC,0xBC,0xBC,0xBC,0x79,0x09,0x63,0x07,0x07,0x01,0x29,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x24,0x28,0x3D,0x42,0x11,0x55,0x68,0x07,0x07,0x07,0x07,0x21,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0x06,0x07,0x07,0x07,0x19,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x07,0x07,0x02,0x1C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x1B,0x1A,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/ubuntu.png b/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/ubuntu.png new file mode 100644 index 0000000..d041515 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/ubuntu.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/main.c b/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/main.c new file mode 100644 index 0000000..0939a9d --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/main.c @@ -0,0 +1,89 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +/* Include the sprite data */ +#include "gfx/logo_gfx.h" + +/* Function for drawing the main sprite */ +void draw_sprite(int x, int y) { + /* Fill the screen with color index 0 + /* Note that this is a super inefficient way to + /* redraw, but it demonstrates a simple way of clearing past data */ + gfx_FillScreen(0); + + /* Draw a bunch of different styled sprites on the screen */ + gfx_Sprite(ubuntu, x, y); + + /* Copy the buffer to the screen */ + gfx_BlitBuffer(); // This is the same as gfx_Blit(gfx_buffer) +} + +void main(void) { + bool right; + bool left; + bool up; + bool down; + kb_key_t arrows; + + /* Coordinates used for the sprite */ + int x, y; + + /* Initialize the 8bpp graphics */ + gfx_Begin(); + + /* Set up the palette for our sprites */ + gfx_SetPalette(logo_gfx_pal, sizeof_logo_gfx_pal, 0); + + /* Start at 0, 0 */ + x = 0; + y = 0; + + gfx_SetDrawBuffer(); + + draw_sprite(x, y); + + do { + /* Scan the keypad to update kb_Data */ + kb_Scan(); + + /* Get the arrow key statuses */ + arrows = kb_Data[7]; + + /* Convert the data to booleans so we can read them easier */ + right = arrows & kb_Right; + left = arrows & kb_Left; + down = arrows & kb_Down; + up = arrows & kb_Up; + + /* If any arrows are pressed, do this */ + if (arrows) { + /* Do different directions depending on the keypress */ + if (right) { + x++; + } + if (left) { + x--; + } + if (down) { + y++; + } + if (up) { + y--; + } + draw_sprite(x, y); + } + } while (kb_Data[6] != kb_Clear); + + /* Close the graphics */ + gfx_End(); +} diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate/autotester.json b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/autotester.json new file mode 100644 index 0000000..3a75731 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/autotester.json @@ -0,0 +1,33 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|300", + "hash|1", + "key|enter", + "delay|300", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "Make sure the rotated sprites are displayed properly", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "14098FC" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate/makefile b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate/readme.md b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/readme.md new file mode 100644 index 0000000..79a6b5d --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/readme.md @@ -0,0 +1,10 @@ +### GraphX Sprite Rotation Demo + +Demonstrates rotating and flipping sprites. + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate/screenshot.png b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/screenshot.png new file mode 100644 index 0000000..fdcbe14 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/convpng.ini b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/convpng.ini new file mode 100644 index 0000000..10642ba --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/convpng.ini @@ -0,0 +1,4 @@ +#GroupC : logo_gfx +#PNGImages : + ubuntu + diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/logo_gfx.c b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/logo_gfx.c new file mode 100644 index 0000000..4e62af6 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/logo_gfx.c @@ -0,0 +1,196 @@ +// convpng +#include +#include "logo_gfx.h" + +uint16_t logo_gfx_pal[190] = { + 0xFFFF, // 00 :: rgb(255,255,255) + 0xE821, // 01 :: rgb(213,11,11) + 0x7E20, // 02 :: rgb(251,139,2) + 0x7E20, // 03 :: rgb(251,139,1) + 0xFFFF, // 04 :: rgb(255,254,254) + 0xFFFF, // 05 :: rgb(255,255,254) + 0x6800, // 06 :: rgb(212,2,2) + 0x6800, // 07 :: rgb(212,0,0) + 0x7E20, // 08 :: rgb(251,139,0) + 0x7920, // 09 :: rgb(244,72,0) + 0xFE20, // 10 :: rgb(251,140,4) + 0xFFFF, // 11 :: rgb(255,253,253) + 0xFFFF, // 12 :: rgb(255,254,253) + 0xFECC, // 13 :: rgb(252,182,97) + 0x7A90, // 14 :: rgb(249,163,128) + 0x7FDC, // 15 :: rgb(254,244,231) + 0xF985, // 16 :: rgb(245,100,40) + 0x7F9A, // 17 :: rgb(253,225,213) + 0x7FDD, // 18 :: rgb(253,242,242) + 0x6D6B, // 19 :: rgb(226,90,90) + 0xFFBC, // 20 :: rgb(254,239,233) + 0xF921, // 21 :: rgb(244,77,7) + 0x7EED, // 22 :: rgb(252,187,107) + 0xFF99, // 23 :: rgb(254,231,203) + 0xFFFE, // 24 :: rgb(255,253,250) + 0xFF16, // 25 :: rgb(251,199,177) + 0xF921, // 26 :: rgb(244,78,8) + 0xFE87, // 27 :: rgb(251,167,61) + 0xFFBA, // 28 :: rgb(254,237,216) + 0x7F31, // 29 :: rgb(253,204,143) + 0xFF76, // 30 :: rgb(253,222,183) + 0x7B7B, // 31 :: rgb(249,220,220) + 0xFAF7, // 32 :: rgb(244,192,192) + 0x7FDD, // 33 :: rgb(252,241,241) + 0xF18C, // 34 :: rgb(229,102,102) + 0xFE87, // 35 :: rgb(251,164,56) + 0x7B5A, // 36 :: rgb(247,212,212) + 0xFF76, // 37 :: rgb(253,221,181) + 0xF652, // 38 :: rgb(237,151,151) + 0x7652, // 39 :: rgb(236,145,145) + 0x6D29, // 40 :: rgb(224,74,74) + 0xE800, // 41 :: rgb(212,3,3) + 0x718C, // 42 :: rgb(228,98,98) + 0xFF54, // 43 :: rgb(253,214,165) + 0xFB7B, // 44 :: rgb(250,224,224) + 0x7673, // 45 :: rgb(237,153,153) + 0xFF32, // 46 :: rgb(252,205,148) + 0x7EA8, // 47 :: rgb(251,169,68) + 0x6CC6, // 48 :: rgb(219,48,48) + 0x7FBA, // 49 :: rgb(254,234,211) + 0xE842, // 50 :: rgb(215,20,20) + 0xFF77, // 51 :: rgb(253,224,187) + 0xF652, // 52 :: rgb(237,149,149) + 0x7F75, // 53 :: rgb(253,218,175) + 0x7FFE, // 54 :: rgb(254,249,249) + 0x7EEC, // 55 :: rgb(252,185,102) + 0x7FBD, // 56 :: rgb(252,236,236) + 0xFFFF, // 57 :: rgb(255,253,251) + 0x7EED, // 58 :: rgb(252,188,109) + 0x7FFF, // 59 :: rgb(254,252,252) + 0xFAF7, // 60 :: rgb(243,189,189) + 0x7B9B, // 61 :: rgb(250,225,225) + 0x7AD2, // 62 :: rgb(250,179,149) + 0xED09, // 63 :: rgb(224,70,70) + 0xECA5, // 64 :: rgb(218,43,43) + 0xFAF4, // 65 :: rgb(250,190,165) + 0x6D4A, // 66 :: rgb(225,82,82) + 0xED08, // 67 :: rgb(223,69,69) + 0x6D08, // 68 :: rgb(222,63,63) + 0x76D6, // 69 :: rgb(242,178,178) + 0xECC6, // 70 :: rgb(220,51,51) + 0xF1AD, // 71 :: rgb(229,109,109) + 0xFFDD, // 72 :: rgb(254,246,235) + 0x718C, // 73 :: rgb(228,97,97) + 0xFFBC, // 74 :: rgb(254,239,234) + 0xFF77, // 75 :: rgb(253,223,187) + 0x76D6, // 76 :: rgb(242,179,179) + 0x6863, // 77 :: rgb(216,26,26) + 0x7AB1, // 78 :: rgb(249,169,136) + 0xE843, // 79 :: rgb(215,21,21) + 0xFF9C, // 80 :: rgb(251,230,230) + 0xF9A6, // 81 :: rgb(245,108,51) + 0x7F97, // 82 :: rgb(253,225,189) + 0x7942, // 83 :: rgb(244,81,13) + 0x7FBA, // 84 :: rgb(254,236,215) + 0xFE21, // 85 :: rgb(251,143,11) + 0x7FBC, // 86 :: rgb(251,234,234) + 0xFB18, // 87 :: rgb(245,197,197) + 0x76D6, // 88 :: rgb(242,177,177) + 0x71AD, // 89 :: rgb(229,106,106) + 0xFAB2, // 90 :: rgb(249,176,144) + 0x7F9A, // 91 :: rgb(253,227,217) + 0x7FDD, // 92 :: rgb(254,242,237) + 0x7FDE, // 93 :: rgb(253,243,243) + 0x7AB1, // 94 :: rgb(249,171,139) + 0xFFBB, // 95 :: rgb(254,239,221) + 0xF694, // 96 :: rgb(240,167,167) + 0x7AF3, // 97 :: rgb(250,186,160) + 0xFF7A, // 98 :: rgb(253,224,213) + 0x7F0E, // 99 :: rgb(253,193,117) + 0xFA6F, // 100 :: rgb(249,159,121) + 0x7FFE, // 101 :: rgb(255,251,247) + 0xFEAA, // 102 :: rgb(251,175,80) + 0x7694, // 103 :: rgb(239,161,161) + 0xE801, // 104 :: rgb(213,5,5) + 0xFA6F, // 105 :: rgb(249,159,122) + 0x7FDB, // 106 :: rgb(254,241,224) + 0xF920, // 107 :: rgb(244,75,4) + 0x7A8F, // 108 :: rgb(249,160,123) + 0x7694, // 109 :: rgb(239,163,163) + 0xE822, // 110 :: rgb(214,14,14) + 0x6D29, // 111 :: rgb(223,71,71) + 0xFF55, // 112 :: rgb(253,215,169) + 0x7A8F, // 113 :: rgb(249,161,124) + 0xFF32, // 114 :: rgb(253,207,151) + 0x7FBB, // 115 :: rgb(253,233,224) + 0xF694, // 116 :: rgb(239,165,165) + 0xFFBC, // 117 :: rgb(254,238,231) + 0xFB39, // 118 :: rgb(247,208,208) + 0x7B38, // 119 :: rgb(246,201,201) + 0x6842, // 120 :: rgb(214,16,16) + 0x7FFF, // 121 :: rgb(254,251,251) + 0xFB7B, // 122 :: rgb(250,223,223) + 0xF16C, // 123 :: rgb(227,95,95) + 0x7672, // 124 :: rgb(237,152,152) + 0x7631, // 125 :: rgb(235,138,138) + 0xFE87, // 126 :: rgb(251,165,60) + 0xFFDD, // 127 :: rgb(254,245,240) + 0xFF33, // 128 :: rgb(252,208,154) + 0x7F79, // 129 :: rgb(252,220,207) + 0x7E41, // 130 :: rgb(251,144,12) + 0x7E42, // 131 :: rgb(251,146,19) + 0x7F36, // 132 :: rgb(251,202,182) + 0x7FDC, // 133 :: rgb(254,243,230) + 0x7963, // 134 :: rgb(244,89,24) + 0x7F0E, // 135 :: rgb(252,193,119) + 0xFE87, // 136 :: rgb(251,164,57) + 0x7A2B, // 137 :: rgb(247,138,92) + 0xFA6E, // 138 :: rgb(249,157,119) + 0xFF9B, // 139 :: rgb(253,229,219) + 0x7920, // 140 :: rgb(244,74,3) + 0xFFDE, // 141 :: rgb(254,246,243) + 0xF964, // 142 :: rgb(245,95,32) + 0xF921, // 143 :: rgb(244,76,6) + 0xFAD3, // 144 :: rgb(250,183,155) + 0xFAD3, // 145 :: rgb(250,182,154) + 0xF985, // 146 :: rgb(245,103,44) + 0x7FFE, // 147 :: rgb(255,252,250) + 0x7FFE, // 148 :: rgb(255,251,250) + 0x6800, // 149 :: rgb(212,1,1) + 0x7B18, // 150 :: rgb(245,195,195) + 0x7AD2, // 151 :: rgb(250,178,148) + 0x7ECB, // 152 :: rgb(251,179,87) + 0x7EA8, // 153 :: rgb(251,169,69) + 0xFEAA, // 154 :: rgb(251,176,82) + 0x7652, // 155 :: rgb(236,146,146) + 0xF942, // 156 :: rgb(244,83,16) + 0xF9E9, // 157 :: rgb(246,126,76) + 0xFFDD, // 158 :: rgb(254,246,242) + 0x71EF, // 159 :: rgb(231,120,120) + 0xFB39, // 160 :: rgb(247,206,206) + 0xFF37, // 161 :: rgb(252,208,190) + 0x6D08, // 162 :: rgb(222,65,65) + 0x7FDE, // 163 :: rgb(253,244,244) + 0x7A4D, // 164 :: rgb(248,147,106) + 0xFB5A, // 165 :: rgb(248,216,216) + 0x7F79, // 166 :: rgb(253,220,206) + 0xFAD3, // 167 :: rgb(250,181,153) + 0x7F15, // 168 :: rgb(251,196,173) + 0x7F31, // 169 :: rgb(252,201,137) + 0xF9C8, // 170 :: rgb(246,116,62) + 0xFAB2, // 171 :: rgb(250,176,145) + 0xFF10, // 172 :: rgb(252,198,131) + 0x7A6E, // 173 :: rgb(248,155,117) + 0xFF9B, // 174 :: rgb(253,232,224) + 0xFFBB, // 175 :: rgb(254,240,221) + 0x7920, // 176 :: rgb(244,74,2) + 0x7FDC, // 177 :: rgb(254,243,229) + 0xFE21, // 178 :: rgb(251,141,6) + 0x7F53, // 179 :: rgb(253,210,155) + 0xF9E9, // 180 :: rgb(247,127,77) + 0xFF58, // 181 :: rgb(252,213,197) + 0xFE87, // 182 :: rgb(251,164,58) + 0xFF54, // 183 :: rgb(253,213,164) + 0xFEA9, // 184 :: rgb(251,174,78) + 0xFE21, // 185 :: rgb(251,143,10) + 0x79E8, // 186 :: rgb(246,120,67) + 0x7E87, // 187 :: rgb(251,163,54) + 0xFFDD, // 188 :: rgb(254,248,240) + 0x7F57, // 189 :: rgb(252,210,193) +}; \ No newline at end of file diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/logo_gfx.h b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/logo_gfx.h new file mode 100644 index 0000000..28d30ce --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/logo_gfx.h @@ -0,0 +1,15 @@ +// convpng +// this file contains all the graphics sources for easy inclusion in a project +#ifndef __logo_gfx__ +#define __logo_gfx__ +#include + +#define ubuntu_width 32 +#define ubuntu_height 32 +#define ubuntu_size 1026 +extern uint8_t ubuntu_data[1026]; +#define ubuntu ((gfx_sprite_t*)ubuntu_data) +#define sizeof_logo_gfx_pal 380 +extern uint16_t logo_gfx_pal[190]; + +#endif diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/ubuntu.c b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/ubuntu.c new file mode 100644 index 0000000..f2060ae --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/ubuntu.c @@ -0,0 +1,40 @@ +// convpng +#include +#include "logo_gfx.h" + +// 8 bpp image +uint8_t ubuntu_data[1026] = { + 32,32, // width,height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0B,0x45,0x27,0x1F,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x13,0x07,0x07,0x01,0x20,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x5B,0x41,0x4E,0x0E,0x90,0x14,0xA5,0x07,0x07,0x07,0x07,0x28,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0x09,0x09,0x09,0x09,0x09,0xA8,0xA0,0x07,0x07,0x07,0x07,0x43,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0x00,0x8B,0x15,0x09,0x09,0x09,0x09,0x09,0xA4,0x04,0xA2,0x07,0x07,0x95,0x58,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x83,0x0F,0x00,0x8A,0x09,0x09,0x09,0x09,0x09,0x15,0xA6,0xA3,0x9B,0x9F,0x96,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x03,0x08,0x0D,0x00,0x7F,0x86,0x6B,0x8E,0x92,0x1A,0x09,0x9C,0xA7,0x9E,0x94,0x11,0x5E,0x04,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5F,0x55,0x08,0x08,0x02,0x17,0x00,0x62,0x5C,0x05,0x00,0x93,0xA1,0x9D,0x09,0x09,0x8F,0x09,0x09,0x3E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x9A,0x08,0x08,0x08,0x08,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x91,0x8C,0x09,0x09,0x09,0x53,0x4A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAF,0x03,0x08,0x08,0x08,0x7E,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x09,0x09,0x09,0x09,0x0E,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB7,0x08,0x08,0x08,0x02,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x51,0x09,0x09,0x09,0x10,0x04,0x00,0x00, + 0x00,0x00,0x00,0x8D,0xAB,0xAD,0xBD,0x05,0x16,0x08,0x08,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x09,0x09,0x09,0x09,0x14,0x00,0x00, + 0x00,0x00,0x0C,0xAA,0x09,0x09,0xB0,0x19,0xBC,0xB9,0x08,0xAC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x75,0x71,0x6C,0x69,0x64,0x73,0x00,0x00, + 0x00,0x00,0x81,0x09,0x09,0x09,0x09,0xBA,0x00,0xB6,0x08,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x11,0x09,0x09,0x09,0x09,0xB4,0x00,0xBB,0x08,0xA9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5D,0x67,0x6D,0x74,0x60,0x56,0x00,0x00, + 0x00,0x00,0x04,0x89,0x09,0x09,0x1A,0xB5,0xB1,0xB2,0x08,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x07,0x07,0x07,0x07,0x50,0x00,0x00, + 0x00,0x00,0x00,0x0C,0x19,0x97,0xAE,0x18,0xB8,0x08,0x08,0x82,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x07,0x07,0x07,0x4D,0x0B,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x08,0x08,0x08,0x08,0x37,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x06,0x07,0x07,0x07,0x47,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x88,0x08,0x08,0x08,0x08,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x4F,0x07,0x07,0x07,0x29,0x24,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4B,0x08,0x08,0x08,0x08,0x35,0x00,0x36,0x04,0x00,0x00,0x00,0x12,0x7D,0x01,0x07,0x07,0x07,0x07,0x22,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x3A,0x08,0x08,0x2F,0x04,0x3B,0x30,0x46,0x49,0x59,0x6F,0x6E,0x07,0x07,0x06,0x01,0x07,0x40,0x21,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x39,0x0D,0x0A,0x31,0x00,0x34,0x07,0x07,0x07,0x07,0x07,0x07,0x78,0x7C,0x12,0x79,0x7A,0x3D,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x33,0x00,0x38,0x32,0x07,0x07,0x07,0x07,0x07,0x68,0x77,0x65,0x72,0x63,0x52,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2D,0x06,0x07,0x07,0x07,0x07,0x07,0x7B,0x04,0x66,0x08,0x08,0x03,0x2B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x26,0x2A,0x3F,0x44,0x13,0x57,0x6A,0x08,0x08,0x08,0x08,0x23,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x02,0x08,0x08,0x08,0x1B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x08,0x08,0x0A,0x1E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x25,0x1D,0x1C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/ubuntu.png b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/ubuntu.png new file mode 100644 index 0000000..d041515 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/ubuntu.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/main.c b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/main.c new file mode 100644 index 0000000..9e4611b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/main.c @@ -0,0 +1,37 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include "gfx/logo_gfx.h" + +void main(void) { + /* Create a buffer the same size as the ubuntu sprite */ + gfx_UninitedSprite(sprite_buffer, ubuntu_width, ubuntu_height); + + gfx_Begin(); + + /* Setup the palette used by the sprites*/ + gfx_SetPalette(logo_gfx_pal, sizeof_logo_gfx_pal, 0); + + gfx_Sprite(ubuntu, 42, 42); + gfx_Sprite(gfx_FlipSpriteY(ubuntu, sprite_buffer), 74, 74); + gfx_Sprite(gfx_RotateSpriteC(ubuntu, sprite_buffer), 106, 106); + + /* Draw these ones without any clipping. Clipping refers to wether or not when it hits the edge of the window if */ + /* the sprite will be draw partially onscreen. These routines are usually faster, because edge detection doesn't occur */ + gfx_Sprite_NoClip(gfx_RotateSpriteCC(ubuntu, sprite_buffer), 138, 138); + gfx_Sprite_NoClip(gfx_RotateSpriteHalf(ubuntu, sprite_buffer), 170, 170); + + /* Wait for a key to be pressed */ + while (!os_GetCSC()); + + /* Close the graphics */ + gfx_End(); +} diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/autotester.json b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/autotester.json new file mode 100644 index 0000000..c8d5d5c --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/autotester.json @@ -0,0 +1,33 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|8000", + "hash|1", + "key|enter", + "delay|300", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "Make sure the rotated and scaled sprites are displayed properly", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "27D90BD4" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/makefile b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/readme.md b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/readme.md new file mode 100644 index 0000000..036af22 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/readme.md @@ -0,0 +1,9 @@ +### GraphX Sprite Rotation and Scaling Demo + +Demonstrates rotating sprites and scaling sprites when rotating. + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/screenshot.gif b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/screenshot.gif new file mode 100644 index 0000000..e1fca96 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/screenshot.gif differ diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/convpng.ini b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/convpng.ini new file mode 100644 index 0000000..10642ba --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/convpng.ini @@ -0,0 +1,4 @@ +#GroupC : logo_gfx +#PNGImages : + ubuntu + diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/logo_gfx.c b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/logo_gfx.c new file mode 100644 index 0000000..4e62af6 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/logo_gfx.c @@ -0,0 +1,196 @@ +// convpng +#include +#include "logo_gfx.h" + +uint16_t logo_gfx_pal[190] = { + 0xFFFF, // 00 :: rgb(255,255,255) + 0xE821, // 01 :: rgb(213,11,11) + 0x7E20, // 02 :: rgb(251,139,2) + 0x7E20, // 03 :: rgb(251,139,1) + 0xFFFF, // 04 :: rgb(255,254,254) + 0xFFFF, // 05 :: rgb(255,255,254) + 0x6800, // 06 :: rgb(212,2,2) + 0x6800, // 07 :: rgb(212,0,0) + 0x7E20, // 08 :: rgb(251,139,0) + 0x7920, // 09 :: rgb(244,72,0) + 0xFE20, // 10 :: rgb(251,140,4) + 0xFFFF, // 11 :: rgb(255,253,253) + 0xFFFF, // 12 :: rgb(255,254,253) + 0xFECC, // 13 :: rgb(252,182,97) + 0x7A90, // 14 :: rgb(249,163,128) + 0x7FDC, // 15 :: rgb(254,244,231) + 0xF985, // 16 :: rgb(245,100,40) + 0x7F9A, // 17 :: rgb(253,225,213) + 0x7FDD, // 18 :: rgb(253,242,242) + 0x6D6B, // 19 :: rgb(226,90,90) + 0xFFBC, // 20 :: rgb(254,239,233) + 0xF921, // 21 :: rgb(244,77,7) + 0x7EED, // 22 :: rgb(252,187,107) + 0xFF99, // 23 :: rgb(254,231,203) + 0xFFFE, // 24 :: rgb(255,253,250) + 0xFF16, // 25 :: rgb(251,199,177) + 0xF921, // 26 :: rgb(244,78,8) + 0xFE87, // 27 :: rgb(251,167,61) + 0xFFBA, // 28 :: rgb(254,237,216) + 0x7F31, // 29 :: rgb(253,204,143) + 0xFF76, // 30 :: rgb(253,222,183) + 0x7B7B, // 31 :: rgb(249,220,220) + 0xFAF7, // 32 :: rgb(244,192,192) + 0x7FDD, // 33 :: rgb(252,241,241) + 0xF18C, // 34 :: rgb(229,102,102) + 0xFE87, // 35 :: rgb(251,164,56) + 0x7B5A, // 36 :: rgb(247,212,212) + 0xFF76, // 37 :: rgb(253,221,181) + 0xF652, // 38 :: rgb(237,151,151) + 0x7652, // 39 :: rgb(236,145,145) + 0x6D29, // 40 :: rgb(224,74,74) + 0xE800, // 41 :: rgb(212,3,3) + 0x718C, // 42 :: rgb(228,98,98) + 0xFF54, // 43 :: rgb(253,214,165) + 0xFB7B, // 44 :: rgb(250,224,224) + 0x7673, // 45 :: rgb(237,153,153) + 0xFF32, // 46 :: rgb(252,205,148) + 0x7EA8, // 47 :: rgb(251,169,68) + 0x6CC6, // 48 :: rgb(219,48,48) + 0x7FBA, // 49 :: rgb(254,234,211) + 0xE842, // 50 :: rgb(215,20,20) + 0xFF77, // 51 :: rgb(253,224,187) + 0xF652, // 52 :: rgb(237,149,149) + 0x7F75, // 53 :: rgb(253,218,175) + 0x7FFE, // 54 :: rgb(254,249,249) + 0x7EEC, // 55 :: rgb(252,185,102) + 0x7FBD, // 56 :: rgb(252,236,236) + 0xFFFF, // 57 :: rgb(255,253,251) + 0x7EED, // 58 :: rgb(252,188,109) + 0x7FFF, // 59 :: rgb(254,252,252) + 0xFAF7, // 60 :: rgb(243,189,189) + 0x7B9B, // 61 :: rgb(250,225,225) + 0x7AD2, // 62 :: rgb(250,179,149) + 0xED09, // 63 :: rgb(224,70,70) + 0xECA5, // 64 :: rgb(218,43,43) + 0xFAF4, // 65 :: rgb(250,190,165) + 0x6D4A, // 66 :: rgb(225,82,82) + 0xED08, // 67 :: rgb(223,69,69) + 0x6D08, // 68 :: rgb(222,63,63) + 0x76D6, // 69 :: rgb(242,178,178) + 0xECC6, // 70 :: rgb(220,51,51) + 0xF1AD, // 71 :: rgb(229,109,109) + 0xFFDD, // 72 :: rgb(254,246,235) + 0x718C, // 73 :: rgb(228,97,97) + 0xFFBC, // 74 :: rgb(254,239,234) + 0xFF77, // 75 :: rgb(253,223,187) + 0x76D6, // 76 :: rgb(242,179,179) + 0x6863, // 77 :: rgb(216,26,26) + 0x7AB1, // 78 :: rgb(249,169,136) + 0xE843, // 79 :: rgb(215,21,21) + 0xFF9C, // 80 :: rgb(251,230,230) + 0xF9A6, // 81 :: rgb(245,108,51) + 0x7F97, // 82 :: rgb(253,225,189) + 0x7942, // 83 :: rgb(244,81,13) + 0x7FBA, // 84 :: rgb(254,236,215) + 0xFE21, // 85 :: rgb(251,143,11) + 0x7FBC, // 86 :: rgb(251,234,234) + 0xFB18, // 87 :: rgb(245,197,197) + 0x76D6, // 88 :: rgb(242,177,177) + 0x71AD, // 89 :: rgb(229,106,106) + 0xFAB2, // 90 :: rgb(249,176,144) + 0x7F9A, // 91 :: rgb(253,227,217) + 0x7FDD, // 92 :: rgb(254,242,237) + 0x7FDE, // 93 :: rgb(253,243,243) + 0x7AB1, // 94 :: rgb(249,171,139) + 0xFFBB, // 95 :: rgb(254,239,221) + 0xF694, // 96 :: rgb(240,167,167) + 0x7AF3, // 97 :: rgb(250,186,160) + 0xFF7A, // 98 :: rgb(253,224,213) + 0x7F0E, // 99 :: rgb(253,193,117) + 0xFA6F, // 100 :: rgb(249,159,121) + 0x7FFE, // 101 :: rgb(255,251,247) + 0xFEAA, // 102 :: rgb(251,175,80) + 0x7694, // 103 :: rgb(239,161,161) + 0xE801, // 104 :: rgb(213,5,5) + 0xFA6F, // 105 :: rgb(249,159,122) + 0x7FDB, // 106 :: rgb(254,241,224) + 0xF920, // 107 :: rgb(244,75,4) + 0x7A8F, // 108 :: rgb(249,160,123) + 0x7694, // 109 :: rgb(239,163,163) + 0xE822, // 110 :: rgb(214,14,14) + 0x6D29, // 111 :: rgb(223,71,71) + 0xFF55, // 112 :: rgb(253,215,169) + 0x7A8F, // 113 :: rgb(249,161,124) + 0xFF32, // 114 :: rgb(253,207,151) + 0x7FBB, // 115 :: rgb(253,233,224) + 0xF694, // 116 :: rgb(239,165,165) + 0xFFBC, // 117 :: rgb(254,238,231) + 0xFB39, // 118 :: rgb(247,208,208) + 0x7B38, // 119 :: rgb(246,201,201) + 0x6842, // 120 :: rgb(214,16,16) + 0x7FFF, // 121 :: rgb(254,251,251) + 0xFB7B, // 122 :: rgb(250,223,223) + 0xF16C, // 123 :: rgb(227,95,95) + 0x7672, // 124 :: rgb(237,152,152) + 0x7631, // 125 :: rgb(235,138,138) + 0xFE87, // 126 :: rgb(251,165,60) + 0xFFDD, // 127 :: rgb(254,245,240) + 0xFF33, // 128 :: rgb(252,208,154) + 0x7F79, // 129 :: rgb(252,220,207) + 0x7E41, // 130 :: rgb(251,144,12) + 0x7E42, // 131 :: rgb(251,146,19) + 0x7F36, // 132 :: rgb(251,202,182) + 0x7FDC, // 133 :: rgb(254,243,230) + 0x7963, // 134 :: rgb(244,89,24) + 0x7F0E, // 135 :: rgb(252,193,119) + 0xFE87, // 136 :: rgb(251,164,57) + 0x7A2B, // 137 :: rgb(247,138,92) + 0xFA6E, // 138 :: rgb(249,157,119) + 0xFF9B, // 139 :: rgb(253,229,219) + 0x7920, // 140 :: rgb(244,74,3) + 0xFFDE, // 141 :: rgb(254,246,243) + 0xF964, // 142 :: rgb(245,95,32) + 0xF921, // 143 :: rgb(244,76,6) + 0xFAD3, // 144 :: rgb(250,183,155) + 0xFAD3, // 145 :: rgb(250,182,154) + 0xF985, // 146 :: rgb(245,103,44) + 0x7FFE, // 147 :: rgb(255,252,250) + 0x7FFE, // 148 :: rgb(255,251,250) + 0x6800, // 149 :: rgb(212,1,1) + 0x7B18, // 150 :: rgb(245,195,195) + 0x7AD2, // 151 :: rgb(250,178,148) + 0x7ECB, // 152 :: rgb(251,179,87) + 0x7EA8, // 153 :: rgb(251,169,69) + 0xFEAA, // 154 :: rgb(251,176,82) + 0x7652, // 155 :: rgb(236,146,146) + 0xF942, // 156 :: rgb(244,83,16) + 0xF9E9, // 157 :: rgb(246,126,76) + 0xFFDD, // 158 :: rgb(254,246,242) + 0x71EF, // 159 :: rgb(231,120,120) + 0xFB39, // 160 :: rgb(247,206,206) + 0xFF37, // 161 :: rgb(252,208,190) + 0x6D08, // 162 :: rgb(222,65,65) + 0x7FDE, // 163 :: rgb(253,244,244) + 0x7A4D, // 164 :: rgb(248,147,106) + 0xFB5A, // 165 :: rgb(248,216,216) + 0x7F79, // 166 :: rgb(253,220,206) + 0xFAD3, // 167 :: rgb(250,181,153) + 0x7F15, // 168 :: rgb(251,196,173) + 0x7F31, // 169 :: rgb(252,201,137) + 0xF9C8, // 170 :: rgb(246,116,62) + 0xFAB2, // 171 :: rgb(250,176,145) + 0xFF10, // 172 :: rgb(252,198,131) + 0x7A6E, // 173 :: rgb(248,155,117) + 0xFF9B, // 174 :: rgb(253,232,224) + 0xFFBB, // 175 :: rgb(254,240,221) + 0x7920, // 176 :: rgb(244,74,2) + 0x7FDC, // 177 :: rgb(254,243,229) + 0xFE21, // 178 :: rgb(251,141,6) + 0x7F53, // 179 :: rgb(253,210,155) + 0xF9E9, // 180 :: rgb(247,127,77) + 0xFF58, // 181 :: rgb(252,213,197) + 0xFE87, // 182 :: rgb(251,164,58) + 0xFF54, // 183 :: rgb(253,213,164) + 0xFEA9, // 184 :: rgb(251,174,78) + 0xFE21, // 185 :: rgb(251,143,10) + 0x79E8, // 186 :: rgb(246,120,67) + 0x7E87, // 187 :: rgb(251,163,54) + 0xFFDD, // 188 :: rgb(254,248,240) + 0x7F57, // 189 :: rgb(252,210,193) +}; \ No newline at end of file diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/logo_gfx.h b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/logo_gfx.h new file mode 100644 index 0000000..28d30ce --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/logo_gfx.h @@ -0,0 +1,15 @@ +// convpng +// this file contains all the graphics sources for easy inclusion in a project +#ifndef __logo_gfx__ +#define __logo_gfx__ +#include + +#define ubuntu_width 32 +#define ubuntu_height 32 +#define ubuntu_size 1026 +extern uint8_t ubuntu_data[1026]; +#define ubuntu ((gfx_sprite_t*)ubuntu_data) +#define sizeof_logo_gfx_pal 380 +extern uint16_t logo_gfx_pal[190]; + +#endif diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/ubuntu.c b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/ubuntu.c new file mode 100644 index 0000000..f2060ae --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/ubuntu.c @@ -0,0 +1,40 @@ +// convpng +#include +#include "logo_gfx.h" + +// 8 bpp image +uint8_t ubuntu_data[1026] = { + 32,32, // width,height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0B,0x45,0x27,0x1F,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x13,0x07,0x07,0x01,0x20,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x5B,0x41,0x4E,0x0E,0x90,0x14,0xA5,0x07,0x07,0x07,0x07,0x28,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0x09,0x09,0x09,0x09,0x09,0xA8,0xA0,0x07,0x07,0x07,0x07,0x43,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0x00,0x8B,0x15,0x09,0x09,0x09,0x09,0x09,0xA4,0x04,0xA2,0x07,0x07,0x95,0x58,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x83,0x0F,0x00,0x8A,0x09,0x09,0x09,0x09,0x09,0x15,0xA6,0xA3,0x9B,0x9F,0x96,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x03,0x08,0x0D,0x00,0x7F,0x86,0x6B,0x8E,0x92,0x1A,0x09,0x9C,0xA7,0x9E,0x94,0x11,0x5E,0x04,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5F,0x55,0x08,0x08,0x02,0x17,0x00,0x62,0x5C,0x05,0x00,0x93,0xA1,0x9D,0x09,0x09,0x8F,0x09,0x09,0x3E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x9A,0x08,0x08,0x08,0x08,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x91,0x8C,0x09,0x09,0x09,0x53,0x4A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAF,0x03,0x08,0x08,0x08,0x7E,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x09,0x09,0x09,0x09,0x0E,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB7,0x08,0x08,0x08,0x02,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x51,0x09,0x09,0x09,0x10,0x04,0x00,0x00, + 0x00,0x00,0x00,0x8D,0xAB,0xAD,0xBD,0x05,0x16,0x08,0x08,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x09,0x09,0x09,0x09,0x14,0x00,0x00, + 0x00,0x00,0x0C,0xAA,0x09,0x09,0xB0,0x19,0xBC,0xB9,0x08,0xAC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x75,0x71,0x6C,0x69,0x64,0x73,0x00,0x00, + 0x00,0x00,0x81,0x09,0x09,0x09,0x09,0xBA,0x00,0xB6,0x08,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x11,0x09,0x09,0x09,0x09,0xB4,0x00,0xBB,0x08,0xA9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5D,0x67,0x6D,0x74,0x60,0x56,0x00,0x00, + 0x00,0x00,0x04,0x89,0x09,0x09,0x1A,0xB5,0xB1,0xB2,0x08,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x07,0x07,0x07,0x07,0x50,0x00,0x00, + 0x00,0x00,0x00,0x0C,0x19,0x97,0xAE,0x18,0xB8,0x08,0x08,0x82,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x07,0x07,0x07,0x4D,0x0B,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x08,0x08,0x08,0x08,0x37,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x06,0x07,0x07,0x07,0x47,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x88,0x08,0x08,0x08,0x08,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x4F,0x07,0x07,0x07,0x29,0x24,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4B,0x08,0x08,0x08,0x08,0x35,0x00,0x36,0x04,0x00,0x00,0x00,0x12,0x7D,0x01,0x07,0x07,0x07,0x07,0x22,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x3A,0x08,0x08,0x2F,0x04,0x3B,0x30,0x46,0x49,0x59,0x6F,0x6E,0x07,0x07,0x06,0x01,0x07,0x40,0x21,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x39,0x0D,0x0A,0x31,0x00,0x34,0x07,0x07,0x07,0x07,0x07,0x07,0x78,0x7C,0x12,0x79,0x7A,0x3D,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x33,0x00,0x38,0x32,0x07,0x07,0x07,0x07,0x07,0x68,0x77,0x65,0x72,0x63,0x52,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2D,0x06,0x07,0x07,0x07,0x07,0x07,0x7B,0x04,0x66,0x08,0x08,0x03,0x2B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x26,0x2A,0x3F,0x44,0x13,0x57,0x6A,0x08,0x08,0x08,0x08,0x23,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x02,0x08,0x08,0x08,0x1B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x08,0x08,0x0A,0x1E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x25,0x1D,0x1C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/ubuntu.png b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/ubuntu.png new file mode 100644 index 0000000..d041515 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/ubuntu.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/main.c b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/main.c new file mode 100644 index 0000000..7e9de0b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/main.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include "gfx/logo_gfx.h" + +/* Create some buffers used for storing the rotated and scaled sprites */ +gfx_UninitedSprite(rotate_sprite, ubuntu_width, ubuntu_height); + +void main(void) { + uint8_t x; + + /* Start the graphics */ + gfx_Begin(); + + /* Setup the palette used by the sprites*/ + gfx_SetPalette(logo_gfx_pal, sizeof_logo_gfx_pal, 0); + + /* Loop for a bunch of times */ + for (x = 0; ++x;) { + /* Rotate the sprite */ + gfx_RotateSprite(ubuntu, rotate_sprite, x); + + /* Rotate and scale the sprite */ + gfx_RotatedScaledSprite_NoClip(ubuntu, 0, 0, 256 - x, 128); + + /* Draw the new rotated buffer sprite */ + gfx_Sprite_NoClip(rotate_sprite, LCD_WIDTH / 2, LCD_HEIGHT / 2); + } + + /* Wait for a key to be pressed */ + while (!os_GetCSC()); + + /* Close the graphics */ + gfx_End(); +} diff --git a/frontends/calculator/CEdev/examples/gfx_sprites_appvar/autotester.json b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/autotester.json new file mode 100644 index 0000000..d246692 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/autotester.json @@ -0,0 +1,31 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp", + "src/gfx/var_gfx.8xv" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "hashWait|1", + "key|enter", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "Make sure the sprites are displayed properly", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "A3ED6457" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44", "43BF8092", "5ACF1C01" ] + } + } +} diff --git a/frontends/calculator/CEdev/examples/gfx_sprites_appvar/makefile b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_sprites_appvar/readme.md b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/readme.md new file mode 100644 index 0000000..428bc83 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/readme.md @@ -0,0 +1,10 @@ +### GraphX Appvars Demo + +Demonstrates easily extracting and using images placed into an appvar + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/gfx_sprites_appvar/screenshot.png b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/screenshot.png new file mode 100644 index 0000000..dcbcdf7 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/all_gfx.c b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/all_gfx.c new file mode 100644 index 0000000..9f77108 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/all_gfx.c @@ -0,0 +1,4 @@ +// convpng +#include +#include "all_gfx.h" + diff --git a/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/all_gfx.h b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/all_gfx.h new file mode 100644 index 0000000..37f0480 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/all_gfx.h @@ -0,0 +1,8 @@ +// convpng +// this file contains all the graphics sources for easy inclusion in a project +#ifndef __all_gfx__ +#define __all_gfx__ +#include + + +#endif diff --git a/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/convpng.ini b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/convpng.ini new file mode 100644 index 0000000..8dc89f4 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/convpng.ini @@ -0,0 +1,16 @@ +// #AppvarC -- The name of the appvar we are making +// #IncludePalettes -- List of comma separated groups with palettes + +#AppvarC : var_gfx +#IncludePalettes : all_gfx +#PNGImages : + ubuntu + mint + +// The main conversion group + +#GroupC : all_gfx +#PNGImages : + ubuntu + mint + diff --git a/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/mint.c b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/mint.c new file mode 100644 index 0000000..9f77108 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/mint.c @@ -0,0 +1,4 @@ +// convpng +#include +#include "all_gfx.h" + diff --git a/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/mint.png b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/mint.png new file mode 100644 index 0000000..f626cd0 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/mint.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/ubuntu.c b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/ubuntu.c new file mode 100644 index 0000000..9f77108 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/ubuntu.c @@ -0,0 +1,4 @@ +// convpng +#include +#include "all_gfx.h" + diff --git a/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/ubuntu.png b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/ubuntu.png new file mode 100644 index 0000000..d041515 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/ubuntu.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.8xv b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.8xv new file mode 100644 index 0000000..e6bb018 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.8xv differ diff --git a/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.c b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.c new file mode 100644 index 0000000..b0d3117 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.c @@ -0,0 +1,27 @@ +// convpng +#include +#include "var_gfx.h" + +#include +uint8_t *var_gfx[3] = { + (uint8_t*)0, + (uint8_t*)1026, + (uint8_t*)2052, +}; + +bool var_gfx_init(void) { + unsigned int data, i; + ti_var_t appvar; + + ti_CloseAll(); + + appvar = ti_Open("var_gfx", "r"); + data = (unsigned int)ti_GetDataPtr(appvar) - (unsigned int)var_gfx[0]; + for (i = 0; i < var_gfx_num; i++) { + var_gfx[i] += data; + } + + ti_CloseAll(); + + return (bool)appvar; +} diff --git a/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.h b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.h new file mode 100644 index 0000000..49afcb0 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.h @@ -0,0 +1,18 @@ +// convpng +// this file contains all the graphics sources for easy inclusion in a project +#ifndef __var_gfx__ +#define __var_gfx__ +#include + +#include + +#define var_gfx_num 3 + +extern uint8_t *var_gfx[3]; +#define ubuntu ((gfx_sprite_t*)var_gfx[0]) +#define mint ((gfx_sprite_t*)var_gfx[1]) +#define sizeof_all_gfx_pal 512 +#define all_gfx_pal ((uint16_t*)var_gfx[2]) +bool var_gfx_init(void); + +#endif diff --git a/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/main.c b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/main.c new file mode 100644 index 0000000..7c18c3a --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/main.c @@ -0,0 +1,42 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +/* Include the sprite data */ +#include "gfx/all_gfx.h" +#include "gfx/var_gfx.h" + +void main(void) { + /* This function is automatically created by convpng */ + /* Simply call it to load in graphics from the appvar */ + /* The common function name is _init */ + var_gfx_init(); + + /* Initialize the graphics */ + gfx_Begin(); + + /* Set up the palette for the sprite */ + gfx_SetPalette(all_gfx_pal, sizeof_all_gfx_pal, 0); + + /* Fill the screen with color index 0 */ + gfx_FillScreen(0); + + /* Draw the sprites directly from the appvar */ + gfx_Sprite(ubuntu, LCD_WIDTH / 2 - 16, LCD_HEIGHT / 2 - 16); + gfx_Sprite(mint, LCD_WIDTH / 2 + 16, LCD_HEIGHT / 2 - 16); + + /* Wait for a key to be pressed */ + while (!os_GetCSC()); + + /* Close the graphics */ + gfx_End(); +} diff --git a/frontends/calculator/CEdev/examples/gfx_template/iconc.png b/frontends/calculator/CEdev/examples/gfx_template/iconc.png new file mode 100644 index 0000000..125ca62 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_template/iconc.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_template/makefile b/frontends/calculator/CEdev/examples/gfx_template/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_template/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_template/readme.md b/frontends/calculator/CEdev/examples/gfx_template/readme.md new file mode 100644 index 0000000..9d807e1 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_template/readme.md @@ -0,0 +1,12 @@ +### GraphX Template + +You can clone this directory for your own GraphX-based projects. + +To add code, fill in the begin, end, step, and draw functions in main.c. You can also create your own .c and .h files and add them to the directory; the Makefile included in this template will automatically find and compile the new .c files. + +In addition, you can also add your own .asm files, which will be detected and +added appropriately to the proper segment. + +--- + +This template is a part of the C SDK Toolchain for use on the CE. diff --git a/frontends/calculator/CEdev/examples/gfx_template/src/main.c b/frontends/calculator/CEdev/examples/gfx_template/src/main.c new file mode 100644 index 0000000..2904b0a --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_template/src/main.c @@ -0,0 +1,64 @@ +/* + *-------------------------------------- + * Program Name: + * Author: + * License: + * Description: + *-------------------------------------- +*/ + +/* Keep these headers */ +#include +#include +#include +#include + +/* Standard headers (recommended) */ +#include +#include +#include +#include + +#include + +/* Put your function prototypes here */ +void begin(); +void end(); +bool step(); +void draw(); + +/* Put all your globals here */ +bool partial_redraw; + +void main() { + begin(); // No rendering allowed! + gfx_Begin(); + gfx_SetDrawBuffer(); // Draw to the buffer to avoid rendering artifats + + while (step()) { // No rendering allowed in step! + if (partial_redraw) // Only want to redraw part of the previous frame? + gfx_BlitScreen(); // Copy previous frame as a base for this frame + draw(); // As little non-rendering logic as possible + gfx_SwapDraw(); // Queue the buffered frame to be displayed + } + + gfx_End(); + end(); +} + +/* Put other functions here */ +void begin() { + /* Implement me! */ +} + +void end() { + /* Implement me! */ +} + +bool step() { + /* Implement me! */ +} + +void draw() { + /* Implement me! */ +} diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap/autotester.json b/frontends/calculator/CEdev/examples/gfx_tilemap/autotester.json new file mode 100644 index 0000000..30af614 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap/autotester.json @@ -0,0 +1,43 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "hashWait|1", + "delay|100", + "key|right", + "key|right", + "key|down", + "key|down", + "hashWait|2", + "key|enter", + "hashWait|3" + ], + "hashes": { + "1": { + "description": "Initial sprite map state (top left)", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "3C2D7C36" ] + }, + "2": { + "description": "Moving a bit to the bottom right", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "F0C14AE9" ] + }, + "3": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap/makefile b/frontends/calculator/CEdev/examples/gfx_tilemap/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap/readme.md b/frontends/calculator/CEdev/examples/gfx_tilemap/readme.md new file mode 100644 index 0000000..298dc25 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap/readme.md @@ -0,0 +1,10 @@ +### GraphX Simple Tilemap Demo + +An example of tilemaping using a sequence of tiles and the keypad. + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap/screenshot.gif b/frontends/calculator/CEdev/examples/gfx_tilemap/screenshot.gif new file mode 100644 index 0000000..741067c Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_tilemap/screenshot.gif differ diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/convpng.ini b/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/convpng.ini new file mode 100644 index 0000000..b8068e4 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/convpng.ini @@ -0,0 +1,5 @@ +#GroupC : tiles_gfx +#TransparentColor : 255,201,14,255 +#Tilemap : 16,16,true +#PNGImages : + tileset diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tiles_gfx.c b/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tiles_gfx.c new file mode 100644 index 0000000..2d1e613 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tiles_gfx.c @@ -0,0 +1,82 @@ +// convpng +#include +#include "tiles_gfx.h" + +uint16_t tiles_gfx_pal[76] = { + 0x7F22, // 00 :: rgb(255,201,14) + 0xC30C, // 01 :: rgb(132,198,99) + 0x212D, // 02 :: rgb(65,72,106) + 0x1D40, // 03 :: rgb(56,80,0) + 0x1E46, // 04 :: rgb(57,146,49) + 0xDBD1, // 05 :: rgb(184,248,136) + 0xEB7B, // 06 :: rgb(216,224,224) + 0x318F, // 07 :: rgb(99,96,123) + 0x7771, // 08 :: rgb(239,219,140) + 0x650A, // 09 :: rgb(206,64,81) + 0x5F3C, // 10 :: rgb(189,203,231) + 0x6F9D, // 11 :: rgb(222,227,239) + 0x25D5, // 12 :: rgb(73,113,173) + 0x52D8, // 13 :: rgb(165,178,198) + 0xD353, // 14 :: rgb(168,216,160) + 0x6DAC, // 15 :: rgb(222,105,98) + 0x4211, // 16 :: rgb(132,130,140) + 0x3AFE, // 17 :: rgb(115,186,247) + 0x764E, // 18 :: rgb(239,146,114) + 0xE319, // 19 :: rgb(199,199,207) + 0x5A0D, // 20 :: rgb(184,128,111) + 0xE6F0, // 21 :: rgb(208,192,128) + 0x7EF0, // 22 :: rgb(255,186,132) + 0x4EDB, // 23 :: rgb(156,178,222) + 0x6EAE, // 24 :: rgb(222,170,114) + 0x49AD, // 25 :: rgb(148,105,106) + 0x32BD, // 26 :: rgb(99,170,239) + 0xFFFF, // 27 :: rgb(255,255,255) + 0x0E8D, // 28 :: rgb(23,162,107) + 0x666A, // 29 :: rgb(206,154,81) + 0x6ACD, // 30 :: rgb(214,178,106) + 0x22D1, // 31 :: rgb(65,178,140) + 0x18C2, // 32 :: rgb(48,48,14) + 0x5A30, // 33 :: rgb(182,138,130) + 0xB27A, // 34 :: rgb(96,159,215) + 0x7BAE, // 35 :: rgb(245,233,112) + 0x6E2C, // 36 :: rgb(224,136,95) + 0x2A37, // 37 :: rgb(79,136,192) + 0x39A6, // 38 :: rgb(112,104,47) + 0x0420, // 39 :: rgb(8,8,4) + 0xEAF3, // 40 :: rgb(214,191,154) + 0x2CE8, // 41 :: rgb(89,56,65) + 0xEF12, // 42 :: rgb(224,200,144) + 0xDEAD, // 43 :: rgb(191,175,110) + 0x5A51, // 44 :: rgb(184,144,136) + 0x6F30, // 45 :: rgb(222,203,132) + 0xCB3E, // 46 :: rgb(151,207,247) + 0xE35C, // 47 :: rgb(199,215,231) + 0x7399, // 48 :: rgb(231,227,206) + 0x7794, // 49 :: rgb(239,227,165) + 0x7AD0, // 50 :: rgb(247,178,132) + 0x3D29, // 51 :: rgb(123,73,73) + 0x32BC, // 52 :: rgb(96,168,232) + 0x3DF0, // 53 :: rgb(123,123,132) + 0x7337, // 54 :: rgb(228,201,192) + 0x1CC5, // 55 :: rgb(56,48,40) + 0x252B, // 56 :: rgb(71,71,87) + 0x1A05, // 57 :: rgb(46,130,39) + 0xE6AD, // 58 :: rgb(208,176,103) + 0xCF77, // 59 :: rgb(160,224,192) + 0x356B, // 60 :: rgb(107,88,89) + 0xCB58, // 61 :: rgb(144,216,200) + 0xC32A, // 62 :: rgb(135,207,79) + 0x2505, // 63 :: rgb(78,65,39) + 0x6BBF, // 64 :: rgb(214,235,255) + 0x5085, // 65 :: rgb(167,31,39) + 0xAD4D, // 66 :: rgb(87,87,110) + 0xDB1B, // 67 :: rgb(184,200,224) + 0x25D4, // 68 :: rgb(71,112,168) + 0x4E23, // 69 :: rgb(155,139,24) + 0x6149, // 70 :: rgb(199,79,71) + 0x91CA, // 71 :: rgb(37,117,83) + 0x2DD7, // 72 :: rgb(89,113,189) + 0xC76C, // 73 :: rgb(142,221,101) + 0xFB33, // 74 :: rgb(247,207,159) + 0xBB13, // 75 :: rgb(112,199,159) +}; \ No newline at end of file diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tiles_gfx.h b/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tiles_gfx.h new file mode 100644 index 0000000..6e8db9f --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tiles_gfx.h @@ -0,0 +1,271 @@ +// convpng +// this file contains all the graphics sources for easy inclusion in a project +#ifndef __tiles_gfx__ +#define __tiles_gfx__ +#include + +#define tiles_gfx_transparent_color_index 0 + +extern uint8_t tileset_tile_0_data[]; +#define tileset_tile_0 ((gfx_sprite_t*)tileset_tile_0_data) +extern uint8_t tileset_tile_1_data[]; +#define tileset_tile_1 ((gfx_sprite_t*)tileset_tile_1_data) +extern uint8_t tileset_tile_2_data[]; +#define tileset_tile_2 ((gfx_sprite_t*)tileset_tile_2_data) +extern uint8_t tileset_tile_3_data[]; +#define tileset_tile_3 ((gfx_sprite_t*)tileset_tile_3_data) +extern uint8_t tileset_tile_4_data[]; +#define tileset_tile_4 ((gfx_sprite_t*)tileset_tile_4_data) +extern uint8_t tileset_tile_5_data[]; +#define tileset_tile_5 ((gfx_sprite_t*)tileset_tile_5_data) +extern uint8_t tileset_tile_6_data[]; +#define tileset_tile_6 ((gfx_sprite_t*)tileset_tile_6_data) +extern uint8_t tileset_tile_7_data[]; +#define tileset_tile_7 ((gfx_sprite_t*)tileset_tile_7_data) +extern uint8_t tileset_tile_8_data[]; +#define tileset_tile_8 ((gfx_sprite_t*)tileset_tile_8_data) +extern uint8_t tileset_tile_9_data[]; +#define tileset_tile_9 ((gfx_sprite_t*)tileset_tile_9_data) +extern uint8_t tileset_tile_10_data[]; +#define tileset_tile_10 ((gfx_sprite_t*)tileset_tile_10_data) +extern uint8_t tileset_tile_11_data[]; +#define tileset_tile_11 ((gfx_sprite_t*)tileset_tile_11_data) +extern uint8_t tileset_tile_12_data[]; +#define tileset_tile_12 ((gfx_sprite_t*)tileset_tile_12_data) +extern uint8_t tileset_tile_13_data[]; +#define tileset_tile_13 ((gfx_sprite_t*)tileset_tile_13_data) +extern uint8_t tileset_tile_14_data[]; +#define tileset_tile_14 ((gfx_sprite_t*)tileset_tile_14_data) +extern uint8_t tileset_tile_15_data[]; +#define tileset_tile_15 ((gfx_sprite_t*)tileset_tile_15_data) +extern uint8_t tileset_tile_16_data[]; +#define tileset_tile_16 ((gfx_sprite_t*)tileset_tile_16_data) +extern uint8_t tileset_tile_17_data[]; +#define tileset_tile_17 ((gfx_sprite_t*)tileset_tile_17_data) +extern uint8_t tileset_tile_18_data[]; +#define tileset_tile_18 ((gfx_sprite_t*)tileset_tile_18_data) +extern uint8_t tileset_tile_19_data[]; +#define tileset_tile_19 ((gfx_sprite_t*)tileset_tile_19_data) +extern uint8_t tileset_tile_20_data[]; +#define tileset_tile_20 ((gfx_sprite_t*)tileset_tile_20_data) +extern uint8_t tileset_tile_21_data[]; +#define tileset_tile_21 ((gfx_sprite_t*)tileset_tile_21_data) +extern uint8_t tileset_tile_22_data[]; +#define tileset_tile_22 ((gfx_sprite_t*)tileset_tile_22_data) +extern uint8_t tileset_tile_23_data[]; +#define tileset_tile_23 ((gfx_sprite_t*)tileset_tile_23_data) +extern uint8_t tileset_tile_24_data[]; +#define tileset_tile_24 ((gfx_sprite_t*)tileset_tile_24_data) +extern uint8_t tileset_tile_25_data[]; +#define tileset_tile_25 ((gfx_sprite_t*)tileset_tile_25_data) +extern uint8_t tileset_tile_26_data[]; +#define tileset_tile_26 ((gfx_sprite_t*)tileset_tile_26_data) +extern uint8_t tileset_tile_27_data[]; +#define tileset_tile_27 ((gfx_sprite_t*)tileset_tile_27_data) +extern uint8_t tileset_tile_28_data[]; +#define tileset_tile_28 ((gfx_sprite_t*)tileset_tile_28_data) +extern uint8_t tileset_tile_29_data[]; +#define tileset_tile_29 ((gfx_sprite_t*)tileset_tile_29_data) +extern uint8_t tileset_tile_30_data[]; +#define tileset_tile_30 ((gfx_sprite_t*)tileset_tile_30_data) +extern uint8_t tileset_tile_31_data[]; +#define tileset_tile_31 ((gfx_sprite_t*)tileset_tile_31_data) +extern uint8_t tileset_tile_32_data[]; +#define tileset_tile_32 ((gfx_sprite_t*)tileset_tile_32_data) +extern uint8_t tileset_tile_33_data[]; +#define tileset_tile_33 ((gfx_sprite_t*)tileset_tile_33_data) +extern uint8_t tileset_tile_34_data[]; +#define tileset_tile_34 ((gfx_sprite_t*)tileset_tile_34_data) +extern uint8_t tileset_tile_35_data[]; +#define tileset_tile_35 ((gfx_sprite_t*)tileset_tile_35_data) +extern uint8_t tileset_tile_36_data[]; +#define tileset_tile_36 ((gfx_sprite_t*)tileset_tile_36_data) +extern uint8_t tileset_tile_37_data[]; +#define tileset_tile_37 ((gfx_sprite_t*)tileset_tile_37_data) +extern uint8_t tileset_tile_38_data[]; +#define tileset_tile_38 ((gfx_sprite_t*)tileset_tile_38_data) +extern uint8_t tileset_tile_39_data[]; +#define tileset_tile_39 ((gfx_sprite_t*)tileset_tile_39_data) +extern uint8_t tileset_tile_40_data[]; +#define tileset_tile_40 ((gfx_sprite_t*)tileset_tile_40_data) +extern uint8_t tileset_tile_41_data[]; +#define tileset_tile_41 ((gfx_sprite_t*)tileset_tile_41_data) +extern uint8_t tileset_tile_42_data[]; +#define tileset_tile_42 ((gfx_sprite_t*)tileset_tile_42_data) +extern uint8_t tileset_tile_43_data[]; +#define tileset_tile_43 ((gfx_sprite_t*)tileset_tile_43_data) +extern uint8_t tileset_tile_44_data[]; +#define tileset_tile_44 ((gfx_sprite_t*)tileset_tile_44_data) +extern uint8_t tileset_tile_45_data[]; +#define tileset_tile_45 ((gfx_sprite_t*)tileset_tile_45_data) +extern uint8_t tileset_tile_46_data[]; +#define tileset_tile_46 ((gfx_sprite_t*)tileset_tile_46_data) +extern uint8_t tileset_tile_47_data[]; +#define tileset_tile_47 ((gfx_sprite_t*)tileset_tile_47_data) +extern uint8_t tileset_tile_48_data[]; +#define tileset_tile_48 ((gfx_sprite_t*)tileset_tile_48_data) +extern uint8_t tileset_tile_49_data[]; +#define tileset_tile_49 ((gfx_sprite_t*)tileset_tile_49_data) +extern uint8_t tileset_tile_50_data[]; +#define tileset_tile_50 ((gfx_sprite_t*)tileset_tile_50_data) +extern uint8_t tileset_tile_51_data[]; +#define tileset_tile_51 ((gfx_sprite_t*)tileset_tile_51_data) +extern uint8_t tileset_tile_52_data[]; +#define tileset_tile_52 ((gfx_sprite_t*)tileset_tile_52_data) +extern uint8_t tileset_tile_53_data[]; +#define tileset_tile_53 ((gfx_sprite_t*)tileset_tile_53_data) +extern uint8_t tileset_tile_54_data[]; +#define tileset_tile_54 ((gfx_sprite_t*)tileset_tile_54_data) +extern uint8_t tileset_tile_55_data[]; +#define tileset_tile_55 ((gfx_sprite_t*)tileset_tile_55_data) +extern uint8_t tileset_tile_56_data[]; +#define tileset_tile_56 ((gfx_sprite_t*)tileset_tile_56_data) +extern uint8_t tileset_tile_57_data[]; +#define tileset_tile_57 ((gfx_sprite_t*)tileset_tile_57_data) +extern uint8_t tileset_tile_58_data[]; +#define tileset_tile_58 ((gfx_sprite_t*)tileset_tile_58_data) +extern uint8_t tileset_tile_59_data[]; +#define tileset_tile_59 ((gfx_sprite_t*)tileset_tile_59_data) +extern uint8_t tileset_tile_60_data[]; +#define tileset_tile_60 ((gfx_sprite_t*)tileset_tile_60_data) +extern uint8_t tileset_tile_61_data[]; +#define tileset_tile_61 ((gfx_sprite_t*)tileset_tile_61_data) +extern uint8_t tileset_tile_62_data[]; +#define tileset_tile_62 ((gfx_sprite_t*)tileset_tile_62_data) +extern uint8_t tileset_tile_63_data[]; +#define tileset_tile_63 ((gfx_sprite_t*)tileset_tile_63_data) +extern uint8_t tileset_tile_64_data[]; +#define tileset_tile_64 ((gfx_sprite_t*)tileset_tile_64_data) +extern uint8_t tileset_tile_65_data[]; +#define tileset_tile_65 ((gfx_sprite_t*)tileset_tile_65_data) +extern uint8_t tileset_tile_66_data[]; +#define tileset_tile_66 ((gfx_sprite_t*)tileset_tile_66_data) +extern uint8_t tileset_tile_67_data[]; +#define tileset_tile_67 ((gfx_sprite_t*)tileset_tile_67_data) +extern uint8_t tileset_tile_68_data[]; +#define tileset_tile_68 ((gfx_sprite_t*)tileset_tile_68_data) +extern uint8_t tileset_tile_69_data[]; +#define tileset_tile_69 ((gfx_sprite_t*)tileset_tile_69_data) +extern uint8_t tileset_tile_70_data[]; +#define tileset_tile_70 ((gfx_sprite_t*)tileset_tile_70_data) +extern uint8_t tileset_tile_71_data[]; +#define tileset_tile_71 ((gfx_sprite_t*)tileset_tile_71_data) +extern uint8_t tileset_tile_72_data[]; +#define tileset_tile_72 ((gfx_sprite_t*)tileset_tile_72_data) +extern uint8_t tileset_tile_73_data[]; +#define tileset_tile_73 ((gfx_sprite_t*)tileset_tile_73_data) +extern uint8_t tileset_tile_74_data[]; +#define tileset_tile_74 ((gfx_sprite_t*)tileset_tile_74_data) +extern uint8_t tileset_tile_75_data[]; +#define tileset_tile_75 ((gfx_sprite_t*)tileset_tile_75_data) +extern uint8_t tileset_tile_76_data[]; +#define tileset_tile_76 ((gfx_sprite_t*)tileset_tile_76_data) +extern uint8_t tileset_tile_77_data[]; +#define tileset_tile_77 ((gfx_sprite_t*)tileset_tile_77_data) +extern uint8_t tileset_tile_78_data[]; +#define tileset_tile_78 ((gfx_sprite_t*)tileset_tile_78_data) +extern uint8_t tileset_tile_79_data[]; +#define tileset_tile_79 ((gfx_sprite_t*)tileset_tile_79_data) +extern uint8_t tileset_tile_80_data[]; +#define tileset_tile_80 ((gfx_sprite_t*)tileset_tile_80_data) +extern uint8_t tileset_tile_81_data[]; +#define tileset_tile_81 ((gfx_sprite_t*)tileset_tile_81_data) +extern uint8_t tileset_tile_82_data[]; +#define tileset_tile_82 ((gfx_sprite_t*)tileset_tile_82_data) +extern uint8_t tileset_tile_83_data[]; +#define tileset_tile_83 ((gfx_sprite_t*)tileset_tile_83_data) +extern uint8_t tileset_tile_84_data[]; +#define tileset_tile_84 ((gfx_sprite_t*)tileset_tile_84_data) +extern uint8_t tileset_tile_85_data[]; +#define tileset_tile_85 ((gfx_sprite_t*)tileset_tile_85_data) +extern uint8_t tileset_tile_86_data[]; +#define tileset_tile_86 ((gfx_sprite_t*)tileset_tile_86_data) +extern uint8_t tileset_tile_87_data[]; +#define tileset_tile_87 ((gfx_sprite_t*)tileset_tile_87_data) +extern uint8_t tileset_tile_88_data[]; +#define tileset_tile_88 ((gfx_sprite_t*)tileset_tile_88_data) +extern uint8_t tileset_tile_89_data[]; +#define tileset_tile_89 ((gfx_sprite_t*)tileset_tile_89_data) +extern uint8_t tileset_tile_90_data[]; +#define tileset_tile_90 ((gfx_sprite_t*)tileset_tile_90_data) +extern uint8_t tileset_tile_91_data[]; +#define tileset_tile_91 ((gfx_sprite_t*)tileset_tile_91_data) +extern uint8_t tileset_tile_92_data[]; +#define tileset_tile_92 ((gfx_sprite_t*)tileset_tile_92_data) +extern uint8_t tileset_tile_93_data[]; +#define tileset_tile_93 ((gfx_sprite_t*)tileset_tile_93_data) +extern uint8_t tileset_tile_94_data[]; +#define tileset_tile_94 ((gfx_sprite_t*)tileset_tile_94_data) +extern uint8_t tileset_tile_95_data[]; +#define tileset_tile_95 ((gfx_sprite_t*)tileset_tile_95_data) +extern uint8_t tileset_tile_96_data[]; +#define tileset_tile_96 ((gfx_sprite_t*)tileset_tile_96_data) +extern uint8_t tileset_tile_97_data[]; +#define tileset_tile_97 ((gfx_sprite_t*)tileset_tile_97_data) +extern uint8_t tileset_tile_98_data[]; +#define tileset_tile_98 ((gfx_sprite_t*)tileset_tile_98_data) +extern uint8_t tileset_tile_99_data[]; +#define tileset_tile_99 ((gfx_sprite_t*)tileset_tile_99_data) +extern uint8_t tileset_tile_100_data[]; +#define tileset_tile_100 ((gfx_sprite_t*)tileset_tile_100_data) +extern uint8_t tileset_tile_101_data[]; +#define tileset_tile_101 ((gfx_sprite_t*)tileset_tile_101_data) +extern uint8_t tileset_tile_102_data[]; +#define tileset_tile_102 ((gfx_sprite_t*)tileset_tile_102_data) +extern uint8_t tileset_tile_103_data[]; +#define tileset_tile_103 ((gfx_sprite_t*)tileset_tile_103_data) +extern uint8_t tileset_tile_104_data[]; +#define tileset_tile_104 ((gfx_sprite_t*)tileset_tile_104_data) +extern uint8_t tileset_tile_105_data[]; +#define tileset_tile_105 ((gfx_sprite_t*)tileset_tile_105_data) +extern uint8_t tileset_tile_106_data[]; +#define tileset_tile_106 ((gfx_sprite_t*)tileset_tile_106_data) +extern uint8_t tileset_tile_107_data[]; +#define tileset_tile_107 ((gfx_sprite_t*)tileset_tile_107_data) +extern uint8_t tileset_tile_108_data[]; +#define tileset_tile_108 ((gfx_sprite_t*)tileset_tile_108_data) +extern uint8_t tileset_tile_109_data[]; +#define tileset_tile_109 ((gfx_sprite_t*)tileset_tile_109_data) +extern uint8_t tileset_tile_110_data[]; +#define tileset_tile_110 ((gfx_sprite_t*)tileset_tile_110_data) +extern uint8_t tileset_tile_111_data[]; +#define tileset_tile_111 ((gfx_sprite_t*)tileset_tile_111_data) +extern uint8_t tileset_tile_112_data[]; +#define tileset_tile_112 ((gfx_sprite_t*)tileset_tile_112_data) +extern uint8_t tileset_tile_113_data[]; +#define tileset_tile_113 ((gfx_sprite_t*)tileset_tile_113_data) +extern uint8_t tileset_tile_114_data[]; +#define tileset_tile_114 ((gfx_sprite_t*)tileset_tile_114_data) +extern uint8_t tileset_tile_115_data[]; +#define tileset_tile_115 ((gfx_sprite_t*)tileset_tile_115_data) +extern uint8_t tileset_tile_116_data[]; +#define tileset_tile_116 ((gfx_sprite_t*)tileset_tile_116_data) +extern uint8_t tileset_tile_117_data[]; +#define tileset_tile_117 ((gfx_sprite_t*)tileset_tile_117_data) +extern uint8_t tileset_tile_118_data[]; +#define tileset_tile_118 ((gfx_sprite_t*)tileset_tile_118_data) +extern uint8_t tileset_tile_119_data[]; +#define tileset_tile_119 ((gfx_sprite_t*)tileset_tile_119_data) +extern uint8_t tileset_tile_120_data[]; +#define tileset_tile_120 ((gfx_sprite_t*)tileset_tile_120_data) +extern uint8_t tileset_tile_121_data[]; +#define tileset_tile_121 ((gfx_sprite_t*)tileset_tile_121_data) +extern uint8_t tileset_tile_122_data[]; +#define tileset_tile_122 ((gfx_sprite_t*)tileset_tile_122_data) +extern uint8_t tileset_tile_123_data[]; +#define tileset_tile_123 ((gfx_sprite_t*)tileset_tile_123_data) +extern uint8_t tileset_tile_124_data[]; +#define tileset_tile_124 ((gfx_sprite_t*)tileset_tile_124_data) +extern uint8_t tileset_tile_125_data[]; +#define tileset_tile_125 ((gfx_sprite_t*)tileset_tile_125_data) +extern uint8_t tileset_tile_126_data[]; +#define tileset_tile_126 ((gfx_sprite_t*)tileset_tile_126_data) +extern uint8_t tileset_tile_127_data[]; +#define tileset_tile_127 ((gfx_sprite_t*)tileset_tile_127_data) +#define tileset_tiles_num 128 +extern uint8_t *tileset_tiles_data[128]; +#define tileset_tiles ((gfx_sprite_t**)tileset_tiles_data) +#define sizeof_tiles_gfx_pal 152 +extern uint16_t tiles_gfx_pal[76]; + +#endif diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tileset.c b/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tileset.c new file mode 100644 index 0000000..077ec44 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tileset.c @@ -0,0 +1,2694 @@ +// convpng +#include +#include "tiles_gfx.h" + +uint8_t tileset_tile_0_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x3D,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x3D,0x4B,0x4B,0x3D,0x4B,0x4B,0x3D,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x3D,0x4B,0x4B,0x4B,0x3D,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, +}; +uint8_t tileset_tile_1_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x1F,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x1F,0x4B,0x4B,0x1F,0x4B,0x4B,0x1F,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x1F,0x4B,0x4B,0x4B,0x1F,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x3D,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x3D,0x4B,0x4B,0x3D,0x4B,0x4B,0x3D, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x3D,0x4B,0x4B,0x4B,0x3D,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x1F,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x1F,0x4B,0x4B,0x1F,0x4B,0x4B,0x1F, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x1F,0x4B,0x4B,0x4B,0x1F,0x4B, +}; +uint8_t tileset_tile_2_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x1F,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x1F,0x4B,0x4B,0x1F,0x4B,0x4B,0x1F,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x1F,0x4B,0x4B,0x4B,0x1F,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x3B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x3B,0x4B,0x4B,0x3B,0x4B,0x4B,0x3B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x3B,0x4B,0x4B,0x4B,0x3B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, +}; +uint8_t tileset_tile_3_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x1F,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x1F,0x4B,0x4B,0x1F,0x4B,0x4B,0x1F,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x1F,0x4B,0x4B,0x4B,0x1F,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, +}; +uint8_t tileset_tile_4_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x03,0x04,0x04,0x03,0x04,0x04,0x04,0x03,0x03,0x03,0x01,0x01,0x04,0x01,0x01, + 0x4B,0x1C,0x03,0x03,0x04,0x04,0x03,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x01, + 0x4B,0x1F,0x1C,0x03,0x04,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03, + 0x4B,0x1F,0x1F,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x03,0x04,0x04,0x04,0x04,0x03, + 0x4B,0x4B,0x1F,0x1C,0x04,0x03,0x04,0x04,0x04,0x03,0x04,0x04,0x04,0x03,0x03,0x05, + 0x4B,0x1F,0x1C,0x04,0x04,0x04,0x03,0x03,0x04,0x03,0x04,0x04,0x03,0x03,0x04,0x05, + 0x1F,0x1C,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x01,0x05, + 0x1C,0x1C,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05, + 0x1C,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x01,0x05,0x05, + 0x1C,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x04,0x01,0x01,0x05,0x01,0x05,0x05, + 0x1C,0x1C,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x04,0x05,0x05,0x01,0x05,0x05,0x05, + 0x1C,0x1C,0x1C,0x04,0x04,0x04,0x04,0x04,0x01,0x05,0x01,0x01,0x05,0x05,0x05,0x05, + 0x1F,0x1F,0x1C,0x1C,0x04,0x04,0x04,0x01,0x04,0x04,0x01,0x05,0x05,0x05,0x05,0x05, + 0x4B,0x4B,0x1F,0x1C,0x1C,0x03,0x05,0x05,0x04,0x01,0x05,0x05,0x05,0x05,0x05,0x05, + 0x4B,0x4B,0x4B,0x1F,0x1C,0x04,0x04,0x04,0x01,0x05,0x05,0x01,0x05,0x05,0x05,0x05, + 0x4B,0x4B,0x4B,0x1F,0x03,0x01,0x05,0x05,0x04,0x05,0x04,0x05,0x05,0x05,0x05,0x05, +}; +uint8_t tileset_tile_5_data[258] = { + 16, // tile_width + 16, // tile_height + 0x01,0x01,0x04,0x01,0x01,0x03,0x03,0x03,0x04,0x04,0x04,0x03,0x04,0x04,0x03,0x4B, + 0x01,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x03,0x04,0x04,0x03,0x03,0x1C,0x4B, + 0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x04,0x03,0x1C,0x1F,0x4B, + 0x03,0x04,0x04,0x04,0x04,0x03,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x1F,0x1F,0x4B, + 0x05,0x03,0x03,0x04,0x04,0x04,0x03,0x04,0x04,0x04,0x03,0x04,0x1C,0x1F,0x4B,0x4B, + 0x05,0x04,0x03,0x03,0x04,0x04,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x1C,0x1F,0x4B, + 0x05,0x01,0x03,0x03,0x04,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x1C,0x1F, + 0x05,0x01,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x1C,0x1C, + 0x05,0x01,0x01,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x1C, + 0x05,0x01,0x01,0x01,0x01,0x01,0x04,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x1C, + 0x05,0x01,0x05,0x01,0x01,0x05,0x04,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x1C,0x1C, + 0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x01,0x04,0x04,0x04,0x04,0x04,0x1C,0x1C,0x1C, + 0x05,0x05,0x05,0x05,0x01,0x05,0x04,0x04,0x01,0x04,0x04,0x04,0x1C,0x1C,0x1F,0x1F, + 0x05,0x05,0x05,0x01,0x05,0x01,0x01,0x04,0x05,0x05,0x03,0x1C,0x1C,0x1F,0x4B,0x4B, + 0x05,0x05,0x05,0x05,0x01,0x05,0x05,0x01,0x04,0x04,0x04,0x1C,0x1F,0x4B,0x4B,0x4B, + 0x05,0x05,0x05,0x01,0x05,0x04,0x05,0x04,0x05,0x05,0x01,0x03,0x1F,0x4B,0x4B,0x4B, +}; +uint8_t tileset_tile_6_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x05, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x05, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x05, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x05,0x05, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x05,0x05,0x01,0x05,0x05, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x01,0x05,0x01,0x05,0x05, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x05,0x05,0x01,0x05,0x05,0x05, + 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x01,0x05,0x01,0x01,0x05,0x05,0x05,0x05, + 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x04,0x04,0x01,0x05,0x05,0x05,0x05,0x05, + 0x00,0x00,0x00,0x00,0x00,0x03,0x05,0x05,0x04,0x01,0x05,0x05,0x05,0x05,0x05,0x05, + 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x01,0x05,0x05,0x01,0x05,0x05,0x05,0x05, + 0x00,0x00,0x00,0x00,0x03,0x01,0x05,0x05,0x04,0x05,0x04,0x05,0x05,0x05,0x05,0x05, +}; +uint8_t tileset_tile_7_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x05,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x05,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x05,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x05,0x01,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x05,0x01,0x01,0x05,0x05,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x05,0x01,0x01,0x01,0x01,0x01,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x05,0x01,0x05,0x01,0x01,0x05,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x01,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, + 0x05,0x05,0x05,0x05,0x01,0x05,0x04,0x04,0x01,0x04,0x00,0x00,0x00,0x00,0x00,0x00, + 0x05,0x05,0x05,0x01,0x05,0x01,0x01,0x04,0x05,0x05,0x03,0x00,0x00,0x00,0x00,0x00, + 0x05,0x05,0x05,0x05,0x01,0x05,0x05,0x01,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, + 0x05,0x05,0x05,0x01,0x05,0x04,0x05,0x04,0x05,0x05,0x01,0x03,0x00,0x00,0x00,0x00, +}; +uint8_t tileset_tile_8_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00, + 0x07,0x19,0x19,0x19,0x07,0x07,0x07,0x07,0x19,0x19,0x19,0x19,0x07,0x07,0x07,0x07, + 0x07,0x23,0x23,0x18,0x19,0x19,0x19,0x19,0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19, + 0x07,0x23,0x23,0x18,0x18,0x18,0x18,0x18,0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18, + 0x07,0x19,0x19,0x19,0x23,0x23,0x23,0x23,0x19,0x19,0x19,0x19,0x23,0x23,0x23,0x23, + 0x07,0x23,0x23,0x18,0x19,0x19,0x19,0x19,0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19, + 0x07,0x23,0x23,0x18,0x18,0x18,0x18,0x18,0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18, + 0x07,0x19,0x19,0x19,0x23,0x23,0x23,0x23,0x19,0x19,0x19,0x19,0x23,0x23,0x23,0x23, + 0x07,0x23,0x23,0x18,0x19,0x19,0x19,0x19,0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19, + 0x07,0x23,0x23,0x18,0x18,0x18,0x18,0x18,0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18, + 0x07,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x07,0x14,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07, + 0x07,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, +}; +uint8_t tileset_tile_9_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00, + 0x19,0x19,0x19,0x19,0x07,0x07,0x07,0x07,0x19,0x19,0x19,0x19,0x07,0x07,0x07,0x07, + 0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19,0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19, + 0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18,0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x23,0x23,0x23,0x23,0x19,0x19,0x19,0x19,0x23,0x23,0x23,0x23, + 0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19,0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19, + 0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18,0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x23,0x23,0x23,0x23,0x19,0x19,0x19,0x19,0x23,0x23,0x23,0x23, + 0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19,0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19, + 0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18,0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, +}; +uint8_t tileset_tile_10_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00, + 0x19,0x19,0x19,0x19,0x07,0x07,0x07,0x07,0x19,0x19,0x19,0x19,0x07,0x07,0x07,0x07, + 0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19,0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19, + 0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18,0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x23,0x23,0x23,0x23,0x19,0x19,0x19,0x19,0x23,0x23,0x23,0x23, + 0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19,0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19, + 0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18,0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x23,0x23,0x23,0x23,0x19,0x19,0x19,0x19,0x23,0x23,0x23,0x23, + 0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19,0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19, + 0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18,0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, +}; +uint8_t tileset_tile_11_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00, + 0x19,0x19,0x19,0x19,0x07,0x07,0x07,0x07,0x19,0x19,0x19,0x19,0x07,0x07,0x07,0x02, + 0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19,0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x02, + 0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18,0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x02, + 0x19,0x19,0x19,0x19,0x23,0x23,0x23,0x23,0x19,0x19,0x19,0x19,0x23,0x23,0x23,0x02, + 0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19,0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x02, + 0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18,0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x02, + 0x19,0x19,0x19,0x19,0x23,0x23,0x23,0x23,0x19,0x19,0x19,0x19,0x23,0x23,0x23,0x02, + 0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x19,0x19,0x23,0x23,0x18,0x19,0x19,0x19,0x02, + 0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x18,0x19,0x23,0x23,0x18,0x18,0x18,0x18,0x02, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x02, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x14,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02, + 0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x02, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x19,0x02, +}; +uint8_t tileset_tile_12_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x16,0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09, + 0x00,0x00,0x00,0x00,0x00,0x09,0x16,0x16,0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09, + 0x00,0x00,0x00,0x00,0x09,0x16,0x16,0x12,0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09, + 0x00,0x00,0x00,0x09,0x09,0x16,0x12,0x12,0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09, + 0x00,0x00,0x09,0x16,0x09,0x12,0x12,0x12,0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09, + 0x00,0x09,0x16,0x16,0x09,0x12,0x12,0x12,0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09, + 0x09,0x16,0x16,0x12,0x09,0x12,0x12,0x12,0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09, +}; +uint8_t tileset_tile_13_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x16,0x09,0x16,0x16,0x16, + 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x12,0x12,0x12,0x16,0x09,0x16,0x16,0x16, + 0x00,0x00,0x00,0x00,0x00,0x07,0x12,0x09,0x12,0x12,0x12,0x16,0x09,0x16,0x16,0x16, + 0x00,0x00,0x00,0x07,0x07,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x09,0x16,0x16,0x16, + 0x00,0x00,0x07,0x07,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x09,0x16,0x16,0x16, + 0x00,0x07,0x0F,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x09,0x16,0x16,0x16, + 0x07,0x0F,0x0F,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x09,0x16,0x16,0x16, + 0x09,0x0F,0x0F,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x09,0x16,0x16,0x16, + 0x09,0x0F,0x0F,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x09,0x16,0x16,0x16, + 0x09,0x0F,0x0F,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x09,0x16,0x16,0x16, + 0x09,0x0F,0x0F,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x09,0x16,0x16,0x16, + 0x09,0x0F,0x0F,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x09,0x16,0x16,0x16, + 0x09,0x0F,0x0F,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x09,0x16,0x16,0x16, + 0x09,0x0F,0x0F,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x09,0x16,0x16,0x16, + 0x09,0x0F,0x0F,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x09,0x16,0x16,0x16, +}; +uint8_t tileset_tile_14_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x16,0x16,0x16,0x09,0x16,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x16,0x16,0x16,0x09,0x16,0x12,0x12,0x12,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00, + 0x16,0x16,0x16,0x09,0x16,0x12,0x12,0x12,0x09,0x12,0x07,0x00,0x00,0x00,0x00,0x00, + 0x16,0x16,0x16,0x09,0x16,0x12,0x12,0x12,0x09,0x12,0x12,0x07,0x07,0x00,0x00,0x00, + 0x16,0x16,0x16,0x09,0x16,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x07,0x07,0x00,0x00, + 0x16,0x16,0x16,0x09,0x16,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x0F,0x07,0x00, + 0x16,0x16,0x16,0x09,0x16,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x0F,0x0F,0x07, + 0x16,0x16,0x16,0x09,0x16,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x0F,0x0F,0x09, + 0x16,0x16,0x16,0x09,0x16,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x0F,0x0F,0x09, + 0x16,0x16,0x16,0x09,0x16,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x0F,0x0F,0x09, + 0x16,0x16,0x16,0x09,0x16,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x0F,0x0F,0x09, + 0x16,0x16,0x16,0x09,0x16,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x0F,0x0F,0x09, + 0x16,0x16,0x16,0x09,0x16,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x0F,0x0F,0x09, + 0x16,0x16,0x16,0x09,0x16,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x0F,0x0F,0x09, + 0x16,0x16,0x16,0x09,0x16,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x0F,0x0F,0x09, +}; +uint8_t tileset_tile_15_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09,0x12,0x09,0x00,0x00,0x00,0x00,0x00,0x00, + 0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09,0x12,0x12,0x09,0x00,0x00,0x00,0x00,0x00, + 0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09,0x12,0x12,0x12,0x09,0x00,0x00,0x00,0x00, + 0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09,0x12,0x12,0x12,0x09,0x09,0x00,0x00,0x00, + 0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09,0x12,0x12,0x12,0x09,0x12,0x09,0x00,0x00, + 0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x09,0x00, + 0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09, +}; +uint8_t tileset_tile_16_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x1F,0x4B,0x4B,0x4B,0x1F,0x04,0x4B,0x4B,0x4B,0x1F,0x4B,0x4B,0x4B, + 0x4B,0x1F,0x4B,0x4B,0x4B,0x4B,0x1F,0x04,0x3B,0x04,0x4B,0x4B,0x4B,0x4B,0x4B,0x1F, + 0x4B,0x4B,0x04,0x04,0x04,0x1F,0x1F,0x3B,0x3B,0x04,0x1F,0x03,0x04,0x03,0x4B,0x4B, + 0x4B,0x1C,0x3B,0x3B,0x3B,0x04,0x04,0x3B,0x4B,0x04,0x03,0x3B,0x3B,0x3B,0x03,0x1F, + 0x4B,0x4B,0x1C,0x3B,0x3B,0x3B,0x04,0x4B,0x4B,0x03,0x1F,0x4B,0x3B,0x03,0x04,0x1F, + 0x4B,0x4B,0x4B,0x1C,0x4B,0x4B,0x4B,0x04,0x1F,0x03,0x1F,0x1F,0x04,0x04,0x1F,0x4B, + 0x4B,0x1C,0x1C,0x1C,0x04,0x04,0x4B,0x04,0x04,0x04,0x1F,0x03,0x03,0x03,0x03,0x4B, + 0x04,0x3B,0x3B,0x3B,0x4B,0x04,0x04,0x4B,0x03,0x1F,0x03,0x1F,0x4B,0x4B,0x4B,0x03, + 0x1F,0x04,0x3B,0x4B,0x4B,0x1F,0x04,0x04,0x03,0x03,0x1F,0x1F,0x1F,0x1F,0x03,0x1F, + 0x4B,0x1F,0x04,0x1F,0x1F,0x1F,0x1F,0x03,0x03,0x04,0x04,0x04,0x03,0x03,0x04,0x04, + 0x4B,0x4B,0x1F,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x1F, + 0x4B,0x1F,0x04,0x4B,0x4B,0x1F,0x03,0x04,0x03,0x03,0x04,0x1F,0x1F,0x03,0x1F,0x4B, + 0x4B,0x04,0x4B,0x4B,0x1F,0x04,0x04,0x04,0x04,0x03,0x04,0x04,0x04,0x1F,0x03,0x1F, + 0x1F,0x04,0x03,0x03,0x03,0x03,0x1F,0x1F,0x1F,0x04,0x03,0x03,0x03,0x03,0x03,0x04, + 0x1F,0x1F,0x04,0x04,0x04,0x04,0x03,0x1F,0x04,0x03,0x04,0x04,0x04,0x04,0x04,0x04, + 0x4B,0x4B,0x1F,0x1F,0x04,0x04,0x04,0x03,0x03,0x04,0x04,0x04,0x1F,0x1F,0x4B,0x4B, +}; +uint8_t tileset_tile_17_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x39,0x39,0x3E,0x20,0x00, + 0x00,0x00,0x20,0x20,0x20,0x00,0x00,0x00,0x20,0x39,0x39,0x39,0x3E,0x3E,0x3E,0x20, + 0x00,0x20,0x3E,0x3E,0x39,0x20,0x20,0x00,0x20,0x20,0x39,0x39,0x3E,0x3E,0x3E,0x20, + 0x20,0x3E,0x3E,0x39,0x39,0x39,0x20,0x20,0x20,0x20,0x39,0x39,0x39,0x3E,0x39,0x20, + 0x20,0x3E,0x39,0x3E,0x39,0x20,0x20,0x20,0x20,0x39,0x20,0x39,0x39,0x39,0x20,0x00, + 0x00,0x20,0x39,0x39,0x39,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x39,0x39,0x39,0x20, + 0x20,0x39,0x39,0x39,0x20,0x20,0x20,0x20,0x20,0x3F,0x3F,0x20,0x20,0x20,0x20,0x00, + 0x20,0x20,0x20,0x20,0x20,0x3F,0x3F,0x20,0x3F,0x3F,0x20,0x00,0x00,0x00,0x00,0x00, + 0x00,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x3F,0x20,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x20,0x20,0x00,0x20,0x45,0x3F,0x20,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x45,0x3F,0x20,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x39,0x20,0x20,0x3F,0x45,0x3F,0x20,0x39,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x39,0x20,0x33,0x45,0x3F,0x45,0x45,0x3F,0x20,0x39,0x00,0x00,0x00, + 0x00,0x00,0x00,0x39,0x20,0x20,0x33,0x45,0x3F,0x45,0x20,0x20,0x39,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x39,0x20,0x20,0x20,0x20,0x20,0x20,0x39,0x00,0x00,0x00,0x00, +}; +uint8_t tileset_tile_18_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x04,0x04,0x05,0x01,0x01,0x05,0x04,0x04,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x04,0x00,0x00,0x00, + 0x00,0x00,0x04,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x04,0x00,0x00, + 0x00,0x00,0x04,0x01,0x01,0x05,0x05,0x01,0x01,0x05,0x05,0x01,0x01,0x04,0x00,0x00, + 0x00,0x04,0x01,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x04,0x01,0x04,0x00, + 0x00,0x01,0x04,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x04,0x01,0x1F, + 0x00,0x03,0x01,0x04,0x01,0x05,0x05,0x01,0x01,0x05,0x05,0x01,0x04,0x01,0x03,0x1C, + 0x00,0x04,0x01,0x04,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x04,0x01,0x04,0x1C, + 0x00,0x03,0x04,0x01,0x01,0x04,0x04,0x01,0x01,0x04,0x04,0x01,0x01,0x04,0x03,0x1C, + 0x00,0x03,0x04,0x04,0x01,0x01,0x01,0x04,0x04,0x01,0x01,0x01,0x04,0x04,0x03,0x1C, + 0x00,0x1F,0x03,0x04,0x04,0x04,0x04,0x01,0x01,0x04,0x04,0x04,0x04,0x03,0x1C,0x1F, + 0x00,0x00,0x1C,0x04,0x03,0x03,0x04,0x04,0x04,0x04,0x03,0x03,0x04,0x1C,0x1F,0x00, + 0x00,0x00,0x00,0x1C,0x1C,0x1C,0x03,0x03,0x03,0x03,0x1C,0x1C,0x1C,0x1C,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x1F,0x1C,0x1C,0x1C,0x1C,0x1C,0x1F,0x00,0x00,0x00,0x00, +}; +uint8_t tileset_tile_19_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x2C,0x2C,0x33,0x33,0x33,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0x2C,0x36,0x36,0x36,0x2C,0x19,0x2C,0x33,0x2C,0x00,0x00, + 0x00,0x00,0x00,0x2C,0x2C,0x36,0x36,0x36,0x36,0x2C,0x19,0x36,0x36,0x28,0x33,0x00, + 0x00,0x00,0x33,0x2C,0x36,0x36,0x36,0x28,0x2C,0x19,0x36,0x36,0x28,0x28,0x33,0x00, + 0x00,0x19,0x2C,0x36,0x36,0x28,0x36,0x28,0x28,0x28,0x36,0x36,0x28,0x28,0x2C,0x00, + 0x00,0x33,0x36,0x36,0x28,0x28,0x36,0x28,0x28,0x28,0x28,0x28,0x2C,0x2C,0x2C,0x19, + 0x00,0x33,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x2C,0x28,0x28,0x28,0x2C,0x28,0x29, + 0x35,0x33,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x19,0x2C,0x28,0x2C,0x28,0x2C,0x29, + 0x19,0x33,0x28,0x28,0x28,0x2C,0x19,0x28,0x28,0x2C,0x19,0x2C,0x28,0x2C,0x2C,0x29, + 0x29,0x33,0x19,0x28,0x28,0x19,0x28,0x2C,0x2C,0x19,0x29,0x19,0x19,0x29,0x29,0x29, + 0x29,0x33,0x33,0x19,0x19,0x19,0x2C,0x2C,0x19,0x33,0x29,0x33,0x33,0x29,0x29,0x29, + 0x29,0x33,0x33,0x2C,0x33,0x19,0x19,0x19,0x29,0x33,0x29,0x33,0x33,0x29,0x29,0x29, + 0x35,0x29,0x29,0x33,0x29,0x33,0x33,0x29,0x29,0x33,0x29,0x33,0x29,0x29,0x29,0x35, + 0x00,0x35,0x29,0x29,0x29,0x33,0x33,0x29,0x29,0x29,0x33,0x29,0x29,0x29,0x35,0x35, + 0x00,0x00,0x35,0x35,0x29,0x29,0x29,0x29,0x29,0x35,0x29,0x29,0x29,0x35,0x35,0x00, + 0x00,0x00,0x00,0x00,0x35,0x29,0x29,0x29,0x19,0x35,0x35,0x35,0x35,0x00,0x00,0x00, +}; +uint8_t tileset_tile_20_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x1F,0x03,0x05,0x05,0x04,0x01,0x04,0x05,0x05,0x05,0x05,0x04,0x05, + 0x4B,0x1F,0x4B,0x1C,0x1C,0x04,0x01,0x05,0x05,0x04,0x05,0x01,0x01,0x05,0x01,0x05, + 0x1F,0x1C,0x1C,0x1C,0x03,0x05,0x05,0x05,0x01,0x01,0x04,0x04,0x04,0x01,0x05,0x05, + 0x1C,0x1C,0x03,0x03,0x03,0x05,0x05,0x01,0x04,0x01,0x05,0x05,0x01,0x04,0x05,0x01, + 0x1C,0x1C,0x03,0x01,0x01,0x03,0x01,0x03,0x05,0x05,0x05,0x05,0x01,0x01,0x04,0x04, + 0x1C,0x1C,0x1C,0x04,0x01,0x03,0x04,0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x04,0x01, + 0x1F,0x1C,0x03,0x01,0x04,0x04,0x03,0x05,0x04,0x05,0x05,0x01,0x05,0x05,0x05,0x05, + 0x1F,0x1F,0x04,0x04,0x04,0x01,0x04,0x04,0x05,0x05,0x04,0x05,0x05,0x05,0x01,0x05, + 0x1F,0x1F,0x03,0x04,0x01,0x01,0x01,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05, + 0x1F,0x03,0x03,0x01,0x01,0x01,0x04,0x01,0x01,0x01,0x04,0x04,0x05,0x04,0x05,0x05, + 0x1C,0x04,0x01,0x04,0x01,0x04,0x01,0x01,0x01,0x01,0x04,0x04,0x03,0x01,0x05,0x01, + 0x1C,0x03,0x04,0x03,0x04,0x04,0x01,0x01,0x04,0x01,0x01,0x04,0x04,0x04,0x01,0x01, + 0x1C,0x03,0x04,0x03,0x03,0x04,0x01,0x04,0x01,0x01,0x01,0x01,0x04,0x01,0x04,0x04, + 0x1C,0x1F,0x03,0x01,0x04,0x03,0x04,0x01,0x01,0x01,0x01,0x04,0x01,0x01,0x04,0x01, + 0x1C,0x03,0x01,0x04,0x04,0x03,0x03,0x03,0x03,0x01,0x04,0x04,0x01,0x01,0x04,0x01, + 0x1C,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x04,0x01,0x01,0x04,0x01,0x04, +}; +uint8_t tileset_tile_21_data[258] = { + 16, // tile_width + 16, // tile_height + 0x05,0x04,0x05,0x01,0x05,0x05,0x04,0x01,0x04,0x05,0x05,0x03,0x1F,0x4B,0x4B,0x4B, + 0x05,0x01,0x05,0x05,0x01,0x04,0x01,0x01,0x05,0x01,0x04,0x1C,0x1C,0x4B,0x1F,0x4B, + 0x05,0x05,0x05,0x01,0x04,0x04,0x01,0x01,0x05,0x05,0x05,0x03,0x04,0x04,0x1C,0x1F, + 0x01,0x05,0x04,0x04,0x01,0x01,0x01,0x04,0x01,0x05,0x05,0x03,0x03,0x03,0x1C,0x1C, + 0x04,0x04,0x01,0x01,0x01,0x05,0x01,0x05,0x03,0x01,0x03,0x01,0x01,0x03,0x04,0x1C, + 0x01,0x04,0x01,0x01,0x05,0x01,0x05,0x01,0x05,0x04,0x03,0x01,0x04,0x04,0x04,0x1C, + 0x05,0x05,0x01,0x05,0x01,0x05,0x01,0x05,0x05,0x03,0x04,0x04,0x01,0x03,0x1C,0x1F, + 0x05,0x01,0x05,0x01,0x05,0x04,0x05,0x05,0x04,0x04,0x01,0x04,0x04,0x04,0x1F,0x1F, + 0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x01,0x01,0x01,0x04,0x03,0x1F,0x1F, + 0x05,0x05,0x04,0x05,0x04,0x04,0x01,0x01,0x01,0x04,0x01,0x01,0x01,0x03,0x03,0x1F, + 0x01,0x05,0x01,0x03,0x04,0x04,0x01,0x01,0x01,0x01,0x04,0x01,0x04,0x01,0x04,0x1C, + 0x01,0x01,0x04,0x04,0x04,0x01,0x01,0x04,0x01,0x01,0x04,0x04,0x03,0x04,0x03,0x1C, + 0x04,0x04,0x01,0x39,0x01,0x01,0x01,0x01,0x04,0x01,0x04,0x03,0x03,0x04,0x03,0x1C, + 0x01,0x04,0x01,0x01,0x04,0x01,0x01,0x01,0x01,0x04,0x03,0x04,0x01,0x03,0x1C,0x1C, + 0x01,0x04,0x01,0x01,0x04,0x04,0x01,0x03,0x03,0x03,0x03,0x04,0x04,0x01,0x03,0x1C, + 0x04,0x01,0x04,0x01,0x01,0x04,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x1C, +}; +uint8_t tileset_tile_22_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x4B,0x03,0x05,0x05,0x04,0x01,0x04,0x05,0x05,0x05,0x05,0x04,0x05, + 0x4B,0x4B,0x4B,0x1F,0x4B,0x04,0x01,0x05,0x05,0x04,0x05,0x01,0x01,0x05,0x01,0x05, + 0x4B,0x4B,0x4B,0x1F,0x03,0x05,0x05,0x05,0x01,0x01,0x04,0x04,0x04,0x01,0x05,0x05, + 0x4B,0x1F,0x03,0x03,0x03,0x05,0x05,0x01,0x04,0x01,0x05,0x05,0x01,0x04,0x05,0x01, + 0x4B,0x4B,0x03,0x01,0x01,0x03,0x01,0x03,0x05,0x05,0x05,0x05,0x01,0x01,0x04,0x04, + 0x4B,0x4B,0x4B,0x04,0x01,0x03,0x04,0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x04,0x01, + 0x4B,0x4B,0x03,0x01,0x04,0x04,0x03,0x05,0x04,0x05,0x05,0x01,0x05,0x05,0x05,0x05, + 0x4B,0x4B,0x04,0x04,0x04,0x01,0x04,0x04,0x05,0x05,0x04,0x05,0x05,0x05,0x01,0x05, + 0x4B,0x4B,0x03,0x04,0x01,0x01,0x01,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05, + 0x4B,0x03,0x03,0x01,0x01,0x01,0x04,0x01,0x01,0x01,0x04,0x04,0x05,0x04,0x05,0x05, + 0x4B,0x04,0x01,0x04,0x01,0x04,0x01,0x01,0x01,0x01,0x04,0x04,0x03,0x01,0x05,0x01, + 0x4B,0x03,0x04,0x03,0x04,0x04,0x01,0x01,0x04,0x01,0x01,0x04,0x04,0x04,0x01,0x01, + 0x4B,0x03,0x04,0x03,0x03,0x04,0x01,0x04,0x01,0x01,0x01,0x01,0x04,0x01,0x04,0x04, + 0x4B,0x4B,0x03,0x01,0x04,0x03,0x04,0x01,0x01,0x01,0x01,0x04,0x01,0x01,0x04,0x01, + 0x4B,0x03,0x01,0x04,0x04,0x03,0x03,0x03,0x03,0x01,0x04,0x04,0x01,0x01,0x04,0x01, + 0x4B,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x04,0x01,0x01,0x04,0x01,0x04, +}; +uint8_t tileset_tile_23_data[258] = { + 16, // tile_width + 16, // tile_height + 0x05,0x04,0x05,0x01,0x05,0x05,0x04,0x01,0x04,0x05,0x05,0x03,0x4B,0x4B,0x4B,0x4B, + 0x05,0x01,0x05,0x05,0x01,0x04,0x01,0x01,0x05,0x01,0x04,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x05,0x05,0x05,0x01,0x04,0x04,0x01,0x01,0x05,0x05,0x05,0x03,0x4B,0x3D,0x4B,0x4B, + 0x01,0x05,0x04,0x04,0x01,0x01,0x01,0x04,0x01,0x05,0x05,0x03,0x03,0x03,0x4B,0x4B, + 0x04,0x04,0x01,0x01,0x01,0x05,0x01,0x05,0x03,0x01,0x03,0x01,0x01,0x03,0x4B,0x4B, + 0x01,0x04,0x01,0x01,0x05,0x01,0x05,0x01,0x05,0x04,0x03,0x01,0x04,0x4B,0x4B,0x4B, + 0x05,0x05,0x01,0x05,0x01,0x05,0x01,0x05,0x05,0x03,0x04,0x04,0x01,0x03,0x4B,0x4B, + 0x05,0x01,0x05,0x01,0x05,0x04,0x05,0x05,0x04,0x04,0x01,0x04,0x04,0x04,0x4B,0x4B, + 0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x01,0x01,0x01,0x04,0x03,0x4B,0x4B, + 0x05,0x05,0x04,0x05,0x04,0x04,0x01,0x01,0x01,0x04,0x01,0x01,0x01,0x03,0x03,0x4B, + 0x01,0x05,0x01,0x03,0x04,0x04,0x01,0x01,0x01,0x01,0x04,0x01,0x04,0x01,0x04,0x4B, + 0x01,0x01,0x04,0x04,0x04,0x01,0x01,0x04,0x01,0x01,0x04,0x04,0x03,0x04,0x03,0x4B, + 0x04,0x04,0x01,0x04,0x01,0x01,0x01,0x01,0x04,0x01,0x04,0x03,0x03,0x04,0x03,0x4B, + 0x01,0x04,0x01,0x01,0x04,0x01,0x01,0x01,0x01,0x04,0x03,0x04,0x01,0x03,0x4B,0x4B, + 0x01,0x04,0x01,0x01,0x04,0x04,0x01,0x03,0x03,0x03,0x03,0x04,0x04,0x01,0x03,0x4B, + 0x04,0x01,0x04,0x01,0x01,0x04,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x4B, +}; +uint8_t tileset_tile_24_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14, + 0x07,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07, + 0x07,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x07,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14, + 0x07,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07, + 0x07,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x07,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14, + 0x07,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07, + 0x07,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x07,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14, + 0x07,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07, + 0x07,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, +}; +uint8_t tileset_tile_25_data[258] = { + 16, // tile_width + 16, // tile_height + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14, + 0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14, + 0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14, + 0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14, + 0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, +}; +uint8_t tileset_tile_26_data[258] = { + 16, // tile_width + 16, // tile_height + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14, + 0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14, + 0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14, + 0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14, + 0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14, +}; +uint8_t tileset_tile_27_data[258] = { + 16, // tile_width + 16, // tile_height + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x19,0x02, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x19,0x02, + 0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x02, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x19,0x02, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x19,0x02, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x19,0x02, + 0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x02, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x19,0x02, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x19,0x02, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x19,0x02, + 0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x02, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x19,0x02, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x19,0x02, + 0x07,0x07,0x07,0x07,0x14,0x14,0x14,0x14,0x07,0x07,0x07,0x07,0x14,0x14,0x19,0x02, + 0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x07,0x19,0x18,0x18,0x14,0x07,0x07,0x07,0x02, + 0x19,0x18,0x18,0x14,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x14,0x14,0x14,0x19,0x02, +}; +uint8_t tileset_tile_28_data[258] = { + 16, // tile_width + 16, // tile_height + 0x02,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09, + 0x02,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09, + 0x02,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09, + 0x02,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09, + 0x02,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09, + 0x02,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09, + 0x02,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09, + 0x02,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09, + 0x02,0x12,0x12,0x12,0x09,0x12,0x12,0x0F,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x12,0x12,0x12,0x09,0x12,0x0F,0x0F,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x12,0x12,0x12,0x09,0x0F,0x0F,0x0F,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x12,0x12,0x12,0x09,0x0F,0x0F,0x0F,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x12,0x12,0x0F,0x07,0x07,0x0F,0x0F,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x12,0x0F,0x0F,0x0F,0x07,0x07,0x0F,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, +}; +uint8_t tileset_tile_29_data[258] = { + 16, // tile_width + 16, // tile_height + 0x09,0x0F,0x0F,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x07,0x07,0x07,0x07,0x07, + 0x09,0x0F,0x0F,0x09,0x12,0x12,0x12,0x09,0x07,0x07,0x07,0x09,0x09,0x09,0x09,0x09, + 0x09,0x0F,0x0F,0x09,0x12,0x12,0x07,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x0F,0x0F,0x09,0x12,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x0F,0x0F,0x07,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x0F,0x07,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x0A,0x0B, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x0A,0x0B,0x0B,0x0B, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x0B,0x0B,0x0B,0x0B,0x0B, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x0A,0x0B,0x0B,0x0A,0x09,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x0B,0x0B,0x0A,0x09,0x12,0x0B, + 0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x0A,0x0B,0x0B,0x09,0x12,0x0B,0x0B, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x09,0x09,0x0F,0x0F,0x0F,0x09,0x0B,0x0B,0x0B, +}; +uint8_t tileset_tile_30_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x07,0x07,0x07,0x07,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x0F,0x0F,0x09, + 0x09,0x09,0x09,0x09,0x09,0x07,0x07,0x07,0x09,0x12,0x12,0x12,0x09,0x0F,0x0F,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x07,0x12,0x12,0x09,0x0F,0x0F,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x12,0x09,0x0F,0x0F,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x07,0x0F,0x0F,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x07,0x0F,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x0B,0x0A,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x0B,0x0B,0x0B,0x0A,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x0B,0x0B,0x0B,0x0B,0x0B,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x09,0x0A,0x0B,0x0B,0x0A,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x0B,0x12,0x09,0x0A,0x0B,0x0B,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09, + 0x0B,0x0B,0x12,0x09,0x0B,0x0B,0x0A,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09, + 0x0B,0x0B,0x0B,0x09,0x0F,0x0F,0x0F,0x09,0x09,0x07,0x07,0x07,0x07,0x07,0x07,0x07, +}; +uint8_t tileset_tile_31_data[258] = { + 16, // tile_width + 16, // tile_height + 0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x02, + 0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x02, + 0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x02, + 0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x02, + 0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x02, + 0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x02, + 0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x02, + 0x16,0x16,0x16,0x09,0x16,0x16,0x16,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x02, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0F,0x12,0x12,0x09,0x12,0x12,0x12,0x02, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0F,0x0F,0x12,0x09,0x12,0x12,0x12,0x02, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0F,0x0F,0x0F,0x09,0x12,0x12,0x12,0x02, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0F,0x0F,0x0F,0x09,0x12,0x12,0x12,0x02, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0F,0x0F,0x07,0x07,0x0F,0x12,0x12,0x02, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0F,0x07,0x07,0x0F,0x0F,0x0F,0x12,0x02, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x02, +}; +uint8_t tileset_tile_32_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x0E,0x0E,0x4B,0x4B,0x4B,0x4B,0x0E,0x0E, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, + 0x4B,0x4B,0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, + 0x4B,0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, + 0x4B,0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x0E,0x15,0x15,0x0E,0x0E,0x0E,0x0E,0x15,0x15, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x15,0x15,0x15,0x15,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +}; +uint8_t tileset_tile_33_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x0E,0x0E,0x4B,0x4B,0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B,0x4B,0x4B,0x0E,0x0E, + 0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, + 0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, + 0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, + 0x15,0x0E,0x0E,0x15,0x15,0x0E,0x0E,0x15,0x15,0x15,0x0E,0x0E,0x0E,0x0E,0x15,0x15, + 0x08,0x15,0x15,0x08,0x08,0x15,0x15,0x08,0x08,0x08,0x15,0x15,0x15,0x15,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x15,0x08,0x08,0x08,0x08,0x3A,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x3A,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +}; +uint8_t tileset_tile_34_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x0E,0x0E,0x4B,0x4B,0x4B,0x4B,0x0E,0x0E,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B,0x4B,0x4B, + 0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B,0x4B, + 0x15,0x0E,0x0E,0x15,0x15,0x0E,0x0E,0x15,0x0E,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B,0x4B, + 0x08,0x15,0x15,0x08,0x08,0x15,0x15,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0E,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B, +}; +uint8_t tileset_tile_35_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x20,0x20,0x26,0x2B,0x2B,0x26,0x2B,0x26,0x20,0x20,0x00,0x00,0x00, + 0x00,0x00,0x20,0x26,0x2B,0x2B,0x2B,0x2B,0x2B,0x26,0x2B,0x26,0x20,0x20,0x00,0x00, + 0x00,0x20,0x26,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x26,0x26,0x26,0x20,0x20,0x00, + 0x00,0x20,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x26,0x2B,0x26,0x20,0x26,0x20,0x00, + 0x20,0x26,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x26,0x26,0x26,0x20,0x20,0x27, + 0x20,0x26,0x26,0x2B,0x2B,0x2B,0x2B,0x26,0x2B,0x26,0x26,0x26,0x26,0x20,0x20,0x27, + 0x20,0x26,0x2B,0x26,0x2B,0x26,0x2B,0x2B,0x26,0x2B,0x26,0x26,0x20,0x26,0x20,0x27, + 0x20,0x26,0x26,0x2B,0x26,0x2B,0x26,0x26,0x2B,0x26,0x26,0x20,0x26,0x20,0x20,0x27, + 0x20,0x20,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x20,0x26,0x20,0x27, + 0x20,0x20,0x26,0x26,0x26,0x20,0x26,0x26,0x20,0x26,0x20,0x26,0x20,0x20,0x20,0x27, + 0x20,0x20,0x20,0x26,0x20,0x26,0x20,0x26,0x26,0x20,0x26,0x20,0x20,0x20,0x27,0x27, + 0x00,0x27,0x20,0x20,0x20,0x20,0x26,0x20,0x20,0x26,0x20,0x20,0x20,0x27,0x27,0x00, + 0x00,0x27,0x27,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x27,0x27,0x27,0x27,0x00, + 0x00,0x00,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x00,0x00, + 0x00,0x00,0x00,0x00,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x00,0x00,0x00,0x00, +}; +uint8_t tileset_tile_36_data[258] = { + 16, // tile_width + 16, // tile_height + 0x1F,0x03,0x04,0x04,0x03,0x04,0x04,0x04,0x03,0x03,0x03,0x01,0x01,0x04,0x01,0x01, + 0x4B,0x4B,0x03,0x03,0x04,0x04,0x03,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x01, + 0x4B,0x4B,0x4B,0x03,0x04,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03, + 0x4B,0x4B,0x4B,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x03,0x04,0x04,0x04,0x04,0x04, + 0x4B,0x4B,0x4B,0x1C,0x04,0x03,0x04,0x04,0x04,0x03,0x04,0x04,0x04,0x03,0x04,0x04, + 0x4B,0x4B,0x1C,0x04,0x04,0x04,0x03,0x03,0x04,0x03,0x04,0x04,0x03,0x03,0x04,0x04, + 0x4B,0x1C,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x03,0x04, + 0x4B,0x1C,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x37,0x03,0x03,0x04, + 0x4B,0x1C,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x37,0x3C,0x3C,0x03, + 0x4B,0x1C,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x37,0x3C,0x3C,0x3C, + 0x4B,0x1C,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x37,0x3C,0x3C, + 0x4B,0x1F,0x1C,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x37,0x37, + 0x4B,0x4B,0x1F,0x1C,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03, + 0x4B,0x4B,0x4B,0x1F,0x1C,0x1C,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x1F,0x1C,0x1C,0x1C,0x04,0x04,0x04,0x04,0x04,0x04,0x04, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x1F,0x1F,0x1C,0x1C,0x1C,0x04,0x04,0x04,0x04, +}; +uint8_t tileset_tile_37_data[258] = { + 16, // tile_width + 16, // tile_height + 0x01,0x01,0x04,0x01,0x01,0x03,0x03,0x03,0x04,0x04,0x04,0x03,0x04,0x04,0x03,0x4B, + 0x01,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x03,0x04,0x04,0x03,0x03,0x4B,0x4B, + 0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x04,0x03,0x1F,0x4B,0x4B, + 0x04,0x04,0x04,0x04,0x04,0x03,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x4B,0x4B,0x4B, + 0x04,0x04,0x03,0x04,0x04,0x04,0x03,0x04,0x04,0x04,0x03,0x04,0x1C,0x4B,0x4B,0x4B, + 0x04,0x04,0x03,0x03,0x04,0x04,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x1C,0x4B,0x4B, + 0x04,0x03,0x03,0x03,0x04,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x1C,0x4B, + 0x04,0x03,0x03,0x37,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x1C,0x4B, + 0x03,0x3C,0x3C,0x37,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x1C,0x4B, + 0x3C,0x3C,0x3C,0x37,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x1C,0x4B, + 0x3C,0x3C,0x37,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x1C,0x4B, + 0x37,0x37,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x1C,0x1F,0x4B, + 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x1C,0x1F,0x4B,0x4B, + 0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x1C,0x1C,0x1F,0x4B,0x4B,0x4B, + 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x1C,0x1C,0x1C,0x1F,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x04,0x04,0x04,0x04,0x1C,0x1C,0x1C,0x1F,0x1F,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, +}; +uint8_t tileset_tile_38_data[258] = { + 16, // tile_width + 16, // tile_height + 0x1F,0x03,0x04,0x04,0x03,0x04,0x04,0x04,0x03,0x03,0x03,0x01,0x01,0x04,0x01,0x01, + 0x4B,0x4B,0x03,0x03,0x04,0x04,0x03,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x01, + 0x4B,0x4B,0x4B,0x03,0x04,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03, + 0x4B,0x4B,0x4B,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x03,0x04,0x04,0x04,0x04,0x03, + 0x4B,0x4B,0x4B,0x1C,0x04,0x03,0x04,0x04,0x04,0x03,0x04,0x04,0x04,0x03,0x03,0x05, + 0x4B,0x4B,0x1C,0x04,0x04,0x04,0x03,0x03,0x04,0x03,0x04,0x04,0x03,0x03,0x04,0x05, + 0x4B,0x1C,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x04,0x03,0x03,0x01,0x05, + 0x4B,0x1C,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05, + 0x4B,0x1C,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x01,0x05,0x05, + 0x4B,0x1C,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x04,0x01,0x01,0x05,0x01,0x05,0x05, + 0x4B,0x1C,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x04,0x05,0x05,0x01,0x05,0x05,0x05, + 0x4B,0x4B,0x1C,0x04,0x04,0x04,0x04,0x04,0x01,0x05,0x01,0x01,0x05,0x05,0x05,0x05, + 0x4B,0x4B,0x4B,0x1C,0x04,0x04,0x04,0x01,0x04,0x04,0x01,0x05,0x05,0x05,0x05,0x05, + 0x4B,0x4B,0x4B,0x4B,0x1C,0x03,0x05,0x05,0x04,0x01,0x05,0x05,0x05,0x05,0x05,0x05, + 0x4B,0x4B,0x1F,0x4B,0x4B,0x4B,0x04,0x04,0x01,0x05,0x05,0x01,0x05,0x05,0x05,0x05, + 0x4B,0x4B,0x4B,0x4B,0x03,0x01,0x05,0x05,0x04,0x05,0x04,0x05,0x05,0x05,0x05,0x05, +}; +uint8_t tileset_tile_39_data[258] = { + 16, // tile_width + 16, // tile_height + 0x01,0x01,0x04,0x01,0x01,0x03,0x03,0x03,0x04,0x04,0x04,0x03,0x04,0x04,0x03,0x4B, + 0x01,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x03,0x04,0x04,0x03,0x03,0x4B,0x4B, + 0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x04,0x03,0x1F,0x4B,0x4B, + 0x03,0x04,0x04,0x04,0x04,0x03,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x4B,0x4B,0x4B, + 0x05,0x03,0x03,0x04,0x04,0x04,0x03,0x04,0x04,0x04,0x03,0x04,0x1C,0x4B,0x4B,0x4B, + 0x05,0x04,0x03,0x03,0x04,0x04,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x1C,0x4B,0x4B, + 0x05,0x01,0x03,0x03,0x04,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x1C,0x4B, + 0x05,0x01,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x1C,0x4B, + 0x05,0x01,0x01,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x1C,0x4B, + 0x05,0x01,0x01,0x01,0x01,0x01,0x04,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x1C,0x4B, + 0x05,0x01,0x05,0x01,0x01,0x05,0x04,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x1C,0x4B, + 0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x01,0x03,0x04,0x04,0x04,0x04,0x1C,0x4B,0x4B, + 0x05,0x05,0x05,0x05,0x01,0x05,0x04,0x04,0x01,0x03,0x04,0x04,0x1C,0x1F,0x1F,0x4B, + 0x05,0x05,0x05,0x01,0x05,0x01,0x01,0x04,0x05,0x01,0x03,0x1C,0x4B,0x1F,0x1F,0x4B, + 0x05,0x05,0x05,0x05,0x01,0x05,0x05,0x01,0x04,0x04,0x04,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x05,0x05,0x05,0x01,0x05,0x04,0x05,0x04,0x05,0x01,0x01,0x03,0x3B,0x4B,0x4B,0x1F, +}; +uint8_t tileset_tile_40_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x18,0x18,0x18,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x18,0x14,0x14,0x14,0x14, + 0x07,0x07,0x07,0x07,0x18,0x18,0x18,0x18,0x07,0x07,0x07,0x07,0x18,0x18,0x18,0x18, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02, + 0x02,0x02,0x02,0x02,0x07,0x07,0x07,0x02,0x02,0x02,0x02,0x02,0x07,0x07,0x07,0x02, + 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x00,0x00,0x02,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x00,0x00,0x02,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x00,0x00,0x02,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, +}; +uint8_t tileset_tile_41_data[258] = { + 16, // tile_width + 16, // tile_height + 0x19,0x18,0x18,0x18,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x18,0x14,0x14,0x14,0x14, + 0x07,0x07,0x07,0x07,0x18,0x18,0x18,0x18,0x07,0x07,0x07,0x07,0x18,0x18,0x18,0x18, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02, + 0x02,0x02,0x02,0x02,0x07,0x07,0x07,0x02,0x02,0x02,0x02,0x02,0x07,0x07,0x07,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x10,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x10,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x10,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x10,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x02,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x02, + 0x02,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x02, + 0x02,0x32,0x32,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x32,0x32,0x02, +}; +uint8_t tileset_tile_42_data[258] = { + 16, // tile_width + 16, // tile_height + 0x19,0x18,0x18,0x18,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x18,0x14,0x14,0x14,0x14, + 0x07,0x07,0x07,0x07,0x18,0x18,0x18,0x18,0x07,0x07,0x07,0x07,0x18,0x18,0x18,0x18, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02, + 0x02,0x02,0x02,0x02,0x07,0x07,0x07,0x02,0x02,0x02,0x02,0x02,0x07,0x07,0x07,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x4A,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x24, + 0x24,0x02,0x2E,0x2E,0x2E,0x2E,0x2E,0x02,0x02,0x2E,0x2E,0x2E,0x2E,0x2E,0x02,0x24, + 0x24,0x02,0x2E,0x2E,0x2E,0x2E,0x2E,0x02,0x02,0x2E,0x2E,0x2E,0x2E,0x2E,0x02,0x24, + 0x24,0x02,0x2E,0x2E,0x2E,0x2E,0x2E,0x02,0x02,0x2E,0x2E,0x2E,0x2E,0x2E,0x02,0x24, + 0x24,0x02,0x2E,0x34,0x2E,0x34,0x2E,0x02,0x02,0x34,0x2E,0x34,0x2E,0x34,0x02,0x24, + 0x24,0x02,0x34,0x2E,0x34,0x2E,0x34,0x02,0x02,0x2E,0x34,0x2E,0x34,0x2E,0x02,0x24, +}; +uint8_t tileset_tile_43_data[258] = { + 16, // tile_width + 16, // tile_height + 0x19,0x18,0x18,0x18,0x14,0x14,0x14,0x14,0x19,0x18,0x18,0x18,0x14,0x14,0x19,0x02, + 0x07,0x07,0x07,0x07,0x18,0x18,0x18,0x18,0x07,0x07,0x07,0x07,0x18,0x18,0x14,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02, + 0x02,0x02,0x02,0x02,0x07,0x07,0x07,0x02,0x02,0x02,0x02,0x02,0x07,0x07,0x07,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02,0x10,0x10, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02,0x10,0x10, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, +}; +uint8_t tileset_tile_44_data[258] = { + 16, // tile_width + 16, // tile_height + 0x02,0x07,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x02,0x07,0x09,0x0F,0x0F,0x0F,0x0F,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x10,0x02,0x07,0x09,0x0F,0x0F,0x0F,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x17,0x10,0x02,0x07,0x09,0x0F,0x0F,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x0B,0x17,0x10,0x02,0x07,0x09,0x0F,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x1B,0x0B,0x17,0x10,0x02,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x10,0x1B,0x0B,0x17,0x10,0x02,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x17,0x10,0x1B,0x0B,0x17,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x02,0x17,0x1B,0x10,0x1B,0x0B,0x17,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x17,0x1B,0x1B,0x10,0x1B,0x0B,0x17,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x17,0x1B,0x1B,0x1B,0x10,0x1B,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x10,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, +}; +uint8_t tileset_tile_45_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x0A,0x0A,0x0A, + 0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x0A,0x0A,0x0A,0x09,0x12,0x0A,0x0A, + 0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x0A,0x0A,0x0A,0x09,0x12,0x0A, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x0A,0x0A,0x0A,0x0A,0x09,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x0A,0x0A,0x0A,0x0A, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x09,0x09,0x09,0x0F,0x0A,0x0A, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, +}; +uint8_t tileset_tile_46_data[258] = { + 16, // tile_width + 16, // tile_height + 0x0A,0x0A,0x0A,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x0A,0x0A,0x12,0x09,0x0A,0x0A,0x0A,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09, + 0x0A,0x12,0x09,0x0A,0x0A,0x0A,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x09,0x0A,0x0A,0x0A,0x0A,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x0A,0x0A,0x0A,0x0A,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x0A,0x0A,0x0F,0x09,0x09,0x09,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x0B,0x0B,0x1B,0x1B,0x1B,0x1B,0x1B, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x02,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x1B,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B, +}; +uint8_t tileset_tile_47_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x07,0x02, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x09,0x07,0x02,0x02, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0F,0x0F,0x0F,0x09,0x07,0x02,0x10,0x02, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0F,0x0F,0x09,0x07,0x02,0x10,0x17,0x02, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0F,0x09,0x07,0x02,0x10,0x17,0x0B,0x02, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x02,0x10,0x17,0x0B,0x1B,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02,0x10,0x17,0x0B,0x1B,0x10,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x17,0x0B,0x1B,0x10,0x17,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x17,0x0B,0x1B,0x10,0x1B,0x17,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x17,0x0B,0x1B,0x10,0x1B,0x1B,0x17,0x02, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1B,0x10,0x1B,0x1B,0x1B,0x17,0x02, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x17,0x10,0x1B,0x1B,0x1B,0x1B,0x17,0x02, + 0x1B,0x1B,0x1B,0x1B,0x1B,0x0B,0x0B,0x02,0x10,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x02, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x1B,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x02, + 0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x02, +}; +uint8_t tileset_tile_48_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x15,0x08,0x08,0x08,0x08,0x3A,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3A,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +}; +uint8_t tileset_tile_49_data[258] = { + 16, // tile_width + 16, // tile_height + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08,0x3A,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3A,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x15,0x08,0x08,0x08,0x08,0x3A,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x3A,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +}; +uint8_t tileset_tile_50_data[258] = { + 16, // tile_width + 16, // tile_height + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x15,0x08,0x08,0x08,0x08,0x3A,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x3A,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B, +}; +uint8_t tileset_tile_51_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x2B,0x2B,0x20,0x20,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x20,0x20,0x20,0x2B,0x2B,0x2B,0x2B,0x26,0x20,0x00,0x00,0x00,0x00, + 0x00,0x00,0x20,0x26,0x2B,0x20,0x2B,0x2B,0x2B,0x26,0x26,0x20,0x27,0x00,0x00,0x00, + 0x00,0x00,0x20,0x20,0x2B,0x2B,0x26,0x2B,0x26,0x2B,0x20,0x27,0x26,0x27,0x00,0x00, + 0x00,0x20,0x26,0x27,0x26,0x2B,0x2B,0x20,0x20,0x27,0x27,0x20,0x20,0x27,0x00,0x00, + 0x00,0x27,0x20,0x27,0x20,0x26,0x2B,0x26,0x2B,0x26,0x20,0x26,0x26,0x20,0x27,0x00, + 0x00,0x27,0x26,0x2B,0x20,0x20,0x26,0x2B,0x26,0x27,0x26,0x26,0x26,0x27,0x27,0x00, + 0x00,0x27,0x20,0x26,0x2B,0x20,0x2B,0x26,0x20,0x27,0x20,0x26,0x27,0x20,0x27,0x00, + 0x00,0x27,0x20,0x20,0x20,0x27,0x20,0x20,0x26,0x26,0x27,0x20,0x20,0x20,0x27,0x00, + 0x00,0x27,0x20,0x20,0x27,0x27,0x20,0x26,0x20,0x20,0x27,0x27,0x20,0x20,0x27,0x00, + 0x00,0x00,0x27,0x20,0x27,0x27,0x20,0x20,0x20,0x20,0x27,0x27,0x27,0x27,0x00,0x00, + 0x00,0x00,0x00,0x27,0x27,0x27,0x27,0x20,0x20,0x27,0x27,0x27,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x27,0x27,0x27,0x00,0x00,0x00,0x00,0x00,0x00, +}; +uint8_t tileset_tile_52_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x36,0x36,0x29,0x29,0x29,0x29,0x29,0x00,0x00, + 0x00,0x33,0x36,0x36,0x36,0x36,0x2C,0x36,0x36,0x2C,0x36,0x36,0x36,0x36,0x29,0x00, + 0x00,0x33,0x36,0x36,0x36,0x36,0x36,0x2C,0x2C,0x36,0x36,0x36,0x36,0x36,0x29,0x00, + 0x00,0x33,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x29,0x00, + 0x00,0x33,0x2C,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x2C,0x29,0x00, + 0x00,0x33,0x2C,0x33,0x28,0x33,0x28,0x28,0x28,0x28,0x33,0x28,0x33,0x2C,0x29,0x00, + 0x00,0x33,0x2C,0x33,0x33,0x28,0x33,0x2C,0x2C,0x33,0x28,0x33,0x33,0x2C,0x29,0x00, + 0x00,0x33,0x2C,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x2C,0x29,0x00, + 0x00,0x33,0x2C,0x28,0x2C,0x2C,0x28,0x2C,0x28,0x2C,0x2C,0x2C,0x28,0x2C,0x29,0x00, + 0x00,0x33,0x2C,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x2C,0x29,0x00, + 0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00, + 0x00,0x00,0x00,0x00,0x35,0x35,0x33,0x2C,0x2C,0x29,0x35,0x35,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x35,0x35,0x35,0x33,0x36,0x2C,0x29,0x35,0x35,0x35,0x00,0x00,0x00, + 0x00,0x00,0x00,0x35,0x35,0x35,0x35,0x29,0x29,0x35,0x35,0x35,0x35,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x00,0x00,0x00,0x00, +}; +uint8_t tileset_tile_53_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x37,0x37,0x37,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x37,0x09,0x09,0x09,0x09,0x37,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x37,0x09,0x1B,0x09,0x41,0x41,0x09,0x37,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x37,0x09,0x41,0x09,0x41,0x41,0x41,0x41,0x09,0x37,0x00,0x00,0x00, + 0x00,0x00,0x00,0x37,0x09,0x41,0x41,0x37,0x37,0x41,0x41,0x09,0x37,0x00,0x00,0x00, + 0x00,0x00,0x00,0x42,0x37,0x41,0x37,0x1B,0x35,0x37,0x41,0x37,0x42,0x00,0x00,0x00, + 0x00,0x00,0x00,0x42,0x43,0x37,0x37,0x35,0x35,0x37,0x37,0x43,0x42,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x42,0x43,0x1B,0x37,0x37,0x1B,0x43,0x42,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x42,0x43,0x1B,0x1B,0x43,0x42,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; +uint8_t tileset_tile_54_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x04,0x04,0x01,0x04,0x04,0x01,0x04,0x04,0x00,0x00,0x00,0x00, + 0x00,0x00,0x04,0x04,0x05,0x05,0x04,0x01,0x01,0x04,0x05,0x05,0x04,0x04,0x00,0x00, + 0x00,0x04,0x05,0x01,0x05,0x01,0x05,0x05,0x05,0x05,0x01,0x05,0x01,0x05,0x04,0x00, + 0x04,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x04, + 0x05,0x05,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x05, + 0x04,0x05,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x04, +}; +uint8_t tileset_tile_55_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x38,0x43,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x43,0x38,0x00, + 0x38,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x38, + 0x38,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x38, + 0x38,0x2F,0x44,0x44,0x48,0x2F,0x2F,0x2F,0x44,0x2F,0x2F,0x2F,0x44,0x2F,0x2F,0x38, + 0x38,0x2F,0x44,0x2F,0x44,0x2F,0x44,0x2F,0x2F,0x2F,0x48,0x2F,0x2F,0x44,0x2F,0x38, + 0x38,0x2F,0x48,0x2F,0x2F,0x2F,0x44,0x48,0x2F,0x2F,0x44,0x2F,0x44,0x48,0x2F,0x38, + 0x38,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x38, + 0x38,0x2F,0x46,0x09,0x09,0x09,0x46,0x09,0x09,0x09,0x46,0x46,0x09,0x46,0x2F,0x38, + 0x38,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x38, + 0x38,0x2F,0x46,0x2F,0x09,0x46,0x2F,0x09,0x09,0x2F,0x46,0x2F,0x46,0x09,0x2F,0x38, + 0x38,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x38, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x10,0x38,0x38,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x38,0x38,0x10, + 0x10,0x38,0x43,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x43,0x38,0x10, + 0x00,0x38,0x43,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x43,0x38,0x00, + 0x00,0x10,0x38,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x38,0x10,0x00, +}; +uint8_t tileset_tile_56_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x10,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x15,0x15,0x15,0x07,0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07, + 0x00,0x00,0x02,0x30,0x21,0x21,0x21,0x07,0x07,0x2A,0x21,0x21,0x21,0x21,0x21,0x07, + 0x00,0x00,0x02,0x30,0x21,0x21,0x21,0x07,0x07,0x15,0x21,0x21,0x21,0x21,0x21,0x07, + 0x00,0x00,0x02,0x30,0x21,0x21,0x21,0x07,0x07,0x15,0x21,0x21,0x21,0x21,0x21,0x07, + 0x00,0x00,0x02,0x30,0x21,0x21,0x21,0x07,0x07,0x15,0x21,0x21,0x21,0x21,0x21,0x07, + 0x00,0x00,0x02,0x30,0x21,0x21,0x21,0x07,0x07,0x15,0x21,0x21,0x21,0x21,0x21,0x07, + 0x00,0x00,0x10,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x10, +}; +uint8_t tileset_tile_57_data[258] = { + 16, // tile_width + 16, // tile_height + 0x02,0x32,0x32,0x07,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x07,0x32,0x32,0x02, + 0x02,0x32,0x32,0x07,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x07,0x32,0x32,0x02, + 0x02,0x32,0x32,0x07,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x07,0x32,0x32,0x02, + 0x02,0x32,0x32,0x07,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x07,0x32,0x32,0x02, + 0x02,0x32,0x32,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x32,0x32,0x02, + 0x02,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x02, + 0x02,0x07,0x07,0x24,0x32,0x24,0x32,0x24,0x32,0x24,0x32,0x24,0x32,0x24,0x32,0x02, + 0x07,0x30,0x15,0x07,0x24,0x32,0x24,0x32,0x24,0x32,0x24,0x32,0x24,0x32,0x24,0x02, + 0x07,0x15,0x15,0x07,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x02, + 0x02,0x07,0x07,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x02, + 0x02,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x02, + 0x02,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x02, + 0x02,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x02, + 0x02,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +}; +uint8_t tileset_tile_58_data[258] = { + 16, // tile_width + 16, // tile_height + 0x24,0x02,0x2E,0x34,0x2E,0x34,0x2E,0x02,0x02,0x34,0x2E,0x34,0x2E,0x34,0x02,0x24, + 0x24,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x24, + 0x24,0x02,0x34,0x34,0x34,0x34,0x34,0x02,0x02,0x34,0x34,0x34,0x34,0x34,0x02,0x24, + 0x24,0x02,0x34,0x34,0x34,0x34,0x34,0x02,0x02,0x34,0x34,0x34,0x34,0x34,0x02,0x24, + 0x24,0x02,0x34,0x34,0x34,0x34,0x34,0x02,0x02,0x34,0x34,0x34,0x34,0x34,0x02,0x24, + 0x24,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x24, + 0x15,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +}; +uint8_t tileset_tile_59_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x2A,0x15,0x2A,0x07,0x02,0x10,0x10, + 0x07,0x30,0x15,0x15,0x15,0x15,0x21,0x07,0x10,0x15,0x15,0x15,0x07,0x02,0x10,0x10, + 0x07,0x2A,0x21,0x21,0x21,0x21,0x21,0x07,0x10,0x21,0x21,0x21,0x07,0x02,0x10,0x10, + 0x07,0x15,0x21,0x21,0x21,0x21,0x21,0x07,0x10,0x21,0x21,0x21,0x07,0x02,0x10,0x10, + 0x07,0x15,0x21,0x21,0x21,0x21,0x21,0x07,0x10,0x21,0x21,0x21,0x07,0x02,0x10,0x10, + 0x07,0x15,0x21,0x21,0x21,0x21,0x21,0x07,0x10,0x21,0x21,0x21,0x07,0x02,0x10,0x10, + 0x07,0x15,0x21,0x21,0x21,0x21,0x21,0x07,0x10,0x21,0x21,0x21,0x07,0x02,0x10,0x10, + 0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10, +}; +uint8_t tileset_tile_60_data[258] = { + 16, // tile_width + 16, // tile_height + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x0B,0x17,0x1B,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x0B,0x0B,0x17,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x0B,0x0B,0x0B,0x17,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x0A,0x0B,0x0B,0x0B,0x17,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x0A,0x0A,0x0B,0x0B,0x0B,0x17,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x10,0x02,0x0A,0x0A,0x0B,0x0B,0x0B,0x17,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x10,0x10,0x02,0x0A,0x0A,0x0B,0x0B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x00,0x10,0x10,0x02,0x0A,0x0A,0x0B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x00,0x00,0x10,0x10,0x02,0x0A,0x0A,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x00,0x00,0x00,0x10,0x10,0x02,0x0A,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x00,0x00,0x00,0x00,0x10,0x10,0x02,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +}; +uint8_t tileset_tile_61_data[258] = { + 16, // tile_width + 16, // tile_height + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x02, + 0x02,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x02, + 0x02,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x02, + 0x02,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x02, + 0x02,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +}; +uint8_t tileset_tile_62_data[258] = { + 16, // tile_width + 16, // tile_height + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x1B,0x16,0x0F,0x0F,0x0F,0x16,0x1B,0x1B, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x1B,0x0F,0x0F,0x1B,0x0F,0x0F,0x1B,0x1B, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x1B,0x0F,0x0F,0x1B,0x0F,0x0F,0x1B,0x1B, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0B,0x09,0x09,0x09,0x09,0x0B,0x0B,0x09, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0B,0x09,0x09,0x0B,0x0B,0x0B,0x0B,0x09, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0B,0x0B,0x09,0x09,0x0B,0x09,0x0B,0x09, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +}; +uint8_t tileset_tile_63_data[258] = { + 16, // tile_width + 16, // tile_height + 0x1B,0x1B,0x16,0x0F,0x0F,0x0F,0x16,0x1B,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x02, + 0x1B,0x1B,0x0F,0x0F,0x16,0x1B,0x1B,0x1B,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x02, + 0x1B,0x1B,0x0F,0x0F,0x1B,0x1B,0x1B,0x1B,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x02, + 0x09,0x0B,0x09,0x09,0x16,0x0B,0x0B,0x0B,0x17,0x1B,0x1B,0x1B,0x1B,0x17,0x0B,0x02, + 0x09,0x0B,0x16,0x09,0x09,0x09,0x16,0x0B,0x17,0x1B,0x1B,0x1B,0x17,0x0B,0x0B,0x02, + 0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x17,0x1B,0x1B,0x17,0x0B,0x0B,0x0B,0x02, + 0x09,0x0B,0x09,0x0B,0x09,0x09,0x0B,0x0B,0x17,0x1B,0x17,0x0B,0x0B,0x0B,0x0A,0x02, + 0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x17,0x17,0x0B,0x0B,0x0B,0x0A,0x0A,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x17,0x0B,0x0B,0x0B,0x0A,0x0A,0x02,0x10, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x17,0x0B,0x0B,0x0A,0x0A,0x02,0x10,0x10, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x17,0x0B,0x0A,0x0A,0x02,0x10,0x10,0x00, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x17,0x0A,0x0A,0x02,0x10,0x10,0x00,0x00, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x0A,0x02,0x10,0x10,0x00,0x00,0x00, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x02,0x10,0x10,0x00,0x00,0x00,0x00, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x00,0x00,0x00,0x00,0x00, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00, +}; +uint8_t tileset_tile_64_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x0E,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x15,0x15,0x08,0x08,0x15,0x15,0x08, + 0x4B,0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x0E,0x15,0x0E,0x0E,0x15,0x15,0x0E,0x0E,0x15, + 0x4B,0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, + 0x4B,0x4B,0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x0E,0x0E,0x4B,0x4B,0x4B,0x4B,0x0E,0x0E, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, +}; +uint8_t tileset_tile_65_data[258] = { + 16, // tile_width + 16, // tile_height + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08,0x3A,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3A,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x15,0x15,0x15,0x15,0x08,0x08,0x08,0x15,0x15,0x08,0x08,0x15,0x15,0x08, + 0x15,0x15,0x0E,0x0E,0x0E,0x0E,0x15,0x15,0x15,0x0E,0x0E,0x15,0x15,0x0E,0x0E,0x15, + 0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, + 0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, + 0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, + 0x0E,0x0E,0x4B,0x4B,0x4B,0x4B,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B,0x4B,0x4B,0x0E,0x0E, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, +}; +uint8_t tileset_tile_66_data[258] = { + 16, // tile_width + 16, // tile_height + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0E,0x0E,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x15,0x15,0x15,0x15,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B, + 0x15,0x15,0x0E,0x0E,0x0E,0x0E,0x15,0x15,0x0E,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B,0x4B, + 0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B,0x4B, + 0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B,0x4B,0x4B, + 0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x0E,0x0E,0x4B,0x4B,0x4B,0x4B,0x0E,0x0E,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, +}; +uint8_t tileset_tile_67_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08, + 0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x15,0x15,0x15,0x08,0x08,0x08,0x3A,0x08,0x08,0x15,0x08,0x08,0x08,0x08,0x3A,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3A,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x15,0x08,0x08,0x08,0x08,0x3A,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x3A,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +}; +uint8_t tileset_tile_68_data[258] = { + 16, // tile_width + 16, // tile_height + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x4B, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3A,0x08,0x08,0x08,0x15,0x15,0x15, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x15,0x08,0x08,0x08,0x08,0x3A,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x3A,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +}; +uint8_t tileset_tile_69_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x04,0x04,0x04,0x05,0x04, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x04,0x03,0x03,0x05,0x05,0x04,0x05, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x04,0x05,0x01,0x05,0x04,0x05,0x01, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x1F,0x4B,0x04,0x04,0x01,0x01,0x04,0x01,0x04,0x05,0x01, + 0x4B,0x4B,0x1F,0x4B,0x4B,0x1F,0x04,0x05,0x05,0x01,0x05,0x05,0x05,0x01,0x04,0x01, + 0x4B,0x4B,0x4B,0x1F,0x4B,0x4B,0x01,0x01,0x01,0x05,0x05,0x05,0x05,0x01,0x01,0x01, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x04,0x03,0x05,0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x01, + 0x4B,0x4B,0x4B,0x4B,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x01,0x04,0x04, + 0x4B,0x4B,0x1C,0x04,0x03,0x05,0x05,0x05,0x01,0x01,0x05,0x01,0x01,0x01,0x01,0x01, + 0x4B,0x4B,0x1C,0x03,0x01,0x05,0x05,0x01,0x04,0x01,0x05,0x05,0x01,0x05,0x05,0x04, + 0x4B,0x4B,0x04,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x05,0x05,0x05,0x05,0x05,0x05, + 0x4B,0x4B,0x04,0x03,0x01,0x01,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05, + 0x4B,0x1F,0x04,0x03,0x01,0x05,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05, + 0x4B,0x1F,0x04,0x04,0x03,0x03,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05, + 0x1F,0x1F,0x04,0x03,0x01,0x04,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05, + 0x1F,0x1C,0x03,0x01,0x04,0x01,0x04,0x05,0x05,0x05,0x05,0x05,0x01,0x01,0x05,0x05, +}; +uint8_t tileset_tile_70_data[258] = { + 16, // tile_width + 16, // tile_height + 0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01, + 0x01,0x01,0x05,0x05,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x05,0x01,0x01, + 0x01,0x05,0x05,0x05,0x05,0x01,0x01,0x05,0x05,0x01,0x01,0x05,0x05,0x05,0x05,0x01, + 0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01, + 0x01,0x01,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x01,0x01, + 0x01,0x01,0x01,0x05,0x05,0x05,0x05,0x01,0x01,0x05,0x05,0x05,0x05,0x01,0x01,0x01, + 0x04,0x01,0x01,0x01,0x01,0x05,0x01,0x01,0x01,0x01,0x05,0x01,0x01,0x01,0x01,0x04, + 0x01,0x04,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x04,0x01, + 0x04,0x04,0x01,0x04,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x04,0x01,0x04,0x04, + 0x01,0x03,0x04,0x04,0x01,0x01,0x04,0x01,0x01,0x04,0x01,0x01,0x04,0x04,0x03,0x01, + 0x04,0x04,0x03,0x03,0x04,0x03,0x04,0x01,0x01,0x04,0x03,0x04,0x03,0x03,0x04,0x04, + 0x05,0x01,0x04,0x04,0x03,0x04,0x03,0x01,0x01,0x03,0x04,0x03,0x04,0x04,0x01,0x05, + 0x05,0x01,0x04,0x04,0x04,0x01,0x01,0x04,0x04,0x01,0x01,0x04,0x04,0x04,0x01,0x05, + 0x05,0x01,0x01,0x01,0x01,0x05,0x05,0x01,0x01,0x05,0x05,0x01,0x01,0x01,0x01,0x05, + 0x05,0x05,0x05,0x01,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x01,0x05,0x05,0x05, + 0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01, +}; +uint8_t tileset_tile_71_data[258] = { + 16, // tile_width + 16, // tile_height + 0x04,0x05,0x04,0x04,0x04,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x05,0x04,0x05,0x05,0x03,0x03,0x04,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x01,0x05,0x04,0x05,0x01,0x05,0x04,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x01,0x05,0x04,0x01,0x04,0x01,0x01,0x04,0x04,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x01,0x04,0x01,0x05,0x05,0x05,0x01,0x05,0x05,0x04,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x01,0x01,0x01,0x05,0x05,0x05,0x05,0x01,0x01,0x01,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x01,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x03,0x04,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x04,0x04,0x01,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x04,0x4B,0x4B,0x4B,0x4B, + 0x01,0x01,0x01,0x01,0x01,0x05,0x01,0x01,0x05,0x05,0x05,0x03,0x04,0x1C,0x4B,0x4B, + 0x04,0x05,0x05,0x01,0x05,0x05,0x01,0x04,0x01,0x05,0x05,0x01,0x03,0x1C,0x4B,0x4B, + 0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x04,0x4B,0x4B, + 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x01,0x01,0x03,0x04,0x4B,0x4B, + 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x01,0x03,0x04,0x1F,0x4B, + 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x03,0x03,0x04,0x04,0x1F,0x4B, + 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x04,0x01,0x03,0x04,0x1F,0x1F, + 0x05,0x05,0x01,0x01,0x05,0x05,0x05,0x05,0x05,0x04,0x01,0x04,0x01,0x03,0x1C,0x1F, +}; +uint8_t tileset_tile_72_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x11,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x00,0x00,0x00,0x00,0x00,0x0C,0x11,0x11,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x00,0x00,0x00,0x00,0x0C,0x11,0x11,0x22,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x00,0x00,0x00,0x0C,0x0C,0x11,0x22,0x22,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x00,0x00,0x0C,0x11,0x0C,0x22,0x22,0x22,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x00,0x0C,0x11,0x11,0x0C,0x22,0x22,0x22,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x0C,0x11,0x11,0x22,0x0C,0x22,0x22,0x22,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, +}; +uint8_t tileset_tile_73_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, +}; +uint8_t tileset_tile_74_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, +}; +uint8_t tileset_tile_75_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x22,0x0C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x22,0x22,0x0C,0x00,0x00,0x00,0x00,0x00, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x22,0x22,0x22,0x0C,0x00,0x00,0x00,0x00, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x22,0x22,0x22,0x0C,0x0C,0x00,0x00,0x00, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x22,0x22,0x22,0x0C,0x22,0x0C,0x00,0x00, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x22,0x22,0x22,0x0C,0x22,0x22,0x0C,0x00, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x0C, +}; +uint8_t tileset_tile_76_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x02,0x16,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, + 0x02,0x16,0x16,0x12,0x12,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x02,0x16,0x16,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x09, + 0x02,0x16,0x16,0x12,0x12,0x12,0x12,0x09,0x12,0x12,0x09,0x0F,0x0F,0x0F,0x09,0x12, + 0x02,0x16,0x16,0x0F,0x0F,0x0F,0x0F,0x09,0x0F,0x0F,0x0F,0x09,0x09,0x09,0x0F,0x0F, + 0x02,0x16,0x16,0x12,0x12,0x12,0x12,0x09,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x12, + 0x02,0x16,0x16,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x09, + 0x02,0x16,0x16,0x12,0x12,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x02,0x16,0x16,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, + 0x02,0x16,0x16,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x16,0x07,0x0F,0x09,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x0F,0x16,0x16,0x16, + 0x02,0x0F,0x07,0x0F,0x09,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x0F,0x16,0x16,0x16, + 0x02,0x0F,0x07,0x0F,0x09,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x0F,0x12,0x12,0x12, + 0x02,0x0F,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x0F,0x09,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, +}; +uint8_t tileset_tile_77_data[258] = { + 16, // tile_width + 16, // tile_height + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, + 0x09,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x09, + 0x12,0x12,0x09,0x0F,0x0F,0x0F,0x09,0x12,0x12,0x12,0x09,0x0F,0x0F,0x0F,0x09,0x12, + 0x0F,0x0F,0x0F,0x09,0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x09,0x09,0x0F,0x0F, + 0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x12, + 0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x09, + 0x09,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x16,0x16,0x16,0x16,0x0F,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x0F,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x0F,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x0F,0x16,0x16,0x16, + 0x12,0x12,0x12,0x12,0x0F,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x0F,0x12,0x12,0x12, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, +}; +uint8_t tileset_tile_78_data[258] = { + 16, // tile_width + 16, // tile_height + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, + 0x09,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x09, + 0x12,0x12,0x09,0x0F,0x0F,0x0F,0x09,0x12,0x12,0x12,0x09,0x0F,0x0F,0x0F,0x09,0x12, + 0x0F,0x0F,0x0F,0x09,0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x09,0x09,0x0F,0x0F, + 0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x12, + 0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x09, + 0x09,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x16,0x16,0x16,0x16,0x0F,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x0F,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x0F,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x0F,0x16,0x16,0x16, + 0x12,0x12,0x12,0x12,0x0F,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x0F,0x12,0x12,0x12, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, +}; +uint8_t tileset_tile_79_data[258] = { + 16, // tile_width + 16, // tile_height + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00, + 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x02, + 0x09,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x12,0x09,0x09,0x02, + 0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x09,0x09,0x02, + 0x12,0x12,0x09,0x0F,0x0F,0x0F,0x09,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x09,0x02, + 0x0F,0x0F,0x0F,0x09,0x09,0x09,0x0F,0x0F,0x0F,0x09,0x0F,0x0F,0x0F,0x09,0x09,0x02, + 0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x12,0x12,0x09,0x12,0x12,0x12,0x09,0x09,0x02, + 0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x09,0x0F,0x0F,0x0F,0x0F,0x09,0x09,0x02, + 0x09,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x09,0x12,0x12,0x12,0x12,0x09,0x09,0x02, + 0x09,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x09,0x0F,0x0F,0x0F,0x0F,0x09,0x09,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x09,0x09,0x02, + 0x16,0x16,0x16,0x16,0x0F,0x16,0x16,0x16,0x16,0x16,0x16,0x09,0x0F,0x07,0x09,0x02, + 0x16,0x16,0x16,0x16,0x0F,0x16,0x16,0x16,0x16,0x16,0x16,0x09,0x0F,0x07,0x07,0x02, + 0x12,0x12,0x12,0x12,0x0F,0x12,0x12,0x12,0x12,0x12,0x12,0x09,0x0F,0x07,0x07,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02, +}; +uint8_t tileset_tile_80_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x0D,0x0D,0x0D,0x0D,0x0D,0x4B,0x0D,0x0D,0x0D,0x0D,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x0D,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0D,0x0D, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0B,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0B,0x0B, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D, + 0x4B,0x4B,0x4B,0x0D,0x0D,0x0D,0x0D,0x13,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x06,0x06,0x06,0x13,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x06,0x06,0x06,0x13,0x13,0x06,0x06,0x06, + 0x4B,0x4B,0x4B,0x0D,0x0D,0x0D,0x0D,0x13,0x06,0x06,0x13,0x06,0x06,0x13,0x06,0x13, + 0x4B,0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x06,0x0D,0x06,0x06,0x06,0x06,0x0D,0x06, + 0x4B,0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D, +}; +uint8_t tileset_tile_81_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x0D,0x0D,0x0D,0x0D,0x4B,0x4B,0x4B,0x4B,0x4B,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D, + 0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0B,0x0B,0x0B,0x0B,0x13, + 0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x13, + 0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x13, + 0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0D,0x0D,0x0D,0x0D,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D,0x0D,0x0D,0x0D,0x06,0x06,0x06,0x06,0x0D, + 0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x0D,0x13,0x13,0x13,0x0D,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x0D,0x13,0x13,0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x13,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x13,0x13,0x06,0x06,0x06, + 0x06,0x06,0x13,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x13,0x06,0x06,0x13,0x06,0x13, + 0x06,0x13,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x0D,0x06, + 0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D, +}; +uint8_t tileset_tile_82_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x0D,0x0D,0x0D,0x0D,0x4B,0x0D,0x0D,0x0D,0x0D,0x0D,0x4B,0x4B,0x4B, + 0x0D,0x0D,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0D,0x4B,0x4B, + 0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x0B,0x0B,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0B,0x0B,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x0D,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x13,0x0D,0x0D,0x0D,0x0D,0x4B,0x4B,0x4B, + 0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x06,0x06,0x06,0x13,0x06,0x06,0x06,0x06,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x06,0x06,0x06,0x13,0x13,0x06,0x06,0x06,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x06,0x06,0x13,0x06,0x06,0x13,0x06,0x13,0x13,0x0D,0x0D,0x0D,0x0D,0x4B,0x4B,0x4B, + 0x06,0x0D,0x06,0x06,0x06,0x06,0x0D,0x06,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B,0x4B, + 0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B,0x4B, +}; +uint8_t tileset_tile_83_data[258] = { + 16, // tile_width + 16, // tile_height + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08,0x3A,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3A,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x15,0x15,0x15,0x08,0x08,0x08,0x3A,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x0E,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x4B,0x0E,0x0E,0x0E,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +}; +uint8_t tileset_tile_84_data[258] = { + 16, // tile_width + 16, // tile_height + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08,0x3A,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3A,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x08,0x08, + 0x08,0x08,0x08,0x15,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3A,0x08,0x08,0x08,0x15,0x15,0x15, + 0x08,0x15,0x08,0x08,0x08,0x08,0x3A,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E, + 0x08,0x08,0x08,0x08,0x08,0x3A,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x0E, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x15,0x0E,0x0E,0x0E,0x4B, +}; +uint8_t tileset_tile_85_data[258] = { + 16, // tile_width + 16, // tile_height + 0x1C,0x1C,0x03,0x01,0x01,0x04,0x04,0x01,0x05,0x05,0x05,0x01,0x01,0x01,0x01,0x04, + 0x1C,0x03,0x01,0x05,0x01,0x04,0x01,0x04,0x01,0x01,0x01,0x05,0x05,0x01,0x01,0x04, + 0x1C,0x03,0x01,0x01,0x05,0x01,0x04,0x04,0x04,0x01,0x01,0x05,0x05,0x01,0x04,0x04, + 0x1C,0x04,0x04,0x05,0x01,0x05,0x01,0x04,0x04,0x04,0x04,0x01,0x01,0x04,0x03,0x04, + 0x1C,0x04,0x01,0x01,0x05,0x01,0x01,0x01,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03, + 0x1C,0x03,0x01,0x01,0x01,0x01,0x01,0x04,0x01,0x04,0x04,0x04,0x03,0x03,0x03,0x03, + 0x1C,0x03,0x04,0x04,0x01,0x01,0x04,0x01,0x01,0x04,0x04,0x03,0x03,0x04,0x03,0x03, + 0x1C,0x04,0x04,0x04,0x04,0x04,0x04,0x01,0x04,0x03,0x04,0x03,0x01,0x04,0x04,0x04, + 0x1F,0x04,0x03,0x04,0x04,0x04,0x04,0x04,0x01,0x03,0x04,0x01,0x01,0x01,0x01,0x04, + 0x1F,0x1F,0x04,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x01,0x01,0x01,0x01,0x01, + 0x4B,0x1F,0x04,0x04,0x03,0x03,0x03,0x04,0x04,0x04,0x01,0x04,0x01,0x01,0x01,0x01, + 0x4B,0x1F,0x1F,0x04,0x04,0x03,0x03,0x03,0x03,0x01,0x04,0x01,0x01,0x01,0x01,0x01, + 0x4B,0x4B,0x1F,0x1C,0x1C,0x04,0x04,0x03,0x03,0x03,0x01,0x01,0x04,0x01,0x04,0x01, + 0x4B,0x4B,0x4B,0x1C,0x1C,0x1C,0x04,0x04,0x03,0x03,0x04,0x03,0x04,0x04,0x04,0x04, + 0x4B,0x4B,0x1F,0x1C,0x1C,0x1C,0x04,0x04,0x04,0x03,0x03,0x04,0x03,0x04,0x03,0x04, + 0x4B,0x1F,0x1F,0x1C,0x1C,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x04,0x04,0x03,0x03, +}; +uint8_t tileset_tile_86_data[258] = { + 16, // tile_width + 16, // tile_height + 0x01,0x05,0x05,0x05,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x05,0x05,0x01, + 0x05,0x05,0x05,0x05,0x05,0x01,0x01,0x05,0x05,0x01,0x01,0x05,0x05,0x05,0x05,0x05, + 0x05,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x05, + 0x04,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x04, + 0x04,0x04,0x01,0x01,0x05,0x05,0x05,0x01,0x01,0x05,0x05,0x05,0x01,0x01,0x04,0x04, + 0x04,0x04,0x04,0x04,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x04,0x04,0x04,0x04, + 0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x01,0x01,0x04,0x04,0x04,0x04,0x04,0x03,0x03, + 0x04,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x04, + 0x01,0x03,0x04,0x04,0x04,0x01,0x04,0x04,0x04,0x04,0x01,0x04,0x04,0x04,0x03,0x01, + 0x01,0x01,0x04,0x04,0x01,0x01,0x01,0x04,0x04,0x01,0x01,0x01,0x04,0x04,0x01,0x01, + 0x01,0x01,0x04,0x04,0x04,0x04,0x01,0x04,0x04,0x01,0x04,0x04,0x04,0x04,0x01,0x01, + 0x01,0x01,0x04,0x04,0x05,0x05,0x04,0x01,0x01,0x04,0x05,0x05,0x04,0x04,0x01,0x01, + 0x01,0x04,0x05,0x01,0x05,0x01,0x05,0x05,0x05,0x05,0x01,0x05,0x01,0x05,0x04,0x01, + 0x04,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x04, + 0x05,0x05,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x05, + 0x04,0x05,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x04, +}; +uint8_t tileset_tile_87_data[258] = { + 16, // tile_width + 16, // tile_height + 0x04,0x01,0x01,0x01,0x01,0x05,0x05,0x05,0x01,0x04,0x04,0x01,0x01,0x03,0x1C,0x1C, + 0x04,0x01,0x01,0x05,0x05,0x01,0x01,0x01,0x04,0x01,0x04,0x01,0x05,0x01,0x03,0x1C, + 0x04,0x04,0x01,0x05,0x05,0x01,0x01,0x04,0x04,0x04,0x01,0x05,0x01,0x01,0x03,0x1C, + 0x04,0x03,0x04,0x01,0x01,0x04,0x04,0x04,0x04,0x01,0x05,0x01,0x05,0x04,0x04,0x1C, + 0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x01,0x01,0x01,0x05,0x01,0x01,0x04,0x1C, + 0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x01,0x04,0x01,0x01,0x01,0x01,0x01,0x03,0x1C, + 0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x01,0x01,0x04,0x01,0x01,0x04,0x04,0x03,0x1C, + 0x04,0x04,0x04,0x01,0x03,0x04,0x03,0x04,0x01,0x04,0x04,0x04,0x04,0x04,0x04,0x1C, + 0x04,0x01,0x01,0x01,0x01,0x04,0x03,0x01,0x04,0x04,0x04,0x04,0x04,0x03,0x04,0x1F, + 0x01,0x01,0x01,0x01,0x01,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x04,0x1F,0x1F, + 0x01,0x01,0x01,0x01,0x04,0x01,0x04,0x04,0x04,0x03,0x03,0x03,0x04,0x04,0x1F,0x4B, + 0x01,0x01,0x01,0x01,0x01,0x04,0x01,0x03,0x03,0x03,0x03,0x04,0x04,0x1F,0x1F,0x4B, + 0x01,0x04,0x01,0x04,0x01,0x01,0x03,0x03,0x03,0x04,0x04,0x1C,0x1C,0x1F,0x4B,0x4B, + 0x04,0x04,0x04,0x04,0x03,0x04,0x03,0x03,0x04,0x04,0x1C,0x1C,0x1C,0x4B,0x4B,0x4B, + 0x04,0x03,0x04,0x03,0x04,0x03,0x03,0x04,0x04,0x04,0x1C,0x1C,0x1C,0x1F,0x4B,0x4B, + 0x04,0x04,0x04,0x04,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x1C,0x1C,0x1F,0x1F,0x4B, +}; +uint8_t tileset_tile_88_data[258] = { + 16, // tile_width + 16, // tile_height + 0x02,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x02,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x02,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x02,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x02,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x02,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x02,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x02,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x02,0x22,0x22,0x22,0x0C,0x22,0x22,0x25,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x02,0x22,0x22,0x22,0x0C,0x22,0x25,0x25,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x02,0x22,0x22,0x22,0x0C,0x25,0x25,0x25,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x02,0x22,0x22,0x22,0x0C,0x25,0x25,0x25,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x02,0x22,0x22,0x25,0x07,0x07,0x25,0x25,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x02,0x22,0x25,0x25,0x25,0x07,0x07,0x25,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x02,0x25,0x25,0x25,0x25,0x25,0x07,0x07,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x02,0x0C,0x25,0x25,0x25,0x25,0x25,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, +}; +uint8_t tileset_tile_89_data[258] = { + 16, // tile_width + 16, // tile_height + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0C,0x0A,0x0B, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0A,0x0B,0x0B,0x0B, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0B,0x0B,0x0B,0x0B,0x0B, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0A,0x0B,0x0B,0x0A,0x0C,0x0C, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0B,0x0B,0x0A,0x0C,0x22,0x0B, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0A,0x0B,0x0B,0x0C,0x22,0x0B,0x0B, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x0C,0x0C,0x25,0x25,0x25,0x0C,0x0B,0x0B,0x0B, +}; +uint8_t tileset_tile_90_data[258] = { + 16, // tile_width + 16, // tile_height + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0B,0x0A,0x0C,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0B,0x0B,0x0B,0x0A,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0B,0x0B,0x0B,0x0B,0x0B,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0C,0x0C,0x0A,0x0B,0x0B,0x0A,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0B,0x22,0x0C,0x0A,0x0B,0x0B,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0B,0x0B,0x22,0x0C,0x0B,0x0B,0x0A,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0B,0x0B,0x0B,0x0C,0x25,0x25,0x25,0x0C,0x0C,0x07,0x07,0x07,0x07,0x07,0x07,0x07, +}; +uint8_t tileset_tile_91_data[258] = { + 16, // tile_width + 16, // tile_height + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x02, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x02, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x02, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x02, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x02, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x02, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x02, + 0x11,0x11,0x11,0x0C,0x11,0x11,0x11,0x0C,0x22,0x22,0x22,0x0C,0x22,0x22,0x22,0x02, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x25,0x22,0x22,0x0C,0x22,0x22,0x22,0x02, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x25,0x25,0x22,0x0C,0x22,0x22,0x22,0x02, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x25,0x25,0x25,0x0C,0x22,0x22,0x22,0x02, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x25,0x25,0x25,0x0C,0x22,0x22,0x22,0x02, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x25,0x25,0x07,0x07,0x25,0x22,0x22,0x02, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x25,0x07,0x07,0x25,0x25,0x25,0x22,0x02, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x07,0x07,0x25,0x25,0x25,0x25,0x25,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x25,0x25,0x25,0x25,0x25,0x0C,0x02, +}; +uint8_t tileset_tile_92_data[258] = { + 16, // tile_width + 16, // tile_height + 0x02,0x12,0x12,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x12,0x12,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x12,0x12,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x0F,0x09,0x09,0x09,0x09,0x09,0x0F, + 0x02,0x12,0x12,0x07,0x07,0x07,0x07,0x07,0x09,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07, + 0x02,0x12,0x12,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x07,0x0F,0x0F,0x0F,0x07,0x09, + 0x02,0x12,0x12,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x0F,0x07,0x07,0x07,0x0F,0x09, + 0x02,0x12,0x12,0x0F,0x0F,0x0F,0x0F,0x07,0x09,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F, + 0x02,0x12,0x12,0x07,0x07,0x07,0x07,0x07,0x0F,0x07,0x09,0x09,0x09,0x09,0x09,0x07, + 0x02,0x12,0x12,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x12,0x12,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x12,0x12,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x0F,0x09,0x09,0x09,0x09,0x09,0x0F, + 0x02,0x12,0x12,0x07,0x07,0x07,0x07,0x07,0x09,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07, + 0x02,0x12,0x12,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x07,0x0F,0x0F,0x0F,0x07,0x09, + 0x02,0x12,0x12,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x0F,0x07,0x07,0x07,0x0F,0x09, + 0x02,0x12,0x12,0x0F,0x0F,0x0F,0x0F,0x07,0x09,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F, + 0x02,0x12,0x12,0x07,0x07,0x07,0x07,0x07,0x0F,0x07,0x09,0x09,0x09,0x09,0x09,0x07, +}; +uint8_t tileset_tile_93_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x07,0x0F,0x09,0x09,0x09,0x09,0x09,0x0F,0x07,0x0F,0x09,0x09,0x09,0x09,0x09,0x0F, + 0x09,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07,0x09,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07, + 0x09,0x09,0x07,0x0F,0x0F,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F,0x0F,0x0F,0x07,0x09, + 0x09,0x09,0x0F,0x07,0x07,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07,0x07,0x07,0x0F,0x09, + 0x09,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F,0x09,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F, + 0x0F,0x07,0x09,0x09,0x09,0x09,0x09,0x07,0x0F,0x07,0x09,0x09,0x09,0x09,0x09,0x07, + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x07,0x0F,0x09,0x09,0x09,0x09,0x09,0x0F,0x07,0x0F,0x09,0x09,0x09,0x09,0x09,0x0F, + 0x09,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07,0x09,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07, + 0x09,0x09,0x07,0x0F,0x0F,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F,0x0F,0x0F,0x07,0x09, + 0x09,0x09,0x0F,0x07,0x07,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07,0x07,0x07,0x0F,0x09, + 0x09,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F,0x09,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F, + 0x0F,0x07,0x09,0x09,0x09,0x09,0x09,0x07,0x0F,0x07,0x09,0x09,0x09,0x09,0x09,0x07, +}; +uint8_t tileset_tile_94_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x07,0x0F,0x09,0x09,0x09,0x09,0x09,0x0F,0x07,0x0F,0x09,0x09,0x09,0x09,0x09,0x0F, + 0x09,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07,0x09,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07, + 0x09,0x09,0x07,0x0F,0x0F,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F,0x0F,0x0F,0x07,0x09, + 0x09,0x09,0x0F,0x07,0x07,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07,0x07,0x07,0x0F,0x09, + 0x09,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F,0x09,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F, + 0x0F,0x07,0x09,0x09,0x09,0x09,0x09,0x07,0x0F,0x07,0x09,0x09,0x09,0x09,0x09,0x07, + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x07,0x0F,0x09,0x09,0x09,0x09,0x09,0x0F,0x07,0x0F,0x09,0x09,0x09,0x09,0x09,0x0F, + 0x09,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07,0x09,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07, + 0x09,0x09,0x07,0x0F,0x0F,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F,0x0F,0x0F,0x07,0x09, + 0x09,0x09,0x0F,0x07,0x07,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07,0x07,0x07,0x0F,0x09, + 0x09,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F,0x09,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F, + 0x0F,0x07,0x09,0x09,0x09,0x09,0x09,0x07,0x0F,0x07,0x09,0x09,0x09,0x09,0x09,0x07, +}; +uint8_t tileset_tile_95_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x07,0x07,0x02, + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x07,0x07,0x02, + 0x07,0x0F,0x09,0x09,0x09,0x09,0x09,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x07,0x07,0x02, + 0x09,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07,0x09,0x07,0x07,0x07,0x07,0x07,0x07,0x02, + 0x09,0x09,0x07,0x0F,0x0F,0x0F,0x07,0x09,0x09,0x07,0x09,0x09,0x09,0x07,0x07,0x02, + 0x09,0x09,0x0F,0x07,0x07,0x07,0x0F,0x09,0x09,0x07,0x09,0x09,0x09,0x07,0x07,0x02, + 0x09,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F,0x09,0x07,0x0F,0x0F,0x0F,0x07,0x07,0x02, + 0x0F,0x07,0x09,0x09,0x09,0x09,0x09,0x07,0x0F,0x07,0x07,0x07,0x07,0x07,0x07,0x02, + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x07,0x07,0x02, + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x07,0x07,0x02, + 0x07,0x0F,0x09,0x09,0x09,0x09,0x09,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x07,0x07,0x02, + 0x09,0x07,0x0F,0x09,0x09,0x09,0x0F,0x07,0x09,0x07,0x07,0x07,0x07,0x07,0x07,0x02, + 0x09,0x09,0x07,0x0F,0x0F,0x0F,0x07,0x09,0x09,0x07,0x09,0x09,0x09,0x07,0x07,0x02, + 0x09,0x09,0x0F,0x07,0x07,0x07,0x0F,0x09,0x09,0x07,0x09,0x09,0x09,0x07,0x07,0x02, + 0x09,0x0F,0x07,0x09,0x09,0x09,0x07,0x0F,0x09,0x07,0x0F,0x0F,0x0F,0x07,0x07,0x02, + 0x0F,0x07,0x09,0x09,0x09,0x09,0x09,0x07,0x0F,0x07,0x07,0x07,0x07,0x07,0x07,0x02, +}; +uint8_t tileset_tile_96_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x0D,0x0D,0x0D,0x0D,0x13,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x13,0x13,0x13,0x0D,0x0D,0x06,0x06,0x06, + 0x4B,0x4B,0x4B,0x0D,0x0D,0x0D,0x0D,0x13,0x13,0x13,0x13,0x06,0x06,0x13,0x06,0x06, + 0x4B,0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x0D,0x06,0x06,0x06,0x06,0x13,0x06, + 0x4B,0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D, + 0x4B,0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x06,0x06,0x06,0x06,0x13,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x06,0x06,0x06,0x06,0x13,0x13,0x06,0x06,0x06, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x06,0x06,0x06,0x13,0x06,0x06,0x13,0x06,0x13, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x0D,0x06, + 0x4B,0x4B,0x0D,0x0D,0x0D,0x0D,0x0D,0x13,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D, +}; +uint8_t tileset_tile_97_data[258] = { + 16, // tile_width + 16, // tile_height + 0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x13,0x06,0x06,0x06,0x06,0x0D,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x0D,0x06,0x06,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x13,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D,0x06,0x06,0x06, + 0x06,0x06,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x06,0x06,0x13,0x06,0x06, + 0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x13,0x06, + 0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D, + 0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x0D,0x13,0x13,0x13,0x0D,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x0D,0x13,0x13,0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x13,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x13,0x13,0x06,0x06,0x06, + 0x06,0x06,0x13,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x13,0x06,0x06,0x13,0x06,0x13, + 0x06,0x13,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x0D,0x06, + 0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D, +}; +uint8_t tileset_tile_98_data[258] = { + 16, // tile_width + 16, // tile_height + 0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x13,0x0D,0x0D,0x0D,0x0D,0x4B,0x4B,0x4B, + 0x06,0x13,0x06,0x06,0x06,0x06,0x0D,0x13,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x06,0x06,0x0D,0x06,0x06,0x13,0x13,0x13,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x06,0x06,0x06,0x13,0x0D,0x13,0x13,0x13,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x06,0x06,0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x06,0x06,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D,0x0D,0x0D,0x4B,0x4B,0x4B, + 0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B,0x4B, + 0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B,0x4B, + 0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B,0x4B, + 0x06,0x06,0x0D,0x13,0x13,0x13,0x0D,0x06,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B,0x4B, + 0x06,0x06,0x06,0x0D,0x13,0x13,0x06,0x06,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x4B,0x4B, + 0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x06,0x06,0x13,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x06,0x13,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x13,0x0D,0x0D,0x0D,0x0D,0x0D,0x4B,0x4B, +}; +uint8_t tileset_tile_99_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x0D,0x06,0x06,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x4B,0x0D,0x0D,0x0D,0x0B,0x0D,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06, + 0x0D,0x0D,0x0D,0x0B,0x0B,0x0B,0x0D,0x0D,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06, + 0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x13,0x13,0x13,0x0D,0x0D,0x06,0x06,0x06, + 0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x13,0x13,0x13,0x06,0x06,0x13,0x06,0x06, + 0x0B,0x0B,0x0D,0x0B,0x0B,0x0D,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x13,0x06, + 0x0D,0x0D,0x0D,0x0D,0x0D,0x13,0x13,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D, + 0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x0D,0x13,0x13,0x13,0x0D,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x0D,0x13,0x13,0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x13,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x13,0x13,0x06,0x06,0x06, + 0x06,0x06,0x13,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x13,0x06,0x06,0x13,0x06,0x13, + 0x06,0x13,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x0D,0x06, + 0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D, +}; +uint8_t tileset_tile_100_data[258] = { + 16, // tile_width + 16, // tile_height + 0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B,0x4B, + 0x06,0x13,0x06,0x06,0x06,0x06,0x0D,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B,0x4B, + 0x06,0x06,0x0D,0x06,0x06,0x13,0x13,0x13,0x0D,0x0B,0x0D,0x0D,0x0D,0x4B,0x4B,0x4B, + 0x06,0x06,0x06,0x13,0x0D,0x13,0x13,0x13,0x0D,0x0D,0x0B,0x0B,0x0B,0x0D,0x0D,0x0D, + 0x06,0x06,0x06,0x0D,0x13,0x13,0x13,0x13,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B, + 0x06,0x06,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B, + 0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0B,0x0B,0x0D,0x0B,0x0B, + 0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x13,0x13,0x0D,0x0D,0x0D,0x0D,0x0D, + 0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x0D,0x13,0x13,0x13,0x0D,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x0D,0x13,0x13,0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x13,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x13,0x13,0x06,0x06,0x06, + 0x06,0x06,0x13,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x13,0x06,0x06,0x13,0x06,0x13, + 0x06,0x13,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x0D,0x06, + 0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D, +}; +uint8_t tileset_tile_101_data[258] = { + 16, // tile_width + 16, // tile_height + 0x1F,0x1F,0x1C,0x1C,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x05,0x04, + 0x1F,0x1C,0x1C,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x05,0x05,0x04,0x05, + 0x1F,0x1C,0x1C,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x05,0x01,0x05,0x04,0x05,0x01, + 0x1F,0x1C,0x1C,0x04,0x03,0x03,0x03,0x03,0x03,0x01,0x01,0x04,0x01,0x04,0x05,0x01, + 0x1F,0x1C,0x1C,0x04,0x03,0x03,0x03,0x05,0x05,0x01,0x05,0x05,0x05,0x01,0x04,0x01, + 0x1F,0x1F,0x1C,0x04,0x03,0x03,0x01,0x01,0x01,0x05,0x05,0x05,0x05,0x01,0x01,0x01, + 0x4B,0x1F,0x1C,0x1C,0x04,0x03,0x03,0x05,0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x01, + 0x4B,0x1F,0x1C,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x01,0x04,0x04, + 0x4B,0x4B,0x1C,0x04,0x03,0x05,0x05,0x05,0x01,0x01,0x05,0x01,0x01,0x01,0x01,0x01, + 0x4B,0x4B,0x1C,0x03,0x01,0x05,0x05,0x01,0x04,0x01,0x05,0x05,0x01,0x05,0x05,0x04, + 0x4B,0x4B,0x04,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x05,0x05,0x05,0x05,0x05,0x05, + 0x4B,0x4B,0x04,0x03,0x01,0x01,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05, + 0x4B,0x1F,0x04,0x03,0x01,0x05,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05, + 0x4B,0x1F,0x04,0x04,0x03,0x03,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05, + 0x1F,0x1F,0x04,0x03,0x01,0x01,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05, + 0x1F,0x1C,0x03,0x01,0x05,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x01,0x05,0x05, +}; +uint8_t tileset_tile_102_data[258] = { + 16, // tile_width + 16, // tile_height + 0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01, + 0x01,0x01,0x05,0x05,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x05,0x01,0x01, + 0x01,0x05,0x05,0x05,0x05,0x01,0x01,0x05,0x05,0x01,0x01,0x05,0x05,0x05,0x05,0x01, + 0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01, + 0x01,0x01,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x01,0x01, + 0x01,0x01,0x01,0x05,0x05,0x05,0x05,0x01,0x01,0x05,0x05,0x05,0x05,0x01,0x01,0x01, + 0x04,0x01,0x01,0x01,0x01,0x05,0x01,0x01,0x01,0x01,0x05,0x01,0x01,0x01,0x01,0x04, + 0x01,0x04,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x04,0x01, + 0x04,0x04,0x01,0x04,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x04,0x01,0x04,0x04, + 0x01,0x03,0x04,0x04,0x01,0x01,0x04,0x01,0x01,0x04,0x01,0x01,0x04,0x04,0x03,0x01, + 0x04,0x04,0x03,0x03,0x04,0x03,0x04,0x01,0x01,0x04,0x03,0x04,0x03,0x03,0x04,0x04, + 0x05,0x01,0x04,0x04,0x03,0x04,0x03,0x01,0x01,0x03,0x04,0x03,0x04,0x04,0x01,0x05, + 0x05,0x01,0x04,0x04,0x04,0x01,0x01,0x04,0x04,0x01,0x01,0x04,0x04,0x04,0x01,0x05, + 0x05,0x01,0x01,0x01,0x01,0x05,0x05,0x01,0x01,0x05,0x05,0x01,0x01,0x01,0x01,0x05, + 0x05,0x05,0x05,0x01,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x01,0x05,0x05,0x05, + 0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01, +}; +uint8_t tileset_tile_103_data[258] = { + 16, // tile_width + 16, // tile_height + 0x04,0x05,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x1C,0x1C,0x1F,0x1F, + 0x05,0x04,0x05,0x05,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x1C,0x1C,0x1F, + 0x01,0x05,0x04,0x05,0x01,0x05,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x1C,0x1C,0x1F, + 0x01,0x05,0x04,0x01,0x04,0x01,0x01,0x03,0x03,0x03,0x03,0x03,0x04,0x1C,0x1C,0x1F, + 0x01,0x04,0x01,0x05,0x05,0x05,0x01,0x05,0x05,0x03,0x03,0x03,0x04,0x1C,0x1C,0x1F, + 0x01,0x01,0x01,0x05,0x05,0x05,0x05,0x01,0x01,0x01,0x03,0x03,0x04,0x1C,0x1F,0x1F, + 0x01,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x03,0x03,0x04,0x1C,0x1C,0x1F,0x4B, + 0x04,0x04,0x01,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x1C,0x1F,0x4B, + 0x01,0x01,0x01,0x01,0x01,0x05,0x01,0x01,0x05,0x05,0x05,0x03,0x04,0x1C,0x4B,0x4B, + 0x04,0x05,0x05,0x01,0x05,0x05,0x01,0x04,0x01,0x05,0x05,0x01,0x03,0x1C,0x4B,0x4B, + 0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x04,0x4B,0x4B, + 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x01,0x01,0x03,0x04,0x4B,0x4B, + 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x01,0x03,0x04,0x1F,0x4B, + 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x03,0x03,0x04,0x04,0x1F,0x4B, + 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x01,0x01,0x03,0x04,0x1F,0x1F, + 0x05,0x05,0x01,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x01,0x03,0x1C,0x1F, +}; +uint8_t tileset_tile_104_data[258] = { + 16, // tile_width + 16, // tile_height + 0x02,0x07,0x0C,0x25,0x25,0x25,0x25,0x25,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x02,0x07,0x0C,0x25,0x25,0x25,0x25,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x02,0x10,0x02,0x07,0x0C,0x25,0x25,0x25,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x02,0x17,0x10,0x02,0x07,0x0C,0x25,0x25,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x02,0x0B,0x17,0x10,0x02,0x07,0x0C,0x25,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x02,0x1B,0x0B,0x17,0x10,0x02,0x07,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x02,0x10,0x1B,0x0B,0x17,0x10,0x02,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x17,0x10,0x1B,0x0B,0x17,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x02,0x17,0x1B,0x10,0x1B,0x0B,0x17,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x17,0x1B,0x1B,0x10,0x1B,0x0B,0x17,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x17,0x1B,0x1B,0x1B,0x10,0x1B,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x10,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, +}; +uint8_t tileset_tile_105_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0A,0x0A,0x0A, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0A,0x0A,0x0A,0x0C,0x22,0x0A,0x0A, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0A,0x0A,0x0A,0x0C,0x22,0x0A, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0A,0x0A,0x0A,0x0A,0x0C,0x0C, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0A,0x0A,0x0A,0x0A, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x0C,0x0C,0x0C,0x25,0x0A,0x0A, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, +}; +uint8_t tileset_tile_106_data[258] = { + 16, // tile_width + 16, // tile_height + 0x0A,0x0A,0x0A,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x0A,0x0A,0x22,0x0C,0x0A,0x0A,0x0A,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0A,0x22,0x0C,0x0A,0x0A,0x0A,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0C,0x0C,0x0A,0x0A,0x0A,0x0A,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0A,0x0A,0x0A,0x0A,0x0C,0x0C,0x0C,0x07,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, + 0x0A,0x0A,0x25,0x0C,0x0C,0x0C,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x0B,0x0B,0x1B,0x1B,0x1B,0x1B,0x1B, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x02,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x1B,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B, +}; +uint8_t tileset_tile_107_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x25,0x25,0x25,0x25,0x25,0x0C,0x07,0x02, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x25,0x25,0x25,0x25,0x0C,0x07,0x02,0x02, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x25,0x25,0x25,0x0C,0x07,0x02,0x10,0x02, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x25,0x25,0x0C,0x07,0x02,0x10,0x17,0x02, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x25,0x0C,0x07,0x02,0x10,0x17,0x0B,0x02, + 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x07,0x02,0x10,0x17,0x0B,0x1B,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02,0x10,0x17,0x0B,0x1B,0x10,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x17,0x0B,0x1B,0x10,0x17,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x17,0x0B,0x1B,0x10,0x1B,0x17,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x17,0x0B,0x1B,0x10,0x1B,0x1B,0x17,0x02, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1B,0x10,0x1B,0x1B,0x1B,0x17,0x02, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x17,0x10,0x1B,0x1B,0x1B,0x1B,0x17,0x02, + 0x1B,0x1B,0x1B,0x1B,0x1B,0x0B,0x0B,0x02,0x10,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x02, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x1B,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x02, + 0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x02, +}; +uint8_t tileset_tile_108_data[258] = { + 16, // tile_width + 16, // tile_height + 0x02,0x12,0x12,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x12,0x12,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x02,0x12,0x12,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, + 0x02,0x12,0x0F,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x0F,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x00,0x00,0x02,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x00,0x00,0x02,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x00,0x00,0x02,0x31,0x2D,0x2D,0x2D,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x1E,0x1E,0x1E,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x2D,0x2D,0x2D,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x1E,0x1E,0x1E,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x2D,0x2D,0x2D,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x1E,0x1E,0x1E,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x2D,0x2D,0x2D,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x1E,0x1E,0x1E,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, +}; +uint8_t tileset_tile_109_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x07,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x07,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x02,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x02, + 0x02,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x02, + 0x02,0x0F,0x0F,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x0F,0x0F,0x02, +}; +uint8_t tileset_tile_110_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, + 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E, + 0x1E,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1E, + 0x1D,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x1D, + 0x1D,0x02,0x0B,0x0B,0x0B,0x0B,0x0B,0x02,0x02,0x0B,0x0B,0x0B,0x0B,0x0B,0x02,0x1D, + 0x1D,0x02,0x0B,0x0B,0x0B,0x0B,0x0B,0x02,0x02,0x0B,0x0B,0x0B,0x0B,0x0B,0x02,0x1D, + 0x1D,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x1D, + 0x1D,0x02,0x0A,0x0A,0x0A,0x0A,0x0A,0x02,0x02,0x0A,0x0A,0x0A,0x0A,0x0A,0x02,0x1D, + 0x1D,0x02,0x0A,0x0A,0x0A,0x0A,0x0A,0x02,0x02,0x0A,0x0A,0x0A,0x0A,0x0A,0x02,0x1D, +}; +uint8_t tileset_tile_111_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x07,0x07,0x02, + 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x09,0x07,0x07,0x02, + 0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x07,0x07,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02,0x10,0x00, + 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x2D,0x2D,0x2D,0x10,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x1E,0x1E,0x1E,0x10,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x2D,0x2D,0x2D,0x10,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x1E,0x1E,0x1E,0x10,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x2D,0x2D,0x2D,0x10,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x1E,0x1E,0x1E,0x10,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x2D,0x2D,0x2D,0x10,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x1E,0x1E,0x1E,0x10,0x02,0x10,0x00, +}; +uint8_t tileset_tile_112_data[258] = { + 16, // tile_width + 16, // tile_height + 0x4B,0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x0D,0x06,0x06,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x4B,0x0D,0x0D,0x0D,0x0D,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x13,0x13,0x13,0x0D,0x0D,0x06,0x06,0x06, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x13,0x13,0x13,0x06,0x06,0x13,0x06,0x06, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x13,0x06, + 0x4B,0x4B,0x4B,0x0D,0x0D,0x0D,0x0D,0x13,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0B,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0B,0x0B, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B, + 0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B, + 0x4B,0x4B,0x0D,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0D,0x0D, + 0x4B,0x4B,0x4B,0x0D,0x0D,0x0D,0x0D,0x0D,0x4B,0x0D,0x0D,0x0D,0x0D,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, +}; +uint8_t tileset_tile_113_data[258] = { + 16, // tile_width + 16, // tile_height + 0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x13,0x06,0x06,0x06,0x06,0x0D,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x0D,0x06,0x06,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x13,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D,0x06,0x06,0x06, + 0x06,0x06,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x06,0x06,0x13,0x06,0x06, + 0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x13,0x06, + 0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D, + 0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D,0x0D,0x0D,0x0D,0x06,0x06,0x06,0x06,0x0D, + 0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0D,0x0D,0x0D,0x0D,0x13, + 0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x13, + 0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x13, + 0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0B,0x0B,0x0B,0x0B,0x13, + 0x4B,0x0D,0x0D,0x0D,0x0D,0x4B,0x4B,0x4B,0x4B,0x4B,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, +}; +uint8_t tileset_tile_114_data[258] = { + 16, // tile_width + 16, // tile_height + 0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B,0x4B, + 0x06,0x13,0x06,0x06,0x06,0x06,0x0D,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B,0x4B, + 0x06,0x06,0x0D,0x06,0x06,0x13,0x13,0x13,0x13,0x0D,0x0D,0x0D,0x0D,0x4B,0x4B,0x4B, + 0x06,0x06,0x06,0x13,0x0D,0x13,0x13,0x13,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x06,0x06,0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x06,0x06,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D,0x0D,0x0D,0x4B,0x4B,0x4B, + 0x0D,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x0B,0x0B,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0B,0x0B,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B, + 0x0D,0x0D,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0D,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x0D,0x0D,0x0D,0x0D,0x4B,0x0D,0x0D,0x0D,0x0D,0x0D,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, + 0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B,0x4B, +}; +uint8_t tileset_tile_115_data[258] = { + 16, // tile_width + 16, // tile_height + 0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x13,0x06,0x06,0x06,0x06,0x0D,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x0D,0x06,0x06,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x13,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D,0x06,0x06,0x06, + 0x06,0x06,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x06,0x06,0x13,0x06,0x06, + 0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x13,0x06, + 0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D, + 0x0D,0x0D,0x0D,0x0D,0x0D,0x13,0x13,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x0B,0x0B,0x0D,0x0B,0x0B,0x0D,0x13,0x13,0x06,0x0D,0x06,0x06,0x06,0x06,0x06,0x06, + 0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0D,0x13,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x06, + 0x0B,0x0B,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x06,0x06,0x06,0x13,0x06,0x06,0x06,0x06, + 0x0D,0x0D,0x0D,0x0B,0x0B,0x0B,0x0D,0x0D,0x06,0x06,0x06,0x13,0x13,0x06,0x06,0x06, + 0x4B,0x4B,0x4B,0x0D,0x0D,0x0D,0x0B,0x0D,0x06,0x06,0x13,0x06,0x06,0x13,0x06,0x13, + 0x4B,0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x06,0x0D,0x06,0x06,0x06,0x06,0x0D,0x06, + 0x4B,0x4B,0x4B,0x0D,0x0B,0x0B,0x0B,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D, +}; +uint8_t tileset_tile_116_data[258] = { + 16, // tile_width + 16, // tile_height + 0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x13,0x06,0x06,0x06,0x06,0x0D,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x0D,0x06,0x06,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x13,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06, + 0x06,0x06,0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D,0x06,0x06,0x06, + 0x06,0x06,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x06,0x06,0x13,0x06,0x06, + 0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x13,0x06, + 0x0D,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x0D, + 0x06,0x0D,0x13,0x13,0x13,0x13,0x13,0x0D,0x0D,0x13,0x13,0x0D,0x0D,0x0D,0x0D,0x0D, + 0x06,0x06,0x0D,0x13,0x13,0x13,0x0D,0x06,0x13,0x13,0x0D,0x0B,0x0B,0x0D,0x0B,0x0B, + 0x06,0x06,0x06,0x0D,0x13,0x13,0x06,0x06,0x13,0x0D,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B, + 0x06,0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x0D,0x0B,0x0B,0x0B,0x0B,0x0D,0x0B,0x0B, + 0x06,0x06,0x06,0x0D,0x06,0x06,0x06,0x06,0x0D,0x0D,0x0B,0x0B,0x0B,0x0D,0x0D,0x0D, + 0x06,0x06,0x13,0x06,0x06,0x06,0x06,0x06,0x0D,0x0B,0x0D,0x0D,0x0D,0x4B,0x4B,0x4B, + 0x06,0x13,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B,0x4B, + 0x0D,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0D,0x0B,0x0B,0x0B,0x0D,0x4B,0x4B,0x4B, +}; +uint8_t tileset_tile_117_data[258] = { + 16, // tile_width + 16, // tile_height + 0x47,0x47,0x03,0x01,0x01,0x04,0x04,0x01,0x05,0x05,0x05,0x01,0x01,0x01,0x01,0x04, + 0x47,0x03,0x01,0x05,0x01,0x04,0x49,0x04,0x01,0x01,0x01,0x05,0x05,0x01,0x01,0x04, + 0x1C,0x03,0x01,0x01,0x05,0x01,0x04,0x04,0x04,0x01,0x01,0x05,0x05,0x01,0x04,0x04, + 0x1C,0x04,0x04,0x05,0x01,0x05,0x01,0x04,0x04,0x04,0x04,0x01,0x01,0x04,0x03,0x04, + 0x1C,0x04,0x01,0x01,0x05,0x01,0x01,0x01,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03, + 0x1C,0x03,0x01,0x01,0x01,0x01,0x01,0x04,0x01,0x04,0x04,0x04,0x03,0x03,0x03,0x03, + 0x1C,0x03,0x04,0x04,0x01,0x01,0x04,0x01,0x01,0x04,0x04,0x03,0x03,0x04,0x03,0x03, + 0x1C,0x04,0x04,0x04,0x04,0x04,0x04,0x01,0x04,0x03,0x04,0x03,0x01,0x04,0x04,0x04, + 0x1F,0x04,0x03,0x04,0x04,0x04,0x04,0x04,0x01,0x03,0x04,0x01,0x01,0x01,0x01,0x04, + 0x1F,0x1F,0x04,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x01,0x01,0x01,0x01,0x01, + 0x4B,0x1F,0x04,0x04,0x03,0x03,0x03,0x04,0x04,0x04,0x01,0x04,0x01,0x01,0x01,0x01, + 0x4B,0x1F,0x1F,0x04,0x04,0x03,0x03,0x03,0x03,0x01,0x04,0x01,0x01,0x01,0x01,0x01, + 0x4B,0x4B,0x1F,0x1C,0x1C,0x1C,0x1C,0x03,0x03,0x03,0x01,0x01,0x04,0x01,0x04,0x01, + 0x4B,0x4B,0x4B,0x1C,0x1C,0x1C,0x1C,0x1C,0x03,0x03,0x04,0x03,0x04,0x04,0x04,0x04, + 0x4B,0x4B,0x1F,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x03,0x03,0x04,0x03,0x04,0x03,0x04, + 0x4B,0x1F,0x1F,0x1C,0x1C,0x1C,0x1C,0x1C,0x04,0x04,0x03,0x03,0x04,0x04,0x03,0x03, +}; +uint8_t tileset_tile_118_data[258] = { + 16, // tile_width + 16, // tile_height + 0x01,0x05,0x05,0x05,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x05,0x05,0x05,0x01, + 0x05,0x05,0x05,0x05,0x05,0x01,0x01,0x05,0x05,0x01,0x01,0x05,0x05,0x05,0x05,0x05, + 0x05,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x05, + 0x04,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x04, + 0x04,0x04,0x01,0x01,0x05,0x05,0x05,0x01,0x01,0x05,0x05,0x05,0x01,0x01,0x04,0x04, + 0x04,0x04,0x04,0x04,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x04,0x04,0x04,0x04, + 0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x01,0x01,0x04,0x04,0x04,0x04,0x04,0x03,0x03, + 0x04,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x04, + 0x01,0x03,0x04,0x04,0x04,0x01,0x04,0x04,0x04,0x04,0x01,0x04,0x04,0x04,0x03,0x01, + 0x01,0x01,0x04,0x04,0x01,0x01,0x01,0x04,0x04,0x01,0x01,0x01,0x04,0x04,0x01,0x01, + 0x01,0x01,0x04,0x04,0x01,0x01,0x04,0x04,0x04,0x04,0x01,0x01,0x04,0x04,0x01,0x01, + 0x01,0x01,0x04,0x04,0x03,0x01,0x04,0x04,0x04,0x04,0x01,0x03,0x04,0x04,0x01,0x01, + 0x01,0x04,0x04,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x04,0x04,0x01, + 0x04,0x04,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x03,0x04,0x04, + 0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04, + 0x03,0x03,0x03,0x03,0x37,0x37,0x37,0x03,0x03,0x37,0x37,0x37,0x03,0x03,0x03,0x03, +}; +uint8_t tileset_tile_119_data[258] = { + 16, // tile_width + 16, // tile_height + 0x04,0x01,0x01,0x01,0x01,0x05,0x05,0x05,0x01,0x04,0x04,0x01,0x01,0x03,0x47,0x47, + 0x04,0x01,0x01,0x05,0x05,0x01,0x01,0x01,0x04,0x01,0x04,0x01,0x05,0x01,0x03,0x47, + 0x04,0x04,0x01,0x05,0x05,0x01,0x01,0x04,0x04,0x04,0x01,0x05,0x01,0x01,0x03,0x1C, + 0x04,0x03,0x04,0x01,0x01,0x04,0x04,0x04,0x04,0x01,0x05,0x01,0x05,0x04,0x04,0x1C, + 0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x01,0x01,0x01,0x05,0x01,0x01,0x04,0x1C, + 0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x01,0x04,0x01,0x01,0x01,0x01,0x01,0x03,0x1C, + 0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x01,0x01,0x04,0x01,0x01,0x04,0x04,0x03,0x1C, + 0x04,0x04,0x04,0x01,0x03,0x04,0x03,0x04,0x01,0x04,0x04,0x04,0x04,0x04,0x04,0x1C, + 0x04,0x01,0x01,0x01,0x01,0x04,0x03,0x01,0x04,0x04,0x04,0x04,0x04,0x03,0x04,0x1F, + 0x01,0x01,0x01,0x01,0x01,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x04,0x1F,0x1F, + 0x01,0x01,0x01,0x01,0x04,0x01,0x04,0x04,0x04,0x03,0x03,0x03,0x04,0x04,0x1F,0x4B, + 0x01,0x01,0x01,0x01,0x01,0x04,0x01,0x03,0x03,0x03,0x03,0x04,0x04,0x1F,0x1F,0x4B, + 0x01,0x04,0x01,0x04,0x01,0x01,0x03,0x03,0x03,0x1C,0x1C,0x1C,0x1C,0x1F,0x4B,0x4B, + 0x04,0x04,0x04,0x04,0x03,0x04,0x03,0x03,0x1C,0x1C,0x1C,0x1C,0x1C,0x4B,0x4B,0x4B, + 0x04,0x03,0x04,0x03,0x04,0x03,0x03,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1F,0x4B,0x4B, + 0x04,0x04,0x04,0x04,0x03,0x03,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1F,0x1F,0x4B, +}; +uint8_t tileset_tile_120_data[258] = { + 16, // tile_width + 16, // tile_height + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x0B,0x17,0x1B,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x0B,0x0B,0x17,0x1B,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x0B,0x0B,0x0B,0x17,0x1B,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x0A,0x0B,0x0B,0x0B,0x17,0x1B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x02,0x0A,0x0A,0x0B,0x0B,0x0B,0x17,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x10,0x02,0x0A,0x0A,0x0B,0x0B,0x0B,0x17,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x10,0x10,0x02,0x0A,0x0A,0x0B,0x0B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x00,0x10,0x10,0x02,0x0A,0x0A,0x0B,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x00,0x00,0x10,0x10,0x02,0x0A,0x0A,0x17,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x00,0x00,0x00,0x10,0x10,0x02,0x0A,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x00,0x00,0x00,0x00,0x10,0x10,0x02,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +}; +uint8_t tileset_tile_121_data[258] = { + 16, // tile_width + 16, // tile_height + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x02, + 0x02,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x02, + 0x02,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x02, + 0x02,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x02, + 0x02,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x02, + 0x02,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +}; +uint8_t tileset_tile_122_data[258] = { + 16, // tile_width + 16, // tile_height + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x1B,0x16,0x0F,0x1B,0x0F,0x1B,0x0F,0x1B, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x1B,0x0F,0x1B,0x1B,0x0F,0x1B,0x0F,0x1B, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x1B,0x0F,0x0F,0x1B,0x0F,0x0F,0x0F,0x1B, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0B,0x0B,0x09,0x0B,0x09,0x0B,0x09,0x0B, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0B,0x09,0x16,0x0B,0x09,0x0B,0x09,0x0B, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0B,0x0B,0x09,0x09,0x0B,0x09,0x0B,0x09, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +}; +uint8_t tileset_tile_123_data[258] = { + 16, // tile_width + 16, // tile_height + 0x16,0x0F,0x0F,0x1B,0x16,0x0F,0x0F,0x1B,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x02, + 0x0F,0x1B,0x0F,0x1B,0x0F,0x1B,0x0F,0x1B,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x02, + 0x0F,0x1B,0x0F,0x1B,0x0F,0x1B,0x0F,0x1B,0x17,0x1B,0x1B,0x1B,0x1B,0x1B,0x17,0x02, + 0x09,0x0B,0x09,0x0B,0x09,0x09,0x16,0x0B,0x17,0x1B,0x1B,0x1B,0x1B,0x17,0x0B,0x02, + 0x09,0x09,0x16,0x0B,0x09,0x0B,0x0B,0x0B,0x17,0x1B,0x1B,0x1B,0x17,0x0B,0x0B,0x02, + 0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x17,0x1B,0x1B,0x17,0x0B,0x0B,0x0B,0x02, + 0x09,0x0B,0x09,0x0B,0x09,0x09,0x0B,0x0B,0x17,0x1B,0x17,0x0B,0x0B,0x0B,0x0A,0x02, + 0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x0B,0x17,0x17,0x0B,0x0B,0x0B,0x0A,0x0A,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x17,0x0B,0x0B,0x0B,0x0A,0x0A,0x02,0x10, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x17,0x0B,0x0B,0x0A,0x0A,0x02,0x10,0x10, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x17,0x0B,0x0A,0x0A,0x02,0x10,0x10,0x00, + 0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x17,0x0A,0x0A,0x02,0x10,0x10,0x00,0x00, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x0A,0x02,0x10,0x10,0x00,0x00,0x00, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x02,0x10,0x10,0x00,0x00,0x00,0x00, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x00,0x00,0x00,0x00,0x00, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00, +}; +uint8_t tileset_tile_124_data[258] = { + 16, // tile_width + 16, // tile_height + 0x00,0x00,0x02,0x31,0x2D,0x2D,0x2D,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x1E,0x1E,0x1E,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x2D,0x2D,0x2D,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x1E,0x1E,0x1E,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x2D,0x2D,0x2D,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x1E,0x1E,0x1E,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x2D,0x2D,0x2D,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x1E,0x1E,0x1E,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x2D,0x2D,0x2D,0x10,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x1E,0x1E,0x1E,0x07,0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x1D,0x1D,0x1D,0x07,0x07,0x2D,0x1D,0x1D,0x1D,0x1D,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x1D,0x1D,0x1D,0x07,0x07,0x1E,0x1D,0x1D,0x1D,0x1D,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x1D,0x1D,0x1D,0x07,0x07,0x1E,0x1D,0x1D,0x1D,0x1D,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x1D,0x1D,0x1D,0x07,0x07,0x1E,0x1D,0x1D,0x1D,0x1D,0x1D,0x07, + 0x00,0x00,0x02,0x31,0x1D,0x1D,0x1D,0x07,0x07,0x1E,0x1D,0x1D,0x1D,0x1D,0x1D,0x07, + 0x00,0x00,0x10,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x10, +}; +uint8_t tileset_tile_125_data[258] = { + 16, // tile_width + 16, // tile_height + 0x02,0x0F,0x0F,0x07,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x07,0x0F,0x0F,0x02, + 0x02,0x0F,0x0F,0x07,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x07,0x0F,0x0F,0x02, + 0x02,0x0F,0x0F,0x07,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x07,0x0F,0x0F,0x02, + 0x02,0x0F,0x0F,0x07,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x07,0x0F,0x0F,0x02, + 0x02,0x0F,0x0F,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x0F,0x0F,0x02, + 0x02,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x02, + 0x02,0x07,0x07,0x09,0x0F,0x09,0x0F,0x09,0x0F,0x09,0x0F,0x09,0x0F,0x09,0x0F,0x02, + 0x07,0x1B,0x0A,0x07,0x09,0x0F,0x09,0x0F,0x09,0x0F,0x09,0x0F,0x09,0x0F,0x09,0x02, + 0x07,0x0A,0x0A,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x02, + 0x02,0x07,0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x02, + 0x02,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x02, + 0x02,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x02, + 0x02,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x02, + 0x02,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +}; +uint8_t tileset_tile_126_data[258] = { + 16, // tile_width + 16, // tile_height + 0x1D,0x02,0x0A,0x0A,0x0A,0x0A,0x0A,0x02,0x02,0x0A,0x0A,0x0A,0x0A,0x0A,0x02,0x1D, + 0x1D,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x1D, + 0x1D,0x02,0x17,0x17,0x17,0x17,0x17,0x02,0x02,0x17,0x17,0x17,0x17,0x17,0x02,0x1D, + 0x1D,0x02,0x17,0x17,0x17,0x17,0x17,0x02,0x02,0x17,0x17,0x17,0x17,0x17,0x02,0x1D, + 0x1D,0x02,0x17,0x17,0x17,0x17,0x17,0x02,0x02,0x17,0x17,0x17,0x17,0x17,0x02,0x1D, + 0x1D,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x1D, + 0x1E,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1E, + 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E, + 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D, + 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D, + 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D, + 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D, + 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D, + 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +}; +uint8_t tileset_tile_127_data[258] = { + 16, // tile_width + 16, // tile_height + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x2D,0x2D,0x2D,0x10,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x1E,0x1E,0x1E,0x10,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x2D,0x2D,0x2D,0x10,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x1E,0x1E,0x1E,0x10,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x2D,0x2D,0x2D,0x10,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x1E,0x1E,0x1E,0x10,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x2D,0x2D,0x2D,0x10,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x1E,0x1E,0x1E,0x10,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x2D,0x2D,0x2D,0x07,0x02,0x10,0x00, + 0x07,0x31,0x1E,0x1E,0x1E,0x1E,0x1D,0x07,0x10,0x1E,0x1E,0x1E,0x07,0x02,0x10,0x00, + 0x07,0x2D,0x1D,0x1D,0x1D,0x1D,0x1D,0x07,0x10,0x1D,0x1D,0x1D,0x07,0x02,0x10,0x00, + 0x07,0x1E,0x1D,0x1D,0x1D,0x1D,0x1D,0x07,0x10,0x1D,0x1D,0x1D,0x07,0x02,0x10,0x00, + 0x07,0x1E,0x1D,0x1D,0x1D,0x1D,0x1D,0x07,0x10,0x1D,0x1D,0x1D,0x07,0x02,0x10,0x00, + 0x07,0x1E,0x1D,0x1D,0x1D,0x1D,0x1D,0x07,0x10,0x1D,0x1D,0x1D,0x07,0x02,0x10,0x00, + 0x07,0x1E,0x1D,0x1D,0x1D,0x1D,0x1D,0x07,0x10,0x1D,0x1D,0x1D,0x07,0x02,0x10,0x00, + 0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x00, +}; +uint8_t *tileset_tiles_data[128] = { + tileset_tile_0_data, + tileset_tile_1_data, + tileset_tile_2_data, + tileset_tile_3_data, + tileset_tile_4_data, + tileset_tile_5_data, + tileset_tile_6_data, + tileset_tile_7_data, + tileset_tile_8_data, + tileset_tile_9_data, + tileset_tile_10_data, + tileset_tile_11_data, + tileset_tile_12_data, + tileset_tile_13_data, + tileset_tile_14_data, + tileset_tile_15_data, + tileset_tile_16_data, + tileset_tile_17_data, + tileset_tile_18_data, + tileset_tile_19_data, + tileset_tile_20_data, + tileset_tile_21_data, + tileset_tile_22_data, + tileset_tile_23_data, + tileset_tile_24_data, + tileset_tile_25_data, + tileset_tile_26_data, + tileset_tile_27_data, + tileset_tile_28_data, + tileset_tile_29_data, + tileset_tile_30_data, + tileset_tile_31_data, + tileset_tile_32_data, + tileset_tile_33_data, + tileset_tile_34_data, + tileset_tile_35_data, + tileset_tile_36_data, + tileset_tile_37_data, + tileset_tile_38_data, + tileset_tile_39_data, + tileset_tile_40_data, + tileset_tile_41_data, + tileset_tile_42_data, + tileset_tile_43_data, + tileset_tile_44_data, + tileset_tile_45_data, + tileset_tile_46_data, + tileset_tile_47_data, + tileset_tile_48_data, + tileset_tile_49_data, + tileset_tile_50_data, + tileset_tile_51_data, + tileset_tile_52_data, + tileset_tile_53_data, + tileset_tile_54_data, + tileset_tile_55_data, + tileset_tile_56_data, + tileset_tile_57_data, + tileset_tile_58_data, + tileset_tile_59_data, + tileset_tile_60_data, + tileset_tile_61_data, + tileset_tile_62_data, + tileset_tile_63_data, + tileset_tile_64_data, + tileset_tile_65_data, + tileset_tile_66_data, + tileset_tile_67_data, + tileset_tile_68_data, + tileset_tile_69_data, + tileset_tile_70_data, + tileset_tile_71_data, + tileset_tile_72_data, + tileset_tile_73_data, + tileset_tile_74_data, + tileset_tile_75_data, + tileset_tile_76_data, + tileset_tile_77_data, + tileset_tile_78_data, + tileset_tile_79_data, + tileset_tile_80_data, + tileset_tile_81_data, + tileset_tile_82_data, + tileset_tile_83_data, + tileset_tile_84_data, + tileset_tile_85_data, + tileset_tile_86_data, + tileset_tile_87_data, + tileset_tile_88_data, + tileset_tile_89_data, + tileset_tile_90_data, + tileset_tile_91_data, + tileset_tile_92_data, + tileset_tile_93_data, + tileset_tile_94_data, + tileset_tile_95_data, + tileset_tile_96_data, + tileset_tile_97_data, + tileset_tile_98_data, + tileset_tile_99_data, + tileset_tile_100_data, + tileset_tile_101_data, + tileset_tile_102_data, + tileset_tile_103_data, + tileset_tile_104_data, + tileset_tile_105_data, + tileset_tile_106_data, + tileset_tile_107_data, + tileset_tile_108_data, + tileset_tile_109_data, + tileset_tile_110_data, + tileset_tile_111_data, + tileset_tile_112_data, + tileset_tile_113_data, + tileset_tile_114_data, + tileset_tile_115_data, + tileset_tile_116_data, + tileset_tile_117_data, + tileset_tile_118_data, + tileset_tile_119_data, + tileset_tile_120_data, + tileset_tile_121_data, + tileset_tile_122_data, + tileset_tile_123_data, + tileset_tile_124_data, + tileset_tile_125_data, + tileset_tile_126_data, + tileset_tile_127_data, +}; diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tileset.png b/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tileset.png new file mode 100644 index 0000000..c20a947 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tileset.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap/src/main.c b/frontends/calculator/CEdev/examples/gfx_tilemap/src/main.c new file mode 100644 index 0000000..7845bf9 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap/src/main.c @@ -0,0 +1,102 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +/* Include the graphics */ +#include "gfx/tiles_gfx.h" + +/* Include the external map data */ +extern uint8_t tilemap_map[]; + +/* Tilemap defines */ +#define TILE_WIDTH 16 +#define TILE_HEIGHT 16 + +#define TILEMAP_WIDTH 32 +#define TILEMAP_HEIGHT 25 + +#define TILEMAP_DRAW_WIDTH 20 +#define TILEMAP_DRAW_HEIGHT 14 + +#define Y_OFFSET 16 +#define X_OFFSET 0 + +void main(void) { + sk_key_t key; + unsigned int x_offset = 0; + unsigned int y_offset = 0; + gfx_tilemap_t tilemap; + + /* Initialize the tilemap structure */ + tilemap.map = tilemap_map; + tilemap.tiles = tileset_tiles; + tilemap.type_width = gfx_tile_16_pixel; + tilemap.type_height = gfx_tile_16_pixel; + tilemap.tile_height = TILE_HEIGHT; + tilemap.tile_width = TILE_WIDTH; + tilemap.draw_height = TILEMAP_DRAW_HEIGHT; + tilemap.draw_width = TILEMAP_DRAW_WIDTH; + tilemap.height = TILEMAP_HEIGHT; + tilemap.width = TILEMAP_WIDTH; + tilemap.y_loc = Y_OFFSET; + tilemap.x_loc = X_OFFSET; + + /* Initialize the 8bpp graphics */ + gfx_Begin(); + + /* Set up the palette */ + gfx_SetPalette(tiles_gfx_pal, sizeof_tiles_gfx_pal, 0); + gfx_SetColor(gfx_white); + + /* Draw to buffer to avoid tearing */ + gfx_SetDrawBuffer(); + + /* Set monospace font with width of 8 */ + gfx_SetMonospaceFont(8); + + /* Wait for the enter key to quit */ + while ((key = os_GetCSC()) != sk_Enter) { + + /* Draw tilemap and coords */ + gfx_Tilemap(&tilemap, x_offset, y_offset); + gfx_FillRectangle(0, 0, 320, 16); + gfx_PrintStringXY("x offset:", 48, 4); + gfx_PrintUInt(x_offset, 4); + gfx_PrintString(" y offset:"); + gfx_PrintUInt(y_offset, 4); + + /* Do something based on the keypress */ + switch (key) { + case sk_Down: + if (y_offset < (TILEMAP_HEIGHT * TILE_HEIGHT) - (TILEMAP_DRAW_HEIGHT * TILE_HEIGHT)) + y_offset += TILE_HEIGHT; + break; + case sk_Left: + if (x_offset) + x_offset -= TILE_WIDTH; + break; + case sk_Right: + if (x_offset < (TILEMAP_WIDTH * TILE_WIDTH) - (TILEMAP_DRAW_WIDTH * TILE_WIDTH)) + x_offset += TILE_WIDTH; + break; + case sk_Up: + if (y_offset) + y_offset -= TILE_HEIGHT; + break; + default: + break; + } + gfx_SwapDraw(); + } + + /* Close the graphics and return to the OS */ + gfx_End(); +} diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap/src/tilemapdata.c b/frontends/calculator/CEdev/examples/gfx_tilemap/src/tilemapdata.c new file mode 100644 index 0000000..d443c6c --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap/src/tilemapdata.c @@ -0,0 +1,30 @@ +#include + +/* This is the data that is displayed with the tilemap */ +uint8_t tilemap_map[] = { + 0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x14,0x15,0x04,0x05,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22, + 0x30,0x54,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x53,0x32,0x04,0x05,0x14,0x15,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x53,0x32, + 0x30,0x32,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x30,0x32,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x01,0x10,0x10,0x10,0x00,0x00,0x01,0x00,0x01,0x00,0x30,0x32,0x04,0x05,0x14,0x15,0x00,0x50,0x51,0x51,0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x00,0x10,0x10,0x10,0x00,0x01,0x00,0x01,0x00,0x01,0x30,0x32,0x14,0x15,0x04,0x05,0x00,0x60,0x61,0x61,0x62,0x00,0x00,0x00,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x01,0x10,0x10,0x10,0x00,0x00,0x01,0x00,0x01,0x00,0x40,0x42,0x04,0x05,0x14,0x15,0x00,0x60,0x61,0x61,0x62,0x00,0x00,0x00,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x14,0x15,0x04,0x05,0x00,0x70,0x71,0x71,0x72,0x00,0x00,0x00,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x01,0x00,0x01,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x01,0x00,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x00,0x01,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x01,0x00,0x00,0x00,0x01,0x10,0x10,0x10,0x10,0x10,0x01,0x00,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x00,0x01,0x00,0x01,0x00,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x01,0x00,0x01,0x00,0x01,0x10,0x10,0x10,0x10,0x10,0x01,0x00,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x43,0x32, + 0x30,0x32,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x53,0x32, + 0x30,0x32,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x20,0x22,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x30,0x32,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x30,0x32,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x00,0x00,0x00,0x01,0x00,0x01,0x10,0x10,0x00,0x01,0x30,0x32,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x01,0x00,0x01,0x00,0x01,0x00,0x10,0x10,0x01,0x00,0x30,0x32,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x30,0x32,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x01,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x30,0x32,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x00,0x10,0x10,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x30,0x32,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x01,0x10,0x10,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x30,0x32,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x30,0x32,0x14,0x15,0x24,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x44,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x43,0x32,0x04,0x05,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x43,0x32, + 0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x14,0x15,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42, +}; diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/autotester.json b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/autotester.json new file mode 100644 index 0000000..9a2cd06 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/autotester.json @@ -0,0 +1,43 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp", + "src/gfx/var_gfx.8xv" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "hashWait|1", + "delay|100", + "key|right", + "key|right", + "key|down", + "key|down", + "hashWait|2", + "key|enter", + "hashWait|3" + ], + "hashes": { + "1": { + "description": "Initial sprite map state (top left)", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "3C2D7C36" ] + }, + "2": { + "description": "Moving a bit to the bottom right", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "F0C14AE9" ] + }, + "3": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44", "43BF8092", "5ACF1C01" ] + } + } +} diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/makefile b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/readme.md b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/readme.md new file mode 100644 index 0000000..83c687b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/readme.md @@ -0,0 +1,10 @@ +### GraphX Simple Appvar Tilemap Demo + +An example of tilemaping using a sequence of tiles and the keypad. Data for the tilemap is stored within an appvar. + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/screenshot.gif b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/screenshot.gif new file mode 100644 index 0000000..741067c Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/screenshot.gif differ diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/convpng.ini b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/convpng.ini new file mode 100644 index 0000000..ebcba17 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/convpng.ini @@ -0,0 +1,14 @@ +// Appvar to place all graphics in + +#AppvarC : var_gfx +#IncludePalettes : tiles_gfx +#PNGImages : + tileset + +// The group for the tileset + +#GroupC : tiles_gfx +#TransparentColor : 255,201,14 +#Tilemap : 16,16,true +#PNGImages : + tileset diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tiles_gfx.c b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tiles_gfx.c new file mode 100644 index 0000000..7243683 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tiles_gfx.c @@ -0,0 +1,4 @@ +// convpng +#include +#include "tiles_gfx.h" + diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tiles_gfx.h b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tiles_gfx.h new file mode 100644 index 0000000..e86b1ce --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tiles_gfx.h @@ -0,0 +1,10 @@ +// convpng +// this file contains all the graphics sources for easy inclusion in a project +#ifndef __tiles_gfx__ +#define __tiles_gfx__ +#include + +#define tiles_gfx_transparent_color_index 0 + + +#endif diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tileset.c b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tileset.c new file mode 100644 index 0000000..f4abe71 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tileset.c @@ -0,0 +1,134 @@ +// convpng +#include +#include "tiles_gfx.h" + +uint8_t *tileset_tiles_data[128] = { + (uint8_t*)0, + (uint8_t*)258, + (uint8_t*)516, + (uint8_t*)774, + (uint8_t*)1032, + (uint8_t*)1290, + (uint8_t*)1548, + (uint8_t*)1806, + (uint8_t*)2064, + (uint8_t*)2322, + (uint8_t*)2580, + (uint8_t*)2838, + (uint8_t*)3096, + (uint8_t*)3354, + (uint8_t*)3612, + (uint8_t*)3870, + (uint8_t*)4128, + (uint8_t*)4386, + (uint8_t*)4644, + (uint8_t*)4902, + (uint8_t*)5160, + (uint8_t*)5418, + (uint8_t*)5676, + (uint8_t*)5934, + (uint8_t*)6192, + (uint8_t*)6450, + (uint8_t*)6708, + (uint8_t*)6966, + (uint8_t*)7224, + (uint8_t*)7482, + (uint8_t*)7740, + (uint8_t*)7998, + (uint8_t*)8256, + (uint8_t*)8514, + (uint8_t*)8772, + (uint8_t*)9030, + (uint8_t*)9288, + (uint8_t*)9546, + (uint8_t*)9804, + (uint8_t*)10062, + (uint8_t*)10320, + (uint8_t*)10578, + (uint8_t*)10836, + (uint8_t*)11094, + (uint8_t*)11352, + (uint8_t*)11610, + (uint8_t*)11868, + (uint8_t*)12126, + (uint8_t*)12384, + (uint8_t*)12642, + (uint8_t*)12900, + (uint8_t*)13158, + (uint8_t*)13416, + (uint8_t*)13674, + (uint8_t*)13932, + (uint8_t*)14190, + (uint8_t*)14448, + (uint8_t*)14706, + (uint8_t*)14964, + (uint8_t*)15222, + (uint8_t*)15480, + (uint8_t*)15738, + (uint8_t*)15996, + (uint8_t*)16254, + (uint8_t*)16512, + (uint8_t*)16770, + (uint8_t*)17028, + (uint8_t*)17286, + (uint8_t*)17544, + (uint8_t*)17802, + (uint8_t*)18060, + (uint8_t*)18318, + (uint8_t*)18576, + (uint8_t*)18834, + (uint8_t*)19092, + (uint8_t*)19350, + (uint8_t*)19608, + (uint8_t*)19866, + (uint8_t*)20124, + (uint8_t*)20382, + (uint8_t*)20640, + (uint8_t*)20898, + (uint8_t*)21156, + (uint8_t*)21414, + (uint8_t*)21672, + (uint8_t*)21930, + (uint8_t*)22188, + (uint8_t*)22446, + (uint8_t*)22704, + (uint8_t*)22962, + (uint8_t*)23220, + (uint8_t*)23478, + (uint8_t*)23736, + (uint8_t*)23994, + (uint8_t*)24252, + (uint8_t*)24510, + (uint8_t*)24768, + (uint8_t*)25026, + (uint8_t*)25284, + (uint8_t*)25542, + (uint8_t*)25800, + (uint8_t*)26058, + (uint8_t*)26316, + (uint8_t*)26574, + (uint8_t*)26832, + (uint8_t*)27090, + (uint8_t*)27348, + (uint8_t*)27606, + (uint8_t*)27864, + (uint8_t*)28122, + (uint8_t*)28380, + (uint8_t*)28638, + (uint8_t*)28896, + (uint8_t*)29154, + (uint8_t*)29412, + (uint8_t*)29670, + (uint8_t*)29928, + (uint8_t*)30186, + (uint8_t*)30444, + (uint8_t*)30702, + (uint8_t*)30960, + (uint8_t*)31218, + (uint8_t*)31476, + (uint8_t*)31734, + (uint8_t*)31992, + (uint8_t*)32250, + (uint8_t*)32508, + (uint8_t*)32766, +}; diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tileset.png b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tileset.png new file mode 100644 index 0000000..c20a947 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tileset.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.8xv b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.8xv new file mode 100644 index 0000000..20f2b3e Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.8xv differ diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.c b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.c new file mode 100644 index 0000000..3b84b3f --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.c @@ -0,0 +1,31 @@ +// convpng +#include +#include "var_gfx.h" + +#include +uint8_t *var_gfx[2] = { + (uint8_t*)0, + (uint8_t*)33024, +}; + +bool var_gfx_init(void) { + unsigned int data, i; + ti_var_t appvar; + + ti_CloseAll(); + + appvar = ti_Open("var_gfx", "r"); + data = (unsigned int)ti_GetDataPtr(appvar) - (unsigned int)var_gfx[0]; + for (i = 0; i < var_gfx_num; i++) { + var_gfx[i] += data; + } + + ti_CloseAll(); + + data = (unsigned int)var_gfx[0] - (unsigned int)tileset_tiles_data[0]; + for (i = 0; i < tileset_tiles_num; i++) { + tileset_tiles_data[i] += data; + } + + return (bool)appvar; +} diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.h b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.h new file mode 100644 index 0000000..d472794 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.h @@ -0,0 +1,148 @@ +// convpng +// this file contains all the graphics sources for easy inclusion in a project +#ifndef __var_gfx__ +#define __var_gfx__ +#include + +#include + +#define var_gfx_num 2 + +extern uint8_t *var_gfx[2]; +#define tileset ((gfx_sprite_t*)var_gfx[0]) +#define tileset_tiles_num 128 +extern uint8_t *tileset_tiles_data[128]; +#define tileset_tiles ((gfx_sprite_t**)tileset_tiles_data) +#define tileset_tile_0 ((gfx_sprite_t*)tileset_tiles_data[0]) +#define tileset_tile_1 ((gfx_sprite_t*)tileset_tiles_data[1]) +#define tileset_tile_2 ((gfx_sprite_t*)tileset_tiles_data[2]) +#define tileset_tile_3 ((gfx_sprite_t*)tileset_tiles_data[3]) +#define tileset_tile_4 ((gfx_sprite_t*)tileset_tiles_data[4]) +#define tileset_tile_5 ((gfx_sprite_t*)tileset_tiles_data[5]) +#define tileset_tile_6 ((gfx_sprite_t*)tileset_tiles_data[6]) +#define tileset_tile_7 ((gfx_sprite_t*)tileset_tiles_data[7]) +#define tileset_tile_8 ((gfx_sprite_t*)tileset_tiles_data[8]) +#define tileset_tile_9 ((gfx_sprite_t*)tileset_tiles_data[9]) +#define tileset_tile_10 ((gfx_sprite_t*)tileset_tiles_data[10]) +#define tileset_tile_11 ((gfx_sprite_t*)tileset_tiles_data[11]) +#define tileset_tile_12 ((gfx_sprite_t*)tileset_tiles_data[12]) +#define tileset_tile_13 ((gfx_sprite_t*)tileset_tiles_data[13]) +#define tileset_tile_14 ((gfx_sprite_t*)tileset_tiles_data[14]) +#define tileset_tile_15 ((gfx_sprite_t*)tileset_tiles_data[15]) +#define tileset_tile_16 ((gfx_sprite_t*)tileset_tiles_data[16]) +#define tileset_tile_17 ((gfx_sprite_t*)tileset_tiles_data[17]) +#define tileset_tile_18 ((gfx_sprite_t*)tileset_tiles_data[18]) +#define tileset_tile_19 ((gfx_sprite_t*)tileset_tiles_data[19]) +#define tileset_tile_20 ((gfx_sprite_t*)tileset_tiles_data[20]) +#define tileset_tile_21 ((gfx_sprite_t*)tileset_tiles_data[21]) +#define tileset_tile_22 ((gfx_sprite_t*)tileset_tiles_data[22]) +#define tileset_tile_23 ((gfx_sprite_t*)tileset_tiles_data[23]) +#define tileset_tile_24 ((gfx_sprite_t*)tileset_tiles_data[24]) +#define tileset_tile_25 ((gfx_sprite_t*)tileset_tiles_data[25]) +#define tileset_tile_26 ((gfx_sprite_t*)tileset_tiles_data[26]) +#define tileset_tile_27 ((gfx_sprite_t*)tileset_tiles_data[27]) +#define tileset_tile_28 ((gfx_sprite_t*)tileset_tiles_data[28]) +#define tileset_tile_29 ((gfx_sprite_t*)tileset_tiles_data[29]) +#define tileset_tile_30 ((gfx_sprite_t*)tileset_tiles_data[30]) +#define tileset_tile_31 ((gfx_sprite_t*)tileset_tiles_data[31]) +#define tileset_tile_32 ((gfx_sprite_t*)tileset_tiles_data[32]) +#define tileset_tile_33 ((gfx_sprite_t*)tileset_tiles_data[33]) +#define tileset_tile_34 ((gfx_sprite_t*)tileset_tiles_data[34]) +#define tileset_tile_35 ((gfx_sprite_t*)tileset_tiles_data[35]) +#define tileset_tile_36 ((gfx_sprite_t*)tileset_tiles_data[36]) +#define tileset_tile_37 ((gfx_sprite_t*)tileset_tiles_data[37]) +#define tileset_tile_38 ((gfx_sprite_t*)tileset_tiles_data[38]) +#define tileset_tile_39 ((gfx_sprite_t*)tileset_tiles_data[39]) +#define tileset_tile_40 ((gfx_sprite_t*)tileset_tiles_data[40]) +#define tileset_tile_41 ((gfx_sprite_t*)tileset_tiles_data[41]) +#define tileset_tile_42 ((gfx_sprite_t*)tileset_tiles_data[42]) +#define tileset_tile_43 ((gfx_sprite_t*)tileset_tiles_data[43]) +#define tileset_tile_44 ((gfx_sprite_t*)tileset_tiles_data[44]) +#define tileset_tile_45 ((gfx_sprite_t*)tileset_tiles_data[45]) +#define tileset_tile_46 ((gfx_sprite_t*)tileset_tiles_data[46]) +#define tileset_tile_47 ((gfx_sprite_t*)tileset_tiles_data[47]) +#define tileset_tile_48 ((gfx_sprite_t*)tileset_tiles_data[48]) +#define tileset_tile_49 ((gfx_sprite_t*)tileset_tiles_data[49]) +#define tileset_tile_50 ((gfx_sprite_t*)tileset_tiles_data[50]) +#define tileset_tile_51 ((gfx_sprite_t*)tileset_tiles_data[51]) +#define tileset_tile_52 ((gfx_sprite_t*)tileset_tiles_data[52]) +#define tileset_tile_53 ((gfx_sprite_t*)tileset_tiles_data[53]) +#define tileset_tile_54 ((gfx_sprite_t*)tileset_tiles_data[54]) +#define tileset_tile_55 ((gfx_sprite_t*)tileset_tiles_data[55]) +#define tileset_tile_56 ((gfx_sprite_t*)tileset_tiles_data[56]) +#define tileset_tile_57 ((gfx_sprite_t*)tileset_tiles_data[57]) +#define tileset_tile_58 ((gfx_sprite_t*)tileset_tiles_data[58]) +#define tileset_tile_59 ((gfx_sprite_t*)tileset_tiles_data[59]) +#define tileset_tile_60 ((gfx_sprite_t*)tileset_tiles_data[60]) +#define tileset_tile_61 ((gfx_sprite_t*)tileset_tiles_data[61]) +#define tileset_tile_62 ((gfx_sprite_t*)tileset_tiles_data[62]) +#define tileset_tile_63 ((gfx_sprite_t*)tileset_tiles_data[63]) +#define tileset_tile_64 ((gfx_sprite_t*)tileset_tiles_data[64]) +#define tileset_tile_65 ((gfx_sprite_t*)tileset_tiles_data[65]) +#define tileset_tile_66 ((gfx_sprite_t*)tileset_tiles_data[66]) +#define tileset_tile_67 ((gfx_sprite_t*)tileset_tiles_data[67]) +#define tileset_tile_68 ((gfx_sprite_t*)tileset_tiles_data[68]) +#define tileset_tile_69 ((gfx_sprite_t*)tileset_tiles_data[69]) +#define tileset_tile_70 ((gfx_sprite_t*)tileset_tiles_data[70]) +#define tileset_tile_71 ((gfx_sprite_t*)tileset_tiles_data[71]) +#define tileset_tile_72 ((gfx_sprite_t*)tileset_tiles_data[72]) +#define tileset_tile_73 ((gfx_sprite_t*)tileset_tiles_data[73]) +#define tileset_tile_74 ((gfx_sprite_t*)tileset_tiles_data[74]) +#define tileset_tile_75 ((gfx_sprite_t*)tileset_tiles_data[75]) +#define tileset_tile_76 ((gfx_sprite_t*)tileset_tiles_data[76]) +#define tileset_tile_77 ((gfx_sprite_t*)tileset_tiles_data[77]) +#define tileset_tile_78 ((gfx_sprite_t*)tileset_tiles_data[78]) +#define tileset_tile_79 ((gfx_sprite_t*)tileset_tiles_data[79]) +#define tileset_tile_80 ((gfx_sprite_t*)tileset_tiles_data[80]) +#define tileset_tile_81 ((gfx_sprite_t*)tileset_tiles_data[81]) +#define tileset_tile_82 ((gfx_sprite_t*)tileset_tiles_data[82]) +#define tileset_tile_83 ((gfx_sprite_t*)tileset_tiles_data[83]) +#define tileset_tile_84 ((gfx_sprite_t*)tileset_tiles_data[84]) +#define tileset_tile_85 ((gfx_sprite_t*)tileset_tiles_data[85]) +#define tileset_tile_86 ((gfx_sprite_t*)tileset_tiles_data[86]) +#define tileset_tile_87 ((gfx_sprite_t*)tileset_tiles_data[87]) +#define tileset_tile_88 ((gfx_sprite_t*)tileset_tiles_data[88]) +#define tileset_tile_89 ((gfx_sprite_t*)tileset_tiles_data[89]) +#define tileset_tile_90 ((gfx_sprite_t*)tileset_tiles_data[90]) +#define tileset_tile_91 ((gfx_sprite_t*)tileset_tiles_data[91]) +#define tileset_tile_92 ((gfx_sprite_t*)tileset_tiles_data[92]) +#define tileset_tile_93 ((gfx_sprite_t*)tileset_tiles_data[93]) +#define tileset_tile_94 ((gfx_sprite_t*)tileset_tiles_data[94]) +#define tileset_tile_95 ((gfx_sprite_t*)tileset_tiles_data[95]) +#define tileset_tile_96 ((gfx_sprite_t*)tileset_tiles_data[96]) +#define tileset_tile_97 ((gfx_sprite_t*)tileset_tiles_data[97]) +#define tileset_tile_98 ((gfx_sprite_t*)tileset_tiles_data[98]) +#define tileset_tile_99 ((gfx_sprite_t*)tileset_tiles_data[99]) +#define tileset_tile_100 ((gfx_sprite_t*)tileset_tiles_data[100]) +#define tileset_tile_101 ((gfx_sprite_t*)tileset_tiles_data[101]) +#define tileset_tile_102 ((gfx_sprite_t*)tileset_tiles_data[102]) +#define tileset_tile_103 ((gfx_sprite_t*)tileset_tiles_data[103]) +#define tileset_tile_104 ((gfx_sprite_t*)tileset_tiles_data[104]) +#define tileset_tile_105 ((gfx_sprite_t*)tileset_tiles_data[105]) +#define tileset_tile_106 ((gfx_sprite_t*)tileset_tiles_data[106]) +#define tileset_tile_107 ((gfx_sprite_t*)tileset_tiles_data[107]) +#define tileset_tile_108 ((gfx_sprite_t*)tileset_tiles_data[108]) +#define tileset_tile_109 ((gfx_sprite_t*)tileset_tiles_data[109]) +#define tileset_tile_110 ((gfx_sprite_t*)tileset_tiles_data[110]) +#define tileset_tile_111 ((gfx_sprite_t*)tileset_tiles_data[111]) +#define tileset_tile_112 ((gfx_sprite_t*)tileset_tiles_data[112]) +#define tileset_tile_113 ((gfx_sprite_t*)tileset_tiles_data[113]) +#define tileset_tile_114 ((gfx_sprite_t*)tileset_tiles_data[114]) +#define tileset_tile_115 ((gfx_sprite_t*)tileset_tiles_data[115]) +#define tileset_tile_116 ((gfx_sprite_t*)tileset_tiles_data[116]) +#define tileset_tile_117 ((gfx_sprite_t*)tileset_tiles_data[117]) +#define tileset_tile_118 ((gfx_sprite_t*)tileset_tiles_data[118]) +#define tileset_tile_119 ((gfx_sprite_t*)tileset_tiles_data[119]) +#define tileset_tile_120 ((gfx_sprite_t*)tileset_tiles_data[120]) +#define tileset_tile_121 ((gfx_sprite_t*)tileset_tiles_data[121]) +#define tileset_tile_122 ((gfx_sprite_t*)tileset_tiles_data[122]) +#define tileset_tile_123 ((gfx_sprite_t*)tileset_tiles_data[123]) +#define tileset_tile_124 ((gfx_sprite_t*)tileset_tiles_data[124]) +#define tileset_tile_125 ((gfx_sprite_t*)tileset_tiles_data[125]) +#define tileset_tile_126 ((gfx_sprite_t*)tileset_tiles_data[126]) +#define tileset_tile_127 ((gfx_sprite_t*)tileset_tiles_data[127]) +#define sizeof_tiles_gfx_pal 152 +#define tiles_gfx_pal ((uint16_t*)var_gfx[1]) +bool var_gfx_init(void); + +#endif diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/main.c b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/main.c new file mode 100644 index 0000000..caaf863 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/main.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +/* Include the graphics */ +#include "gfx/tiles_gfx.h" +#include "gfx/var_gfx.h" + +/* Include the external map data */ +extern uint8_t tilemap_map[]; + +/* Tilemap defines */ +#define TILE_WIDTH 16 +#define TILE_HEIGHT 16 + +#define TILEMAP_WIDTH 32 +#define TILEMAP_HEIGHT 25 + +#define TILEMAP_DRAW_WIDTH 20 +#define TILEMAP_DRAW_HEIGHT 14 + +#define Y_OFFSET 16 +#define X_OFFSET 0 + +void main(void) { + sk_key_t key; + unsigned int x_offset = 0; + unsigned int y_offset = 0; + gfx_tilemap_t tilemap; + + /* Initialize the graphics */ + var_gfx_init(); + + /* Initialize the tilemap structure */ + tilemap.map = tilemap_map; + tilemap.tiles = tileset_tiles; + tilemap.type_width = gfx_tile_16_pixel; + tilemap.type_height = gfx_tile_16_pixel; + tilemap.tile_height = TILE_HEIGHT; + tilemap.tile_width = TILE_WIDTH; + tilemap.draw_height = TILEMAP_DRAW_HEIGHT; + tilemap.draw_width = TILEMAP_DRAW_WIDTH; + tilemap.height = TILEMAP_HEIGHT; + tilemap.width = TILEMAP_WIDTH; + tilemap.y_loc = Y_OFFSET; + tilemap.x_loc = X_OFFSET; + + /* Initialize the 8bpp graphics */ + gfx_Begin(); + + /* Set up the palette */ + gfx_SetPalette(tiles_gfx_pal, sizeof_tiles_gfx_pal, 0); + gfx_SetColor(gfx_white); + + /* Draw to buffer to avoid tearing */ + gfx_SetDrawBuffer(); + + /* Set monospace font with width of 8 */ + gfx_SetMonospaceFont(8); + + /* Wait for the enter key to quit */ + while ((key = os_GetCSC()) != sk_Enter) { + + /* Draw tilemap and coords */ + gfx_Tilemap(&tilemap, x_offset, y_offset); + gfx_FillRectangle(0, 0, 320, 16); + gfx_PrintStringXY("x offset:", 48, 4); + gfx_PrintUInt(x_offset, 4); + gfx_PrintString(" y offset:"); + gfx_PrintUInt(y_offset, 4); + + /* Do something based on the keypress */ + switch (key) { + case sk_Down: + if (y_offset < (TILEMAP_HEIGHT * TILE_HEIGHT) - (TILEMAP_DRAW_HEIGHT * TILE_HEIGHT)) + y_offset += TILE_HEIGHT; + break; + case sk_Left: + if (x_offset) + x_offset -= TILE_WIDTH; + break; + case sk_Right: + if (x_offset < (TILEMAP_WIDTH * TILE_WIDTH) - (TILEMAP_DRAW_WIDTH * TILE_WIDTH)) + x_offset += TILE_WIDTH; + break; + case sk_Up: + if (y_offset) + y_offset -= TILE_HEIGHT; + break; + default: + break; + } + gfx_SwapDraw(); + } + + /* Close the graphics and return to the OS */ + gfx_End(); +} diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/tilemapdata.c b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/tilemapdata.c new file mode 100644 index 0000000..d443c6c --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/tilemapdata.c @@ -0,0 +1,30 @@ +#include + +/* This is the data that is displayed with the tilemap */ +uint8_t tilemap_map[] = { + 0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x14,0x15,0x04,0x05,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22, + 0x30,0x54,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x53,0x32,0x04,0x05,0x14,0x15,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x53,0x32, + 0x30,0x32,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x30,0x32,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x01,0x10,0x10,0x10,0x00,0x00,0x01,0x00,0x01,0x00,0x30,0x32,0x04,0x05,0x14,0x15,0x00,0x50,0x51,0x51,0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x00,0x10,0x10,0x10,0x00,0x01,0x00,0x01,0x00,0x01,0x30,0x32,0x14,0x15,0x04,0x05,0x00,0x60,0x61,0x61,0x62,0x00,0x00,0x00,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x01,0x10,0x10,0x10,0x00,0x00,0x01,0x00,0x01,0x00,0x40,0x42,0x04,0x05,0x14,0x15,0x00,0x60,0x61,0x61,0x62,0x00,0x00,0x00,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x14,0x15,0x04,0x05,0x00,0x70,0x71,0x71,0x72,0x00,0x00,0x00,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x01,0x00,0x01,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x01,0x00,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x00,0x01,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x01,0x00,0x00,0x00,0x01,0x10,0x10,0x10,0x10,0x10,0x01,0x00,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x00,0x01,0x00,0x01,0x00,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x01,0x00,0x01,0x00,0x01,0x10,0x10,0x10,0x10,0x10,0x01,0x00,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x43,0x32, + 0x30,0x32,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x53,0x32, + 0x30,0x32,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x20,0x22,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x30,0x32,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x32,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x30,0x32,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x00,0x00,0x00,0x01,0x00,0x01,0x10,0x10,0x00,0x01,0x30,0x32,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x01,0x00,0x01,0x00,0x01,0x00,0x10,0x10,0x01,0x00,0x30,0x32,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x30,0x32,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x01,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x30,0x32,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x00,0x10,0x10,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x30,0x32,0x14,0x15,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x01,0x10,0x10,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x30,0x32,0x04,0x05,0x14,0x15,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x30,0x32, + 0x30,0x32,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x30,0x32,0x14,0x15,0x24,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x32, + 0x30,0x44,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x43,0x32,0x04,0x05,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x43,0x32, + 0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x14,0x15,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42, +}; diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_compress/autotester.json b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/autotester.json new file mode 100644 index 0000000..085435f --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/autotester.json @@ -0,0 +1,43 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "hashWait|1", + "delay|100", + "key|right", + "key|right", + "key|down", + "key|down", + "hashWait|2", + "key|enter", + "hashWait|3" + ], + "hashes": { + "1": { + "description": "Initial sprite map state (top left)", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "EEED1F0B" ] + }, + "2": { + "description": "Moving a bit to the bottom right", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "BBB0544" ] + }, + "3": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_compress/makefile b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_compress/readme.md b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/readme.md new file mode 100644 index 0000000..d38a92c --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/readme.md @@ -0,0 +1,10 @@ +### GraphX Simple Compressed Tilemap Demo + +An example of tilemaping using a sequence of tiles and the keypad, except with compressed tiles. + +![Screenshot](../gfx_tilemap/screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/convpng.ini b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/convpng.ini new file mode 100644 index 0000000..3e0f83e --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/convpng.ini @@ -0,0 +1,6 @@ +#GroupC : tiles_gfx +#TransparentColor : 255,201,14,255 +#Compression : zx7 +#Tilemap : 16,16,true +#PNGImages : + tileset diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tiles_gfx.c b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tiles_gfx.c new file mode 100644 index 0000000..2d1e613 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tiles_gfx.c @@ -0,0 +1,82 @@ +// convpng +#include +#include "tiles_gfx.h" + +uint16_t tiles_gfx_pal[76] = { + 0x7F22, // 00 :: rgb(255,201,14) + 0xC30C, // 01 :: rgb(132,198,99) + 0x212D, // 02 :: rgb(65,72,106) + 0x1D40, // 03 :: rgb(56,80,0) + 0x1E46, // 04 :: rgb(57,146,49) + 0xDBD1, // 05 :: rgb(184,248,136) + 0xEB7B, // 06 :: rgb(216,224,224) + 0x318F, // 07 :: rgb(99,96,123) + 0x7771, // 08 :: rgb(239,219,140) + 0x650A, // 09 :: rgb(206,64,81) + 0x5F3C, // 10 :: rgb(189,203,231) + 0x6F9D, // 11 :: rgb(222,227,239) + 0x25D5, // 12 :: rgb(73,113,173) + 0x52D8, // 13 :: rgb(165,178,198) + 0xD353, // 14 :: rgb(168,216,160) + 0x6DAC, // 15 :: rgb(222,105,98) + 0x4211, // 16 :: rgb(132,130,140) + 0x3AFE, // 17 :: rgb(115,186,247) + 0x764E, // 18 :: rgb(239,146,114) + 0xE319, // 19 :: rgb(199,199,207) + 0x5A0D, // 20 :: rgb(184,128,111) + 0xE6F0, // 21 :: rgb(208,192,128) + 0x7EF0, // 22 :: rgb(255,186,132) + 0x4EDB, // 23 :: rgb(156,178,222) + 0x6EAE, // 24 :: rgb(222,170,114) + 0x49AD, // 25 :: rgb(148,105,106) + 0x32BD, // 26 :: rgb(99,170,239) + 0xFFFF, // 27 :: rgb(255,255,255) + 0x0E8D, // 28 :: rgb(23,162,107) + 0x666A, // 29 :: rgb(206,154,81) + 0x6ACD, // 30 :: rgb(214,178,106) + 0x22D1, // 31 :: rgb(65,178,140) + 0x18C2, // 32 :: rgb(48,48,14) + 0x5A30, // 33 :: rgb(182,138,130) + 0xB27A, // 34 :: rgb(96,159,215) + 0x7BAE, // 35 :: rgb(245,233,112) + 0x6E2C, // 36 :: rgb(224,136,95) + 0x2A37, // 37 :: rgb(79,136,192) + 0x39A6, // 38 :: rgb(112,104,47) + 0x0420, // 39 :: rgb(8,8,4) + 0xEAF3, // 40 :: rgb(214,191,154) + 0x2CE8, // 41 :: rgb(89,56,65) + 0xEF12, // 42 :: rgb(224,200,144) + 0xDEAD, // 43 :: rgb(191,175,110) + 0x5A51, // 44 :: rgb(184,144,136) + 0x6F30, // 45 :: rgb(222,203,132) + 0xCB3E, // 46 :: rgb(151,207,247) + 0xE35C, // 47 :: rgb(199,215,231) + 0x7399, // 48 :: rgb(231,227,206) + 0x7794, // 49 :: rgb(239,227,165) + 0x7AD0, // 50 :: rgb(247,178,132) + 0x3D29, // 51 :: rgb(123,73,73) + 0x32BC, // 52 :: rgb(96,168,232) + 0x3DF0, // 53 :: rgb(123,123,132) + 0x7337, // 54 :: rgb(228,201,192) + 0x1CC5, // 55 :: rgb(56,48,40) + 0x252B, // 56 :: rgb(71,71,87) + 0x1A05, // 57 :: rgb(46,130,39) + 0xE6AD, // 58 :: rgb(208,176,103) + 0xCF77, // 59 :: rgb(160,224,192) + 0x356B, // 60 :: rgb(107,88,89) + 0xCB58, // 61 :: rgb(144,216,200) + 0xC32A, // 62 :: rgb(135,207,79) + 0x2505, // 63 :: rgb(78,65,39) + 0x6BBF, // 64 :: rgb(214,235,255) + 0x5085, // 65 :: rgb(167,31,39) + 0xAD4D, // 66 :: rgb(87,87,110) + 0xDB1B, // 67 :: rgb(184,200,224) + 0x25D4, // 68 :: rgb(71,112,168) + 0x4E23, // 69 :: rgb(155,139,24) + 0x6149, // 70 :: rgb(199,79,71) + 0x91CA, // 71 :: rgb(37,117,83) + 0x2DD7, // 72 :: rgb(89,113,189) + 0xC76C, // 73 :: rgb(142,221,101) + 0xFB33, // 74 :: rgb(247,207,159) + 0xBB13, // 75 :: rgb(112,199,159) +}; \ No newline at end of file diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tiles_gfx.h b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tiles_gfx.h new file mode 100644 index 0000000..a03d932 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tiles_gfx.h @@ -0,0 +1,142 @@ +// convpng +// this file contains all the graphics sources for easy inclusion in a project +#ifndef __tiles_gfx__ +#define __tiles_gfx__ +#include + +#define tiles_gfx_transparent_color_index 0 + +extern uint8_t tileset_tile_0_compressed[]; +extern uint8_t tileset_tile_1_compressed[]; +extern uint8_t tileset_tile_2_compressed[]; +extern uint8_t tileset_tile_3_compressed[]; +extern uint8_t tileset_tile_4_compressed[]; +extern uint8_t tileset_tile_5_compressed[]; +extern uint8_t tileset_tile_6_compressed[]; +extern uint8_t tileset_tile_7_compressed[]; +extern uint8_t tileset_tile_8_compressed[]; +extern uint8_t tileset_tile_9_compressed[]; +extern uint8_t tileset_tile_10_compressed[]; +extern uint8_t tileset_tile_11_compressed[]; +extern uint8_t tileset_tile_12_compressed[]; +extern uint8_t tileset_tile_13_compressed[]; +extern uint8_t tileset_tile_14_compressed[]; +extern uint8_t tileset_tile_15_compressed[]; +extern uint8_t tileset_tile_16_compressed[]; +extern uint8_t tileset_tile_17_compressed[]; +extern uint8_t tileset_tile_18_compressed[]; +extern uint8_t tileset_tile_19_compressed[]; +extern uint8_t tileset_tile_20_compressed[]; +extern uint8_t tileset_tile_21_compressed[]; +extern uint8_t tileset_tile_22_compressed[]; +extern uint8_t tileset_tile_23_compressed[]; +extern uint8_t tileset_tile_24_compressed[]; +extern uint8_t tileset_tile_25_compressed[]; +extern uint8_t tileset_tile_26_compressed[]; +extern uint8_t tileset_tile_27_compressed[]; +extern uint8_t tileset_tile_28_compressed[]; +extern uint8_t tileset_tile_29_compressed[]; +extern uint8_t tileset_tile_30_compressed[]; +extern uint8_t tileset_tile_31_compressed[]; +extern uint8_t tileset_tile_32_compressed[]; +extern uint8_t tileset_tile_33_compressed[]; +extern uint8_t tileset_tile_34_compressed[]; +extern uint8_t tileset_tile_35_compressed[]; +extern uint8_t tileset_tile_36_compressed[]; +extern uint8_t tileset_tile_37_compressed[]; +extern uint8_t tileset_tile_38_compressed[]; +extern uint8_t tileset_tile_39_compressed[]; +extern uint8_t tileset_tile_40_compressed[]; +extern uint8_t tileset_tile_41_compressed[]; +extern uint8_t tileset_tile_42_compressed[]; +extern uint8_t tileset_tile_43_compressed[]; +extern uint8_t tileset_tile_44_compressed[]; +extern uint8_t tileset_tile_45_compressed[]; +extern uint8_t tileset_tile_46_compressed[]; +extern uint8_t tileset_tile_47_compressed[]; +extern uint8_t tileset_tile_48_compressed[]; +extern uint8_t tileset_tile_49_compressed[]; +extern uint8_t tileset_tile_50_compressed[]; +extern uint8_t tileset_tile_51_compressed[]; +extern uint8_t tileset_tile_52_compressed[]; +extern uint8_t tileset_tile_53_compressed[]; +extern uint8_t tileset_tile_54_compressed[]; +extern uint8_t tileset_tile_55_compressed[]; +extern uint8_t tileset_tile_56_compressed[]; +extern uint8_t tileset_tile_57_compressed[]; +extern uint8_t tileset_tile_58_compressed[]; +extern uint8_t tileset_tile_59_compressed[]; +extern uint8_t tileset_tile_60_compressed[]; +extern uint8_t tileset_tile_61_compressed[]; +extern uint8_t tileset_tile_62_compressed[]; +extern uint8_t tileset_tile_63_compressed[]; +extern uint8_t tileset_tile_64_compressed[]; +extern uint8_t tileset_tile_65_compressed[]; +extern uint8_t tileset_tile_66_compressed[]; +extern uint8_t tileset_tile_67_compressed[]; +extern uint8_t tileset_tile_68_compressed[]; +extern uint8_t tileset_tile_69_compressed[]; +extern uint8_t tileset_tile_70_compressed[]; +extern uint8_t tileset_tile_71_compressed[]; +extern uint8_t tileset_tile_72_compressed[]; +extern uint8_t tileset_tile_73_compressed[]; +extern uint8_t tileset_tile_74_compressed[]; +extern uint8_t tileset_tile_75_compressed[]; +extern uint8_t tileset_tile_76_compressed[]; +extern uint8_t tileset_tile_77_compressed[]; +extern uint8_t tileset_tile_78_compressed[]; +extern uint8_t tileset_tile_79_compressed[]; +extern uint8_t tileset_tile_80_compressed[]; +extern uint8_t tileset_tile_81_compressed[]; +extern uint8_t tileset_tile_82_compressed[]; +extern uint8_t tileset_tile_83_compressed[]; +extern uint8_t tileset_tile_84_compressed[]; +extern uint8_t tileset_tile_85_compressed[]; +extern uint8_t tileset_tile_86_compressed[]; +extern uint8_t tileset_tile_87_compressed[]; +extern uint8_t tileset_tile_88_compressed[]; +extern uint8_t tileset_tile_89_compressed[]; +extern uint8_t tileset_tile_90_compressed[]; +extern uint8_t tileset_tile_91_compressed[]; +extern uint8_t tileset_tile_92_compressed[]; +extern uint8_t tileset_tile_93_compressed[]; +extern uint8_t tileset_tile_94_compressed[]; +extern uint8_t tileset_tile_95_compressed[]; +extern uint8_t tileset_tile_96_compressed[]; +extern uint8_t tileset_tile_97_compressed[]; +extern uint8_t tileset_tile_98_compressed[]; +extern uint8_t tileset_tile_99_compressed[]; +extern uint8_t tileset_tile_100_compressed[]; +extern uint8_t tileset_tile_101_compressed[]; +extern uint8_t tileset_tile_102_compressed[]; +extern uint8_t tileset_tile_103_compressed[]; +extern uint8_t tileset_tile_104_compressed[]; +extern uint8_t tileset_tile_105_compressed[]; +extern uint8_t tileset_tile_106_compressed[]; +extern uint8_t tileset_tile_107_compressed[]; +extern uint8_t tileset_tile_108_compressed[]; +extern uint8_t tileset_tile_109_compressed[]; +extern uint8_t tileset_tile_110_compressed[]; +extern uint8_t tileset_tile_111_compressed[]; +extern uint8_t tileset_tile_112_compressed[]; +extern uint8_t tileset_tile_113_compressed[]; +extern uint8_t tileset_tile_114_compressed[]; +extern uint8_t tileset_tile_115_compressed[]; +extern uint8_t tileset_tile_116_compressed[]; +extern uint8_t tileset_tile_117_compressed[]; +extern uint8_t tileset_tile_118_compressed[]; +extern uint8_t tileset_tile_119_compressed[]; +extern uint8_t tileset_tile_120_compressed[]; +extern uint8_t tileset_tile_121_compressed[]; +extern uint8_t tileset_tile_122_compressed[]; +extern uint8_t tileset_tile_123_compressed[]; +extern uint8_t tileset_tile_124_compressed[]; +extern uint8_t tileset_tile_125_compressed[]; +extern uint8_t tileset_tile_126_compressed[]; +extern uint8_t tileset_tile_127_compressed[]; +#define tileset_tiles_num 128 +extern uint8_t *tileset_tiles_compressed[128]; +#define sizeof_tiles_gfx_pal 152 +extern uint16_t tiles_gfx_pal[76]; + +#endif diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tileset.c b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tileset.c new file mode 100644 index 0000000..fcb18d0 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tileset.c @@ -0,0 +1,726 @@ +// convpng +#include +#include "tiles_gfx.h" + +uint8_t tileset_tile_0_compressed[19] = { + 0x10,0x21,0x10,0x4B,0x84,0x00,0x3D,0x75,0x0C,0xC6,0x02,0xF0,0x1D,0x03,0x18,0x30,0x00,0x00,0x08, +}; +uint8_t tileset_tile_1_compressed[32] = { + 0x10,0x21,0x10,0x4B,0x14,0x00,0x1F,0x75,0x0C,0xC6,0x02,0xF0,0x1D,0x03,0x48,0x00,0x3D,0x8E,0x0C,0xB8,0x02,0xDE,0x1D,0x03,0x05,0xB8,0x00,0x23,0xC8,0x08,0x00,0x04, +}; +uint8_t tileset_tile_2_compressed[30] = { + 0x10,0x20,0x10,0x4B,0xCD,0x00,0x1F,0x1D,0x0C,0x71,0x02,0xB7,0x1D,0x03,0x07,0xE8,0x00,0x3B,0xEB,0x0C,0x02,0x8D,0x1D,0x40,0x3B,0x83,0x64,0x00,0x00,0x80, +}; +uint8_t tileset_tile_3_compressed[20] = { + 0x10,0x20,0x10,0x4B,0x54,0x00,0x47,0x1F,0x5C,0x0C,0x02,0x6F,0x1D,0x03,0x01,0x0B,0x00,0x00,0x00,0x80, +}; +uint8_t tileset_tile_4_compressed[118] = { + 0x10,0x05,0x10,0x4B,0x03,0x04,0x04,0x78,0x02,0x03,0x00,0x01,0x01,0x04,0xCE,0x02,0x4B,0x1C,0x08,0x7B,0x11,0x13,0x3B,0x4B,0x1F,0x10,0x0E,0xBB,0x00,0x12,0xDD,0x0F, + 0x1F,0x04,0xCB,0x0F,0x14,0xD5,0x0F,0x20,0xCC,0x0A,0x32,0x05,0xBB,0x0E,0x08,0xBA,0x0F,0x05,0x5C,0x05,0x0E,0xDE,0x4B,0x05,0x4E,0x05,0x27,0x1C,0x1C,0x0E,0xB7,0x30, + 0x05,0x0F,0x3D,0x1E,0xA2,0x0C,0x01,0xF0,0x0F,0x8B,0x92,0x0F,0x79,0x10,0x79,0x1E,0x0F,0x7E,0x10,0x1D,0x0D,0xFE,0x0E,0x5F,0x60,0xD7,0x10,0x01,0x11,0x76,0x00,0x8F, + 0x18,0xB1,0x73,0x07,0x77,0x0E,0x0F,0x10,0x77,0x20,0x3E,0x35,0x0F,0x07,0x86,0x1F,0x57,0x01,0x00,0x00,0x00,0x80, +}; +uint8_t tileset_tile_5_compressed[119] = { + 0x10,0x0D,0x10,0x01,0x01,0x04,0x02,0x03,0xBF,0x00,0x04,0x00,0x03,0x02,0x5C,0x4B,0x0B,0xF9,0x0D,0x07,0x1C,0x4B,0x2D,0x0C,0xFB,0x00,0x07,0x0E,0x1F,0x0F,0x96,0x0A, + 0xF6,0x04,0x00,0x1F,0x0F,0x05,0x9E,0x2C,0xAB,0x03,0x1E,0x0F,0xAB,0x17,0x0B,0xBB,0x05,0x10,0x77,0x05,0x50,0x0C,0x37,0x46,0x10,0xDC,0x0F,0x2A,0xE6,0x10,0x1C,0x1C, + 0x0F,0x01,0x7C,0x05,0x33,0x11,0xFD,0x20,0x0F,0xC5,0x00,0xDA,0x0F,0x21,0x04,0x7E,0x0E,0x0F,0xD7,0x00,0x01,0x45,0x72,0x0E,0xD6,0x0F,0x1F,0xC4,0x12,0x61,0x0E,0x90, + 0x2F,0x1D,0x0D,0xE1,0x06,0xAD,0x61,0x8F,0x2C,0x1F,0x96,0x2F,0x0E,0x4B,0x96,0x2E,0xA8,0x01,0x98,0x2E,0x0F,0x00,0x01, +}; +uint8_t tileset_tile_6_compressed[65] = { + 0x10,0x20,0x10,0x00,0xF5,0x00,0x03,0x1C,0x0E,0x05,0x8D,0x0F,0x46,0x04,0x91,0x0F,0x03,0x01,0x6D,0x0F,0x04,0x00,0x05,0x13,0x0F,0x68,0x0C,0x01,0xB2,0x0F,0x01,0x01, + 0x36,0x0F,0xE7,0x1E,0x0F,0xEA,0x2C,0x1C,0xE7,0x0E,0x0F,0x5C,0x01,0x11,0xFF,0x0F,0x67,0x07,0x34,0x0E,0x52,0x2F,0x05,0x7B,0x2F,0x86,0x0E,0x1F,0xAE,0x01,0x00,0x00, + 0x01, +}; +uint8_t tileset_tile_7_compressed[65] = { + 0x10,0x20,0x10,0x00,0xB9,0x00,0x03,0x1C,0x0F,0x05,0x8E,0x10,0x23,0x05,0x04,0x88,0x0F,0x01,0x03,0xE7,0x0F,0x04,0x00,0x18,0x0F,0x01,0x68,0x05,0x33,0x04,0xBA,0x0F, + 0x00,0x8B,0x0F,0xB8,0x21,0xAB,0x0F,0x00,0xA9,0x13,0xE5,0x32,0x0E,0xE7,0x0D,0x32,0x97,0x1D,0x0D,0xD1,0x06,0x03,0x51,0x1F,0x95,0x2F,0x2E,0x53,0x01,0x04,0x98,0x00, + 0x02, +}; +uint8_t tileset_tile_8_compressed[68] = { + 0x10,0x1B,0x10,0x00,0x07,0x00,0x00,0x00,0xE7,0x06,0x07,0x76,0x19,0x00,0x0B,0x19,0x98,0x07,0x07,0x23,0x2D,0x23,0x18,0x0B,0x19,0x35,0x07,0xDA,0x0F,0x00,0x19,0x6B, + 0x07,0x28,0xF4,0x0A,0x00,0x19,0xD0,0x07,0x29,0xC5,0x2F,0x88,0x00,0x07,0x14,0x23,0xC4,0x00,0x07,0x3F,0x00,0xA4,0x42,0x14,0xCF,0x09,0xAE,0x07,0x0F,0xD3,0x00,0x19, + 0x40,0x07,0x00,0x20, +}; +uint8_t tileset_tile_9_compressed[53] = { + 0x10,0x29,0x10,0x07,0x00,0x00,0x53,0x00,0xAA,0x07,0x19,0x00,0xE2,0x0B,0x05,0x07,0x23,0x23,0x18,0xC5,0x0B,0xDC,0x07,0x00,0xF2,0x07,0xF3,0x12,0x00,0xC0,0x07,0xA7, + 0x2F,0x16,0x00,0x23,0x8E,0x00,0x43,0x07,0xCD,0x00,0x19,0x42,0x14,0x1F,0x07,0x73,0x00,0xC0,0x07,0x00,0x20, +}; +uint8_t tileset_tile_10_compressed[53] = { + 0x10,0x29,0x10,0x07,0x00,0x00,0x53,0x00,0xAA,0x07,0x19,0x00,0xE2,0x0B,0x05,0x07,0x23,0x23,0x18,0xC5,0x0B,0xDC,0x07,0x00,0xF2,0x07,0xF3,0x12,0x00,0xC0,0x07,0xA7, + 0x2F,0x16,0x00,0x23,0x8E,0x00,0x43,0x07,0xCD,0x00,0x19,0x42,0x14,0x1F,0x07,0x73,0x00,0xC0,0x07,0x00,0x20, +}; +uint8_t tileset_tile_11_compressed[67] = { + 0x10,0x29,0x10,0x07,0x00,0x00,0x53,0x00,0xAA,0x07,0x19,0x00,0xE6,0x0B,0x07,0x05,0x02,0x19,0x23,0x23,0x18,0xCD,0x0B,0x07,0x25,0x0F,0xCC,0x00,0x07,0x02,0x97,0x1A, + 0x00,0x9A,0x07,0x05,0x48,0x2F,0xA2,0x00,0x02,0x23,0x30,0x00,0x14,0x02,0x46,0x07,0xC7,0x00,0xFA,0x0F,0x3F,0x43,0x14,0xEE,0x08,0x07,0x7B,0x0F,0x00,0x97,0x07,0x4F, + 0x80,0x00,0x40, +}; +uint8_t tileset_tile_12_compressed[46] = { + 0x10,0x20,0x10,0x00,0x21,0x49,0x00,0x09,0x07,0xA6,0x00,0x0E,0x55,0x16,0x00,0xA7,0x04,0x09,0x0E,0x8B,0x0F,0xA4,0x08,0x12,0x53,0x0F,0x09,0x08,0x45,0x12,0x64,0x0F, + 0x06,0x09,0x12,0x57,0x0F,0x05,0x19,0x0F,0x71,0x3B,0x70,0x0F,0x00,0x08, +}; +uint8_t tileset_tile_13_compressed[47] = { + 0x10,0x22,0x10,0x00,0x57,0x00,0x07,0x00,0x14,0x0C,0x16,0x39,0x09,0x16,0x00,0xDC,0x0D,0x12,0x00,0x4E,0x0F,0x0D,0x09,0x8A,0x0F,0xB8,0x1C,0xAB,0x0F,0x0E,0x8A,0x0F, + 0x11,0x07,0x0F,0x09,0x7C,0x0F,0x0E,0x6A,0x0F,0x09,0x07,0xE8,0x0F,0x00,0x04, +}; +uint8_t tileset_tile_14_compressed[48] = { + 0x10,0x2D,0x10,0x07,0x00,0x00,0x12,0x00,0x16,0xC9,0x00,0x09,0x16,0xE7,0x12,0x0F,0x7C,0x12,0x00,0x11,0x6B,0x0F,0x09,0x11,0x8E,0x0F,0xB8,0x22,0xCB,0x0F,0x10,0x8C, + 0x0F,0x11,0x09,0x0F,0x07,0xDC,0x0F,0x10,0x72,0x0F,0x09,0x06,0xF8,0x0F,0x00,0x04, +}; +uint8_t tileset_tile_15_compressed[41] = { + 0x10,0x20,0x10,0x00,0x7E,0x00,0x4C,0x07,0x00,0x09,0x99,0x0F,0x16,0xAC,0x00,0x09,0x03,0x12,0x09,0x8E,0x0F,0xE3,0x10,0xB8,0x0F,0x10,0xF4,0x0F,0x09,0x77,0x0F,0x01, + 0x1D,0x0F,0xC7,0x02,0x70,0x0F,0x03,0x00,0x08, +}; +uint8_t tileset_tile_16_compressed[126] = { + 0x10,0x35,0x10,0x4B,0x00,0x1F,0xA6,0x03,0x04,0x08,0x98,0x04,0x04,0x3B,0xE6,0x10,0x0D,0x63,0x04,0x00,0x1F,0x1F,0x3B,0x0F,0x0A,0x1F,0x03,0x04,0x03,0x11,0x7F,0x1C, + 0x0A,0x0B,0x1E,0xA8,0x16,0x03,0x08,0x03,0x1F,0x9B,0x10,0x06,0xAF,0x0A,0x0E,0x24,0xBA,0x21,0x03,0xAF,0x2D,0x34,0x26,0xBF,0x1E,0x00,0x07,0xBE,0x44,0x11,0xBA,0x00, + 0x08,0x2D,0xAA,0x0D,0x2E,0xBA,0x3B,0x06,0xEF,0x10,0x6E,0x4D,0xFB,0x09,0x00,0x13,0xE4,0x0B,0x08,0xEF,0x4A,0x13,0x03,0x9A,0x1C,0x5B,0x00,0x50,0xB0,0xA9,0xB0,0x8A, + 0xA9,0x6B,0x25,0x42,0x21,0xEE,0x00,0x30,0xEF,0x74,0x2C,0x06,0x9A,0x07,0xE4,0x24,0x1C,0xAB,0x0E,0x07,0xBE,0x4F,0x11,0x6A,0x5A,0x1B,0xE0,0x0D,0x00,0x10, +}; +uint8_t tileset_tile_17_compressed[98] = { + 0x10,0x22,0x10,0x00,0x5C,0x00,0x20,0x00,0x60,0x0D,0x39,0x39,0x3E,0xE7,0x10,0x16,0xAF,0x0D,0x0E,0x00,0xDB,0x0A,0x20,0x04,0x39,0x11,0x96,0x1E,0xAF,0x0F,0x0E,0x00, + 0xAB,0x23,0x20,0xB5,0x19,0x3E,0xDD,0x05,0x0E,0xD4,0x10,0x39,0x92,0x06,0xC9,0x00,0x09,0x39,0x0E,0x3F,0x3F,0x69,0x05,0x00,0xEA,0x0B,0x02,0x7B,0x77,0x10,0xA8,0x01, + 0xA0,0x89,0xD1,0x02,0x45,0x5C,0x0F,0x00,0x77,0x0F,0x50,0xFC,0x2E,0x10,0x59,0x43,0x0E,0x33,0x0D,0x44,0x45,0xD5,0x10,0x1E,0xA2,0x10,0x20,0xAE,0x20,0x00,0x58,0x0E, + 0x00,0x04, +}; +uint8_t tileset_tile_18_compressed[105] = { + 0x10,0x21,0x10,0x00,0x45,0x00,0x04,0x45,0x00,0x84,0x0D,0x05,0x01,0x01,0x05,0x47,0x11,0x0D,0x2A,0x00,0x01,0x57,0x10,0x04,0x1A,0x19,0x10,0xD4,0x0F,0x10,0xB7,0x03, + 0x0F,0xCF,0x0E,0x2F,0xDA,0x41,0x10,0x01,0x2C,0x2F,0x01,0x1F,0x39,0x00,0x03,0x05,0xF2,0x2F,0x08,0x03,0x1C,0xD3,0x2F,0x01,0x56,0x00,0x0A,0x0F,0x03,0xF9,0x05,0x06, + 0xD7,0x03,0x03,0x0F,0x73,0x1F,0x52,0x04,0x0F,0x1F,0xA5,0x10,0x1F,0xBC,0x0E,0x4F,0x00,0x1C,0xEE,0x06,0x12,0xEE,0x05,0x0E,0xBF,0x10,0x00,0x0B,0x00,0xAE,0x06,0x2D, + 0x55,0x00,0x1F,0xCB,0x0B,0x1C,0x00,0x00,0x80, +}; +uint8_t tileset_tile_19_compressed[130] = { + 0x10,0x24,0x10,0x00,0x00,0x6D,0x2C,0x00,0x33,0x00,0x00,0x30,0x00,0x33,0x2C,0x36,0xCD,0x00,0x2C,0x19,0x12,0x2C,0x37,0x1C,0x0D,0x79,0x0F,0x03,0x28,0x33,0x3A,0x1D, + 0x28,0x4B,0x0E,0x0F,0xEB,0x26,0x08,0x01,0xEF,0x00,0x0F,0x30,0xEE,0x1E,0x07,0xFF,0x0F,0x00,0x38,0x25,0xEE,0x0F,0x09,0xE4,0x0C,0x03,0x27,0x29,0x35,0x0F,0xFC,0x37, + 0x0E,0x01,0x29,0x19,0xBE,0x0F,0x26,0xEB,0x03,0x0E,0x0F,0x2B,0x29,0x33,0x0B,0x02,0xAF,0x39,0x1A,0x02,0xFF,0x00,0x0F,0x10,0x00,0xFA,0x0E,0x27,0x09,0x95,0x0F,0x2C, + 0x69,0x11,0x29,0x89,0x0F,0x35,0x29,0xAA,0x09,0x05,0xD5,0x0E,0x00,0x10,0x2C,0x19,0x9F,0x0E,0x0F,0x10,0x77,0x11,0x28,0x2F,0x0E,0x00,0x7F,0x22,0x5C,0x0B,0x24,0x0D, + 0x00,0x02, +}; +uint8_t tileset_tile_20_compressed[134] = { + 0x10,0x30,0x10,0x4B,0x00,0x1F,0x03,0x05,0x05,0x1F,0x04,0x01,0x04,0x04,0x00,0xE3,0x04,0x0D,0x4B,0x1C,0x1C,0x0D,0xB7,0x0A,0x01,0x05,0xB5,0x01,0x1F,0x0D,0x1C,0x7A, + 0x1F,0x09,0x20,0x04,0xEB,0x16,0x0D,0x00,0xAB,0x0E,0x0B,0xFA,0x04,0x02,0x0F,0xFE,0x1A,0x02,0x12,0x65,0x23,0x1C,0xA4,0x3D,0x03,0x4C,0xAF,0x3D,0x0A,0x3F,0xFF,0x1C, + 0x15,0x1E,0x11,0xEC,0x0E,0x13,0x1F,0x1F,0xBE,0x47,0x02,0xEF,0x60,0x12,0x0F,0xFB,0x2C,0x37,0x5C,0x97,0x33,0x0E,0xF9,0x2F,0x00,0x6E,0x12,0x22,0xAE,0x4D,0x01,0x4E, + 0x0F,0x19,0xBF,0x6F,0x2E,0x01,0x0F,0xBB,0x12,0x48,0xBE,0x0F,0x31,0x7B,0x21,0x7F,0xFB,0x40,0x05,0x52,0x95,0x22,0x01,0x2F,0x7E,0x00,0x72,0x06,0xDD,0x0F,0x6A,0xDF, + 0x12,0x0E,0x01,0x00,0x00,0x80, +}; +uint8_t tileset_tile_21_compressed[133] = { + 0x10,0x03,0x10,0x05,0x04,0x05,0x01,0x05,0x04,0x61,0x01,0x06,0x05,0x03,0x1F,0x4B,0xDE,0x00,0x0D,0x0C,0x01,0xF1,0x05,0x04,0x1C,0x1C,0x4B,0xAE,0x11,0x05,0x0E,0xEB, + 0x0F,0x1F,0x07,0x3B,0x1C,0x1F,0x08,0x0D,0xAA,0x21,0x0F,0xF9,0x00,0x22,0x3D,0x0D,0x22,0x0C,0x01,0xFC,0x01,0x02,0x20,0xBF,0x3B,0x01,0x26,0xFF,0x0F,0x1B,0x0F,0x26, + 0x2D,0x0E,0xFC,0x3D,0x1F,0x3F,0xBF,0x1B,0x0E,0x0D,0x6E,0x1E,0x1F,0x0F,0xF9,0x00,0x08,0x56,0x54,0x03,0x0F,0x04,0x9E,0x61,0xBA,0x4F,0x10,0x2E,0xBB,0x39,0x10,0xBE, + 0x01,0x5F,0xEF,0x36,0x0C,0x02,0xFB,0x2E,0x01,0x7F,0x4C,0x39,0x1D,0x03,0xBB,0x0F,0x19,0x95,0x2E,0x03,0x72,0x6F,0xD7,0x0F,0x09,0x00,0x28,0x80,0x5C,0x45,0x92,0x2A, + 0x70,0x00,0x0F,0x00,0x08, +}; +uint8_t tileset_tile_22_compressed[126] = { + 0x10,0x28,0x10,0x4B,0x00,0x03,0x05,0x0F,0x05,0x04,0x01,0x04,0x04,0x00,0xE8,0x04,0x0E,0x1F,0x4B,0xED,0x0D,0x0A,0x01,0xF7,0x05,0x01,0x0F,0x5E,0x1F,0x09,0x20,0x04, + 0xBA,0x16,0x0D,0xEA,0x00,0x0E,0xFE,0x0B,0x04,0x02,0xBF,0x3D,0x1A,0x02,0x12,0x9B,0x23,0x0F,0xF9,0x3D,0x0D,0x2B,0x4C,0x3D,0x0A,0xBF,0x1F,0x15,0x1E,0xFB,0x11,0x0E, + 0x13,0xEF,0x0F,0x47,0x02,0xBB,0x60,0x12,0xAE,0x1F,0x0E,0xEE,0x38,0x12,0xFB,0x1F,0x5D,0x0E,0x92,0x12,0xEA,0x22,0x4D,0xE4,0x01,0x0F,0xEB,0x19,0x6F,0x2E,0xFB,0x01, + 0x0F,0x12,0xBB,0x48,0x0F,0xE7,0x31,0x21,0xBB,0x7F,0x6F,0xB9,0x52,0x52,0x22,0x01,0xF7,0x7E,0x00,0x06,0x2D,0x0F,0xDD,0x6A,0x12,0xF0,0x0E,0x01,0x00,0x08, +}; +uint8_t tileset_tile_23_compressed[122] = { + 0x10,0x03,0x10,0x05,0x04,0x05,0x01,0x05,0x04,0x62,0x01,0x06,0x05,0x03,0x4B,0xAF,0x00,0x0D,0x0C,0x7D,0x01,0x05,0x04,0xF7,0x0E,0x0F,0x0E,0x76,0x0F,0x1F,0x3D,0xFB, + 0x0F,0x08,0x0D,0xAA,0x21,0x0F,0xF9,0x00,0x0F,0x3D,0x0D,0x22,0x0C,0x01,0xFC,0x01,0x02,0x0F,0xBF,0x3B,0x01,0x26,0xDF,0x0F,0x41,0x26,0x2F,0x0E,0x20,0xDC,0x29,0x1F, + 0xB5,0x1B,0x71,0x5C,0x72,0x00,0x97,0x5F,0x0C,0x2D,0x54,0xF3,0x1F,0x0C,0xD7,0x61,0x4F,0x10,0x57,0x2E,0x39,0x77,0x10,0x01,0xDD,0x0F,0x36,0xFF,0x0C,0x02,0x2E,0x01, + 0x73,0x7F,0xFD,0x1D,0x2D,0x02,0xCD,0x7F,0x10,0xCE,0x0D,0x8F,0x17,0x79,0xCA,0x00,0x80,0x12,0x5C,0x2E,0x2A,0x9C,0x00,0x0F,0x00,0x02, +}; +uint8_t tileset_tile_24_compressed[29] = { + 0x10,0x05,0x10,0x07,0x18,0x18,0x14,0xA6,0x00,0x19,0x07,0x54,0x07,0x00,0x65,0x07,0x5A,0x17,0x0B,0x19,0x68,0x07,0xF8,0x2F,0x0B,0xF8,0x3F,0x00,0x04, +}; +uint8_t tileset_tile_25_compressed[27] = { + 0x10,0x05,0x10,0x19,0x18,0x18,0x14,0xCE,0x00,0x07,0x07,0xA8,0x00,0xBB,0x07,0x17,0xB9,0x0B,0xE3,0x07,0xE0,0x2F,0x2F,0xE0,0x3F,0x00,0x10, +}; +uint8_t tileset_tile_26_compressed[27] = { + 0x10,0x05,0x10,0x19,0x18,0x18,0x14,0xCE,0x00,0x07,0x07,0xA8,0x00,0xBB,0x07,0x17,0xB9,0x0B,0xE3,0x07,0xE0,0x2F,0x2F,0xE0,0x3F,0x00,0x10, +}; +uint8_t tileset_tile_27_compressed[33] = { + 0x10,0x05,0x10,0x19,0x18,0x18,0x14,0xCA,0x00,0x07,0x19,0x2A,0x02,0x07,0x00,0xE5,0x0F,0x07,0xEE,0x0F,0x17,0xE6,0x0B,0x07,0x47,0x02,0xC0,0x2F,0x5F,0xC0,0x3F,0x00, + 0x20, +}; +uint8_t tileset_tile_28_compressed[51] = { + 0x10,0x1A,0x10,0x02,0x12,0x00,0x09,0x9A,0x03,0x16,0x00,0x09,0xE0,0x03,0x76,0x0F,0x26,0x0F,0x09,0x00,0x95,0x0F,0x0F,0x1A,0x0F,0x0F,0x87,0x04,0x0F,0x0F,0x07,0x07, + 0x5F,0x0F,0x0B,0x71,0x10,0x15,0x0F,0x0E,0x71,0x10,0x09,0x0F,0x09,0xA6,0x10,0x00,0x80,0x00,0x40, +}; +uint8_t tileset_tile_29_compressed[76] = { + 0x10,0x03,0x10,0x09,0x0F,0x0F,0x09,0x12,0x00,0xB5,0x03,0x07,0xCF,0x00,0x0F,0x77,0x0A,0x00,0x2C,0x0F,0xF3,0x0C,0x44,0x0F,0xDC,0x0D,0x0F,0x55,0x1C,0xC6,0x0F,0xA3, + 0x0E,0x09,0x78,0x0D,0x0E,0xE8,0x00,0xD8,0x1D,0xF2,0x37,0x0A,0x0B,0x2F,0x0E,0x0D,0xE2,0x00,0xB8,0x0E,0x0C,0xCA,0x0F,0x1D,0x45,0x0A,0xD9,0x2D,0x0E,0x12,0x0B,0x17, + 0x1E,0xF1,0x0E,0x03,0x0E,0x76,0x0F,0x00,0xE0,0x41,0x00,0x10, +}; +uint8_t tileset_tile_30_compressed[79] = { + 0x10,0x2D,0x10,0x07,0x00,0x12,0xAC,0x00,0x09,0x03,0x0F,0x0F,0x49,0x09,0x00,0x51,0x12,0x92,0x0F,0x46,0x12,0xD4,0x0F,0x11,0x75,0x0F,0x46,0x22,0xDF,0x0F,0x10,0x04, + 0x1B,0x11,0xC7,0x01,0x47,0x00,0x09,0x20,0x09,0x0B,0x0A,0x62,0x27,0x34,0x0F,0x00,0x0A,0x5A,0x10,0x0B,0xE3,0x00,0x17,0x21,0x0A,0x21,0x3E,0x0F,0x1F,0x12,0xE2,0x10, + 0xFE,0x20,0x0B,0x10,0x2E,0x20,0xD6,0x3D,0x0F,0xA7,0x13,0x40,0x7F,0x00,0x20, +}; +uint8_t tileset_tile_31_compressed[51] = { + 0x10,0x35,0x10,0x16,0x00,0x09,0xBB,0x03,0x12,0x00,0x03,0x40,0x02,0xDE,0x0F,0x09,0x99,0x00,0x0F,0x1E,0x0F,0x0F,0x8F,0x0F,0x43,0x0F,0xC2,0x0F,0x07,0x07,0x0F,0x2E, + 0x0F,0xB8,0x0E,0x00,0x99,0x0F,0x32,0x0E,0x00,0x02,0x07,0x7B,0x00,0x0D,0xD0,0x42,0x02,0x00,0x08, +}; +uint8_t tileset_tile_32_compressed[59] = { + 0x10,0x21,0x10,0x4B,0x62,0x00,0x0E,0x0E,0x26,0x05,0xE7,0x07,0x00,0x8D,0x0D,0xE7,0x00,0x0E,0x8F,0x0F,0x25,0x15,0x15,0x05,0x94,0x0E,0x15,0x08,0xFF,0x00,0x0B,0x00, + 0x05,0x97,0x1D,0x07,0x9E,0x00,0x78,0x1E,0xC8,0x0F,0xAE,0x10,0x3F,0x12,0x0F,0xE1,0x0E,0xDE,0x0F,0x10,0x19,0x4F,0x8E,0x6F,0x80,0x00,0x40, +}; +uint8_t tileset_tile_33_compressed[42] = { + 0x10,0x23,0x10,0x4B,0x89,0x00,0x0E,0x0E,0x67,0x05,0x07,0x82,0xF5,0x00,0x15,0x5D,0x02,0x03,0xDA,0x04,0x06,0x08,0xAE,0x02,0x03,0xEE,0x04,0x06,0x0C,0x90,0x00,0x15, + 0x42,0x1D,0x3A,0x87,0x61,0x41,0xA8,0x1E,0x00,0x04, +}; +uint8_t tileset_tile_34_compressed[52] = { + 0x10,0x23,0x10,0x4B,0x89,0x00,0x0E,0x0E,0xE7,0x05,0x0F,0x9E,0x00,0x3E,0x0F,0x78,0x29,0xD6,0x10,0x15,0x05,0x15,0xB9,0x03,0xDA,0x0F,0x08,0x0D,0x08,0x59,0x03,0x79, + 0x10,0x08,0xE5,0x00,0x21,0x89,0x0F,0x43,0x15,0xB3,0x0F,0xC1,0x3F,0xBC,0x0F,0x2D,0x5F,0x00,0x00,0x80, +}; +uint8_t tileset_tile_35_compressed[96] = { + 0x10,0x2D,0x10,0x00,0x00,0x20,0x25,0x00,0xCA,0x09,0x0D,0x26,0x34,0x2B,0x2B,0x02,0x26,0xD6,0x11,0x0D,0x2B,0x9E,0x10,0x7B,0x0E,0x10,0xED,0x00,0x10,0x20,0x3D,0x0E, + 0x73,0x1F,0x01,0xCE,0x1E,0x1F,0x27,0xD3,0x0F,0x26,0x4F,0x1D,0x0F,0x72,0x0B,0xF2,0x10,0x0B,0xDC,0x1F,0x0B,0xB5,0x0E,0x0F,0xCF,0x05,0x00,0x2D,0x1F,0xAE,0x0F,0x20, + 0x02,0xEE,0x1E,0x0F,0xF9,0x09,0x01,0x8B,0x0E,0x27,0x00,0x11,0xB9,0x0B,0xBE,0x0E,0x0F,0x10,0x6E,0x00,0x09,0xF8,0x0F,0x10,0xA9,0x00,0x42,0xE0,0x2E,0x0D,0x00,0x01, +}; +uint8_t tileset_tile_36_compressed[97] = { + 0x10,0x05,0x10,0x1F,0x03,0x04,0x04,0x78,0x02,0x03,0x00,0x01,0x01,0x04,0xCE,0x02,0x4B,0x4B,0x08,0x7B,0x11,0x13,0xFB,0x0F,0x10,0x0E,0xBB,0x00,0x12,0xBB,0x0F,0x21, + 0x4D,0x04,0x14,0x4B,0x0F,0x1C,0x0A,0x9E,0x03,0xEE,0x0E,0x28,0xEE,0x0B,0x27,0xE6,0x0E,0x4B,0xBB,0x05,0x0F,0x9B,0x0E,0x00,0x47,0x37,0x88,0x0F,0x3C,0x3C,0x03,0xE4, + 0x0F,0x3C,0xF3,0x3F,0x91,0x10,0x4B,0x1F,0x84,0x10,0x37,0x4B,0xD3,0x10,0xAE,0x11,0x4B,0x10,0x2B,0x11,0x0E,0x96,0x11,0xE6,0x12,0xAF,0x09,0x27,0x11,0x12,0x80,0x00, + 0x40, +}; +uint8_t tileset_tile_37_compressed[97] = { + 0x10,0x0D,0x10,0x01,0x01,0x04,0x02,0x03,0xBF,0x00,0x04,0x00,0x03,0x02,0x5C,0x4B,0x0B,0x46,0x0D,0x0E,0x4B,0x96,0x0C,0xF3,0x00,0x07,0x03,0x1F,0x0F,0x9A,0x0A,0xED, + 0x04,0x1E,0x4B,0x73,0x0C,0xA5,0x03,0x1C,0x0F,0xB9,0x39,0x2E,0x05,0x10,0xD3,0x26,0x04,0xF6,0x53,0x10,0x0F,0x37,0x92,0x0E,0x61,0x20,0x03,0x3C,0x3C,0x18,0x0F,0x3C, + 0x8F,0x0F,0x8B,0x0E,0xA4,0x0F,0x37,0x66,0x0E,0x90,0x11,0x56,0x0D,0x0E,0x4B,0x8A,0x0D,0xB9,0x0E,0x42,0xAF,0xEE,0x0C,0x0D,0x6B,0x0F,0x0C,0x97,0x0D,0x00,0x80,0x00, + 0x40, +}; +uint8_t tileset_tile_38_compressed[110] = { + 0x10,0x05,0x10,0x1F,0x03,0x04,0x04,0x78,0x02,0x03,0x00,0x01,0x01,0x04,0xCE,0x02,0x4B,0x4B,0x08,0x7B,0x11,0x13,0xFB,0x0F,0x10,0x0E,0xBB,0x00,0x12,0xBB,0x0F,0x21, + 0x95,0x23,0x04,0x6B,0x0F,0x1C,0x0A,0x99,0x32,0x05,0x77,0x0E,0x08,0x75,0x0F,0x05,0xF3,0x0F,0x0E,0xFD,0x4B,0x05,0x4E,0xCD,0x0F,0x0E,0x68,0x30,0x05,0x9B,0x0F,0x0C, + 0x45,0x01,0xE1,0x0F,0x8B,0x11,0x0F,0x72,0x10,0xCD,0x1E,0x5F,0xD5,0x00,0x1C,0xF2,0x0E,0x0F,0xAE,0x10,0x01,0x11,0x6D,0x0F,0x10,0x03,0xCD,0x07,0x0E,0x4A,0x0F,0x1F, + 0x11,0x92,0x1D,0x7C,0x2F,0xC0,0x2B,0x09,0x4E,0xEE,0x01,0x00,0x00,0x01, +}; +uint8_t tileset_tile_39_compressed[115] = { + 0x10,0x0D,0x10,0x01,0x01,0x04,0x02,0x03,0xBF,0x00,0x04,0x00,0x03,0x02,0x5C,0x4B,0x0B,0x46,0x0D,0x0E,0x4B,0x96,0x0C,0xF2,0x00,0x07,0x03,0x1F,0xA5,0x0F,0x0A,0xBB, + 0x04,0x1E,0x27,0x4B,0x05,0x2C,0xA5,0x03,0x1C,0xD5,0x0F,0x17,0xDD,0x0B,0x05,0xBB,0x10,0x05,0x50,0x0C,0x9B,0x46,0x10,0xEE,0x0F,0x2A,0x7B,0x10,0x0F,0x34,0x01,0x05, + 0x33,0x04,0x5D,0x0F,0x45,0x00,0xDA,0x0F,0x21,0x04,0x26,0x3F,0xEA,0x00,0x13,0x64,0x0E,0x4B,0xBD,0x0E,0x0A,0x98,0x10,0x1C,0x1F,0xA0,0x4B,0x1D,0xD7,0x40,0x21,0x1D, + 0xCD,0x0F,0x1F,0x22,0x75,0x4B,0xE5,0x00,0x2E,0xAA,0x01,0xF5,0x06,0x3B,0x0E,0x1F,0x80,0x00,0x40, +}; +uint8_t tileset_tile_40_compressed[55] = { + 0x10,0x1A,0x10,0x07,0x18,0x00,0x14,0x93,0x00,0x19,0x3B,0x07,0x07,0x00,0x12,0x45,0x18,0xD2,0x07,0x00,0x02,0x7B,0x07,0x00,0x8B,0x07,0x23,0x00,0x02,0x5A,0x00,0x00, + 0x10,0x07,0x2E,0x00,0x08,0x83,0x0F,0x30,0x2A,0x15,0x2A,0x87,0x02,0x30,0x15,0x90,0x00,0x21,0x38,0x40,0x0F,0x00,0x20, +}; +uint8_t tileset_tile_41_compressed[55] = { + 0x10,0x1A,0x10,0x19,0x18,0x00,0x14,0xA7,0x00,0x07,0x57,0x07,0x00,0x09,0xC5,0x00,0xD2,0x07,0x00,0x02,0x7B,0x07,0x00,0x8F,0x07,0x8B,0x00,0x41,0x07,0x71,0x00,0x10, + 0x15,0x1B,0x00,0x05,0xF0,0x0F,0x80,0x80,0x23,0x10,0x34,0x00,0x0F,0x32,0x65,0x00,0xC4,0x0F,0xD4,0x7C,0x0F,0x00,0x02, +}; +uint8_t tileset_tile_42_compressed[65] = { + 0x10,0x1A,0x10,0x19,0x18,0x00,0x14,0xA7,0x00,0x07,0x57,0x07,0x00,0x09,0xC5,0x00,0xD2,0x07,0x00,0x02,0x7B,0x07,0x00,0x8F,0x07,0x8B,0x00,0x41,0x07,0x72,0x00,0x15, + 0x38,0x00,0x4A,0x24,0x8E,0x00,0x8D,0x5E,0xA5,0x0F,0x2E,0xA6,0x00,0x02,0x06,0x82,0x35,0x0F,0x34,0x76,0x01,0x0F,0x05,0x34,0xB9,0x0F,0x66,0x08,0x16,0x40,0x24,0x00, + 0x20, +}; +uint8_t tileset_tile_43_compressed[56] = { + 0x10,0x1A,0x10,0x19,0x18,0x00,0x14,0xA5,0x00,0x07,0x15,0x19,0x02,0x07,0x00,0xF2,0x09,0x00,0xAE,0x07,0x14,0x0F,0xE2,0x00,0x2E,0x07,0x00,0x3E,0x07,0x28,0x00,0x10, + 0x07,0x8B,0x00,0xE0,0x0E,0x84,0x0F,0x30,0x15,0xA0,0x00,0x21,0x07,0x10,0x2A,0x10,0x15,0x2A,0x10,0x39,0x40,0x0F,0x00,0x20, +}; +uint8_t tileset_tile_44_compressed[79] = { + 0x10,0x05,0x10,0x02,0x07,0x09,0x0F,0xA6,0x00,0x07,0x00,0x4C,0x02,0x10,0x09,0x99,0x00,0x02,0x71,0x21,0x6B,0x0F,0x17,0x10,0x8A,0x0F,0x4B,0x0B,0x10,0x10,0x0F,0x1B, + 0x96,0x10,0x26,0x3F,0x59,0x10,0xF9,0x00,0x3F,0x67,0x10,0x00,0xD7,0x0F,0x1B,0x10,0x14,0x1F,0x1B,0x8C,0x10,0xBA,0x0F,0x10,0x4F,0x17,0x00,0x26,0x0F,0x10,0x17,0x4D, + 0x0A,0x00,0x2F,0x0F,0x10,0x3C,0x00,0xD1,0x0F,0xF0,0x1F,0xC4,0x0F,0x00,0x02, +}; +uint8_t tileset_tile_45_compressed[62] = { + 0x10,0x25,0x10,0x07,0x00,0x48,0x09,0x00,0x0A,0xE5,0x00,0x08,0x4A,0x07,0x0B,0x12,0x8A,0x0F,0x99,0x10,0x09,0x17,0x20,0x71,0x0D,0x9C,0x20,0x00,0x7C,0x10,0xD2,0x5F, + 0xB4,0x62,0x0F,0x0F,0x02,0x72,0x00,0x07,0x1E,0x00,0x47,0x17,0x23,0x00,0x0A,0x91,0x00,0x10,0xC4,0x00,0x02,0x1A,0x62,0x00,0x02,0x1F,0x0F,0x80,0x00,0x40, +}; +uint8_t tileset_tile_46_compressed[74] = { + 0x10,0x34,0x10,0x0A,0x00,0x09,0x89,0x00,0x07,0x72,0x00,0x0E,0x12,0x09,0xF9,0x13,0x0F,0x67,0x16,0x0E,0x9E,0x0F,0xA2,0x11,0xEE,0x1E,0x0D,0x33,0x1E,0x0C,0x8F,0x2D, + 0x44,0x0F,0xD2,0x5C,0x00,0x02,0x39,0x00,0x07,0x0F,0x23,0x00,0x17,0x91,0x00,0x0A,0xC9,0x00,0x10,0x82,0x00,0x02,0x0B,0x0B,0x1B,0xE7,0x00,0x17,0x4D,0x02,0x17,0x3A, + 0x0F,0x1B,0x68,0x4F,0x89,0x0F,0xA0,0x00,0x00,0x10, +}; +uint8_t tileset_tile_47_compressed[93] = { + 0x10,0x26,0x10,0x07,0x00,0x58,0x0F,0x00,0x09,0x07,0x02,0x4D,0x09,0x00,0x34,0x0E,0x5D,0x0F,0x22,0x0E,0x10,0xAD,0x0F,0x0E,0x17,0x13,0x0F,0x22,0x0E,0x0B,0x22,0x0F, + 0x52,0x0E,0x1B,0x02,0x79,0x5F,0x79,0x0E,0x3F,0xE5,0x00,0x0E,0x44,0x17,0xDB,0x1F,0x0E,0x1B,0x0F,0x8C,0x0E,0xA4,0x0F,0x17,0xF7,0x00,0x0E,0x49,0x0F,0x0A,0x97,0x00, + 0x17,0x0E,0x56,0x0F,0x05,0x1B,0x77,0x0B,0x77,0x0E,0x69,0x0F,0x10,0x79,0x00,0x37,0xA6,0x0F,0x4E,0x4E,0x1B,0x0F,0x1B,0x9A,0x00,0x78,0x0F,0x00,0x04, +}; +uint8_t tileset_tile_48_compressed[47] = { + 0x10,0x14,0x10,0x4B,0x0E,0x00,0x15,0x44,0x08,0x42,0x00,0x11,0x0F,0x28,0x10,0x15,0xE8,0x0F,0xD9,0x1F,0x11,0x12,0x3A,0xF1,0x1F,0xA8,0x4F,0x3A,0xF8,0x5F,0x5A,0x0F, + 0x3E,0x5F,0x3F,0x0F,0x0E,0x87,0x78,0x0F,0x10,0x66,0x4F,0x3A,0x6F,0x00,0x01, +}; +uint8_t tileset_tile_49_compressed[20] = { + 0x10,0x20,0x10,0x08,0xA5,0x00,0x15,0x04,0x28,0x1D,0x3A,0x76,0x41,0x1E,0x1E,0x81,0xCE,0x77,0x00,0x01, +}; +uint8_t tileset_tile_50_compressed[45] = { + 0x10,0x22,0x10,0x08,0x0A,0x00,0x15,0x0E,0x00,0x46,0x4B,0xC7,0x0E,0x91,0x0F,0x4B,0x4B,0xB0,0x2F,0xD4,0x0F,0x7C,0x2F,0x7F,0x4F,0x10,0x04,0xE8,0x0F,0x15,0x67,0x4F, + 0x0F,0x95,0x1D,0x3A,0x0C,0xCD,0x1F,0x1E,0x0B,0xC0,0x5F,0x00,0x20, +}; +uint8_t tileset_tile_51_compressed[96] = { + 0x10,0x20,0x10,0x00,0x91,0x00,0x20,0xC6,0x00,0x9C,0x0D,0x2B,0x2B,0x03,0x66,0x0E,0x00,0x26,0x98,0x10,0x20,0x26,0xEF,0x1B,0x0E,0x0F,0x4D,0x27,0x1E,0x55,0x0C,0x01, + 0xAF,0x0E,0x26,0x10,0x1E,0xEC,0x07,0x3D,0x27,0x27,0xEF,0x03,0x0F,0x06,0xEF,0x01,0x1E,0x2E,0x97,0x31,0x1D,0xEF,0x1C,0x10,0x07,0xFB,0x00,0x23,0x1F,0xBA,0x4F,0x1A, + 0xA9,0x38,0x2A,0x1F,0x6E,0xBB,0x03,0x1C,0x08,0x97,0x0F,0x26,0xE3,0x0E,0x2E,0x50,0x1A,0xAE,0x05,0x3E,0xD7,0x10,0x27,0x10,0x3C,0x0D,0xF3,0x12,0x40,0x0D,0x00,0x20, +}; +uint8_t tileset_tile_52_compressed[96] = { + 0x10,0x25,0x10,0x00,0x00,0x39,0x29,0x29,0x03,0xEC,0x0A,0x00,0x36,0x36,0xBB,0x05,0x14,0x7A,0x33,0x0A,0x00,0x2C,0x4A,0x02,0x14,0x9B,0x0F,0x0D,0xE7,0x0E,0x0F,0x45, + 0x2C,0x48,0x00,0x0F,0x28,0x88,0x00,0x94,0x0F,0x33,0x28,0x5D,0x33,0x0C,0x4D,0x06,0x0F,0x76,0x09,0x15,0x33,0x85,0x7E,0x2F,0x06,0x02,0xF8,0x04,0x03,0x4F,0x1F,0x9F, + 0x08,0xA9,0x00,0x40,0xB1,0x35,0x35,0xFD,0x24,0x1A,0x05,0x00,0x3E,0x0E,0x0F,0x36,0xBE,0x0F,0x10,0x77,0x0F,0x35,0x2A,0xC5,0x03,0xA7,0x20,0x35,0x0E,0x80,0x00,0x40, +}; +uint8_t tileset_tile_53_compressed[72] = { + 0x10,0x20,0x10,0x00,0x44,0x00,0x54,0x37,0x00,0x5A,0x0E,0x09,0x91,0x00,0x37,0x41,0x0E,0x1B,0x09,0x41,0x41,0x11,0x10,0xFC,0x0E,0x0B,0x0E,0x4F,0x10,0x0F,0xF1,0x0B, + 0x3E,0x2C,0x0F,0x42,0x0B,0x37,0x1B,0x52,0x35,0x04,0x42,0x66,0x0F,0x43,0x1D,0x35,0xCE,0x0F,0x37,0x43,0x0F,0x76,0x10,0x1B,0x0D,0x1B,0x9E,0x0E,0x58,0x10,0xBA,0x0E, + 0x10,0xA8,0x00,0x25,0xB9,0x08,0x00,0x04, +}; +uint8_t tileset_tile_54_compressed[45] = { + 0x10,0x20,0x10,0x00,0x28,0x84,0x00,0x04,0x04,0x01,0x93,0x02,0x9A,0x0D,0x05,0x05,0x0D,0x01,0xEF,0x05,0x11,0x07,0x57,0x01,0x01,0x00,0x7F,0x06,0x11,0x0E,0xC5,0x04, + 0x5C,0x00,0x25,0x57,0x10,0x0A,0xC6,0x21,0xA0,0x0F,0x04,0x00,0x10, +}; +uint8_t tileset_tile_55_compressed[89] = { + 0x10,0x02,0x10,0x00,0x38,0x43,0x38,0x00,0x6B,0x00,0x0A,0x23,0x38,0x40,0x04,0x00,0x38,0x38,0x2F,0x65,0x00,0x0F,0x0F,0x44,0x44,0x48,0x07,0x05,0x96,0x03,0xE4,0x0F, + 0x01,0xFE,0x00,0x15,0x06,0xE4,0x0F,0x1D,0xBB,0x0C,0x05,0x84,0x8E,0x3F,0x46,0x09,0x00,0x4D,0x03,0x04,0x46,0x0A,0x2B,0x1F,0x2F,0x17,0x1E,0xAE,0x07,0x20,0x12,0x1F, + 0x8E,0x00,0x5C,0x10,0x03,0xD2,0x00,0x61,0x0A,0xC4,0x13,0x0F,0xC7,0x0A,0x87,0xDF,0x04,0xA7,0x15,0x10,0x0F,0xB8,0x0A,0x00,0x04, +}; +uint8_t tileset_tile_56_compressed[48] = { + 0x10,0x00,0x10,0x00,0x00,0x02,0x30,0x2A,0x15,0x2A,0x0A,0x10,0x07,0x30,0x15,0x00,0x20,0x21,0x07,0x20,0xE9,0x0F,0x08,0x07,0x16,0x0F,0x21,0xF7,0x00,0x0F,0x2A,0x04, + 0xC5,0x00,0x20,0x0F,0x15,0xDC,0x0F,0x10,0x02,0xB9,0x00,0x78,0x05,0x06,0x00,0x04, +}; +uint8_t tileset_tile_57_compressed[59] = { + 0x10,0x02,0x10,0x02,0x32,0x32,0x07,0x34,0x66,0x00,0x07,0x0B,0x02,0xB4,0x0F,0x2E,0xD0,0x00,0x4F,0x0F,0x3C,0x00,0xD1,0x0F,0x7E,0x00,0x0F,0x15,0x24,0x44,0x32,0xE4, + 0x01,0x0E,0x30,0x15,0x5E,0x10,0x0F,0x15,0xA8,0x0F,0x99,0x00,0x23,0x2F,0x38,0x0F,0x03,0x3D,0x0F,0x8E,0x00,0x47,0x10,0x40,0x00,0x00,0x20, +}; +uint8_t tileset_tile_58_compressed[53] = { + 0x10,0x05,0x10,0x24,0x02,0x2E,0x34,0x16,0x01,0x02,0x02,0x05,0x34,0x38,0x02,0x24,0x0F,0xCF,0x00,0x0F,0x18,0xB4,0x00,0x02,0xD0,0x06,0x45,0x0F,0x1A,0x3F,0x15,0x46, + 0x24,0x23,0x00,0x15,0xD1,0x00,0x2A,0xC8,0x00,0x21,0x13,0x91,0x00,0x02,0xC8,0x00,0x10,0xE8,0x00,0x00,0x04, +}; +uint8_t tileset_tile_59_compressed[46] = { + 0x10,0x0A,0x10,0x07,0x30,0x15,0x00,0x00,0x21,0x07,0x10,0x2A,0x15,0x2A,0x10,0x02,0x81,0xF5,0x0F,0x07,0x17,0x0F,0x52,0x05,0x17,0x0F,0x2A,0x21,0x00,0xDD,0x0F,0x04, + 0xA0,0x0F,0x15,0xF7,0x0F,0x73,0x92,0x00,0x5A,0x06,0x0E,0x80,0x00,0x40, +}; +uint8_t tileset_tile_60_compressed[72] = { + 0x10,0x0B,0x10,0x02,0x17,0x1B,0x00,0x26,0x17,0x0A,0x00,0x82,0x02,0x0F,0x0B,0x17,0x3B,0x0F,0x10,0x8E,0x0F,0xE2,0x10,0xD7,0x0F,0x0A,0x10,0x17,0x0F,0x24,0x10,0x42, + 0x0F,0x10,0x64,0x10,0x02,0xC9,0x00,0x10,0x62,0x10,0x12,0x1F,0x00,0xC4,0x10,0xCB,0x0F,0x10,0x15,0x0F,0x7C,0x10,0x0F,0xE9,0x00,0x00,0x63,0x10,0x2E,0x0F,0x10,0x74, + 0x00,0x00,0xD3,0x10,0xC0,0x00,0x00,0x20, +}; +uint8_t tileset_tile_61_compressed[33] = { + 0x10,0x11,0x10,0x02,0x1A,0x88,0x00,0x02,0x1C,0x11,0x0F,0x17,0x90,0x00,0x8A,0x0F,0x0A,0x32,0x00,0x11,0x0F,0x46,0x0B,0x21,0x00,0x02,0xF4,0x00,0x10,0x74,0x00,0x00, + 0x02, +}; +uint8_t tileset_tile_62_compressed[58] = { + 0x10,0x26,0x10,0x0A,0x00,0x18,0x1B,0x16,0x0F,0x00,0x16,0x1B,0x1B,0x88,0x0F,0xEE,0x0D,0x02,0x18,0x0F,0x29,0x0B,0x09,0x00,0x0B,0xC5,0x05,0x71,0x0F,0x0D,0x73,0x0F, + 0x44,0x00,0xFC,0x0F,0x20,0x02,0x22,0x1F,0x02,0x8E,0x00,0x41,0x0A,0x72,0x00,0x17,0x1E,0x00,0x8F,0x5F,0x47,0x10,0x40,0x00,0x00,0x20, +}; +uint8_t tileset_tile_63_compressed[107] = { + 0x10,0x06,0x10,0x1B,0x1B,0x16,0x0F,0x00,0x16,0x16,0x1B,0x17,0x1B,0x00,0x17,0x76,0x02,0x03,0x0D,0x1B,0x8C,0x0F,0x45,0x1B,0x01,0x0F,0x09,0x0B,0x09,0x09,0x16,0x0B, + 0xDE,0x00,0x0F,0x0E,0x0B,0xA2,0x0F,0x16,0x09,0xEF,0x11,0x0F,0x0E,0xD3,0x0F,0x0B,0x77,0x00,0x0F,0x0E,0x77,0x1F,0x31,0x76,0x0F,0x0E,0x0A,0x89,0x1F,0x93,0x0E,0x0F, + 0x9E,0x00,0x62,0x0E,0x10,0x0A,0x64,0x00,0x17,0xB1,0x0E,0x52,0x0F,0x22,0x0E,0x00,0x25,0x0F,0x0E,0x27,0x00,0x17,0x00,0x96,0x0E,0x26,0x0F,0x54,0x0E,0x00,0xF3,0x5F, + 0x13,0x0E,0x00,0x10,0xCA,0x00,0x0E,0x00,0x80,0x00,0x40, +}; +uint8_t tileset_tile_64_compressed[53] = { + 0x10,0x14,0x10,0x4B,0x0E,0x00,0x15,0x44,0x08,0x42,0x00,0x13,0x0F,0xC1,0x10,0xBC,0x0F,0x3F,0x5F,0x68,0x0F,0x0E,0x49,0x6F,0x15,0x2F,0x03,0x0F,0x2A,0x21,0x15,0xAE, + 0x02,0x03,0x79,0x0F,0xFE,0x00,0x0E,0x00,0x3F,0x0F,0x00,0x8F,0x0F,0xB9,0x11,0xE3,0x05,0x60,0x00,0x00,0x10, +}; +uint8_t tileset_tile_65_compressed[44] = { + 0x10,0x20,0x10,0x08,0xA5,0x00,0x15,0x04,0x28,0x1D,0x3A,0x75,0x41,0x3A,0x04,0x95,0x66,0x00,0x24,0x06,0x9A,0x03,0x02,0x0E,0x97,0x00,0x15,0x06,0x7C,0x03,0x02,0x18, + 0x2A,0x00,0x4B,0x00,0x25,0x07,0x4B,0x1D,0x00,0x00,0x00,0x80, +}; +uint8_t tileset_tile_66_compressed[59] = { + 0x10,0x22,0x10,0x08,0x0A,0x00,0x15,0x0E,0x00,0x46,0x4B,0xC7,0x0E,0x91,0x0F,0x4B,0x4B,0xB0,0x2F,0xD4,0x0F,0x7C,0x2F,0x7C,0x4F,0x7A,0x6F,0x08,0x75,0x1F,0x15,0x44, + 0x00,0xF6,0x3F,0x0B,0x07,0x15,0x9B,0x3D,0x00,0x45,0x0E,0xC7,0x00,0x7C,0x0F,0x0D,0x00,0x6D,0x0D,0xCF,0x0F,0x05,0x0A,0xC0,0x00,0x00,0x20, +}; +uint8_t tileset_tile_67_compressed[44] = { + 0x10,0x19,0x10,0x4B,0x0E,0x00,0x15,0x08,0x12,0x00,0x0E,0x86,0x64,0x0F,0x06,0x8E,0x1E,0xD6,0x14,0x15,0x0E,0x3A,0x9B,0x1D,0x07,0x84,0x62,0x00,0xB8,0x2E,0x1E,0x33, + 0x00,0x43,0x15,0xF0,0x1D,0xFC,0x58,0x37,0x1E,0x00,0x00,0x80, +}; +uint8_t tileset_tile_68_compressed[40] = { + 0x10,0x22,0x10,0x08,0x4D,0x00,0x15,0x0E,0x00,0x4B,0x1C,0x0F,0x0E,0x86,0xB8,0x0F,0x10,0xB5,0x0F,0x3A,0xE8,0x10,0x00,0x08,0x6F,0x00,0x1D,0x83,0x38,0x00,0x22,0x53, + 0x43,0x3A,0xB0,0x41,0xD4,0x1E,0x00,0x02, +}; +uint8_t tileset_tile_69_compressed[112] = { + 0x10,0x22,0x10,0x4B,0x59,0x00,0x04,0x00,0x05,0x04,0x12,0x0D,0x03,0x34,0x03,0x05,0x0E,0x05,0x49,0x0F,0x05,0x01,0xF2,0x0E,0x03,0x28,0x0B,0x1F,0x2B,0x01,0x01,0xE4, + 0x02,0x0F,0xFE,0x0C,0x02,0x08,0xAB,0x1D,0x03,0x12,0xBF,0x1D,0x02,0x1C,0xBF,0x0E,0x0F,0x00,0x9A,0x4B,0xEA,0x0D,0x4E,0xEE,0x1F,0x4A,0x5A,0x00,0x42,0xA4,0x6F,0x1C, + 0x9D,0x1D,0x0B,0xD9,0x2D,0x2F,0x1C,0x03,0xDD,0x0A,0x49,0xF7,0x52,0x31,0x3C,0x72,0x17,0xF3,0x50,0x00,0x27,0x0F,0x05,0x00,0xAA,0x7B,0x2F,0x8C,0x0F,0x90,0xB9,0x27, + 0x00,0x5D,0x1F,0x1F,0xCF,0x4C,0x0F,0xD8,0x5E,0xB8,0x4D,0x7F,0xC0,0x03,0x00,0x20, +}; +uint8_t tileset_tile_70_compressed[84] = { + 0x10,0x11,0x10,0x01,0x05,0x8E,0x00,0x01,0x00,0xA6,0x04,0x0B,0x9A,0x0E,0xF9,0x06,0x03,0xE3,0x09,0xF8,0x2F,0x00,0xD8,0x0D,0xBA,0x27,0x0C,0x49,0x04,0x11,0x3F,0x04, + 0x0E,0x2C,0x10,0xF5,0x00,0x0E,0x3C,0x11,0xEF,0x0D,0x03,0x03,0x09,0x98,0x02,0x04,0x03,0xBD,0x03,0x11,0x03,0x75,0x0C,0x06,0x4B,0x1B,0x05,0x11,0xAA,0x17,0x27,0xBF, + 0x29,0x63,0x0F,0xB9,0x30,0x6E,0x03,0x0F,0xE5,0x48,0x7F,0x8D,0x8B,0x09,0xA3,0x07,0xC2,0xBF,0x00,0x01, +}; +uint8_t tileset_tile_71_compressed[102] = { + 0x10,0x0D,0x10,0x04,0x05,0x04,0x00,0x4B,0x13,0x00,0x84,0x0E,0x05,0x05,0x03,0x03,0x4A,0x11,0x01,0xB8,0x10,0x03,0xC7,0x0F,0x01,0x01,0xCF,0x02,0x11,0x5D,0x0C,0x30, + 0x4F,0x21,0x22,0xDF,0x1A,0x0F,0x10,0xCF,0x00,0x1F,0x57,0x50,0x00,0x37,0x53,0x0E,0x2A,0x20,0x05,0x6E,0x31,0x0D,0xE4,0x31,0x13,0xD5,0x21,0x1C,0x1F,0x25,0x4C,0xEA, + 0x55,0x04,0x03,0x0F,0x96,0x2A,0xFE,0x24,0x00,0x20,0x7B,0x0F,0x12,0x8F,0x0F,0xF4,0x01,0x0F,0x1F,0x4D,0x0F,0x84,0xC5,0x5F,0x0F,0x52,0x6B,0x1F,0x1F,0x38,0x96,0x7D, + 0xC8,0x10,0x1C,0x1F,0x00,0x04, +}; +uint8_t tileset_tile_72_compressed[46] = { + 0x10,0x20,0x10,0x00,0x21,0x49,0x00,0x0C,0x07,0xA6,0x00,0x0E,0x55,0x11,0x00,0xA7,0x04,0x0C,0x0E,0x8B,0x0F,0xA4,0x08,0x22,0x53,0x0F,0x0C,0x08,0x45,0x22,0x64,0x0F, + 0x06,0x0C,0x22,0x57,0x0F,0x05,0x19,0x0F,0x71,0x3B,0x70,0x0F,0x00,0x08, +}; +uint8_t tileset_tile_73_compressed[18] = { + 0x10,0x20,0x10,0x00,0x7E,0x00,0x47,0x07,0x34,0x00,0x11,0x00,0x0C,0x0D,0x70,0x03,0x00,0x08, +}; +uint8_t tileset_tile_74_compressed[18] = { + 0x10,0x20,0x10,0x00,0x7E,0x00,0x47,0x07,0x34,0x00,0x11,0x00,0x0C,0x0D,0x70,0x03,0x00,0x08, +}; +uint8_t tileset_tile_75_compressed[41] = { + 0x10,0x20,0x10,0x00,0x7E,0x00,0x4C,0x07,0x00,0x0C,0x99,0x0F,0x11,0xAC,0x00,0x0C,0x03,0x22,0x0C,0x8E,0x0F,0xE3,0x10,0xB8,0x0F,0x10,0xF4,0x0F,0x0C,0x77,0x0F,0x01, + 0x1D,0x0F,0xC7,0x02,0x70,0x0F,0x03,0x00,0x08, +}; +uint8_t tileset_tile_76_compressed[79] = { + 0x10,0x11,0x10,0x00,0x10,0xA2,0x00,0x02,0x16,0x0F,0x33,0x00,0x0F,0x2C,0x16,0x12,0x00,0x09,0x12,0x97,0x00,0x0F,0x94,0x20,0x09,0x09,0x96,0x06,0x6F,0x1F,0x1E,0x02, + 0xB9,0x0E,0xE4,0x1F,0x0C,0xB8,0x23,0xAB,0x1F,0x06,0x85,0xE1,0x3F,0x18,0x5F,0x94,0x7F,0x07,0x5E,0x00,0x0F,0x07,0xD2,0x1B,0x16,0xA8,0x00,0x0F,0x03,0x02,0x0F,0x84, + 0xA6,0x0F,0x4B,0x5F,0x0F,0x4F,0x0F,0x1B,0x3F,0xC6,0x1D,0x40,0x0F,0x00,0x20, +}; +uint8_t tileset_tile_77_compressed[59] = { + 0x10,0x84,0x11,0x00,0x0F,0xC4,0x00,0x09,0x12,0xB1,0x00,0x09,0x07,0x09,0x67,0x16,0x07,0xA9,0x11,0xA5,0x25,0x07,0x8B,0x1B,0xBB,0x07,0x39,0x8B,0x03,0x8F,0x3F,0x84, + 0x27,0x5F,0x77,0x99,0x07,0x07,0x1C,0x00,0x16,0xA5,0x00,0x0F,0xC2,0x04,0xD7,0x07,0x43,0xF3,0x74,0x00,0xA1,0x07,0x07,0xE8,0x00,0x00,0x04, +}; +uint8_t tileset_tile_78_compressed[59] = { + 0x10,0x84,0x11,0x00,0x0F,0xC4,0x00,0x09,0x12,0xB1,0x00,0x09,0x07,0x09,0x67,0x16,0x07,0xA9,0x11,0xA5,0x25,0x07,0x8B,0x1B,0xBB,0x07,0x39,0x8B,0x03,0x8F,0x3F,0x84, + 0x27,0x5F,0x77,0x99,0x07,0x07,0x1C,0x00,0x16,0xA5,0x00,0x0F,0xC2,0x04,0xD7,0x07,0x43,0xF3,0x74,0x00,0xA1,0x07,0x07,0xE8,0x00,0x00,0x04, +}; +uint8_t tileset_tile_79_compressed[77] = { + 0x10,0x8F,0x00,0x23,0x00,0x0F,0x02,0x00,0x09,0x02,0x09,0x12,0x5B,0x00,0x07,0xFE,0x04,0x0F,0x02,0x59,0x18,0x2A,0x06,0x0F,0xAE,0x14,0x08,0x5A,0x20,0x0F,0x92,0x15, + 0x49,0x12,0xEE,0x1F,0x18,0xE1,0x1F,0x58,0x3F,0x42,0x5F,0x79,0x79,0x91,0x1F,0x07,0x74,0x00,0x0F,0x16,0xA5,0x00,0x0F,0xFA,0x04,0x00,0x22,0x07,0x3C,0x0F,0x07,0x02, + 0xB4,0x46,0x0F,0xD7,0x52,0x0F,0x19,0x3F,0x09,0x40,0x0F,0x00,0x20, +}; +uint8_t tileset_tile_80_compressed[74] = { + 0x10,0x20,0x10,0x4B,0x85,0x00,0x0D,0x72,0x00,0x4C,0x05,0x0E,0x0B,0xA9,0x00,0x6E,0x04,0x12,0xE7,0x09,0x0F,0xE1,0x02,0x8B,0x0F,0x00,0x89,0x0F,0x24,0x0D,0x13,0x00, + 0xE6,0x11,0x5F,0xD2,0x09,0x06,0xCB,0x00,0x1F,0x91,0x0F,0x06,0x0D,0xDC,0x0F,0x10,0x71,0x0F,0x06,0x13,0x1F,0x0F,0x73,0x04,0xDF,0x4F,0x1E,0x02,0xA6,0x01,0x4B,0x20, + 0x97,0x3E,0x04,0x9E,0x0F,0x64,0x5E,0x0D,0x00,0x02, +}; +uint8_t tileset_tile_81_compressed[68] = { + 0x10,0x21,0x10,0x4B,0xF5,0x00,0x0D,0x4F,0x00,0x08,0x6A,0x00,0x0B,0x00,0x89,0x09,0x4B,0x13,0x0F,0x70,0x04,0xB4,0x0F,0x6A,0x34,0x13,0x59,0x00,0x15,0x0B,0x06,0x00, + 0xCB,0x04,0x12,0x73,0x0D,0x5D,0x00,0x10,0x46,0x0D,0x71,0x10,0x04,0x92,0x10,0xDC,0x06,0x15,0x5F,0x18,0x26,0x18,0x16,0x13,0xB4,0x02,0x13,0x6D,0x25,0x46,0x6E,0xA0, + 0x34,0x0D,0x00,0x10, +}; +uint8_t tileset_tile_82_compressed[74] = { + 0x10,0x20,0x10,0x4B,0x85,0x00,0x0D,0x57,0x00,0x04,0xCA,0x00,0x0C,0x0B,0xA9,0x00,0x6A,0x04,0x10,0x7B,0x0A,0x04,0x42,0x0B,0xB2,0x0F,0x4F,0x00,0x0F,0xA4,0x09,0x13, + 0x00,0x4E,0x0D,0x0F,0x06,0x95,0x00,0x13,0x31,0x5F,0x06,0x0D,0x3C,0x0F,0xBA,0x1F,0x09,0x0D,0x3B,0x0F,0x0A,0x8F,0x0F,0x46,0x13,0x2D,0x0F,0x13,0x02,0x13,0x1B,0x4F, + 0xCD,0x04,0x1E,0x3A,0x6F,0x0D,0x78,0x0F,0x00,0x04, +}; +uint8_t tileset_tile_83_compressed[35] = { + 0x10,0x20,0x10,0x08,0xA5,0x00,0x15,0x04,0x28,0x1D,0x3A,0x75,0x41,0x3A,0x02,0x17,0x66,0x00,0x18,0x48,0x0E,0xE3,0x00,0x17,0x30,0x0E,0x10,0x0D,0x23,0x0F,0x4B,0xA0, + 0x0F,0x00,0x10, +}; +uint8_t tileset_tile_84_compressed[41] = { + 0x10,0x20,0x10,0x08,0xA5,0x00,0x15,0x04,0x28,0x1D,0x3A,0x76,0x41,0x78,0x1E,0x2D,0x71,0x43,0x15,0x0E,0x4B,0x15,0x00,0x2C,0x77,0x15,0x0E,0xE2,0x00,0xD7,0x3D,0x0E, + 0x0F,0x1B,0x1E,0x1E,0x1F,0x4B,0x80,0x00,0x40, +}; +uint8_t tileset_tile_85_compressed[122] = { + 0x10,0x00,0x10,0x1C,0x1C,0x03,0x01,0x01,0x04,0x04,0x3E,0x01,0x05,0x00,0x07,0xAB,0x09,0x0E,0x08,0xFE,0x0E,0x01,0x00,0xEE,0x11,0x0F,0xFB,0x10,0x00,0x0F,0xFF,0x07, + 0x0F,0x02,0x06,0xBB,0x08,0x11,0x3B,0x04,0x03,0x0F,0x18,0xBB,0x38,0x00,0xD7,0x0F,0x03,0x2F,0x77,0x0E,0x10,0xDC,0x0D,0x0F,0x97,0x28,0x20,0xDC,0x0C,0x1F,0xB6,0x28, + 0x3A,0x03,0xB7,0x23,0x1F,0x06,0x2F,0x10,0x06,0x7F,0x37,0x0F,0x10,0x72,0x36,0xD3,0x5F,0x00,0x4B,0x0F,0xB9,0x10,0x25,0x32,0x0F,0x97,0x10,0x3C,0x9B,0x1F,0x10,0xC2, + 0xC2,0x49,0x11,0x3D,0x74,0x0F,0x00,0x1C,0x2C,0x10,0xB7,0x58,0x1F,0x72,0x0F,0xF5,0x10,0x01,0x3F,0x35,0x0E,0xF0,0x54,0x03,0x00,0x08, +}; +uint8_t tileset_tile_86_compressed[86] = { + 0x10,0x1D,0x10,0x01,0x05,0x00,0xDC,0x03,0x06,0xFA,0x0A,0x05,0x01,0xE7,0x03,0x15,0x8A,0x00,0xD1,0x0C,0x04,0xAE,0x0F,0x04,0x00,0x49,0x28,0xAA,0x04,0x0E,0xE6,0x11, + 0x00,0xB2,0x0B,0x03,0x03,0x64,0x12,0x04,0xD3,0x0D,0x4E,0x10,0x0E,0x01,0xBE,0x0E,0x1C,0x64,0x04,0x03,0x91,0x35,0x93,0x04,0xDC,0x1B,0x07,0xDD,0x0F,0x69,0xF2,0x4F, + 0x05,0xF2,0x24,0x76,0x85,0xA3,0xF1,0x06,0x10,0xE1,0x9F,0x18,0xC0,0x15,0x0A,0x71,0x2E,0x61,0xCE,0x00,0x00,0x80, +}; +uint8_t tileset_tile_87_compressed[123] = { + 0x10,0x14,0x10,0x04,0x01,0x00,0x05,0xCA,0x00,0x01,0x04,0x09,0x0B,0x03,0x1C,0x1C,0x04,0x0D,0xAF,0x12,0x07,0x01,0xFA,0x07,0x10,0x16,0xBE,0x0F,0x06,0xED,0x0E,0x0F, + 0x03,0xDD,0x08,0x0D,0xB1,0x0E,0x05,0x05,0x1C,0x03,0x03,0x77,0x0C,0x3C,0x77,0x1F,0x0F,0x77,0x11,0x3D,0x6B,0x00,0x03,0x1F,0xBB,0x10,0x50,0xAB,0x36,0x4F,0xD7,0x08, + 0x03,0x44,0x2D,0x36,0xFC,0x6F,0x00,0x0F,0xBA,0x0E,0x16,0x1F,0x4B,0x36,0x0B,0xBE,0x48,0x0E,0x49,0x0F,0x2F,0x2C,0x0E,0x0F,0x4B,0x4B,0x1F,0xCB,0x42,0x0E,0x52,0x0F, + 0x49,0x6A,0x0D,0x86,0xBC,0x0E,0x4B,0x96,0x46,0x57,0x0E,0x1C,0x0E,0xA6,0x0F,0x03,0x0E,0xB9,0x0F,0xEE,0x1F,0x0E,0x4E,0x2F,0x10,0x00,0x01, +}; +uint8_t tileset_tile_88_compressed[51] = { + 0x10,0x1A,0x10,0x02,0x22,0x00,0x0C,0x9A,0x03,0x11,0x00,0x0C,0xE0,0x03,0x76,0x0F,0x26,0x25,0x0C,0x00,0x95,0x0F,0x25,0x1A,0x0F,0x25,0x87,0x04,0x0F,0x25,0x07,0x07, + 0x5F,0x0F,0x0B,0x71,0x10,0x15,0x0F,0x0E,0x71,0x10,0x09,0x0F,0x0C,0xA6,0x10,0x00,0x80,0x00,0x40, +}; +uint8_t tileset_tile_89_compressed[49] = { + 0x10,0x34,0x10,0x11,0x00,0x0C,0x0F,0x70,0x03,0xC2,0x00,0x07,0xC8,0x04,0x0A,0x0B,0xBF,0x0E,0x0D,0x00,0x8A,0x0E,0xE3,0x0C,0x29,0x0F,0x1D,0x0A,0x17,0x2D,0x64,0x0E, + 0x22,0x0B,0x5F,0x1E,0x0E,0xA5,0x03,0x07,0x00,0xDD,0x0F,0x25,0x00,0xC0,0x41,0x00,0x20, +}; +uint8_t tileset_tile_90_compressed[51] = { + 0x10,0x34,0x10,0x11,0x00,0x0C,0x0F,0x71,0x03,0xE5,0x00,0x0B,0x0A,0xA2,0x05,0x07,0x74,0x0F,0x00,0x0A,0x5A,0x10,0x0B,0xE3,0x00,0x17,0x21,0x0A,0x21,0x3E,0x0F,0x1F, + 0x22,0xE2,0x10,0xFE,0x20,0x0B,0x10,0x2E,0x20,0xDD,0x3D,0x25,0x00,0x4B,0x0F,0x00,0x00,0x00,0x80, +}; +uint8_t tileset_tile_91_compressed[51] = { + 0x10,0x35,0x10,0x11,0x00,0x0C,0xBB,0x03,0x22,0x00,0x03,0x40,0x02,0xDE,0x0F,0x0C,0x99,0x00,0x25,0x1E,0x0F,0x25,0x8F,0x0F,0x43,0x25,0xC2,0x0F,0x07,0x07,0x25,0x2E, + 0x0F,0xB8,0x0E,0x00,0x99,0x0F,0x32,0x0E,0x00,0x02,0x07,0x7B,0x00,0x0D,0xD0,0x42,0x02,0x00,0x08, +}; +uint8_t tileset_tile_92_compressed[59] = { + 0x10,0x05,0x10,0x02,0x12,0x12,0x09,0x92,0x00,0x07,0x09,0xC2,0x00,0x4B,0x0F,0x0F,0x00,0x24,0x07,0x0F,0x0E,0x52,0x0F,0x0F,0x07,0xFB,0x00,0x20,0x10,0xE6,0x16,0x2F, + 0xFB,0x0F,0x02,0x25,0x44,0x09,0xFA,0x0F,0x0C,0x00,0x0F,0x7E,0x3F,0x0F,0xAE,0x02,0x23,0x7B,0x3F,0x0E,0xB8,0x10,0x1F,0xE0,0x7F,0x00,0x10, +}; +uint8_t tileset_tile_93_compressed[44] = { + 0x10,0x12,0x10,0x07,0x09,0xC3,0x00,0x09,0x07,0x0F,0x13,0x06,0x0F,0xCB,0x07,0x10,0xCF,0x0E,0x07,0x7D,0x21,0x00,0xCF,0x2D,0x07,0xAE,0x04,0x07,0x1B,0x79,0x07,0xA7, + 0x1B,0x07,0xE6,0x06,0x56,0x9A,0x07,0x07,0xF8,0x7F,0x00,0x04, +}; +uint8_t tileset_tile_94_compressed[44] = { + 0x10,0x12,0x10,0x07,0x09,0xC3,0x00,0x09,0x07,0x0F,0x13,0x06,0x0F,0xCB,0x07,0x10,0xCF,0x0E,0x07,0x7D,0x21,0x00,0xCF,0x2D,0x07,0xAE,0x04,0x07,0x1B,0x79,0x07,0xA7, + 0x1B,0x07,0xE6,0x06,0x56,0x9A,0x07,0x07,0xF8,0x7F,0x00,0x04, +}; +uint8_t tileset_tile_95_compressed[57] = { + 0x10,0x12,0x10,0x07,0x09,0xDE,0x00,0x07,0x04,0x07,0x42,0x02,0x09,0x0F,0x0F,0x1D,0x0E,0x0F,0x07,0x57,0x00,0x0F,0x13,0x7D,0x10,0x09,0x5F,0x1B,0x00,0x0F,0xDC,0x08, + 0x18,0xB2,0x30,0x55,0x0F,0x25,0xCF,0x23,0x0F,0x76,0x1B,0x34,0x07,0x96,0x3F,0x4B,0x0E,0x10,0x9A,0x3F,0x07,0xF8,0x7F,0x00,0x04, +}; +uint8_t tileset_tile_96_compressed[79] = { + 0x10,0x35,0x10,0x4B,0x00,0x0D,0x09,0x00,0x13,0x0D,0x06,0x69,0x00,0x0E,0x0B,0xFC,0x00,0x0F,0x10,0x77,0x0F,0x10,0x1D,0x0F,0xC7,0x10,0xDC,0x0F,0x10,0xF5,0x4F,0x00, + 0xFC,0x0C,0x02,0x0F,0xF2,0x20,0x73,0x2D,0x10,0xCC,0x0F,0x5E,0x0D,0x8E,0x0F,0x9F,0x1F,0x0E,0x89,0x7F,0x93,0x00,0x09,0x8C,0x7F,0x96,0x4C,0x39,0x0F,0x13,0x19,0x0F, + 0x7C,0x7F,0x01,0xF2,0x0F,0xA7,0x3E,0x0D,0x4F,0x4F,0x13,0x7F,0x00,0x00,0x80, +}; +uint8_t tileset_tile_97_compressed[74] = { + 0x10,0x12,0x10,0x0D,0x06,0x26,0x00,0x0D,0x07,0xD2,0x00,0x13,0x11,0x0E,0x13,0x13,0x1F,0x10,0x08,0x13,0x71,0x00,0x3C,0x21,0x1D,0x64,0x10,0xC9,0x0E,0x13,0x93,0x43, + 0x13,0xDC,0x00,0x4B,0x54,0x1D,0xB1,0x5C,0x96,0x0E,0x5C,0x0D,0x8B,0x3B,0x9E,0x4E,0xA3,0x0D,0x38,0x10,0x04,0xC8,0x10,0xA0,0xA9,0x8A,0x18,0xE3,0x26,0x2F,0x16,0x7F, + 0x01,0x8D,0x25,0xA8,0x6E,0xD4,0x34,0x0D,0x00,0x02, +}; +uint8_t tileset_tile_98_compressed[85] = { + 0x10,0x12,0x10,0x0D,0x06,0x0A,0x00,0x0D,0x13,0x0D,0x00,0x64,0x4B,0x00,0x06,0x13,0xBB,0x0E,0x0F,0x0B,0x00,0xAA,0x10,0x0B,0xF8,0x02,0x0D,0xAD,0x0F,0x0D,0x0D,0x1B, + 0x0F,0xC6,0x0E,0x25,0x0F,0x13,0x00,0x9F,0x4F,0x1D,0x8B,0x1E,0x71,0x4B,0x0E,0xB3,0x0F,0xCF,0x3D,0x0F,0x2F,0x4E,0x73,0x13,0x0F,0x75,0x10,0x04,0x72,0x00,0xF7,0x6F, + 0x0B,0x04,0x14,0x7F,0x06,0x8C,0x0F,0xE3,0x2C,0x38,0x0F,0x0E,0xC9,0x0F,0x6A,0x2C,0x25,0x68,0x4F,0x00,0x04, +}; +uint8_t tileset_tile_99_compressed[86] = { + 0x10,0x33,0x10,0x4B,0x00,0x0D,0x0B,0x00,0x12,0x0D,0x0D,0x06,0xCE,0x00,0x0F,0x13,0x44,0x0D,0xF5,0x0F,0x00,0x0F,0x35,0x10,0xDA,0x0C,0x2E,0x13,0x6E,0x10,0x0B,0xEF, + 0x0F,0x1F,0x0F,0xE7,0x10,0x0F,0xB6,0x0E,0x13,0x0C,0x13,0x9A,0x0F,0x7E,0x2D,0x10,0xEE,0x3F,0x3C,0x7E,0x6F,0x06,0xE2,0x1B,0x6E,0x0F,0x12,0x58,0x2C,0xCE,0x10,0x04, + 0x32,0x10,0x5B,0x06,0x15,0x8B,0x18,0xE3,0x26,0x2F,0x16,0x7F,0x01,0x8D,0x25,0xA8,0x6E,0xD4,0x34,0x0D,0x00,0x02, +}; +uint8_t tileset_tile_100_compressed[93] = { + 0x10,0x12,0x10,0x0D,0x06,0x0C,0x00,0x0D,0x0D,0x0B,0x00,0x0D,0x4B,0xC9,0x00,0x06,0x13,0x13,0x0E,0x13,0xFF,0x0F,0x0B,0x21,0x13,0xFC,0x00,0x0F,0x22,0xBF,0x0F,0x0D, + 0x1D,0xCB,0x00,0x30,0xC9,0x00,0x2C,0x25,0x1F,0xF2,0x0F,0x02,0x4F,0x2C,0x10,0x77,0x0F,0x1D,0x3D,0x10,0xCF,0x02,0x0D,0x77,0x42,0x3F,0x2D,0x10,0xCD,0x48,0x00,0x27, + 0x5D,0x06,0x19,0x10,0xC6,0x04,0x4A,0x10,0x06,0x13,0x8D,0x0E,0xA8,0x78,0xC5,0x16,0x13,0xA3,0x02,0x13,0x6A,0x25,0x6E,0x35,0x34,0x0D,0x00,0x00,0x80, +}; +uint8_t tileset_tile_101_compressed[109] = { + 0x10,0x03,0x10,0x1F,0x1F,0x1C,0x1C,0x04,0x00,0x4A,0x03,0x00,0x05,0x49,0x04,0x0E,0x3E,0x0D,0x0E,0x05,0xB9,0x0F,0x9F,0x0D,0x01,0x0E,0x03,0x10,0x0F,0x01,0x11,0x01, + 0x04,0x01,0x3F,0x0F,0x2A,0x1D,0x5F,0x03,0x12,0x4F,0x7D,0x0F,0x1C,0xFA,0x0E,0x0F,0x00,0x4B,0x5B,0x20,0x0D,0xFB,0x00,0x59,0x0F,0xE5,0x05,0x0D,0xAC,0x1E,0x0A,0x4B, + 0x4B,0xA9,0x1E,0x2E,0x0B,0x2D,0xBE,0x2F,0x0F,0x3D,0x49,0x49,0x29,0x52,0x1F,0x04,0x73,0x4D,0x73,0x50,0x00,0x27,0x0F,0x05,0x00,0xFE,0x4F,0x0F,0x0D,0x32,0x0F,0x22, + 0x6E,0xF0,0x00,0x8F,0x8D,0x2F,0xE2,0x7E,0x6E,0x2E,0x16,0x00,0x01, +}; +uint8_t tileset_tile_102_compressed[84] = { + 0x10,0x11,0x10,0x01,0x05,0x8E,0x00,0x01,0x00,0xA6,0x04,0x0B,0x9A,0x0E,0xF9,0x06,0x03,0xE3,0x09,0xF8,0x2F,0x00,0xD8,0x0D,0xBA,0x27,0x0C,0x49,0x04,0x11,0x3F,0x04, + 0x0E,0x2C,0x10,0xF5,0x00,0x0E,0x3C,0x11,0xEF,0x0D,0x03,0x03,0x09,0x98,0x02,0x04,0x03,0xBD,0x03,0x11,0x03,0x75,0x0C,0x06,0x4B,0x1B,0x05,0x11,0xAA,0x17,0x27,0xBF, + 0x29,0x63,0x0F,0xB9,0x30,0x6E,0x03,0x0F,0xE5,0x48,0x7F,0x8D,0x8B,0x09,0xA3,0x07,0xC2,0xBF,0x00,0x01, +}; +uint8_t tileset_tile_103_compressed[107] = { + 0x10,0x09,0x10,0x04,0x05,0x03,0x58,0x00,0x04,0x00,0x1C,0x1C,0x1F,0x38,0x1F,0x05,0x10,0x9A,0x11,0x10,0x52,0x01,0x10,0x01,0x69,0x11,0x9A,0x0F,0x01,0x01,0x01,0x27, + 0x0F,0x0C,0xFE,0x30,0x21,0x02,0x75,0x0F,0x01,0xF7,0x0F,0x10,0x22,0xFD,0x0F,0x4F,0x1F,0x5C,0x50,0x00,0xAE,0x1E,0x4B,0x0E,0x5A,0x20,0x00,0xAF,0x5F,0x0F,0x0D,0xB9, + 0x31,0x29,0x13,0x20,0x4B,0xC9,0x1F,0x4C,0x27,0x55,0x41,0x5C,0x0F,0x06,0xD6,0x4E,0x51,0x04,0x9E,0x0F,0xE3,0x12,0xFD,0x0F,0x01,0x0F,0x1F,0x13,0x0F,0x7C,0x70,0x0F, + 0x76,0x2F,0x8F,0x17,0x08,0x13,0x30,0x84,0x80,0x00,0x02, +}; +uint8_t tileset_tile_104_compressed[79] = { + 0x10,0x05,0x10,0x02,0x07,0x0C,0x25,0xA6,0x00,0x07,0x00,0x4C,0x02,0x10,0x0C,0x99,0x00,0x02,0x71,0x21,0x6B,0x0F,0x17,0x10,0x8A,0x0F,0x4B,0x0B,0x10,0x10,0x0F,0x1B, + 0x96,0x10,0x26,0x3F,0x59,0x10,0xF9,0x00,0x3F,0x67,0x10,0x00,0xD7,0x0F,0x1B,0x10,0x14,0x1F,0x1B,0x8C,0x10,0xBA,0x0F,0x10,0x4F,0x17,0x00,0x26,0x0F,0x10,0x17,0x4D, + 0x0A,0x00,0x2F,0x0F,0x10,0x3C,0x00,0xD1,0x0F,0xF0,0x1F,0xC4,0x0F,0x00,0x02, +}; +uint8_t tileset_tile_105_compressed[62] = { + 0x10,0x25,0x10,0x07,0x00,0x48,0x0C,0x00,0x0A,0xE5,0x00,0x08,0x4A,0x07,0x0B,0x22,0x8A,0x0F,0x99,0x10,0x0C,0x17,0x20,0x71,0x0D,0x9C,0x20,0x00,0x7C,0x10,0xD2,0x5F, + 0xB4,0x62,0x25,0x0F,0x02,0x72,0x00,0x07,0x1E,0x00,0x47,0x17,0x23,0x00,0x0A,0x91,0x00,0x10,0xC4,0x00,0x02,0x1A,0x62,0x00,0x02,0x1F,0x0F,0x80,0x00,0x40, +}; +uint8_t tileset_tile_106_compressed[74] = { + 0x10,0x34,0x10,0x0A,0x00,0x0C,0x89,0x00,0x07,0x72,0x00,0x0E,0x22,0x0C,0xF9,0x13,0x0F,0x67,0x16,0x0E,0x9E,0x0F,0xA2,0x11,0xEE,0x1E,0x0D,0x33,0x1E,0x0C,0x8F,0x2D, + 0x44,0x25,0xD2,0x5C,0x00,0x02,0x39,0x00,0x07,0x0F,0x23,0x00,0x17,0x91,0x00,0x0A,0xC9,0x00,0x10,0x82,0x00,0x02,0x0B,0x0B,0x1B,0xE7,0x00,0x17,0x4D,0x02,0x17,0x3A, + 0x0F,0x1B,0x68,0x4F,0x89,0x0F,0xA0,0x00,0x00,0x10, +}; +uint8_t tileset_tile_107_compressed[93] = { + 0x10,0x26,0x10,0x07,0x00,0x58,0x25,0x00,0x0C,0x07,0x02,0x4D,0x0C,0x00,0x34,0x0E,0x5D,0x0F,0x22,0x0E,0x10,0xAD,0x0F,0x0E,0x17,0x13,0x0F,0x22,0x0E,0x0B,0x22,0x0F, + 0x52,0x0E,0x1B,0x02,0x79,0x5F,0x79,0x0E,0x3F,0xE5,0x00,0x0E,0x44,0x17,0xDB,0x1F,0x0E,0x1B,0x0F,0x8C,0x0E,0xA4,0x0F,0x17,0xF7,0x00,0x0E,0x49,0x0F,0x0A,0x97,0x00, + 0x17,0x0E,0x56,0x0F,0x05,0x1B,0x77,0x0B,0x77,0x0E,0x69,0x0F,0x10,0x79,0x00,0x37,0xA6,0x0F,0x4E,0x4E,0x1B,0x0F,0x1B,0x9A,0x00,0x78,0x0F,0x00,0x04, +}; +uint8_t tileset_tile_108_compressed[61] = { + 0x10,0x05,0x10,0x02,0x12,0x12,0x09,0x92,0x00,0x07,0x09,0xC2,0x00,0x4B,0x0F,0x0F,0x00,0x25,0x07,0x0F,0x00,0xF8,0x0F,0x0A,0xB4,0x00,0x02,0x68,0x0E,0x07,0x00,0x02, + 0x8D,0x00,0x71,0x00,0x10,0xB0,0x1F,0x89,0x0F,0x31,0x2D,0x85,0x00,0x10,0x07,0x31,0x1E,0x2E,0x00,0x1D,0x0F,0xE7,0x09,0x0F,0x81,0x82,0x1F,0x00,0x01, +}; +uint8_t tileset_tile_109_compressed[46] = { + 0x10,0x12,0x10,0x07,0x09,0xC3,0x00,0x09,0x07,0x0F,0x62,0x00,0x21,0x07,0xE4,0x00,0x02,0x74,0x00,0x3E,0x2F,0x07,0x46,0x10,0xC3,0x00,0xF0,0x0F,0xF9,0x6F,0x02,0x09, + 0x19,0x00,0xA3,0x0F,0x0F,0x2E,0x00,0x0F,0x26,0x3C,0xA0,0x0F,0x00,0x10, +}; +uint8_t tileset_tile_110_compressed[53] = { + 0x10,0x12,0x10,0x07,0x09,0xC3,0x00,0x09,0x07,0x0F,0x62,0x00,0x21,0x07,0xE4,0x00,0x02,0x74,0x00,0x3E,0x2F,0x1E,0x8F,0x00,0x46,0x1D,0x71,0x00,0x0E,0xB9,0x4E,0x11, + 0x02,0x0B,0x69,0x00,0x02,0xA1,0x06,0x28,0x0F,0xF5,0x2F,0x0A,0xA6,0x00,0x02,0x06,0x84,0x20,0x0F,0x00,0x10, +}; +uint8_t tileset_tile_111_compressed[54] = { + 0x10,0x12,0x10,0x07,0x09,0xDE,0x00,0x07,0x04,0x07,0x42,0x02,0x09,0x0F,0x0F,0x64,0x00,0x07,0xB8,0x0F,0xD8,0x00,0x42,0x0F,0x39,0x00,0x10,0x1A,0x1D,0x10,0x42,0x00, + 0x05,0x0F,0x31,0x1E,0x06,0x00,0x1D,0x07,0x10,0x2D,0x00,0x10,0x8B,0x0F,0xA4,0x05,0x10,0x0C,0x50,0x1F,0x00,0x08, +}; +uint8_t tileset_tile_112_compressed[75] = { + 0x10,0x33,0x10,0x4B,0x00,0x0D,0x0B,0x00,0x12,0x0D,0x0D,0x06,0xCE,0x00,0x0F,0x13,0x44,0x0D,0xFA,0x0F,0x00,0x0E,0x13,0x69,0x10,0xEE,0x1E,0x10,0x3D,0x0F,0x0D,0x1B, + 0x0F,0xF3,0x0C,0x02,0xCC,0x0F,0x2D,0x13,0x9E,0x4F,0x75,0x5E,0x0D,0xCF,0x1F,0x30,0x73,0x42,0x72,0x0F,0x10,0x73,0x00,0x07,0xCB,0x0F,0x25,0x0A,0x4F,0x0F,0x0A,0x24, + 0x34,0xDC,0x5F,0x07,0x90,0x04,0x43,0x00,0x00,0x00,0x80, +}; +uint8_t tileset_tile_113_compressed[77] = { + 0x10,0x12,0x10,0x0D,0x06,0x26,0x00,0x0D,0x07,0xD2,0x00,0x13,0x11,0x0E,0x13,0x13,0x1F,0x10,0x08,0x13,0x71,0x00,0x3C,0x21,0x1D,0x64,0x10,0xC9,0x0E,0x13,0x93,0x43, + 0x13,0xDC,0x00,0x4B,0x54,0x1D,0xB1,0x5C,0x93,0x0E,0xF7,0x1D,0x0D,0x00,0x24,0x0F,0xAA,0x00,0x0B,0x00,0xBE,0x07,0x1E,0x58,0x0A,0x88,0x04,0x5A,0x0F,0x7D,0x34,0x0F, + 0x4B,0x6B,0x09,0x4B,0x00,0x95,0x14,0x4B,0x0F,0x40,0x00,0x00,0x20, +}; +uint8_t tileset_tile_114_compressed[80] = { + 0x10,0x12,0x10,0x0D,0x06,0x0C,0x00,0x0D,0x0D,0x0B,0x00,0x0D,0x4B,0xC9,0x00,0x06,0x13,0x13,0x0E,0x13,0xFF,0x0F,0x0B,0x21,0x13,0xFC,0x00,0x10,0x00,0xBF,0x0F,0x0D, + 0x1D,0xCF,0x00,0x20,0x24,0x2C,0x67,0x0F,0x0A,0x18,0x0F,0x0D,0x8D,0x0F,0x9E,0x0E,0x7E,0x4F,0x04,0x26,0x1E,0xEA,0x1F,0x04,0xEE,0x00,0x0E,0x7B,0x0F,0x09,0x86,0x2E, + 0x0F,0x2A,0x7B,0x0F,0x50,0xBB,0x52,0x59,0x4D,0x0D,0x5F,0x0F,0xC0,0x00,0x00,0x20, +}; +uint8_t tileset_tile_115_compressed[92] = { + 0x10,0x12,0x10,0x0D,0x06,0x26,0x00,0x0D,0x07,0xD2,0x00,0x13,0x11,0x0E,0x13,0x13,0x1F,0x10,0x08,0x13,0x71,0x00,0x3C,0x21,0x1D,0x64,0x10,0xC9,0x0E,0x13,0x93,0x43, + 0x13,0xDC,0x00,0x4B,0x54,0x1D,0xB1,0x5C,0x97,0x0E,0x77,0x71,0x00,0x18,0x3B,0x00,0x0B,0x0B,0x0D,0xAF,0x02,0x10,0x19,0x8A,0x0F,0xAA,0x10,0x2A,0x8A,0x0F,0xEE,0x04, + 0x4C,0x6B,0x40,0x0E,0x92,0x0F,0xDD,0x10,0x4B,0x00,0xD5,0x12,0x0F,0xF7,0x7F,0x01,0x0F,0x72,0x20,0xF3,0x3E,0x04,0xCF,0x0F,0x7F,0x00,0x00,0x80, +}; +uint8_t tileset_tile_116_compressed[92] = { + 0x10,0x12,0x10,0x0D,0x06,0x26,0x00,0x0D,0x07,0xD2,0x00,0x13,0x11,0x0E,0x13,0x13,0x1F,0x10,0x08,0x13,0x71,0x00,0x3C,0x21,0x1D,0x64,0x10,0xC9,0x0E,0x13,0x93,0x43, + 0x13,0xDC,0x00,0x4B,0x54,0x1D,0xB1,0x5C,0x96,0x0E,0x5C,0x0D,0x9A,0x3B,0xEA,0x03,0x00,0x5E,0x30,0x06,0x8A,0x03,0x0B,0x0B,0x02,0x96,0x41,0xD3,0x74,0x0B,0xAE,0x0F, + 0x06,0x3B,0xE7,0x0E,0x1F,0x92,0x13,0xEE,0x10,0x3F,0xEE,0x74,0x0F,0xDC,0x0C,0x4B,0x00,0xD2,0x0E,0x5F,0x2F,0x0F,0x20,0x1B,0x0F,0x00,0x00,0x80, +}; +uint8_t tileset_tile_117_compressed[124] = { + 0x10,0x00,0x10,0x47,0x47,0x03,0x01,0x01,0x04,0x04,0x3E,0x01,0x05,0x00,0x07,0xBF,0x09,0x0E,0x0A,0x05,0x7D,0x49,0x10,0x00,0x9D,0x11,0x04,0x1C,0x0F,0xF7,0x10,0x00, + 0x0F,0xFF,0x07,0x0F,0x02,0x06,0x76,0x08,0x11,0x04,0x77,0x03,0x0F,0x18,0x77,0x38,0x00,0xAE,0x0F,0x03,0x2F,0xEF,0x0E,0x10,0x0D,0xB9,0x0F,0x2F,0x28,0x20,0x0C,0xB9, + 0x1F,0x6D,0x28,0x3A,0x03,0x6E,0x23,0x1F,0x06,0x5E,0x10,0x06,0xFE,0x37,0x0F,0x10,0xE5,0x36,0x5F,0xA7,0x00,0x4B,0x0F,0x72,0x10,0x4B,0x32,0x0F,0x2F,0x10,0x3C,0x36, + 0x1F,0x10,0x1C,0xAB,0x00,0x10,0xBF,0x74,0x0F,0x00,0x4B,0x1C,0x10,0x2C,0x58,0xD3,0x1F,0x7C,0x10,0x01,0x0E,0xB7,0x0F,0x44,0x70,0x03,0x00,0x08, +}; +uint8_t tileset_tile_118_compressed[87] = { + 0x10,0x1D,0x10,0x01,0x05,0x00,0xDC,0x03,0x06,0xFA,0x0A,0x05,0x01,0xE7,0x03,0x15,0x8A,0x00,0xD1,0x0C,0x04,0xAE,0x0F,0x04,0x00,0x49,0x28,0xAA,0x04,0x0E,0xE6,0x11, + 0x00,0xB2,0x0B,0x03,0x03,0x64,0x12,0x04,0xD3,0x0D,0x4E,0x10,0x0E,0x01,0xBE,0x0E,0x1C,0x64,0x04,0x03,0x91,0x35,0x89,0x04,0x01,0xE2,0x3C,0x52,0x0F,0x03,0xA6,0x0F, + 0x03,0x24,0x9E,0x51,0xEE,0x07,0x0E,0x6B,0x65,0x02,0xB8,0x15,0xC9,0x00,0x1C,0x0E,0x37,0x00,0xDC,0x04,0x00,0x00,0x02, +}; +uint8_t tileset_tile_119_compressed[124] = { + 0x10,0x14,0x10,0x04,0x01,0x00,0x05,0xCA,0x00,0x01,0x04,0x09,0x0B,0x03,0x47,0x47,0x04,0x0D,0xAF,0x12,0x07,0x01,0xFA,0x07,0x10,0x16,0xBE,0x0F,0x06,0xF1,0x0E,0x0F, + 0x1C,0x04,0x03,0xDD,0x08,0x0D,0xB1,0x0E,0x05,0x05,0x1C,0x03,0x03,0x77,0x0C,0x3C,0x77,0x1F,0x0F,0x77,0x11,0x3D,0x6B,0x00,0x03,0x1F,0xBB,0x10,0x50,0xAE,0x36,0x0F, + 0xD7,0x1B,0x03,0x44,0x2F,0x36,0x0F,0x7C,0x26,0x0F,0xBA,0x0E,0x16,0x1F,0x4B,0x36,0x0B,0xBE,0x48,0x0E,0x49,0x0F,0x2F,0x2C,0x0E,0x0F,0x4B,0x4B,0x1F,0xCB,0x42,0x0E, + 0x57,0x0F,0x6A,0x6A,0x0E,0x1C,0x00,0xD2,0x0E,0x4B,0xCA,0x46,0x0E,0x1C,0xF4,0x0E,0x0F,0x03,0xF1,0x0E,0x53,0x1F,0x7C,0x0E,0x0F,0x10,0x00,0x02, +}; +uint8_t tileset_tile_120_compressed[72] = { + 0x10,0x0B,0x10,0x02,0x17,0x1B,0x00,0x26,0x17,0x0A,0x00,0x82,0x02,0x0F,0x0B,0x17,0x3B,0x0F,0x10,0x8E,0x0F,0xE2,0x10,0xD7,0x0F,0x0A,0x10,0x17,0x0F,0x24,0x10,0x42, + 0x0F,0x10,0x64,0x10,0x02,0xC9,0x00,0x10,0x62,0x10,0x12,0x1F,0x00,0xC4,0x10,0xCB,0x0F,0x10,0x15,0x0F,0x7C,0x10,0x0F,0xE9,0x00,0x00,0x63,0x10,0x2E,0x0F,0x10,0x74, + 0x00,0x00,0xD3,0x10,0xC0,0x00,0x00,0x20, +}; +uint8_t tileset_tile_121_compressed[33] = { + 0x10,0x11,0x10,0x02,0x1A,0x88,0x00,0x02,0x1C,0x11,0x0F,0x17,0x90,0x00,0x8A,0x0F,0x0A,0x32,0x00,0x11,0x0F,0x46,0x0B,0x21,0x00,0x02,0xF4,0x00,0x10,0x74,0x00,0x00, + 0x02, +}; +uint8_t tileset_tile_122_compressed[57] = { + 0x10,0x26,0x10,0x0A,0x00,0x0B,0x1B,0x16,0x0F,0x1B,0x01,0x88,0x0F,0xE3,0x0A,0xBE,0x0F,0x0B,0x02,0x24,0x0F,0x0B,0x0B,0x49,0x09,0x01,0x3E,0x0F,0x0A,0x16,0x8D,0x0F, + 0x9A,0x00,0x2A,0x2F,0x48,0x30,0xF4,0x1F,0x02,0x72,0x00,0x0A,0x0B,0x90,0x00,0x17,0xF4,0x00,0x7A,0x5F,0x10,0x3A,0x00,0x00,0x01, +}; +uint8_t tileset_tile_123_compressed[100] = { + 0x10,0x05,0x10,0x16,0x0F,0x0F,0x1B,0x96,0x03,0x17,0x1B,0x00,0x17,0x77,0x02,0x09,0x01,0x0C,0x94,0x0F,0x09,0x0B,0x01,0x09,0x2F,0x16,0x0B,0x0F,0x0E,0x2F,0x0B,0x02, + 0x0B,0x11,0xEF,0x00,0x0F,0x0E,0xD3,0x0F,0x0B,0x76,0x00,0x0F,0x0E,0x0B,0x9A,0x2F,0xED,0x0F,0x0E,0x0A,0x13,0x1F,0x27,0x0E,0x0F,0x3C,0x00,0xC4,0x0E,0x10,0x0A,0xC9, + 0x00,0x17,0x62,0x0E,0xA4,0x0F,0x0E,0x44,0x00,0x4A,0x0F,0x0E,0x00,0x4F,0x17,0x00,0x2C,0x0E,0x4C,0x0F,0xA9,0x0E,0x00,0xE6,0x5F,0x0E,0x27,0x00,0x10,0x00,0x95,0x0E, + 0x00,0x00,0x00,0x80, +}; +uint8_t tileset_tile_124_compressed[50] = { + 0x10,0x03,0x10,0x00,0x00,0x02,0x31,0x2D,0x00,0x0A,0x10,0x07,0x31,0x1E,0x00,0x2E,0x1D,0x07,0x0F,0xA3,0x08,0x20,0x0F,0x72,0x1F,0x45,0x07,0xBD,0x0F,0x1D,0x00,0x0F, + 0x2D,0xF1,0x04,0x00,0x48,0x0F,0x1E,0x37,0x0F,0x2E,0x10,0x02,0x00,0x5E,0x05,0x06,0x00,0x01, +}; +uint8_t tileset_tile_125_compressed[59] = { + 0x10,0x02,0x10,0x02,0x0F,0x0F,0x07,0x1A,0x66,0x00,0x07,0x0B,0x02,0xB4,0x0F,0x11,0xD0,0x00,0x4F,0x0F,0x3C,0x00,0xD1,0x0F,0x7E,0x00,0x0F,0x15,0x09,0x44,0x0F,0xE4, + 0x01,0x0E,0x1B,0x0A,0x5E,0x10,0x0F,0x0A,0xA8,0x0F,0x99,0x00,0x23,0x2F,0x38,0x0F,0x03,0x3D,0x0F,0x8E,0x00,0x47,0x10,0x40,0x00,0x00,0x20, +}; +uint8_t tileset_tile_126_compressed[49] = { + 0x10,0x0B,0x10,0x1D,0x02,0x0A,0x00,0x4C,0x02,0x06,0x1D,0xE3,0x0F,0x29,0x00,0x0F,0x17,0x69,0x00,0x02,0xA0,0x06,0x8A,0x0F,0x34,0x3F,0x1E,0x1D,0x8C,0x00,0x47,0x1E, + 0xA3,0x00,0x2D,0x90,0x00,0x1D,0x27,0x23,0x00,0x02,0x91,0x00,0x10,0xD0,0x00,0x00,0x08, +}; +uint8_t tileset_tile_127_compressed[51] = { + 0x10,0x0A,0x10,0x07,0x31,0x1E,0x00,0x0C,0x1D,0x07,0x10,0x2D,0x00,0x10,0x02,0x22,0x10,0x00,0x2A,0x0F,0x05,0xE0,0x0F,0x6B,0x1F,0x47,0x07,0x48,0x1F,0x0F,0x2D,0x5F, + 0x1D,0x00,0x0F,0x76,0x04,0x0F,0x1E,0x83,0xDE,0x0F,0x73,0xF9,0x00,0x08,0x78,0x05,0x0F,0x00,0x04, +}; +uint8_t *tileset_tiles_compressed[128] = { + tileset_tile_0_compressed, + tileset_tile_1_compressed, + tileset_tile_2_compressed, + tileset_tile_3_compressed, + tileset_tile_4_compressed, + tileset_tile_5_compressed, + tileset_tile_6_compressed, + tileset_tile_7_compressed, + tileset_tile_8_compressed, + tileset_tile_9_compressed, + tileset_tile_10_compressed, + tileset_tile_11_compressed, + tileset_tile_12_compressed, + tileset_tile_13_compressed, + tileset_tile_14_compressed, + tileset_tile_15_compressed, + tileset_tile_16_compressed, + tileset_tile_17_compressed, + tileset_tile_18_compressed, + tileset_tile_19_compressed, + tileset_tile_20_compressed, + tileset_tile_21_compressed, + tileset_tile_22_compressed, + tileset_tile_23_compressed, + tileset_tile_24_compressed, + tileset_tile_25_compressed, + tileset_tile_26_compressed, + tileset_tile_27_compressed, + tileset_tile_28_compressed, + tileset_tile_29_compressed, + tileset_tile_30_compressed, + tileset_tile_31_compressed, + tileset_tile_32_compressed, + tileset_tile_33_compressed, + tileset_tile_34_compressed, + tileset_tile_35_compressed, + tileset_tile_36_compressed, + tileset_tile_37_compressed, + tileset_tile_38_compressed, + tileset_tile_39_compressed, + tileset_tile_40_compressed, + tileset_tile_41_compressed, + tileset_tile_42_compressed, + tileset_tile_43_compressed, + tileset_tile_44_compressed, + tileset_tile_45_compressed, + tileset_tile_46_compressed, + tileset_tile_47_compressed, + tileset_tile_48_compressed, + tileset_tile_49_compressed, + tileset_tile_50_compressed, + tileset_tile_51_compressed, + tileset_tile_52_compressed, + tileset_tile_53_compressed, + tileset_tile_54_compressed, + tileset_tile_55_compressed, + tileset_tile_56_compressed, + tileset_tile_57_compressed, + tileset_tile_58_compressed, + tileset_tile_59_compressed, + tileset_tile_60_compressed, + tileset_tile_61_compressed, + tileset_tile_62_compressed, + tileset_tile_63_compressed, + tileset_tile_64_compressed, + tileset_tile_65_compressed, + tileset_tile_66_compressed, + tileset_tile_67_compressed, + tileset_tile_68_compressed, + tileset_tile_69_compressed, + tileset_tile_70_compressed, + tileset_tile_71_compressed, + tileset_tile_72_compressed, + tileset_tile_73_compressed, + tileset_tile_74_compressed, + tileset_tile_75_compressed, + tileset_tile_76_compressed, + tileset_tile_77_compressed, + tileset_tile_78_compressed, + tileset_tile_79_compressed, + tileset_tile_80_compressed, + tileset_tile_81_compressed, + tileset_tile_82_compressed, + tileset_tile_83_compressed, + tileset_tile_84_compressed, + tileset_tile_85_compressed, + tileset_tile_86_compressed, + tileset_tile_87_compressed, + tileset_tile_88_compressed, + tileset_tile_89_compressed, + tileset_tile_90_compressed, + tileset_tile_91_compressed, + tileset_tile_92_compressed, + tileset_tile_93_compressed, + tileset_tile_94_compressed, + tileset_tile_95_compressed, + tileset_tile_96_compressed, + tileset_tile_97_compressed, + tileset_tile_98_compressed, + tileset_tile_99_compressed, + tileset_tile_100_compressed, + tileset_tile_101_compressed, + tileset_tile_102_compressed, + tileset_tile_103_compressed, + tileset_tile_104_compressed, + tileset_tile_105_compressed, + tileset_tile_106_compressed, + tileset_tile_107_compressed, + tileset_tile_108_compressed, + tileset_tile_109_compressed, + tileset_tile_110_compressed, + tileset_tile_111_compressed, + tileset_tile_112_compressed, + tileset_tile_113_compressed, + tileset_tile_114_compressed, + tileset_tile_115_compressed, + tileset_tile_116_compressed, + tileset_tile_117_compressed, + tileset_tile_118_compressed, + tileset_tile_119_compressed, + tileset_tile_120_compressed, + tileset_tile_121_compressed, + tileset_tile_122_compressed, + tileset_tile_123_compressed, + tileset_tile_124_compressed, + tileset_tile_125_compressed, + tileset_tile_126_compressed, + tileset_tile_127_compressed, +}; diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tileset.png b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tileset.png new file mode 100644 index 0000000..c20a947 Binary files /dev/null and b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tileset.png differ diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/main.c b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/main.c new file mode 100644 index 0000000..70360a6 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/main.c @@ -0,0 +1,119 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +/* Include the graphics */ +#include "gfx/tiles_gfx.h" +#include "tilemapdata.h" + +/* Tilemap defines */ +#define TILE_WIDTH (16) +#define TILE_HEIGHT (16) +#define TILE_SIZE ((TILE_WIDTH * TILE_HEIGHT) + 2) // +2 for width and height bytes + +#define TILEMAP_WIDTH (32) +#define TILEMAP_HEIGHT (25) + +#define TILEMAP_DRAW_WIDTH (20) +#define TILEMAP_DRAW_HEIGHT (14) + +#define Y_OFFSET (16) +#define X_OFFSET (0) + +/* This is where the decompressed tilemap data is to be stored */ +uint8_t tilemap_map[TILEMAP_WIDTH * TILEMAP_HEIGHT]; + +/* Place to hold decompressed tile pointers */ +gfx_sprite_t *tileset_tiles[128]; + +/* Put all your code here */ +void main(void) { + sk_key_t key; + uint8_t i; + unsigned int x_offset = 0; + unsigned int y_offset = 0; + gfx_sprite_t *tmp_ptr; + gfx_tilemap_t tilemap; + + /* Decompress the compressed tiles */ + for (i = 0; i < sizeof(tileset_tiles)/sizeof(gfx_sprite_t*) ; i++) { + tmp_ptr = gfx_MallocSprite(TILE_WIDTH, TILE_HEIGHT); /* Same as gfx_AllocSprite(TILE_WIDTH, TILE_HEIGHT, malloc) */ + zx7_Decompress(tmp_ptr, tileset_tiles_compressed[i]); + tileset_tiles[i] = tmp_ptr; + } + + zx7_Decompress(tilemap_map, tilemap_compressed); + + /* Initialize the tilemap structure */ + tilemap.map = tilemap_map; + tilemap.tiles = tileset_tiles; + tilemap.type_width = gfx_tile_16_pixel; + tilemap.type_height = gfx_tile_16_pixel; + tilemap.tile_height = TILE_HEIGHT; + tilemap.tile_width = TILE_WIDTH; + tilemap.draw_height = TILEMAP_DRAW_HEIGHT; + tilemap.draw_width = TILEMAP_DRAW_WIDTH; + tilemap.height = TILEMAP_HEIGHT; + tilemap.width = TILEMAP_WIDTH; + tilemap.y_loc = Y_OFFSET; + tilemap.x_loc = X_OFFSET; + + /* Initialize the graphics scene */ + gfx_Begin(); + + /* Set up the palette */ + gfx_SetPalette(tiles_gfx_pal, sizeof_tiles_gfx_pal, 0); + gfx_SetColor(gfx_white); + + /* Draw to buffer to avoid tearing. Note, this is the same as gfx_SetDraw(gfx_buffer) */ + gfx_SetDrawBuffer(); + + /* Set monospace font with width of 8 */ + gfx_SetMonospaceFont(8); + + /* Wait for the enter key to quit */ + while ((key = os_GetCSC()) != sk_Enter) { + + /* Draw tilemap and coords */ + gfx_Tilemap(&tilemap, x_offset, y_offset); + gfx_FillRectangle(0, 0, 320, 16); + gfx_PrintStringXY("x offset:", 48, 4); + gfx_PrintUInt(x_offset, 4); + gfx_PrintString(" y offset:"); + gfx_PrintUInt(y_offset, 4); + + /* Do something based on the keypress */ + switch (key) { + case sk_Down: + if (y_offset < (TILEMAP_HEIGHT * TILE_HEIGHT) - (TILEMAP_DRAW_HEIGHT * TILE_HEIGHT)) + y_offset += TILE_HEIGHT; + break; + case sk_Left: + if (x_offset) + x_offset -= TILE_WIDTH; + break; + case sk_Right: + if (x_offset < (TILEMAP_WIDTH * TILE_WIDTH) - (TILEMAP_DRAW_WIDTH * TILE_WIDTH)) + x_offset += TILE_WIDTH; + break; + case sk_Up: + if (y_offset) + y_offset -= TILE_HEIGHT; + break; + default: + break; + } + gfx_SwapDraw(); + } + + /* Close the graphics */ + gfx_End(); +} diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/tilemapdata.c b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/tilemapdata.c new file mode 100644 index 0000000..90eefa2 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/tilemapdata.c @@ -0,0 +1,16 @@ +// Converted using ConvTile +#include + +uint8_t tilemap_compressed[339] = { + 0x04,0x03,0x05,0x02,0x00,0x01,0x02,0x03,0x01,0xBB,0x05,0x0A,0xFB,0x08,0x00,0x06,0xEB,0x18,0x05,0x04,0x2C,0x14,0x15,0x1A,0x10,0x10,0xFE,0x05,0x0D,0x02,0xEA,0x18, + 0x0E,0xF1,0x06,0x18,0x50,0x51,0x52,0xF5,0x04,0x21,0x06,0x56,0x1F,0x1D,0x10,0x97,0x00,0x1D,0xB0,0x47,0x24,0x25,0x60,0x61,0x5D,0x62,0x3F,0x5D,0x06,0x2F,0xF3,0x5E, + 0x1B,0xD8,0x00,0x0D,0x70,0x71,0x72,0xBA,0x3F,0x06,0x92,0x56,0x54,0x5A,0x02,0xB3,0x03,0x05,0x93,0xA5,0x3F,0x03,0x16,0x92,0x41,0x59,0x5A,0x69,0x11,0x45,0x03,0x7C, + 0x3F,0x0C,0x93,0x13,0xCF,0x1C,0x0B,0xD5,0x1F,0x27,0xCD,0x3F,0x1F,0x34,0x77,0xD2,0x61,0xA6,0x1F,0x02,0x3F,0x44,0x10,0xC9,0x00,0x3E,0x61,0xD2,0x72,0x6F,0xF3,0x3F, + 0x06,0x84,0xBF,0xA3,0x99,0xE0,0x02,0xD2,0x64,0xBE,0x07,0x0F,0x49,0x3F,0x65,0x1C,0x7C,0x94,0x1F,0x70,0x73,0x4A,0x74,0xCE,0x32,0x4E,0x3F,0x91,0x17,0x3D,0x31,0x49, + 0x60,0x62,0x73,0x0A,0x03,0x3F,0x00,0x20,0x21,0x21,0x22,0x05,0x98,0x80,0x24,0x89,0x1E,0x1F,0x41,0x82,0x90,0xFF,0x70,0x0E,0x30,0x31,0x31,0x32,0xB2,0x84,0x9E,0x00, + 0x64,0x1F,0x10,0xE1,0x7F,0x40,0x53,0x54,0x42,0xC5,0x0F,0x57,0x20,0x1F,0x0E,0xCE,0x06,0x3F,0x02,0x26,0x30,0x32,0xD2,0x1B,0x87,0x0E,0x02,0xE5,0x3F,0x6A,0x97,0x7F, + 0x60,0x9F,0x1F,0x01,0x8D,0x1F,0xB9,0x3F,0x93,0x1F,0x03,0x09,0xF9,0x50,0x52,0xC7,0x05,0x3B,0x3F,0x00,0x1F,0x58,0x94,0x61,0x60,0x64,0x67,0x51,0x00,0x63,0x62,0x08, + 0x3F,0x7F,0x15,0x53,0x1F,0x8E,0xFB,0x3E,0x63,0x29,0x74,0x71,0x00,0x72,0x53,0x2F,0x2D,0x3F,0x00,0x5F,0x00,0x38,0xFB,0xD1,0xAD,0xD4,0x17,0xE9,0x90,0x7D,0x3F,0x36, + 0xCE,0x1F,0x94,0x74,0xAD,0x68,0x03,0x9F,0x1F,0x1D,0xE6,0x3A,0x07,0xA9,0x1F,0xE6,0x00,0xA9,0x2E,0x7D,0x65,0x3F,0x21,0x92,0x00,0x43,0x44,0x22,0x06,0x22,0x4F,0xDA, + 0x6C,0x93,0x08,0x3F,0x45,0x41,0x25,0x00,0x42,0x9C,0x39,0x46,0xC8,0x43,0xEE,0xE0,0x5D,0x00,0x10 +}; \ No newline at end of file diff --git a/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/tilemapdata.h b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/tilemapdata.h new file mode 100644 index 0000000..af369c7 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/tilemapdata.h @@ -0,0 +1,9 @@ +// Converted using ConvTile +// This file contains all the tilemap sources for easier inclusion in a project +#ifndef tilemapdata_header +#define tilemapdata_header +#include + +extern uint8_t tilemap_compressed[339]; + +#endif diff --git a/frontends/calculator/CEdev/examples/hello_world/makefile b/frontends/calculator/CEdev/examples/hello_world/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/hello_world/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/hello_world/readme.md b/frontends/calculator/CEdev/examples/hello_world/readme.md new file mode 100644 index 0000000..880be97 --- /dev/null +++ b/frontends/calculator/CEdev/examples/hello_world/readme.md @@ -0,0 +1,9 @@ +### Hello World Demo + +This is a simple demo to demonstrate displaying text using the TI-OS rotuines. + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. diff --git a/frontends/calculator/CEdev/examples/hello_world/screenshot.png b/frontends/calculator/CEdev/examples/hello_world/screenshot.png new file mode 100644 index 0000000..bc51f39 Binary files /dev/null and b/frontends/calculator/CEdev/examples/hello_world/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/hello_world/src/main.c b/frontends/calculator/CEdev/examples/hello_world/src/main.c new file mode 100644 index 0000000..333dcdc --- /dev/null +++ b/frontends/calculator/CEdev/examples/hello_world/src/main.c @@ -0,0 +1,48 @@ +/* Keep these headers */ +#include +#include +#include +#include + +/* Standard headers */ +#include +#include +#include +#include + +/* Put function prototypes here */ +void printText(const char *text, uint8_t x, uint8_t y); +void printTextSmall(const char *text, uint8_t xpos, uint8_t ypos); + +/* Put all your code here */ +void main(void) { + /* uint8_t is an unsigned integer that can range from 0-255. */ + /* It performs faster than just an int, so try to use it (or int8_t) when possible */ + uint8_t count; + + /* Initialize some strings */ + const char *HelloWorld = "Hello World!"; + const char *Welcome = "Welcome to C!"; + + /* Clear the homescreen */ + os_ClrHome(); + + /* Print a few strings */ + printText(HelloWorld, 0, 0); + printText(Welcome, 0, 1); + + /* Wait for a key press */ + while (!os_GetCSC()); +} + +/* Draw text on the homescreen at the given X/Y location */ +void printText(const char *text, uint8_t xpos, uint8_t ypos) { + os_SetCursorPos(ypos, xpos); + os_PutStrFull(text); +} + +/* Draw small text at the given X/Y location */ +void printTextSmall(const char *text, uint8_t xpos, uint8_t ypos) { + os_FontSelect(0); // sets small font (1 == big, see docs) + os_FontDrawText(text, xpos, ypos); +} diff --git a/frontends/calculator/CEdev/examples/keypad_arrows/autotester.json b/frontends/calculator/CEdev/examples/keypad_arrows/autotester.json new file mode 100644 index 0000000..c81becf --- /dev/null +++ b/frontends/calculator/CEdev/examples/keypad_arrows/autotester.json @@ -0,0 +1,61 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|500", + "key|down", + "hash|1", + "delay|200", + "key|right", + "hash|2", + "delay|200", + "key|up", + "hash|3", + "delay|200", + "key|left", + "hash|4", + "delay|200", + "key|2nd", + "hashWait|5" + ], + "hashes": { + "1": { + "description": "The screen is black", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "AF74BFCB" ] + }, + "2": { + "description": "The screen is red", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "D2E7DAC8" ] + }, + "3": { + "description": "The screen is white", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "3132DE74" ] + }, + "4": { + "description": "The screen is red (other)", + "start": "vram_start", + "size": "vram_8_size", + "expected_CRCs": [ "74B02578" ] + }, + "5": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/keypad_arrows/makefile b/frontends/calculator/CEdev/examples/keypad_arrows/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/keypad_arrows/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/keypad_arrows/readme.md b/frontends/calculator/CEdev/examples/keypad_arrows/readme.md new file mode 100644 index 0000000..698dd4e --- /dev/null +++ b/frontends/calculator/CEdev/examples/keypad_arrows/readme.md @@ -0,0 +1,10 @@ +### Keypad Arrow Key Demo + +This demo changes the color of the screen depending on which arrow keys are pressed. + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/keypad_arrows/screenshot.gif b/frontends/calculator/CEdev/examples/keypad_arrows/screenshot.gif new file mode 100644 index 0000000..7d1886c Binary files /dev/null and b/frontends/calculator/CEdev/examples/keypad_arrows/screenshot.gif differ diff --git a/frontends/calculator/CEdev/examples/keypad_arrows/src/main.c b/frontends/calculator/CEdev/examples/keypad_arrows/src/main.c new file mode 100644 index 0000000..c4f7adf --- /dev/null +++ b/frontends/calculator/CEdev/examples/keypad_arrows/src/main.c @@ -0,0 +1,49 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include + +/* Function Prototypes */ +void fill_screen(uint8_t color); + +void main(void) { + /* Key variable */ + kb_key_t key; + + /* Loop until 2nd is pressed */ + do { + /* Update kb_Data */ + kb_Scan(); + + /* Load group 7 registers */ + key = kb_Data[7]; + + switch (key) { + case kb_Down: /* Change screen color to black */ + fill_screen(0x00); + break; + case kb_Right: /* Change screen color to red */ + fill_screen(0xE0); + break; + case kb_Up: /* Change screen color to white */ + fill_screen(0xFF); + break; + case kb_Left: /* Change screen color to a different red */ + fill_screen(0xC0); + break; + default: + break; + } + } while (kb_Data[1] != kb_2nd); +} + +/* Simple way to fill the screen with a given color */ +void fill_screen(uint8_t color) { + memset(lcd_Ram, color, LCD_SIZE); +} diff --git a/frontends/calculator/CEdev/examples/keypad_multiple_keys/autotester.json b/frontends/calculator/CEdev/examples/keypad_multiple_keys/autotester.json new file mode 100644 index 0000000..ea6581f --- /dev/null +++ b/frontends/calculator/CEdev/examples/keypad_multiple_keys/autotester.json @@ -0,0 +1,62 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|500", + "key|down", + "hash|1", + "delay|200", + "key|right", + "hash|2", + "delay|200", + "key|up", + "hash|3", + "delay|200", + "key|left", + "hash|4", + "delay|200", + "key|2nd", + "delay|300", + "hashWait|5" + ], + "hashes": { + "1": { + "description": "The screen shows Down", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "349F4775" ] + }, + "2": { + "description": "The screen shows Right", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "349F4775" ] + }, + "3": { + "description": "The screen shows Up", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "349F4775" ] + }, + "4": { + "description": "The screen shows Left", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "349F4775" ] + }, + "5": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/keypad_multiple_keys/makefile b/frontends/calculator/CEdev/examples/keypad_multiple_keys/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/keypad_multiple_keys/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/keypad_multiple_keys/readme.md b/frontends/calculator/CEdev/examples/keypad_multiple_keys/readme.md new file mode 100644 index 0000000..170f907 --- /dev/null +++ b/frontends/calculator/CEdev/examples/keypad_multiple_keys/readme.md @@ -0,0 +1,10 @@ +### Keypad Multiple Keys Demo + +This demo shows how to interpret multiple keypresses at the same time + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/keypad_multiple_keys/screenshot.gif b/frontends/calculator/CEdev/examples/keypad_multiple_keys/screenshot.gif new file mode 100644 index 0000000..65ca1f8 Binary files /dev/null and b/frontends/calculator/CEdev/examples/keypad_multiple_keys/screenshot.gif differ diff --git a/frontends/calculator/CEdev/examples/keypad_multiple_keys/src/main.c b/frontends/calculator/CEdev/examples/keypad_multiple_keys/src/main.c new file mode 100644 index 0000000..fbe3ffa --- /dev/null +++ b/frontends/calculator/CEdev/examples/keypad_multiple_keys/src/main.c @@ -0,0 +1,60 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include + +/* Function prototypes */ +void printText(int8_t xpos, int8_t ypos, const char *text); + +void main(void) { + /* Key variable */ + kb_key_t key; + const char *erase_string = " "; + + /* Clear the homescreen */ + os_ClrHome(); + + /* Loop until 2nd is pressed */ + do { + + /* Update kb_Data */ + kb_Scan(); + + key = kb_Data[7]; + + /* Print the current arrow key input */ + if (key & kb_Down) { + printText(0, 0, "Down"); + } else { + printText(0, 0, erase_string); + } + if (key & kb_Up) { + printText(0, 1, "Up"); + } else { + printText(0, 1, erase_string); + } + if (key & kb_Left) { + printText(0, 2, "Left"); + } else { + printText(0, 2, erase_string); + } + if (key & kb_Right) { + printText(0, 3, "Right"); + } else { + printText(0, 3, erase_string); + } + + } while (kb_Data[1] != kb_2nd); +} + +/* Draw text on the homescreen at the given X/Y location */ +void printText(int8_t xpos, int8_t ypos, const char *text) { + os_SetCursorPos(ypos, xpos); + os_PutStrFull(text); +} diff --git a/frontends/calculator/CEdev/examples/lcd_fade/makefile b/frontends/calculator/CEdev/examples/lcd_fade/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/lcd_fade/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/lcd_fade/readme.md b/frontends/calculator/CEdev/examples/lcd_fade/readme.md new file mode 100644 index 0000000..caa170e --- /dev/null +++ b/frontends/calculator/CEdev/examples/lcd_fade/readme.md @@ -0,0 +1,8 @@ +### LCD Fade Demo + +This demo demonstrates controlling the LCD backlight by fading in and out + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/lcd_fade/src/main.c b/frontends/calculator/CEdev/examples/lcd_fade/src/main.c new file mode 100644 index 0000000..b529d01 --- /dev/null +++ b/frontends/calculator/CEdev/examples/lcd_fade/src/main.c @@ -0,0 +1,29 @@ +#include +#include +#include +#include + +#include +#include +#include + +void main(void) { + uint8_t i, level; + + /* Store the current brightness level */ + level = lcd_BacklightLevel; + + /* Change lcd brightness levels */ + for (i = level; i > 0; i--) { + boot_WaitShort(); + lcd_BacklightLevel = i; + } + + for (i = 0; i < 255; i++) { + boot_WaitShort(); + lcd_BacklightLevel = i; + } + + /* Restore the old brightness level */ + lcd_BacklightLevel = level; +} diff --git a/frontends/calculator/CEdev/examples/lcd_fill/makefile b/frontends/calculator/CEdev/examples/lcd_fill/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/lcd_fill/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/lcd_fill/readme.md b/frontends/calculator/CEdev/examples/lcd_fill/readme.md new file mode 100644 index 0000000..233ffc8 --- /dev/null +++ b/frontends/calculator/CEdev/examples/lcd_fill/readme.md @@ -0,0 +1,10 @@ +### Fill Screen Demo + +This is a simple demo to demonstrate filling the screen with a certain color. + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/lcd_fill/screenshot.gif b/frontends/calculator/CEdev/examples/lcd_fill/screenshot.gif new file mode 100644 index 0000000..ac2fcfa Binary files /dev/null and b/frontends/calculator/CEdev/examples/lcd_fill/screenshot.gif differ diff --git a/frontends/calculator/CEdev/examples/lcd_fill/src/main.c b/frontends/calculator/CEdev/examples/lcd_fill/src/main.c new file mode 100644 index 0000000..ee96bf7 --- /dev/null +++ b/frontends/calculator/CEdev/examples/lcd_fill/src/main.c @@ -0,0 +1,30 @@ +#include +#include +#include +#include + +#include +#include +#include + +/* Function prototypes */ +void fill_screen(uint8_t color); + +void main(void) { + /* Turn the whole screen black */ + fill_screen(0x00); + + /* Wait for a key press */ + while (!os_GetCSC()); + + /* Turn the whole screen red */ + fill_screen(0xe0); + + /* Wait for a key press */ + while (!os_GetCSC()); +} + +/* Fill the screen with a given color */ +void fill_screen(uint8_t color) { + memset(lcd_Ram, color, LCD_SIZE); +} diff --git a/frontends/calculator/CEdev/examples/makefile b/frontends/calculator/CEdev/examples/makefile new file mode 100644 index 0000000..852ed6c --- /dev/null +++ b/frontends/calculator/CEdev/examples/makefile @@ -0,0 +1,12 @@ +#----------------------------------------------- +# This makefile builds all the example projects +#----------------------------------------------- + +DIRS = $(wildcard */makefile) + +all clean gfx .PHONY: $(DIRS) + +$(DIRS): + $(MAKE) -C $(dir $@) $(MAKECMDGOALS) + +.PHONY: all clean gfx diff --git a/frontends/calculator/CEdev/examples/os_input/autotester.json b/frontends/calculator/CEdev/examples/os_input/autotester.json new file mode 100644 index 0000000..da88dfe --- /dev/null +++ b/frontends/calculator/CEdev/examples/os_input/autotester.json @@ -0,0 +1,38 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "delay|700", + "key|1", + "delay|200", + "key|2", + "delay|200", + "key|enter", + "hashWait|1", + "key|enter", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "Output should be 'N is 12.'", + "start": "0xD44B00", + "size": "128000", + "size_comment": "offset + 320x200x2 because we don't want the busy indicator", + "expected_CRCs": [ "44FD49F5" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} + diff --git a/frontends/calculator/CEdev/examples/os_input/makefile b/frontends/calculator/CEdev/examples/os_input/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/os_input/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/os_input/readme.md b/frontends/calculator/CEdev/examples/os_input/readme.md new file mode 100644 index 0000000..e0f6d7b --- /dev/null +++ b/frontends/calculator/CEdev/examples/os_input/readme.md @@ -0,0 +1,9 @@ +### OS Input Demo + +This demo shows how to get an input string from the OS. + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. diff --git a/frontends/calculator/CEdev/examples/os_input/screenshot.png b/frontends/calculator/CEdev/examples/os_input/screenshot.png new file mode 100644 index 0000000..546ce05 Binary files /dev/null and b/frontends/calculator/CEdev/examples/os_input/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/os_input/src/main.c b/frontends/calculator/CEdev/examples/os_input/src/main.c new file mode 100644 index 0000000..7674897 --- /dev/null +++ b/frontends/calculator/CEdev/examples/os_input/src/main.c @@ -0,0 +1,36 @@ +#include +#include +#include +#include +#include + +/* Make sure to adjust those sizes according to your usage! */ +#define INPUT_SIZE 10 +#define RESP_SIZE 20 + +/* Draw text on the homescreen at the given X/Y location */ +void print(const char* text, uint8_t xpos, uint8_t ypos) { + os_SetCursorPos(ypos, xpos); + os_PutStrFull(text); +} + +void main(void) { + char inputBuffer[INPUT_SIZE]; + char response[RESP_SIZE]; + + /* Clear the homescreen */ + os_ClrHome(); + + /* Ask the user to type a string, which gets stored in `inputBuf` */ + os_GetStringInput("What is N? ", inputBuffer, INPUT_SIZE); + + /* Build the user response */ + sprintf(response, "N is %s.", inputBuffer); + + /* Clear the homescreen and display the built response */ + os_ClrHome(); + print(response, 0, 0); + + /* Wait for a key press before quitting */ + while (!os_GetCSC()); +} diff --git a/frontends/calculator/CEdev/examples/random/autotester.json b/frontends/calculator/CEdev/examples/random/autotester.json new file mode 100644 index 0000000..b41ad50 --- /dev/null +++ b/frontends/calculator/CEdev/examples/random/autotester.json @@ -0,0 +1,30 @@ +{ + "rom": "84pce_515.rom", + "transfer_files": [ + "bin/DEMO.8xp" + ], + "target": { + "name": "DEMO", + "isASM": true + }, + "sequence": [ + "action|launch", + "hashWait|1", + "key|enter", + "hashWait|2" + ], + "hashes": { + "1": { + "description": "VRAM filled with output of random()", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "5FB4A617" ] + }, + "2": { + "description": "Back to the home screen (exit check)", + "start": "vram_start", + "size": "vram_16_size", + "expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44" ] + } + } +} diff --git a/frontends/calculator/CEdev/examples/random/bin/DEMO.8xp b/frontends/calculator/CEdev/examples/random/bin/DEMO.8xp new file mode 100644 index 0000000..fabdb82 Binary files /dev/null and b/frontends/calculator/CEdev/examples/random/bin/DEMO.8xp differ diff --git a/frontends/calculator/CEdev/examples/random/bin/DEMO.bin b/frontends/calculator/CEdev/examples/random/bin/DEMO.bin new file mode 100644 index 0000000..fa7ca25 Binary files /dev/null and b/frontends/calculator/CEdev/examples/random/bin/DEMO.bin differ diff --git a/frontends/calculator/CEdev/examples/random/bin/DEMO.map b/frontends/calculator/CEdev/examples/random/bin/DEMO.map new file mode 100644 index 0000000..294fb77 --- /dev/null +++ b/frontends/calculator/CEdev/examples/random/bin/DEMO.map @@ -0,0 +1,143 @@ +Segment Base Top High Length +-------- ------ ------ ------ ------- +icon D1A882 D1A882 0h +launcher D1A882 D1A882 0h +libs D1A882 D1A882 0h +startup D1A882 D1A8C1 3Fh +cleanup D1A8C1 D1A8D5 14h +exit D1A8D5 D1A8DB 6h +code D1A8DB D1A9A0 C5h +data D1A9A0 D1A9B0 10h +strsect D1A9B0 D1A9B0 0h +text D1A9B0 D1A9B0 0h +bss D031F6 D031F6 D13FD6 0h +header D1A87F D1A882 3h + +Label Value +------------------------- ------ +_os_DisableHomeTextBuffer = D1A8DB +_os_EnableHomeTextBuffer = D1A8ED +_random = D1A8FF +__state = D1A9A0 +_boot_GetBootMajorVer = 000080 +_boot_GetHardwareVer = 000084 +_boot_GetBootMinorVer = 00008C +_boot_DebugPrintf = 0000B4 +_boot_ClearVRAM = 000374 +_boot_TurnOff = 000388 +_boot_NewLine = 000390 +_boot_Set6MHzMode = 00039C +_boot_Set48MHzMode = 0003A0 +_boot_Set6MHzModeI = 0003A4 +_boot_Set48MHzModeI = 0003A8 +_boot_GetBatteryStatus = 0003B0 +_boot_WaitShort = 0003B4 +_boot_CheckOnPressed = 00057C +_boot_SetDate = 000598 +_boot_GetDate = 0005A8 +_boot_GetTime = 0005B0 +_boot_SetTime = 0005B4 +_boot_IsAfterNoon = 0005C8 +_os_NewLine = 0207F0 +_os_PushErrorHandler = 021C78 +_os_PopErrorHandler = 021C7C +_os_ThrowError = 021C80 +_os_RealCopy = 021C84 +_os_RealAsinRad = 021C88 +_os_RealAcosRad = 021C8C +_os_RealAtanRad = 021C90 +_os_RealAdd = 021C94 +_os_CplxSquare = 021C98 +_os_RealCompare = 021C9C +_os_RealCosRad = 021CA0 +_os_RealRadToDeg = 021CA4 +_os_RealDiv = 021CA8 +_os_RealExp = 021CAC +_os_RealFloor = 021CB0 +_os_RealToStr = 021CB4 +_os_RealFrac = 021CB8 +_os_RealGcd = 021CBC +_os_RealRoundInt = 021CC0 +_os_RealLcm = 021CC4 +_os_RealLog = 021CC8 +_os_RealMax = 021CCC +_os_RealMin = 021CD0 +_os_RealMul = 021CD4 +_os_RealNcr = 021CD8 +_os_RealNeg = 021CDC +_os_RealNpr = 021CE0 +_os_RealPow = 021CE4 +_os_RealDegToRad = 021CE8 +_os_RealRandInt = 021CEC +_os_RealInv = 021CF0 +_os_RealMod = 021CF4 +_os_RealRound = 021CF8 +_os_RealSinRad = 021CFC +_os_RealSqrt = 021D00 +_os_RealSub = 021D04 +_os_RealTanRad = 021D08 +_os_StrToReal = 021D0C +_os_RealInt = 021D10 +_os_SetFlagBits = 021D14 +_os_ResetFlagBits = 021D18 +_os_TestFlagBits = 021D1C +_os_SetFlagByte = 021D20 +_os_GetFlagByte = 021D24 +_os_GetCursorPos = 021D28 +_os_PutStrFull = 021D2C +_os_PutStrLine = 021D30 +_os_SetCursorPos = 021D34 +_os_AppInit = 021D40 +_os_GetKey = 021D38 +_os_GetCSC = 021D3C +_os_DisableCursor = 021DE4 +_os_EnableCursor = 021DE8 +_os_FontDrawText = 021E00 +_os_FontGetHeight = 021E14 +_os_FontGetWidth = 021E18 +_os_InitDrawing = 021E1C +_os_SetDrawBGColor = 021E20 +_os_SetDrawFGColor = 021E24 +_os_FontSelect = 021E28 +_os_RclAns = 021E70 +_os_SetTimer1 = 021EC8 +_os_DisableTimer1 = 021ECC +_os_GetSystemStats = 021ED4 +_os_GetDrawBGColor = 021EE4 +_os_GetDrawFGColor = 021EE8 +_os_FontGetID = 021EEC +_os_RealToInt24 = 021EF4 +_os_Int24ToReal = 021EF8 +_os_ForceCmdNoChar = 021FA8 +_os_GetSymTablePtr = 021FB0 +_os_NextSymEntry = 021FB4 +_os_ChkFindSym = 021FB8 +_os_MemChk = 021FF0 +_os_SetTimer2 = 022080 +_os_DisableTimer2 = 022084 +_os_FloatToReal = 022170 +_os_RealToFloat = 022174 +_os_FontDrawTransText = 022178 +_os_CreateAppVar = 022184 +_asm_MoveDown = 0207F4 +_asm_MoveUp = 020800 +_asm_ClrLCDFull = 020808 +_asm_ClrLCD = 02080C +_asm_ClrTxtShd = 020818 +_asm_HomeUp = 020828 +_asm_RunIndicOn = 020844 +_asm_RunIndicOff = 020848 +_asm_DelRes = 020E5C +_asm_DisableAPD = 021134 +_asm_EnableAPD = 021138 +_asm_DrawStatusBar = 021A3C +_asm_ArcChk = 022040 +__frameset = D1A956 +__ccleanup = D1A8C1 +_errno = D008DC +_init = D1A882 +_exit = D1A8D7 +__exit = D1A8B0 +__exitsp = D1A8B0 +__errsp = D1A8B0 +_main = D1A964 diff --git a/frontends/calculator/CEdev/examples/random/makefile b/frontends/calculator/CEdev/examples/random/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/random/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/random/obj/main.src b/frontends/calculator/CEdev/examples/random/obj/main.src new file mode 100644 index 0000000..9aa4a54 --- /dev/null +++ b/frontends/calculator/CEdev/examples/random/obj/main.src @@ -0,0 +1,69 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -noreduceopt -nomodsect -peephole -globalopt +; -localcse -const=ROM + FILE "SRC\MAIN.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 #include +; 4 #include +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 +; 10 void main(void) { +_main: + LD HL,-3 + CALL __frameset +; 11 /* Fill VRAM with random data */ +; 12 uint32_t *lcd_Ram_i, *lcd_Ram_end = (uint32_t *) ((int) lcd_Ram + LCD_SIZE); +; 13 for (lcd_Ram_i = (uint32_t *) lcd_Ram; lcd_Ram_i < lcd_Ram_end; lcd_Ram_i++) { + LD BC,13893632 + LD (IX+-3),BC + JR L_3 +L_1: +; 14 *lcd_Ram_i = random(); + CALL _random + LD IY,(IX+-3) + LD (IY),HL + LD (IY+3),E + LEA IY,IY+4 + LD (IX+-3),IY +; 15 } +L_3: + LD BC,14047232 + LD HL,(IX+-3) + OR A,A + SBC HL,BC + JR C,L_1 +; 16 +; 17 /* Wait for a key press */ +; 18 while (!os_GetCSC()); +L_5: + CALL _os_GetCSC + OR A,A + JR Z,L_5 +; 19 } + LD SP,IX + POP IX + RET + + +;**************************** _main *************************** +;Name Addr/Register Size Type +;_os_GetCSC IMPORT ----- function +;_random IMPORT ----- function +;lcd_Ram_i IX-3 3 variable + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF _os_GetCSC:ROM + XREF _random:ROM + XREF __frameset:ROM + XDEF _main + END diff --git a/frontends/calculator/CEdev/examples/random/readme.md b/frontends/calculator/CEdev/examples/random/readme.md new file mode 100644 index 0000000..776d1f8 --- /dev/null +++ b/frontends/calculator/CEdev/examples/random/readme.md @@ -0,0 +1,9 @@ +### Random Fill Screen Demo + +This is a simple demo to demonstrate filling the screen with random colors. + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. diff --git a/frontends/calculator/CEdev/examples/random/screenshot.png b/frontends/calculator/CEdev/examples/random/screenshot.png new file mode 100644 index 0000000..409044e Binary files /dev/null and b/frontends/calculator/CEdev/examples/random/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/random/src/main.c b/frontends/calculator/CEdev/examples/random/src/main.c new file mode 100644 index 0000000..83477e4 --- /dev/null +++ b/frontends/calculator/CEdev/examples/random/src/main.c @@ -0,0 +1,19 @@ +#include +#include +#include +#include + +#include +#include +#include + +void main(void) { + /* Fill VRAM with random data */ + uint32_t *lcd_Ram_i, *lcd_Ram_end = (uint32_t *) ((int) lcd_Ram + LCD_SIZE); + for (lcd_Ram_i = (uint32_t *) lcd_Ram; lcd_Ram_i < lcd_Ram_end; lcd_Ram_i++) { + *lcd_Ram_i = random(); + } + + /* Wait for a key press */ + while (!os_GetCSC()); +} diff --git a/frontends/calculator/CEdev/examples/random/test/expected.bin b/frontends/calculator/CEdev/examples/random/test/expected.bin new file mode 100644 index 0000000..4e42d97 Binary files /dev/null and b/frontends/calculator/CEdev/examples/random/test/expected.bin differ diff --git a/frontends/calculator/CEdev/examples/real_time_clock/makefile b/frontends/calculator/CEdev/examples/real_time_clock/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/real_time_clock/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/real_time_clock/readme.md b/frontends/calculator/CEdev/examples/real_time_clock/readme.md new file mode 100644 index 0000000..08554eb --- /dev/null +++ b/frontends/calculator/CEdev/examples/real_time_clock/readme.md @@ -0,0 +1,10 @@ +### Real Time Clock Demo + +This demo demonstrates how to use the basics of the real time clock (RTC) + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/real_time_clock/screenshot.gif b/frontends/calculator/CEdev/examples/real_time_clock/screenshot.gif new file mode 100644 index 0000000..3e81f11 Binary files /dev/null and b/frontends/calculator/CEdev/examples/real_time_clock/screenshot.gif differ diff --git a/frontends/calculator/CEdev/examples/real_time_clock/src/main.c b/frontends/calculator/CEdev/examples/real_time_clock/src/main.c new file mode 100644 index 0000000..1aa24cb --- /dev/null +++ b/frontends/calculator/CEdev/examples/real_time_clock/src/main.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include + +#include +#include +#include + +unsigned int seconds = 0; + +void main(void) { + + /* Clear the homescreen */ + os_ClrHome(); + + /* Randomize things */ + srand(rtc_Time()); + + /* Configure the RTC */ + rtc_LoadSeconds = rtc_LoadMinutes = rtc_LoadHours = rtc_LoadDays = 0; + rtc_Control = RTC_ENABLE | RTC_LOAD | RTC_SEC_INT_SOURCE; + + /* Wait for the RTC to load in the new values and then acknowledge all the interrupts */ + while (rtc_IsBusy()); + rtc_IntAcknowledge = RTC_INT_MASK; + + /* Wait until 5 seconds have passed */ + while (seconds < 5) { + + /* If a second passed, increment the second counter */ + if (rtc_IntStatus & RTC_SEC_INT) { + memset(lcd_Ram, randInt(0,255), LCD_SIZE); + seconds++; + + rtc_IntAcknowledge = rtc_IntStatus; + } + } +} diff --git a/frontends/calculator/CEdev/examples/second_counter/makefile b/frontends/calculator/CEdev/examples/second_counter/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/second_counter/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/second_counter/readme.md b/frontends/calculator/CEdev/examples/second_counter/readme.md new file mode 100644 index 0000000..9211916 --- /dev/null +++ b/frontends/calculator/CEdev/examples/second_counter/readme.md @@ -0,0 +1,10 @@ +### Second Counter Demo + +This demo demonstrates using the hardware timers, and makes a simple second counter + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/second_counter/screenshot.gif b/frontends/calculator/CEdev/examples/second_counter/screenshot.gif new file mode 100644 index 0000000..7175ab5 Binary files /dev/null and b/frontends/calculator/CEdev/examples/second_counter/screenshot.gif differ diff --git a/frontends/calculator/CEdev/examples/second_counter/src/main.c b/frontends/calculator/CEdev/examples/second_counter/src/main.c new file mode 100644 index 0000000..8a4ebc5 --- /dev/null +++ b/frontends/calculator/CEdev/examples/second_counter/src/main.c @@ -0,0 +1,43 @@ +#include +#include +#include +#include + +#include +#include +#include + +#define ONE_SECOND 32768/1 +#define HALF_SECOND 32768/2 +#define QUARTER_SECOND 32768/4 + +/* Put all your code here */ +void main(void) { + unsigned seconds = 0; + char str[10]; + + /* Clear the homescreen */ + os_ClrHome(); + + /* Disable the timer so it doesn't run when we don't want it to be running */ + timer_Control = TIMER1_DISABLE; + + /* By using the 32768 kHz clock, we can count for exactly 1 second here, or a different interval of time */ + timer_1_ReloadValue = timer_1_Counter = ONE_SECOND; + + /* Enable the timer, set it to the 32768 kHz clock, enable an interrupt once it reaches 0, and make it count down */ + timer_Control = TIMER1_ENABLE | TIMER1_32K | TIMER1_0INT | TIMER1_DOWN; + + do { + /* If the timer is reloaded, we reached 0 */ + if (timer_IntStatus & TIMER1_RELOADED) { + /* Print a string */ + sprintf(str, "%u", seconds++); + os_SetCursorPos(0, 0); + os_PutStrFull(str); + + /* Acknowledge the reload */ + timer_IntAcknowledge = TIMER1_RELOADED; + } + } while (!os_GetCSC()); +} diff --git a/frontends/calculator/CEdev/examples/second_counter2/makefile b/frontends/calculator/CEdev/examples/second_counter2/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/second_counter2/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/second_counter2/readme.md b/frontends/calculator/CEdev/examples/second_counter2/readme.md new file mode 100644 index 0000000..8913644 --- /dev/null +++ b/frontends/calculator/CEdev/examples/second_counter2/readme.md @@ -0,0 +1,10 @@ +### Second Counter 2 Demo + +This demo demonstrates using more uses of the timers + +![Screenshot](screenshot.gif) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. + diff --git a/frontends/calculator/CEdev/examples/second_counter2/screenshot.gif b/frontends/calculator/CEdev/examples/second_counter2/screenshot.gif new file mode 100644 index 0000000..dd167ab Binary files /dev/null and b/frontends/calculator/CEdev/examples/second_counter2/screenshot.gif differ diff --git a/frontends/calculator/CEdev/examples/second_counter2/src/main.c b/frontends/calculator/CEdev/examples/second_counter2/src/main.c new file mode 100644 index 0000000..dff02f2 --- /dev/null +++ b/frontends/calculator/CEdev/examples/second_counter2/src/main.c @@ -0,0 +1,57 @@ +#include +#include +#include +#include + +#include +#include +#include + +#define ONE_SECOND 32768/1 +#define HALF_SECOND 32768/2 +#define QUARTER_SECOND 32768/4 + +/* Function Prototypes */ +void reset_counter(void); + +void main(void) { + unsigned int count = 0; + char str[10]; + + timer_1_MatchValue_1 = ONE_SECOND; + + /* Clear the homescreen */ + os_ClrHome(); + + /* Reset the counter */ + reset_counter(); + + do { + + /* Poll until we reach the match value */ + if (timer_IntStatus & TIMER1_MATCH1) { + /* Print the count */ + sprintf(str, "%u", count++); + os_SetCursorPos(0, 0); + os_PutStrFull(str); + + /* Reset the count */ + reset_counter(); + + /* Acknowledge the interrupt */ + timer_IntStatus = TIMER1_MATCH1; + } + + } while (count < 5); +} + +void reset_counter(void) { + /* Disable the timer so it doesn't run when we don't want it to be running */ + timer_Control = TIMER1_DISABLE; + + /* By using the 32768 kHz clock, we can count for exactly 1 second here, or a different interval of time */ + timer_1_Counter = 0; + + /* Enable the timer, set it to the 32768 kHz clock, enable an interrupt once it reaches 0, and make it count down */ + timer_Control = TIMER1_ENABLE | TIMER1_32K | TIMER1_NOINT | TIMER1_UP; +} diff --git a/frontends/calculator/CEdev/examples/stopwatch/makefile b/frontends/calculator/CEdev/examples/stopwatch/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/stopwatch/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/stopwatch/readme.md b/frontends/calculator/CEdev/examples/stopwatch/readme.md new file mode 100644 index 0000000..a10bdb9 --- /dev/null +++ b/frontends/calculator/CEdev/examples/stopwatch/readme.md @@ -0,0 +1,10 @@ +### Stopwatch Demo + +This demo demonstrates using the hardware timers to make a simple stopwatch +displaying millisecond precision. + +![Screenshot](screenshot.png) + +--- + +This demo is a part of the C SDK Toolchain for use on the CE. diff --git a/frontends/calculator/CEdev/examples/stopwatch/screenshot.png b/frontends/calculator/CEdev/examples/stopwatch/screenshot.png new file mode 100644 index 0000000..3642282 Binary files /dev/null and b/frontends/calculator/CEdev/examples/stopwatch/screenshot.png differ diff --git a/frontends/calculator/CEdev/examples/stopwatch/src/main.c b/frontends/calculator/CEdev/examples/stopwatch/src/main.c new file mode 100644 index 0000000..3ec82b1 --- /dev/null +++ b/frontends/calculator/CEdev/examples/stopwatch/src/main.c @@ -0,0 +1,60 @@ +#include +#include +#include +#include + +#include +#include +#include + +/* Print a stopwatch value on the home screen */ +void print(float elapsed) { + /* Float format for printf may be unimplemented, so go through an OS real */ + real_t elapsed_real; + + /* Max stopwatch value is (2^32 - 1) / 32768 = 131072.00, */ + /* so create a buffer with room for 9 characters plus a null terminator */ + char str[10]; + + /* If the elapsed time is small enough that the OS would print it using */ + /* scientific notation, force it down to zero before conversion */ + elapsed_real = os_FloatToReal(elapsed <= 0.001f ? 0.0f : elapsed); + + /* Convert the elapsed time real to a string */ + os_RealToStr(str, &elapsed_real, 8, 1, 2); + + /* Print the string */ + os_SetCursorPos(0, 0); + os_PutStrFull(str); +} + +/* Put all your code here */ +void main(void) { + /* Clear the homescreen */ + os_ClrHome(); + + /* Display an initial time of zero */ + print(0.0f); + + /* Disable the timer */ + timer_Control = TIMER1_DISABLE; + + /* Reset the timer's counter */ + timer_1_Counter = 0; + + /* Wait for a key press */ + while (!os_GetCSC()); + + /* Enable the timer while setting it to 32768 KHz and making it count up */ + timer_Control = TIMER1_ENABLE | TIMER1_32K | TIMER1_UP; + + /* Continue running until a key is pressed */ + do { + /* Calculate and print the elapsed time */ + float elapsed = (float)atomic_load_increasing_32(&timer_1_Counter) / 32768; + print(elapsed); + } while (!os_GetCSC()); + + /* Wait for a key press */ + while (!os_GetCSC()); +} diff --git a/frontends/calculator/CEdev/examples/template/iconc.png b/frontends/calculator/CEdev/examples/template/iconc.png new file mode 100644 index 0000000..125ca62 Binary files /dev/null and b/frontends/calculator/CEdev/examples/template/iconc.png differ diff --git a/frontends/calculator/CEdev/examples/template/makefile b/frontends/calculator/CEdev/examples/template/makefile new file mode 100644 index 0000000..1f1b36b --- /dev/null +++ b/frontends/calculator/CEdev/examples/template/makefile @@ -0,0 +1,15 @@ +# ---------------------------- +# Set NAME to the program name +# Set ICON to the png icon file name +# Set DESCRIPTION to display within a compatible shell +# Set COMPRESSED to "YES" to create a compressed program +# ---------------------------- + +NAME ?= DEMO +COMPRESSED ?= NO +ICON ?= iconc.png +DESCRIPTION ?= "C SDK Demo" + +# ---------------------------- + +include $(CEDEV)/include/.makefile diff --git a/frontends/calculator/CEdev/examples/template/readme.md b/frontends/calculator/CEdev/examples/template/readme.md new file mode 100644 index 0000000..093834f --- /dev/null +++ b/frontends/calculator/CEdev/examples/template/readme.md @@ -0,0 +1,14 @@ +### Template + +You can clone this directory for your own projects. + +To add code, fill in the void main() function in main.c. You can also create +your own .c and .h files and add them to the directory; the Makefile included in +this template will automatically find and compile the new .c files. + +In addition, you can also add your own .asm files, which will be detected and +added appropriately to the proper segment. + +--- + +This template is a part of the C SDK Toolchain for use on the CE. diff --git a/frontends/calculator/CEdev/examples/template/src/main.c b/frontends/calculator/CEdev/examples/template/src/main.c new file mode 100644 index 0000000..88416b7 --- /dev/null +++ b/frontends/calculator/CEdev/examples/template/src/main.c @@ -0,0 +1,30 @@ +/* + *-------------------------------------- + * Program Name: + * Author: + * License: + * Description: + *-------------------------------------- +*/ + +/* Keep these headers */ +#include +#include +#include +#include + +/* Standard headers (recommended) */ +#include +#include +#include +#include + +/* Put your function prototypes here */ + +/* Put all your globals here */ + +void main(void) { + /* Fill in the body of the main function here */ +} + +/* Put other functions here */ diff --git a/frontends/calculator/CEdev/include/.linker_script b/frontends/calculator/CEdev/include/.linker_script new file mode 100644 index 0000000..e3a1887 --- /dev/null +++ b/frontends/calculator/CEdev/include/.linker_script @@ -0,0 +1,305 @@ +symbol __low_bss = bss.base +symbol __len_bss = bss.length +symbol __heaptop = bss.high +symbol __heapbot = bss.top +order header, icon, launcher, libs, startup, cleanup, exit, code, data, strsect, text +if STATIC + srcs "../../lib/static/atof.src" + srcs "../../lib/static/ceil.src" + srcs "../../lib/static/fabs.src" + srcs "../../lib/static/acos.src" + srcs "../../lib/static/cos.src" + srcs "../../lib/static/exp.src" + srcs "../../lib/static/log.src" + srcs "../../lib/static/ufltinfo.src" + srcs "../../lib/static/pow.src" + srcs "../../lib/static/strtod.src" + srcs "../../lib/static/asin.src" + srcs "../../lib/static/sinh.src" + srcs "../../lib/static/log10.src" + srcs "../../lib/static/sin.src" + srcs "../../lib/static/atan.src" + srcs "../../lib/static/atan2.src" + srcs "../../lib/static/fmod.src" + srcs "../../lib/static/tanh.src" + srcs "../../lib/static/tan.src" + srcs "../../lib/static/frexp.src" + srcs "../../lib/static/sqrt.src" + srcs "../../lib/static/floor.src" + srcs "../../lib/static/ldexp.src" + srcs "../../lib/static/modf.src" + srcs "../../lib/static/ufltrnd.src" +else + srcs "../../lib/linked/frexp.src" + srcs "../../lib/linked/atan2.src" + srcs "../../lib/linked/atof.src" + srcs "../../lib/linked/acos.src" + srcs "../../lib/linked/sqrt.src" + srcs "../../lib/linked/atan.src" + srcs "../../lib/linked/sinh.src" + srcs "../../lib/linked/tan.src" + srcs "../../lib/linked/floor.src" + srcs "../../lib/linked/ldexp.src" + srcs "../../lib/linked/ufltrnd.src" + srcs "../../lib/linked/fabs.src" + srcs "../../lib/linked/log10.src" + srcs "../../lib/linked/strtod.src" + srcs "../../lib/linked/fmod.src" + srcs "../../lib/linked/asin.src" + srcs "../../lib/linked/exp.src" + srcs "../../lib/linked/ufltinfo.src" + srcs "../../lib/linked/cosh.src" + srcs "../../lib/linked/modf.src" + srcs "../../lib/linked/log.src" + srcs "../../lib/linked/tanh.src" + srcs "../../lib/linked/ceil.src" + srcs "../../lib/linked/cos.src" + srcs "../../lib/linked/pow.src" + srcs "../../lib/linked/sin.src" +end if +srcs "../../lib/shared/os_textbuffer.src" +srcs "../../lib/shared/debugger.src" +srcs "../../lib/shared/zx7_Decompress.src" +srcs "../../lib/shared/random.src" +srcs "../../lib/shared/atomic_load_decreasing_32.src" +srcs "../../lib/shared/removeallbreakpoints.src" +srcs "../../lib/shared/removebreakpoint.src" +srcs "../../lib/shared/srandom.src" +srcs "../../lib/shared/tice.src" +srcs "../../lib/shared/removewatchpoint.src" +srcs "../../lib/shared/atomic_load_increasing_32.src" +srcs "../../lib/shared/setwatchpoint.src" +srcs "../../lib/shared/interrupts.src" +srcs "../../lib/shared/removeallwatchpoints.src" +srcs "../../lib/shared/getstringinput.src" +srcs "../../lib/shared/dzx7_turbo.src" +srcs "../../lib/shared/atomic_load_32.src" +srcs "../../lib/shared/setwritewatchpoint.src" +srcs "../../lib/shared/setreadwatchpoint.src" +srcs "../../lib/shared/os.src" +srcs "../../lib/shared/usb.src" +srcs "../../lib/shared/setreadwritewatchpoint.src" +srcs "../../lib/shared/abort.src" +srcs "../../lib/shared/setbreakpoint.src" +srcs "../../lib/shared/dzx7_standard.src" +srcs "../../lib/shared/delay.src" +srcs "../../lib/shared/frftoub.src" +srcs "../../lib/shared/fpupop1.src" +srcs "../../lib/shared/frimulu.src" +srcs "../../lib/shared/ladd.src" +srcs "../../lib/shared/atoi.src" +srcs "../../lib/shared/idivs.src" +srcs "../../lib/shared/isnan.src" +srcs "../../lib/shared/case24d.src" +srcs "../../lib/shared/isupper.src" +srcs "../../lib/shared/memmove.src" +srcs "../../lib/shared/frameset0.src" +srcs "../../lib/shared/sneg.src" +srcs "../../lib/shared/setjmp.src" +srcs "../../lib/shared/strcspn.src" +srcs "../../lib/shared/fpdiv.src" +srcs "../../lib/shared/istiy.src" +srcs "../../lib/shared/frstof.src" +srcs "../../lib/shared/abs.src" +srcs "../../lib/shared/frsmulu.src" +srcs "../../lib/shared/strdup.src" +srcs "../../lib/shared/sprintf.src" +srcs "../../lib/shared/sldix.src" +srcs "../../lib/shared/finite.src" +srcs "../../lib/shared/lnot.src" +srcs "../../lib/shared/imulu.src" +srcs "../../lib/shared/setflag.src" +srcs "../../lib/shared/iscntrl.src" +srcs "../../lib/shared/fpupop2.src" +srcs "../../lib/shared/ishrs.src" +srcs "../../lib/shared/fpsub.src" +srcs "../../lib/shared/fpmul.src" +srcs "../../lib/shared/case24.src" +srcs "../../lib/shared/isinf.src" +srcs "../../lib/shared/bldix.src" +srcs "../../lib/shared/ldiv.src" +srcs "../../lib/shared/strcmp.src" +srcs "../../lib/shared/strcasecmp.src" +srcs "../../lib/shared/sand.src" +srcs "../../lib/shared/strrchr.src" +srcs "../../lib/shared/sshrs.src" +srcs "../../lib/shared/tolower.src" +srcs "../../lib/shared/isgraph.src" +srcs "../../lib/shared/case8d.src" +srcs "../../lib/shared/snot.src" +srcs "../../lib/shared/round.src" +srcs "../../lib/shared/seqcased.src" +srcs "../../lib/shared/frbtof.src" +srcs "../../lib/shared/fruitof.src" +srcs "../../lib/shared/fritof.src" +srcs "../../lib/shared/log2.src" +srcs "../../lib/shared/fpultof.src" +srcs "../../lib/shared/bshrs.src" +srcs "../../lib/shared/seqcase.src" +srcs "../../lib/shared/bremu.src" +srcs "../../lib/shared/lmulu.src" +srcs "../../lib/shared/strncmp.src" +srcs "../../lib/shared/frbmuls.src" +srcs "../../lib/shared/scmpzero.src" +srcs "../../lib/shared/isxdigit.src" +srcs "../../lib/shared/bdivs.src" +srcs "../../lib/shared/strndup.src" +srcs "../../lib/shared/memset.src" +srcs "../../lib/shared/strncpy.src" +srcs "../../lib/shared/itol.src" +srcs "../../lib/shared/strstr.src" +srcs "../../lib/shared/sdivs.src" +srcs "../../lib/shared/lcmpu.src" +srcs "../../lib/shared/case8.src" +srcs "../../lib/shared/indcall.src" +srcs "../../lib/shared/sqrtf.src" +srcs "../../lib/shared/sstix.src" +srcs "../../lib/shared/fpftol.src" +srcs "../../lib/shared/rand.src" +srcs "../../lib/shared/lstix.src" +srcs "../../lib/shared/lrems.src" +srcs "../../lib/shared/ildiy.src" +srcs "../../lib/shared/lmuls.src" +srcs "../../lib/shared/fppack.src" +srcs "../../lib/shared/lor.src" +srcs "../../lib/shared/icmpzero.src" +srcs "../../lib/shared/strpbrk.src" +srcs "../../lib/shared/sstiy.src" +srcs "../../lib/shared/land.src" +srcs "../../lib/shared/ldivu.src" +srcs "../../lib/shared/frsmuls.src" +srcs "../../lib/shared/strtok.src" +srcs "../../lib/shared/iand.src" +srcs "../../lib/shared/ldivs.src" +srcs "../../lib/shared/ineg.src" +srcs "../../lib/shared/stoi.src" +srcs "../../lib/shared/sremu.src" +srcs "../../lib/shared/sldiy.src" +srcs "../../lib/shared/bstiy.src" +srcs "../../lib/shared/memchr.src" +srcs "../../lib/shared/ior.src" +srcs "../../lib/shared/fpneg.src" +srcs "../../lib/shared/isascii.src" +srcs "../../lib/shared/lldix.src" +srcs "../../lib/shared/smuls.src" +srcs "../../lib/shared/smulu.src" +srcs "../../lib/shared/isspace.src" +srcs "../../lib/shared/frftous.src" +srcs "../../lib/shared/sshl.src" +srcs "../../lib/shared/sdivu.src" +srcs "../../lib/shared/fpadd.src" +srcs "../../lib/shared/lsub.src" +srcs "../../lib/shared/bldiy.src" +srcs "../../lib/shared/ixor.src" +srcs "../../lib/shared/lstiy.src" +srcs "../../lib/shared/srand.src" +srcs "../../lib/shared/uldiv.src" +srcs "../../lib/shared/frftos.src" +srcs "../../lib/shared/frubtof.src" +srcs "../../lib/shared/ishru.src" +srcs "../../lib/shared/sshru.src" +srcs "../../lib/shared/atos.src" +srcs "../../lib/shared/iremu.src" +srcs "../../lib/shared/lshrs.src" +srcs "../../lib/shared/strspn.src" +srcs "../../lib/shared/strnlen.src" +srcs "../../lib/shared/bmuls.src" +srcs "../../lib/shared/sor.src" +srcs "../../lib/shared/imuls.src" +srcs "../../lib/shared/fpltof.src" +srcs "../../lib/shared/sxor.src" +srcs "../../lib/shared/istix.src" +srcs "../../lib/shared/bdivu.src" +srcs "../../lib/shared/bshl.src" +srcs "../../lib/shared/memcmp.src" +srcs "../../lib/shared/srems.src" +srcs "../../lib/shared/strchr.src" +srcs "../../lib/shared/ildix.src" +srcs "../../lib/shared/frustof.src" +srcs "../../lib/shared/lneg.src" +srcs "../../lib/shared/atol.src" +srcs "../../lib/shared/longjmp.src" +srcs "../../lib/shared/labs.src" +srcs "../../lib/shared/memcpy.src" +srcs "../../lib/shared/isalpha.src" +srcs "../../lib/shared/bshru.src" +srcs "../../lib/shared/isprint.src" +srcs "../../lib/shared/strcat.src" +srcs "../../lib/shared/div.src" +srcs "../../lib/shared/isalnum.src" +srcs "../../lib/shared/lshl.src" +srcs "../../lib/shared/case16d.src" +srcs "../../lib/shared/ispunct.src" +srcs "../../lib/shared/toupper.src" +srcs "../../lib/shared/frftoui.src" +srcs "../../lib/shared/idivu.src" +srcs "../../lib/shared/isdigit.src" +srcs "../../lib/shared/sbrk.src" +srcs "../../lib/shared/fpcmp.src" +srcs "../../lib/shared/lcmpzero.src" +srcs "../../lib/shared/stoiu.src" +srcs "../../lib/shared/inot.src" +srcs "../../lib/shared/frimuls.src" +srcs "../../lib/shared/lcmps.src" +srcs "../../lib/shared/irems.src" +srcs "../../lib/shared/lldiy.src" +srcs "../../lib/shared/ishl.src" +srcs "../../lib/shared/strncat.src" +srcs "../../lib/shared/bstix.src" +srcs "../../lib/shared/lxor.src" +srcs "../../lib/shared/lshru.src" +srcs "../../lib/shared/bmulu.src" +srcs "../../lib/shared/calloc.src" +srcs "../../lib/shared/frftoi.src" +srcs "../../lib/shared/islower.src" +srcs "../../lib/shared/case16.src" +srcs "../../lib/shared/frameset.src" +srcs "../../lib/shared/strcpy.src" +srcs "../../lib/shared/frftob.src" +srcs "../../lib/shared/strncasecmp.src" +srcs "../../lib/shared/brems.src" +srcs "../../lib/shared/lremu.src" +srcs "../../lib/shared/case.src" +srcs "../../lib/shared/strlen.src" +srcs "../../lib/shared/gamma.src" +srcs "../../lib/shared/uuitoa.src" +srcs "../../lib/shared/udtog.src" +srcs "../../lib/shared/uscan.src" +srcs "../../lib/shared/strtoul.src" +srcs "../../lib/shared/print_sputch.src" +srcs "../../lib/shared/print_putch.src" +srcs "../../lib/shared/strtol.src" +srcs "../../lib/shared/bsearch.src" +srcs "../../lib/shared/vsprintf.src" +srcs "../../lib/shared/print_putstring.src" +srcs "../../lib/shared/ustoa.src" +srcs "../../lib/shared/maptab.src" +srcs "../../lib/shared/ultoa.src" +srcs "../../lib/shared/usscan.src" +srcs "../../lib/shared/udtof.src" +srcs "../../lib/shared/realloc.src" +srcs "../../lib/shared/free.src" +srcs "../../lib/shared/udtoe.src" +srcs "../../lib/shared/uitoa.src" +srcs "../../lib/shared/qsort.src" +srcs "../../lib/shared/fpdata.src" +srcs "../../lib/shared/uustoa.src" +srcs "../../lib/shared/upscan.src" +srcs "../../lib/shared/malloc.src" +srcs "../../lib/shared/uprint.src" +srcs "../../lib/shared/ureverse.src" +srcs "../../lib/shared/uultoa.src" +srcs "../../lib/shared/print_globals.src" +srcs "../../lib/fileio/files.src" +srcs "../../lib/fileio/fclose.src" +srcs "../../lib/fileio/feof.src" +srcs "../../lib/fileio/fopen.src" +srcs "../../lib/fileio/fwrite.src" +srcs "../../lib/fileio/ftell.src" +srcs "../../lib/fileio/fputs.src" +srcs "../../lib/fileio/fgets.src" +srcs "../../lib/fileio/remove.src" +srcs "../../lib/fileio/fputc.src" +srcs "../../lib/fileio/fgetc.src" +srcs "../../lib/fileio/fread.src" +srcs "../../lib/fileio/fseek.src" diff --git a/frontends/calculator/CEdev/include/.makefile b/frontends/calculator/CEdev/include/.makefile new file mode 100644 index 0000000..8bc89e6 --- /dev/null +++ b/frontends/calculator/CEdev/include/.makefile @@ -0,0 +1,213 @@ +#---------------------------- +# Core C Makefile +#---------------------------- +CLEANUP ?= YES +BSSHEAP_LOW ?= D031F6 +BSSHEAP_HIGH ?= D13FD6 +STACK_HIGH ?= D1A87E +INIT_LOC ?= D1A87F +USE_FLASH_FUNCTIONS ?= YES +OUTPUT_MAP ?= YES +ARCHIVED ?= NO +OPT_MODE ?= -optsize +#---------------------------- +SRCDIR ?= src +OBJDIR ?= obj +BINDIR ?= bin +GFXDIR ?= src/gfx +#---------------------------- + +VERSION := 8.5 + +#---------------------------- +# try not to edit anything below these lines unless you know what you are doing +#---------------------------- + +#---------------------------- + +# define some common makefile things +empty := +space := $(empty) $(empty) +comma := , + +TARGET ?= $(NAME) +ICONPNG ?= $(ICON) +DEBUGMODE = NDEBUG +CCDEBUGFLAG = -nodebug + +# verbosity +V ?= 0 +ifeq ($(V),0) +Q = @ +else +Q = +endif + +# get the os specific items +ifeq ($(OS),Windows_NT) +SHELL := cmd.exe +MAKEDIR := $(CURDIR) +NATIVEPATH = $(subst /,\,$1) +WINPATH = $(NATIVEPATH) +WINRELPATH = $(subst /,\,$1) +RM = del /q /f 2>nul +CEDEV ?= $(call NATIVEPATH,$(realpath ..\..)) +BIN ?= $(call NATIVEPATH,$(CEDEV)/bin) +LD = $(call NATIVEPATH,$(BIN)/fasmg.exe) +CC = $(call NATIVEPATH,$(BIN)/ez80cc.exe) +CV = $(call NATIVEPATH,$(BIN)/convhex.exe) +PG = $(call NATIVEPATH,$(BIN)/convpng.exe) +CD = cd +CP = copy /y +MV = move /y >nul +NULL = >nul 2>&1 +RMDIR = call && (if exist $1 rmdir /s /q $1) +MKDIR = call && (if not exist $1 mkdir $1) +QUOTE_ARG = "$(subst ",',$1)"#' +TO_LOWER = $1 +else +MAKEDIR := $(CURDIR) +NATIVEPATH = $(subst \,/,$1) +WINPATH = $(shell winepath -w $1) +WINRELPATH = $(subst /,\,$1) +RM = rm -f +CEDEV ?= $(call NATIVEPATH,$(realpath ..\..)) +BIN ?= $(call NATIVEPATH,$(CEDEV)/bin) +CC = $(call NATIVEPATH,wine "$(BIN)/ez80cc.exe") +LD = $(call NATIVEPATH,$(BIN)/fasmg) +CV = $(call NATIVEPATH,$(BIN)/convhex) +PG = $(call NATIVEPATH,$(BIN)/convpng) +CD = cd +CP = cp +MV = mv +RMDIR = rm -rf $1 +MKDIR = mkdir -p $1 +QUOTE_ARG = '$(subst ','\'',$1)'#' +TO_LOWER = $(shell printf %s $(call QUOTE_ARG,$1) | tr [:upper:] [:lower:]) +endif +FASMG_FILES = $(subst $(space),$(comma) ,$(patsubst %,"%",$(subst ",\",$(subst \,\\,$(call NATIVEPATH,$1)))))#" + +# ensure native paths +SRCDIR := $(call NATIVEPATH,$(SRCDIR)) +OBJDIR := $(call NATIVEPATH,$(OBJDIR)) +BINDIR := $(call NATIVEPATH,$(BINDIR)) +GFXDIR := $(call NATIVEPATH,$(GFXDIR)) + +# generate default names +TARGETBIN := $(TARGET).bin +TARGETMAP := $(TARGET).map +TARGET8XP := $(TARGET).8xp +ICON_ASM := iconc.src + +# init conditionals +F_STARTUP := $(call NATIVEPATH,$(CEDEV)/lib/cstartup.src) +F_LAUNCHER := $(call NATIVEPATH,$(CEDEV)/lib/libheader.src) +F_CLEANUP := $(call NATIVEPATH,$(CEDEV)/lib/ccleanup.src) + +# source: http://blog.jgc.org/2011/07/gnu-make-recursive-wildcard-function.html +rwildcard = $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2)$(filter $(subst *,%,$2),$d)) + +# find all of the available C, H and ASM files (Remember, you can create C <-> assembly routines easily this way) +CSOURCES := $(call rwildcard,$(SRCDIR),*.c) +CPPSOURCES := $(call rwildcard,$(SRCDIR),*.cpp) +USERHEADERS := $(call rwildcard,$(SRCDIR),*.h *.hpp) +ASMSOURCES := $(call rwildcard,$(SRCDIR),*.asm) + +# create links for later +LINK_CSOURCES := $(CSOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.src) +LINK_CPPSOURCES := $(CPPSOURCES:$(SRCDIR)/%=$(OBJDIR)/%.src) +LINK_ASMSOURCES := $(ASMSOURCES) + +# files created to be used for linking +LINK_FILES := $(LINK_CSOURCES) $(LINK_CPPSOURCES) $(LINK_ASMSOURCES) +LINK_LIBS := $(wildcard $(CEDEV)/lib/libload/*.lib) +LINK_LIBLOAD := $(CEDEV)/lib/libload.lib + +# check if there is an icon present that we can convert; if so, generate a recipe to build it properly +ifneq ("$(wildcard $(ICONPNG))","") +F_ICON := $(OBJDIR)/$(ICON_ASM) +ICON_CONV := $(PG) -c $(ICONPNG)$(comma)$(call NATIVEPATH,$(F_ICON))$(comma)$(DESCRIPTION) +LINK_ICON = , $(call FASMG_FILES,$(F_ICON)) used +endif + +# determine if output should be archived or compressed +ifeq ($(ARCHIVED),YES) +CVFLAGS += -a +endif +ifeq ($(COMPRESSED),YES) +CVFLAGS += -x +endif +ifeq ($(CLEANUP),YES) +LINK_CLEANUP = , $(call FASMG_FILES,$(F_CLEANUP)) used +endif +ifeq ($(OUTPUT_MAP),YES) +LDMAPFLAG = -i map +endif + +# choose static or linked flash functions +ifeq ($(USE_FLASH_FUNCTIONS),YES) +STATIC := 0 +else +STATIC := 1 +endif + +# define the C flags used by the Zilog compiler +CFLAGS ?= \ + -noasm $(CCDEBUGFLAG) -nogenprint -keepasm -quiet $(OPT_MODE) -cpu:EZ80F91 -noreduceopt -nolistinc -nomodsect -define:_EZ80F91 -define:_EZ80 -define:$(DEBUGMODE) + +# these are the linker flags, basically organized to properly set up the environment +LDFLAGS ?= \ + $(call QUOTE_ARG,$(call NATIVEPATH,$(CEDEV)/include/fasmg-ez80/ld.fasmg)) \ + -i $(call QUOTE_ARG,include $(call FASMG_FILES,$(CEDEV)/include/.linker_script)) \ + $(LDDEBUGFLAG) \ + $(LDMAPFLAG) \ + -i $(call QUOTE_ARG,range bss $$$(BSSHEAP_LOW) : $$$(BSSHEAP_HIGH)) \ + -i $(call QUOTE_ARG,symbol __stack = $$$(STACK_HIGH)) \ + -i $(call QUOTE_ARG,locate header at $$$(INIT_LOC)) \ + -i $(call QUOTE_ARG,STATIC := $(STATIC)) \ + -i $(call QUOTE_ARG,srcs $(call FASMG_FILES,$(F_LAUNCHER)) used if libs.length$(LINK_ICON)$(LINK_CLEANUP)$(comma) $(call FASMG_FILES,$(F_STARTUP)) used$(comma) $(call FASMG_FILES,$(LINK_FILES))) \ + -i $(call QUOTE_ARG,libs $(call FASMG_FILES,$(LINK_LIBLOAD)) used if libs.length$(comma) $(call FASMG_FILES,$(LINK_LIBS))) + +# this rule is trigged to build everything +all: dirs $(BINDIR)/$(TARGET8XP) ; + +# this rule is trigged to build debug everything +debug: LDDEBUGFLAG = -i dbg +debug: DEBUGMODE = DEBUG +debug: CCDEBUGFLAG = -debug +debug: dirs $(BINDIR)/$(TARGET8XP) ; + +dirs: + @echo C CE SDK Version $(VERSION) && \ + $(call MKDIR,$(BINDIR)) && \ + $(call MKDIR,$(OBJDIR)) + +$(BINDIR)/$(TARGET8XP): $(BINDIR)/$(TARGETBIN) + $(Q)$(CD) $(BINDIR) && \ + $(CV) $(CVFLAGS) $(notdir $<) $(notdir $@) + +$(BINDIR)/$(TARGETBIN): $(LINK_FILES) $(F_ICON) + $(Q)$(LD) $(LDFLAGS) $@ + +# this rule handles conversion of the icon, if it is ever updated +$(OBJDIR)/$(ICON_ASM): $(ICONPNG) + $(Q)$(ICON_CONV) + +# these rules compile the source files into object files +$(OBJDIR)/%.src: $(SRCDIR)/%.c $(USERHEADERS) + $(Q)$(call MKDIR,$(call NATIVEPATH,$(@D))) && \ + $(CC) $(CFLAGS) $(call QUOTE_ARG,$(call WINPATH,$(addprefix $(MAKEDIR)/,$<))) && \ + $(MV) $(call QUOTE_ARG,$(call TO_LOWER,$(@F))) $(call QUOTE_ARG,$@) + +clean: + $(Q)$(call RMDIR,$(OBJDIR)) + $(Q)$(call RMDIR,$(BINDIR)) + @echo Cleaned build files. + +gfx: + $(Q)$(CD) $(GFXDIR) && convpng + +version: + @echo C SDK Version $(VERSION) + +.PHONY: all clean version gfx dirs debug diff --git a/frontends/calculator/CEdev/include/assert.h b/frontends/calculator/CEdev/include/assert.h new file mode 100644 index 0000000..04c3a34 --- /dev/null +++ b/frontends/calculator/CEdev/include/assert.h @@ -0,0 +1,19 @@ +#include +#include +#include + +#ifdef assert +#undef assert +#endif + +#ifdef NDEBUG +#define assert(ignore) ((void)0) +#else +#define assert(e) \ + do { \ + if (!(e)) { \ + dbg_sprintf(dbgout, "Assertion failure: %s, file: %s, line %d\n", #e, __FILE__, __LINE__); \ + abort(); \ + } \ + } while (0) +#endif diff --git a/frontends/calculator/CEdev/include/compression.h b/frontends/calculator/CEdev/include/compression.h new file mode 100644 index 0000000..234d25d --- /dev/null +++ b/frontends/calculator/CEdev/include/compression.h @@ -0,0 +1,27 @@ +/** + * @file + * @author Matt "MateoConLechuga" Waltz + * @brief Optimized (de)compression routines + */ + +#ifndef COMPRESSION_H +#define COMPRESSION_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Decompress a block of zx7 encoded data + * + * @param dest Pointer to destination for uncompressed data + * @param src Pointer to compressed data +*/ +void zx7_Decompress(void *dest, void *src); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/frontends/calculator/CEdev/include/ctype.h b/frontends/calculator/CEdev/include/ctype.h new file mode 100644 index 0000000..215dae0 --- /dev/null +++ b/frontends/calculator/CEdev/include/ctype.h @@ -0,0 +1,30 @@ +#ifndef CTYPE_H +#define CTYPE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define TRUE 1 +#define FALSE 0 + +int isalnum(int c); +int isalpha(int c); +int iscntrl(int c); +int isdigit(int c); +int isgraph(int c); +int islower(int c); +int isprint(int c); +int ispunct(int c); +int isspace(int c); +int isupper(int c); +int tolower(int c); +int toupper(int c); +int isascii(int c); +int isxdigit(int c); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/frontends/calculator/CEdev/include/debug.h b/frontends/calculator/CEdev/include/debug.h new file mode 100644 index 0000000..aabbd41 --- /dev/null +++ b/frontends/calculator/CEdev/include/debug.h @@ -0,0 +1,124 @@ +/** + * @file + * @author Matt "MateoConLechuga" Waltz + * @brief Contains useful debugging features for use with the integrated CEmu debugger + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * void dbg_sprintf(out, const char *format, ...) + * + * @brief Use to print to the emulator console. + * + * See the syntax for 'printf' for more information + * @param out Can be dbgout (black) or dbgerr (red) + * @param format Uses printf-formated specifier string + * @def dbg_sprintf + */ + +/** + * void dbg_ClearConsole(void) + * + * @brief Clears the emulator's console screen. + * @def dbg_ClearConsole + */ + +#ifndef NDEBUG + +/** + * Opens the emulator debugger + */ +void dbg_Debugger(void); + +/** + * Sets an emulated breakpoint at a particular address + * + * @param address The address of the breakpoint to remove + */ +void dbg_SetBreakpoint(void *address); + +/** + * Removes an emulated breakpoint at a particular address + * + * @param address The address of the breakpoint to remove + */ +void dbg_RemoveBreakpoint(void *address); + +/** + * Sets an emulated empty watchpoint at a particular address + * + * @param address The address of the watchpoint to set + * @param length The size of the data at the address (values 1-4) + */ +void dbg_SetWatchpoint(void *address, unsigned int length); + +/** + * Sets an emulated read watchpoint at a particular address + * + * @param address The address of the watchpoint to set + * @param length The size of the data at the address (values 1-4) + */ +void dbg_SetReadWatchpoint(void *address, unsigned int length); + +/** + * Sets an emulated write watchpoint at a particular address + * + * @param address The address of the watchpoint to set + * @param length The size of the data at the address (values 1-4) + */ +void dbg_SetWriteWatchpoint(void *address, unsigned int length); + +/** + * Sets an emulated read/write watchpoint at a particular address + * + * @param address The address of the watchpoint to set + * @param length The size of the data at the address (values 1-4) + */ +void dbg_SetReadWriteWatchpoint(void *address, unsigned int length); + +/** + * Removes an emulated watchpoint at a particular address + * + * @param address The address of the watchpoint to remove + */ +void dbg_RemoveWatchpoint(void *address); + +/** + * Removes all emulated watchpoints + */ +void dbg_RemoveAllWatchpoints(void); + +/** + * Removes all emulated breakpoints + */ +void dbg_RemoveAllBreakpoints(void); + +#define dbgout ((char*)0xFB0000) /**< Standard debug output */ +#define dbgerr ((char*)0xFC0000) /**< Error debug output */ +#define dbg_sprintf sprintf +#define dbg_ClearConsole() (*(unsigned char*)0xFD0000 = 1) +#else +#define dbg_Debugger(ignore) ((void)0) +#define dbg_SetBreakpoint(ignore) ((void)0) +#define dbg_RemoveBreakpoint(ignore) ((void)0) +#define dbg_SetWatchpoint(ignore,ignore) ((void)0) +#define dbg_SetReadWatchpoint(ignore,ignore) ((void)0) +#define dbg_SetWriteWatchpoint(ignore,ignore) ((void)0) +#define dbg_SetReadWriteWatchpoint(ignore,ignore) ((void)0) +#define dbg_RemoveWatchpoint(ignore) ((void)0) +#define dbg_RemoveAllWatchpoints(ignore) ((void)0) +#define dbg_RemoveAllBreakpoints(ignore) ((void)0) +#define dbg_sprintf if(0)(void) +#define dbg_ClearConsole(ignore) ((void)0) +#define dbgout (NULL) +#define dbgerr (NULL) +#endif + +#ifdef __cplusplus +} +#endif diff --git a/frontends/calculator/CEdev/include/decompress.h b/frontends/calculator/CEdev/include/decompress.h new file mode 100644 index 0000000..451008b --- /dev/null +++ b/frontends/calculator/CEdev/include/decompress.h @@ -0,0 +1,23 @@ +/** + * @file + * @author Matt "MateoConLechuga" Waltz + * @brief Optimized decompression routines + */ + +#ifndef DECOMPRESS_H +#define DECOMPRESS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#warning compatibility defines (do not use) +void dzx7_Turbo(void *src, void *dst); +void dzx7_Standard(void *src, void *dst); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/frontends/calculator/CEdev/include/errno.h b/frontends/calculator/CEdev/include/errno.h new file mode 100644 index 0000000..f72dfef --- /dev/null +++ b/frontends/calculator/CEdev/include/errno.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 1999-2008 by Zilog, Inc. + * All Rights Reserved + * Modified by Matt "MateoConLechuga" Waltz for TI84+CE platform + */ +#ifndef ERRNO_H +#define ERRNO_H + +#define ERR_NOR 1 /* read not allowed for file */ +#define ERR_NOW 2 /* write not allowed for file */ +#define ERR_IO 3 /* io error */ +#define EDOM 4 /* domain error */ +#define ERANGE 5 /* range error */ +extern int errno; +#endif diff --git a/frontends/calculator/CEdev/include/fasmg-ez80/ez80.inc b/frontends/calculator/CEdev/include/fasmg-ez80/ez80.inc new file mode 100644 index 0000000..6e8e005 --- /dev/null +++ b/frontends/calculator/CEdev/include/fasmg-ez80/ez80.inc @@ -0,0 +1,862 @@ +define @ez80 @ez80 +macro @ez80.suffix @l, @il* + @ez80.l = @l + @ez80.il = @il + @ez80.lil = @ez80.l or @ez80.il shl 1 + @ez80.pre = @ez80.lil or @ez80.lil shl 3 or 100o +end macro +macro @ez80.byte @values*& + db @values +end macro +macro @ez80.offset @value* + local value + value = @value + if elementsof value + err 'invalid offset' + else if value < -200o | 200o <= value + err 'offset is out of range' + end if + db value +end macro +macro @ez80.word @value* + local value + value = @value + if elementsof value + err 'invalid immediate' + end if + emit word + @ez80.il: @value +end macro +macro @ez80.idxpre @regs*& + local pre + iterate @reg, @regs + pre = @reg metadata 1 scale 1 + if pre > 300o + @ez80.byte pre + break + end if + end iterate +end macro +macro @ez80.idxoff @reg* + local reg + reg = @reg + if reg metadata 1 scale 1 > 300o + @ez80.offset @reg scale 0 + else if reg scale 0 + err 'invalid arguments' + end if +end macro +macro @ez80.emit @values*& + if defined @ez80.pre + db @ez80.pre + end if + iterate @value, @values + @ez80.@value + end iterate +end macro +macro @ez80.nest @inst*& + if defined @ez80.pre + @ez80.pre =: @ez80.pre + end if + @inst +end macro +macro @ez80.check @ind*, @expr& + match @left ) @right, <@expr> + match @ ( @mid, <@left> + @ez80.check @ind, @mid @right + else + @ind =: 0 + end match + else + @ind =: 1 + end match +end macro +macro @ez80.classify @val, @ind*, @arg& + match, @arg + @ind =: 0 + else + @val =: @arg + match ( @ ), @arg + @ez80.check @ind, @ + else + @ind =: 0 + end match + end match +end macro + +long? = 3 +; FIXME: dup relocations +macro dw? @values*& + if @ez80.adl + emit word?: @values + else + match left =dup? right, @values + emit word?: @values + else + iterate @value, @values + @ez80.word @value + end iterate + end match + end if +end macro +macro dl? @values*& + if @ez80.adl + match left =dup? right, @values + emit long?: @values + else + iterate @value, @values + @ez80.word @value + end iterate + end match + else + emit long?: @values + end if +end macro +iterate @name, dw, rw, dl, rl + struc (name) @name? @values*& + label name: long? + @name? @values + end struc +end iterate +macro assume? @expr* + match =adl? == @adl, @expr + local adl + adl = @adl + if adl = adl and 1 + @ez80.l = adl + @ez80.il = adl + @ez80.adl = adl + else + err 'adl assume should be 0 or 1' + end if + else + err 'invalid assume statement' + end match +end macro +assume? adl = 1 + +element @ez80.breg +element b?: @ez80.breg * 003o + 030o +element nz?: @ez80.breg * 010o + 001o +element z?: @ez80.breg * 010o + 011o +element nc?: @ez80.breg * 010o + 021o +element c?: @ez80.breg * 003o + 031o +element po?: @ez80.breg * 010o + 041o +element pe?: @ez80.breg * 010o + 051o +nv? = po? +v? = pe? +element p?: @ez80.breg * 010o + 061o +element m?: @ez80.breg * 010o + 071o +element d?: @ez80.breg * 003o + 032o +element e?: @ez80.breg * 003o + 033o +element h?: @ez80.breg * 003o + 034o +element ixh?: @ez80.breg * 335o + 034o +element iyh?: @ez80.breg * 375o + 034o +element l?: @ez80.breg * 003o + 035o +element ixl?: @ez80.breg * 335o + 035o +element iyl?: @ez80.breg * 375o + 035o +element f?: @ez80.breg * 002o + 036o +element a?: @ez80.breg * 003o + 037o + +element @ez80.irmb +element i?: @ez80.irmb * 107o + 127o +element r?: @ez80.irmb * 117o + 137o +element mb?: @ez80.irmb * 155o + 156o + +element @ez80.wreg +element bc?: @ez80.wreg * 007o + 000o +element de?: @ez80.wreg * 007o + 020o +element hl?: @ez80.wreg * 007o + 040o +element ix?: @ez80.wreg * 335o + 040o +element iy?: @ez80.wreg * 375o + 040o +element sp?: @ez80.wreg * 006o + 060o +element af?: @ez80.wreg * 001o + 060o +element af'? + +@ez80.is_reg equ metadata 1 element 1 eq + +macro inst! @name*, @params& + restore @name? + define @name? @name? + @ez80.oplist equ @name? + namespace @name? + macro s? @args& + @ez80.suffix 0, @ez80.il + @name? @args + end macro + macro l? @args& + @ez80.suffix 1, @ez80.il + @name? @args + end macro + macro is? @args& + @ez80.suffix @ez80.l, 0 + @name? @args + end macro + macro il? @args& + @ez80.suffix @ez80.l, 1 + @name? @args + end macro + macro sis? @args& + @ez80.suffix 0, 0 + @name? @args + end macro + macro lis? @args& + @ez80.suffix 1, 0 + @name? @args + end macro + macro sil? @args& + @ez80.suffix 0, 1 + @name? @args + end macro + macro lil? @args& + @ez80.suffix 1, 1 + @name? @args + end macro + end namespace + local @temp + virtual + iterate @param, @params + match @arg @, @param* + @temp = string `@arg shr 8 + db 'local ', @temp, ', ', @temp, 'ind', 10 + match @arg &, @param + db 'iterate @, ', `@arg, 10, 9, 'indx %%-%+1', 10, 9 + end match + db '@ez80.classify ', @temp, ', ', @temp, 'ind, ' + match @@ &, @param + db '@', 10, 'end iterate', 10 + else + db `@arg, 10 + end match + end match + end iterate + load @temp: $ - $$ from $$ + end virtual + esc macro @name?: @params + local before, after, noerr + label before + eval @temp +end macro +macro end?.inst! + label after + if ~defined noerr & before = after + err 'invalid arguments' + end if + restore @ez80.pre + assume? adl = @ez80.adl + esc end macro +end macro + +iterate <@name, @opc*>, \ + nop, 000o, \ + rlca, 007o, \ + rrca, 017o, \ + rla, 027o, \ + rra, 037o, \ + daa, 047o, \ + cpl, 057o, \ + scf, 067o, \ + ccf, 077o, \ + halt, 166o, \ + exx, 331o, \ + di, 363o, \ + ei, 373o, \ + neg, <355o, 104o>, \ + retn, <355o, 105o>, \ + reti, <355o, 115o>, \ + rrd, <355o, 147o>, \ + rld, <355o, 157o>, \ + slp, <355o, 166o>, \ + stmix, <355o, 175o>, \ + rsmix, <355o, 176o>, \ + inim, <355o, 202o>, \ + otim, <355o, 203o>, \ + ini2, <355o, 204o>, \ + indm, <355o, 212o>, \ + otdm, <355o, 213o>, \ + ind2, <355o, 214o>, \ + inimr, <355o, 222o>, \ + otimr, <355o, 223o>, \ + ini2r, <355o, 224o>, \ + indmr, <355o, 232o>, \ + otdmr, <355o, 233o>, \ + ind2r, <355o, 234o>, \ + ldi, <355o, 240o>, \ + cpi, <355o, 241o>, \ + ini, <355o, 242o>, \ + outi, <355o, 243o>, \ + outi2, <355o, 244o>, \ + ldd, <355o, 250o>, \ + cpd, <355o, 251o>, \ + ind, <355o, 252o>, \ + outd, <355o, 253o>, \ + outd2, <355o, 254o>, \ + ldir, <355o, 260o>, \ + cpir, <355o, 261o>, \ + inir, <355o, 262o>, \ + otir, <355o, 263o>, \ + oti2r, <355o, 264o>, \ + lddr, <355o, 270o>, \ + cpdr, <355o, 271o>, \ + indr, <355o, 272o>, \ + otdr, <355o, 273o>, \ + otd2r, <355o, 274o>, \ + inirx, <355o, 302o>, \ + otirx, <355o, 303o>, \ + indrx, <355o, 312o>, \ + otdrx, <355o, 313o> + inst @name + @ez80.emit + end inst +end iterate + +iterate @name, inc, dec + inst @name, @reg* + if regind + if reg relativeto reg element 1 & reg @ez80.is_reg @ez80.wreg \ + & reg metadata 1 scale 0 = 040o + @ez80.emit idxpre reg, byte 063o + %, idxoff reg + end if + else if reg eq reg element 1 + if reg @ez80.is_reg @ez80.wreg & reg metadata 1 scale 1 and 004o + @ez80.emit idxpre reg, byte reg metadata 1 scale 0 - 005o \ + + % shl 3 + else if reg @ez80.is_reg @ez80.breg \ + & reg metadata 1 scale 1 and 001o + @ez80.emit idxpre reg, byte reg metadata 1 scale 0 shl 3 \ + and 070o or % + 3 + end if + end if + end inst +end iterate + +inst ex, @arg1, @arg2* + if arg1ind + if arg2ind + err 'invalid indirection' + else if arg1 eq sp? & arg2 eq arg2 element 1 \ + & arg2 @ez80.is_reg @ez80.wreg & arg2 metadata 1 scale 0 = 040o + @ez80.emit idxpre arg2, byte 343o + end if + else if arg2ind + @ez80.nest ex? @arg2, @arg1 + else if (arg1 eq af? & arg2 eq af'?) | (arg1 eq af'? & arg2 eq af?) + @ez80.emit byte 010o + else if (arg1 eq de? & arg2 eq hl?) | (arg1 eq hl? & arg2 eq de?) + @ez80.emit byte 353o + end if +end inst + +inst djnz, @addr* + if addrind + err 'invalid indirection' + else + @ez80.emit byte 020o, offset addr - after + end if +end inst +inst jr, @arg1*, @arg2 + if arg1ind | arg2ind + err 'invalid indirection' + else if ~defined arg2 + @ez80.emit byte 030o, offset arg1 - after + else + if arg1 eq arg1 element 1 & arg1 @ez80.is_reg @ez80.breg \ + & arg1 metadata 1 scale 0 and 047o = 001o + @ez80.emit byte arg1 metadata 1 scale 0 and 030o or 040o, \ + offset arg2 - after + end if + end if +end inst +inst jq, @arg1*, @arg2 + local off, keep + if arg1ind | arg2ind + err 'invalid indirection' + else if ~defined arg2 + off = arg1 - before - 2 + if defined @ez80.pre + off = off - 1 + end if + if defined noerr & ~arg1 eq after | defined keep + define keep + end if + if defined after & arg1 eq after & ~defined keep + define noerr + else if ~elementsof off & -200o <= off & off < 200o + @ez80.emit byte 030o, offset off + else + @ez80.emit byte 303o, word arg1 + end if + else if arg1 eq arg1 element 1 & arg1 @ez80.is_reg @ez80.breg \ + & arg1 metadata 1 scale 0 and 007o = 001o + off = arg2 - before - 2 + if defined @ez80.pre + off = off - 1 + end if + if defined noerr & ~arg2 eq after | defined keep + define keep + end if + if defined after & arg2 eq after & ~defined keep + define noerr + else if arg1 metadata 1 scale 0 < 040o & ~elementsof off & -200o <= off & off < 200o + @ez80.emit byte arg1 metadata 1 scale 0 and 030o or 040o, \ + offset off + else + @ez80.emit byte arg1 metadata 1 scale 0 and 070o or 302o, \ + word arg2 + end if + end if +end inst + +inst ld, @dst, @src* + local opc + if dstind & srcind + err 'invalid indirection' + else if dstind + if dst relativeto dst element 1 & dst @ez80.is_reg @ez80.wreg + if dst metadata 1 scale 0 = 040o + if src eq src element 1 & src @ez80.is_reg @ez80.breg \ + & src metadata 1 scale 1 = 003o + @ez80.emit idxpre dst, byte src metadata 1 scale 0 \ + and 007o or 160o, idxoff dst + else if src eq src element 1 & src @ez80.is_reg @ez80.wreg \ + & src metadata 1 scale 1 and 005o = 005o + opc = src metadata 1 scale 0 or 017o + if src metadata 1 scale 1 > 300o + if dst metadata 1 scale 1 xor src metadata 1 scale 1 \ + and 040o + opc = opc + 017o + else + opc = opc + 020o + end if + end if + if dst metadata 1 scale 1 > 300o + @ez80.emit idxpre dst, byte opc, idxoff dst + else + @ez80.emit + end if + else + @ez80.emit idxpre dst, byte 066o, idxoff dst, byte src + end if + else if src eq a? & dst metadata 1 scale 0 < 040o + @ez80.emit byte dst metadata 1 scale 0 or 002o + end if + else if src eq a? + @ez80.emit byte 062o, word dst + else if src eq src element 1 & src @ez80.is_reg @ez80.wreg \ + & src metadata 1 scale 1 and 004o + if src metadata 1 scale 0 = 040o + @ez80.emit idxpre src, byte 042o, word dst + else + @ez80.emit , word dst + end if + end if + else if srcind + if ~dst eq dst element 1 + else if src relativeto src element 1 & src @ez80.is_reg @ez80.wreg + if src metadata 1 scale 0 = 040o + if dst @ez80.is_reg @ez80.breg & dst metadata 1 scale 1 = 003o + @ez80.emit idxpre src, byte dst metadata 1 scale 0 \ + shl 3 and 070o or 106o, idxoff src + else if dst @ez80.is_reg @ez80.wreg \ + & dst metadata 1 scale 1 and 005o = 005o + opc = dst metadata 1 scale 0 or 007o + if dst metadata 1 scale 1 > 300o + if dst metadata 1 scale 1 xor src metadata 1 scale 1 \ + and 040o + opc = opc + 012o + else + opc = opc + 020o + end if + end if + if src metadata 1 scale 1 > 300o + @ez80.emit idxpre src, byte opc, idxoff src + else + @ez80.emit + end if + end if + else if dst eq a? & src metadata 1 scale 0 < 040o + @ez80.emit byte src metadata 1 scale 0 or 012o + end if + else if dst eq a? + @ez80.emit byte 072o, word src + else if dst @ez80.is_reg @ez80.wreg & dst metadata 1 scale 1 and 004o + if dst metadata 1 scale 0 = 040o + @ez80.emit idxpre dst, byte 052o, word src + else + @ez80.emit , word src + end if + end if + else if dst eq dst element 1 + if dst @ez80.is_reg @ez80.breg + if src eq src element 1 & src @ez80.is_reg @ez80.breg \ + & dst metadata 1 scale 1 and src metadata 1 scale 1 and 001o \ + & (dst metadata 1 scale 0 xor src metadata 1 scale 0 and 006o \ + | dst metadata 1 scale 1 = src metadata 1 scale 1) \ + & (~dst eq src | dst metadata 1 scale 0 > 033o) + @ez80.emit , \ + byte dst metadata 1 scale 0 shl 3 and 070o \ + + src metadata 1 scale 0 and 007o or 100o + else if src eq src element 1 & src @ez80.is_reg @ez80.irmb \ + & dst eq a? + @ez80.emit + else if dst metadata 1 scale 1 and 001o + @ez80.emit idxpre dst, \ + byte dst metadata 1 scale 0 shl 3 and 070o or 006o, \ + byte src + end if + else if dst @ez80.is_reg @ez80.wreg & dst metadata 1 scale 1 and 004o + if dst eq sp? & src eq src element 1 & src @ez80.is_reg @ez80.wreg \ + & src metadata 1 scale 0 = 040o + @ez80.emit idxpre src, byte 371o + else if dst eq hl? & src eq i? + @ez80.emit + else + @ez80.emit idxpre dst, byte dst metadata 1 scale 0 or 001o, \ + word src + end if + else if dst @ez80.is_reg @ez80.irmb & src eq a? + @ez80.emit + else if dst eq i? & src eq hl? + @ez80.emit + end if + end if +end inst + +inst add, @arg1*, @arg2 + if ~defined arg2 + @ez80.nest a?, @arg1 + else if arg1ind + err 'invalid indirection' + else if arg1 eq a? + if arg2ind + if arg2 relativeto arg2 element 1 & arg2 @ez80.is_reg @ez80.wreg \ + & arg2 metadata 1 scale 0 = 040o + @ez80.emit idxpre arg2, byte 206o, idxoff arg2 + end if + else if arg2 eq arg2 element 1 & arg2 @ez80.is_reg @ez80.breg \ + & arg2 metadata 1 scale 1 and 001o + @ez80.emit idxpre arg2, byte arg2 metadata 1 scale 0 and 007o \ + or 200o + else + @ez80.emit + end if + else if arg2ind + err 'invalid indirection' + else if arg1 eq arg1 element 1 & arg1 @ez80.is_reg @ez80.wreg \ + & arg2 eq arg2 element 1 & arg1 @ez80.is_reg @ez80.wreg \ + & arg1 metadata 1 scale 0 = 040o & arg2 metadata 1 scale 1 and 004o \ + & (arg1 metadata 1 scale 0 <> arg2 metadata 1 scale 0 \ + | arg1 metadata 1 scale 1 = arg2 metadata 1 scale 1) + @ez80.emit idxpre arg1, byte arg2 metadata 1 scale 0 or 011o + end if +end inst +iterate @name, adc, sbc + inst @name, @arg1*, @arg2 + if ~defined arg2 + if arg1 @ez80.is_reg @ez80.wreg + @ez80.nest hl?, @arg1 + else + @ez80.nest a?, @arg1 + end if + else if arg1ind + err 'invalid indirection' + else if arg1 eq a? + if arg2ind + if arg2 relativeto arg2 element 1 \ + & arg2 @ez80.is_reg @ez80.wreg \ + & arg2 metadata 1 scale 0 = 040o + @ez80.emit idxpre arg2, byte 176o + % shl 4, idxoff arg2 + end if + else if arg2 eq arg2 element 1 & arg2 @ez80.is_reg @ez80.breg \ + & arg2 metadata 1 scale 1 and 001o + @ez80.emit idxpre arg2, byte arg2 metadata 1 scale 0 and 007o \ + or 170o + % shl 4 + else + @ez80.emit + end if + else if arg2ind + err 'invalid indirection' + else if arg1 eq hl? & arg2 eq arg2 element 1 \ + & arg2 @ez80.is_reg @ez80.wreg \ + & arg2 metadata 1 scale 1 and 002o + @ez80.emit + end if + end inst +end iterate +iterate <@name, @opc*>, \ + sub, 220o, \ + and, 240o, \ + xor, 250o, \ + or, 260o, \ + cp, 270o + inst @name, @arg1*, @arg2 + if ~defined arg2 + if arg1ind + if arg1 relativeto arg1 element 1 \ + & arg1 @ez80.is_reg @ez80.wreg \ + & arg1 metadata 1 scale 0 = 040o + @ez80.emit idxpre arg1, byte @opc or 006o, idxoff arg1 + end if + else if arg1 relativeto arg1 element 1 \ + & arg1 @ez80.is_reg @ez80.breg \ + & arg1 metadata 1 scale 1 and 001o + @ez80.emit idxpre arg1, byte arg1 metadata 1 scale 0 and 007o \ + or @opc + else + @ez80.emit + end if + else if arg1ind + err 'invalid indirection' + else if arg1 eq a? + @ez80.nest @name? @arg2 + end if + end inst +end iterate +inst tst, @arg1*, @arg2 + if ~defined arg2 + if arg1ind + if arg1 eq hl? + @ez80.emit + end if + else if arg1 eq arg1 element 1 & arg1 @ez80.is_reg @ez80.breg \ + & arg1 metadata 1 scale 1 = 003o + @ez80.emit + else + @ez80.emit + end if + else if arg1ind + err 'invalid indirection' + else if arg1 eq a? + @ez80.nest tst? @arg2 + end if +end inst + +inst ret, @cond + if ~defined cond + @ez80.emit byte 311o + else if condind + err 'invalid indirection' + else if cond eq cond element 1 & cond @ez80.is_reg @ez80.breg \ + & cond metadata 1 scale 0 and 007o = 001o + @ez80.emit byte cond metadata 1 scale 0 and 070o or 300o + end if +end inst +iterate @name, pop, push + inst @name, @reg*& + while defined reg + regind + if regind + err 'invalid indirection' + else if reg eq reg element 1 & reg @ez80.is_reg @ez80.wreg \ + & reg metadata 1 scale 1 and 001o + @ez80.emit idxpre reg, \ + byte reg metadata 1 scale 0 + 275o + % shl 2 + else if `@name = 'push' + @ez80.nest pea? reg + else + err 'invalid argument' + end if + restore reg, regind + end while + end inst +end iterate + +inst jp, @arg1*, @arg2 + if ~defined arg2 + if ~arg1ind + @ez80.emit byte 303o, word arg1 + else if arg1 eq arg1 element 1 & arg1 @ez80.is_reg @ez80.wreg \ + & arg1 metadata 1 scale 0 = 040o + @ez80.emit idxpre arg1, byte 351o + end if + else if arg1ind | arg2ind + err 'invalid indirection' + else if arg1 eq arg1 element 1 & arg1 @ez80.is_reg @ez80.breg \ + & arg1 metadata 1 scale 0 and 007o = 001o + @ez80.emit byte arg1 metadata 1 scale 0 and 070o or 302o, word arg2 + end if +end inst +inst call, @arg1*, @arg2 + if arg1ind | arg2ind + err 'invalid indirection' + else if ~defined arg2 + @ez80.emit byte 315o, word arg1 + else if arg1 eq arg1 element 1 & arg1 @ez80.is_reg @ez80.breg \ + & arg1 metadata 1 scale 0 and 007o = 001o + @ez80.emit byte arg1 metadata 1 scale 0 and 070o or 304o, word arg2 + end if +end inst +inst rst, @addr* + if addrind + err 'invalid indirection' + else if addr = addr and 070o + @ez80.emit byte addr or 307o + else + err 'invalid rst target' + end if +end inst + +iterate <@name, @opc*>, \ + rlc, 000o, \ + rrc, 010o, \ + rl, 020o, \ + rr, 030o, \ + sla, 040o, \ + sra, 050o, \ + srl, 070o + inst @name, @reg* + if `@name = 'rl' & ~defined @ez80.pre & ~elementsof reg + rb long? * reg + define noerr + else if regind + if reg relativeto reg element 1 & reg @ez80.is_reg @ez80.wreg \ + & reg metadata 1 scale 0 = 040o + @ez80.emit idxpre reg, byte 313o, idxoff reg, byte @opc or 006o + end if + else if reg eq reg element 1 & reg @ez80.is_reg @ez80.breg \ + & reg metadata 1 scale 1 = 003o + @ez80.emit + end if + end inst +end iterate +iterate @name, bit, res, set + inst @name, @bit, @reg* + if bitind + err 'invalid indirection' + else if regind + if reg relativeto reg element 1 & reg @ez80.is_reg @ez80.wreg \ + & reg metadata 1 scale 0 = 040o + @ez80.emit idxpre reg, byte 313o, idxoff bit shr 3 + reg, \ + byte bit shl 3 and 070o or % shl 6 or 006o + end if + else if reg eq reg element 1 + if reg @ez80.is_reg @ez80.breg & reg metadata 1 scale 1 = 003o \ + & bit = bit and 007o + @ez80.emit + else if reg @ez80.is_reg @ez80.wreg \ + & reg metadata 1 scale 1 = 007o & bit = bit and 017o + @ez80.emit + end if + end if + end inst +end iterate + +inst out, @port, @reg* + if ~portind + err 'missing indirection' + else if regind + err 'invalid indirection' + else if port eq bc? | port eq c? + if reg eq reg element 1 & reg @ez80.is_reg @ez80.breg \ + & reg metadata 1 scale 1 = 003o + @ez80.emit + else if ~reg + @ez80.emit + end if + else if reg eq a? + @ez80.emit + end if +end inst +inst in, @reg*, @port + if ~defined port + @ez80.nest in? f?, @reg + else if regind + err 'invalid indirection' + else if ~portind + err 'missing indirection' + else if port eq bc? | port eq c? & reg eq reg element 1 \ + & reg @ez80.is_reg @ez80.breg & reg metadata 1 scale 1 and 002o + @ez80.emit + else if reg eq a? + @ez80.emit + end if +end inst +inst in0, @reg*, @port + if ~defined port + @ez80.nest in0? f?, @reg + else if regind + err 'invalid indirection' + else if ~portind + err 'missing indirection' + else if reg eq reg element 1 & reg @ez80.is_reg @ez80.breg \ + & reg metadata 1 scale 1 and 002o + @ez80.emit + end if +end inst +inst out0, @port, @reg* + if ~portind + err 'missing indirection' + else if regind + err 'invalid indirection' + else if reg eq reg element 1 & reg @ez80.is_reg @ez80.breg \ + & reg metadata 1 scale 1 = 003o + @ez80.emit + end if +end inst +inst tstio, @src* + if srcind + err 'invalid indirection' + else + @ez80.emit + end if +end inst + +inst lea, @dst, @src* + if dstind | srcind + err 'invalid indirection' + else if dst eq dst element 1 & src relativeto src element 1 \ + & dst @ez80.is_reg @ez80.wreg & src @ez80.is_reg @ez80.wreg \ + & dst metadata 1 scale 0 <> 060o & src metadata 1 scale 1 > 300o + local opc + if dst metadata 1 scale 1 and 002o + opc = src metadata 1 scale 1 shr 5 and 001o \ + or dst metadata 1 scale 0 or 002o + else if dst relativeto src + opc = dst metadata 1 scale 1 shr 5 and 001o or 062o + else + opc = dst metadata 1 scale 1 shr 5 and 001o or 124o + end if + @ez80.emit , offset src scale 0 + end if +end inst +inst pea, @src* + if srcind + err 'invalid indirection' + else if src relativeto src element 1 & src @ez80.is_reg @ez80.wreg \ + & src metadata 1 scale 1 > 300o + @ez80.emit , \ + offset src scale 0 + end if +end inst + +inst im, @mode* + if modeind + err 'invalid indirection' + else if mode = 0 + @ez80.emit + else if mode = 1 + @ez80.emit + else if mode = 2 + @ez80.emit + else + err 'invalid mode' + end if +end inst + +inst mlt, @reg* + if regind + err 'invalid indirection' + else if reg eq reg element 1 & reg @ez80.is_reg @ez80.wreg \ + & reg metadata 1 scale 1 and 002o + @ez80.emit + end if +end inst + +purge inst +purge end?.inst diff --git a/frontends/calculator/CEdev/include/fasmg-ez80/ld.fasmg b/frontends/calculator/CEdev/include/fasmg-ez80/ld.fasmg new file mode 100644 index 0000000..e7bdbf8 --- /dev/null +++ b/frontends/calculator/CEdev/include/fasmg-ez80/ld.fasmg @@ -0,0 +1,759 @@ +assert "\"" = '"' ; check for patched fasmg +include 'tiformat.inc' +define ez80 ez80 +namespace ez80 + include 'ez80.inc' +end namespace +macro ?! $ : $ , \ + $@ : $@ , \ + $$ : $$ , \ + and : and , \ + assert : assert , \ + at : at , \ + break : break , \ + define : define , \ + defined : defined , \ + dup : dup , \ + else : else , \ + emit : emit , \ + end : end , \ + equ : equ , \ + err : err , \ + esc : esc , \ + ez80 : ez80 , \ + from : from , \ + if : if , \ + include : include , \ + irpv : irpv , \ + iterate : iterate , \ + label : label , \ + lengthof : lengthof , \ + load : load , \ + local : local , \ + macro : macro , \ + match : match , \ + mod : mod , \ + namespace: namespace, \ + not : not , \ + or : or , \ + purge : purge , \ + rb : rb , \ + repeat : repeat , \ + restore : restore , \ + restruc : restruc , \ + rawmatch : rawmatch , \ + segment : segment , \ + shl : shl , \ + shr : shr , \ + store : store , \ + struc : struc , \ + used : used , \ + virtual : virtual , \ + while : while , \ + xor : xor + local global, debug, files, segments, hex, output + global equ + segments equ + restore global, segments + + macro files.libs.parse file, offset, isused, anyused* + local private + namespace private + macro library?! name, version* + end if + if anyused + emit 1: $C0, name, 0, version + end if + if 0 + end macro + iterate each, export, export_pointer + macro each?! function* + end if + namespace ez80 + if used global._#function + isused = 1 + global._#function := $ + %-1 + jp offset + virtual + local name + emit 1: '_', `function + load name: $ - $$ from $$ + global equ name = global._#function + end virtual + end if + offset = offset + word + @ez80.il + end namespace + if 0 + end macro + end iterate + if 0 + esc include! file + end if + end namespace + end macro + macro files.libs.handle file, isused* + local offset, anyused + offset = 0 + files.libs.parse file, offset, isused, anyused + anyused := isused + end macro + + macro files.srcs.check file, isused* + local private + namespace private + iterate name, DEF, GLOBAL, PUBLIC, XDEF + iterate style, name, .name + macro style?! symbols*& + end if + iterate symbol, symbols + if used global.symbol + isused = 1 + end if + end iterate + if 0 + end macro + end iterate + end iterate + if 0 + esc include! file + end if + end namespace + end macro + macro files.srcs.parse file* + local private + namespace private + virtual segments.code.area + ?$ equ $ + ?XOR? equ xor + ?AND? equ and + ?OR? equ or + ?SHL? equ shl + ?SHR? equ shr + ?NOT? equ not + iterate name, LIST, NEWPAGE, NOLIST, PAGE + macro name? + end macro + end iterate + iterate name, CPU, TITLE + macro name? arg* + end macro + end iterate + iterate name, COPY, INCLUDE + macro name?! path* + include path + end macro + end iterate + iterate name, EXTERN, EXTERNAL, REF, XREF + macro name? symbols*& + match list : space, symbols + iterate symbol, list + symbol := global.symbol + end iterate + else + iterate symbol, symbols + symbol := global.symbol + end iterate + end match + end macro + end iterate + iterate name, DEF, GLOBAL, PUBLIC, XDEF + macro name? symbols*& + iterate symbol, symbols + global.symbol := symbol + virtual + local name + emit 1: `symbol + load name: $ - $$ from $$ + global equ name = global.symbol + end virtual + end iterate + end macro + end iterate + struc (symbol) EQU? expr* + local error + if ~defined error & defined symbol | error + err 'Symbol "', `symbol, '" already defined' + error = 1 + else + error = 0 + end if + ?symbol = expr + end struc + iterate name, VAR, SET + struc (symbol) name? expr* + ?symbol = expr + end struc + end iterate + macro DS? count + local c + c = count + rb c + end macro + struc DS? count + .: DS? count + end struc + iterate , B,B,1, W,W,2, W24,P,3, L,L,4 + macro D#def? vals*& + local v + iterate val, vals + v = val + emit size: v + end iterate + end macro + macro BLK#blk? count*, init + local c, i + c = count + match, init + emit size: c dup ? + else + i = init + emit size: c dup i + end match + end macro + iterate name, D#def, BLK#blk + struc name? args& + .: name? args + end struc + end iterate + end iterate + iterate , TRIO,DW24, DF,DL + macro name? vals*& + alias? vals + end macro + struc name? args& + .: name? args + end struc + end iterate + macro ALIGN? val* + local v + v = val + rb v-1 - ($ + v-1) mod v + end macro + macro SEGMENT? name* + segment name + end macro + macro ASSUME? expr* + namespace ez80 + assume? expr + end namespace + end macro + iterate register, B, NZ, Z, NC, C, PO, PE, P, M, D, E, \ + H, IXH, IYH, L, IXL, IYL, F, A, I, R, \ + MB, BC, DE, HL, IX, IY, SP, AF, AF' + register? := ez80.register? + end iterate + iterate suffix, , .s?, .l?, .is?, .il?, .sis?, .sil?, .lis?, .lil? + irpv name, ez80.@ez80.oplist + rawmatch rawname, name + define rawname rawname + macro rawname#suffix args& + namespace ez80 + name#suffix args + end namespace + end macro + end rawmatch + end irpv + macro LD? d, s* + namespace ez80 + @ez80.classify dst, dstind, d + @ez80.classify src, srcind, s + if ~dstind & dst eq dst element 1 & dst @ez80.is_reg @ez80.wreg \ + & dst metadata 1 scale 1 and 001o & ~srcind \ + & src relativeto src element 1 & src @ez80.is_reg @ez80.wreg + if src metadata 1 scale 1 = 007o + PUSH? s + POP? d + else + LEA? d, s + end if + else + LD? d, s + end if + end namespace + end macro + macro JR?#suffix args& + namespace ez80 + jq?#suffix args + end namespace + end macro + end iterate + iterate , UEXT,, SEXT,RLA + macro name? reg* + carry? + SBC? reg, reg + end macro + end iterate + macro COMMENT?! delim*& + end match + local inside + inside = 0 + macro ?! line& + local length, text + length = 0 + if inside + length = lengthof `line + text = `line + else if `line = 'end match' + inside = 1 + length = lengthof `delim - 1 + text = `delim shr 8 + end if + repeat length + if ~text xor `delim and $FF + purge ? + break + end if + text = text shr 8 + end repeat + end macro + end macro + + if defined debug + debug.enabled = 0 + debug.startAddr = $ + iterate name, ALIAS, BASE, DEFINE, ENDREC, SPACE, TAG + macro name? str1* + if debug.enabled + virtual debug + debug.uleb128 debug.name + debug.string str1 + end virtual + end if + end macro + end iterate + iterate name, BEGFUNC, ENDFUNC + macro name? str1, num1, str2* + if debug.enabled + local line, addr + line = num1 + addr = $ + virtual debug + debug.uleb128 debug.name + debug.string str1, str2 + debug.uleb128 line - debug.line, addr - debug.addr + end virtual + debug.line = line + debug.addr = addr + end if + end macro + end iterate + macro BEGREC? str1, num1* + if debug.enabled + virtual debug + debug.uleb128 debug.BEGREC + debug.string str1 + debug.uleb128 num1 + end virtual + end if + end macro + iterate , CLASS,u, DIM,u, LENGTH,u, REG,u, SIZE,u, TYPE,s, VALUE,s + macro name? num1* + if debug.enabled + virtual debug + debug.uleb128 debug.name + debug.signed#leb128 num1 + end virtual + end if + end macro + end iterate + macro DEBUG? str1* + virtual debug + debug.uleb128 debug.FILE, lengthof debug.source + emit 1: debug.source + debug.uleb128 debug.startAddr - debug.addr, debug.DEBUG + debug.string str1 + end virtual + debug.enabled = 1 + debug.line = 0 + debug.addr = debug.startAddr + end macro + macro END?! + end if + if debug.enabled + local addr + segment code + addr = $ + virtual debug + debug.uleb128 debug.END, addr - debug.addr + end virtual + debug.addr = addr + end if + if 0 + end macro + macro ENDEF? + if debug.enabled + virtual debug + debug.uleb128 debug.ENDEF + end virtual + end if + end macro + macro FILE? str1* + debug.source = str1 + end macro + macro LINE? num1* + local line, addr + line = num1 + addr = $ + if line <> debug.line | addr <> debug.addr & debug.enabled + virtual debug + debug.uleb128 debug.LINE, line - debug.line, addr - debug.addr + end virtual + debug.line = line + debug.addr = addr + end if + end macro + else + iterate name, ALIAS, BASE, BEGFUNC, BEGREC, CLASS, DEBUG, \ + DEFINE, DIM, ENDEF, ENDFUNC, ENDREC, FILE, \ + LENGTH, LINE, REG, SIZE, SPACE, TAG, TYPE, VALUE + macro name? args& + end macro + end iterate + macro END?! + end if + if 0 + end macro + end if + + struc ? def::& + . def + end struc + macro ? line& + match .rest, line + rest + else match first= .rest, line + first rest + else + line + end match + end macro + if 1 + include file + end if + purge ? + restruc ? + end virtual + end namespace + end macro + macro files.srcs.handle file, isused* + if ~isused + files.srcs.check file, isused + end if + if isused + files.srcs.parse file + end if + end macro + + macro symbol? args*& + iterate arg, args + rawmatch symbol == value, arg + namespace segments + global.symbol := value + virtual + local name + emit 1: `symbol + load name: $ - $$ from $$ + global equ = name global.symbol + end virtual + end namespace + else + 'Syntax error in symbol arguments' + end rawmatch + end iterate + end macro + + iterate name, srcs, libs + macro files.name.add file, used* + local isused + rawmatch rawused, used + namespace segments + isused = rawused + end namespace + end rawmatch + if `file and $FF = "'" + files.name equ file, isused + else + files.name equ `file, isused + end if + end macro + macro name? args*& + local require + iterate arg, args + match file= =used? =if?= used, arg + files.name.add file, used + else match file= =used?, arg + files.name.add file, 1 + else + files.name.add arg, 0 + end match + end iterate + end macro + end iterate + + macro locate? args*& + iterate arg, args + rawmatch name =at? location, arg + segments equ segments.name? + namespace segments + name? := `name + name.base? := location + end namespace + else + err 'Syntax error in locate argument' + end rawmatch + end iterate + end macro + macro range? args*& + iterate arg, args + rawmatch name lower : upper, arg + locate name at lower + namespace segments + name.high? := upper + end namespace + else + err 'Syntax error in range arguments' + end rawmatch + end iterate + end macro + macro order?: args*& + match first =, second =, rest, args + order first, second + order second, rest + else match first =, second, args + locate second at first.base + first.length + else + err 'Not enough order arguments' + end match + end macro + macro merge? args*& + match name == list, args + order list + iterate segment, list + locate name at segment.base + indx %% + namespace segments + name.top? := segment.base + segment.length + if defined segment.high + name.high? := segment.high + end if + end namespace + break + end iterate + else + err 'Syntax error in merge arguments' + end match + end macro + + macro hex value*, leading: '0', digits: 6 + local val, zero, digit, char + emit 1: ' ' + val = value + zero = leading + repeat digits + digit = (val shr ((%% - %) shl 2)) and 0Fh + if digit < 10 + char = '0' + digit + else + char = 'A' + digit - 10 + end if + if digit + zero = '0' + else if % <> %% + char = zero + end if + emit 1: char + end repeat + end macro + + macro map? + local longest, name + postpone ? + virtual as 'map' + longest = lengthof "Segment" + irpv segment, segments + if longest < lengthof segment + longest = lengthof segment + end if + end irpv + emit 1: "Segment", longest - lengthof "Segment" + 1 dup ' ', "Base Top High Length", 10, longest dup '-', 4 dup " ------", '-', 10 + irpv segment, segments + namespace segment + if longest < lengthof segment + longest = lengthof segment + end if + emit 1: segment, longest - lengthof segment dup ' ' + hex base + hex top + if defined high + hex high + else + emit 1: 7 dup ' ' + end if + hex length, ' ' + emit 1: 'h', 10 + end namespace + end irpv + match any, global + longest = lengthof "Label" + irpv symbol, global + match name == value, symbol + if longest < lengthof name + longest = lengthof name + end if + end match + end irpv + emit 1: 10, "Label", longest - lengthof "Label" + 3 dup ' ', "Value", 10, longest dup '-', 3 dup ' ', 6 dup '-', 10 + irpv symbol, global + match name == value, symbol + emit 1: name, longest - lengthof name + 1 dup ' ', '=' + hex value + emit 1: 10 + end match + end irpv + end match + end virtual + end postpone + end macro + macro dbg? + virtual as 'dbg' + debug:: + end virtual + namespace debug + virtual at 0 + iterate name, EOF, ALIAS, BASE, BEGFUNC, BEGREC, CLASS, DEBUG, DEFINE, \ + DIM, END, ENDEF, ENDFUNC, ENDREC, FILE, LENGTH, LINE, \ + REG, SIZE, SPACE, STRINGS, TAG, TYPE, VALUE + name rb 1 + end iterate + end virtual + line = 0 + addr = 0 + macro uleb128 values*& + iterate value, values + local val + val = value + assert val >= 0 + while val shr 7 > 0 + emit 1: val and 07Fh or 080h + val = val shr 7 + end while + emit 1: val + end iterate + end macro + macro sleb128 values*& + iterate value, values + local val + val = value + while val shr 6 <> 0 & val shr 6 <> -1 + emit 1: val and 07Fh or 080h + val = val shr 7 + end while + emit 1: val and 07Fh + end iterate + end macro + restore strings + macro string values*& + iterate value, values + local count, unfound + count = 0 + unfound = 1 + irpv each, debug.strings + if each = value + unfound = 0 + debug.uleb128 % + break + end if + count = %% + end irpv + if unfound + debug.uleb128 count + 1 + debug.strings =: value + end if + end iterate + end macro + end namespace + end macro + + macro segment name* + end virtual + virtual segments.name.area + end macro + + if ~defined segments + err 'No segments defined' + else + restore output.base, output.top ; forbid forward reference + irpv segment, segments + namespace segment + virtual at base + area?:: + end virtual + if ~defined output.base | output.base > base & ~defined high + output.base = base + end if + end namespace + end irpv + irpv file, files.srcs + files = 0 + files.srcs.handle file + end irpv + if ~defined files + err 'Please pass the input files with -i\'srcs "file1" [if require1], "file2" [if require2], ...\'' + end if + irpv file, files.libs + virtual segments.libs.area + files.libs.handle file + end virtual + end irpv + + if defined debug + virtual debug + if defined debug.strings + debug.uleb128 debug.STRINGS + irpv string, debug.strings + if % = 1 + debug.uleb128 %% + end if + debug.uleb128 lengthof string + emit 1: string + end irpv + end if + debug.uleb128 debug.EOF + end virtual + end if + + irpv segment, segments + namespace segment + virtual area + top? := $ + length? := $ - $$ + initlen? := $@ - $$ + end virtual + if ~defined high + if ~defined output.top | output.top < top + output.top = top + end if + else if top > high + repeat 1, len: length, over: top - high, max: high - base + err 'Segment ', segment, ' is ', `len, ' bytes, ', \ + `over, ' bytes larger than the maximum of ', \ + `max, ' bytes' + end repeat + end if + end namespace + end irpv + org output.base + rb output.top - $ + postpone ? + irpv segment, segments + namespace segment + if ~defined high + load output: initlen from area: base + store output: initlen at base + end if + end namespace + end irpv + end postpone + end if + purge ? +end macro diff --git a/frontends/calculator/CEdev/include/fasmg-ez80/ti84pceg.inc b/frontends/calculator/CEdev/include/fasmg-ez80/ti84pceg.inc new file mode 100644 index 0000000..73b7fc1 --- /dev/null +++ b/frontends/calculator/CEdev/include/fasmg-ez80/ti84pceg.inc @@ -0,0 +1,61 @@ +macro ?! + ; assign needs to be local so that it is only + ; defined once (no purge!) so that it can be + ; forward referenced so that it can recurse + local assign + macro assign: name*, expr& + match left =% right, expr + assign name, left mod right + else match left =| right, expr + assign name, left or right + else match left =& right, expr + assign name, left and right + else match left =^ right, expr + assign name, left xor right + else match left =<=< right, expr + assign name, left shl right + else match left =>=> right, expr + assign name, left shr right + else match left =~ right, expr + assign name, left not right + else match =~ right, expr + assign name, not right + else + name? := expr + end match + end macro + struc (name) equ? expr& + assign name, expr + end struc + macro Ld args& + match =equ? expr, args + assign name, expr + end match + end macro + purge ? +end macro + +macro .list? +end macro +macro .nolist? +end macro +macro #define? name +end macro +macro #ifdef? name +end macro +macro #ifndef? name +end macro +macro #endif? +end macro + +element anovaf_vars? +include 'ti84pce.inc' + +restruc equ? +purge Ld +purge .list? +purge .nolist? +purge #define? +purge #ifdef? +purge #ifndef? +purge #endif? diff --git a/frontends/calculator/CEdev/include/fasmg-ez80/tiformat.inc b/frontends/calculator/CEdev/include/fasmg-ez80/tiformat.inc new file mode 100644 index 0000000..23ec697 --- /dev/null +++ b/frontends/calculator/CEdev/include/fasmg-ez80/tiformat.inc @@ -0,0 +1,105 @@ +macro format?.ti? clause& + local all, checkloc, checksum, cplx, data, exec, flag, head, name, process, prot, temp, type, ext, var + macro process: setting + match first rest, setting + process first + process rest + else match =ARCHIVED?, setting + flag = flag or 1 shl 7 + else match =EXECUTABLE?, setting + define exec + else match =PROTECTED?, setting + type = 6 + define prot + else match =REAL?, setting + type = 0 + ext = '8xn' + else match =LIST?, setting + if defined cplx + type = 13 + else + type = 2 + end if + ext = '8xl' + else match =MATRIX?, setting + type = 2 + ext = '8xm' + else match =EQUATION?, setting + type = 3 + ext = '8xy' + else match =STRING?, setting + type = 4 + ext = '8xs' + else match =PROGRAM?, setting + if defined prot + type = 6 + else + type = 5 + end if + ext = '8xp' + else match =PICTURE?, setting + type = 7 + ext = '8ci' + else match =GDB?, setting + type = 1 + ext = '8xd' + else match =COMPLEX?, setting + type = 12 + define cplx + ext = '8xc' + else match =APPVAR?, setting + type = 21 + ext = '8xv' + else match =GROUP?, setting + type = 23 + ext = '8xg' + else match =IMAGE?, setting + type = 26 + ext = '8ca' + else if setting eqtype 'name' + name = setting + else if setting eqtype 0 + type = setting + ext = '8x' + end if + end macro + name = 'A' + type = 6 + ext = '8xp' + flag = 0 + process clause + format binary as ext + assert ~$% & 'Unexpected data before format directive' + dq '**TI83F*' + db 26, 10, 0 + rb 42 + dw sizeof all + label all: checkloc - $% + dw sizeof head, sizeof data + label head: data - $ + db type + dq name + db 0, flag + dw sizeof data + label data: checkloc - $% + dw sizeof var + label var: checkloc - $% + if defined exec + dw 07BEFh + org 0D1A881h + else + org 0 + end if + postpone + label checkloc at $% + end postpone + postpone ? + assert checkloc = $% & 'Unexpected postpone before format directive' + checksum = 0 + repeat sizeof all + load temp: byte from: all + %-1 + checksum = (checksum + temp) and 0FFFFh + end repeat + dw checksum + end postpone +end macro diff --git a/frontends/calculator/CEdev/include/fileioc.h b/frontends/calculator/CEdev/include/fileioc.h new file mode 100644 index 0000000..e703143 --- /dev/null +++ b/frontends/calculator/CEdev/include/fileioc.h @@ -0,0 +1,509 @@ +/** + * @file + * @author Matt "MateoConLechuga" Waltz + * @brief Implements variable reading and writing routines + */ + +#ifndef H_FILEIOC +#define H_FILEIOC + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Varible and flag definitions */ +#define TI_PRGM_TYPE (0x05) +#define TI_PPRGM_TYPE (0x06) +#define TI_TPRGM_TYPE (0x16) +#define TI_APPVAR_TYPE (0x15) +#define TI_REAL_TYPE (0x00) +#define TI_CPLX_TYPE (0x0C) +#define TI_MATRIX_TYPE (0x02) +#define TI_STRING_TYPE (0x04) +#define TI_EQU_TYPE (0x03) +#define TI_REAL_LIST_TYPE (0x01) +#define TI_CPLX_LIST_TYPE (0x0D) + +#ifndef EOF +#define EOF (-1) +#endif + +/** + * @brief Variable slot type + */ +typedef uint8_t ti_var_t; + +/** + * Closes all open slots + * @warning Call before you use any variable functions + */ +void ti_CloseAll(void); + +/** + * Opens a file + * + * An AppVar is used as default file storage + * @param name Name of file to open + * @param mode + * "r" - Opens a file for reading. The file must exist. Keeps file in archive if in archive.
+ * "w" - Creates an empty file for writing. Overwrites file if already exists.
+ * "a" - Appends to a file. Writing operations, append data at the end of the file. The file is created if it does not exist.
+ * "r+" - Opens a file to update both reading and writing. The file must exist. Moves file from archive to RAM if in archive.
+ * "w+" - Creates an empty file for both reading and writing. Overwrites file if already exists.
+ * "a+" - Opens a file for reading and appending. Moves file from archive to RAM if in archive. Created if it does not exist. + * @returns Slot variable + * @note If there isn't enough memory to create the variable, or a slot isn't open, zero (0) is returned + */ +ti_var_t ti_Open(const char *name, const char *mode); + +/** + * Opens a variable + * + * Can open any type of program or appvar variable + * @param varname Name of variable to open + * @param mode + * "r" - Opens a file for reading. The file must exist. Keeps file in archive if in archive.
+ * "w" - Creates an empty file for writing. Overwrites file if already exists.
+ * "a" - Appends to a file. Writing operations, append data at the end of the file. The file is created if it does not exist.
+ * "r+" - Opens a file to update both reading and writing. The file must exist. Moves file from archive to RAM if in archive.
+ * "w+" - Creates an empty file for both reading and writing. Overwrites file if already exists.
+ * "a+" - Opens a file for reading and appending. Moves file from archive to RAM if in archive. Created if it does not exist. + * @param type Specifies the type of variable to open + * @returns Slot variable + * @note If there isn't enough memory to create the variable, or a slot isn't open, zero (0) is returned + */ +ti_var_t ti_OpenVar(const char *varname, const char *mode, uint8_t type); + +/** + * Frees an open variable slot + * @returns Zero if closing failed + */ +int ti_Close(const ti_var_t slot); + +/** + * Returns the name of the file(s) that contains the string as the first part of the variable; + * which can then be used with ti_Open and other functions + * + * seach_pos should be set to NULL to begin a search, and is updated with each call + * + * @code + * char *var_name; + * uint8_t *search_pos = NULL; + * while((var_name = ti_Detect(&search_pos, "my_data")) != NULL) { + * ...do something with the name or search_pos... + * } + * @endcode + * @param curr_search_posistion Current offset in the VAT + * @param detection_string String to search for (NULL to search for all) + * @note If the return value is NULL, there are no more variables to find + */ +char *ti_Detect(void **curr_search_posistion, const char *detection_string); + +/** + * Returns the name of the file(s) that contains the string as the first part of the variable; + * which can then be used with ti_OpenVar and other functions + * + * seach_pos should be set to NULL to begin a search, and is updated with each call + * + * @code + * char *var_name; + * uint8_t *search_pos = NULL; + * while((var_name = ti_DetectVar(&search_pos, "my_data", TI_PRGM_TYPE)) != NULL) { + * ...do something with the name or search_pos... + * } + * @endcode + * @param curr_search_posistion Current offset in the VAT + * @param detection_string String to search for (NULL to search for all) + * @param var_type Type of variable to detect + * @note If the return value is NULL, there are no more variables to find + */ +char *ti_DetectVar(void **curr_search_posistion, const char *detection_string, uint8_t var_type); + +/** + * Returns the name of the file(s) that contains the string as the first part of the variable; + * which can then be used with ti_OpenVar and other functions + * + * seach_pos should be set to NULL to begin a search, and is updated with each call + * + * @code + * char *var_name; + * uint8_t *search_pos = NULL; + * uint8_t type; + * while((var_name = ti_DetectVar(&search_pos, "my_data", &type)) != NULL) { + * if (type == TI_PRGM_TYPE || type == TI_PPRGM_TYPE) { + * ...do something with the name or search_pos... + * } + * } + * @endcode + * @param curr_search_posistion Current offset in the VAT + * @param detection_string String to search for (NULL to search for all) + * @param var_type Type of variable found + * @note If the return value is NULL, there are no more variables to find + */ +char *ti_DetectAny(void **curr_search_posistion, const char *detection_string, uint8_t *var_type); + +/** + * Writes to the current variable slot + * + * @param data Pointer to data to write + * @param size Size (in bytes) of a single data chunk + * @param count Number of data chunks to write to the variable slot + * @param slot Variable slot to write the data to + * @returns The number of chunks written (should be equal to count) + */ +size_t ti_Write(const void *data, size_t size, size_t count, const ti_var_t slot); + +/** + * Reads from the current variable pointer + * + * @param data Pointer to data to read into + * @param size Size (in bytes) of a single data chunk + * @param count Number of data chunks to read from the variable slot + * @param slot Variable slot to read the data from + * @returns The number of chunks read (should be equal to count) + */ +size_t ti_Read(const void *data, size_t size, size_t count, const ti_var_t slot); + +/** + * Writes a character directly into the slot data pointer, and increments the offset + * + * @param c Character to write + * @param slot Variable slot to put the character to + * @returns The input c is returned if no error + * @returns 'EOF' if current offset is larger than file size, or memory isn't large enough + */ +int ti_PutC(const char c, const ti_var_t slot); + +/** + * Pulls a character directly from the slot data pointer, and increments the offset + * + * @param slot Variable slot to get the character from + * @returns 1 byte character at the current variable offset + * @returns 'EOF' if current offset is larger than file size + */ +int ti_GetC(const ti_var_t slot); + +/** + * Seeks to an offset + * + * @param offset Number of bytes to offest from (can be negative) + * @param origin + * SEEK_SET (0) - Seek from beginning of file
+ * SEEK_CUR (1) - Seek from current offset in file
+ * SEEK_END (2) - Seek from end of file + * @param slot Variable slot seeking in + * @returns 'EOF' on seek failure + */ +int ti_Seek(int offset, unsigned int origin, const ti_var_t slot); + +/** + * Seeks to the start of the given variable + * + * Basically an ti_Seek(0, SEEK_SET, slot); + * @param slot Variable slot to rewind + * @returns 'EOF' on rewind failure + */ +int ti_Rewind(const ti_var_t slot); + +/** + * Gets the offset in a slot + * + * @param slot Slot to test + * @returns The value of the current slot offset + */ +uint16_t ti_Tell(const ti_var_t slot); + +/** + * Gets the size of a slot + * + * @param slot Slot to test + * @returns The size of the slot variable + */ +uint16_t ti_GetSize(const ti_var_t slot); + +/** + * Resizes the slot variable + * + * @param slot Slot to resize + * @param new_size New size of slot + * @returns Resized size on success, 0 on failure, or -1 if the slot cannot be opened + * @note The variable offset is set to the beginning of the file + */ +int ti_Resize(size_t new_size, const ti_var_t slot); + +/** + * Tests if a slot is in the archive + * + * @param slot Slot to test + * @returns Zero (0) if the slot is not in the archive + */ +int ti_IsArchived(const ti_var_t slot); + +/** + * Sends the variable into either the archive or RAM if needed + * + * @param archived + * True - Send to Archive
+ * False - Send to RAM + * @param slot Slot to send + * @returns Zero if the operation fails from not enough memory or another error + */ +int ti_SetArchiveStatus(bool archived, const ti_var_t slot); + +/** + * Deletes an AppVar + * + * @param name Name of AppVar to delete + * @returns 0 if failed + */ +int ti_Delete(const char *name); + +/** + * Deletes a variable given the name and type + * + * @param varname Name of variable to delete + * @param type Type of variable to delete + * @returns 0 if failed + */ +int ti_DeleteVar(const char *varname, const uint8_t type); + +/** + * Gets the string used for displaying a TI token + * + * @param length_of_string Pointer to variable to hold length of resulting string (Can be NULL if you don't care) + * @param length_of_token Pointer to variable to hold length of the token, used for determining the next read location (Can be NULL if you don't care) + * @param read_pointer Address of pointer to data to read + * @note read_pointer is updated to the next token, depending on if it is 1 or 2 bytes in length + */ +char *ti_GetTokenString(void **read_pointer, uint8_t *length_of_token, unsigned int *length_of_string); + +/** + * Gets a pointer to the data located at the current posistion in the slot; + * Good way for fast reading of data + * @param slot Variable slot to get pointer of + * @returns Pointer to variable data + */ +void *ti_GetDataPtr(const ti_var_t slot); + +/** + * Gets the VAT location of the slot + * + * @param slot Variable slot to get VAT location of + * @returns VAT location of variable + */ +void *ti_GetVATPtr(const ti_var_t slot); + +/** + * Gets the variable name of an already opened slot + * + * @param slot Variable slot to get name of + * @param name Buffer to store name in, generally at least 10 bytes including null terminator. + * @returns None + */ +void ti_GetName(char *name, const ti_var_t slot); + +/** + * Renames a file + * + * @param old Old name of file + * @param new New name of file + * @returns 0 if success, 1 if file already exists, 2 any other error occurs. + * @warning It is potentially hazardous to rename an open file. Be sure to close the open file before renaming, + */ +uint8_t ti_Rename(const char *old, const char *new); + +/** + * Renames a variable + * + * @param old Old name of variable + * @param new New name of variable + * @param type Type of variable to rename + * @returns 0 if success, 1 if variable already exists, 2 any other error occurs. + * @warning It is potentially hazardous to rename an open variable. Be sure to close the open variable before renaming, + */ +uint8_t ti_RenameVar(const char *old, const char *new, const uint8_t type); + +/** + * Sets a variable + * + * @param var_type Type of variable to set + * @param name Pointer to name of variable + * @param data Pointer to data to set + * @returns 0 if success + */ +uint8_t ti_SetVar(const ti_var_t var_type, const char *name, void *data); + +/** + * Stores a variable to another variable + * + * @param var_type_to Type of variable to store to + * @param to Pointer to data to store to + * @param var_type_from Type of variable to get from + * @param from Pointer to data to get from + * @returns 0 if success + */ +uint8_t ti_StoVar(const ti_var_t var_type_to, void *to, const ti_var_t var_type_from, void *from); + +/** + * Recalls a variable + * + * @param var_type Type of variable to recall + * @param var_name Pointer to name of variable to recall + * @param data_struct Address of pointer to variable structure + * @returns 0 if success + * @note data_struct is set to the variable's data + */ +uint8_t ti_RclVar(const uint8_t var_type, const char *var_name, void **data_struct); + +/** + * Allocates space for a real variable + * @returns Pointer to variable + */ +#define ti_MallocReal() ((real_t*)malloc(sizeof(real_t))) + +/** + * Allocates space for a complex variable + * @returns Pointer to variable + */ +#define ti_MallocCplx() ((cplx_t*)malloc(sizeof(cplx_t))) + +/** + * Allocates space for a string variable + * @param len Length of string + * @returns Pointer to variable + */ +#define ti_MallocString(len) ti_AllocString((len), ((void*)malloc)) + +/** + * Allocates space for a list variable + * @param dim Dimension of list + * @returns Pointer to variable + */ +#define ti_MallocList(dim) ti_AllocList((dim), ((void*)malloc)) + +/** + * Allocates space for a matrix variable + * @param rows Rows in matrix + * @param cols Columns in matrix + * @returns Pointer to variable + */ +#define ti_MallocMatrix(rows, cols) ti_AllocMatrix((rows), (cols), ((void*)malloc)) + +/** + * Allocates space for a complex list variable + * @param dim Dimension of complex list + * @returns Pointer to variable + */ +#define ti_MallocCplxList(dim) ti_AllocCplxList((dim), ((void*)malloc)) + +/** + * Allocates space for an equation variable + * @param len Length of equation variable + * @returns Pointer to variable + */ +#define ti_MallocEqu(len) ti_AllocEqu((len), ((void*)malloc)) + +string_t *ti_AllocString(unsigned len, void (*malloc_routine)(size_t)); +list_t *ti_AllocList(unsigned dim, void (*malloc_routine)(size_t)); +matrix_t *ti_AllocMatrix(uint8_t rows, uint8_t cols, void (*malloc_routine)(size_t)); +cplx_list_t *ti_AllocCplxList(unsigned dim, void (*malloc_routine)(size_t)); +equ_t *ti_AllocEqu(unsigned len, void (*malloc_routine)(size_t)); + +/* Some more definitions using Ans */ +#define TI_ANS_TYPE (0x00) +#define ti_Ans ("\x72\0") + +/* Some string definitions */ +#define ti_Str1 ("\xAA\x0\0") +#define ti_Str2 ("\xAA\x1\0") +#define ti_Str3 ("\xAA\x2\0") +#define ti_Str4 ("\xAA\x3\0") +#define ti_Str5 ("\xAA\x4\0") +#define ti_Str6 ("\xAA\x5\0") +#define ti_Str7 ("\xAA\x6\0") +#define ti_Str8 ("\xAA\x7\0") +#define ti_Str0 ("\xAA\x8\0") +#define ti_StrT ('\xAA') + +/* Some equation definitions */ +#define ti_Y1 ("\x5E\x10\0") +#define ti_Y2 ("\x5E\x11\0") +#define ti_Y3 ("\x5E\x12\0") +#define ti_Y4 ("\x5E\x13\0") +#define ti_Y5 ("\x5E\x14\0") +#define ti_Y6 ("\x5E\x15\0") +#define ti_Y7 ("\x5E\x16\0") +#define ti_Y8 ("\x5E\x17\0") +#define ti_Y9 ("\x5E\x18\0") +#define ti_Y0 ("\x5E\x19\0") +#define ti_EquT ('\x5E') + +/* Some real and complex defines */ +#define ti_A ("\x41\0\0") +#define ti_B ("\x42\0\0") +#define ti_C ("\x43\0\0") +#define ti_D ("\x44\0\0") +#define ti_E ("\x45\0\0") +#define ti_F ("\x46\0\0") +#define ti_G ("\x47\0\0") +#define ti_H ("\x48\0\0") +#define ti_I ("\x49\0\0") +#define ti_J ("\x4A\0\0") +#define ti_K ("\x4B\0\0") +#define ti_L ("\x4C\0\0") +#define ti_M ("\x4D\0\0") +#define ti_N ("\x4E\0\0") +#define ti_O ("\x4F\0\0") +#define ti_P ("\x50\0\0") +#define ti_Q ("\x51\0\0") +#define ti_R ("\x52\0\0") +#define ti_S ("\x53\0\0") +#define ti_T ("\x54\0\0") +#define ti_U ("\x55\0\0") +#define ti_V ("\x56\0\0") +#define ti_W ("\x57\0\0") +#define ti_X ("\x58\0\0") +#define ti_Y ("\x59\0\0") +#define ti_Z ("\x60\0\0") +#define ti_Theta ("\x61\0\0") + +/* Some matrix defines */ +#define ti_MatA ("\x5C\x0\0") +#define ti_MatB ("\x5C\x1\0") +#define ti_MatC ("\x5C\x2\0") +#define ti_MatD ("\x5C\x3\0") +#define ti_MatE ("\x5C\x4\0") +#define ti_MatF ("\x5C\x5\0") +#define ti_MatG ("\x5C\x6\0") +#define ti_MatH ("\x5C\x7\0") +#define ti_MatI ("\x5C\x8\0") +#define ti_MatJ ("\x5C\x9\0") +#define ti_MatT ('\x5C') + +/* Some list defines */ +#define ti_L1 ("\x5D\x0\0") +#define ti_L2 ("\x5D\x1\0") +#define ti_L3 ("\x5D\x2\0") +#define ti_L4 ("\x5D\x3\0") +#define ti_L5 ("\x5D\x4\0") +#define ti_L6 ("\x5D\x5\0") +#define ti_LT ('\x5D') + +/* Compatibility defines */ +#define ti_Program TI_PRGM_TYPE +#define ti_ProtectedProgram TI_PPRGM_TYPE +#define ti_TempProgram TI_TPRGM_TYPE +#define ti_AppVar TI_APPVAR_TYPE + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/frontends/calculator/CEdev/include/float.h b/frontends/calculator/CEdev/include/float.h new file mode 100644 index 0000000..bd022b2 --- /dev/null +++ b/frontends/calculator/CEdev/include/float.h @@ -0,0 +1,75 @@ +/* + * Copyright (C) 1999-2008 by Zilog, Inc. + * All Rights Reserved + * Modified by Matt "MateoConLechuga" Waltz for TI84+CE platform + */ +#ifndef FLOAT_H +#define FLOAT_H + +#define FLT_RADIX 2 /* radix of exponent representation */ + +#define FLT_ROUNDS 0 /* addition rounds to nearest */ + +/* number of base-FLT_RADIX digits in the mantissa */ + +#define FLT_MANT_DIG 24 +#define DBL_MANT_DIG FLT_MANT_DIG +#define LDBL_MANT_DIG FLT_MANT_DIG + +/* number of decimal digits of precision */ + +#define FLT_DIG 6 +#define DBL_DIG FLT_DIG +#define LDBL_DIG FLT_DIG + +/* minimum negative integer such that FLT_RADIX raised to that */ +/* power approximates a positive floating point number in the */ +/* range of representable values. */ + +#define FLT_MIN_EXP -125 +#define DBL_MIN_EXP FLT_MIN_EXP +#define LDBL_MIN_EXP FLT_MIN_EXP + +/* maximum integer such that FLT_RADIX raised to that power */ +/* approximates a floating point number in the range of */ +/* representable numbers. */ + +#define FLT_MAX_EXP 128 +#define DBL_MAX_EXP FLT_MAX_EXP +#define LDBL_MAX_EXP FLT_MAX_EXP + +/* maximum integer such that 10 raised to that power */ +/* approximates a floating point number in the range of */ +/* representable value ((int)log10(FLT_MAX),etc) */ + +#define FLT_MAX_10_EXP +38 +#define DBL_MAX_10_EXP FLT_MAX_10_EXP +#define LDBL_MAX_10_EXP FLT_MAX_10_EXP + +/* minimum negative integer such that 10 raised to that power */ +/* approximates a positive floating point number in the range */ +/* of representable values ((int)log10(FLT_MIN),etc.) */ + +#define FLT_MIN_10_EXP -37 +#define DBL_MIN_10_EXP FLT_MIN_10_EXP +#define LDBL_MIN_10_EXP FLT_MIN_10_EXP + +/* maximum representable floating point numbers */ + +#define FLT_MAX 3.40282347E+38 +#define DBL_MAX FLT_MAX +#define LDBL_MAX FLT_MAX + +/* minimum positive number x such that 1.0 + x != 1.0 (b ^ (1-p)) */ + +#define FLT_EPSILON 1.19209290E-07 +#define DBL_EPSILON FLT_EPSILON +#define LDBL_EPSILON FLT_EPSILON + +/* minimum representable positive floating point numbers */ + +#define FLT_MIN 1.17549435E-38 +#define DBL_MIN FLT_MIN +#define LDBL_MIN FLT_MIN + +#endif diff --git a/frontends/calculator/CEdev/include/format.h b/frontends/calculator/CEdev/include/format.h new file mode 100644 index 0000000..52a0e80 --- /dev/null +++ b/frontends/calculator/CEdev/include/format.h @@ -0,0 +1,109 @@ +/* + * Copyright (C) 1999-2008 by Zilog, Inc. + * All Rights Reserved + * Modified by Matt "MateoConLechuga" Waltz for TI84+CE platform + */ +#ifndef FORMAT_H +#define FORMAT_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _PTR_ +#define _PTR_ * +#endif + +/* Note: 24 bits times log(2) is 7.224 decimal digits. + We only need 14 if and when we support doubles. */ +#define MAXDIGITS 10 +#define MINEXP -4 +#define DEFAULT_PRECISION 6 + +/* format status codes */ +#define FMT_OK 0 +#define FMT_ERR 1 +#define FMT_PASS_THRU 2 + +/* format flags */ +#define FMT_FLAG_MINUS 0x01 +#define FMT_FLAG_PLUS 0x02 +#define FMT_FLAG_SPACE 0x04 +#define FMT_FLAG_POUND 0x08 +#define FMT_FLAG_IGNORE 0x10 // scanf only. +#define FMT_FLAG_PRECISION 0x10 // Only needed for %s, as 0 is valid precision +#define FMT_FLAG_UPPERCASE 0x20 // Added. +#define FMT_FLAG_PAD_ZERO 0x40 +#define FMT_FLAG_STRIP 0x80 // Output only. +#define FMT_FLAG_SET 0x80 // Input only; maybe not needed if + // set_begin != 0 is used instead. + +/* structures and defines for format routines */ +/* NOTE: Some fields in this structure, and the bits in flags, are */ +/* known to the optimizer, If you change this, check out the */ +/* optimizer code in genprintf.c . */ + +struct fmt_type { + unsigned char status; /* status, OK, ERR, or PASS_THRU */ + unsigned char flags; /* flags bit mask */ + char size; /* size character h,l or L */ + char chr; /* pass thru character */ + char type; /* type of argument d,i,o,u,x ... */ + char field_width; /* field width */ + char precision; /* precision */ + char _PTR_ set_begin; /* pointer to first char in set */ + char _PTR_ set_end; /* pointer to last char in set */ + unsigned char pad_whole; + unsigned char pad_pre_fract; + unsigned char pad_post_fract; + char _PTR_ pad_at; + }; + +/* info flags */ +#define FLT_INFO_SIGN (1<<0) +#define FLT_INFO_INF (1<<1) +#define FLT_INFO_NAN (1<<2) + +/* Note: using char to represent the (decimal) exponent only works for + 4-byte floats. If we choose to support 8-byte doubles, then this must + be increased. */ +struct flt_info { + unsigned char flags; /* 1=sign, 2=inf, 4=nan */ + char exp; /* (signed) exponent (base 10) */ + unsigned char digits[MAXDIGITS]; /* max significant digits */ +}; + +extern struct fmt_type __print_fmt; +extern char __print_buff[]; +extern unsigned char __print_len; +extern char __print_leading_char; // Initial +, -, or space for number +extern void __print_send(); + +extern void _u_stoa(short); +extern void _u_ustoa(unsigned short); +extern void _u_itoa(int); +extern void _u_uitoa(unsigned int); +extern void _u_ltoa(long); +extern void _u_ultoa(unsigned long); +extern int _u_print(char _PTR_ src,char _PTR_ fmt,va_list); +extern int _u_scan(char _PTR_ src,char _PTR_ fmt,va_list ap); +extern void _u_dtof(double); +extern void _u_dtog(double); + +extern char _PTR_ _u_pscan(char _PTR_ fmt,struct fmt_type _PTR_ str, va_list _PTR_ argp); +extern char _PTR_ _u_sscan (char _PTR_ fmt,struct fmt_type _PTR_ str); + +extern void _u_reverse(char _PTR_ s); +extern char _PTR_ _u_dtoe(double); + +extern void _u_flt_info(double,struct flt_info _PTR_); +extern void _u_flt_rnd(struct flt_info _PTR_ , char); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/frontends/calculator/CEdev/include/graphx.h b/frontends/calculator/CEdev/include/graphx.h new file mode 100644 index 0000000..bbcf697 --- /dev/null +++ b/frontends/calculator/CEdev/include/graphx.h @@ -0,0 +1,1514 @@ +/** + * @file + * @brief Contains optimized graphics operations and routines + * + * Example program template with best graphx buffer usage pattern: + * @code + * // Standard #includes omitted + * + * bool partial_redraw; + * + * // Implement us! + * void begin(); + * void end(); + * bool step(); + * void draw(); + * + * void main() { + * begin(); // No rendering allowed! + * gfx_Begin(); + * gfx_SetDrawBuffer(); // Draw to the buffer to avoid rendering artifats + * + * while (step()) { // No rendering allowed in step! + * if (partial_redraw) // Only want to redraw part of the previous frame? + * gfx_BlitScreen(); // Copy previous frame as a base for this frame + * draw(); // As little non-rendering logic as possible + * gfx_SwapDraw(); // Queue the buffered frame to be displayed + * } + * + * gfx_End(); + * end(); + * } + * @endcode + * + * @authors Matt "MateoConLechuga" Waltz + * @authors Jacob "jacobly" Young + * @authors Zachary "Runer112" Wassall + * @authors Patrick "tr1p1ea" Prendergast + * @authors "grosged" + */ + +#ifndef H_GRAPHX +#define H_GRAPHX + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Sprite (image) type. + * + * Whether or not a sprite includes transparency is not explicitly encoded, and + * is determined only by usage. If used with transparency, transparent pixels + * are those with a certain color index, which can be set with + * gfx_SetTransparentColor(). + * + * @attention + * Displaying a gfx_rletsprite_t (which includes transparency) is significantly + * faster than displaying a gfx_sprite_t with transparency, and should be + * preferred. However, gfx_rletsprite_t does not support transformations, such + * as flipping and rotation. Such transformations can be applied to a + * gfx_sprite_t, which can then be converted to a gfx_rletsprite_t for faster + * display using gfx_ConvertToNewRLETSprite() or gfx_ConvertToRLETSprite(). + * + * @remarks + * Create at compile-time with a tool like + * convpng. + * Create at runtime (with uninitialized data) with gfx_MallocSprite(), + * gfx_UninitedSprite(), or gfx_TempSprite(). + */ +typedef struct { + uint8_t width; /**< Width of the image */ + uint8_t height; /**< Height of the image */ + uint8_t data[1]; /**< Image data array */ +} gfx_sprite_t; + +/** + * @brief Sprite (image) type with RLE transparency. + * + * @attention + * Displaying a gfx_rletsprite_t (which includes transparency) is significantly + * faster than displaying a gfx_sprite_t with transparency, and should be + * preferred. However, gfx_rletsprite_t does not support transformations, such + * as flipping and rotation. Such transformations can be applied to a + * gfx_sprite_t, which can then be converted to a gfx_rletsprite_t for faster + * display using gfx_ConvertToNewRLETSprite() or gfx_ConvertToRLETSprite(). + * + * @remarks + * Create at compile-time with a tool like + * convpng. + */ +typedef struct { + uint8_t width; /**< Width of the image */ + uint8_t height; /**< Height of the image */ + uint8_t data[1]; /**< Image data array */ +} gfx_rletsprite_t; + +/** + * @brief A simple structure for working with 2D points + */ +typedef struct { + int x; /**< x point */ + int y; /**< y point */ +} gfx_point_t; + +/** + * @brief Stores operating modes of this library + * @see gfx_Begin + */ +typedef enum { + gfx_8bpp = 0x27 /**< Enable 8 bits per pixel mode */ +} gfx_mode_t; + +/** + * Dynamically allocates memory for a sprite. + * + * Allocates the memory with \p malloc_routine. \p width and \p height will be + * set in the allocated sprite. Returns \c NULL upon allocation failure. + * + * @note + * If not used in a dynamic context and \p width and \p height are static, + * consider statically allocating the sprite instead with gfx_UninitedSprite() + * or gfx_TempSprite(). + * + * @remarks + * If using \c malloc as the \p malloc_routine, gfx_MallocSprite() can be used + * as a shortcut. + * + * @param width sprite width + * @param height sprite height + * @param malloc_routine malloc implementation to use + * @return pointer to the allocated sprite + */ +gfx_sprite_t *gfx_AllocSprite(uint8_t width, uint8_t height, void *(*malloc_routine)(size_t)); + +/** + * Dynamically allocates memory for a sprite using \c malloc. + * + * \p width and \p height will be set in the sprite. Returns \c NULL upon + * allocation failure. + * + * @note + * If not used in a dynamic context and \p width and \p height are static, + * consider statically allocating the sprite instead with gfx_UninitedSprite() + * or gfx_TempSprite(). + * + * @param width sprite width + * @param height sprite height + * @return pointer to the allocated sprite + * @see gfx_AllocSprite + */ +#define gfx_MallocSprite(width, height) \ +gfx_AllocSprite(width, height, malloc) + +/** + * Statically allocates unitialized memory for a sprite. + * + * Declares a gfx_sprite_t * with the given \p name pointing to the + * allocated memory. \p width and \p height will \b not be set in the sprite, + * unlike gfx_TempSprite(). + * + * @warning + * If used outside of a function body, the memory will be allocated in the + * global unitialized data segment (BSS). If used inside a function body, the + * memory will be allocated on the stack. If the sprite is sufficiently large, + * usage inside a function body will overflow the stack, so it is recommended + * that this normally be used outside of a function body. + * + * @param name name of declared gfx_sprite_t * + * @param width sprite width + * @param height sprite height + * @see gfx_MallocSprite + */ +#define gfx_UninitedSprite(name, width, height) \ +uint8_t name##_data[2 + (width) * (height)]; \ +gfx_sprite_t *name = (gfx_sprite_t *)name##_data + +/** + * Statically allocates memory for a sprite. + * + * Declares a gfx_sprite_t * with the given \p name pointing to the + * allocated memory. \p width and \p height will be set in the sprite, unlike + * gfx_UninitedSprite(). + * + * @attention + * Due to \p width and \p height being set, the memory will be allocated in the + * initialized data segment. If the compiled program is not compressed, then + * this could be a serious source of bloat and gfx_UninitedSprite() should be + * preferred. + * + * @param name name of declared gfx_sprite_t * + * @param width sprite width + * @param height sprite height + * @see gfx_MallocSprite + */ +#define gfx_TempSprite(name, width, height) \ +uint8_t name##_data[2 + (width) * (height)] = { (width), (height) }; \ +gfx_sprite_t *name = (gfx_sprite_t *)name##_data + +/** + * Dynamically allocates memory for a sprite with RLE transpareny. + * + * Allocates the memory with \p malloc_routine. Returns \c NULL upon allocation + * failure. + * + * \p data_size is the maximum predicted/calculated size of the sprite data + * (excuding the width and height bytes) that will be stored in the allocated + * sprite. Sprite data size could be up to (width + 1) * height * 3 / 2 + * bytes in the worst case, in which pixels horizontally alternate between + * non-transparent and transparent and each row begins with a non-transparent + * pixel. But if the average length of a horizontal transparent run is at least + * 2, then the sprite data will be no larger than (width + 1) * height + * bytes. The exact data size necessary is 2 * + * num_horizontal_transparent_runs + num_non_transparent_pixels + + * num_rows_beginning_with_non_transparent_pixel - + * num_rows_ending_with_transparent_pixel bytes. + * + * @note + * If not used in a dynamic context and \p data_size is static, consider + * statically allocating the sprite instead with gfx_UninitedRLETSprite() or + * gfx_TempRLETSprite(). + * + * @remarks + * If using \c malloc as the \p malloc_routine, gfx_MallocRLETSprite() can be + * used as a shortcut. + * + * @param data_size (maximum) sprite data size + * @param malloc_routine malloc implementation to use + * @return pointer to the allocated sprite + */ +#define gfx_AllocRLETSprite(data_size, malloc_routine) \ +(gfx_rletsprite_t *)(malloc_routine)(data_size) + +/** + * Dynamically allocates memory for a sprite with RLE transparency using \c + * malloc. + * + * \p data_size is the size to allocate for sprite data; see + * gfx_AllocRLETSprite() for information. Returns \c NULL upon allocation + * failure. + * + * @note + * If not used in a dynamic context and \p data_size is static, consider + * statically allocating the sprite instead with gfx_UninitedRLETSprite() or + * gfx_TempRLETSprite(). + * + * @param data_size (maximum) sprite data size + * @return pointer to the allocated sprite + * @see gfx_AllocRLETSprite + */ +#define gfx_MallocRLETSprite(data_size) \ +gfx_AllocRLETSprite(data_size, malloc) + +/** + * Statically allocates unitialized memory for a sprite with RLE transparency. + * + * Declares a gfx_rletsprite_t * with the given \p name pointing to the + * allocated memory. \p data_size is the size to allocate for sprite data; see + * gfx_AllocRLETSprite() for information. + * + * @warning + * If used outside of a function body, the memory will be allocated in the + * global unitialized data segment (BSS). If used inside a function body, the + * memory will be allocated on the stack. If the sprite is sufficiently large, + * usage inside a function body will overflow the stack, so it is recommended + * that this normally be used outside of a function body. + * + * @param name name of declared gfx_rletsprite_t * + * @param data_size (maximum) sprite data size + * @see gfx_MallocRLETSprite + */ +#define gfx_UninitedRLETSprite(name, data_size) \ +uint8_t name##_data[2 + (data_size)]; \ +gfx_rletsprite_t *name = (gfx_rletsprite_t *)name##_data + +/** + * Initializes the graphics library setup + */ +int gfx_Begin(); + +/** + * Closes the graphics setup + * + * Restores the LCD to 16bpp prefered by the OS and clears the screen. + */ +void gfx_End(void); + +/** + * Used for accessing the lcd palette directly + * + * This consists of 256 entries, each 2 bytes in size for a total of 512 bytes + */ +#define gfx_palette \ +((uint16_t*)0xE30200) + +/** + * Array of the LCD RAM + * + * Total of 153600 bytes in size + * @see gfx_vbuffer + */ +#define gfx_vram \ +((uint8_t*)0xD40000) + +/** + * Array of the current drawing buffer + * + * Total of 76800 bytes in size + * @see gfx_vram + */ +#define gfx_vbuffer \ +(**(uint8_t(**)[240][320])0xE30014) + +/** + * @brief Defines a rectangular graphics region + * + * @see gfx_GetClipRegion + */ +typedef struct { + int xmin; /**< Minimum x coordinate */ + int ymin; /**< Minimum y coordinate */ + int xmax; /**< Maximum x coordinate */ + int ymax; /**< Maximum y coordinate */ +} gfx_region_t; + +/** + * @brief Defines tilemap structure + * + * @see gfx_Tilemap + */ +typedef struct { + uint8_t *map; /**< Pointer to indexed map array */ + gfx_sprite_t **tiles; /**< Pointer to tiles */ + uint8_t tile_height; /**< Individual tile height */ + uint8_t tile_width; /**< Individual tile width */ + uint8_t draw_height; /**< Number of tiles per row to draw */ + uint8_t draw_width; /**< Number of tile per column to draw */ + uint8_t type_width; /**< Tile type height @see gfx_tilemap_type_t */ + uint8_t type_height; /**< Tile type width @see gfx_tilemap_type_t */ + uint8_t height; /**< Total number of rows in the tilemap */ + uint8_t width; /**< Total number of columns in the tilemap */ + uint8_t y_loc; /**< Y pixel location of tilemap */ + uint24_t x_loc; /**< X pixel location to tilemap */ +} gfx_tilemap_t; + +/** + * @brief Used for defining tile types + * + * @see gfx_tilemap_t + */ +typedef enum { + gfx_tile_no_pow2 = 0, /**< Set when using non powers of 2 */ + gfx_tile_2_pixel, /**< Set when using 2 pixel tiles */ + gfx_tile_4_pixel, /**< Set when using 4 pixel tiles */ + gfx_tile_8_pixel, /**< Set when using 8 pixel tiles */ + gfx_tile_16_pixel, /**< Set when using 16 pixel tiles */ + gfx_tile_32_pixel, /**< Set when using 32 pixel tiles */ + gfx_tile_64_pixel, /**< Set when using 64 pixel tiles */ + gfx_tile_128_pixel /**< Set when using 128 pixel tiles */ +} gfx_tilemap_type_t; + +/** + * Draws a tilemap given an initialized tilemap structure + * + * @param tilemap Pointer to initialized tilemap structure + * @param x_offset Offset in pixels from the left of the tilemap + * @param y_offset Offset in pixels from the top of the tilemap + * @see gfx_tilemap_t + */ +void gfx_Tilemap(gfx_tilemap_t *tilemap, uint24_t x_offset, uint24_t y_offset); + +/** + * Draws an unclipped tilemap given an initialized tilemap structure + * + * @param tilemap Pointer to initialized tilemap structure + * @param x_offset Offset in pixels from the left of the tilemap + * @param y_offset Offset in pixels from the top of the tilemap + * @see gfx_tilemap_t + */ +void gfx_Tilemap_NoClip(gfx_tilemap_t *tilemap, uint24_t x_offset, uint24_t y_offset); + +/** + * Draws a transparent tilemap given an initialized tilemap structure + * + * @param tilemap Pointer to initialized tilemap structure + * @param x_offset Offset in pixels from the left of the tilemap + * @param y_offset Offset in pixels from the top of the tilemap + * @see gfx_tilemap_t + */ +void gfx_TransparentTilemap(gfx_tilemap_t *tilemap, uint24_t x_offset, uint24_t y_offset); + +/** + * Draws an unclipped transparent tilemap given an initialized tilemap structure + * + * @param tilemap Pointer to initialized tilemap structure + * @param x_offset Offset in pixels from the left of the tilemap + * @param y_offset Offset in pixels from the top of the tilemap + * @see gfx_tilemap_t + */ +void gfx_TransparentTilemap_NoClip(gfx_tilemap_t *tilemap, uint24_t x_offset, uint24_t y_offset); + +/** + * Gets a pointer to a particular tile given an initialized tilemap structure and pixel offsets + * + * @param tilemap Pointer to initialized tilemap structure + * @param x_offset Offset in pixels from the left of the tilemap + * @param y_offset Offset in pixels from the top of the tilemap + */ +uint8_t *gfx_TilePtr(gfx_tilemap_t *tilemap, uint24_t x_offset, uint24_t y_offset); + +/** + * Sets a particular tile's value given an initialized tilemap structure and pixel offsets + * + * @param tilemap Pointer to initialized tilemap structure + * @param x_offset Offset in pixels from the left of the tilemap + * @param y_offset Offset in pixels from the top of the tilemap + * @param value Value to set tile to + */ +#define gfx_SetTile(tilemap, x_offset, y_offset, value) \ +(*(gfx_TilePtr((tilemap), (x_offset), (y_offset))) = (uint8_t)(value)) + +/** + * Gets a particular tile's value given an initialized tilemap structure and pixel offsets + * + * @param tilemap Pointer to initialized tilemap structure + * @param x_offset Offset in pixels from the left of the tilemap + * @param y_offset Offset in pixels from the top of the tilemap + */ +#define gfx_GetTile(tilemap, x_offset, y_offset) \ +(*(gfx_TilePtr((tilemap), (x_offset), (y_offset)))) + +/** + * Gets a pointer to a particular tile given an initialized tilemap structure and mapped offsets + * + * @param tilemap Pointer to initialized tilemap structure + * @param row Offset in bytes in the row + * @param col Offset in bytes in the column + */ +uint8_t *gfx_TilePtrMapped(gfx_tilemap_t *tilemap, uint8_t row, uint8_t col); + +/** + * Sets a particular tile's value given an initialized tilemap structure and mapped offsets + * + * @param tilemap Pointer to initialized tilemap structure + * @param row Offset in bytes in the row + * @param col Offset in bytes in the column + * @param value Value to set tile to + */ +#define gfx_SetTileMapped(tilemap, row, col, value) \ +(*(gfx_TilePtrMapped((tilemap), (row), (col))) = (uint8_t)(value)) + +/** + * Gets a particular tile's value given an initialized tilemap structure and mapped offsets + * + * @param tilemap Pointer to initialized tilemap structure + * @param row Offset in bytes in the row + * @param col Offset in bytes in the column + */ +#define gfx_GetTileMapped(tilemap, row, col) \ +(*(gfx_TilePtrMapped((tilemap), (row), (col)))) + +/** + * Sets the color index that drawing routines will use + * + * This applies to lines, rectangles, circles, etc + * @param index Color index to set + * @returns Previous set color index + */ +uint8_t gfx_SetColor(uint8_t index); + +/** + * Sets the transparent index that drawing routines will use + * + * This currently applies to transparent sprites, both scaled and unscaled + * @param index Transparent color index to set + * @returns The previous transparent color index + */ +uint8_t gfx_SetTransparentColor(uint8_t index); + +/** + * Sets up the default palette for the given mode + * + * @param mode Palette to use + */ +void gfx_SetDefaultPalette(gfx_mode_t mode); + +/** + * Sets entries in the palette + * + * @param palette Pointer to palette to use + * @param size Size of palette to store + * @param offset Offset in bytes to start at (Generally set to 0) + */ +void gfx_SetPalette(uint16_t *palette, uint24_t size, uint8_t offset); + +/** + * Fills the screen with a given palette index + * + * @param index Color index to fill with + */ +void gfx_FillScreen(uint8_t index); + +/** + * Implements a faster version of gfx_FillScreen(0) + * + * @see gfx_FillScreen + */ +void gfx_ZeroScreen(void); + +/** + * Sets a pixel to the global color index + * + * This is measured from the top left origin of the screen. + * Pixels are only clipped within the screen boundaries + * @param x X coordinate location + * @param y Y coordinate location + * @see gfx_SetColor + */ +void gfx_SetPixel(uint24_t x, uint8_t y); + +/** + * Gets a pixel's color index + * + * This is measured from the top left origin of the screen. + * Pixels are only clipped within the screen boundaries + * @param x X coordinate location + * @param y Y coordinate location + */ +uint8_t gfx_GetPixel(uint24_t x, uint8_t y); + +/** + * Draws a line + * + * This is measured from the top left origin of the screen. + * @param x0 First X coordinate + * @param y0 First Y coordinate + * @param x1 Second X coordinate + * @param y1 Second Y coordinate + */ +void gfx_Line(int x0, int y0, int x1, int y1); + +/** + * Draws an unclipped line + * + * This is measured from the top left origin of the screen. + * @param x0 First X coordinate + * @param y0 First Y coordinate + * @param x1 Second X coordinate + * @param y1 Second Y coordinate + */ +void gfx_Line_NoClip(uint24_t x0, uint8_t y0, uint24_t x1, uint8_t y1); + +/** + * Clips the points in a window region + * + * This is measured from the top left origin of the screen. + * @param x0 First X coordinate + * @param y0 First Y coordinate + * @param x1 Second X coordinate + * @param y1 Second Y coordinate + * @returns False if not within window, true otherwise + */ +bool gfx_CohenSutherlandClip(int *x0, int *y0, int *x1, int *y1); + +/** + * Draws a horizontal line + * + * This is measured from the top left origin of the screen. + * Performs faster than using @c gfx_Line + * @param x X coordinate + * @param y Y coordinate + * @param length Length of line + */ +void gfx_HorizLine(int x, int y, int length); + +/** + * Draws an unclipped horizontal line + * + * This is measured from the top left origin of the screen. + * Performs faster than using @c gfx_Line + * @param x X coordinate + * @param y Y coordinate + * @param length Length of line + */ +void gfx_HorizLine_NoClip(uint24_t x, uint8_t y, uint24_t length); + +/** + * Draws a vertical line + * + * This is measured from the top left origin of the screen. + * Performs faster than using @c gfx_Line + * @param x X coordinate + * @param y Y coordinate + * @param length Length of line + */ +void gfx_VertLine(int x, int y, int length); + +/** + * Draws an unclipped vertical line + * + * This is measured from the top left origin of the screen. + * Performs faster than using @c gfx_Line + * @param x X coordinate + * @param y Y coordinate + * @param length Length of line + */ +void gfx_VertLine_NoClip(uint24_t x, uint8_t y, uint24_t length); + +/** + * Draws a rectangle outline + * + * This is measured from the top left origin of the screen. + * @param x X coordinate + * @param y Y coordinate + * @param width Width of rectangle + * @param height Height of rectangle + */ +void gfx_Rectangle(int x, int y, int width, int height); + +/** + * Draws an unclipped rectangle outline + * + * This is measured from the top left origin of the screen. + * @param x X coordinate + * @param y Y coordinate + * @param width Width of rectangle + * @param height Height of rectangle + */ +void gfx_Rectangle_NoClip(uint24_t x, uint8_t y, uint24_t width, uint8_t height); + +/** + * Draws a filled rectangle + * + * This is measured from the top left origin of the screen. + * @param x X coordinate + * @param y Y coordinate + * @param width Width of rectangle + * @param height Height of rectangle + */ +void gfx_FillRectangle(int x, int y, int width, int height); + +/** + * Draws an unclipped filled rectangle + * + * This is measured from the top left origin of the screen. + * @param x X coordinate + * @param y Y coordinate + * @param width Width of rectangle + * @param height Height of rectangle + */ +void gfx_FillRectangle_NoClip(uint24_t x, uint8_t y, uint24_t width, uint8_t height); + +/** + * Draws a circle outline + * + * This is measured from the top left origin of the screen. + * @param x X coordinate + * @param y Y coordinate + * @param radius The radius of the circle + */ +void gfx_Circle(int x, int y, unsigned radius); + +/** + * Draws a filled circle + * + * This is measured from the top left origin of the screen. + * @param x X coordinate + * @param y Y coordinate + * @param radius The radius of the circle + */ +void gfx_FillCircle(int x, int y, unsigned radius); + +/** + * Draws an unclipped filled circle + * + * This is measured from the top left origin of the screen. + * @param x X coordinate + * @param y Y coordinate + * @param radius The radius of the circle + */ +void gfx_FillCircle_NoClip(uint24_t x, uint8_t y, unsigned radius); + +/** + * Draws an unclipped circle outline + * + * This is measured from the top left origin of the screen. + * @param x X coordinate + * @param y Y coordinate + * @param radius The radius of the circle + */ +#define gfx_Circle_NoClip(x, y, radius) \ +gfx_Circle((x), (y), (radius)) + +/** + * Draws a polygon outline + * + * Points are measured from the top left origin of the screen. + * @code + * int points[6] = { + * 160, 1, // (x0, y0) + * 1, 238, // (x1, y1) + * 318,238, // (x2, y2) + * }; + * num_points = 3; + * gfx_Polygon(points, num_points) + * @endcode + * @param points Pointer to x and y pairs + * @param num_points Number of x and y pairs + */ +void gfx_Polygon(int *points, unsigned num_points); + +/** + * Draws an unclipped polygon outline + * + * Points are measured from the top left origin of the screen. + * @code + * int points[6] = { + * 160, 1, // (x0, y0) + * 1, 238, // (x1, y1) + * 318,238, // (x2, y2) + * }; + * num_points = 3; + * gfx_Polygon_NoClip(points, num_points) + * @endcode + * @param points Pointer to x and y pairs + * @param num_points Number of x and y pairs + */ +void gfx_Polygon_NoClip(int *points, unsigned num_points); + +/** + * Draws a filled triangle + * + * Points are measured from the top left origin of the screen. + * @param x0 First X coordinate + * @param y0 First Y coordinate + * @param x1 Second X coordinate + * @param y1 Second Y coordinate + * @param x2 Third X coordinate + * @param y2 Third Y coordinate + */ +void gfx_FillTriangle(int x0, int y0, int x1, int y1, int x2, int y2); +void gfx_FillTriangle_NoClip(int x0, int y0, int x1, int y1, int x2, int y2); + +/** + * Forces all graphics routines draw location + * + * @param location Location routines should draw to + * @see gfx_draw_location_t + */ +void gfx_SetDraw(uint8_t location); + +/** + * @brief Different locations routines can be drawn to + */ +typedef enum { + gfx_screen = 0, /**< Screen */ + gfx_buffer /**< Buffer */ +} gfx_draw_location_t; + +/** + * Makes the subsequent GraphX drawing routines act on the buffer + */ +#define gfx_SetDrawBuffer() \ +gfx_SetDraw(gfx_buffer) + +/** + * Makes the subsequent GraphX drawing routines act on the screen + */ +#define gfx_SetDrawScreen() \ +gfx_SetDraw(gfx_screen) + +/** + * Gets current draw location + * + * @returns Location type enumeration + * @see gfx_draw_location_t + */ +uint8_t gfx_GetDraw(void); + +/** + * Swaps the roles of the screen and drawing buffers. + * + * Does not wait for the old screen buffer to finish being displayed. Instead, + * the next invocation of a graphx drawing function will block, waiting for this + * event. To block and wait explicitly, use gfx_Wait(). + * + * The LCD driver maintains its own screen buffer pointer for the duration of a + * refresh. The swap performed by this function will only be picked up at a + * point between refreshes. + * + * @remarks + * In practice, this function should be invoked immediately after finishing + * drawing a frame to the drawing buffer, and invocation of the first graphx + * drawing function for the next frame should be scheduled as late as possible + * relative to non-drawing logic. Non-drawing logic can execute during time when + * a drawing function may otherwise block. + */ +void gfx_SwapDraw(void); + +/** + * Waits for the screen buffer to finish being displayed after gfx_SwapDraw(). + * + * @remarks + * In practice, this function should not need to be invoked by user code. It + * should be invoked by custom drawing functions (as late as reasonably + * possible) before writing to the drawing buffer, gfx_vbuffer. + */ +void gfx_Wait(void); + +/** + * Copies the input buffer to the opposite buffer + * + * No clipping is performed; as it is a copy not a draw + * @param src drawing location to copy from + * @see gfx_draw_location_t + */ +void gfx_Blit(uint8_t src); + +/** + * Copies lines from the input buffer to the opposite buffer + * + * No clipping is performed; as it is a copy not a draw + * @param src drawing location to copy from + * @param y_loc Y Location to begin copying at + * @param num_lines Number of lines to copy + * @see gfx_draw_location_t + */ +void gfx_BlitLines(uint8_t src, uint8_t y_loc, uint8_t num_lines); + +/** + * Copies a rectangle from the input buffer to the opposite buffer + * + * No clipping is performed; as it is a copy not a draw + * @param src drawing location to copy from + * @param x X coordinate + * @param y Y coordinate + * @param width Width of rectangle + * @param height Height of rectangle + * @see gfx_draw_location_t + */ +void gfx_BlitRectangle(uint8_t src, uint24_t x, uint8_t y, uint24_t width, uint24_t height); + +/** + * Copies the screen to the buffer + */ +#define gfx_BlitScreen() \ +gfx_Blit(gfx_screen) + +/** + * Copies the buffer to the screen + */ +#define gfx_BlitBuffer() \ +gfx_Blit(gfx_buffer) + +/** + * Sets the scaling for text + * + * Values in the range from 1-5 are preferred. + * @param width_scale Text width scaling + * @param height_scale Text height scaling + */ +void gfx_SetTextScale(uint8_t width_scale, uint8_t height_scale); + +/** + * Prints a character + * + * Outputs a character at the current cursor position. + * @param c Character to print + * @note By default, no text clipping is performed (configurable with gfx_SetTextConfig) + */ +void gfx_PrintChar(const char c); + +/** + * Prints a signed integer + * + * Outputs at the current cursor position. Padded with leading zeros if + * necessary to satisfy the specified minimum length. + * @param n Integer to print + * @param length Minimum number of characters to print + * @note By default, no text clipping is performed (configurable with gfx_SetTextConfig) + * @note \c length must be between 1 and 8, inclusive + */ +void gfx_PrintInt(int n, uint8_t length); + +/** + * Prints an unsigned integer + * + * Outputs at the current cursor position. Padded with leading zeros if + * necessary to satisfy the specified minimum length. + * @param n Unsigned integer to print + * @param length Minimum number of characters to print + * @note By default, no text clipping is performed (configurable with gfx_SetTextConfig) + * @note \c length must be between 1 and 8, inclusive + */ +void gfx_PrintUInt(unsigned int n, uint8_t length); + +/** + * Prints a string + * + * Outputs a string at the current cursor position. + * @param string Pointer to string to print + * @note By default, no text clipping is performed (configurable with gfx_SetTextConfig) + */ +void gfx_PrintString(const char *string); + +/** + * Prints a string at coordinates + * + * Outputs a string at the supplied coordinates + * Posistion is measured from top left origin of screen. + * @param string Pointer to string to print + * @param x X coordinate + * @param y Y coordinate + * @note By default, no text clipping is performed (configurable with gfx_SetTextConfig) + */ +void gfx_PrintStringXY(const char *string, int x, int y); + +/** + * @returns The current text cursor X position + */ +int gfx_GetTextX(void); + +/** + * @returns The current text cursor Y position + */ +int gfx_GetTextY(void); + +/** + * Sets the text cursor XY position + * + * @param x X coordinate + * @param y Y coordinate + */ +void gfx_SetTextXY(int x, int y); + +/** + * Sets the configuration for the text routines + * + * @param config Set the options for the text mode + * @see gfx_text_options_t + * @note Scaled text does not clip + */ +void gfx_SetTextConfig(uint8_t config); + +/** + * @brief Different available text modes + */ +typedef enum { + gfx_text_clip = 1, /**< Text routines will clip against the defined clip window */ + gfx_text_noclip /**< Default, text routines do not clip (much faster) */ +} gfx_text_options_t; + +/** + * Sets text foreground color + * + * @param color Color index to set + * @returns Previous text foreground color index + * @note Default text foreground color index: 0 + */ +uint8_t gfx_SetTextFGColor(uint8_t color); + +/** + * Sets text background color + * + * @param color Color index to set + * @returns Previous text background color index + * @note Default text background color index: 255 + */ +uint8_t gfx_SetTextBGColor(uint8_t color); + +/** + * Sets text transparency color + * + * @param color Color index to set + * @returns Previous text transparency color index + * @note Default text transparency color index: 255 + */ +uint8_t gfx_SetTextTransparentColor(uint8_t color); + +/** + * Draws a sprite + * + * @param sprite Pointer to initialized sprite structure + * @param x X coordinate + * @param y Y coordinate + */ +void gfx_Sprite(gfx_sprite_t *sprite, int x, int y); + +/** + * Draws an unclipped sprite + * + * @param sprite Pointer to initialized sprite structure + * @param x X coordinate + * @param y Y coordinate + */ +void gfx_Sprite_NoClip(gfx_sprite_t *sprite, uint24_t x, uint8_t y); + +/** + * Draws a transparent sprite + * + * @param sprite Pointer to initialized sprite structure + * @param x X coordinate + * @param y Y coordinate + */ +void gfx_TransparentSprite(gfx_sprite_t *sprite, int x, int y); + +/** + * Draws an unclipped transparent sprite + * + * @param sprite Pointer to initialized sprite structure + * @param x X coordinate + * @param y Y coordinate + */ +void gfx_TransparentSprite_NoClip(gfx_sprite_t *sprite, uint24_t x, uint8_t y); + +/** + * Grabs the background behind a sprite + * + * This is useful for partial redraw. + * @param sprite_buffer Buffer used to store grabbed sprite + * @param x X coordinate to grab sprite + * @param y Y coordinate to grab sprite + * @returns A pointer to sprite_buffer + * @note sprite_buffer must be pointing to a large enough buffer to hold width*height number of bytes + */ +gfx_sprite_t *gfx_GetSprite(gfx_sprite_t *sprite_buffer, int x, int y); + +/** + * Grabs the background behind an unclipped sprite + * + * This is useful for partial redraw. + * @param sprite_buffer Buffer used to store grabbed sprite + * @param x X coordinate to grab sprite + * @param y Y coordinate to grab sprite + * @returns A pointer to sprite_buffer + * @note sprite_buffer must be pointing to a large enough buffer to hold width*height number of bytes + */ +#define gfx_GetSprite_NoClip(sprite_buffer, x, y) \ +gfx_GetSprite((sprite_buffer), (x), (y)) + +/** + * Scales an unclipped sprite + * + * Scaling factors must be greater than or equal to 1, and an integer factor + * @param sprite Pointer to initialized sprite structure + * @param x X coordinate + * @param y Y coordinate + * @param width_scale Width scaling factor + * @param height_scale Height scaling factor + * @note Useable with gfx_GetSprite in order to create clipped versions + */ +void gfx_ScaledSprite_NoClip(gfx_sprite_t *sprite, uint24_t x, uint8_t y, uint8_t width_scale, uint8_t height_scale); + +/** + * Scales an unclipped transparent sprite + * + * Scaling factors must be greater than or equal to 1, and an integer factor + * @param sprite Pointer to initialized sprite structure + * @param x X coordinate + * @param y Y coordinate + * @param width_scale Width scaling factor + * @param height_scale Height scaling factor + * @note Useable with gfx_GetSprite in order to create clipped versions + */ +void gfx_ScaledTransparentSprite_NoClip(gfx_sprite_t *sprite, uint24_t x, uint8_t y, uint8_t width_scale, uint8_t height_scale); + +/** + * Fixed Rotation with scaling fator for sprites + * + * @note A scale factor of 64 represents 100% scaling + * @warning This routine only accepts square input sprites + * @param sprite Input sprite to rotate/scale + * @param x X coordinate position + * @param x Y coordinate position + * @param angle 256 position angular integer + * @param scale Scaling factor; range is about 1% to 400% scale + * @returns The size of the sprite after scaling. This can be used for centering purposes. + */ +uint8_t gfx_RotatedScaledTransparentSprite_NoClip(gfx_sprite_t *sprite, uint24_t x, uint8_t y, uint8_t angle, uint8_t scale); + +/** + * Helper macro to only perform rotation using gfx_RotatedScaledTransparentSprite_NoClip + * + * @param sprite_in Input sprite to rotate + * @param sprite_out Pointer to where rotated sprite will be stored + * @param angle 256 position angular integer + * @see gfx_RotatedScaledTransparentSprite_NoClip + */ +#define gfx_RotatedTransparentSprite_NoClip(sprite, x, y, angle) gfx_RotatedScaledTransparentSprite_NoClip(sprite, x, y, angle, 64) + +/** + * Fixed Rotation with scaling fator for sprites without transparency + * + * @note A scale factor of 64 represents 100% scaling + * @warning This routine only accepts square input sprites + * @param sprite Input sprite to rotate/scale + * @param x X coordinate position + * @param x Y coordinate position + * @param angle 256 position angular integer + * @param scale Scaling factor; range is about 1% to 400% scale + * @returns The size of the sprite after scaling. This can be used for centering purposes. + */ +uint8_t gfx_RotatedScaledSprite_NoClip(gfx_sprite_t *sprite, uint24_t x, uint8_t y, uint8_t angle, uint8_t scale); + +/** + * Helper macro to only perform rotation using gfx_RotatedScaledSprite_NoClip + * + * @param sprite_in Input sprite to rotate + * @param sprite_out Pointer to where rotated sprite will be stored + * @param angle 256 position angular integer + * @see gfx_RotatedScaledTransparentSprite_NoClip + */ +#define gfx_RotatedSprite_NoClip(sprite, x, y, angle) gfx_RotatedScaledTransparentSprite_NoClip(sprite, x, y, angle, 64) + +/** + * Flips a sprite along the X axis + * + * @param sprite_in Input sprite to flip + * @param sprite_out Pointer to where flipped sprite will be stored + * @returns A pointer to sprite_out + * @note sprite_in and sprite_out cannot be the same + */ +gfx_sprite_t *gfx_FlipSpriteX(gfx_sprite_t *sprite_in, gfx_sprite_t *sprite_out); + +/** + * Flips a sprite along the Y axis + * + * @param sprite_in Input sprite to flip + * @param sprite_out Pointer to where flipped sprite will be stored + * @returns A pointer to sprite_out + * @note sprite_in and sprite_out cannot be the same + */ +gfx_sprite_t *gfx_FlipSpriteY(gfx_sprite_t *sprite_in, gfx_sprite_t *sprite_out); + +/** + * Rotates a sprite 90 degrees clockwise + * + * @param sprite_in Input sprite to rotate + * @param sprite_out Pointer to where rotated sprite will be stored + * @returns A pointer to sprite_out + * @note sprite_in and sprite_out cannot be the same + */ +gfx_sprite_t *gfx_RotateSpriteC(gfx_sprite_t *sprite_in, gfx_sprite_t *sprite_out); + +/** + * Rotates a sprite 90 degrees counter clockwise + * + * @param sprite_in Input sprite to rotate + * @param sprite_out Pointer to where rotated sprite will be stored + * @returns A pointer to sprite_out + * @note sprite_in and sprite_out cannot be the same + */ +gfx_sprite_t *gfx_RotateSpriteCC(gfx_sprite_t *sprite_in, gfx_sprite_t *sprite_out); + +/** + * Rotates a sprite 180 degrees + * + * @param sprite_in Input sprite to rotate + * @param sprite_out Pointer to where rotated sprite will be stored + * @returns A pointer to sprite_out + */ +gfx_sprite_t *gfx_RotateSpriteHalf(gfx_sprite_t *sprite_in, gfx_sprite_t *sprite_out); + +/** + * Resizes a sprite to new dimensions + * + * Place new image dimensions in sprite_out; i.e. sprite_out->width = 80; sprite_out->height = 20. + * @param sprite_in Input sprite to scale + * @param sprite_out Pointer to where scaled sprite will be stored + * @returns A pointer to \p sprite_out + */ +gfx_sprite_t *gfx_ScaleSprite(gfx_sprite_t *sprite_in, gfx_sprite_t *sprite_out); + +/** + * Fixed Rotation with scaling factor for sprites + * + * The output sprite is updated with the dimensions required for the implemented scaling factor. + * You must make sure that \p sprite_out has enough memory to store the needed output sprite. This can be + * found with the following formula: size = (max_scale / 64) * width * height + 2; + * + * @note A scale factor of 64 represents 100% scaling + * @warning This routine only accepts square input sprites + * @param sprite_in Input sprite to rotate/scale + * @param sprite_out Pointer to where rotated/scaled sprite will be stored + * @param angle 256 position angular integer + * @param scale Scaling factor; range is about 1% to 400% scale + * @returns A pointer to \p sprite_out + */ +gfx_sprite_t *gfx_RotateScaleSprite(gfx_sprite_t *sprite_in, gfx_sprite_t *sprite_out, uint8_t angle, uint8_t scale); + +/** + * Helper macro to only perform rotation using gfx_RotateScaleSprite + * + * @param sprite_in Input sprite to rotate + * @param sprite_out Pointer to where rotated sprite will be stored + * @param angle 256 position angular integer + * @returns A pointer to \p sprite_out + * @see gfx_RotateScaleSprite + */ +#define gfx_RotateSprite(sprite_in, sprite_out, angle) gfx_RotateScaleSprite(sprite_in, sprite_out, angle, 64) + +/** + * Creates a temporary character sprite + * + * This may be useful for performing rotations and other + * operations on characters. The sprite returned is always 8x8 pixels. + * @param c Character to generate + */ +gfx_sprite_t *gfx_GetSpriteChar(char c); + +/** + * Sets the font's character data + * + * Fonts can be created manually or and exported to a C-style format using 8x8 Pixel ROM Font Editor. + * (https://www.min.at/prinz/o/software/pixelfont/#download) + * + * @param data Pointer to formated 8x8 pixel font + * @returns Pointer to previous font data + * @note Format of font data is 8 bytes horizontally aligned. + */ +uint8_t *gfx_SetFontData(uint8_t *data); + +/** + * Sets the font data for a specific character + * + * @param index Character index to modify (if using default font, values range from 0-127, custom font can have indexes 0-255) + * @param data Pointer to formated 8x8 pixel font + * @returns Pointer to current character data if \p data is NULL, otherwise a pointer to next character data + * @note Format of font data is 8 bytes horizontally aligned. + * @see gfx_SetFontData + */ +uint8_t *gfx_SetCharData(uint8_t index, uint8_t *data); + +/** + * Sets the font spacing + * + * @param spacing Pointer to array of character spacing + */ +void gfx_SetFontSpacing(uint8_t *spacing); + +/** + * Sets the height in pixels of each character + * + * The default value is 8 pixels + * @param height New font height in pixels + * @returns Previous height of font in pixels + */ +uint8_t gfx_SetFontHeight(uint8_t height); + +/** + * Sets monospaced font + * + * @param spacing Distance between characters + * @note To disable monospaced font, set to 0 + */ +void gfx_SetMonospaceFont(uint8_t spacing); + +/** + * Gets the pixel width of the given string + * + * @param string Pointer to string + * @note Takes into account monospacing flag + */ +unsigned int gfx_GetStringWidth(const char *string); + +/** + * Gets the pixel width of the given character + * + * @param c Character to get width of + * @returns Width in pixels of character + * @note Takes into account monospacing flag + */ +unsigned int gfx_GetCharWidth(const char c); + +/** + * Sets the clipping window + * + * This window is used across all clipped routines + * @param xmin Minimum x coordinate + * @param ymin Minimum y coordinate + * @param xmax Maximum x coordinate + * @param ymax Maximum y coordinate + * @note This routine is exclusive + */ +void gfx_SetClipRegion(int xmin, int ymin, int xmax, int ymax); + +/** + * Clips a region to fit within the window + * + * @returns False if offscreen, true if onscreen + */ +bool gfx_GetClipRegion(gfx_region_t *region); + +/** + * Shifts the drawing window down + * + * @param pixels Number of pixels to shift + * @note Data left over is undefined (Must be drawn over) + */ +void gfx_ShiftDown(uint8_t pixels); + +/** + * Shifts the drawing window up + * + * @param pixels Number of pixels to shift + * @note Data left over is undefined (Must be drawn over) + */ +void gfx_ShiftUp(uint8_t pixels); + +/** + * Shifts the drawing window left + * + * @param pixels Number of pixels to shift + * @note Data left over is undefined (Must be drawn over) + */ +void gfx_ShiftLeft(uint24_t pixels); + +/** + * Shifts the drawing window right + * + * @param pixels Number of pixels to shift + * @note Data left over is undefined (Must be drawn over) + */ +void gfx_ShiftRight(uint24_t pixels); + +/** + * Lightens a given 1555 color; useful for palette color conversions. + * + * @param color Original color input in 1555 format + * @param amount Amount to lighten by + * @returns Lightened color + * @note 0 returns full white, 255 returns original color + */ +uint16_t gfx_Lighten(uint16_t color, uint8_t amount); + +/** + * Darkens a given 1555 color; useful for palette color conversions. + * + * @param color Original color input in 1555 format + * @param amount Amount to darken by + * @returns Darkened color + * @note 0 returns full black, 255 returns original color + */ +uint16_t gfx_Darken(uint16_t color, uint8_t amount); + +/** + * Fills an area with a color + * + * @param x X coordinate to begin filling at + * @param y Y coordinate to begin filling at + * @param color New color to fill with + * + * @note This routine performs clipping to stay within the window, but you must ensure it starts in the window. + */ +void gfx_FloodFill(unsigned int x, uint8_t y, uint8_t color); + +/** + * Draws a sprite with RLE transparency. + * + * @param sprite sprite to draw + * @param x x-coordinate + * @param y y-coordinate + */ +void gfx_RLETSprite(gfx_rletsprite_t *sprite, int x, int y); + +/** + * Draws an unclipped sprite with RLE transparency. + * + * @param sprite sprite to draw + * @param x x-coordinate + * @param y y-coordinate + */ +void gfx_RLETSprite_NoClip(gfx_rletsprite_t *sprite, uint24_t x, uint8_t y); + +/** + * Converts a sprite with RLE transpareny to a sprite with normal transparency. + * + * Width and height will be set in the converted sprite. + * + * The transparent color index in the converted sprite is controlled by + * gfx_SetTransparentColor(). + * + * @attention + * The output sprite must have been allocated with a large enough \c data field + * to hold the converted sprite data, which will be width * height + * bytes large. + * + * @param[in] sprite_in input sprite with RLE transparency + * @param[out] sprite_out converted sprite with normal transparency + * @returns the converted sprite + * @see gfx_ConvertMallocRLETSprite + * @see gfx_ConvertToRLETSprite + */ +gfx_sprite_t *gfx_ConvertFromRLETSprite(gfx_rletsprite_t *sprite_in, gfx_sprite_t *sprite_out); + +/** + * Converts a sprite with normal transpareny to a sprite with RLE transparency. + * + * Width and height will be set in the converted sprite. + * + * The transparent color index in the input sprite is controlled by + * gfx_SetTransparentColor(). + * + * @attention + * The output sprite must have been allocated with a large enough data field to + * hold the converted sprite data; see gfx_AllocRLETSprite() for information. + * + * @note + * To avoid needing to predict the output size and risking either the prediction + * being too high and wasting space, or being too low and corrupting memory, + * gfx_ConvertMallocRLETSprite() can be used instead to allocate the exact + * amount of necessary space for the converted sprite. + * + * @param[in] sprite_in input sprite with normal transparency + * @param[out] sprite_out converted sprite with RLE transparency + * @returns the converted sprite + * @see gfx_ConvertFromRLETSprite + */ +gfx_rletsprite_t *gfx_ConvertToRLETSprite(gfx_sprite_t *sprite_in, gfx_rletsprite_t *sprite_out); + +/** + * Converts a sprite with normal transpareny to a sprite with RLE transparency, + * allocating the exact amount of necessary space for the converted sprite. + * + * Allocates the memory with \p malloc_routine. Width and height will be set in + * the converted sprite. Returns \c NULL upon allocation failure. + * + * The transparent color index in the input sprite is controlled by + * gfx_SetTransparentColor(). + * + * @remarks + * If using \c malloc as the \p malloc_routine, gfx_ConvertMallocRLETSprite() + * can be used as a shortcut. + * + * @remarks + * A gfx_sprite_t can be converted into an appropriately large, + * already-allocated gfx_rletsprite_t using gfx_ConvertToRLETSprite(). + * + * @param sprite_in input sprite with normal transparency + * @param malloc_routine malloc implementation to use + * @returns a newly allocated converted sprite with RLE transparency + * @see gfx_ConvertFromRLETSprite + */ +gfx_rletsprite_t *gfx_ConvertToNewRLETSprite(gfx_sprite_t *sprite_in, void *(*malloc_routine)(size_t)); + +/** + * Converts a sprite with normal transpareny to a sprite with RLE transparency, + * allocating the exact amount of necessary space for the converted sprite using + * \c malloc. + * + * Width and height will be set in the converted sprite. Returns \c NULL upon + * allocation failure. + * + * The transparent color index in the input sprite is controlled by + * gfx_SetTransparentColor(). + * + * @remarks + * A gfx_sprite_t can be converted into an appropriately large, + * already-allocated gfx_rletsprite_t using gfx_ConvertToRLETSprite(). + * + * @param sprite_in input sprite with normal transparency + * @param malloc_routine malloc implementation to use + * @returns a newly allocated converted sprite with RLE transparency + * @see gfx_ConvertFromRLETSprite + */ +#define gfx_ConvertMallocRLETSprite(sprite_in) \ +gfx_ConvertToNewRLETSprite(sprite_in, malloc) + +/** + * Converts an RGB value to a palette color + * + * Conversion is not 100% perfect, but is quite close + */ +#define gfx_RGBTo1555(r,g,b) \ +((uint16_t)(((uint8_t)(r) >> 3) << 10) | \ +(((uint8_t)(g) >> 3) << 5) | \ +((uint8_t)(b) >> 3)) + +/** + * Checks if we are currently in a rectangular hotspot area + */ +#define gfx_CheckRectangleHotspot(master_x, master_y, master_width, master_height, test_x, test_y, test_width, test_height) \ +(((test_x) < ((master_x) + (master_width))) && \ +(((test_x) + (test_width)) > (master_x)) && \ +((test_y) < ((master_y) + (master_height))) && \ +(((test_y) + (test_height)) > (master_y))) + +/* Color definitions (try to avoid) */ +#define gfx_black 0x00 +#define gfx_red 0xE0 +#define gfx_orange 0xE3 +#define gfx_green 0x03 +#define gfx_blue 0x10 +#define gfx_purple 0x50 +#define gfx_yellow 0xE7 +#define gfx_pink 0xF0 +#define gfx_white 0xFF + +/* Compatability defines (don't use please) */ +typedef gfx_sprite_t gfx_image_t; +#define gfx_BlitArea gfx_BlitRectangle +void gfx_LZDecompress(uint8_t *in, uint8_t *out, unsigned int in_size); + +#define gfx_lcdWidth (320) +#define gfx_lcdHeight (240) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/frontends/calculator/CEdev/include/intce.h b/frontends/calculator/CEdev/include/intce.h new file mode 100644 index 0000000..1184c29 --- /dev/null +++ b/frontends/calculator/CEdev/include/intce.h @@ -0,0 +1,93 @@ +/** + * @file + * @authors Matt "MateoConLechuga" Waltz + * @authors Jacob "jacobly" Young + * @brief Interrupt configuring and setting + */ + +#ifndef INTCE_H +#define INTCE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Enable global interrupts + */ +#define int_Enable() \ +asm("ei") + +/** + * @brief Diasble global interrupts + */ +#define int_Disable() \ +asm("di") + +/** + * @brief Blocking wait for an interrupt to trigger + */ +#define int_Wait() \ +asm("halt") + +#ifdef FORCE_INTERRUPTS +#warning TI has removed custom interrupt support on CE models with hardware revision >= I. Please check that this is acceptable. + +/** + * Initizalize to use custom interrupts + * @note Saves status of current interrupt state + * @warning TI has removed custom interrupt support on CE models with hardware revision >= I. + */ +void int_Initialize(void); + +/** + * Resets interrupts back to the OS expected values + * @warning Must have called int_Initialize before using + * @warning TI has removed custom interrupt support on CE models with hardware revision >= I. + */ +void int_Reset(void); + +/** + * Sets up an interrupt vector given an ISR + * @param ivect Interrupt vector to set + * @param handler Handler to interrupt service routine + * @warning TI has removed custom interrupt support on CE models with hardware revision >= I. + */ +void int_SetVector(uint8_t ivect, void (*handler)(void)); + +#endif + +#define ON_IVECT 0 /**< [on] key interrupt source */ +#define TIMER1_IVECT 1 /**< Timer 1 interrupt source */ +#define TIMER2_IVECT 2 /**< Timer 2 interrupt source */ +#define TIMER3_IVECT 3 /**< Timer 3 interrupt source */ +#define TIMEROS_IVECT 4 /**< Timer OS interrupt source */ +#define KEYBOARD_IVECT 10 /**< Keyboard interrupt source */ +#define LCD_IVECT 11 /**< LCD interrupt source */ +#define RTC_IVECT 12 /**< Real Time Clock interrupt source */ +#define USB_IVECT 13 /**< USB interrupt source */ + +#define INT_ON 1< +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef uint8_t kb_key_t; ///< Normal key type +typedef uint16_t kb_lkey_t; ///< Long key type + +/** + * Scans the keyboard to update data values + * @note Disables interrupts + */ +void kb_Scan(void); + +/** + * Scans the given keyboard row and returns the row value + * @param row Row to scan + * @note Disables interrupts + */ +kb_key_t kb_ScanGroup(uint8_t row); + +/** + * Scans the keyboard quickly to tell if any key was pressed + * @note Disables interrupts + */ +uint8_t kb_AnyKey(void); + +/** + * Resets the keyboard + * @note Only use if you modify keyboard timers or number of rows + */ +void kb_Reset(void); + +/** + * @brief Sets the keypad scanning mode + * @see kb_scan_mode_t + */ +#define kb_SetMode(mode) \ +(kb_Config = ((kb_Config & ~3)|(mode))) + +/** + * @brief Gets the keypad scanning mode + * @see kb_scan_mode_t + */ +#define kb_GetMode() \ +(kb_Config & 3) + +/** + * Different available scanning modes + */ +typedef enum { + MODE_0_IDLE = 0, /**< Keypad scanning is idle */ + MODE_1_INDISCRIMINATE, /**< Indiscriminate key detection. Data registers are invalid, but whenever any key is pressed, interrupt KB_MODE_1_PRESS is set (and cannot be cleared until the key is released). */ + MODE_2_SINGLE, /**< Single scan. The keypad is scanned once, and then the mode returns to MODE_0_IDLE. */ + MODE_3_CONTINUOUS /**< Continuous scan. When scanning completes, it just starts over again after a delay. */ +} kb_scan_mode_t; + +#define kb_EnableInt \ +(*(uint8_t*)0xF5000C) /**< Enabled keypad interrupt signals */ +#define kb_IntAcknowledge \ +(*(volatile uint8_t*)0xF50008) /**< Acknowledege keypad interrupt signals */ +#define kb_IntStatus \ +(*(volatile uint8_t*)0xF50008) /**< Status of keypad interrupt signals */ +#define kb_Config \ +(*(uint8_t*)0xF50000) /**< Configuration of keypad controller */ + +/** + * Keypad Data registers + * + * | Offset | Bit 0 | Bit 1 | Bit 2 | Bit 3 | Bit 4 | Bit 5 | Bit 6 | Bit 7 | + * | -------| ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | + * | 1 | kb_Graph | kb_Trace | kb_Zoom | kb_Window | kb_Yequ | kb_2nd | kb_Mode | kb_Del | + * | 2 | | kb_Sto | kb_Ln | kb_Log | kb_Square | kb_Recip | kb_Math | kb_Alpha | + * | 3 | kb_0 | kb_1 | kb_4 | kb_7 | kb_Comma | kb_Sin | kb_Apps | kb_GraphVar| + * | 4 | kb_DecPnt | kb_2 | kb_5 | kb_8 | kb_LParen | kb_Cos | kb_Prgm | kb_Stat | + * | 5 | kb_Chs | kb_3 | kb_6 | kb_9 | kb_RParen | kb_Tan | kb_Vars | | + * | 6 | kb_Enter | kb_Add | kb_Sub | kb_Mul | kb_Div | kb_Power | kb_Clear | | + * | 7 | kb_Down | kb_Left | kb_Right | kb_Up | | | | | + * + * These data registers can be indexed just like an array. For example, if you want to check the status of the '2nd' key: + * @code + * if (kb_Data[1] & kb_2nd) { + * ... + * } + * @endcode + */ +#define kb_Data \ +(uint8_t)((uint16_t*)0xF50010) + +/** + * Different available interrupt signals + */ +typedef enum { + KB_SCAN_COMPLETE = 1, /**< Interrupt set when keypad is done scanning */ + KB_DATA_CHANGED = 2, /**< Interrupt set when data is changed on a press or a release */ + KB_MODE_1_PRESS = 4 /**< Interrupt set when a key is pressed in MODE_1_INDISCRIMINATE */ +} kb_int_signal_t; + +/* Keyboard group 1 */ +#define kb_Graph 1<<0 +#define kb_Trace 1<<1 +#define kb_Zoom 1<<2 +#define kb_Window 1<<3 +#define kb_Yequ 1<<4 +#define kb_2nd 1<<5 +#define kb_Mode 1<<6 +#define kb_Del 1<<7 + +/* Keyboard group 2 */ +#define kb_Sto 1<<1 +#define kb_Ln 1<<2 +#define kb_Log 1<<3 +#define kb_Square 1<<4 +#define kb_Recip 1<<5 +#define kb_Math 1<<6 +#define kb_Alpha 1<<7 + +/* Keyboard group 3 */ +#define kb_0 1<<0 +#define kb_1 1<<1 +#define kb_4 1<<2 +#define kb_7 1<<3 +#define kb_Comma 1<<4 +#define kb_Sin 1<<5 +#define kb_Apps 1<<6 +#define kb_GraphVar 1<<7 + +/* Keyboard group 4 */ +#define kb_DecPnt 1<<0 +#define kb_2 1<<1 +#define kb_5 1<<2 +#define kb_8 1<<3 +#define kb_LParen 1<<4 +#define kb_Cos 1<<5 +#define kb_Prgm 1<<6 +#define kb_Stat 1<<7 + +/* Keyboard group 5 */ +#define kb_Chs 1<<0 +#define kb_3 1<<1 +#define kb_6 1<<2 +#define kb_9 1<<3 +#define kb_RParen 1<<4 +#define kb_Tan 1<<5 +#define kb_Vars 1<<6 + +/* Keyboard group 6 */ +#define kb_Enter 1<<0 +#define kb_Add 1<<1 +#define kb_Sub 1<<2 +#define kb_Mul 1<<3 +#define kb_Div 1<<4 +#define kb_Power 1<<5 +#define kb_Clear 1<<6 + +/* Keyboard group 7 */ +#define kb_Down 1<<0 +#define kb_Left 1<<1 +#define kb_Right 1<<2 +#define kb_Up 1<<3 + +/* Keyboard group 1 */ +#define kb_KeyGraph (kb_lkey_t)(1 << 8 | 1<<0) +#define kb_KeyTrace (kb_lkey_t)(1 << 8 | 1<<1) +#define kb_KeyZoom (kb_lkey_t)(1 << 8 | 1<<2) +#define kb_KeyWindow (kb_lkey_t)(1 << 8 | 1<<3) +#define kb_KeyYequ (kb_lkey_t)(1 << 8 | 1<<4) +#define kb_Key2nd (kb_lkey_t)(1 << 8 | 1<<5) +#define kb_KeyMode (kb_lkey_t)(1 << 8 | 1<<6) +#define kb_KeyDel (kb_lkey_t)(1 << 8 | 1<<7) + +/* Keyboard group 2 */ +#define kb_KeyStore (kb_lkey_t)(2 << 8 | 1<<1) +#define kb_KeyLn (kb_lkey_t)(2 << 8 | 1<<2) +#define kb_KeyLog (kb_lkey_t)(2 << 8 | 1<<3) +#define kb_KeySquare (kb_lkey_t)(2 << 8 | 1<<4) +#define kb_KeyRecip (kb_lkey_t)(2 << 8 | 1<<5) +#define kb_KeyMath (kb_lkey_t)(2 << 8 | 1<<6) +#define kb_KeyAlpha (kb_lkey_t)(2 << 8 | 1<<7) + +/* Keyboard group 3 */ +#define kb_Key0 (kb_lkey_t)(3 << 8 | 1<<0) +#define kb_Key1 (kb_lkey_t)(3 << 8 | 1<<1) +#define kb_Key4 (kb_lkey_t)(3 << 8 | 1<<2) +#define kb_Key7 (kb_lkey_t)(3 << 8 | 1<<3) +#define kb_KeyComma (kb_lkey_t)(3 << 8 | 1<<4) +#define kb_KeySin (kb_lkey_t)(3 << 8 | 1<<5) +#define kb_KeyApps (kb_lkey_t)(3 << 8 | 1<<6) +#define kb_KeyGraphVar (kb_lkey_t)(3 << 8 | 1<<7) + +/* Keyboard group 4 */ +#define kb_KeyDecPnt (kb_lkey_t)(4 << 8 | 1<<0) +#define kb_Key2 (kb_lkey_t)(4 << 8 | 1<<1) +#define kb_Key5 (kb_lkey_t)(4 << 8 | 1<<2) +#define kb_Key8 (kb_lkey_t)(4 << 8 | 1<<3) +#define kb_KeyLParen (kb_lkey_t)(4 << 8 | 1<<4) +#define kb_KeyCos (kb_lkey_t)(4 << 8 | 1<<5) +#define kb_KeyPrgm (kb_lkey_t)(4 << 8 | 1<<6) +#define kb_KeyStat (kb_lkey_t)(4 << 8 | 1<<7) + +/* Keyboard group 5 */ +#define kb_KeyChs (kb_lkey_t)(5 << 8 | 1<<0) +#define kb_Key3 (kb_lkey_t)(5 << 8 | 1<<1) +#define kb_Key6 (kb_lkey_t)(5 << 8 | 1<<2) +#define kb_Key9 (kb_lkey_t)(5 << 8 | 1<<3) +#define kb_KeyRParen (kb_lkey_t)(5 << 8 | 1<<4) +#define kb_KeyTan (kb_lkey_t)(5 << 8 | 1<<5) +#define kb_KeyVars (kb_lkey_t)(5 << 8 | 1<<6) + +/* Keyboard group 6 */ +#define kb_KeyEnter (kb_lkey_t)(6 << 8 | 1<<0) +#define kb_KeyAdd (kb_lkey_t)(6 << 8 | 1<<1) +#define kb_KeySub (kb_lkey_t)(6 << 8 | 1<<2) +#define kb_KeyMul (kb_lkey_t)(6 << 8 | 1<<3) +#define kb_KeyDiv (kb_lkey_t)(6 << 8 | 1<<4) +#define kb_KeyPower (kb_lkey_t)(6 << 8 | 1<<5) +#define kb_KeyClear (kb_lkey_t)(6 << 8 | 1<<6) + +/* Keyboard group 7 */ +#define kb_KeyDown (kb_lkey_t)(7 << 8 | 1<<0) +#define kb_KeyLeft (kb_lkey_t)(7 << 8 | 1<<1) +#define kb_KeyRight (kb_lkey_t)(7 << 8 | 1<<2) +#define kb_KeyUp (kb_lkey_t)(7 << 8 | 1<<3) + +/* Compatibility defines */ +#define kb_DataArray ((uint16_t*)0xF50010) +#define kb_dataArray ((uint16_t*)0xF50010) +#define kb_Store 1<<1 +#define kb_KeyPgrm kb_KeyPrgm +#define kb_group_0 0 +#define kb_group_1 1 +#define kb_group_2 2 +#define kb_group_3 3 +#define kb_group_4 4 +#define kb_group_5 5 +#define kb_group_6 6 +#define kb_group_7 7 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/frontends/calculator/CEdev/include/lib/ce/fileioc.h b/frontends/calculator/CEdev/include/lib/ce/fileioc.h new file mode 100644 index 0000000..8bb6ee4 --- /dev/null +++ b/frontends/calculator/CEdev/include/lib/ce/fileioc.h @@ -0,0 +1,2 @@ +#warning You are using a deprecated lib include path. Simply use #include instead +#include diff --git a/frontends/calculator/CEdev/include/lib/ce/graphx.h b/frontends/calculator/CEdev/include/lib/ce/graphx.h new file mode 100644 index 0000000..9a1343c --- /dev/null +++ b/frontends/calculator/CEdev/include/lib/ce/graphx.h @@ -0,0 +1,2 @@ +#warning You are using a deprecated lib include path. Simply use #include instead +#include diff --git a/frontends/calculator/CEdev/include/lib/ce/keypadc.h b/frontends/calculator/CEdev/include/lib/ce/keypadc.h new file mode 100644 index 0000000..7c2fd66 --- /dev/null +++ b/frontends/calculator/CEdev/include/lib/ce/keypadc.h @@ -0,0 +1,2 @@ +#warning You are using a deprecated lib include path. Simply use #include instead +#include diff --git a/frontends/calculator/CEdev/include/limits.h b/frontends/calculator/CEdev/include/limits.h new file mode 100644 index 0000000..2dbdab8 --- /dev/null +++ b/frontends/calculator/CEdev/include/limits.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 1999-2008 by Zilog, Inc. + * All Rights Reserved + * Modified by Matt "MateoConLechuga" Waltz for TI84+CE platform + */ +#ifndef LIMITS_H +#define LIMITS_H + +#define CHAR_BIT 8 /* number of bits in byte */ +#define SCHAR_MAX 127 /* max value for signed char */ +#define SCHAR_MIN (-127-1) /* min value for signed char */ +#define UCHAR_MAX 0xFF /* max value for unsigned char */ +#ifdef __UNSIGNED_CHARS__ +#define CHAR_MAX UCHAR_MAX /* max value for char */ +#define CHAR_MIN 0 /* Min value for char */ +#else +#define CHAR_MAX SCHAR_MAX /* max value for char */ +#define CHAR_MIN SCHAR_MIN /* Min value for char */ +#endif + +#define SHRT_MAX 32767 /* max value for short int */ +#define SHRT_MIN (-32767-1) /* min value for short int */ +#define USHRT_MAX 0xFFFF /* max value for unsigned short */ + +#define INT_MAX 8388607 /* max value for int */ +#define INT_MIN (-8388607 - 1) /* min value for int */ +#define UINT_MAX 0xFFFFFF /* max value for unsigned int */ + +#define LONG_MAX 2147483647L /* max value for long int */ +#define LONG_MIN (-2147483647L - 1) /* min value for long int */ +#define ULONG_MAX 0xFFFFFFFFUL /* max value for unsigned long */ + +#define MB_LEN_MAX 1 /* max multibyte char length */ + +#endif diff --git a/frontends/calculator/CEdev/include/math.h b/frontends/calculator/CEdev/include/math.h new file mode 100644 index 0000000..3225311 --- /dev/null +++ b/frontends/calculator/CEdev/include/math.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 1999-2008 by Zilog, Inc. + * All Rights Reserved + * Modified by Matt "MateoConLechuga" Waltz for TI84+CE platform + */ +#ifndef MATH_H +#define MATH_H + +#ifdef __cplusplus +extern "C" { +#endif + +extern double _huge_val; +#define HUGE_VAL _huge_val /* overflow error */ + +#define M_E 2.71828182845904523536 /* e */ +#define M_LOG2E 1.44269504088896340736 /* log2(e) */ +#define M_LOG10E 0.434294481903251827651 /* log10(e) */ +#define M_LN2 0.693147180559945309417 /* ln(2) */ +#define M_LN10 2.30258509299404568402 /* ln(10) */ +#define M_PI 3.14159265358979323846 /* pi */ +#define M_PI_2 1.57079632679489661923 /* pi/2 */ +#define M_PI_4 0.785398163397448309616 /* pi/4 */ +#define M_1_PI 0.318309886183790671538 /* 1/pi */ +#define M_2_PI 0.636619772367581343076 /* 2/pi */ +#define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */ +#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ +#define M_SQRT1_2 0.707106781186547524401 /* 1/sqrt(2) */ +#define M_LOG_2M_PI 1.83787706640934548 /* log2(M_PI) */ + +double acos(double x); +double asin(double x); +double atan(double x); +double atan2(double y,double x); +double cos(double x); +double sin(double x); +double tan(double x); +double cosh(double x); +double sinh(double x); +double tanh(double x); +double exp(double x); +double ldexp(double x, int exp); +double log(double x); +double log10(double x); +double pow(double x,double y); +double sqrt(double x); +double ceil(double x); +double floor(double x); +double fabs(double x); +double fmod(double x, double y); +double round(double x); + +double frexp(double value, int *exp); +double modf(double value, double *iptr); + +int isinf(double n); +int isnan(double n); +int finite(double n); + +double tgamma(double x); +double log2(double x); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/frontends/calculator/CEdev/include/setjmp.h b/frontends/calculator/CEdev/include/setjmp.h new file mode 100644 index 0000000..3858118 --- /dev/null +++ b/frontends/calculator/CEdev/include/setjmp.h @@ -0,0 +1,21 @@ +/* + * Copyright (C) 1999-2008 by Zilog, Inc. + * All Rights Reserved + */ +#ifndef __SETJMP_H +#define __SETJMP_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef unsigned char jmp_buf[12]; + +int setjmp(jmp_buf env); +void longjmp(jmp_buf env, int val); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/frontends/calculator/CEdev/include/stdarg.h b/frontends/calculator/CEdev/include/stdarg.h new file mode 100644 index 0000000..2938417 --- /dev/null +++ b/frontends/calculator/CEdev/include/stdarg.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 1999-2008 by Zilog, Inc. + * All Rights Reserved + */ +#ifndef STDARG_H +#define STDARG_H + +typedef char * va_list; +#define _INTSIZEOF(n) (sizeof(n) + sizeof(int)-1-((sizeof(n)-1)%sizeof(int))) + +#define va_start(ap, parm) (ap = (char *)&parm + _INTSIZEOF(parm)) +#define va_arg(ap,type) (*(type *)((ap += _INTSIZEOF(type)) - _INTSIZEOF(type))) +#define va_end(ap) + +#endif diff --git a/frontends/calculator/CEdev/include/stdbool.h b/frontends/calculator/CEdev/include/stdbool.h new file mode 100644 index 0000000..0681e78 --- /dev/null +++ b/frontends/calculator/CEdev/include/stdbool.h @@ -0,0 +1,23 @@ +/* + * Copyright (C) 1999-2008 by Zilog, Inc. + * All Rights Reserved + * Modified by Matt "MateoConLechuga" Waltz for TI84+CE platform + */ +#ifndef STDBOOL_H +#define STDBOOL_H + +#ifndef __bool_true_false_are_defined +#define __bool_true_false_are_defined + +#ifndef __cplusplus + +typedef unsigned char bool; + +#define _Bool bool +#define false 0 +#define true 1 + +#endif + +#endif +#endif diff --git a/frontends/calculator/CEdev/include/stddef.h b/frontends/calculator/CEdev/include/stddef.h new file mode 100644 index 0000000..1f277b7 --- /dev/null +++ b/frontends/calculator/CEdev/include/stddef.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 1999-2008 by Zilog, Inc. + * All Rights Reserved + * Modified by Matt "MateoConLechuga" Waltz for TI84+CE platform + */ +#ifndef STDDEF_H +#define STDDEF_H + +#ifndef SIZE_T_DEFINED +#define SIZE_T_DEFINED +typedef unsigned int size_t; +#endif + +#ifndef NULL +#define NULL ((void *)0) +#endif +#define offsetof(type,member) ((size_t) &((type*)0)->member) + +typedef int ptrdiff_t; + +#ifndef __cplusplus +#ifndef WCHAR_T_DEFINED +#define WCHAR_T_DEFINED +typedef unsigned short wchar_t; +#endif +#endif + +#endif diff --git a/frontends/calculator/CEdev/include/stdint.h b/frontends/calculator/CEdev/include/stdint.h new file mode 100644 index 0000000..5e48f60 --- /dev/null +++ b/frontends/calculator/CEdev/include/stdint.h @@ -0,0 +1,19 @@ +#ifndef __STDINT_H +#define __STDINT_H + +typedef signed char int8_t; +typedef unsigned char uint8_t; + +typedef signed short int16_t; +typedef unsigned short uint16_t; + +typedef signed int int24_t; +typedef unsigned int uint24_t; + +typedef signed long int32_t; +typedef unsigned long uint32_t; + +typedef int24_t intptr_t; +typedef uint24_t uintptr_t; + +#endif diff --git a/frontends/calculator/CEdev/include/stdio.h b/frontends/calculator/CEdev/include/stdio.h new file mode 100644 index 0000000..27de9cc --- /dev/null +++ b/frontends/calculator/CEdev/include/stdio.h @@ -0,0 +1,66 @@ +#ifndef STDIO_H +#define STDIO_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define FILENAME_MAX 9 +#define SYS_OPEN 5 /* max open files */ +#define FOPEN_MAX 5 + +#define SEEK_CUR 1 +#define SEEK_END 2 +#define SEEK_SET 0 + +/* ANSI prototypes */ +#ifndef SIZE_T_DEFINED +#define SIZE_T_DEFINED +typedef unsigned int size_t; +#endif + +#ifndef NULL +#define NULL ((void *)0) +#endif + +#ifndef EOF +#define EOF (-1) /* end of file */ +#endif + +typedef struct __stdio_file { + unsigned char slot; +} FILE; + +extern FILE __stdio_files[FOPEN_MAX]; + +int sprintf(char *s, const char *format, ...); +int vprintf(const char *format, va_list arg); +int vsprintf(char *s, const char *format, va_list arg); + +/* stdio.h functions implemented using FILEIOC */ +int remove(const char *filename); +int fgetc(FILE *stream); +int fputc(int c, FILE *stream); +char *fgets(char *str, int num, FILE *stream); +int fputs(const char *str, FILE *stream); +size_t fread(void *ptr, size_t size, size_t count, FILE *stream); +size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream); +int fseek(FILE *stream, long int offset, int origin); +long int ftell(FILE *stream); +int fclose(FILE *stream); +FILE *fopen(const char *filename, const char *mode); +int feof(FILE *stream); +#define ferror(stream) (0) +#define fflush(ignore) ((void)0) +#define rewind(stream) ti_Rewind(stream->slot) +#define fcloseall() ti_CloseAll() + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/frontends/calculator/CEdev/include/stdlib.h b/frontends/calculator/CEdev/include/stdlib.h new file mode 100644 index 0000000..b45077a --- /dev/null +++ b/frontends/calculator/CEdev/include/stdlib.h @@ -0,0 +1,102 @@ +/* + * Copyright (C) 1999-2008 by Zilog, Inc. + * All Rights Reserved + * Modified by Matt "MateoConLechuga" Waltz for TI84+CE platform + */ +#ifndef STDLIB_H +#define STDLIB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define EXIT_SUCCESS 0 +#define EXIT_FAILURE 1 + +typedef int onexit_t; + +#ifndef __cplusplus +#ifndef WCHAR_T_DEFINED +#define WCHAR_T_DEFINED +typedef unsigned short wchar_t; +#endif +#endif + +typedef struct { + int quot; + int rem; +} div_t; + +typedef struct { + long quot; + long rem; +} ldiv_t; + +/* Heap packet header for malloc */ + +typedef char __align; /* alignment type */ +union header { + struct { + union header *ptr; /* next free block */ + unsigned int size; /* size of block */ + } s; + __align x; +}; +typedef union header _HEADER; + +#define EDOM 4 /* domain error */ +#define ERANGE 5 /* range error */ +extern double _huge_val; +#define HUGE_VAL _huge_val /* overflow error */ + +#define RAND_MAX 8388607 /* maximum value returned by rand() */ + +#ifndef SIZE_T_DEFINED +#define SIZE_T_DEFINED +typedef unsigned int size_t; +#endif +#define HEADER _HEADER +#define allocp _allocp +#define NALLOC 50 + +#ifndef NULL +#define NULL ((void *)0) +#endif + +/* Dynamic memory functions */ +void *calloc(size_t, size_t); +void *malloc(size_t); +void *realloc(void *, size_t); +void free(void *); + +/* Character and string functions */ +double atof(char * nptr); +int atoi(char * nptr); +long atol(char * nptr); +double strtod(char * nptr,char ** endptr); +long strtol(char *nptr,char ** endptr,int base); +unsigned long strtoul(char *nptr,char ** endptr,int base); + +/* Random routines */ +void srand(unsigned int seed); +int rand(void); + +/* Binary search and quicksort */ +void *bsearch(void * key,void * base, size_t nmemb, size_t size, int (*compar)(void * ,void * )); +void qsort(void * base,size_t nmemb,size_t size, int (*compar)(void * ,void * )); + +/* Exit and abort */ +void abort(void); +void exit(int status); + +/* Absolutes and division */ +int abs(int j); +long labs(long j); +div_t div(int numer,int denom); +ldiv_t ldiv(long numer, long denom); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/frontends/calculator/CEdev/include/string.h b/frontends/calculator/CEdev/include/string.h new file mode 100644 index 0000000..762eef7 --- /dev/null +++ b/frontends/calculator/CEdev/include/string.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 1999-2008 by Zilog, Inc. + * All Rights Reserved + * Modified by Matt "MateoConLechuga" Waltz for TI84+CE platform + */ +#ifndef STRING_H +#define STRING_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SIZE_T_DEFINED +#define SIZE_T_DEFINED +typedef unsigned int size_t; +#endif + +void *memcpy(void *, const void *, size_t); +void *memchr(const void *, int, size_t); +void *memset(void *, int, size_t); +void *memmove(void *, const void *, size_t); +int memcmp(const void *, const void *, size_t); + +char *strcpy(char *, const char *); +char *strncpy(char *, const char *, size_t); +char *strcat(char *, const char *); +char *strncat(char *, const char *, size_t); +char *strchr(const char *, int); +char *strpbrk(const char *, const char *); +char *strrchr(const char *, int); +char *strstr(const char *, const char *); +char *strtok(char *, const char *); +char *strerror(int errnum); +char *strdup(const char *); +char *strndup(const char *, size_t n); +size_t strcspn(const char *, const char *); +size_t strspn(const char *, const char *); +size_t strlen(const char *); +size_t strnlen(const char *, size_t); +int strcmp(const char *, const char *); +int strncmp(const char *, const char *, size_t); +int strcasecmp(const char *, const char *); +int strncasecmp(const char *, const char *, size_t); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/frontends/calculator/CEdev/include/tice.h b/frontends/calculator/CEdev/include/tice.h new file mode 100644 index 0000000..b572c79 --- /dev/null +++ b/frontends/calculator/CEdev/include/tice.h @@ -0,0 +1,2082 @@ +/** + * @file + * @authors Matt "MateoConLechuga" Waltz + * @authors Jacob "jacobly" Young + * @brief Core CE define file + */ + +#ifndef H_TICE +#define H_TICE + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Hardware & custom macros/functions + */ + +/** + * Returns a pseudo-random 32-bit integer. + * + * @return the random integer + */ +uint32_t random(void); + +/** + * Seeds the pseudo-random number generator used by random() and rand() with the + * value seed. + * + * @param seed the seed value + */ +void srandom(uint32_t seed); + +/** + * Returns a pseudo-random integer in the range of \p min to \p max (inclusive). + */ +#define randInt(min, max) \ +((unsigned)random() % ((max) - (min) + 1) + (min)) + +/** + * Delays for a number of milliseconds. + *

+ * Counts time spent while interrupted. Assumes a CPU clock speed of 48MHz. + * + * @param msec number of milliseconds + */ +void delay(uint16_t msec); + +/** + * "Atomically" loads from a volatile 32-bit value. + * + * @remarks + * The hardware does not provide a mechanism to truly atomically load from a + * 32-bit value. This "atomic" load is implemented by non-atomically reading the + * value twice and retrying if the values read differ. + * + * @attention + * If the maximum period between two value changes is 1us or less (assuming a + * CPU clock speed of 48MHz), then this function may never complete. For + * instance, the counter of a timer ticking at 1MHz or more should not be read + * using this function. In such a case of a purely increasing or decreasing + * value, atomic_load_increasing_32() or atomic_load_decreasing_32() may be + * appropriate instead. + * + * @param p pointer to 32-bit value + */ +uint32_t atomic_load_32(volatile uint32_t *p); + +/** + * "Atomically" loads from a volatile, increasing 32-bit value. + * + * @remarks + * The hardware does not provide a mechanism to truly atomically load from a + * 32-bit value. This "atomic" load is implemented by temporarily disabling + * interrupts while non-atomically reading the value twice and then returning + * the lesser of the two values read. + * + * @attention + * If the minimum period between two value changes is 5us or less and the + * value's maximum rate of change over a 5us period exceeds 256 (assuming a CPU + * clock speed of 48MHz), then the value returned may be incorrect. Of relevant + * note may be the fact that a 48MHz counter does not exceed this limit. + * + * @param p pointer to 32-bit value + */ +uint32_t atomic_load_increasing_32(volatile uint32_t *p); + +/** + * "Atomically" loads from a volatile, decreasing 32-bit value. + * + * @remarks + * The hardware does not provide a mechanism to truly atomically load from a + * 32-bit value. This "atomic" load is implemented by temporarily disabling + * interrupts while non-atomically reading the value twice and then returning + * the greater of the two values read. + * + * @attention + * If the minimum period between two value changes is 5us or less and the + * value's maximum rate of change over a 5us period exceeds 256 (assuming a CPU + * clock speed of 48MHz), then the value returned may be incorrect. Of relevant + * note may be the fact that a 48MHz counter does not exceed this limit. + * + * @param p pointer to 32-bit value + */ +uint32_t atomic_load_decreasing_32(volatile uint32_t *p); + +/** + * Gets a combination of the RTC time; useful for srand() + */ +#define rtc_Time() (*(volatile uint32_t*)0xF30044) + +/* RTC definitions */ +#define RTC_UNFREEZE (1<<7) +#define RTC_FREEZE (0<<7) +#define RTC_LOAD (1<<6) +#define RTC_ENABLE ((1<<0)|(RTC_UNFREEZE)) +#define RTC_DISABLE (0<<0) + +/* RTC registers */ +#define rtc_Seconds (*(volatile uint8_t*)0xF30000) +#define rtc_Minutes (*(volatile uint8_t*)0xF30004) +#define rtc_Hours (*(volatile uint8_t*)0xF30008) +#define rtc_Days (*(volatile uint16_t*)0xF3000C) +#define rtc_AlarmSeconds (*(uint8_t*)0xF30010) +#define rtc_AlarmMinutes (*(uint8_t*)0xF30014) +#define rtc_AlarmHours (*(uint8_t*)0xF30018) +#define rtc_Control (*(uint8_t*)0xF30020) +#define rtc_LoadSeconds (*(uint8_t*)0xF30024) +#define rtc_LoadMinutes (*(uint8_t*)0xF30028) +#define rtc_LoadHours (*(uint8_t*)0xF3002C) +#define rtc_LoadDays (*(uint16_t*)0xF30030) +#define rtc_IntStatus (*(volatile uint8_t*)0xF30034) +#define rtc_IntAcknowledge (*(volatile uint8_t*)0xF30034) +#define rtc_IsBusy() (rtc_Control & RTC_LOAD) + +/* RTC interrupt masks */ +#define RTC_ALARM_INT_SOURCE (1<<5) +#define RTC_DAY_INT_SOURCE (1<<4) +#define RTC_HR_INT_SOURCE (1<<3) +#define RTC_MIN_INT_SOURCE (1<<2) +#define RTC_SEC_INT_SOURCE (1<<1) + +/* RTC interrupt statuses */ +#define RTC_LOAD_INT (1<<5) +#define RTC_ALARM_INT (1<<4) +#define RTC_DAY_INT (1<<3) +#define RTC_HR_INT (1<<2) +#define RTC_MIN_INT (1<<1) +#define RTC_SEC_INT (1<<0) +#define RTC_INT_MASK (RTC_SEC_INT | RTC_MIN_INT | RTC_HR_INT | RTC_DAY_INT | RTC_ALARM_INT | RTC_LOAD_INT) + +/* Whole bunch of useful timer functions */ +#define TIMER1_ENABLE (1<<0) /* Enables Timer 1 */ +#define TIMER1_DISABLE (0<<0) /* Disables Timer 1 */ +#define TIMER1_32K (1<<1) /* Use the 32K clock for timer 1 */ +#define TIMER1_CPU (0<<1) /* Use the CPU clock rate for timer 1 */ +#define TIMER1_0INT (1<<2) /* Enable an interrupt when 0 is reached for the timer 1 */ +#define TIMER1_NOINT (0<<2) /* Disable interrupts for the timer 1 */ +#define TIMER1_UP (1<<9) /* Timer 1 counts up */ +#define TIMER1_DOWN (0<<9) /* Timer 1 counts down */ + +#define TIMER2_ENABLE (1<<3) /* Enables Timer 2 */ +#define TIMER2_DISABLE (0<<3) /* Disables Timer 2 */ +#define TIMER2_32K (1<<4) /* Use the 32K clock for timer 2 */ +#define TIMER2_CPU (0<<4) /* Use the CPU clock rate for timer 2 */ +#define TIMER2_0INT (1<<5) /* Enable an interrupt when 0 is reached for the timer 2 */ +#define TIMER2_NOINT (0<<5) /* Disable interrupts for the timer 2 */ +#define TIMER2_UP (1<<10) /* Timer 2 counts up */ +#define TIMER2_DOWN (0<<10) /* Timer 2 counts down */ + +#define TIMER3_ENABLE (1<<6) /* Enables Timer 3 */ +#define TIMER3_DISABLE (0<<6) /* Disables Timer 3 */ +#define TIMER3_32K (1<<7) /* Use the 32K clock for timer 3 */ +#define TIMER3_CPU (0<<7) /* Use the CPU clock rate for timer 3 */ +#define TIMER3_0INT (1<<8) /* Enable an interrupt when 0 is reached for the timer 3 */ +#define TIMER3_NOINT (0<<8) /* Disable interrupts for the timer 3 */ +#define TIMER3_UP (1<<11) /* Timer 3 counts up */ +#define TIMER3_DOWN (0<<11) /* Timer 3 counts down */ + +/* These defines can be used to check the status of the timer */ +#define TIMER1_MATCH1 (1<<0) /* Timer 1 hit the first match value */ +#define TIMER1_MATCH2 (1<<1) /* Timer 1 hit the second match value */ +#define TIMER1_RELOADED (1<<2) /* Timer 1 was reloaded (Needs TIMER1_0INT enabled) */ + +#define TIMER2_MATCH1 (1<<3) /* Timer 2 hit the first match value */ +#define TIMER2_MATCH2 (1<<4) /* Timer 2 hit the second match value */ +#define TIMER2_RELOADED (1<<5) /* Timer 2 was reloaded (Needs TIMER2_0INT enabled) */ + +#define TIMER3_MATCH1 (1<<6) /* Timer 3 hit the first match value */ +#define TIMER3_MATCH2 (1<<7) /* Timer 3 hit the second match value */ +#define TIMER3_RELOADED (1<<8) /* Timer 3 was reloaded (Needs TIMER3_0INT enabled) */ + +/* Timer registers */ +#define timer_1_Counter (*(volatile uint32_t*)0xF20000) +#define timer_1_ReloadValue (*(uint32_t*)0xF20004) +#define timer_1_MatchValue_1 (*(uint32_t*)0xF20008) +#define timer_1_MatchValue_2 (*(uint32_t*)0xF2000C) +#define timer_2_Counter (*(volatile uint32_t*)0xF20010) +#define timer_2_ReloadValue (*(uint32_t*)0xF20014) +#define timer_2_MatchValue_1 (*(uint32_t*)0xF20018) +#define timer_2_MatchValue_2 (*(uint32_t*)0xF2001C) +#define timer_3_Counter (*(volatile uint32_t*)0xF20020) +#define timer_3_ReloadValue (*(uint32_t*)0xF20024) +#define timer_3_MatchValue_1 (*(uint32_t*)0xF20028) +#define timer_3_MatchValue_2 (*(uint32_t*)0xF2002C) +#define timer_Control (*(uint16_t*)0xF20030) +#define timer_IntStatus (*(volatile uint16_t*)0xF20034) +#define timer_IntAcknowledge (*(volatile uint16_t*)0xF20034) +#define timer_EnableInt (*(uint16_t*)0xF20038) + +/* LCD defines */ +#define lcd_BacklightLevel (*(uint8_t*)0xF60024) +#define lcd_Timing0 (*(uint32_t*)0xE30000) +#define lcd_Timing1 (*(uint32_t*)0xE30004) +#define lcd_Timing2 (*(uint32_t*)0xE30008) +#define lcd_Timing3 (*(uint24_t*)0xE3000C) +#define lcd_UpBase (*(uint32_t*)0xE30010) +#define lcd_LpBase (*(uint32_t*)0xE30014) +#define lcd_Control (*(uint24_t*)0xE30018) +#define lcd_EnableInt (*(uint8_t*)0xE3001C) +#define lcd_IntStatus (*(uint8_t*)0xE30020) +#define lcd_IntStatusMasked (*(uint8_t*)0xE30024) +#define lcd_IntAcknowledge (*(volatile uint8_t*)0xE30028) +#define lcd_UpBaseCurr (*(volatile uint32_t*)0xE3002C) +#define lcd_LpBaseCurr (*(volatile uint32_t*)0xE30030) +#define lcd_Palette ((uint16_t*)0xE30200) +#define lcd_Ram ((uint16_t*)0xD40000) + +/** + * Width of LCD in pixels + */ +#define LCD_WIDTH \ +(320) + +/** + * Height of LCD in pixels + */ +#define LCD_HEIGHT \ +(240) + +/** + * Total number of pixels in LCD + */ +#define LCD_SIZE \ +(LCD_WIDTH*LCD_HEIGHT*2) + +/** + * @brief Structure of real variable type + */ +typedef struct { int8_t sign, exp; uint8_t mant[7]; } real_t; +/** + * @brief Structure of complex variable type + */ +typedef struct { real_t real, imag; } cplx_t; +/** + * @brief Structure of list variable type + */ +typedef struct { uint16_t dim; real_t items[1]; } list_t; +/** + * @brief Structure of complex list variable type + */ +typedef struct { uint16_t dim; cplx_t items[1]; } cplx_list_t; +/** + * @brief Structure of matrix variable type + */ +typedef struct { uint8_t cols, rows; real_t items[1]; } matrix_t; +/** + * @brief Structure of string variable type + */ +typedef struct { uint16_t len; char data[1]; } string_t; +/** + * @brief Structure of equation variable type + */ +typedef struct { uint16_t len; char data[1]; } equ_t; +/** + * @brief Structure of miscellaneous variable type + */ +typedef struct { uint16_t size; uint8_t data[1]; } var_t; + +/** + * Gets an element from a matrix + * + * @param matrix Structure of matrix + * @param row Row in matrix + * @param col Column in matrix + * @returns real_t containing element data + */ +#define matrix_element(matrix, row, col) ((matrix)->items[(row)+(col)*(matrix)->rows]) + +/** + * Resets the OS homescreen; accounts for split screen + */ +#define os_ClrHome() do { _OS(asm_ClrLCD); _OS(asm_HomeUp); _OS(asm_DrawStatusBar); } while (0) + +/** + * Resets the OS homescreen fully + */ +#define os_ClrHomeFull() do { _OS(asm_ClrLCDFull); _OS(asm_HomeUp); _OS(asm_DrawStatusBar); } while (0) + +/* + * Bootcode functions + */ + +/** + * Sets the calculator's date + * + * Performs checks to ensure date is within range + * @param day Day to set + * @param month Month to set + * @param year Year to set + */ +void boot_SetDate(uint8_t day, uint8_t month, uint16_t year); + +/** + * Gets the calculator's date + * + * @param day Pointer to variable to store day + * @param month Pointer to variable to store month + * @param year Pointer to variable to store year + */ +void boot_GetDate(uint8_t *day, uint8_t *month, uint16_t *year); + +/** + * Sets the calculator's time + * + * Performs checks to ensure time is within range + * @param seconds Seconds to set + * @param minutes Minutes to set + * @param hours Hours to set + */ +void boot_SetTime(uint8_t seconds, uint8_t minutes, uint8_t hours); + +/** + * Gets the calculator's time + * + * @param seconds Pointer to variable to store seconds + * @param minutes Pointer to variable to store minutes + * @param hours Pointer to variable to store hours + */ +void boot_GetTime(uint8_t *seconds, uint8_t *minutes, uint8_t *hours); + +/** + * Checks if past noon + * + * @returns True if past noon + */ +bool boot_IsAfterNoon(void); + +/** + * @returns Bootcode version major + */ +uint8_t boot_GetBootMajorVer(void); + +/** + * @returns Bootcode version minor + */ +uint8_t boot_GetBootMinorVer(void); + +/** + * @returns Hardware version + */ +uint8_t boot_GetHardwareVer(void); + +/** + * Turns all of VRAM into 0xFF (white) + */ +void boot_ClearVRAM(void); + +/** + * Checks if the [on] key was pressed + * + * @returns True is returned if [on] key was pressed + */ +bool boot_CheckOnPressed(void); + +/** + * Basically a reimplemented form of printf that prints to some debugging device + * + * @param string String to send to debug device + */ +void boot_DebugPrintf(const char *string); + +/** + * Turns off the calculator (probably not a good idea to use) + */ +void boot_TurnOff(void); + +/** + * Inserts a new line at the current cursor posistion on the homescreen + * Does not scroll. + */ +void boot_NewLine(void); + +/** + * @returns Current battery status + */ +uint8_t boot_GetBatteryStatus(void); + +/** + * Waits for ~10 ms + */ +void boot_WaitShort(void); + +/* + * OS Routines + */ + +/** + * Inserts a new line at the current cursor posistion on the homescreen + * Does scroll. + */ +void os_NewLine(void); + +/** + * Disables the OS cursor + */ +void os_DisableCursor(void); + +/** + * Enables the OS cursor + */ +void os_EnableCursor(void); + +/** + * Sets the foreground color used to draw text on the graphscreen + * @param color 565 BGR color to set text foreground to + */ +void os_SetDrawFGColor(uint24_t color); + +/** + * Gets the foreground color used to draw text on the graphscreen + * @returns 565 BGR color of text foreground + */ +uint24_t os_GetDrawFGColor(void); + +/** + * Sets the background color used to draw text on the graphscreen + * @param color 565 BGR color to set text background to + */ +void os_SetDrawBGColor(uint24_t color); + +/** + * Gets the background color used to draw text on the graphscreen + * + * @returns 565 BGR color of text nackground + * @warning Only useable in OS 5.2 and above; use at your own risk + */ +uint24_t os_GetDrawBGColor(void); + +/** + * Set the cursor posistion used on the homescreen + * + * @param curRow The row aligned offset + * @param curCol The column aligned offset + */ +void os_SetCursorPos(uint8_t curRow, uint8_t curCol); + +/** + * Gets the cursor posistion used on the homescreen + * + * @param curRow Pointer to store the row aligned offset + * @param curCol Pointer to store the column aligned offset + */ +void os_GetCursorPos(unsigned int *curRow, unsigned int *curCol); + +/** + * Selects the font to use when drawing on the graphscreen + * + * @param id + * 0: small font
+ * 1: large monospace font + */ +void os_FontSelect(char id); + +/** + * Gets the font to use when drawing on the graphscreen + * + * @returns + * 0: small font
+ * 1: large monospace font + */ +uint24_t os_FontGetID(void); + +/** + * @param string String to get pixel width of + * @returns The width of a string in the variable-width format + */ +uint24_t os_FontGetWidth(const char *string); + +/** + * @returns The height of the font characters + */ +uint24_t os_FontGetHeight(void); + +/** + * Draws text using the small font to the screen + * + * @param string String to draw + * @param col Column to start drawing at + * @param row Row to start drawing at + * @returns The end column + */ +uint24_t os_FontDrawText(const char *string, uint16_t col, uint8_t row); + +/** + * Draws transparent text using the small font to the screen + * + * @param string String to draw + * @param col Column to start drawing at + * @param row Row to start drawing at + * @returns The end column + */ +uint24_t os_FontDrawTransText(const char *string, uint16_t col, uint8_t row); + +/** + * Puts some text at the current homescreen cursor location + * + * @param string Test to put on homescreen + * @returns 1 if string fits on screen, 0 otherwise + */ +uint24_t os_PutStrFull(const char *string); + +/** + * Puts some text at the current homescreen cursor location + * + * @param string Test to put on homescreen + * @returns 1 if string fits on line, 0 otherwise + */ +uint24_t os_PutStrLine(const char *string); + +/** + * Set a particular flag variable + * + * @param offset Offset to particular flag in list + * @param set Bitmask of flag to set + */ +void os_SetFlagByte(int offset, uint8_t set); + +/** + * Get a particular flag variable + * + * @param offset Offset to particular flag in list + * @returns Bitmask of flag + */ +uint8_t os_GetFlagByte(int offset); + +/** + * Get amount of free ram in order to allocate extra ram + * + * @param free Set to start of free available ram + * @returns Size of available ram + */ +size_t os_MemChk(void **free); + +/** + * Throws an OS error + * + * @param error Error code to throw + */ +void os_ThrowError(uint8_t error); + +/** + * Gets a pointer to the system stats + * + * @returns + * [3] - Hardware version
+ * [12-13] - Boot Version Major
+ * [14] - Boot Version Minor
+ * [15-16] - Boot Version Build
+ * [28-37] - Calc ID (From certificate if exists)
+ * [38-39] - Appears to be localization language + */ +void *os_GetSystemStats(void); + +/** + * This function can return twice (like setjmp). + * First return always happens with a return value of 0. + * Second return only happens if an error occurs before os_PopErrorHandler is called, + * with the errNo as the return value. + * + * @code + * int errno = os_PushErrorHandler(); + * if (errno) { + * // handle error, but no longer under the protection of the error handler so do not call os_PopErrorHandler() + * } else { + * // run some code that may error + * os_PopErrorHandler(); + * } + * @endcode + * + * @param routine Error handling routine + * @see os_PopErrorHandler + */ +int os_PushErrorHandler(void); + +/** + * Restores stack state after a call to os_PushErrorHandler. Must be called with stack in the same state + * as it was when os_PushErrorHandler returned with 0, and should not be called along the error path. + * + * @see os_PushErrorHandler + */ +void os_PopErrorHandler(void); + +/** + * @returns A pointer to symtable of the OS + */ +void *os_GetSymTablePtr(void); + +/** + * Creates an AppVar + * + * @param name Pointer to name of AppVar to create + * @param size Size of AppVar to create + * @returns A pointer to the AppVar data + * @note Returns NULL if creation failed for some reason, otherwise a pointer to the size bytes + */ +var_t *os_CreateAppVar(const char *name, uint16_t size); + +/** + * Returns next entry or NULL if no more entries, pass os_GetSymTablePtr() as first entry + */ +void *os_NextSymEntry(void *entry, uint24_t *type, uint24_t *nameLength, char *name, void **data); + +/** + * Locates a symbol in the symtable + * + * @param type Type of symbol to find + * @param name Pointer to name of symbol to find + * @param entry Can be NULL if you don't care + * @param data Can be NULL if you don't care + * @returns If file exists, returns 1 and sets entry and data, otherwise returns 0. + */ +int os_ChkFindSym(uint8_t type, const char *name, void **entry, void **data); + +/** + * Gets the Ans variable + * + * @param type This is set to the current variable type in ANS + * @returns Pointer to the data + * @note Returns NULL if Ans doesn't exist or type is NULL + */ +void *os_RclAns(uint8_t *type); + +/** + * Copies a real_t type + * + * @param src Pointer to original real_t + * @returns Copied real_t + */ +real_t os_RealCopy(const real_t *src); + +/* Unary operations used to interact with the OS math functions */ +real_t os_RealAcosRad(const real_t *arg); +real_t os_RealAsinRad(const real_t *arg); +real_t os_RealAtanRad(const real_t *arg); +real_t os_RealCosRad(const real_t *arg); +real_t os_RealRadToDeg(const real_t *arg); +real_t os_RealExp(const real_t *arg); +real_t os_RealFloor(const real_t *arg); +real_t os_RealFrac(const real_t *arg); +real_t os_RealRoundInt(const real_t *arg); +real_t os_RealLog(const real_t *arg); +real_t os_RealNeg(const real_t *arg); +real_t os_RealDegToRad(const real_t *arg); +real_t os_RealInv(const real_t *arg); +real_t os_RealSinRad(const real_t *arg); +real_t os_RealSqrt(const real_t *arg); +real_t os_RealTanRad(const real_t *arg); +real_t os_RealInt(const real_t *arg); +cplx_t os_CplxSquare(const cplx_t *arg); + +/* Binary operations used to interact with the OS math functions */ +real_t os_RealAdd(const real_t *arg1, const real_t *arg2); +real_t os_RealDiv(const real_t *arg1, const real_t *arg2); +real_t os_RealGcd(const real_t *arg1, const real_t *arg2); +real_t os_RealLcm(const real_t *arg1, const real_t *arg2); +real_t os_RealMax(const real_t *arg1, const real_t *arg2); +real_t os_RealMin(const real_t *arg1, const real_t *arg2); +real_t os_RealMul(const real_t *arg1, const real_t *arg2); +real_t os_RealNcr(const real_t *total, const real_t *num); +real_t os_RealNpr(const real_t *total, const real_t *num); +real_t os_RealPow(const real_t *base, const real_t *exp); +real_t os_RealRandInt(const real_t *min, const real_t *max); +real_t os_RealMod(const real_t *arg1, const real_t *arg2); +real_t os_RealSub(const real_t *arg1, const real_t *arg2); + +/** + * Rounds a real_t + * + * @note digits must be in the range 0 - 9 + */ +real_t os_RealRound(const real_t *arg, char digits); + +/** + * Compares two real_t + * + * @returns -1, 0, or 1 depending on the comparison + */ +int os_RealCompare(const real_t *arg1, const real_t *arg2); + +/** + * Converts a real_t to an integer + * @note Saturates on overflow + */ +int24_t os_RealToInt24(const real_t *arg); + +/** + * Converts an integer to a real_t + * @note Saturates on overflow + */ +real_t os_Int24ToReal(int24_t arg); + +/** + * Converts a real_t to a float + * @note Saturates on overflow + */ +float os_RealToFloat(const real_t *arg); + +/** + * Converts an float to a real_t + * @note Saturates on overflow + */ +real_t os_FloatToReal(float arg); + +/** This converts a ti-float to a ti-ascii string. + * + * @param result Zero terminated string copied to this address + * @param arg Real to convert + * @param maxLength + * <=0: use default max length (14)
+ * >0: max length of result, minimum of 6 + * @param mode: + * 0: Use current mode for everything (digits ignored)
+ * 1: Normal mode
+ * 2: Sci mode
+ * 3: Eng mode
+ * >4: Use current Normal/Sci/Eng mode (digits still used)
+ * @param digits + * -1: Float mode
+ * 0-9: Fix # mode
+ * @returns Length of result + */ +int os_RealToStr(char *result, const real_t *arg, int8_t maxLength, uint8_t mode, int8_t digits); + +/** + * This converts a ti-ascii string to a ti-float. + * + * String format regexp: / *[-\032+]?[0-9]*(\.[0-9]*)?([eE\033][-\032+]?[0-9]*)?/ + * @param string TI-ascii string to convert + * @param end If non-null, pointer to end of parsed number is stored here + * @returns resulting TI-float; on exponent overflow this is +-9.9999999999999e99 + */ +real_t os_StrToReal(const char *string, char **end); + +/** + * High 8 is unsigned offset, low 8 is bits to test + */ +int os_TestFlagBits(uint16_t offset_pattern); +void os_SetFlagBits(int16_t offset_pattern); +void os_ResetFlagBits(int16_t offset_pattern); + +/** + * Custom implementation input routine for use in conjunction with the TIOS. + * It is HIGHLY recommended you implement your own routine, this routine has + * some quirks. It is good enough for getting basic input however. + * + * @param string Input prompt string to be displayed to the user + * @param buf Storage location to store input string + * @param bufsize Available storage size for input string. -1 for null termination. + * @returns None + */ +void os_GetStringInput(char *string, char *buf, size_t bufsize); + +/** + * Gets a key from the OS + * + * @returns Key code + * @returns Extended key code in high byte + */ +uint16_t os_GetKey(void); + +/** + * Disable text buffering on the homescreen. C programs use this area by default for the BSS / Heap. + */ +void os_DisableHomeTextBuffer(void); + +/** + * Enables text buffering on the homescreen. C programs use this area by default for the BSS / Heap. + */ +void os_EnableHomeTextBuffer(void); + +/** + * @brief Scan code type + */ +typedef uint8_t sk_key_t; + +/** + * Performs an OS call to get the keypad scan code + * + * You can also use this function to get input from the user as a string like this: + * @code + * const char *chars = "\0\0\0\0\0\0\0\0\0\0\"WRMH\0\0?[VQLG\0\0:ZUPKFC\0 YTOJEB\0\0XSNIDA\0\0\0\0\0\0\0\0"; + * uint8_t key, i = 0; + * char buffer[50]; + * + * while((key = os_GetCSC()) != sk_Enter) { + * if(chars[key]) { + * buffer[i++] = chars[key]; + * } + * } + * @endcode + * Feel free to modify the string to suit your needs. + * @returns Key scan code + */ +sk_key_t os_GetCSC(void); + +/** + * Runs the calulator at 6 MHz + */ +void boot_Set6MHzMode(void); + +/** + * Runs the calulator at 48 MHz + */ +void boot_Set48MHzMode(void); + +/** + * Runs the calulator at 6 MHz (saves interrupt status) + */ +void boot_Set6MHzModeI(void); + +/** + * Runs the calulator at 48 MHz (saves interrupt status) + */ +void boot_Set48MHzModeI(void); + +/** + * Executes the assembly routine _ForceCmdNoChar + */ +void os_ForceCmdNoChar(void); + +/** + * Use this function to call assembly functions in the OS and Bootcode + * i.e. _OS( asm_ArcChk ); + */ +void _OS(void (*function)(void)); + +/** + * Assembly routine to scroll homescreen up + */ +void asm_MoveUp(void); + +/** + * Assembly routine to scroll homescreen down + */ +void asm_MoveDown(void); + +/** + * Assembly routine to move row and column posistion to (0,0) + */ +void asm_HomeUp(void); + +/** + * Assembly routine to turn on the Run Indicator + */ +void asm_RunIndicOn(void); + +/** + * Assembly routine to turn off the Run Indicator + */ +void asm_RunIndicOff(void); + +/** + * Assembly routine to turn off APD + */ +void asm_DisableAPD(void); + +/** + * Assembly routine to turn on APD + */ +void asm_EnableAPD(void); + +/** + * Assembly routine checks the amount of free archive + */ +void asm_ArcChk(void); + +/** + * Assembly routine to clear the homescreen lcd + */ +void asm_ClrLCDFull(void); + +/** + * Assembly routine to clear the homescreen lcd. + * Accounts for split screen + */ +void asm_ClrLCD(void); + +/** + * Assembly routine to redraw the status bar + */ +void asm_DrawStatusBar(void); + +/** + * Invalidate and clear stat variables + */ +void asm_DelRes(void); + +/** + * Invalidate and clear text shadow area + */ +void asm_ClrTxtShd(void); + +/** + * Colors used by the OS + */ +typedef enum { + OS_COLOR_BLUE = 10, + OS_COLOR_RED, + OS_COLOR_BLACK, + OS_COLOR_MAGENTA, + OS_COLOR_GREEN, + OS_COLOR_ORANGE, + OS_COLOR_BROWN, + OS_COLOR_NAVY, + OS_COLOR_LTBLUE, + OS_COLOR_YELLOW, + OS_COLOR_WHITE, + OS_COLOR_LTGRAY, + OS_COLOR_MEDGRAY, + OS_COLOR_GRAY, + OS_COLOR_DARKGRAY +} os_colors_t; + +#define os_RamStart ((uint8_t*)0xD00000) +#define os_Flags ((uint8_t*)0xD00080) +#define os_TextFlags (*(uint8_t*)0xD00080) +#define os_ApdFlags (*(uint8_t*)0xD00088) +#define os_RclFlags (*(uint8_t*)0xD0008E) + +#define os_AppData ((uint8_t*)0xD00429) + +#define os_KbdScanCode (*(uint8_t*)0xD00587) +#define os_KbdLGSC (*(uint8_t*)0xD00588) +#define os_KbdPSC (*(uint8_t*)0xD00589) +#define os_KbdWUR (*(uint8_t*)0xD0058A) +#define os_KbdDebncCnt (*(uint8_t*)0xD0058B) +#define os_KbdKey (*(uint8_t*)0xD0058C) +#define os_KbdGetKy (*(uint8_t*)0xD0058D) +#define os_KeyExtend (*(uint8_t*)0xD0058E) +#define os_Brightness (*(uint8_t*)0xD0058F) +#define os_ApdSubTimer (*(uint8_t*)0xD00590) +#define os_ApdTimer (*(uint8_t*)0xD00591) +#define os_CurRow (*(uint8_t*)0xD00595) +#define os_CurCol (*(uint8_t*)0xD00596) + +#define os_OP1 ((uint8_t*)0xD005F8) +#define os_OP2 ((uint8_t*)0xD00603) +#define os_OP3 ((uint8_t*)0xD0060E) +#define os_OP4 ((uint8_t*)0xD00619) +#define os_OP5 ((uint8_t*)0xD00624) +#define os_OP6 ((uint8_t*)0xD0062F) +#define os_OP7 ((uint8_t*)0xD0063A) + +#define os_ProgToEdit ((char*)0xD0065B) +#define os_NameBuff ((char*)0xD00663) + +#define os_TextShadow ((uint8_t*)0xD006C0) /**< Text buffer 260 bytes */ + +#define os_PromptRow (*(uint8_t*)0xD00800) +#define os_PromptCol (*(uint8_t*)0xD00801) +#define os_PromptIns (*(uint8_t*)0xD00802) +#define os_PromptShift (*(uint8_t*)0xD00803) +#define os_PromptRet (*(uint8_t*)0xD00804) +#define os_PromptValid (*(uint8_t*)0xD00807) + +#define os_PenCol (*(uint24_t*)0xD008D2) /**< Small font column location */ +#define os_PenRow (*(uint8_t*)0xD008D5) /**< Small font row location */ + +#define os_StatVars ((uint8_t*)0xD01191) +#define os_AsmPrgmSize (*(uint16_t*)0xD0118C) /**< Current size of executing program */ + +#define os_uXMin (*(real_t*)0xD01D61) +#define os_uXMax (*(real_t*)0xD01D6A) +#define os_uXScl (*(real_t*)0xD01D73) +#define os_uYMin (*(real_t*)0xD01D7C) +#define os_uYMax (*(real_t*)0xD01D85) +#define os_uYScl (*(real_t*)0xD01D8E) +#define os_uThetaMin (*(real_t*)0xD01D97) +#define os_uThetaMax (*(real_t*)0xD01DA0) +#define os_uThetaStep (*(real_t*)0xD01DA9) +#define os_uTmin (*(real_t*)0xD01DB2) +#define os_uTmax (*(real_t*)0xD01DBB) +#define os_uTStep (*(real_t*)0xD01DC4) +#define os_uPlotStart (*(real_t*)0xD01DCD) +#define os_unMax (*(real_t*)0xD01DD6) +#define os_uu0 (*(real_t*)0xD01DDF) +#define os_uv0 (*(real_t*)0xD01DE8) +#define os_unMin (*(real_t*)0xD01DF1) +#define os_uu02 (*(real_t*)0xD01DFA) +#define os_uv02 (*(real_t*)0xD01E03) +#define os_uw0 (*(real_t*)0xD01E0C) +#define os_uPlotStep (*(real_t*)0xD01E15) +#define os_uXres (*(real_t*)0xD01E1E) +#define os_uw02 (*(real_t*)0xD01E27) +#define os_XMin (*(real_t*)0xD01E33) +#define os_XMax (*(real_t*)0xD01E3C) +#define os_XScl (*(real_t*)0xD01E45) +#define os_YMin (*(real_t*)0xD01E4E) +#define os_YMax (*(real_t*)0xD01E57) +#define os_YScl (*(real_t*)0xD01E60) +#define os_ThetaMin (*(real_t*)0xD01E69) +#define os_ThetaMax (*(real_t*)0xD01E72) +#define os_ThetaStep (*(real_t*)0xD01E7B) +#define os_TMinPar (*(real_t*)0xD01E84) +#define os_TMaxPar (*(real_t*)0xD01E8D) +#define os_TStep (*(real_t*)0xD01E96) +#define os_PlotStart (*(real_t*)0xD01E9F) +#define os_NMax (*(real_t*)0xD01EA8) +#define os_u0 (*(real_t*)0xD01EB1) +#define os_V0 (*(real_t*)0xD01EBA) +#define os_NMin (*(real_t*)0xD01EC3) +#define os_u02 (*(real_t*)0xD01ECC) +#define os_V02 (*(real_t*)0xD01ED5) +#define os_W0 (*(real_t*)0xD01EDE) +#define os_PlotStep (*(real_t*)0xD01EE7) +#define os_XResO (*(real_t*)0xD01EF0) +#define os_W02 (*(real_t*)0xD01EF9) +#define os_un1 (*(real_t*)0xD01F02) +#define os_un2 (*(real_t*)0xD01F0B) +#define os_Vn1 (*(real_t*)0xD01F14) +#define os_Vn2 (*(real_t*)0xD01F1D) +#define os_Wn1 (*(real_t*)0xD01F26) +#define os_Wn2 (*(real_t*)0xD01F2F) +#define os_Fin_N (*(real_t*)0xD01F38) +#define os_Fin_I (*(real_t*)0xD01F41) +#define os_Fin_PV (*(real_t*)0xD01F4A) +#define os_Fin_PMT (*(real_t*)0xD01F53) +#define os_Fin_FV (*(real_t*)0xD01F5C) +#define os_Fin_PY (*(real_t*)0xD01F65) +#define os_Fin_CY (*(real_t*)0xD01F6E) +#define os_Cal_N (*(real_t*)0xD01F77) +#define os_Cal_I (*(real_t*)0xD01F80) +#define os_Cal_PV (*(real_t*)0xD01F89) +#define os_Cal_PMT (*(real_t*)0xD01F92) +#define os_Cal_FV (*(real_t*)0xD01F9B) +#define os_Cal_PY (*(real_t*)0xD01FA4) + +#define os_CmdShadow ((uint8_t*)0xD0232D) + +#define os_Y1LineType (*(uint8_t*)0xD024BF) +#define os_Y2LineType (*(uint8_t*)0xD024C0) +#define os_Y3LineType (*(uint8_t*)0xD024C1) +#define os_Y4LineType (*(uint8_t*)0xD024C2) +#define os_Y5LineType (*(uint8_t*)0xD024C3) +#define os_Y6LineType (*(uint8_t*)0xD024C4) +#define os_Y7LineType (*(uint8_t*)0xD024C5) +#define os_Y8LineType (*(uint8_t*)0xD024C6) +#define os_Y9LineType (*(uint8_t*)0xD024C7) +#define os_Y0LineType (*(uint8_t*)0xD024C8) +#define os_Para1LineType (*(uint8_t*)0xD024C9) +#define os_Para2LineType (*(uint8_t*)0xD024CA) +#define os_Para3LineType (*(uint8_t*)0xD024CB) +#define os_Para4LineType (*(uint8_t*)0xD024CC) +#define os_Para5LineType (*(uint8_t*)0xD024CD) +#define os_Para6LineType (*(uint8_t*)0xD024CE) +#define os_Polar1LineType (*(uint8_t*)0xD024CF) +#define os_Polar2LineType (*(uint8_t*)0xD024D0) +#define os_Polar3LineType (*(uint8_t*)0xD024D1) +#define os_Polar4LineType (*(uint8_t*)0xD024D2) +#define os_Polar5LineType (*(uint8_t*)0xD024D3) +#define os_Polar6LineType (*(uint8_t*)0xD024D4) +#define os_SecULineType (*(uint8_t*)0xD024D5) +#define os_SecVLineType (*(uint8_t*)0xD024D6) +#define os_SecWLineType (*(uint8_t*)0xD024D7) +#define os_Y1LineColor (*(uint8_t*)0xD024D8) +#define os_Y2LineColor (*(uint8_t*)0xD024D9) +#define os_Y3LineColor (*(uint8_t*)0xD024DA) +#define os_Y4LineColor (*(uint8_t*)0xD024DB) +#define os_Y5LineColor (*(uint8_t*)0xD024DC) +#define os_Y6LineColor (*(uint8_t*)0xD024DD) +#define os_Y7LineColor (*(uint8_t*)0xD024DE) +#define os_Y8LineColor (*(uint8_t*)0xD024DF) +#define os_Y9LineColor (*(uint8_t*)0xD024E0) +#define os_Y0LineColor (*(uint8_t*)0xD024E1) +#define os_Para1LineColor (*(uint8_t*)0xD024E2) +#define os_Para2LineColor (*(uint8_t*)0xD024E3) +#define os_Para3LineColor (*(uint8_t*)0xD024E4) +#define os_Para4LineColor (*(uint8_t*)0xD024E5) +#define os_Para5LineColor (*(uint8_t*)0xD024E6) +#define os_Para6LineColor (*(uint8_t*)0xD024E7) +#define os_Polar1LineColor (*(uint8_t*)0xD024E8) +#define os_Polar2LineColor (*(uint8_t*)0xD024E9) +#define os_Polar3LineColor (*(uint8_t*)0xD024EA) +#define os_Polar4LineColor (*(uint8_t*)0xD024EB) +#define os_Polar5LineColor (*(uint8_t*)0xD024EC) +#define os_Polar6LineColor (*(uint8_t*)0xD024ED) +#define os_SecULineColor (*(uint8_t*)0xD024EE) +#define os_SecVLineColor (*(uint8_t*)0xD024EF) +#define os_SecWLineColor (*(uint8_t*)0xD024F0) + +#define os_AppErr1 ((char*)0xD025A9) /**< String [1] for custom error */ +#define os_AppErr2 ((char*)0xD025B6) /**< String [2] for custom error */ + +#define os_CursorHookPtr (*(uint24_t*)0xD025D5) +#define os_LibraryHookPtr (*(uint24_t*)0xD025D8) +#define os_RawKeyHookPtr (*(uint24_t*)0xD025DB) +#define os_GetKeyHookPtr (*(uint24_t*)0xD025DE) +#define os_HomescreenHookPtr (*(uint24_t*)0xD025E1) +#define os_WindowHookPtr (*(uint24_t*)0xD025E4) +#define os_GraphHookPtr (*(uint24_t*)0xD025E7) +#define os_YEqualsHookPtr (*(uint24_t*)0xD025EA) +#define os_FontHookPtr (*(uint24_t*)0xD025ED) +#define os_RegraphHookPtr (*(uint24_t*)0xD025F0) +#define os_GraphicsHookPtr (*(uint24_t*)0xD025F3) +#define os_TraceHookPtr (*(uint24_t*)0xD025F6) +#define os_ParserHookPtr (*(uint24_t*)0xD025F9) +#define os_AppChangeHookPtr (*(uint24_t*)0xD025FC) +#define os_Catalog1HookPtr (*(uint24_t*)0xD025FF) +#define os_HelpHookPtr (*(uint24_t*)0xD02602) +#define os_CxRedispHookPtr (*(uint24_t*)0xD02605) +#define os_MenuHookPtr (*(uint24_t*)0xD02608) +#define os_Catalog2HookPtr (*(uint24_t*)0xD0260B) +#define os_TokenHookPtr (*(uint24_t*)0xD0260E) +#define os_LocalizeHookPtr (*(uint24_t*)0xD02611) +#define os_SilentLinkHookPtr (*(uint24_t*)0xD02614) +#define os_ActiveUSBHookPtr (*(uint24_t*)0xD0261A) + +#define os_TempFreeArc (*(uint24_t*)0xD02655) /**< Set after asm_ArcChk call */ + +#define os_TextBGcolor (*(uint16_t*)0xD02688) /**< Large font background color */ +#define os_TextFGcolor (*(uint16_t*)0xD0268A) /**< Large font foreground color */ + +#define os_DrawBGColor (*(uint16_t*)0xD026AA) /**< Small font background color */ +#define os_DrawFGColor (*(uint16_t*)0xD026AC) /**< Small font foreground color */ +#define os_DrawColorCode (*(uint8_t*)0xD026AE) + +#define os_BatteryStatus (*(uint8_t*)0xD02A86) + +#define os_GraphBGColor (*(uint16_t*)0xD02A98) /**< Graph background 565 color */ + +#define os_FillRectColor (*(uint16_t*)0xD02AC0) +#define os_StatusBarBGColor (*(uint16_t*)0xD02ACC) /**< Status bar 565 color */ + +#define os_TmpYears (*(real_t*)0xD02B01) +#define os_TmpMonths (*(real_t*)0xD02B0A) +#define os_TmpDays (*(real_t*)0xD02B13) +#define os_TmpHours (*(real_t*)0xD02B1C) +#define os_TmpMinutes (*(real_t*)0xD02B25) + +#define os_RamCode ((uint8_t*)0xD18C7C) /**< 1023 bytes free ram */ + +/* + * TI-OS Token definitions + */ + +#define tToDMS 0x01 +#define tToDEC 0x02 +#define tToAbc 0x03 +#define tStore 0x04 +#define tBoxPlot 0x05 +#define tLBrack 0x06 +#define tRBrack 0x07 +#define tLBrace 0x08 +#define tRBrace 0x09 +#define tFromRad 0x0A +#define tFromDeg 0x0B +#define tRecip 0x0C +#define tSqr 0x0D +#define tTrnspos 0x0E +#define tCube 0x0F +#define tLParen 0x10 +#define tRParen 0x11 +#define tRound 0x12 +#define tPxTst 0x13 +#define tAug 0x14 +#define tRowSwap 0x15 +#define tRowPlu 0x16 +#define tmRow 0x17 +#define tmRowPlus 0x18 +#define tMax 0x19 // 'max' +#define tMin 0x1A // 'min' +#define tRToPr 0x1B // 'R>Pr' +#define tRToPo 0x1C // 'R>Po' +#define tPToRx 0x1D // 'P>Rx' +#define tPToRy 0x1E // 'P>Ry' +#define tMedian 0x1F // 'MEDIAN' +#define tRandM 0x20 // 'randM' +#define tMean 0x21 // 'MEAN' +#define tRoot 0x22 // 'ROOT' +#define tSeries 0x23 // 'seq' +#define tFnInt 0x24 // 'fnInt' +#define tNDeriv 0x25 // 'fnIr' +#define tEvalF 0x26 +#define tFmin 0x27 +#define tFmax 0x28 +#define tSpace 0x29 // ' ' +#define tString 0x2A // '"' +#define tComma 0x2B // ',' +#define tii 0x2C // 'i' +#define tFact 0x2D // '!' +#define tCubicR 0x2E +#define tQuartR 0x2F +#define t0 0x30 +#define t1 0x31 +#define t2 0x32 +#define t3 0x33 +#define t4 0x34 +#define t5 0x35 +#define t6 0x36 +#define t7 0x37 +#define t8 0x38 +#define t9 0x39 +#define tDecPt 0x3A // '.' +#define tee 0x3B // 'e' +#define tOr 0x3C // '_or_' +#define tXor 0x3D +#define tColon 0x3E // ':' +#define tEnter 0x3F +#define tAnd 0x40 // '_and_' +#define tA 0x41 +#define tB 0x42 +#define tC 0x43 +#define tD 0x44 +#define tE 0x45 +#define tF 0x46 +#define tG 0x47 +#define tH 0x48 +#define tI 0x49 +#define tJ 0x4A +#define tK 0x4B +#define tL 0x4C +#define tM 0x4D +#define tN 0x4E +#define tO 0x4F +#define tP 0x50 +#define tQ 0x51 +#define tR 0x52 +#define tS 0x53 +#define tT 0x54 +#define tU 0x55 +#define tV 0x56 +#define tW 0x57 +#define tX 0x58 +#define tY 0x59 +#define tZ 0x5A +#define tTheta 0x5B +#define tProg 0x5F + +/* + * Mode settings tokens + */ +#define tRad 0x64 // 'Radian' +#define tDeg 0x65 // 'Degree' +#define tNormF 0x66 // 'Normal' +#define tSci 0x67 // 'Sci' +#define tEng 0x68 // 'Eng' +#define tFloat 0x69 // 'Float' +#define tFix 0x73 // 'Fix_' +#define tSplitOn 0x74 +#define tFullScreen 0x75 +#define tStndrd 0x76 // 'Func' +#define tParam 0x77 // 'Param' +#define tPolar 0x78 // 'Pol' +#define tSeqG 0x79 // ;79h +#define tAFillOn 0x7A // 'AUTO FILL ON' +#define tAFillOff 0x7B // 'AutoFill OFF' +#define tACalcOn 0x7C +#define tACalcOff 0x7D + +#define tEQ 0x6A // '=' +#define tLT 0x6B // '<' +#define tGT 0x6C // '>' +#define tLE 0x6D // LLE +#define tGE 0x6E // LGE +#define tNE 0x6F // LNE +#define tAdd 0x70 // '+' +#define tSub 0x71 // '-' +#define tAns 0x72 +#define tMul 0x82 // '*' +#define tDiv 0x83 // '/' + +#define tBoxIcon 0x7F +#define tCrossIcon 0x80 +#define tDotIcon 0x81 + +#define tTrace 0x84 // 'Trace' +#define tClDrw 0x85 // 'ClrDraw' +#define tZoomStd 0x86 // 'ZStd' +#define tZoomtrg 0x87 // 'Ztrg' +#define tZoomBox 0x88 // 'ZBOX' +#define tZoomIn 0x89 // 'ZIn' +#define tZoomOut 0x8A // 'ZOut' +#define tZoomSqr 0x8B // 'ZSqr' +#define tZoomInt 0x8C // 'ZInt' +#define tZoomPrev 0x8D // 'ZPrev' +#define tZoomDec 0x8E // 'ZDecm' +#define tZoomStat 0x8F // 'ZStat +#define tUsrZm 0x90 // 'ZRcl' +#define tPrtScrn 0x91 // 'PrtScrn' +#define tZoomSto 0x92 // 'ZSto' +#define tText 0x93 + +#define tnPr 0x94 // '_nPr_' +#define tnCr 0x95 // '_nCr_' + +// Graph Commands +#define tYOn 0x96 // 'FnOn_' +#define tYOff 0x97 // 'FnOff_' +#define tStPic 0x98 // 'StPic_' +#define tRcPic 0x99 // 'RcPic_' +#define tStoDB 0x9A // 'StGDB_' +#define tRclDB 0x9B // 'RcGDB_' +#define tLine 0x9C // 'Line' +#define tVert 0x9D // 'Vert_' +#define tPtOn 0x9E // 'PtOn' +#define tPtOff 0x9F // 'PtOff' +#define tPtChg 0xA0 // 'PtChg' +#define tPXOn 0xA1 +#define tPXOff 0xA2 +#define tPXChg 0xA3 +#define tShade 0xA4 // 'Shade' +#define tCircle 0xA5 // 'Circle' +#define tHorz 0xA6 // 'HORIZONTAL' +#define tTanLn 0xA7 // 'TanLn' +#define tDrInv 0xA8 // 'DrInv_' +#define tDrawF 0xA9 // 'DrawF_' + +// Functions with no argument +#define tRand 0xAB // 'rand' +#define tPi 0xAC // Lpi +#define tGetKey 0xAD // 'getKy' +#define tAPost 0xAE // ''' +#define tQuest 0xAF // '?' +#define tChs 0xB0 +#define tInt 0xB1 +#define tAbs 0xB2 +#define tDet 0xB3 +#define tIdent 0xB4 +#define tDim 0xB5 +#define tSum 0xB6 +#define tProd 0xB7 +#define tNot 0xB8 +#define tIPart 0xB9 +#define tFPart 0xBA + +// New 2 Byte Tokens +#define t2ByteTok 0xBB +#define tSqrt 0xBC +#define tCubRt 0xBD +#define tLn 0xBE +#define tExp 0xBF +#define tLog 0xC0 +#define tALog 0xC1 +#define tSin 0xC2 +#define tASin 0xC3 +#define tCos 0xC4 +#define tACos 0xC5 +#define tTan 0xC6 +#define tATan 0xC7 +#define tSinH 0xC8 +#define tASinH 0xC9 +#define tCoshH 0xCA +#define tACosH 0xCB +#define tTanH 0xCC +#define tATanH 0xCD + +// Some Programming Commands +#define tIf 0xCE // 'If_' +#define tThen 0xCF // 'Then_' +#define tElse 0xD0 // 'Else_' +#define tWhile 0xD1 // 'While_' +#define tRepeat 0xD2 // 'Repeat_' +#define tFor 0xD3 // 'For_' +#define tEnd 0xD4 // 'End' +#define tReturn 0xD5 // 'Return' +#define tLbl 0xD6 // 'Lbl_' +#define tGoto 0xD7 // 'Goto_' +#define tPause 0xD8 // 'Pause_' +#define tStop 0xD9 // 'Stop' +#define tISG 0xDA // 'IS>' +#define tDSL 0xDB // 'DS<' +#define tInput 0xDC // 'Input_' +#define tPrompt 0xDD // 'Prompt_' +#define tDisp 0xDE // 'Disp_' +#define tDispG 0xDF // 'DispG' +#define tOutput 0xE0 // 'Outpt' +#define tClLCD 0xE1 // 'ClLCD' +#define tConst 0xE2 // 'Fill' +#define tSortA 0xE3 // 'sortA_' +#define tSortD 0xE4 // 'sortD_' +#define tDispTab 0xE5 // 'Disp Table +#define tMenu 0xE6 // 'Menu' +#define tSendMBL 0xE7 // 'Send' +#define tGetMBL 0xE8 // 'Get' + +// Stat Plot Commands +#define tPlotOn 0xE9 // 'PLOTSON' +#define tPlotOff 0xEA // 'PLOTSOFF +#define tListName 0xEB // List Designator +#define tPlot1 0xEC +#define tPlot2 0xED +#define tPlot3 0xEE +#define tUnused01 0xEF // available? +#define tPower 0xF0 // '^' +#define tXRoot 0xF1 // LsupX,Lroot +#define tOneVar 0xF2 // 'OneVar_' +#define tTwoVar 0xF3 +#define tLR 0xF4 // 'LinR(A+BX)' +#define tLRExp 0xF5 // 'ExpR_' +#define tLRLn 0xF6 // 'LnR_' +#define tLRPwr 0xF7 // 'PwrR_' +#define tMedMed 0xF8 +#define tQuad 0xF9 +#define tClrLst 0xFA // 'Clear List' +#define tClrTbl 0xFB // 'Clear Table' +#define tHist 0xFC // 'Hist_' +#define txyLine 0xFD // 'xyline_' +#define tScatter 0xFE // 'Scatter_' +#define tLR1 0xFF // 'LINR(AX+B)' + +#define tGFormat 0x7E +// 2nd Half Of Graph Format Tokens +#define tSeq 0x00 // 'SeqG' +#define tSimulG 0x01 // 'SimulG' +#define tPolarG 0x02 // 'PolarGC' +#define tRectG 0x03 // 'RectGC' +#define tCoordOn 0x04 // 'CoordOn' +#define tCoordOff 0x05 // 'CoordOff' +#define tDrawLine 0x06 // 'DrawLine' +#define tDrawDot 0x07 // 'DrawDot' +#define tAxisOn 0x08 // 'AxesOn' +#define tAxisOff 0x09 // 'AxesOff' +#define tGridOn 0x0A // 'GridOn' +#define tGridOff 0x0B // 'GridOff' +#define tLblOn 0x0C // 'LabelOn' +#define tLblOff 0x0D // 'LabelOff' +#define tWebOn 0x0E // 'WebOn' +#define tWebOff 0x0F // 'WebOFF' +#define tuv 0x10 // U vs V +#define tvw 0x11 // V vs W +#define tuw 0x12 // U vs W + +#define tVarMat 0x5C +// 2nd Half Of User Matrix Tokens +#define tMatA 0x00 // MAT A +#define tMatB 0x01 // MAT B +#define tMatC 0x02 // MAT C +#define tMatD 0x03 // MAT D +#define tMatE 0x04 // MAT E +#define tMatF 0x05 // MAT F +#define tMatG 0x06 // MAT G +#define tMatH 0x07 // MAT H +#define tMatI 0x08 // MAT I +#define tMatJ 0x09 // MAT J + +#define tVarLst 0x5D +// 2nd Half Of User List Tokens +#define tL1 0x00 // LIST 1 +#define tL2 0x01 // LIST 2 +#define tL3 0x02 // LIST 3 +#define tL4 0x03 // LIST 4 +#define tL5 0x04 // LIST 5 +#define tL6 0x05 // LIST 6 + +#define tVarEqu 0x5E +// 2nd Half Of User Equation Tokens + +// Y Equations have bit 4 set +#define tY1 0x10 // Y1 +#define tY2 0x11 // Y2 +#define tY3 0x12 // Y3 +#define tY4 0x13 // Y4 +#define tY5 0x14 // Y5 +#define tY6 0x15 // Y6 +#define tY7 0x16 // Y7 +#define tY8 0x17 // Y8 +#define tY9 0x18 // Y9 +#define tY0 0x19 // Y0 + +// Param Equations Have Bit 5 Set +#define tX1T 0x20 // X1t +#define tY1T 0x21 // Y1t +#define tX2T 0x22 // X2t +#define tY2T 0x23 // Y2t +#define tX3T 0x24 // X3t +#define tY3T 0x25 // Y3t +#define tX4T 0x26 // X4t +#define tY4T 0x27 // Y4t +#define tX5T 0x28 // X5t +#define tY5T 0x29 // Y5t +#define tX6T 0x2A // X6t +#define tY6T 0x2B // Y6t + +// Polar Equations Have Bit 6 Set +#define tR1 0x40 // R1 +#define tR2 0x41 // R2 +#define tR3 0x42 // R3 +#define tR4 0x43 // R4 +#define tR5 0x44 // R5 +#define tR6 0x45 // R6 + +// Recursion Equations Have Bit 7 Set +#define tun 0x80 // Un +#define tvn 0x81 // Vn +#define twn 0x82 // Wn + +#define tVarPict 0x60 +// 2nd Half User Picture Tokens +#define tPic1 0x00 // PIC1 +#define tPic2 0x01 // PIC2 +#define tPic3 0x02 // PIC3 +#define tPic4 0x03 // PIC4 +#define tPic5 0x04 // PIC5 +#define tPic6 0x05 // PIC6 +#define tPic7 0x06 // PIC7 +#define tPic8 0x07 // PIC8 +#define tPic9 0x08 // PIC9 +#define tPic0 0x09 // PIC0 + +#define tVarGDB 0x61 +// 2nd Half User Graph Database Tokens +#define tGDB1 0x00 // GDB1 +#define tGDB2 0x01 // GDB2 +#define tGDB3 0x02 // GDB3 +#define tGDB4 0x03 // GDB4 +#define tGDB5 0x04 // GDB5 +#define tGDB6 0x05 // GDB6 +#define tGDB7 0x06 // GDB7 +#define tGDB8 0x07 // GDB8 +#define tGDB9 0x08 // GDB9 +#define tGDB0 0x09 // GDB0 + +#define tVarStrng 0xAA +// 2nd Half Of String Vars +#define tStr1 0x00 +#define tStr2 0x01 +#define tStr3 0x02 +#define tStr4 0x03 +#define tStr5 0x04 +#define tStr6 0x05 +#define tStr7 0x06 +#define tStr8 0x07 +#define tStr9 0x08 +#define tStr0 0x09 + +#define tVarOut 0x62 +// 2nd Half Of System Output Only Variables +#define tRegEq 0x01 // REGRESSION EQUATION +#define tStatN 0x02 // STATISTICS N +#define tXMean 0x03 // X MEAN +#define tSumX 0x04 // SUM(X) +#define tSumXSqr 0x05 // SUM(X^2) +#define tStdX 0x06 // STANDARD DEV X +#define tStdPX 0x07 // STANDARD DEV POP X +#define tMinX 0x08 // Min X VALUE +#define tMaxX 0x09 // Max X VALUE +#define tMinY 0x0A // Min Y VALUE +#define tMaxY 0x0B // Max Y VALUE +#define tYmean 0x0C // Y MEAN +#define tSumY 0x0D // SUM(Y) +#define tSumYSqr 0x0E // SUM(Y^2) +#define tStdY 0x0F // STANDARD DEV Y +#define tStdPY 0x10 // STANDARD DEV POP Y +#define tSumXY 0x11 // SUM(XY) +#define tCorr 0x12 // CORRELATION +#define tMedX 0x13 // MED(X) +#define tQ1 0x14 // 1ST QUADRANT OF X +#define tQ3 0x15 // 3RD QUADRANT OF X +#define tQuadA 0x16 // 1ST TERM OF QUAD POLY REG/ Y-INT +#define tQuadB 0x17 // 2ND TERM OF QUAD POLY REG/ SLOPE +#define tQuadC 0x18 // 3RD TERM OF QUAD POLY REG +#define tCubeD 0x19 // 4TH TERM OF CUBIC POLY REG +#define tQuartE 0x1A // 5TH TERM OF QUART POLY REG +#define tMedX1 0x1B // x1 FOR MED-MED +#define tMedX2 0x1C // x2 FOR MED-MED +#define tMedX3 0x1D // x3 FOR MED-MED +#define tMedY1 0x1E // y1 FOR MED-MED +#define tMedY2 0x1F // y2 FOR MED-MED +#define tMedY3 0x20 // y3 FOR MED-MED +#define tRecurn 0x21 // RECURSION N +#define tStatP 0x22 +#define tStatZ 0x23 +#define tStatT 0x24 +#define tStatChi 0x25 +#define tStatF 0x26 +#define tStatDF 0x27 +#define tStatPhat 0x28 +#define tStatPhat1 0x29 +#define tStatPhat2 0x2A +#define tStatMeanX1 0x2B +#define tStatStdX1 0x2C +#define tStatN1 0x2D +#define tStatMeanX2 0x2E +#define tStatStdX2 0x2F +#define tStatN2 0x30 +#define tStatStdXP 0x31 +#define tStatLower 0x32 +#define tStatUpper 0x33 +#define tStat_s 0x34 +#define tLRSqr 0x35 +#define tBRSqr 0x36 + +// These next tokens are only used to access the data +// They are display only and the user cannot access them at all +#define tF_DF 0x37 +#define tF_SS 0x38 +#define tF_MS 0x39 +#define tE_DF 0x3A +#define tE_SS 0x3B +#define tE_MS 0x3C + +#define tVarSys 0x63 +// 2nd Half Of System Input/Output Variables +#define tuXscl 0x00 +#define tuYscl 0x01 +#define tXscl 0x02 +#define tYscl 0x03 +#define tRecuru0 0x04 +#define tRecurv0 0x05 +#define tun1 0x06 +#define tvn1 0x07 +#define tuRecuru0 0x08 +#define tuRecurv0 0x09 +#define tXmin 0x0A +#define tXmax 0x0B +#define tYmin 0x0C +#define tYmax 0x0D +#define tTmin 0x0E +#define tTmax 0x0F +#define tThetaMin 0x10 +#define tThetaMax 0x11 +#define tuXmin 0x12 +#define tuXmax 0x13 +#define tuYmin 0x14 +#define tuYmax 0x15 +#define tuThetMin 0x16 +#define tuThetMax 0x17 +#define tuTmin 0x18 +#define tuTmax 0x19 +#define tTblMin 0x1A +#define tPlotStart 0x1B +#define tuPlotStart 0x1C +#define tnMax 0x1D +#define tunMax 0x1E +#define tnMin 0x1F +#define tunMin 0x20 +#define tTblStep 0x21 +#define tTStep 0x22 +#define tThetaStep 0x23 +#define tuTStep 0x24 +#define tuThetStep 0x25 +#define tDeltaX 0x26 +#define tDeltaY 0x27 +#define tXFact 0x28 +#define tYFact 0x29 +#define tTblInput 0x2A +#define tFinN 0x2B +#define tFinI 0x2C +#define tFinPV 0x2D +#define tFinPMT 0x2E +#define tFinFV 0x2F +#define tFinPY 0x30 +#define tFinCY 0x31 +#define tRecurw0 0x32 +#define tuRecurw0 0x33 +#define tPlotStep 0x34 +#define tuPlotStep 0x35 +#define tXres 0x36 +#define tuXres 0x37 +#define tRecuru02 0x38 +#define tuRecuru02 0x39 +#define tRecurv02 0x3C +#define tuRecurv02 0x3D +#define tRecurw02 0x3E +#define tuRecurw02 0x3F + +// 2nd Byte Of t2ByteTok Tokens +#define tFinNPV 0x00 +#define tFinIRR 0x01 +#define tFinBAL 0x02 +#define tFinPRN 0x03 +#define tFinINT 0x04 +#define tFinToNom 0x05 +#define tFinToEff 0x06 +#define tFinDBD 0x07 +#define tLCM 0x08 +#define tGCD 0x09 +#define tRandInt 0x0A +#define tRandBin 0x0B +#define tSubStrng 0x0C +#define tStdDev 0x0D +#define tVariance 0x0E +#define tInStrng 0x0F +#define tDNormal 0x10 +#define tInvNorm 0x11 +#define tDT 0x12 +#define tChI 0x13 +#define tDF 0x14 +#define tBINPDF 0x15 +#define tBINCDF 0x16 +#define tPOIPDF 0x17 +#define tPOICDF 0x18 +#define tGEOPDF 0x19 +#define tGEOCDF 0x1A +#define tNormalPDF 0x1B +#define tTPDF 0x1C +#define tChiPDF 0x1D +#define tFPDF 0x1E +#define tRandNorm 0x1F +#define tFinFPMT 0x20 +#define tFinFI 0x21 +#define tFinFPV 0x22 +#define tFinFN 0x23 +#define tFinFFV 0x24 +#define tConj 0x25 +#define tReal 0x26 +#define tImag 0x27 +#define tAngle 0x28 +#define tCumSum 0x29 +#define tExpr 0x2A +#define tLength 0x2B +#define tDeltaLst 0x2C +#define tRef 0x2D +#define tRRef 0x2E +#define tToRect 0x2F +#define tToPolar 0x30 +#define tConste 0x31 +#define tSinReg 0x32 +#define tLogistic 0x33 +#define tLinRegTTest 0x34 +#define tShadeNorm 0x35 +#define tShadeT 0x36 +#define tShadeChi 0x37 +#define tShadeF 0x38 +#define tMatToLst 0x39 +#define tLstToMat 0x3A +#define tZTest 0x3B +#define tTTest 0x3C +#define t2SampZTest 0x3D +#define t1PropZTest 0x3E +#define t2PropZTest 0x3F +#define tChiTest 0x40 +#define tZIntVal 0x41 +#define t2SampZInt 0x42 +#define t1PropZInt 0x43 +#define t2PropZInt 0x44 +#define tGraphStyle 0x45 +#define t2SampTTest 0x46 +#define t2SampFTest 0x47 +#define tTIntVal 0x48 +#define t2SampTInt 0x49 +#define tSetupLst 0x4A +#define tFinPMTend 0x4B +#define tFinPMTbeg 0x4C +#define tRealM 0x4D +#define tPolarM 0x4E +#define tRectM 0x4F +#define tExprOn 0x50 +#define tExprOff 0x51 +#define tClrAllLst 0x52 +#define tGetCalc 0x53 +#define tDelVar 0x54 +#define tEquToStrng 0x55 +#define tStrngToequ 0x56 +#define tDelLast 0x57 +#define tSelect 0x58 +#define tANOVA 0x59 +#define tModBox 0x5A +#define tNormProb 0x5B +#define tMGT 0x64 +#define tZFit 0x65 +#define tDiag_on 0x66 +#define tDiag_off 0x67 +#define tArchive 0x68 +#define tUnarchive 0x69 +#define tAsm 0x6A +#define tAsmComp 0x6B +#define tAsmPrgm 0x6C +#define tAsmCmp 0x6D +#define tLcapAAcute 0x6E +#define tLcapAGrave 0x6F +#define tLcapACaret 0x70 +#define tLcapADier 0x71 +#define tLaAcute 0x72 +#define tLaGrave 0x73 +#define tLaCaret 0x74 +#define tLaDier 0x75 +#define tLcapEAcute 0x76 +#define tLcapEGrave 0x77 +#define tLcapECaret 0x78 +#define tLcapEDier 0x79 +#define tLeAcute 0x7A +#define tLeGrave 0x7B +#define tLeCaret 0x7C +#define tLeDier 0x7D +#define tLcapIGrave 0x7F +#define tLcapICaret 0x80 +#define tLcapIDier 0x81 +#define tLiAcute 0x82 +#define tLiGrave 0x83 +#define tLiCaret 0x84 +#define tLiDier 0x85 +#define tLcapOAcute 0x86 +#define tLcapOGrave 0x87 +#define tLcapOCaret 0x88 +#define tLcapODier 0x89 +#define tLoAcute 0x8A +#define tLoGrave 0x8B +#define tLoCaret 0x8C +#define tLoDier 0x8D +#define tLcapUAcute 0x8E +#define tLcapUGrave 0x8F +#define tLcapUCaret 0x90 +#define tLcapUDier 0x91 +#define tLuAcute 0x92 +#define tLuGrave 0x93 +#define tLuCaret 0x94 +#define tLuDier 0x95 +#define tLcapCCed 0x96 +#define tLcCed 0x97 +#define tLcapNTilde 0x98 +#define tLnTilde 0x99 +#define tLaccent 0x9A +#define tLgrave 0x9B +#define tLdieresis 0x9C +#define tLquesDown 0x9D +#define tLexclamDown 0x9E +#define tLalpha 0x9F +#define tLbeta 0xA0 +#define tLgamma 0xA1 +#define tLcapDelta 0xA2 +#define tLdelta 0xA3 +#define tLepsilon 0xA4 +#define tLlambda 0xA5 +#define tLmu 0xA6 +#define tLpi 0xA7 +#define tLrho 0xA8 +#define tLcapSigma 0xA9 +#define tLphi 0xAB +#define tLcapOmega 0xAC +#define tLphat 0xAD +#define tLchi 0xAE +#define tLstatF 0xAF +#define tLa 0xB0 +#define tLb 0xB1 +#define tLc 0xB2 +#define tLd 0xB3 +#define tLsmalle 0xB4 +#define tLf 0xB5 +#define tLsmallg 0xB6 +#define tLh 0xB7 +#define tLi 0xB8 +#define tLj 0xB9 +#define tLk 0xBA +#define tLl 0xBC +#define tLm 0xBD +#define tLsmalln 0xBE +#define tLo 0xBF +#define tLp 0xC0 +#define tLq 0xC1 +#define tLsmallr 0xC2 +#define tLs 0xC3 +#define tLsmallt 0xC4 +#define tLu 0xC5 +#define tLv 0xC6 +#define tLw 0xC7 +#define tLx 0xC8 +#define tLy 0xC9 +#define tLz 0xCA +#define tLsigma 0xCB +#define tLtau 0xCC +#define tLcapIAcute 0xCD +#define tGarbageCollect 0xCE + +#define tExtTok 0xEF +// 2nd Byte Of tExtTok Tokens +#define tSetDate 0x00 +#define tSetTime 0x01 +#define tCheckTmr 0x02 +#define tSetDtFmt 0x03 +#define tSetTmFmt 0x04 +#define tTimeCnv 0x05 +#define tDayOfWk 0x06 +#define tGetDtStr 0x07 +#define tGetTmStr 0x08 +#define tGetDate 0x09 +#define tGetTime 0x0A +#define tStartTmr 0x0B +#define tGtDtFmt 0x0C +#define tGetTmFmt 0x0D +#define tIsClockOn 0x0E +#define tClockOff 0x0F +#define tClockOn 0x10 +#define tOpenLib 0x11 +#define tExecLib 0x12 +#define tInvT 0x13 +#define tChiSquaredTest 0x14 +#define tLinRegTInt 0x15 +#define tManualFit 0x16 +#define tZQuadrant 0x17 +#define tZFracHalf 0x18 +#define tZFracThird 0x19 +#define tZFracFourth 0x1A +#define tZFracFifth 0x1B +#define tZFracEighth 0x1C +#define tZFracTenth 0x1D +#define tFracSlash 0x2E +#define tFracMixedNum 0x2F +#define tSwapImProper 0x30 +#define tSwapFracDec 0x31 +#define tRemainder 0x32 +#define tSummationSigma 0x33 +#define tLogBase 0x34 +#define tRandIntNoRep 0x35 +#define tMathPrint 0x36 +#define tClassic 0x38 +#define tAutoAnswer 0x3B +#define tDecAnswer 0x3C +#define tFracAnswer 0x3D +#define tBlue 0x41 +#define tRed 0x42 +#define tBlack 0x43 +#define tMagenta 0x44 +#define tGreen 0x45 +#define tOrange 0x46 +#define tBrown 0x47 +#define tNavy 0x48 +#define tLtBlue 0x49 +#define tYellow 0x4A +#define tWhite 0x4B +#define tLtGray 0x4C +#define tMedGray 0x4D +#define tGray 0x4E +#define tDarkGray 0x4F +#define tGraphColor 0x65 +#define tTextColor 0x67 +#define tBackgroundOn 0x5B +#define tBackgroundOff 0x64 +#define tThin 0x74 +#define tBorderColor 0x6C +#define tAsm84CPrgm 0x68 +#define tAsm84CCmp 0x69 +#define tAsm84CeCmp 0x7B +#define tAsm84CePrgm 0x7A + +/* 2 byte extended tokens (tExtTok) present in OS 5.2 and above */ +#define tSEQn 0x8F /* 'SEQ(n)' */ +#define tSEQn1 0x90 /* 'SEQ(n+1)' */ +#define tSEQn2 0x91 /* 'SEQ(n+2)' */ +#define tLEFT 0x92 /* 'LEFT' */ +#define tCENTER 0x93 /* 'CENTER' */ +#define tRIGHT 0x94 /* 'RIGHT' */ +#define tInvBinom 0x95 /* 'invBinom(' */ +#define tWait 0x96 /* 'Wait_' */ +#define tToString 0x97 /* 'toString(' */ +#define tEval 0x98 /* 'eval(' */ + +/* + * --- TIOS System error codes --- + */ +#define OS_E_EDIT (1<<7) +#define OS_E_MASK (0x7F) +#define OS_E_OVERFLOW (1+OS_E_EDIT) +#define OS_E_DIVBY0 (2+OS_E_EDIT) +#define OS_E_SINGULARMAT (3+OS_E_EDIT) +#define OS_E_DOMAIN (4+OS_E_EDIT) +#define OS_E_INCREMENT (5+OS_E_EDIT) +#define OS_E_BREAK (6+OS_E_EDIT) +#define OS_E_NONREAL (7+OS_E_EDIT) +#define OS_E_SYNTAX (8+OS_E_EDIT) +#define OS_E_DATATYPE (9+OS_E_EDIT) +#define OS_E_ARGUMENT (10+OS_E_EDIT) +#define OS_E_DIMMISMATCH (11+OS_E_EDIT) +#define OS_E_DIMENSION (12+OS_E_EDIT) +#define OS_E_UNDEFINED (13+OS_E_EDIT) +#define OS_E_MEMORY (14+OS_E_EDIT) +#define OS_E_INVALID (15+OS_E_EDIT) +#define OS_E_ILLEGALNEST (16+OS_E_EDIT) +#define OS_E_BOUND (17+OS_E_EDIT) +#define OS_E_GRAPHRANGE (18+OS_E_EDIT) +#define OS_E_ZOOM (19+OS_E_EDIT) +#define OS_E_LABEL (20) +#define OS_E_STAT (21) +#define OS_E_SOLVER (22+OS_E_EDIT) +#define OS_E_SINGULARITY (23+OS_E_EDIT) +#define OS_E_SIGNCHANGE (24+OS_E_EDIT) +#define OS_E_ITERATIONS (25+OS_E_EDIT) +#define OS_E_BADGUESS (26+OS_E_EDIT) +#define OS_E_STATPLOT (27) +#define OS_E_TOLTOOSMALL (28+OS_E_EDIT) +#define OS_E_RESERVED (29+OS_E_EDIT) +#define OS_E_MODE (30+OS_E_EDIT) +#define OS_E_LNKERR (31+OS_E_EDIT) +#define OS_E_LNKMEMERR (32+OS_E_EDIT) +#define OS_E_LNKTRANSERR (33+OS_E_EDIT) +#define OS_E_LNKDUPERR (34+OS_E_EDIT) +#define OS_E_LNKMEMFULL (35+OS_E_EDIT) +#define OS_E_UNKNOWN (36+OS_E_EDIT) +#define OS_E_SCALE (37+OS_E_EDIT) +#define OS_E_IDNOTFOUND (38) +#define OS_E_NOMODE (39+OS_E_EDIT) +#define OS_E_VALIDATION (40) +#define OS_E_LENGTH (41+OS_E_EDIT) +#define OS_E_APPLICATION (42+OS_E_EDIT) +#define OS_E_APPERR1 (43+OS_E_EDIT) +#define OS_E_APPERR2 (44+OS_E_EDIT) +#define OS_E_EXPIREDAPP (45) +#define OS_E_BADADD (46) +#define OS_E_ARCHIVED (47+OS_E_EDIT) +#define OS_E_VERSION (48) +#define OS_E_ARCHFULL (49) +#define OS_E_VARIABLE (50+OS_E_EDIT) +#define OS_E_DUPLICATE (51+OS_E_EDIT) + +/* + * --- TI-OS os_GetCSC Scan Code Return Values --- + */ +#define sk_Down 0x01 +#define sk_Left 0x02 +#define sk_Right 0x03 +#define sk_Up 0x04 +#define sk_Enter 0x09 +#define sk_2nd 0x36 +#define sk_Clear 0x0F +#define sk_Alpha 0x30 +#define sk_Add 0x0A +#define sk_Sub 0x0B +#define sk_Mul 0x0C +#define sk_Div 0x0D +#define sk_Graph 0x31 +#define sk_Trace 0x32 +#define sk_Zoom 0x33 +#define sk_Window 0x34 +#define sk_Yequ 0x35 +#define sk_Mode 0x37 +#define sk_Del 0x38 +#define sk_Store 0x2A +#define sk_Ln 0x2B +#define sk_Log 0x2C +#define sk_Square 0x2D +#define sk_Recip 0x2E +#define sk_Math 0x2F +#define sk_0 0x21 +#define sk_1 0x22 +#define sk_4 0x23 +#define sk_7 0x24 +#define sk_2 0x1A +#define sk_5 0x1B +#define sk_8 0x1C +#define sk_3 0x12 +#define sk_6 0x13 +#define sk_9 0x14 +#define sk_Comma 0x25 +#define sk_Sin 0x26 +#define sk_Apps 0x27 +#define sk_GraphVar 0x28 +#define sk_DecPnt 0x19 +#define sk_LParen 0x1D +#define sk_Cos 0x1E +#define sk_Prgm 0x1F +#define sk_Stat 0x20 +#define sk_Chs 0x11 +#define sk_RParen 0x15 +#define sk_Tan 0x16 +#define sk_Vars 0x17 +#define sk_Power 0x0E + +/* Compatibility defines */ +#define prgm_CleanUp() +#define pgrm_CleanUp() +#define memset_fast memset + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/frontends/calculator/CEdev/include/usb.h b/frontends/calculator/CEdev/include/usb.h new file mode 100644 index 0000000..35d95d1 --- /dev/null +++ b/frontends/calculator/CEdev/include/usb.h @@ -0,0 +1,52 @@ +/** + * @file + * @authors Matt "MateoConLechuga" Waltz + * @authors Jacob "jacobly" Young + * @brief USB communication routines + */ + +#ifndef H_USB +#define H_USB + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @returns True if the usb bus line is powered, i.e. connected to a another calc + */ +bool usb_BusPowered(void); + +/** + * @returns True if the usb is self powered + */ +bool usb_SelfPowered(void); + +/** + * Resets the usb controller chip + */ +void usb_ResetChip(void); + +/** + * Disables the usb timer interrupt (timer 3) + */ +void usb_DisableTimers(void); + +/** + * Enables the usb timer interrupt (timer 3) + */ +void usb_EnableTimers(void); + +/** + * Resets the usb timer interrupt (timer 3) + */ +void usb_ResetTimers(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/frontends/calculator/CEdev/lib/ccleanup.src b/frontends/calculator/CEdev/lib/ccleanup.src new file mode 100644 index 0000000..6479ea0 --- /dev/null +++ b/frontends/calculator/CEdev/lib/ccleanup.src @@ -0,0 +1,14 @@ +;------------------------------------------------------------------------------- +; Standard C Cleanup module +;------------------------------------------------------------------------------- + .def __ccleanup + + segment cleanup + .assume adl=1 + +__ccleanup: + res 4,(iy+9) ; onInterrupt,(iy+onFlags) + set 0,(iy+3) ; graphDraw,(iy+graphFlags) + call 020808h ; _ClrLCDFull + call 020828h ; _HomeUp + call 021A3Ch ; _DrawStatusBar diff --git a/frontends/calculator/CEdev/lib/cstartup.src b/frontends/calculator/CEdev/lib/cstartup.src new file mode 100644 index 0000000..816a138 --- /dev/null +++ b/frontends/calculator/CEdev/lib/cstartup.src @@ -0,0 +1,75 @@ +;------------------------------------------------------------------------------- +; Standard CE startup module definitions and references +;------------------------------------------------------------------------------- + + .ref _main + .ref __low_bss + .ref __len_bss + .ref _os_DisableHomeTextBuffer + .ref _os_EnableHomeTextBuffer + + .def _errno + .def _init + .def _exit + .def __exit + .def __exitsp + .def __errsp + + .assume adl=1 + +_errno equ 0D008DCh + +;------------------------------------------------------------------------------- + segment header + db 0efh + db 07bh + db 0 ; Magic byte recognition for C programs +_init: + +;------------------------------------------------------------------------------- + segment startup + + call 0020848h ; _RunInicOff, assumes iy = flags + call 00004F4h ; _usb_DisableTimer + di ; disable interrupts + call _os_DisableHomeTextBuffer + ld hl,0E00305h + push hl ; save flash wait state control port + ld a,(hl) + push af ; save flash wait states + ld (hl),h ; set flash wait states to 3; 1 was definitely + ; too low for some calcs, 2 is untested + push iy ; save iy (flags) + ld (__exitsp+1),sp ; save sp for exiting + ld bc,__len_bss + ld hl,__low_bss + push bc + push hl + call 0000B0h ; __memclear, clear BSS + ; args will get removed from stack on exit + call _main +__exit: +__exitsp: +__errsp: + ld sp,0 + pop iy ; iy = flags + pop af ; a = original flash wait states + ex (sp),hl ; hl = flash wait state control port, + ; save exit code + ld (hl),a ; restore flash wait states + call 00004F0h ; _usb_ResetTimer + call _os_EnableHomeTextBuffer + +;------------------------------------------------------------------------------- + segment exit + + pop hl ; hl = exit code + ret + +_exit: + pop hl + pop hl + jr __exit + +;------------------------------------------------------------------------------- + segment code diff --git a/frontends/calculator/CEdev/lib/fileio/fclose.src b/frontends/calculator/CEdev/lib/fileio/fclose.src new file mode 100644 index 0000000..c54496f --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fclose.src @@ -0,0 +1,53 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FCLOSE.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 int fclose(FILE *stream) { +_fclose: + LD HL,-1 + CALL __frameset +; 5 ti_var_t slot = stream->slot; + LD IY,(IX+6) + LD A,(IY+0) + LD (IX+-1),A +; 6 __stdio_files[slot].slot = 0; + UEXT HL + LD L,A + LD BC,___stdio_files + ADD HL,BC + LD IY,HL + LD (IY+0),0 +; 7 return ti_Close(slot); + LD C,(IX+-1) + LD B,0 + PUSH BC + CALL _ti_Close + POP BC +; 8 } + LD SP,IX + POP IX + RET + + +;**************************** _fclose *************************** +;Name Addr/Register Size Type +;_ti_Close IMPORT ----- function +;___stdio_files IMPORT 5 variable +;slot IX-1 1 variable +;stream IX+6 3 parameter + + +; Stack Frame Size: 10 (bytes) +; Spill Code: 0 (instruction) + + + XREF ___stdio_files:ROM + XREF _ti_Close:ROM + XREF __frameset:ROM + XDEF _fclose + END diff --git a/frontends/calculator/CEdev/lib/fileio/feof.src b/frontends/calculator/CEdev/lib/fileio/feof.src new file mode 100644 index 0000000..595b256 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/feof.src @@ -0,0 +1,88 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FEOF.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 int feof(FILE *stream) { +_feof: + LD HL,-7 + CALL __frameset +; 5 char a; +; 6 int sz; +; 7 +; 8 sz = fread(&a, 1, 1, stream); + LD BC,(IX+6) + PUSH BC + LD BC,1 + PUSH BC + PUSH BC + PEA IX+-1 + CALL _fread + POP BC + POP BC + POP BC + POP BC +; 9 fseek(stream, -sz, SEEK_CUR); + LD BC,HL + CALL __itol + LD (IX+-7),HL + LD HL,BC + LD E,A + CALL __lneg + LD C,E + LD DE,1 + PUSH DE + LD B,0 + PUSH BC + PUSH HL + LD BC,(IX+6) + PUSH BC + CALL _fseek + POP BC + POP BC + POP BC + POP BC +; 10 return !sz; + LD HL,(IX+-7) + CALL __icmpzero + JR NZ,L_1 +; 11 } + LD BC,1 + LD (IX+-4),BC + JR L_2 +L_1: + LD BC,0 + LD (IX+-4),BC +L_2: + LD HL,(IX+-4) + LD SP,IX + POP IX + RET + + +;**************************** _feof *************************** +;Name Addr/Register Size Type +;_fseek IMPORT ----- function +;_fread IMPORT ----- function +;sz IX-7 3 variable +;temp3 IX-4 3 variable +;a IX-1 1 variable +;stream IX+6 3 parameter + + +; Stack Frame Size: 16 (bytes) +; Spill Code: 0 (instruction) + + + XREF _fseek:ROM + XREF _fread:ROM + XREF __lneg:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _feof + END diff --git a/frontends/calculator/CEdev/lib/fileio/fgetc.src b/frontends/calculator/CEdev/lib/fileio/fgetc.src new file mode 100644 index 0000000..098b5ee --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fgetc.src @@ -0,0 +1,39 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FGETC.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 int fgetc(FILE *stream) { +_fgetc: + CALL __frameset0 +; 5 return ti_GetC(stream->slot); + LD IY,(IX+6) + LD C,(IY+0) + LD B,0 + PUSH BC + CALL _ti_GetC + POP BC +; 6 } + LD SP,IX + POP IX + RET + + +;**************************** _fgetc *************************** +;Name Addr/Register Size Type +;_ti_GetC IMPORT ----- function +;stream IX+6 3 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_GetC:ROM + XREF __frameset0:ROM + XDEF _fgetc + END diff --git a/frontends/calculator/CEdev/lib/fileio/fgets.src b/frontends/calculator/CEdev/lib/fileio/fgets.src new file mode 100644 index 0000000..22e9fbf --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fgets.src @@ -0,0 +1,121 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FGETS.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 char *fgets(char *str, int num, FILE *stream) { +_fgets: + LD HL,-9 + CALL __frameset +; 5 int c; +; 6 char *p = str; + LD BC,(IX+6) + LD (IX+-3),BC +; 7 +; 8 if (num == 1) { + LD HL,(IX+9) + LD BC,1 + OR A,A + SBC HL,BC + JR NZ,L_8 +; 9 *p = 0; + LD HL,(IX+6) + LD (HL),0 +; 10 return str; + LD HL,(IX+6) + JR L_13 +; 11 } +; 12 +; 13 for (; num > 1; num--) { +L_6: +; 14 if ((c = fgetc(stream)) == EOF) { + LD BC,(IX+12) + PUSH BC + CALL _fgetc + POP BC + LD (IX+-6),HL + LD BC,16777215 + OR A,A + SBC HL,BC + JR Z,L_11 +; 15 break; +; 16 } +; 17 *p++ = c; + LD BC,(IX+-3) + LD (IX+-9),BC + LD A,(IX+-6) + LD HL,BC + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 18 if (c == '\n') { + LD HL,(IX+-6) + OR A,A + LD BC,10 + SBC HL,BC + JR Z,L_11 + LD BC,(IX+9) + DEC BC + LD (IX+9),BC +; 19 break; +; 20 } +; 21 } +L_8: + LD BC,(IX+9) + LD HL,1 + OR A,A + SBC HL,BC + CALL __setflag + JP M,L_6 +L_11: +; 22 +; 23 if (p == str) { + LD BC,(IX+6) + LD HL,(IX+-3) + OR A,A + SBC HL,BC + JR NZ,L_12 + OR A,A +; 24 return NULL; + SBC HL,HL + JR L_13 +; 25 } +L_12: +; 26 +; 27 *p = 0; + LD HL,(IX+-3) + LD (HL),0 +; 28 +; 29 return str; + LD HL,(IX+6) +; 30 } +L_13: + LD SP,IX + POP IX + RET + + +;**************************** _fgets *************************** +;Name Addr/Register Size Type +;_fgetc IMPORT ----- function +;c IX-6 3 variable +;p IX-3 3 variable +;stream IX+12 3 parameter +;num IX+9 3 parameter +;str IX+6 3 parameter + + +; Stack Frame Size: 24 (bytes) +; Spill Code: 0 (instruction) + + + XREF _fgetc:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XDEF _fgets + END diff --git a/frontends/calculator/CEdev/lib/fileio/files.src b/frontends/calculator/CEdev/lib/fileio/files.src new file mode 100644 index 0000000..ccfec99 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/files.src @@ -0,0 +1,13 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FILES.C" + .assume ADL=1 + SEGMENT BSS +___stdio_files: + DS 5 + XDEF ___stdio_files +; 1 #include +; 2 +; 3 FILE __stdio_files[FOPEN_MAX]; + END diff --git a/frontends/calculator/CEdev/lib/fileio/fopen.src b/frontends/calculator/CEdev/lib/fileio/fopen.src new file mode 100644 index 0000000..edf6196 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fopen.src @@ -0,0 +1,71 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FOPEN.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 FILE *fopen(const char *filename, const char *mode) { +_fopen: + LD HL,-1 + CALL __frameset +; 5 ti_var_t f = ti_Open(filename, mode); + LD BC,(IX+9) + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _ti_Open + POP BC + POP BC + LD (IX+-1),A +; 6 if (!f) { + OR A,A + JR NZ,L_1 + OR A,A +; 7 return NULL; + SBC HL,HL + JR L_2 +; 8 } +L_1: +; 9 __stdio_files[(unsigned char)f].slot = f; + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,___stdio_files + ADD HL,BC + LD IY,HL + LD A,(IX+-1) + LD (IY+0),A +; 10 +; 11 return &__stdio_files[f]; + LD A,(IX+-1) + UEXT HL + LD L,A + ADD HL,BC +; 12 } +L_2: + LD SP,IX + POP IX + RET + + +;**************************** _fopen *************************** +;Name Addr/Register Size Type +;___stdio_files IMPORT 5 variable +;_ti_Open IMPORT ----- function +;f IX-1 1 variable +;mode IX+9 3 parameter +;filename IX+6 3 parameter + + +; Stack Frame Size: 13 (bytes) +; Spill Code: 0 (instruction) + + + XREF ___stdio_files:ROM + XREF _ti_Open:ROM + XREF __frameset:ROM + XDEF _fopen + END diff --git a/frontends/calculator/CEdev/lib/fileio/fputc.src b/frontends/calculator/CEdev/lib/fileio/fputc.src new file mode 100644 index 0000000..0f3a059 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fputc.src @@ -0,0 +1,43 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FPUTC.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 int fputc(int c, FILE *stream) { +_fputc: + CALL __frameset0 +; 5 return ti_PutC((char)c, stream->slot); + LD IY,(IX+9) + LD C,(IY+0) + LD B,0 + PUSH BC + LD C,(IX+6) + PUSH BC + CALL _ti_PutC + POP BC + POP BC +; 6 } + LD SP,IX + POP IX + RET + + +;**************************** _fputc *************************** +;Name Addr/Register Size Type +;_ti_PutC IMPORT ----- function +;stream IX+9 3 parameter +;c IX+6 3 parameter + + +; Stack Frame Size: 12 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_PutC:ROM + XREF __frameset0:ROM + XDEF _fputc + END diff --git a/frontends/calculator/CEdev/lib/fileio/fputs.src b/frontends/calculator/CEdev/lib/fileio/fputs.src new file mode 100644 index 0000000..fb82f47 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fputs.src @@ -0,0 +1,101 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FPUTS.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 int fputs(const char *str, FILE *stream) { +_fputs: + LD HL,-5 + CALL __frameset +; 5 unsigned char slot = stream->slot; + LD IY,(IX+9) + LD A,(IY+0) + LD (IX+-1),A +; 6 unsigned int i = 0; + LD BC,0 + LD (IX+-4),BC +; 7 char c; +; 8 +; 9 while((c = str[i])) { + JR L_3 +L_4: +; 10 if(ti_PutC(c, slot) == EOF) { + LD C,(IX+-1) + LD B,0 + PUSH BC + LD C,(IX+-5) + PUSH BC + CALL _ti_PutC + POP BC + POP BC + LD BC,16777215 + OR A,A + SBC HL,BC + JR NZ,L_2 +; 11 return EOF; + LD HL,16777215 + JR L_8 +; 12 } +L_2: +; 13 i++; + LD BC,(IX+-4) + INC BC + LD (IX+-4),BC +; 14 } +L_3: + LD BC,(IX+-4) + LD HL,(IX+6) + ADD HL,BC + LD A,(HL) + LD (IX+-5),A + OR A,A + JR NZ,L_4 +; 15 if(ti_PutC('\n', slot) == EOF) { + LD C,(IX+-1) + LD B,0 + PUSH BC + LD BC,10 + PUSH BC + CALL _ti_PutC + POP BC + POP BC + LD BC,16777215 + OR A,A + SBC HL,BC + JR NZ,L_7 +; 16 return EOF; + LD HL,16777215 + JR L_8 +; 17 } +L_7: +; 18 return 1; + LD HL,1 +; 19 } +L_8: + LD SP,IX + POP IX + RET + + +;**************************** _fputs *************************** +;Name Addr/Register Size Type +;_ti_PutC IMPORT ----- function +;c IX-5 1 variable +;i IX-4 3 variable +;slot IX-1 1 variable +;stream IX+9 3 parameter +;str IX+6 3 parameter + + +; Stack Frame Size: 17 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_PutC:ROM + XREF __frameset:ROM + XDEF _fputs + END diff --git a/frontends/calculator/CEdev/lib/fileio/fread.src b/frontends/calculator/CEdev/lib/fileio/fread.src new file mode 100644 index 0000000..4e93f42 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fread.src @@ -0,0 +1,51 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FREAD.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 size_t fread(void *ptr, size_t size, size_t count, FILE *stream) { +_fread: + CALL __frameset0 +; 5 return ti_Read(ptr, size, count, stream->slot); + LD IY,(IX+15) + LD C,(IY+0) + LD B,0 + PUSH BC + LD BC,(IX+12) + PUSH BC + LD BC,(IX+9) + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _ti_Read + POP BC + POP BC + POP BC + POP BC +; 6 } + LD SP,IX + POP IX + RET + + +;**************************** _fread *************************** +;Name Addr/Register Size Type +;_ti_Read IMPORT ----- function +;stream IX+15 3 parameter +;count IX+12 3 parameter +;size IX+9 3 parameter +;ptr IX+6 3 parameter + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_Read:ROM + XREF __frameset0:ROM + XDEF _fread + END diff --git a/frontends/calculator/CEdev/lib/fileio/fseek.src b/frontends/calculator/CEdev/lib/fileio/fseek.src new file mode 100644 index 0000000..b6d0b33 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fseek.src @@ -0,0 +1,47 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FSEEK.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 int fseek(FILE *stream, long int offset, int origin) { +_fseek: + CALL __frameset0 +; 5 return ti_Seek((int)offset, origin, stream->slot); + LD IY,(IX+6) + LD C,(IY+0) + LD B,0 + PUSH BC + LD BC,(IX+15) + PUSH BC + LD BC,(IX+9) + PUSH BC + CALL _ti_Seek + POP BC + POP BC + POP BC +; 6 } + LD SP,IX + POP IX + RET + + +;**************************** _fseek *************************** +;Name Addr/Register Size Type +;_ti_Seek IMPORT ----- function +;origin IX+15 3 parameter +;offset IX+9 4 parameter +;stream IX+6 3 parameter + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_Seek:ROM + XREF __frameset0:ROM + XDEF _fseek + END diff --git a/frontends/calculator/CEdev/lib/fileio/ftell.src b/frontends/calculator/CEdev/lib/fileio/ftell.src new file mode 100644 index 0000000..2f77607 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/ftell.src @@ -0,0 +1,43 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FTELL.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 long int ftell(FILE *stream) { +_ftell: + CALL __frameset0 +; 5 return (long int)ti_Tell(stream->slot); + LD IY,(IX+6) + LD C,(IY+0) + LD B,0 + PUSH BC + CALL _ti_Tell + POP BC + LD BC,HL + CALL __stoiu + LD E,0 +; 6 } + LD SP,IX + POP IX + RET + + +;**************************** _ftell *************************** +;Name Addr/Register Size Type +;_ti_Tell IMPORT ----- function +;stream IX+6 3 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_Tell:ROM + XREF __stoiu:ROM + XREF __frameset0:ROM + XDEF _ftell + END diff --git a/frontends/calculator/CEdev/lib/fileio/fwrite.src b/frontends/calculator/CEdev/lib/fileio/fwrite.src new file mode 100644 index 0000000..7432016 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fwrite.src @@ -0,0 +1,51 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FWRITE.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream) { +_fwrite: + CALL __frameset0 +; 5 return ti_Write(ptr, size, count, stream->slot); + LD IY,(IX+15) + LD C,(IY+0) + LD B,0 + PUSH BC + LD BC,(IX+12) + PUSH BC + LD BC,(IX+9) + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _ti_Write + POP BC + POP BC + POP BC + POP BC +; 6 } + LD SP,IX + POP IX + RET + + +;**************************** _fwrite *************************** +;Name Addr/Register Size Type +;_ti_Write IMPORT ----- function +;stream IX+15 3 parameter +;count IX+12 3 parameter +;size IX+9 3 parameter +;ptr IX+6 3 parameter + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_Write:ROM + XREF __frameset0:ROM + XDEF _fwrite + END diff --git a/frontends/calculator/CEdev/lib/fileio/remove.src b/frontends/calculator/CEdev/lib/fileio/remove.src new file mode 100644 index 0000000..7fb3763 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/remove.src @@ -0,0 +1,50 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\REMOVE.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 int remove(const char *filename) { +_remove: + LD HL,-3 + CALL __frameset +; 5 return !ti_Delete(filename); + LD BC,(IX+6) + PUSH BC + CALL _ti_Delete + POP BC + CALL __icmpzero + JR NZ,L_1 +; 6 } + LD BC,1 + LD (IX+-3),BC + JR L_2 +L_1: + LD BC,0 + LD (IX+-3),BC +L_2: + LD HL,(IX+-3) + LD SP,IX + POP IX + RET + + +;**************************** _remove *************************** +;Name Addr/Register Size Type +;_ti_Delete IMPORT ----- function +;temp3 IX-3 3 variable +;filename IX+6 3 parameter + + +; Stack Frame Size: 12 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_Delete:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _remove + END diff --git a/frontends/calculator/CEdev/lib/libheader.src b/frontends/calculator/CEdev/lib/libheader.src new file mode 100644 index 0000000..bfd9183 --- /dev/null +++ b/frontends/calculator/CEdev/lib/libheader.src @@ -0,0 +1,55 @@ +;------------------------------------------------------------------------------- +; Libload launcher for shared libraries +;------------------------------------------------------------------------------- + .def __findlibload + + segment launcher + .assume adl=1 + +__findlibload: + call 020628h ; _pushop1 to save running program name + jr __tryfind +__inram: + call 021448h ; _arc_unarc +__tryfind: + ld hl,__libloadname-1 + call 020320h ; _mov9toop1 + ld a,015h ; appvarobj + ld (0D005F8h),a ; op1 + call 02050Ch ; _chkfindsym + jr c,__notfound + call 021F98h ; _chkinram + jr z,__inram ; if in ram, archive LibLoad and search again + ld hl,9+1+__libloadnamelen+2 + add hl,de + push hl + call 0205C4h ; _popop1 to restore running program name + pop hl ; start of loader (required to be in hl) + ld de,__relocationstart ; start of relocation data + jp (hl) ; jump to the loader -- it should take care of everything else +__notfound: + call 0205C4h ; _popop1 to restore running program name + call 020814h ; _clrscrn + call 020828h ; _homeup + ld hl,__missingappvar + call 0207C0h ; _puts + call 0207F0h ; _newline + ld hl,__webaddress + call 0207C0h ; _puts + jp 020D8Ch ; _getkey + + segment libs +__relocationstart: ; relocation data will be placed here + ;... + ;... + ;... + + segment data +__missingappvar: + db "Need " +__libloadname: + db "LibLoad" +__libloadnamelen := $-__libloadname + db 0 +__webaddress: + db "http://tiny.cc/clibs",0 diff --git a/frontends/calculator/CEdev/lib/libload.lib b/frontends/calculator/CEdev/lib/libload.lib new file mode 100644 index 0000000..16549cd --- /dev/null +++ b/frontends/calculator/CEdev/lib/libload.lib @@ -0,0 +1 @@ +library "LibLoad", 30 diff --git a/frontends/calculator/CEdev/lib/libload/fileioc.lib b/frontends/calculator/CEdev/lib/libload/fileioc.lib new file mode 100644 index 0000000..73b0a24 --- /dev/null +++ b/frontends/calculator/CEdev/lib/libload/fileioc.lib @@ -0,0 +1,35 @@ +library "FILEIOC", 4 + export ti_CloseAll ; 2 + export ti_Open ; 4 + export ti_OpenVar ; 6 + export ti_Close ; 8 + export ti_Write ; 10 + export ti_Read ; 12 + export ti_GetC ; 14 + export ti_PutC ; 16 + export ti_Delete ; 18 + export ti_DeleteVar ; 20 + export ti_Seek ; 22 + export ti_Resize ; 24 + export ti_IsArchived ; 26 + export ti_SetArchiveStatus ; 28 + export ti_Tell ; 30 + export ti_Rewind ; 32 + export ti_GetSize ; 34 + export ti_GetTokenString ; 36 + export ti_GetDataPtr ; 38 + export ti_Detect ; 40 + export ti_DetectVar ; 42 + export ti_SetVar ; 44 + export ti_StoVar ; 46 + export ti_RclVar ; 48 + export ti_AllocString ; 50 + export ti_AllocList ; 52 + export ti_AllocMatrix ; 54 + export ti_AllocCplxList ; 56 + export ti_AllocEqu ; 58 + export ti_DetectAny ; 60 + export ti_GetVATPtr ; 62 + export ti_GetName ; 64 + export ti_Rename ; 66 + export ti_RenameVar ; 68 diff --git a/frontends/calculator/CEdev/lib/libload/graphx.lib b/frontends/calculator/CEdev/lib/libload/graphx.lib new file mode 100644 index 0000000..58aafe8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/libload/graphx.lib @@ -0,0 +1,95 @@ +library "GRAPHX", 10 + export gfx_Begin ; 2 + export gfx_End ; 4 + export gfx_SetColor ; 6 + export gfx_SetDefaultPalette ; 8 + export gfx_SetPalette ; 10 + export gfx_FillScreen ; 12 + export gfx_SetPixel ; 14 + export gfx_GetPixel ; 16 + export gfx_GetDraw ; 18 + export gfx_SetDraw ; 20 + export gfx_SwapDraw ; 22 + export gfx_Blit ; 24 + export gfx_BlitLines ; 26 + export gfx_BlitRectangle ; 28 + export gfx_PrintChar ; 30 + export gfx_PrintInt ; 32 + export gfx_PrintUInt ; 34 + export gfx_PrintString ; 36 + export gfx_PrintStringXY ; 38 + export gfx_SetTextXY ; 40 + export gfx_SetTextBGColor ; 42 + export gfx_SetTextFGColor ; 44 + export gfx_SetTextTransparentColor ; 46 + export gfx_SetFontData ; 48 + export gfx_SetFontSpacing ; 50 + export gfx_SetMonospaceFont ; 52 + export gfx_GetStringWidth ; 54 + export gfx_GetCharWidth ; 56 + export gfx_GetTextX ; 58 + export gfx_GetTextY ; 60 + export gfx_Line ; 62 + export gfx_HorizLine ; 64 + export gfx_VertLine ; 66 + export gfx_Circle ; 68 + export gfx_FillCircle ; 70 + export gfx_Rectangle ; 72 + export gfx_FillRectangle ; 74 + export gfx_Line_NoClip ; 76 + export gfx_HorizLine_NoClip ; 78 + export gfx_VertLine_NoClip ; 80 + export gfx_FillCircle_NoClip ; 82 + export gfx_Rectangle_NoClip ; 84 + export gfx_FillRectangle_NoClip ; 86 + export gfx_SetClipRegion ; 88 + export gfx_GetClipRegion ; 90 + export gfx_ShiftDown ; 92 + export gfx_ShiftUp ; 94 + export gfx_ShiftLeft ; 96 + export gfx_ShiftRight ; 98 + export gfx_Tilemap ; 100 + export gfx_Tilemap_NoClip ; 102 + export gfx_TransparentTilemap ; 104 + export gfx_TransparentTilemap_NoClip ; 106 + export gfx_TilePtr ; 108 + export gfx_TilePtrMapped ; 110 + export gfx_Reserved ; 112 + export gfx_AllocSprite ; 114 + export gfx_Sprite ; 116 + export gfx_TransparentSprite ; 118 + export gfx_Sprite_NoClip ; 120 + export gfx_TransparentSprite_NoClip ; 122 + export gfx_GetSprite ; 124 + export gfx_ScaledSprite_NoClip ; 126 + export gfx_ScaledTransparentSprite_NoClip ; 128 + export gfx_FlipSpriteY ; 130 + export gfx_FlipSpriteX ; 132 + export gfx_RotateSpriteC ; 134 + export gfx_RotateSpriteCC ; 136 + export gfx_RotateSpriteHalf ; 138 + export gfx_Polygon ; 140 + export gfx_Polygon_NoClip ; 142 + export gfx_FillTriangle ; 144 + export gfx_FillTriangle_NoClip ; 146 + export gfx_Deprecated ; 148 + export gfx_SetTextScale ; 150 + export gfx_SetTransparentColor ; 152 + export gfx_ZeroScreen ; 154 + export gfx_SetTextConfig ; 156 + export gfx_GetSpriteChar ; 158 + export gfx_Lighten ; 160 + export gfx_Darken ; 162 + export gfx_SetFontHeight ; 164 + export gfx_ScaleSprite ; 166 + export gfx_FloodFill ; 168 + export gfx_RLETSprite ; 170 + export gfx_RLETSprite_NoClip ; 172 + export gfx_ConvertFromRLETSprite ; 174 + export gfx_ConvertToRLETSprite ; 176 + export gfx_ConvertToNewRLETSprite ; 178 + export gfx_RotateScaleSprite ; 180 + export gfx_RotatedScaledTransparentSprite_NoClip ; 182 + export gfx_RotatedScaledSprite_NoClip ; 184 + export gfx_SetCharData ; 186 + export gfx_Wait ; 188 diff --git a/frontends/calculator/CEdev/lib/libload/keypadc.lib b/frontends/calculator/CEdev/lib/libload/keypadc.lib new file mode 100644 index 0000000..89bc3ba --- /dev/null +++ b/frontends/calculator/CEdev/lib/libload/keypadc.lib @@ -0,0 +1,5 @@ +library "KEYPADC", 2 + export kb_Scan ; 2 + export kb_ScanGroup ; 4 + export kb_AnyKey ; 6 + export kb_Reset ; 8 diff --git a/frontends/calculator/CEdev/lib/linked/acos.src b/frontends/calculator/CEdev/lib/linked/acos.src new file mode 100644 index 0000000..bc55b66 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/acos.src @@ -0,0 +1,6 @@ + .def _acos + .assume adl=1 + +; double acos(double arg); + +_acos equ 022100h diff --git a/frontends/calculator/CEdev/lib/linked/asin.src b/frontends/calculator/CEdev/lib/linked/asin.src new file mode 100644 index 0000000..a24be1d --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/asin.src @@ -0,0 +1,6 @@ + .def _asin + .assume adl=1 + +; double asin(double arg); + +_asin equ 022104h diff --git a/frontends/calculator/CEdev/lib/linked/atan.src b/frontends/calculator/CEdev/lib/linked/atan.src new file mode 100644 index 0000000..6d4d027 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/atan.src @@ -0,0 +1,6 @@ + .def _atan + .assume adl=1 + +; double atan(double arg); + +_atan equ 022108h diff --git a/frontends/calculator/CEdev/lib/linked/atan2.src b/frontends/calculator/CEdev/lib/linked/atan2.src new file mode 100644 index 0000000..468720e --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/atan2.src @@ -0,0 +1,6 @@ + .def _atan2 + .assume adl=1 + +; double atan2(double arg1,double arg2); + +_atan2 equ 02210Ch diff --git a/frontends/calculator/CEdev/lib/linked/atof.src b/frontends/calculator/CEdev/lib/linked/atof.src new file mode 100644 index 0000000..fb54801 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/atof.src @@ -0,0 +1,6 @@ + .def _atof + .assume adl=1 + +; double atof(char *str); + +_atof equ 022110h diff --git a/frontends/calculator/CEdev/lib/linked/ceil.src b/frontends/calculator/CEdev/lib/linked/ceil.src new file mode 100644 index 0000000..eace8a2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/ceil.src @@ -0,0 +1,6 @@ + .def _ceil + .assume adl=1 + +; double ceil(double d); + +_ceil equ 022114h diff --git a/frontends/calculator/CEdev/lib/linked/cos.src b/frontends/calculator/CEdev/lib/linked/cos.src new file mode 100644 index 0000000..84978ed --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/cos.src @@ -0,0 +1,6 @@ + .def _cos + .assume adl=1 + +; double cos(double arg); + +_cos equ 02211Ch diff --git a/frontends/calculator/CEdev/lib/linked/cosh.src b/frontends/calculator/CEdev/lib/linked/cosh.src new file mode 100644 index 0000000..27bae21 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/cosh.src @@ -0,0 +1,6 @@ + .def _cosh + .assume adl=1 + +; double cosh(double arg); + +_cosh equ 022134h diff --git a/frontends/calculator/CEdev/lib/linked/exp.src b/frontends/calculator/CEdev/lib/linked/exp.src new file mode 100644 index 0000000..320de05 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/exp.src @@ -0,0 +1,6 @@ + .def _exp + .assume adl=1 + +; double exp(double arg); + +_exp equ 022124h diff --git a/frontends/calculator/CEdev/lib/linked/fabs.src b/frontends/calculator/CEdev/lib/linked/fabs.src new file mode 100644 index 0000000..0742ca8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/fabs.src @@ -0,0 +1,6 @@ + .def _fabs + .assume adl=1 + +; double fabs(double j); + +_fabs equ 0220F0h diff --git a/frontends/calculator/CEdev/lib/linked/floor.src b/frontends/calculator/CEdev/lib/linked/floor.src new file mode 100644 index 0000000..55aec80 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/floor.src @@ -0,0 +1,6 @@ + .def _floor + .assume adl=1 + +; double floor(double d); + +_floor equ 0220F4h diff --git a/frontends/calculator/CEdev/lib/linked/fmod.src b/frontends/calculator/CEdev/lib/linked/fmod.src new file mode 100644 index 0000000..ed4d764 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/fmod.src @@ -0,0 +1,6 @@ + .def _fmod + .assume adl=1 + +; double fmod(double x, double y); + +_fmod equ 0220FCh diff --git a/frontends/calculator/CEdev/lib/linked/frexp.src b/frontends/calculator/CEdev/lib/linked/frexp.src new file mode 100644 index 0000000..686089e --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/frexp.src @@ -0,0 +1,6 @@ + .def _frexp + .assume adl=1 + +; double frexp( double value, int *pExponent ); + +_frexp equ 0220D8h diff --git a/frontends/calculator/CEdev/lib/linked/ldexp.src b/frontends/calculator/CEdev/lib/linked/ldexp.src new file mode 100644 index 0000000..009b9c1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/ldexp.src @@ -0,0 +1,6 @@ + .def _ldexp + .assume adl=1 + +; double ldexp( double value, int power ) + +_ldexp equ 0220DCh diff --git a/frontends/calculator/CEdev/lib/linked/log.src b/frontends/calculator/CEdev/lib/linked/log.src new file mode 100644 index 0000000..70e698e --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/log.src @@ -0,0 +1,6 @@ + .def _log + .assume adl=1 + +; double log( double arg ); + +_log equ 0220E4h diff --git a/frontends/calculator/CEdev/lib/linked/log10.src b/frontends/calculator/CEdev/lib/linked/log10.src new file mode 100644 index 0000000..32e0c1f --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/log10.src @@ -0,0 +1,6 @@ + .def _log10 + .assume adl=1 + +; double log10( double arg ); + +_log10 equ 0220E8h diff --git a/frontends/calculator/CEdev/lib/linked/modf.src b/frontends/calculator/CEdev/lib/linked/modf.src new file mode 100644 index 0000000..425a3b3 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/modf.src @@ -0,0 +1,6 @@ + .def _modf + .assume adl=1 + +; double modf( double value, double *pIntegral ); + +_modf equ 0220ECh diff --git a/frontends/calculator/CEdev/lib/linked/pow.src b/frontends/calculator/CEdev/lib/linked/pow.src new file mode 100644 index 0000000..640eaad --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/pow.src @@ -0,0 +1,6 @@ + .def _pow + .assume adl=1 + +; double pow( double arg1, double arg2 ); + +_pow equ 0220F8h diff --git a/frontends/calculator/CEdev/lib/linked/sin.src b/frontends/calculator/CEdev/lib/linked/sin.src new file mode 100644 index 0000000..179d6be --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/sin.src @@ -0,0 +1,6 @@ + .def _sin + .assume adl=1 + +; double sin(double arg); + +_sin equ 022118h diff --git a/frontends/calculator/CEdev/lib/linked/sinh.src b/frontends/calculator/CEdev/lib/linked/sinh.src new file mode 100644 index 0000000..f82b60c --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/sinh.src @@ -0,0 +1,6 @@ + .def _sinh + .assume adl=1 + +; double sinh(double arg); + +_sinh equ 022130h diff --git a/frontends/calculator/CEdev/lib/linked/sqrt.src b/frontends/calculator/CEdev/lib/linked/sqrt.src new file mode 100644 index 0000000..f261f50 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/sqrt.src @@ -0,0 +1,6 @@ + .def _sqrt + .assume adl=1 + +; double sqrt( double value ); + +_sqrt equ 02213Ch diff --git a/frontends/calculator/CEdev/lib/linked/strtod.src b/frontends/calculator/CEdev/lib/linked/strtod.src new file mode 100644 index 0000000..0d4a6a1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/strtod.src @@ -0,0 +1,6 @@ + .def _strtod + .assume adl=1 + +; double strtod(char * str,char ** endptr); + +_strtod equ 0220E0h diff --git a/frontends/calculator/CEdev/lib/linked/tan.src b/frontends/calculator/CEdev/lib/linked/tan.src new file mode 100644 index 0000000..4cc5c30 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/tan.src @@ -0,0 +1,6 @@ + .def _tan + .assume adl=1 + +; double tan(double arg); + +_tan equ 022120h diff --git a/frontends/calculator/CEdev/lib/linked/tanh.src b/frontends/calculator/CEdev/lib/linked/tanh.src new file mode 100644 index 0000000..977ee2e --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/tanh.src @@ -0,0 +1,6 @@ + .def _tanh + .assume adl=1 + +; double tanh(double arg); + +_tanh equ 022138h diff --git a/frontends/calculator/CEdev/lib/linked/ufltinfo.src b/frontends/calculator/CEdev/lib/linked/ufltinfo.src new file mode 100644 index 0000000..bff9cea --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/ufltinfo.src @@ -0,0 +1,7 @@ + .def __u_flt_info + .assume adl=1 + +; _u_flt_info(float val,struct flt_info * info); + +__u_flt_info equ 022128h + diff --git a/frontends/calculator/CEdev/lib/linked/ufltrnd.src b/frontends/calculator/CEdev/lib/linked/ufltrnd.src new file mode 100644 index 0000000..824adc2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/ufltrnd.src @@ -0,0 +1,7 @@ + .def __u_flt_rnd + .assume adl=1 + +; void _u_flt_rnd(struct flt_info *info, char digits); + +__u_flt_rnd equ 02212Ch + diff --git a/frontends/calculator/CEdev/lib/shared/abort.src b/frontends/calculator/CEdev/lib/shared/abort.src new file mode 100644 index 0000000..b2d9648 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/abort.src @@ -0,0 +1,13 @@ +; --- +; triggers open debugger +; --- + + .def _abort + .ref __exit + .assume adl=1 + +_abort: + scf + sbc hl,hl + ld (hl),1 + jp __exit diff --git a/frontends/calculator/CEdev/lib/shared/abs.src b/frontends/calculator/CEdev/lib/shared/abs.src new file mode 100644 index 0000000..5dc8aa1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/abs.src @@ -0,0 +1,17 @@ + .def _abs + .assume adl=1 + +;int abs(int); + +_abs: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + sbc hl,de + ret p + ex de,hl + ret + diff --git a/frontends/calculator/CEdev/lib/shared/atoi.src b/frontends/calculator/CEdev/lib/shared/atoi.src new file mode 100644 index 0000000..2619388 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/atoi.src @@ -0,0 +1,22 @@ + .ref _strtol + .def _atoi + .assume adl=1 + +; int atoi(char *cp); + +_atoi: + pop bc + pop de + push de + push bc + ld bc,10 + push bc + ld c,b + push bc + push de + call _strtol + pop de + pop bc + pop bc + ret + diff --git a/frontends/calculator/CEdev/lib/shared/atol.src b/frontends/calculator/CEdev/lib/shared/atol.src new file mode 100644 index 0000000..7bf22d7 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/atol.src @@ -0,0 +1,8 @@ + .ref _atoi + .def _atol + .assume adl=1 + +; long atol(char *cp); + +_atol equ _atoi + diff --git a/frontends/calculator/CEdev/lib/shared/atomic_load_32.src b/frontends/calculator/CEdev/lib/shared/atomic_load_32.src new file mode 100644 index 0000000..a49df22 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/atomic_load_32.src @@ -0,0 +1,61 @@ +; --- +; uint32_t atomic_load_32(volatile uint32_t *p) +; --- + + .def _atomic_load_32 + .assume adl=1 + +_atomic_load_32: + pop hl + ex (sp),iy + push hl + ld c,0 +retry: +; Wait for a different (increasing) amount of time before each retry to prevent +; getting caught in an endless loop of the value changing between reads with a +; fixed period equal to the amount of time it takes for each retry + inc c + ld b,c +wait: + djnz wait +; Read the value twice. + lea hl,iy+3 + ; Time between first and last byte read: + ld de,(iy) ; 2R + ld a,(hl) ; + 1F+1R + cp a,(hl) ; + 1F+1R + ld hl,(iy) ; + 3F+3R + ; = 5F+7R + ; = 48cc (assuming F = R = 3) + ; = 1us (assuming 48MHz clock speed) + ; Don't need to worry about DMA, just + ; retry until not interrupted by DMA +; Retry if the values read differ. +; +; If the values differ, then the underlying value changed between reading the +; first byte of the first 32-bit read and the last byte of the second 32-bit +; read: +; * If a change occurs between the two 32-bit reads, then both values read +; remain valid. +; * If a change occurs in the middle of one of the 32-bit reads: +; * If the bytes already read change but the bytes yet to read do not +; change, then the value read is the valid value before the change. +; * If the bytes already read do not change but the yet still to read +; change, then the value read is the valid value after the change. +; * If the bytes already read and the bytes yet to read change, then the +; value read is an invalid mix of the values before and after the change. +; +; Without reading the value again, there is not enough information to determine +; if the third case occurred. If it did occur, then one of the values is +; invalid. But there is also not enough information to determine which is +; invalid, and therefore which is valid. So reading the value must be retried. +; +; (Furthermore, if a change occurs in the middle of both 32-bit reads and the +; bytes already read change in both, then both values read become invalid.) + jr nz,retry + sbc hl,de + jr nz,retry +; Values don't differ, good to go. + add hl,de + ld e,a ; euhl = value read + ret diff --git a/frontends/calculator/CEdev/lib/shared/atomic_load_decreasing_32.src b/frontends/calculator/CEdev/lib/shared/atomic_load_decreasing_32.src new file mode 100644 index 0000000..639eac1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/atomic_load_decreasing_32.src @@ -0,0 +1,89 @@ +; --- +; uint32_t atomic_load_decreasing_32(volatile uint32_t *p) +; --- + + .def _atomic_load_decreasing_32 + .assume adl=1 + +_atomic_load_decreasing_32: + pop hl + ex (sp),iy + push hl +; Temporarily disable interrupts. + ld a,i + di +; Read the value twice. +; first value read = cude, second value read = auhl + ; Time between first and last byte read: + ld de,(iy) ; 2R + ld c,(iy+3) ; + 3F+1R + ld hl,(iy) ; + 3F+3R + ld a,(iy+3) ; + 3F+1R + ; = 9F+7R + ; = 56cc (assuming F = R = 3) + ; ~ 1.17us (assuming 48MHz clock speed) + ; + approximate worst-case LCD + USB DMA + ; ~ 5us +; Re-enable interrupts if they were previously enabled. + jp po,no_ei + ei +no_ei: +; Compare and return the greater of the two values read. +; +; If the values differ, then the underlying value changed between reading the +; first byte of the first 32-bit read and the last byte of the second 32-bit +; read: +; * If a change occurs between the two 32-bit reads, then both values read +; remain valid. +; * If a change occurs in the middle of one of the 32-bit reads: +; * If the bytes already read change but the bytes yet to read do not +; change, then the value read is the valid value before the change. +; * If the bytes already read do not change but the yet still to read +; change, then the value read is the valid value after the change. +; * If the bytes already read and the bytes yet to read change, then the +; value read is an invalid mix of the values before and after the change. +; +; If the final case did not occur, then both values read are valid. +; +; If the final case occurred for only the second value read, then due to reading +; bytes in little-endian order, one to three upper bytes will reflect the +; decreased value after the change. Regardless of the lower bytes, the valid, +; first value read will be greater than the invalid, second value read. +; +; If the final case occurred for only the first value read, then due to reading +; bytes in little-endian order, one to three upper bytes will reflect the +; decreased value after the change, while the remaining one to three lower bytes +; will reflect the value before the change. If it is assumed that the value +; decreased by less than 256, then the upper bytes must have decreased through +; borrow and the lower bytes of the valid, second value read will be greater +; than the lower bytes of the invalid, first value read. And because the full +; second value read will reflect the the decreased value after the change, and +; therefore the two values read will only differ in the lower bytes, it follows +; that the full, valid, second valid read will be greater than the full, +; invalid, first value read. (Note that this assertion can be extended to +; include 256 because only one byte would change, making this whole case +; unreachable.) +; +; If the third case occurred for both values read, then both are invalid. There +; is no reasonable way to detect this, so it is assumed that this did not occur. +; +; Combining all of these cases and assumptions, the greater of the two values +; read will always be valid. + or a,a + sbc hl,de + sbc a,c ; auhl = second value read + ; - first value read + jr c,swap +; second value read >= first value read +; ==> second value read is valid + add hl,de + adc a,c + ld e,a ; euhl = second value read + ret + +swap: +; second value read < first value read +; ==> first value read is valid + ex de,hl + ld e,c ; euhl = first value read + ret diff --git a/frontends/calculator/CEdev/lib/shared/atomic_load_increasing_32.src b/frontends/calculator/CEdev/lib/shared/atomic_load_increasing_32.src new file mode 100644 index 0000000..d8c871f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/atomic_load_increasing_32.src @@ -0,0 +1,88 @@ +; --- +; uint32_t atomic_load_increasing_32(volatile uint32_t *p) +; --- + + .def _atomic_load_increasing_32 + .assume adl=1 + +_atomic_load_increasing_32: + pop hl + ex (sp),iy + push hl +; Temporarily disable interrupts. + ld a,i + di +; Read the value twice. +; first value read = cude, second value read = auhl + ; Time between first and last byte read: + ld de,(iy) ; 2R + ld c,(iy+3) ; + 3F+1R + ld hl,(iy) ; + 3F+3R + ld a,(iy+3) ; + 3F+1R + ; = 9F+7R + ; = 56cc (assuming F = R = 3) + ; ~ 1.17us (assuming 48MHz clock speed) + ; + approximate worst-case LCD + USB DMA + ; ~ 5us +; Re-enable interrupts if they were previously enabled. + jp po,no_ei + ei +no_ei: +; Compare and return the lesser of the two values read. +; +; If the values differ, then the underlying value changed between reading the +; first byte of the first 32-bit read and the last byte of the second 32-bit +; read: +; * If a change occurs between the two 32-bit reads, then both values read +; remain valid. +; * If a change occurs in the middle of one of the 32-bit reads: +; * If the bytes already read change but the bytes yet to read do not +; change, then the value read is the valid value before the change. +; * If the bytes already read do not change but the yet still to read +; change, then the value read is the valid value after the change. +; * If the bytes already read and the bytes yet to read change, then the +; value read is an invalid mix of the values before and after the change. +; +; If the final case did not occur, then both values read are valid. +; +; If the final case occurred for only the second value read, then due to reading +; bytes in little-endian order, one to three upper bytes will reflect the +; increased value after the change. Regardless of the lower bytes, the valid, +; first value read will be less than the invalid, second value read. +; +; If the final case occurred for only the first value read, then due to reading +; bytes in little-endian order, one to three upper bytes will reflect the +; increased value after the change, while the remaining one to three lower bytes +; will reflect the value before the change. If it is assumed that the value +; increased by less than 256, then the upper bytes must have increased through +; carry and the lower bytes of the valid, second value read will be less than +; the lower bytes of the invalid, first value read. And because the full second +; value read will reflect the the increased value after the change, and +; therefore the two values read will only differ in the lower bytes, it follows +; that the full, valid, second valid read will be less than the full, invalid, +; first value read. (Note that this assertion can be extended to include 256 +; because only one byte would change, making this whole case unreachable.) +; +; If the third case occurred for both values read, then both are invalid. There +; is no reasonable way to detect this, so it is assumed that this did not occur. +; +; Combining all of these cases and assumptions, the lesser of the two values +; read will always be valid. + or a,a + sbc hl,de + sbc a,c ; auhl = second value read + ; - first value read + jr c,no_swap +; second value read >= first value read +; ==> first value read is valid + ex de,hl + ld e,c ; euhl = first value read + ret + +no_swap: +; second value read < first value read +; ==> second value read is valid + add hl,de + adc a,c + ld e,a ; euhl = second value read + ret diff --git a/frontends/calculator/CEdev/lib/shared/atos.src b/frontends/calculator/CEdev/lib/shared/atos.src new file mode 100644 index 0000000..cb3403b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/atos.src @@ -0,0 +1,8 @@ + .ref _atoi + .def _atos + .assume adl=1 + +; short int atos(char *cp); + +_atos equ _atoi + diff --git a/frontends/calculator/CEdev/lib/shared/bdivs.src b/frontends/calculator/CEdev/lib/shared/bdivs.src new file mode 100644 index 0000000..1bd30b8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bdivs.src @@ -0,0 +1,44 @@ +; (c) Copyright 2001-2008 Zilog Inc. +;------------------------------------------------------------------------- +; Signed Byte Division. +; Input: +; Operand1: +; B : 8 bit dividend (numerator) +; +; Operand2: +; C : 8 bit divisor (denominator) +; +; Output: +; Result: A : 8 bit quotient +; Registers Used: +; d, e +;------------------------------------------------------------------------- + .ref __bdivu + .def __bdivs + .assume adl=1 + +__bdivs: + push bc + xor a,a + sub a,b + jp m,_L0 + ld b,a +_L0: + xor a,a + sub a,c + jp m,_L1 + ld c,a +_L1: + call __bdivu + pop bc + push hl + ld l,a + ld a,b + xor a,c + ld a,l + jp p,_L2 + neg +_L2: + pop hl + ret + diff --git a/frontends/calculator/CEdev/lib/shared/bdivu.src b/frontends/calculator/CEdev/lib/shared/bdivu.src new file mode 100644 index 0000000..cd2b7d3 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bdivu.src @@ -0,0 +1,41 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Unsigned Byte Division. +; Input: +; Operand1: +; B : 8 bit dividend (numerator x) +; +; Operand2: +; C : 8 bit divisor (denominator y) +; +; Output: +; Result: A : 8 bit quotient +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __bdivu + .assume adl=1 + +__bdivu: + push bc + push hl + ld h,b + xor a,a + ld b,8 ;i = 8 (bit counter) +loop: + sla h + rla + jr c,over + cp a,c + jr c,under +over: + sub a,c + inc h +under: + djnz loop + + ld a,h + pop hl + pop bc + ret + diff --git a/frontends/calculator/CEdev/lib/shared/bldix.src b/frontends/calculator/CEdev/lib/shared/bldix.src new file mode 100644 index 0000000..6d3dbf7 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bldix.src @@ -0,0 +1,25 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; byte load a,(ix+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from ix +; +; Output: +; Result: A : 8 bit +; +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __bldix + .assume adl=1 + +__bldix: + push ix + push af ; Preserve flags + add ix,bc + pop af ; Restore flags + ld a,(ix) + pop ix + ret + diff --git a/frontends/calculator/CEdev/lib/shared/bldiy.src b/frontends/calculator/CEdev/lib/shared/bldiy.src new file mode 100644 index 0000000..acda08a --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bldiy.src @@ -0,0 +1,17 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; byte load a,(iy+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from iy +; +; Output: +; Result: A : 8 bit +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __bldiy + .assume adl=1 + +__bldiy equ 0000FCh diff --git a/frontends/calculator/CEdev/lib/shared/bmuls.src b/frontends/calculator/CEdev/lib/shared/bmuls.src new file mode 100644 index 0000000..45d7111 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bmuls.src @@ -0,0 +1,25 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Signed Byte Multiply +; Input: +; Operand1: +; A : 8 bit +; +; Operand2: +; B : 8 bit +; +; Output: +; Result: A : 8 bit product +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __bmuls + .assume adl=1 + +__bmuls: + push bc + ld c,a + mlt bc + ld a,c + pop bc + ret diff --git a/frontends/calculator/CEdev/lib/shared/bmulu.src b/frontends/calculator/CEdev/lib/shared/bmulu.src new file mode 100644 index 0000000..20c27b5 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bmulu.src @@ -0,0 +1,24 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Unsigned Byte Multiply +; Input: +; Operand1: +; B : 8 bit +; +; Operand2: +; C : 8 bit +; +; Output: +; Result: A : 8 bit product +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __bmulu + .assume adl=1 + +__bmulu: + push bc + mlt bc + ld a,c + pop bc + ret diff --git a/frontends/calculator/CEdev/lib/shared/brems.src b/frontends/calculator/CEdev/lib/shared/brems.src new file mode 100644 index 0000000..3687ced --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/brems.src @@ -0,0 +1,40 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Signed Byte Modulus +; Input: +; Operand1: +; A : 8 bit dividend (numerator) +; +; Operand2: +; C : 8 bit divisor (denominator) +; +; Output: +; Result: A : 8 bit modulus +; Registers Used: +; +;------------------------------------------------------------------------- + .ref __bremu + .def __brems + .assume adl=1 + +__brems: + push bc + ld b,a + bit 7,c + jr z,skip1 + ld a,c + neg + ld c,a +skip1: + ld a,b + bit 7,a + jr z,skip2 + neg +skip2: + call __bremu + bit 7,b + jr z,skip3 + neg +skip3: + pop bc + ret diff --git a/frontends/calculator/CEdev/lib/shared/bremu.src b/frontends/calculator/CEdev/lib/shared/bremu.src new file mode 100644 index 0000000..4c60bc8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bremu.src @@ -0,0 +1,39 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Unsigned Byte Modulus +; Input: +; Operand1: +; A : 8 bit dividend (numerator) +; +; Operand2: +; C : 8 bit divisor (denominator) +; +; Output: +; Result: A : 8 bit modulus +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __bremu + .assume adl=1 + +__bremu: + push bc + push hl + ld h,a + xor a,a + ld b,8 +loop: + sla h + rla + jr c,over + cp a,c + jr c,under +over: + sub a,c + inc h +under: + djnz loop + pop hl + pop bc + ret + diff --git a/frontends/calculator/CEdev/lib/shared/bsearch.src b/frontends/calculator/CEdev/lib/shared/bsearch.src new file mode 100644 index 0000000..6ec3acc --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bsearch.src @@ -0,0 +1,195 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\BSEARCH.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 #include +; 10 #include +; 11 +; 12 /************************************************* +; 13 * +; 14 * bsearch - binary search +; 15 * +; 16 * Inputs: +; 17 * key - key to search for +; 18 * base - base of array to be sorted +; 19 * num - number of elements +; 20 * width - size of each element +; 21 * comp - pointer to function for comparison +; 22 * +; 23 * Returns: +; 24 * nothing +; 25 * +; 26 *************************************************/ +; 27 void *bsearch(char *key, +; 28 char *base, +; 29 size_t num, +; 30 size_t width, +; 31 int (*comp)(void *,void *)) +; 32 { +_bsearch: + LD HL,-18 + CALL __frameset +; 33 unsigned int mid; +; 34 unsigned int low; +; 35 unsigned int high; +; 36 int d; +; 37 unsigned int pmid; +; 38 char *addr; +; 39 +; 40 /* make high the nearest power of two for */ +; 41 /* efficiency and to ensure we always */ +; 42 /* terminate properly. */ +; 43 /* Note that high is always higher */ +; 44 /* than it should be so that we will */ +; 45 /* not fail to find the last entry in the */ +; 46 /* table. */ +; 47 +; 48 high = 0x0001; + LD BC,1 + LD (IX+-6),BC +; 49 while (high <= num) + JR L_0 +L_1: +; 50 high <<= 1; + LD HL,(IX+-6) + ADD HL,HL + LD (IX+-6),HL +L_0: + LD BC,(IX+-6) + LD HL,(IX+12) + OR A,A + SBC HL,BC + JR NC,L_1 +; 51 low = 0; + LD BC,0 + LD (IX+-9),BC +; 52 mid = 0; + LD (IX+-3),BC +; 53 +; 54 /* begin the search */ +; 55 +; 56 for(;;) { +L_11: +; 57 pmid = mid; + LD BC,(IX+-3) + LD (IX+-18),BC +; 58 mid = ((high - low) >> 1) + low; + LD BC,(IX+-9) + LD HL,(IX+-6) + OR A,A + SBC HL,BC + LD A,1 + CALL __ishru_b + LD BC,(IX+-9) + ADD HL,BC + LD (IX+-3),HL +; 59 +; 60 if (pmid == mid) /* terminate because we're */ + LD BC,HL + LD HL,(IX+-18) + OR A,A + SBC HL,BC + JR NZ,L_5 + OR A,A +; 61 return(NULL); /* oscilating. */ + SBC HL,HL + JR L_13 +L_5: +; 62 +; 63 if (mid >= num) { /* we're above the array. */ + LD BC,(IX+12) + LD HL,(IX+-3) + OR A,A + SBC HL,BC + JR C,L_6 +; 64 high = mid; /* pretend element is larger*/ + LD BC,(IX+-3) + LD (IX+-6),BC +; 65 continue; /* than the key. */ + JR L_11 +; 66 } +L_6: +; 67 +; 68 d = (*comp)(key,addr = base + mid * width); + LD HL,(IX+-3) + LD BC,(IX+15) + CALL __imulu + LD BC,(IX+9) + ADD HL,BC + LD (IX+-15),HL + LD IY,(IX+18) + LD BC,HL + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL __indcall + POP BC + POP BC + LD (IX+-12),HL +; 69 if (d == 0) /* we found it */ + CALL __icmpzero + JR NZ,L_10 +; 70 return(addr); + LD HL,(IX+-15) + JR L_13 +L_10: +; 71 if (d < 0) /* key is less than mid, */ + LD HL,(IX+-12) + CALL __icmpzero + CALL __setflag + JP P,L_9 +; 72 high = mid; /* set high to mid. */ + LD BC,(IX+-3) + LD (IX+-6),BC +; 73 else /* key is greater than mid, */ + JR L_11 +L_9: +; 74 low = mid; /* set low to mid. */ + LD BC,(IX+-3) + LD (IX+-9),BC +; 75 } + JR L_11 +; 76 } +L_13: + LD SP,IX + POP IX + RET + + +;**************************** _bsearch *************************** +;Name Addr/Register Size Type +;pmid IX-18 3 variable +;addr IX-15 3 variable +;d IX-12 3 variable +;low IX-9 3 variable +;high IX-6 3 variable +;mid IX-3 3 variable +;comp IX+18 3 parameter +;width IX+15 3 parameter +;num IX+12 3 parameter +;base IX+9 3 parameter +;key IX+6 3 parameter + + +; Stack Frame Size: 39 (bytes) +; Spill Code: 0 (instruction) + + + XREF __indcall:ROM + XREF __imulu:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XREF __ishru_b:ROM + XDEF _bsearch + END diff --git a/frontends/calculator/CEdev/lib/shared/bshl.src b/frontends/calculator/CEdev/lib/shared/bshl.src new file mode 100644 index 0000000..9c6c14b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bshl.src @@ -0,0 +1,18 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Byte Shift Left +; Input: +; Operand1: +; A : 8 bit number to shift +; Operand2: +; B : 8 bit shift count +; +; Output: +; Result: A : 8 bit +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __bshl + .assume adl=1 + +__bshl equ 000100h diff --git a/frontends/calculator/CEdev/lib/shared/bshrs.src b/frontends/calculator/CEdev/lib/shared/bshrs.src new file mode 100644 index 0000000..4c53262 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bshrs.src @@ -0,0 +1,29 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Byte Shift Right Signed +; Input: +; Operand1: +; A : 8 bit number to shift +; Operand2: +; B : 8 bit shift count +; +; Output: +; Result: A : 8 bit +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __bshrs + .assume adl=1 + +__bshrs: + push bc + inc b + jr test + +loop: + sra a +test: + djnz loop + + pop bc + ret diff --git a/frontends/calculator/CEdev/lib/shared/bshru.src b/frontends/calculator/CEdev/lib/shared/bshru.src new file mode 100644 index 0000000..ec73588 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bshru.src @@ -0,0 +1,18 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Byte Shift Right Unsigned +; Input: +; Operand1: +; A : 8 bit number to shift +; Operand2: +; B : 8 bit shift count +; +; Output: +; Result: A : 8 bit +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __bshru + .assume adl=1 + +__bshru equ 000104h diff --git a/frontends/calculator/CEdev/lib/shared/bstix.src b/frontends/calculator/CEdev/lib/shared/bstix.src new file mode 100644 index 0000000..3719b30 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bstix.src @@ -0,0 +1,19 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; byte store (ix+nnnnnn),A +; Input: +; Operand1: +; BC : 24-bit offset from ix +; A : 8-bit integer to store +; +; Output: +; none +; +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __bstix + .assume adl=1 + +__bstix equ 00010Ch + diff --git a/frontends/calculator/CEdev/lib/shared/bstiy.src b/frontends/calculator/CEdev/lib/shared/bstiy.src new file mode 100644 index 0000000..b95ce91 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bstiy.src @@ -0,0 +1,18 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; byte store (iy+nnnnnn),A +; Input: +; Operand1: +; BC : 24-bit offset from iy +; A : 8-bit integer to store +; +; Output: +; +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __bstiy + .assume adl=1 + +__bstiy equ 000108h diff --git a/frontends/calculator/CEdev/lib/shared/calloc.src b/frontends/calculator/CEdev/lib/shared/calloc.src new file mode 100644 index 0000000..069e4bf --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/calloc.src @@ -0,0 +1,27 @@ + .ref __imulu + .ref _malloc + .ref _memset + .def _calloc + .assume adl=1 + +_calloc: + pop de + pop bc + pop hl + push hl + push bc + push de + call __imulu + push hl + call _malloc + add hl,de + xor a,a + sbc hl,de + ld e,a + push de + push hl + call nz,_memset + pop hl + pop de + pop bc + ret diff --git a/frontends/calculator/CEdev/lib/shared/case.src b/frontends/calculator/CEdev/lib/shared/case.src new file mode 100644 index 0000000..26919eb --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/case.src @@ -0,0 +1,27 @@ +; (c) Copyright 2001-2008 Zilog Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand1: +; bc : 24 bit address of CASE TABLE +; +; Operand2: +; de : 24 bit number of entries in table +; +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; Result: hl : 24 bit address of case jp to take +; Registers Used: +; +; +; Table Format: +; [24-bit value][JP label (4-bytes)] 7 bytes total +; +;------------------------------------------------------------------------- + .def __case + .assume adl=1 + +__case equ 000110h diff --git a/frontends/calculator/CEdev/lib/shared/case16.src b/frontends/calculator/CEdev/lib/shared/case16.src new file mode 100644 index 0000000..33cb5cc --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/case16.src @@ -0,0 +1,17 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __case16 + .assume adl=1 + +__case16 equ 000114h diff --git a/frontends/calculator/CEdev/lib/shared/case16d.src b/frontends/calculator/CEdev/lib/shared/case16d.src new file mode 100644 index 0000000..f2a929d --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/case16d.src @@ -0,0 +1,17 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; Result: hl : 24 bit address of case jp to take +; Registers Used: +; +;------------------------------------------------------------------------- + .def __case16D + .assume adl=1 + +__case16D equ 000118h diff --git a/frontends/calculator/CEdev/lib/shared/case24.src b/frontends/calculator/CEdev/lib/shared/case24.src new file mode 100644 index 0000000..43539e5 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/case24.src @@ -0,0 +1,17 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __case24 + .assume adl=1 + +__case24 equ 00011Ch diff --git a/frontends/calculator/CEdev/lib/shared/case24d.src b/frontends/calculator/CEdev/lib/shared/case24d.src new file mode 100644 index 0000000..bdec1ac --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/case24d.src @@ -0,0 +1,17 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; Result: hl : 24 bit address of case jp to take +; Registers Used: +; +;------------------------------------------------------------------------- + .def __case24D + .assume adl=1 + +__case24D equ 000120h diff --git a/frontends/calculator/CEdev/lib/shared/case8.src b/frontends/calculator/CEdev/lib/shared/case8.src new file mode 100644 index 0000000..8d4f00f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/case8.src @@ -0,0 +1,17 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __case8 + .assume adl=1 + +__case8 equ 000124h diff --git a/frontends/calculator/CEdev/lib/shared/case8d.src b/frontends/calculator/CEdev/lib/shared/case8d.src new file mode 100644 index 0000000..f4be7a6 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/case8d.src @@ -0,0 +1,17 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; Result: hl : 24 bit address of case jp to take +; Registers Used: +; +;------------------------------------------------------------------------- + .def __case8D + .assume adl=1 + +__case8D equ 000128h diff --git a/frontends/calculator/CEdev/lib/shared/debugger.src b/frontends/calculator/CEdev/lib/shared/debugger.src new file mode 100644 index 0000000..684b3a2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/debugger.src @@ -0,0 +1,12 @@ +; --- +; opens the debugger +; --- + + .def _dbg_Debugger + .assume adl=1 + +_dbg_Debugger: + scf + sbc hl,hl + ld (hl),2 + ret diff --git a/frontends/calculator/CEdev/lib/shared/delay.src b/frontends/calculator/CEdev/lib/shared/delay.src new file mode 100644 index 0000000..62978b8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/delay.src @@ -0,0 +1,92 @@ + +; --- +; void delay(uint16_t millis) +; --- + + .def _delay + .assume adl=1 + +mpTmrRange equ 0F20000h + +tmr2Counter equ 10h +tmr2Load equ 14h +tmr2Match1 equ 18h +tmr2Match2 equ 1Ch + +tmrCtrl equ 30h + +bTmr2Enable equ 3 +bTmr2Crystal equ 4 +bTmr2Overflow equ 5 +bTmr2CountUp equ 10 + +_delay: +; Read argument. + pop de + ex (sp),hl ; 0hl = millis + push de +; Abort ASAP if millis == 0. + ld a,h + or a,l + ret z +; Convert millis to CPU cycles by multiplying by 48000. +; Subtract 2 to offset overhead and the unknown counter low byte. + ld b,h + ld c,l ; 0bc = millis + dec.s bc ; bc = millis-1; need to set bcu = 0 + srl b + rr c ; bc = (millis-1)>>1 + ; = millis*(48000&0FFh)>>8, + ; off by -1 or -0.5 + ld e,l + ld d,187 ; 48000/256 == 187.5 + ld l,d + mlt de ; de = (millis&0FFh)*(48000>>8) + mlt hl ; hl = (millis>>8)*(48000>>8) + dec hl + push hl + dec sp + pop hl + inc sp + ld l,-2 ; hl = (millis&0FF00h)*(48000>>8)-2 + add hl,de ; hl = millis*(48000>>8)-2 + add hl,bc ; hl ~ (millis*48000>>8)-3 +; Set up timer 2 control bits: disabled, CPU clock, no interrupt, count down. + ex de,hl ; de ~ (millis*48000>>8)-3 + ld hl,mpTmrRange+tmrCtrl + res bTmr2Enable,(hl) + res bTmr2Crystal,(hl) + res bTmr2Overflow,(hl) + inc hl + res bTmr2CountUp-8,(hl) +; Set up timer 2 counter, match, and reload values. + ld l,tmr2Counter+1 + ld (hl),de ; counter = millis*48000-768+0xxh + ld l,tmr2Match1+3 + ld (hl),0FFh ; match1 = 0FFxxxxxxh + ld l,tmr2Match2+3 + ld (hl),0FFh ; match2 = 0FFxxxxxxh + ld l,tmr2Load+3 + ld (hl),0FEh ; reload = 0FExxxxxxh +; Enable timer 2. + ld l,tmrCtrl + set bTmr2Enable,(hl) +; Wait until timer 2 expires (underflows). +; Will catch the underflow if not interrupted for a continuous period of +; ((254-188)<<24)/48000000 ~ 23.1s. + ld l,tmr2Counter+3 + ld a,188 ; = 1+((0FFFFh*24000 shl 1)-12 shr 24) +; 380 cc up to this point +_delay_wait: + cp a,(hl) + jr nc,_delay_wait +; 12-29 cc to exit waitloop +; Done. + ret +; ~421 cc up to this point +; caller overhead: +; ld bc,millis +; push bc +; call _delay +; pop bc +; ~485 cc total diff --git a/frontends/calculator/CEdev/lib/shared/div.src b/frontends/calculator/CEdev/lib/shared/div.src new file mode 100644 index 0000000..0ae3c0d --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/div.src @@ -0,0 +1,54 @@ +; Copyright 1992-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Div function +; +; div_t div(int numer,int denom); +; +;------------------------------------------------------------------------- + .def _div + .ref __idivs + .ref __irems + .assume adl=1 + +_div: + push af + push bc + push hl + push de + + ld hl,21 + add hl,sp + ld bc,(hl) ; bc=val of denominator + dec hl + dec hl + dec hl + ld hl,(hl) ; hl=val of numerator + push hl + call __idivs + ex de,hl ; de= quotient + pop hl ; hl=val of numerator + call __irems + ld bc,hl + + ld hl,15 + add hl,sp + ld hl,(hl) + inc hl + inc hl + inc hl + ld (hl),bc ; remainder + dec hl + dec hl + dec hl + ld (hl),de ;quotient + + pop de + pop bc + pop bc + pop af + + ret + + + + diff --git a/frontends/calculator/CEdev/lib/shared/dzx7_standard.src b/frontends/calculator/CEdev/lib/shared/dzx7_standard.src new file mode 100644 index 0000000..a3591a2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/dzx7_standard.src @@ -0,0 +1,106 @@ +; --- +; void dzx7_turbo(void *src, void *dst) +; --- +; Dec 2012 by Einar Saukas & Urusergi +; "Standard" version (70 bytes) +; --- + + .def _dzx7_Standard + .assume adl=1 + +; enter : hl = void *src +; de = void *dst +; +; exit : hl = & following uncompressed block +; +; uses : af, bc, de, hl + +_dzx7_Standard: + pop bc + pop hl + pop de + push de + push hl + push bc + + ld a, 128 + +dzx7s_copy_byte_loop: + + ldi ; copy literal byte + +dzx7s_main_loop: + + call dzx7s_next_bit + jr nc, dzx7s_copy_byte_loop ; next bit indicates either literal or sequence + +; determine number of bits used for length (Elias gamma coding) + + push de + ld de, 0 + ld bc, 0 + +dzx7s_len_size_loop: + + inc d + call dzx7s_next_bit + jr nc, dzx7s_len_size_loop + +; determine length + +dzx7s_len_value_loop: + + call nc, dzx7s_next_bit + rl c + rl b + jr c, dzx7s_exit ; check end marker + dec d + jr nz, dzx7s_len_value_loop + inc bc ; adjust length + +; determine offset + + ld e, (hl) ; load offset flag (1 bit) + offset value (7 bits) + inc hl + + sla e + inc e + + jr nc, dzx7s_offset_end ; if offset flag is set, load 4 extra bits + ld d, 16 ; bit marker to load 4 bits + +dzx7s_rld_next_bit: + + call dzx7s_next_bit + rl d ; insert next bit into D + jr nc, dzx7s_rld_next_bit ; repeat 4 times, until bit marker is out + inc d ; add 128 to DE + srl d ; retrieve fourth bit from D + +dzx7s_offset_end: + + rr e ; insert fourth bit into E + +; copy previous sequence + + ex (sp), hl ; store source, restore destination + push hl ; store destination + sbc hl, de ; HL = destination - offset - 1 + pop de ; DE = destination + ldir + +dzx7s_exit: + + pop hl ; restore source address (compressed data) + jr nc, dzx7s_main_loop + +dzx7s_next_bit: + + add a, a ; check next bit + ret nz ; no more bits left? + ld a, (hl) ; load another group of 8 bits + inc hl + rla + ret + + end diff --git a/frontends/calculator/CEdev/lib/shared/dzx7_turbo.src b/frontends/calculator/CEdev/lib/shared/dzx7_turbo.src new file mode 100644 index 0000000..15a6236 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/dzx7_turbo.src @@ -0,0 +1,117 @@ +; --- +; void dzx7_turbo(void *src, void *dst) +; --- +; Dec 2012 by Einar Saukas & Urusergi +; "Turbo" version (89 bytes, 25% faster) +; --- + + .def _dzx7_Turbo + .assume adl=1 + +; enter : hl = void *src +; de = void *dst +; +; exit : hl = & following uncompressed block +; +; uses : af, bc, de, hl + +_dzx7_Turbo: + pop bc + pop hl + pop de + push de + push hl + push bc + + ld a, 128 + +dzx7t_copy_byte_loop: + + ldi ; copy literal byte + +dzx7t_main_loop: + + add a, a ; check next bit + call z, dzx7t_load_bits ; no more bits left? + jr nc, dzx7t_copy_byte_loop ; next bit indicates either literal or sequence + +; determine number of bits used for length (Elias gamma coding) + + push de + ld de, 0 + ld bc, 1 + +dzx7t_len_size_loop: + + inc d + add a, a ; check next bit + call z, dzx7t_load_bits ; no more bits left? + jr nc, dzx7t_len_size_loop + jp dzx7t_len_value_start + +; determine length + +dzx7t_len_value_loop: + + add a, a ; check next bit + call z, dzx7t_load_bits ; no more bits left? + rl c + rl b + jr c, dzx7t_exit ; check end marker + +dzx7t_len_value_start: + + dec d + jr nz, dzx7t_len_value_loop + inc bc ; adjust length + +; determine offset + + ld e, (hl) ; load offset flag (1 bit) + offset value (7 bits) + inc hl + + sla e + inc e + + jr nc, dzx7t_offset_end ; if offset flag is set, load 4 extra bits + add a, a ; check next bit + call z, dzx7t_load_bits ; no more bits left? + rl d ; insert first bit into D + add a, a ; check next bit + call z, dzx7t_load_bits ; no more bits left? + rl d ; insert second bit into D + add a, a ; check next bit + call z, dzx7t_load_bits ; no more bits left? + rl d ; insert third bit into D + add a, a ; check next bit + call z, dzx7t_load_bits ; no more bits left? + ccf + jr c, dzx7t_offset_end + inc d ; equivalent to adding 128 to DE + +dzx7t_offset_end: + + rr e ; insert inverted fourth bit into E + +; copy previous sequence + + ex (sp), hl ; store source, restore destination + push hl ; store destination + sbc hl, de ; HL = destination - offset - 1 + pop de ; DE = destination + ldir + +dzx7t_exit: + + pop hl ; restore source address (compressed data) + jp nc, dzx7t_main_loop + +dzx7t_load_bits: + + ld a, (hl) ; load another group of 8 bits + inc hl + rla + ret + + + end diff --git a/frontends/calculator/CEdev/lib/shared/finite.src b/frontends/calculator/CEdev/lib/shared/finite.src new file mode 100644 index 0000000..35c8c5c --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/finite.src @@ -0,0 +1,19 @@ + .def _finite + .assume adl=1 + +; int finite(double n); + +_finite: + pop bc + pop hl + pop de + push de + push hl + push bc + add hl,hl + ld a,e + rla + add a,1 + sbc hl,hl + inc hl + ret diff --git a/frontends/calculator/CEdev/lib/shared/fpadd.src b/frontends/calculator/CEdev/lib/shared/fpadd.src new file mode 100644 index 0000000..238ee39 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpadd.src @@ -0,0 +1,25 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; IEEE Single precision add +; +; INPUTS: AuBC OP1. +; EuHL OP2. +; +; OUTPUTS: AuBC Sum. +; +; Returns the result of adding the absolute values of the single-precision +; floating-point values OP1 and OP2. If Sign of result is 1, the sum is +; negated before being returned. +; +;-------------------------------------------------------------- + .def __fadd + .assume adl=1 + +__fadd equ 000270h diff --git a/frontends/calculator/CEdev/lib/shared/fpcmp.src b/frontends/calculator/CEdev/lib/shared/fpcmp.src new file mode 100644 index 0000000..acfbce0 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpcmp.src @@ -0,0 +1,27 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; IEEE Single precision compare. +; +; INPUTS: +; +; Operand1: +; EuHL : 32 bit IEEE format +; +; Operand2: +; AuBC : 32 bit IEEE format +; +; +; OUTPUTS: FLAGS based on Op1 - Op2 +; +;-------------------------------------------------------------- + .def __fcmp + .assume adl=1 + +__fcmp equ 000274h diff --git a/frontends/calculator/CEdev/lib/shared/fpdata.src b/frontends/calculator/CEdev/lib/shared/fpdata.src new file mode 100644 index 0000000..e34a653 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpdata.src @@ -0,0 +1,17 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FPDATA.C" + .assume ADL=1 + SEGMENT DATA +__huge_val: + DF 3.40282347E+38 + XDEF __huge_val +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 #include +; 6 +; 7 double _huge_val = LDBL_MAX; + END diff --git a/frontends/calculator/CEdev/lib/shared/fpdiv.src b/frontends/calculator/CEdev/lib/shared/fpdiv.src new file mode 100644 index 0000000..ab80d15 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpdiv.src @@ -0,0 +1,28 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; IEEE Single precision division +; +; INPUTS: +; Operand1: +; AuBC : 32 bit IEEE format +; +; Operand2: +; EuHL : 32 bit IEEE format divisor +; +; OUTPUTS: +; Result: AuBC : 32 bit IEEE Quotient. +; Registers Used: +; flags +; +;-------------------------------------------------------------- + .def __fdiv + .assume adl=1 + +__fdiv equ 000278h diff --git a/frontends/calculator/CEdev/lib/shared/fpftol.src b/frontends/calculator/CEdev/lib/shared/fpftol.src new file mode 100644 index 0000000..bc4e01e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpftol.src @@ -0,0 +1,20 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; IEEE Single precision to long. +; +; INPUTS: abc: 32-bit IEEE Single precision. +; +; OUTPUTS: abc: 32-bit signed long. +; +;-------------------------------------------------------------- + .def __ftol + .assume adl=1 + +__ftol equ 00027Ch diff --git a/frontends/calculator/CEdev/lib/shared/fpltof.src b/frontends/calculator/CEdev/lib/shared/fpltof.src new file mode 100644 index 0000000..ba2e70f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpltof.src @@ -0,0 +1,20 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; Signed long to IEEE Single precision. +; +; INPUTS: AuBC 32-bit signed long. +; +; OUTPUTS: AuBC 32-bit IEEE Single precision. +; +;-------------------------------------------------------------- + .def __ltof + .assume adl=1 + +__ltof equ 000284h diff --git a/frontends/calculator/CEdev/lib/shared/fpmul.src b/frontends/calculator/CEdev/lib/shared/fpmul.src new file mode 100644 index 0000000..7b59483 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpmul.src @@ -0,0 +1,26 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;------------------------------------------------------------------------- +; IEEE Single precision multiply +; Input: +; Operand1: +; AuBC : 32 bit +; +; Operand2: +; EuHL : 32 bit +; +; Output: +; Result: AuBC : 32 bit +; Registers Used: +; flags +; +;------------------------------------------------------------------------- + .def __fmul + .assume adl=1 + +__fmul equ 000288h diff --git a/frontends/calculator/CEdev/lib/shared/fpneg.src b/frontends/calculator/CEdev/lib/shared/fpneg.src new file mode 100644 index 0000000..9de1421 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpneg.src @@ -0,0 +1,32 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; IEEE Negate. +; +; INPUTS: +; AuBC: 32-bit IEEE Single Precision. +; +; OUTPUTS: +; AuBC: 32-bit IEEE Single Precision. +; +;-------------------------------------------------------------- + .def __fneg + .assume adl=1 + +__fneg: + or a,a + jr nz,__noexit + push hl + sbc hl,hl + sbc hl,bc + pop hl + ret z +__noexit: + xor a,80h + ret diff --git a/frontends/calculator/CEdev/lib/shared/fppack.src b/frontends/calculator/CEdev/lib/shared/fppack.src new file mode 100644 index 0000000..fe14285 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fppack.src @@ -0,0 +1,28 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; Pack IEEE operand of dyadic operations. +; +; INPUTS: +; AuBC: 2s-comp mantissa+fraction (9+23 bit) +; E: Exponent. +; D: Sign. +; +; OUTPUTS: AuBC: 32 bit IEEE float. +; +; A AAAAAAB BBBBBBBBBBBBBBCCCCCCCCC +; S EEEEEEE FFFFFFFFFFFFFFFFFFFFFFF +; 0 1 8 9 31 +; MODIFIES: +; flags +;-------------------------------------------------------------- + .def __fppack + .assume adl=1 + +__fppack equ 00026Ch diff --git a/frontends/calculator/CEdev/lib/shared/fpsub.src b/frontends/calculator/CEdev/lib/shared/fpsub.src new file mode 100644 index 0000000..daaf034 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpsub.src @@ -0,0 +1,27 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; IEEE Single precision sub +; Input: +; Operand1: +; abc : 32 bit IEEE single precision +; +; Operand2: +; ehl : 32 bit IEEE single precision +; +; Output: +; Result: abc : 32 bit IEEE single precision (abc - ehl) +; Registers Used: + +;------------------------------------------------------------------------- + .def __fsub + .ref __fadd + .assume adl=1 + +__fsub equ 000290h diff --git a/frontends/calculator/CEdev/lib/shared/fpultof.src b/frontends/calculator/CEdev/lib/shared/fpultof.src new file mode 100644 index 0000000..45fe5f4 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpultof.src @@ -0,0 +1,22 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; Unsigned long to IEEE Single precision. +; +; INPUTS: +; abc: 32-bit unsigned long +; +; OUTPUTS: +; abc: IEEE Single precision. +; +;-------------------------------------------------------------- + .def __ultof + .assume adl=1 + +__ultof equ 000280h diff --git a/frontends/calculator/CEdev/lib/shared/fpupop1.src b/frontends/calculator/CEdev/lib/shared/fpupop1.src new file mode 100644 index 0000000..4a7064f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpupop1.src @@ -0,0 +1,48 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; Unpack IEEE op1 of dyadic operations. +; +; INPUTS: AuBC: 32bits +; +; A AAAAAAAB BBBBBBBBBBBBBBBCCCCCCCC +; S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF +; 0 1 8 9 31 +; +; OUTPUTS: uBC: Mantissa +; A: Exponent +; D: Sign Bit +; ZERO FLAG Set if op was zero. +; +; MODIFIES: +; flags +;-------------------------------------------------------------- + .def __fpupop1 + .assume adl=1 + +__fpupop1: + push ix + ld ix,0 + add ix,sp + push bc + rlc (ix-1) ;move high-bit to low-bit + scf + rr (ix-1) ;carry = exponent low-bit, high-bit = 1 + pop bc ;restore modified mantissa + rl a ;compute exponent, carry = sign + ld d,0 + jr nz,nzero ;skip if exponent non-zero + + ld bc,0 ;clear mantissa + or a,a ;clear carry +nzero: + rl d ;set 1 if negative operand + or a,a ;set Z/NZ + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/fpupop2.src b/frontends/calculator/CEdev/lib/shared/fpupop2.src new file mode 100644 index 0000000..8461f59 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpupop2.src @@ -0,0 +1,47 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; Unpack IEEE op2 of dyadic operations. +; +; INPUTS: EuHL: 32 bits +; +; E EEEEEEEH HHHHHHHHHHHHHHHLLLLLLLL +; S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF +; 0 1 8 9 31 +; +; OUTPUTS: uHL: Mantissa +; E: Exponent +; D: Sign Bit +; ZERO FLAG Set if op was zero. +; +; MODIFIES: +; flags +;-------------------------------------------------------------- + .def __fpupop2 + .assume adl=1 + +__fpupop2: + push bc + ld bc,0800000h + add hl,bc + jr nc,ncarry + add hl,bc + scf +ncarry: + ld d,c + pop bc + rl e + jr nz,nzero + or a,a + sbc hl,hl +nzero: + rl d + inc e + dec e + ret diff --git a/frontends/calculator/CEdev/lib/shared/frameset.src b/frontends/calculator/CEdev/lib/shared/frameset.src new file mode 100644 index 0000000..669a9d2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frameset.src @@ -0,0 +1,12 @@ + .assume adl=1 + .def __frameset + +__frameset: + pop de + push ix + ld ix,0 + add ix,sp + add hl,sp + ld sp,hl + ex de,hl + jp (hl) \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/frameset0.src b/frontends/calculator/CEdev/lib/shared/frameset0.src new file mode 100644 index 0000000..061a597 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frameset0.src @@ -0,0 +1,9 @@ + .assume adl=1 + .def __frameset0 + +__frameset0: + pop hl + push ix + ld ix,0 + add ix,sp + jp (hl) \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/frbmuls.src b/frontends/calculator/CEdev/lib/shared/frbmuls.src new file mode 100644 index 0000000..c415d42 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frbmuls.src @@ -0,0 +1,53 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract short Multiplication signed. +; +; Input: +; Operand1: +; H : 8 bits +; +; Operand2: +; L : 8 bits +; +; Output: +; Result: A : 8 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frbmuls + .assume adl=1 + +__frbmuls: + push hl + ;; + ;; Check sign info + ;; + xor a,a + rl h + jr nc,_L0 + sub a,h + ld h,a +_L0: + xor a,a + rl l + jr nc,_L1 + sub a,l + ld l,a +_L1: + mlt hl + ld a,h + pop hl + or a,a + rra + adc a,0h + push af + ld a,h + xor a,l + jp p,_L2 + pop af + neg + ret +_L2: + pop af + ret + diff --git a/frontends/calculator/CEdev/lib/shared/frbtof.src b/frontends/calculator/CEdev/lib/shared/frbtof.src new file mode 100644 index 0000000..1967abb --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frbtof.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract unsigned char to float conversion. +; +; Input: +; Operand1: +; A : 8 bits +; +; Output: +; Result: eHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frbtof + .assume adl=1 + +__frbtof equ 00029Ch diff --git a/frontends/calculator/CEdev/lib/shared/free.src b/frontends/calculator/CEdev/lib/shared/free.src new file mode 100644 index 0000000..4cf195e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/free.src @@ -0,0 +1,180 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FREE.C" + .assume ADL=1 + SEGMENT CODE +; 1 /***************************************************************/ +; 2 /* */ +; 3 /* Copyright (C) 2000-2008 Zilog, Inc. */ +; 4 /* */ +; 5 /* San Jose, California */ +; 6 /* */ +; 7 /***************************************************************/ +; 8 #include +; 9 +; 10 /************************************************* +; 11 * +; 12 * free - free up allocated memory +; 13 * +; 14 * Inputs: +; 15 * ap - pointer to allocated memory +; 16 * +; 17 * Returns: +; 18 * nothing +; 19 * +; 20 *************************************************/ +; 21 extern HEADER _alloc_base; +; 22 +; 23 void free(void *ap) { +_free: + LD HL,-21 + CALL __frameset +; 24 HEADER *p; +; 25 HEADER *q; +; 26 +; 27 if (!ap) { + LD HL,(IX+6) + CALL __icmpzero + JR Z,L_12 +; 28 return; +; 29 } +; 30 +; 31 q = (HEADER*)ap - 1; + LD IY,(IX+6) + LEA IY,IY+-6 + LD (IX+-3),IY +; 32 +; 33 for (p = &_alloc_base; p->s.ptr && p->s.ptr < q; p = p->s.ptr); + LD BC,__alloc_base + LD (IX+-15),BC + JR L_5 +L_3: + LD IY,(IX+-12) + LD BC,(IY+0) + LD (IX+-15),BC +L_5: + LD IY,(IX+-15) + LEA BC,IY+0 + LD (IX+-12),BC + LD (IX+-18),BC + LD IY,(IX+-12) + LD HL,(IY+0) + CALL __icmpzero + JR Z,L_8 + LD BC,(IX+-12) + LD (IX+-18),BC + LD BC,(IX+-3) + LD IY,(IX+-12) + LD HL,(IY+0) + OR A,A + SBC HL,BC + JR C,L_3 +L_8: +; 34 +; 35 /* join upper */ +; 36 if ((char*)p->s.ptr == ((char*)q) + q->s.size) { + LD BC,(IX+-18) + LD (IX+-9),BC + LD IY,(IX+-3) + LD BC,(IY+3) + LD HL,(IX+-3) + ADD HL,BC + LD IY,(IX+-9) + LD BC,(IY+0) + OR A,A + SBC HL,BC + JR NZ,L_7 +; 37 q->s.size += p->s.ptr->s.size; + LD IY,(IX+-9) + LD DE,(IY+0) + LD IY,(IX+-3) + LD BC,(IY+3) + LD IY,DE + LD HL,(IY+3) + ADD HL,BC + LD IY,(IX+-3) + LD (IY+3),HL +; 38 q->s.ptr = p->s.ptr->s.ptr; + LD BC,(IX+-9) + LD (IX+-21),BC + LD IY,(IX+-9) + LD IY,(IY+0) + LD BC,(IY+0) + LD IY,(IX+-3) + LD (IY+0),BC +; 39 } else { + JR L_11 +L_7: +; 40 q->s.ptr = p->s.ptr; + LD BC,(IX+-9) + LD (IX+-21),BC + LD IY,(IX+-9) + LD BC,(IY+0) + LD IY,(IX+-3) + LD (IY+0),BC +; 41 } +L_11: +; 42 +; 43 /* join lower */ +; 44 if (((char*)p) + p->s.size == (char*)q) { + LD BC,(IX+-21) + LD (IX+-6),BC + LD IY,(IX+-6) + LD BC,(IY+3) + LD HL,(IX+-15) + ADD HL,BC + OR A,A + LD BC,(IX+-3) + SBC HL,BC + JR NZ,L_10 +; 45 p->s.size += q->s.size; + LD IY,(IX+-6) + LD BC,(IY+3) + LD IY,(IX+-3) + LD HL,(IY+3) + ADD HL,BC + LD IY,(IX+-6) + LD (IY+3),HL +; 46 p->s.ptr = q->s.ptr; + LD IY,(IX+-3) + LD BC,(IY+0) + LD IY,(IX+-6) + LD (IY+0),BC +; 47 } else { + JR L_12 +L_10: +; 48 p->s.ptr = q; + LD BC,(IX+-3) + LD IY,(IX+-6) + LD (IY+0),BC +; 49 } +; 50 } +L_12: + LD SP,IX + POP IX + RET + + +;**************************** _free *************************** +;Name Addr/Register Size Type +;__alloc_base IMPORT 6 variable +;G_9 IX-21 3 variable +;G_2 IX-18 3 variable +;p IX-15 3 variable +;G_1 IX-12 3 variable +;G_5 IX-9 3 variable +;G_10 IX-6 3 variable +;q IX-3 3 variable +;ap IX+6 3 parameter + + +; Stack Frame Size: 30 (bytes) +; Spill Code: 0 (instruction) + + + XREF __alloc_base:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _free + END diff --git a/frontends/calculator/CEdev/lib/shared/frftob.src b/frontends/calculator/CEdev/lib/shared/frftob.src new file mode 100644 index 0000000..39065d8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frftob.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; float to fract char conversion. +; +; Input: +; Operand1: +; eHL : 32 bits +; +; Output: +; Result: A : 8 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frftob + .assume adl=1 + +__frftob equ 0002A0h diff --git a/frontends/calculator/CEdev/lib/shared/frftoi.src b/frontends/calculator/CEdev/lib/shared/frftoi.src new file mode 100644 index 0000000..048c298 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frftoi.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; float to fract integer conversion. +; +; Input: +; Operand1: +; eHL : 32 bits +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frftoi + .assume adl=1 + +__frftoi equ 0002A8h diff --git a/frontends/calculator/CEdev/lib/shared/frftos.src b/frontends/calculator/CEdev/lib/shared/frftos.src new file mode 100644 index 0000000..b2f71b1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frftos.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; float to fract short conversion. +; +; Input: +; Operand1: +; eHL : 32 bits +; +; Output: +; Result: HL : 16 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frftos + .assume adl=1 + +__frftos equ 0002B0h diff --git a/frontends/calculator/CEdev/lib/shared/frftoub.src b/frontends/calculator/CEdev/lib/shared/frftoub.src new file mode 100644 index 0000000..e07b750 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frftoub.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; float to fract unsigned char conversion. +; +; Input: +; Operand1: +; eHL : 32 bits +; +; Output: +; Result: A : 8 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frftoub + .assume adl=1 + +__frftoub equ 0002A4h diff --git a/frontends/calculator/CEdev/lib/shared/frftoui.src b/frontends/calculator/CEdev/lib/shared/frftoui.src new file mode 100644 index 0000000..07ef9c0 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frftoui.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; float to fract unsigned integer conversion. +; +; Input: +; Operand1: +; eHL : 32 bits +; +; Output: +; Result: HL : 24 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frftoui + .assume adl=1 + +__frftoui equ 0002ACh diff --git a/frontends/calculator/CEdev/lib/shared/frftous.src b/frontends/calculator/CEdev/lib/shared/frftous.src new file mode 100644 index 0000000..0fbb6b2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frftous.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; float to fract unsigned short conversion. +; +; Input: +; Operand1: +; eHL : 32 bits +; +; Output: +; Result: HL : 16 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frftous + .assume adl=1 + +__frftous equ 0002B4h diff --git a/frontends/calculator/CEdev/lib/shared/frimuls.src b/frontends/calculator/CEdev/lib/shared/frimuls.src new file mode 100644 index 0000000..955d658 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frimuls.src @@ -0,0 +1,81 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract interger Multiplication Unsigned. +; +; Input: +; Operand1: +; uHL : 24 bits +; +; Operand2: +; uBC : 24 bits +; +; Output: +; Result: uHL : 24 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .assume adl=1 + .def __frimuls + .ref __frimulu + +__frimuls: + push af + push de + push bc + push hl + ;; + ;; Check sign info + ;; + add hl,hl + jr nc,_L0 + ex de,hl + or a,a + sbc hl,hl + sbc hl,de +_L0: + ex de,hl + or a,a + sbc hl,hl + add hl,bc + add hl,hl + jr nc,_L1 + or a,a + sbc hl,hl + sbc hl,bc + add hl,hl +_L1: + ld bc,hl + ex de,hl + call __frimulu + push hl + ex de,hl + ld hl,2 + add hl,sp + rr (hl) + rr d + rr e + pop hl + ld h,d + ld l,e + ;; + ;; Check signs + ;; + ex de,hl + ld hl,2 + add hl,sp + ld a,(hl) + inc hl + ld sp,hl + inc hl + inc hl + xor a,(hl) + jp p,_L2 + sbc hl,hl + sbc hl,de + ex de,hl +_L2: + ex de,hl + pop bc + pop de + pop af + ret diff --git a/frontends/calculator/CEdev/lib/shared/frimulu.src b/frontends/calculator/CEdev/lib/shared/frimulu.src new file mode 100644 index 0000000..d008a49 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frimulu.src @@ -0,0 +1,112 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract interger Multiplication Unsigned. +; +; Input: +; Operand1: +; uHL : 24 bits +; +; Operand2: +; uBC : 24 bits +; +; Output: +; Result: uHL : 24 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .assume adl=1 + .def __frimulu + +__frimulu: + push af + push de + push iy + push bc + push hl + ld d,l + ld e,c + mlt de + ld a,d + ld d,h + ld e,b + ld b,h + ld h,e + mlt hl + mlt bc + mlt de + add a,c + ld c,a + ld a,b + adc a,0h + ld b,a + add.s hl,bc + jr nc,_L0 + inc d +_L0: + ld iy,0h + add iy,sp + ld b,(iy+2) + ld c,(iy+5) + mlt bc + ld a,h + add a,e + ld e,a + jr nc,_L1 + inc d + jr nz,_L1 + inc bc +_L1: + ld h,(iy+2) + ld l,(iy+3) + mlt hl + + ld a,l ;approximation + add a,80h + ld l,a + ld a,h + adc a,0h + ld h,a + + add.s hl,de + jr nc,_L2 + inc bc +_L2: + ld d,(iy+0) + ld e,(iy+5) + mlt de + add.s hl,de + jr nc,_L3 + inc bc +_L3: + ld a,h + ld d,(iy+2) + ld e,(iy+4) + ld h,(iy+1) + ld l,(iy+5) + mlt de + mlt hl + add.s hl,de + jr nc,_L4 + inc b +_L4: + add a,l + ld l,a + ld a,h + adc a,c + ld h,a + jr nc,_L5 + inc b +_L5: + ex de,hl + push bc + dec sp + pop hl + inc sp + ld h,d + ld l,e + pop bc + pop bc + pop iy + pop de + pop af + ret diff --git a/frontends/calculator/CEdev/lib/shared/fritof.src b/frontends/calculator/CEdev/lib/shared/fritof.src new file mode 100644 index 0000000..d35fb32 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fritof.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract integer to float conversion. +; +; Input: +; Operand1: +; HL : 24 bits +; +; Output: +; Result: eHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __fritof + .assume adl=1 + +__fritof equ 0002B8h diff --git a/frontends/calculator/CEdev/lib/shared/frsmuls.src b/frontends/calculator/CEdev/lib/shared/frsmuls.src new file mode 100644 index 0000000..b337a01 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frsmuls.src @@ -0,0 +1,61 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract short Multiplication signed. +; +; Input: +; Operand1: +; HL : 16 bits +; +; Operand2: +; BC : 16 bits +; +; Output: +; Result: HL : 16 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .assume adl=1 + .def __frsmuls + .ref __frsmulu + +__frsmuls: + push af + push de + push bc + push hl + ;; + ;; Check sign info + ;; + add.s hl,hl + jr nc,_L0 + ex de,hl + or a,a + sbc hl,hl + sbc hl,de +_L0: + rl c + rl b + jr nc,_L1 + ex de,hl + or a,a + sbc hl,hl + sbc hl,bc + ld b,h + ld c,l + ex de,hl +_L1: + call __frsmulu + srl h + rr l + pop af + pop bc + xor a,b + jp p,_L2 + ex de,hl + sbc hl,hl + sbc hl,de +_L2: + pop de + pop af + ret + diff --git a/frontends/calculator/CEdev/lib/shared/frsmulu.src b/frontends/calculator/CEdev/lib/shared/frsmulu.src new file mode 100644 index 0000000..ca9e7f6 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frsmulu.src @@ -0,0 +1,51 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract interger Multiplication Unsigned. +; +; Input: +; Operand1: +; HL : 16 bits +; +; Operand2: +; BC : 16 bits +; +; Output: +; Result: HL : 16 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frsmulu + .assume adl=1 + +__frsmulu: + push af + push de + push bc + ld d,l + ld e,c + mlt de + ld a,d + ld d,h + ld e,b + ld b,h + ld h,e + mlt hl + mlt bc + mlt de + add a,c + jr nc,_L0 + inc de +_L0: + ld c,a + xor a,a + add hl,bc + adc a,d + ld d,a + ld l,h + ld h,0h + ex de,hl + add hl,de + pop bc + pop de + pop af + ret diff --git a/frontends/calculator/CEdev/lib/shared/frstof.src b/frontends/calculator/CEdev/lib/shared/frstof.src new file mode 100644 index 0000000..a5e8003 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frstof.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract short to float conversion. +; +; Input: +; Operand1: +; HL : 24 bits +; +; Output: +; Result: eHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frstof + .assume adl=1 + +__frstof equ 0002C0h diff --git a/frontends/calculator/CEdev/lib/shared/frubtof.src b/frontends/calculator/CEdev/lib/shared/frubtof.src new file mode 100644 index 0000000..7a2a234 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frubtof.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract unsigned char to float conversion. +; +; Input: +; Operand1: +; A : 8 bits +; +; Output: +; Result: eHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frubtof + .assume adl=1 + +__frubtof equ 0002C4h diff --git a/frontends/calculator/CEdev/lib/shared/fruitof.src b/frontends/calculator/CEdev/lib/shared/fruitof.src new file mode 100644 index 0000000..a173276 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fruitof.src @@ -0,0 +1,17 @@ +; (c) Copyright 2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract unsigned integer to float conversion. +; +; Input: +; Operand1: +; HL : 24 bits +; +; Output: +; Result: eHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __fruitof + .assume adl=1 + +__fruitof equ 0002BCh diff --git a/frontends/calculator/CEdev/lib/shared/frustof.src b/frontends/calculator/CEdev/lib/shared/frustof.src new file mode 100644 index 0000000..4cf0ba8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frustof.src @@ -0,0 +1,17 @@ +; (c) Copyright 2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract unsigned short to float conversion. +; +; Input: +; Operand1: +; HL : 16 bits +; +; Output: +; Result: eHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frustof + .assume adl=1 + +__frustof equ 0002C8h diff --git a/frontends/calculator/CEdev/lib/shared/gamma.src b/frontends/calculator/CEdev/lib/shared/gamma.src new file mode 100644 index 0000000..a86cc0f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/gamma.src @@ -0,0 +1,439 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\GAMMA.C" + .assume ADL=1 + SEGMENT CODE +; 1 /* +; 2 * gamma.c - public domain implementation of function tgamma(3m) +; 3 * reference - Haruhiko Okumura: C-gengo niyoru saishin algorithm jiten +; 4 * (New Algorithm handbook in C language) (Gijyutsu hyouronsha, Tokyo, 1991) [in Japanese] +; 5 * http://oku.edu.mie-u.ac.jp/~okumura/algo/ +; 6 */ +; 7 +; 8 #include +; 9 #include +; 10 +; 11 #define N 8 +; 12 +; 13 #define B0 1 /* Bernoulli numbers */ +; 14 #define B1 (-1.0 / 2.0) +; 15 #define B2 ( 1.0 / 6.0) +; 16 #define B4 (-1.0 / 30.0) +; 17 #define B6 ( 1.0 / 42.0) +; 18 #define B8 (-1.0 / 30.0) +; 19 #define B10 ( 5.0 / 66.0) +; 20 #define B12 (-691.0 / 2730.0) +; 21 #define B14 ( 7.0 / 6.0) +; 22 #define B16 (-3617.0 / 510.0) +; 23 +; 24 static double loggamma(double x) { /* the natural logarithm of the Gamma function. */ +_loggamma: + LD HL,-22 + CALL __frameset +; 25 double v, w; +; 26 +; 27 v = 1; + LD BC,8388608 + LD (IX+-8),BC + LD A,63 + LD (IX+-5),A +; 28 while (x < N) { v *= x; x++; } + JR L_1 +L_2: + LD HL,(IX+6) + LD E,(IX+9) + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __fmul + LD (IX+-8),BC + LD (IX+-5),A + LD BC,(IX+6) + LD A,(IX+9) + LD HL,8388608 + LD E,63 + CALL __fadd + LD (IX+6),BC + LD (IX+9),A +L_1: + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + LD A,65 + CALL __fcmp + JP M,L_2 +; 29 w = 1 / (x * x); + LD HL,(IX+6) + LD E,(IX+9) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fmul + LD E,A + LD HL,BC + LD BC,8388608 + LD A,63 + CALL __fdiv + LD (IX+-4),BC + LD (IX+-1),A +; 30 return ((((((((B16 / (16 * 15)) * w + (B14 / (14 * 13))) * w +; 31 + (B12 / (12 * 11))) * w + (B10 / (10 * 9))) * w +; 32 + (B8 / ( 8 * 7))) * w + (B6 / ( 6 * 5))) * w +; 33 + (B4 / ( 4 * 3))) * w + (B2 / ( 2 * 1))) / x +; 34 + 0.5 * M_LOG_2M_PI - log(v) - x + (x - 0.5) * log(x); + LD HL,15864886 + LD E,188 + CALL __fmul + LD HL,13765920 + LD E,59 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,16471432 + LD E,186 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,6072562 + LD E,58 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,1837505 + LD E,186 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,5246209 + LD E,58 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,3541857 + LD E,187 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,11184811 + LD E,61 + CALL __fadd + LD HL,(IX+6) + LD E,(IX+9) + CALL __fdiv + LD HL,7028622 + LD E,63 + CALL __fadd + LD (IX+-12),BC + LD C,(IX+-5) + LD B,0 + PUSH BC + LD BC,(IX+-8) + PUSH BC + LD (IX+-9),A + CALL _log + POP BC + POP BC + LD A,E + LD BC,HL + LD HL,(IX+6) + LD E,(IX+9) + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+-12) + LD A,(IX+-9) + CALL __fsub + LD (IX+-19),A + LD (IX+-18),BC + LD BC,(IX+6) + LD A,(IX+9) + OR A,A + SBC HL,HL + LD E,63 + CALL __fsub + LD (IX+-15),BC + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + LD B,A + LD (IX+-22),BC + CALL _log + LD BC,(IX+-22) + POP IY + POP IY + LD A,B + LD BC,(IX+-15) + CALL __fmul + LD E,A + LD A,(IX+-19) + LD HL,BC + LD BC,(IX+-18) + CALL __fadd + LD E,A + LD HL,BC +; 35 } + LD SP,IX + POP IX + RET + + +;**************************** _loggamma *************************** +;Name Addr/Register Size Type +;_log IMPORT ----- function +;v IX-8 4 variable +;w IX-4 4 variable +;x IX+6 4 parameter + + +; Stack Frame Size: 34 (bytes) +; Spill Code: 0 (instruction) + + +; 36 +; 37 double tgamma(double x) { /* Gamma function */ +_tgamma: + LD HL,-26 + CALL __frameset +; 38 if (x == 0.0) { /* Pole Error */ + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JR NZ,L_17 +; 39 errno = ERANGE; + LD BC,5 + LD (_errno),BC +; 40 return 1/x < 0 ? -HUGE_VAL : HUGE_VAL; + LD HL,(IX+6) + LD E,(IX+9) + LD BC,8388608 + LD A,63 + CALL __fdiv + LD E,A + LD HL,BC + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_7 + LD BC,(__huge_val) + LD A,(__huge_val+3) + CALL __fneg + LD (IX+-14),BC + LD (IX+-11),A + JR L_8 +L_7: + LD BC,(__huge_val) + LD A,(__huge_val+3) + LD (IX+-14),BC + LD (IX+-11),A +L_8: + LD HL,(IX+-14) + LD E,(IX+-11) + JR L_19 +; 41 } +L_17: +; 42 if (x < 0) { + LD HL,(IX+6) + LD E,(IX+9) + XOR A,A + CALL __fcmp + JP P,L_18 +; 43 int sign; +; 44 static double zero = 0.0; +; 45 double i, f; +; 46 f = modf(-x, &i); + PEA IX+-18 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _modf + POP BC + POP BC + POP BC + LD (IX+-10),HL + LD (IX+-7),E +; 47 if (f == 0.0) { /* Domain Error */ + LD HL,(IX+-10) + LD E,(IX+-7) + LD BC,0 + XOR A,A + CALL __fcmp + JR NZ,L_15 +; 48 errno = EDOM; + LD BC,4 + LD (_errno),BC +; 49 return zero/zero; + LD HL,(_0zero) + LD A,(_0zero+3) + LD E,A + LD A,(_0zero+3) + LD BC,(_0zero) + CALL __fdiv + LD E,A + LD HL,BC + JR L_19 +; 50 } +L_15: +; 51 sign = (fmod(i, 2.0) != 0.0) ? 1 : -1; + LD C,64 + LD B,0 + PUSH BC + LD BC,0 + PUSH BC + LD C,(IX+-15) + LD B,0 + PUSH BC + LD BC,(IX+-18) + PUSH BC + CALL _fmod + POP BC + POP BC + POP BC + POP BC + LD BC,0 + XOR A,A + CALL __fcmp + JR Z,L_13 + LD BC,1 + LD (IX+-3),BC + JR L_14 +L_13: + LD BC,16777215 + LD (IX+-3),BC +L_14: + LD BC,(IX+-3) + LD (IX+-6),BC +; 52 return sign * M_PI / (sin(M_PI * f) * exp(loggamma(1 - x))); + CALL __itol + CALL __ltof + LD HL,4788187 + LD E,64 + CALL __fmul + LD (IX+-22),A + LD (IX+-21),BC + LD BC,(IX+-10) + LD A,(IX+-7) + LD HL,4788187 + LD E,64 + CALL __fmul + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _sin + POP BC + POP BC + LD (IX+-26),E + LD (IX+-25),HL + LD HL,(IX+6) + LD E,(IX+9) + LD BC,8388608 + LD A,63 + CALL __fsub + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _loggamma + POP BC + POP BC + LD C,E + LD B,0 + PUSH BC + PUSH HL + CALL _exp + POP BC + POP BC + LD A,(IX+-26) + LD BC,(IX+-25) + CALL __fmul + LD E,A + LD A,(IX+-22) + LD HL,BC + LD BC,(IX+-21) + CALL __fdiv + LD E,A + LD HL,BC + JR L_19 +; 53 } +L_18: +; 54 return exp(loggamma(x)); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _loggamma + POP BC + POP BC + LD C,E + LD B,0 + PUSH BC + PUSH HL + CALL _exp + POP BC + POP BC +; 55 } +L_19: + LD SP,IX + POP IX + RET + + +;**************************** _tgamma *************************** +;Name Addr/Register Size Type +;_exp IMPORT ----- function +;_sin IMPORT ----- function +;_fmod IMPORT ----- function +;_0zero STATIC 4 variable +;_modf IMPORT ----- function +;__huge_val IMPORT 4 variable +;_errno IMPORT 3 variable +;i IX-18 4 variable +;temp5 IX-14 4 variable +;f IX-10 4 variable +;sign IX-6 3 variable +;temp11 IX-3 3 variable +;x IX+6 4 parameter + + +; Stack Frame Size: 38 (bytes) +; Spill Code: 0 (instruction) + + + SEGMENT DATA +_0zero: + DF 0.0 + XREF _errno:ROM + XREF _modf:ROM + XREF _fmod:ROM + XREF _log:ROM + XREF _exp:ROM + XREF _sin:ROM + XREF __huge_val:ROM + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __ltof:ROM + XREF __itol:ROM + XREF __frameset:ROM + XDEF _tgamma + END diff --git a/frontends/calculator/CEdev/lib/shared/getstringinput.src b/frontends/calculator/CEdev/lib/shared/getstringinput.src new file mode 100644 index 0000000..b3282c3 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/getstringinput.src @@ -0,0 +1,136 @@ +; --- +; void os_GetStringInput(char *string, char *buf, size_t size) +; --- + + .def _os_GetStringInput + .assume adl=1 + +kUp := 3 +kLeft := 2 +kDown := 4 +kEnter := 5 +kClear := 9 +kRight := 1 +curLock := 4 +flags := $D00080 +curRow := $D00595 +curUnder := $D00599 +_PutS := $207C0 +_PutC := $207B8 +_PutPS := $207C8 +_GetKey := $20D8C +_CursorOn := $208B0 +_CursorOff := $208A8 +_PullDownChk := $208BC +_ConvKeyToTok := $20E40 +_GetTokString := $20874 +_PutTokString := $20D74 + +_os_GetStringInput: + push ix + ld ix,0 + add ix,sp + ld hl,(ix+6) ; hl -> input string prompt + add hl,de + xor a,a + sbc hl,de + jr z,__nodisp + ld iy,flags + call _PutS +__nodisp: + ld hl,(curRow) + ld (__savecur),hl + ld a,(ix+12) + dec a + ld (ix+12),a + ld (ix+6),a +__start: + ld de,(ix+9) +__loop: + ld a,' ' + ld (curUnder),a + push de + push ix + call _CursorOn +__getkey: + call _GetKey + call _CursorOff + call _PullDownChk + call _CursorOn + jr c,__getkey + cp a,kLeft + jr z,__loop + cp a,kDown + jr z,__loop + cp a,kRight + jr z,__loop + cp a,kUp + jr z,__loop + cp a,kClear + jr z,__clearpop + cp a,kEnter + jr z,__done + call _ConvKeyToTok + call _GetTokString + pop ix + pop de + ld b,(hl) + inc hl + ld a,(ix+12) + sub a,b + jr nc,__notfull + ld b,(ix+12) + xor a,a +__notfull: + ld (ix+12),a +__draw: + ld a,(hl) + ld (de),a + inc hl + inc de + call _PutC + djnz __draw + ld a,(ix+12) + or a,a + jr nz,__loop +__full: + ld a,' ' + ld (curUnder),a + call _GetKey + cp a,kClear + jr z,__clear + cp a,kEnter + jr z,__exit + jr __full +__clearpop: + pop ix + pop de +__clear: +__savecur := $+1 + ld hl,0 + ld (curRow),hl + ld a,(ix+6) + ld b,(ix+12) + ld (ix+12),a + sub a,b + ld b,a + inc b +__clearloop: + ld a,' ' + call _PutC + djnz __clearloop + ld hl,(__savecur) + ld (curRow),hl + jr __start +__done: + pop ix + pop de +__exit: + ld a,' ' + ld (curUnder),a + xor a,a + ld (de),a + call _CursorOff + di + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/iand.src b/frontends/calculator/CEdev/lib/shared/iand.src new file mode 100644 index 0000000..79d731c --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/iand.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer AND. +; Input: +; Operand1: +; hl : 24 bit +; +; Operand2: +; bc : 24 bit +; +; Output: +; Result: hl : 24 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __iand + .assume adl=1 + +__iand equ 000134h diff --git a/frontends/calculator/CEdev/lib/shared/icmpzero.src b/frontends/calculator/CEdev/lib/shared/icmpzero.src new file mode 100644 index 0000000..fced974 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/icmpzero.src @@ -0,0 +1,20 @@ +; (c) Copyright 2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Set flag for comparison of 24-bit scalar with constant value zero +; Input: +; Operand1: HL register +; +; Output: +; Result: f register +; +; Registers Used: +; None +;------------------------------------------------------------------------- + .def __icmpzero + .assume adl=1 + +__icmpzero: + add hl,de + or a,a + sbc hl,de + ret diff --git a/frontends/calculator/CEdev/lib/shared/idivs.src b/frontends/calculator/CEdev/lib/shared/idivs.src new file mode 100644 index 0000000..1c7bba1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/idivs.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Signed Integer Division +; Input: +; Operand1: +; hl : 24 bits (dividend x) +; +; Operand2: +; bc : 24 bits (divisor y) +; +; Output: +; Result: hl : 24 bits +; +; Registers Used: +; a, de +;------------------------------------------------------------------------- + .def __idivs + .assume adl=1 + +__idivs equ 00013Ch diff --git a/frontends/calculator/CEdev/lib/shared/idivu.src b/frontends/calculator/CEdev/lib/shared/idivu.src new file mode 100644 index 0000000..6fdcacc --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/idivu.src @@ -0,0 +1,21 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Unsigned Integer Division. +; Input: +; Operand1: +; uHL : 24 bit dividend +; +; Operand2: +; uBC : 24 bit divisor +; +; Output: +; Result: uHL: 24 bit quotient +; +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __idivu,__idvrmu + .assume adl=1 + +__idivu equ 000140h +__idvrmu equ 000144h diff --git a/frontends/calculator/CEdev/lib/shared/ildix.src b/frontends/calculator/CEdev/lib/shared/ildix.src new file mode 100644 index 0000000..8702ff5 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ildix.src @@ -0,0 +1,17 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer load hl,(ix+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from ix +; +; Output: +; Result: hl : 24 bit +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __ildix + .assume adl=1 + +__ildix equ 000148h diff --git a/frontends/calculator/CEdev/lib/shared/ildiy.src b/frontends/calculator/CEdev/lib/shared/ildiy.src new file mode 100644 index 0000000..3883f15 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ildiy.src @@ -0,0 +1,17 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer load hl,(iy+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from iy +; +; Output: +; Result: hl : 24 bit +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __ildiy + .assume adl=1 + +__ildiy equ 00014Ch diff --git a/frontends/calculator/CEdev/lib/shared/imuls.src b/frontends/calculator/CEdev/lib/shared/imuls.src new file mode 100644 index 0000000..6d70bc3 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/imuls.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer Multiplication Signed. +; Input: +; Operand1: +; BC : 24 bits +; +; Operand2: +; HL : 24 bits +; +; Output: +; Result: hl : 24 bit +; Registers Used: +; de,af +;------------------------------------------------------------------------- + .def __imuls + .assume adl=1 + +__imuls equ 000154h diff --git a/frontends/calculator/CEdev/lib/shared/imulu.src b/frontends/calculator/CEdev/lib/shared/imulu.src new file mode 100644 index 0000000..fd9c068 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/imulu.src @@ -0,0 +1,24 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer Multiplication Unsigned. +; Note: When multipying two n-bit values, the low-order n-bits +; of the product are the same, whether or not the values +; are considered signed or unsigned. +; Input: +; Operand1: +; uHL : 24 bits +; +; Operand2: +; uBC : 24 bits +; +; Output: +; Result: uHL : 24 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __imulu,__imul_b + .assume adl=1 + +__imul_b equ 000150h +__imulu equ 000158h + diff --git a/frontends/calculator/CEdev/lib/shared/indcall.src b/frontends/calculator/CEdev/lib/shared/indcall.src new file mode 100644 index 0000000..5f5a122 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/indcall.src @@ -0,0 +1,14 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Indirect Call +; Input: +; Operand1: +; iy : 24 bit +; +; Output: +; Registers Used: +;------------------------------------------------------------------------- + .def __indcall + .assume adl=1 + +__indcall equ 00015Ch diff --git a/frontends/calculator/CEdev/lib/shared/ineg.src b/frontends/calculator/CEdev/lib/shared/ineg.src new file mode 100644 index 0000000..4bb0b46 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ineg.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer/short NEG. +; Input: +; Operand1: +; hl : 24/16 bit +; +; Output: +; Result: hl : 24/16 bit ( 0 - hl) +; Registers Used: +; a,de +;------------------------------------------------------------------------- + .def __ineg + .assume adl=1 + +__ineg equ 000160h diff --git a/frontends/calculator/CEdev/lib/shared/inot.src b/frontends/calculator/CEdev/lib/shared/inot.src new file mode 100644 index 0000000..8fcf888 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/inot.src @@ -0,0 +1,15 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer/Short NOT. +; Input: +; Operand1: +; hl : 24/16 bit +; +; Output: +; Result: hl : 24/16 bit +; Registers Used: +;------------------------------------------------------------------------- + .def __inot + .assume adl=1 + +__inot equ 000164h diff --git a/frontends/calculator/CEdev/lib/shared/interrupts.src b/frontends/calculator/CEdev/lib/shared/interrupts.src new file mode 100644 index 0000000..64d30d5 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/interrupts.src @@ -0,0 +1,142 @@ + .def _int_Initialize + .def _int_Handler + .def _int_SetVector + .def _int_Reset + .assume adl=1 + +;------------------------------------------------------------------------------- +; Interrupts equates +mpIntStatus equ 0F00000h +mpIntMask equ 0F00004h +mpIntAck equ 0F00008h +mpIntLachEnable equ 0F0000Ch +mpIntXor equ 0F00010h +mpIntStatusMasked equ 0F00014h + +intOnKey equ 1 +intTimer1 equ 2 +intTimer2 equ 4 +intTimer3 equ 8 +intOsTimer equ 10h +intKbd equ 400h +intLcd equ 800h +intRtc equ 1000h + +;------------------------------------------------------------------------------- +_int_Initialize: + di + ld de,lconf + ld hl,mpIntMask + ld bc,16 + ldir + ld hl,cconf + ld de,mpIntMask + ld bc,16 + ldir + ld hl,0D18879h + ld de,0C90611h + ld (hl),de + dec hl + ld (hl),0EDh + push hl + inc d + call 0D18878h + ld hl, 0E10010h | ((_int_Handler >> 8) & 000FF00h) + ld de, 0C3h | ((_int_Handler << 8) & 0FFFF00h) + ld (hl),h + inc hl + ld (hl),de + ld hl,0E30800h + ld bc,0401h + ld a,0E1h + call 00210E0h ; _Memset + ld hl,0E308h + ld i,hl + im 2 + ld d,3 + ret + +_int_Handler: + ex af,af' + exx + ld hl,(mpIntStatusMasked) + add hl,hl + inc hl + add hl,hl + xor a,a +isr_loop: + inc a + add hl,hl + jr nc,isr_loop +identified: + dec a + add a,a + add a,a + ld (isr_dispatch_smc+1),a + exx + ex af, af' +isr_dispatch_smc: + jr $+2 +iv_list: + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt +unhandledInt: + ei + ret + +;------------------------------------------------------------------------------- +_int_SetVector: + ld iy,0 + add iy,sp + ld a,21 + ld l,(iy+3) + sub a,l + ld l,a + ld h,4 + mlt hl + ld de,iv_list+1 + add hl,de + ld de,(iy+6) + ld (hl),de + ret + +;------------------------------------------------------------------------------- +_int_Reset: + di + ld hl, lconf + ld de, mpIntMask + ld bc, 16 + ldir + im 1 + ret + segment bss +lconf: ds 16 + segment data +cconf: ; Mask + db 000h,000h,000h,000h + ; ACK + db 0FFh,0FFh,0FFh,0FFh + ; Latch + db 000h,000h,000h,000h + ; Invert + db 000h,000h,000h,000h diff --git a/frontends/calculator/CEdev/lib/shared/ior.src b/frontends/calculator/CEdev/lib/shared/ior.src new file mode 100644 index 0000000..0edcd5a --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ior.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer OR. +; Input: +; Operand1: +; HL : 24 bit +; +; Operand2: +; BC : 24 bit +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __ior + .assume adl=1 + +__ior equ 000168h diff --git a/frontends/calculator/CEdev/lib/shared/irems.src b/frontends/calculator/CEdev/lib/shared/irems.src new file mode 100644 index 0000000..ef4c8d7 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/irems.src @@ -0,0 +1,19 @@ +; (c) Copyright 1999-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer Modulus Signed. +; Input: +; Operand1: +; HL : 24 bits (dividend) +; +; Operand2: +; BC : 24 bits (divisor) +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; de,af +;------------------------------------------------------------------------- + .def __irems + .assume adl=1 + +__irems equ 00016Ch diff --git a/frontends/calculator/CEdev/lib/shared/iremu.src b/frontends/calculator/CEdev/lib/shared/iremu.src new file mode 100644 index 0000000..dac22a0 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/iremu.src @@ -0,0 +1,21 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Unsigned Integer Modulus +; Input: +; Operand1: +; uHL : 24 bits (dividend x) +; +; Operand2: +; uBC : 24 bits (divisor y) +; +; Output: +; Result: uHL : 24 bits (remainder) +; +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __iremu + .assume adl=1 + +__iremu equ 000170h + diff --git a/frontends/calculator/CEdev/lib/shared/isalnum.src b/frontends/calculator/CEdev/lib/shared/isalnum.src new file mode 100644 index 0000000..12c28a1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isalnum.src @@ -0,0 +1,28 @@ + .def _isalnum + .ref ___maptab + .assume adl=1 + +; original source +; int isalnum(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(UC|LC|DIG)); +; } + +_isalnum: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,13 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/isalpha.src b/frontends/calculator/CEdev/lib/shared/isalpha.src new file mode 100644 index 0000000..94627ba --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isalpha.src @@ -0,0 +1,27 @@ + .def _isalpha + .ref ___maptab + .assume adl=1 + +; original source +; int isalnum(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(UC|LC)); + +_isalpha: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,12 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/isascii.src b/frontends/calculator/CEdev/lib/shared/isascii.src new file mode 100644 index 0000000..0c88ffb --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isascii.src @@ -0,0 +1,19 @@ + .def _isascii + .assume adl=1 + +; original source +; int isascii(int c) { +; return c >= 0 && c < 128; +; } + +_isascii: + pop de + pop hl + push hl + push de + + ld de,-128 + add hl,de + sbc hl,hl + inc hl + ret diff --git a/frontends/calculator/CEdev/lib/shared/iscntrl.src b/frontends/calculator/CEdev/lib/shared/iscntrl.src new file mode 100644 index 0000000..a8e7864 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/iscntrl.src @@ -0,0 +1,27 @@ + .def _iscntrl + .ref ___maptab + .assume adl=1 + +;int iscntrl(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(CTL)); +;} + +_iscntrl: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,128 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/isdigit.src b/frontends/calculator/CEdev/lib/shared/isdigit.src new file mode 100644 index 0000000..bbd555a --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isdigit.src @@ -0,0 +1,27 @@ + .def _isdigit + .ref ___maptab + .assume adl=1 + +;int isdigit(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(DIG)); +;} + +_isdigit: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,1 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/isgraph.src b/frontends/calculator/CEdev/lib/shared/isgraph.src new file mode 100644 index 0000000..59bc61e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isgraph.src @@ -0,0 +1,28 @@ + .def _isgraph + .ref ___maptab + .assume adl=1 + +; original source +; int isgraph(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(UC|LC|DIG|PUN)); +; } + +_isgraph: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,15 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/ishl.src b/frontends/calculator/CEdev/lib/shared/ishl.src new file mode 100644 index 0000000..b9a7347 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ishl.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer Shift Left +; Input: +; Operand1: +; BC : 24 bit number of bits to shift +; Asuume B=0 C=shift count +; Operand2: +; HL : 24 bit value to be shifted by C +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __ishl, __ishl_b + .assume adl=1 + +__ishl_b equ 000178h +__ishl equ 000174h diff --git a/frontends/calculator/CEdev/lib/shared/ishrs.src b/frontends/calculator/CEdev/lib/shared/ishrs.src new file mode 100644 index 0000000..79125e7 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ishrs.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer Shift Right Signed +; Input: +; Operand1: +; BC : 24 bit number of bits to shift +; Assume B=0 C=shift count +; Operand2: +; HL : 24 bit value to be shifted by C +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __ishrs, __ishrs_b + .assume adl=1 + +__ishrs_b equ 000180h +__ishrs equ 00017Ch diff --git a/frontends/calculator/CEdev/lib/shared/ishru.src b/frontends/calculator/CEdev/lib/shared/ishru.src new file mode 100644 index 0000000..ed190d4 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ishru.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer Shift Right Unsigned +; Input: +; Operand1: +; BC : 24 bit number of bits to shift +; Assume B=0 C=shift count +; Operand2: +; HL : 24 bit value to be shifted by C +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __ishru, __ishru_b + .assume adl=1 + +__ishru_b equ 000188h +__ishru equ 000184h \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/isinf.src b/frontends/calculator/CEdev/lib/shared/isinf.src new file mode 100644 index 0000000..1c0c46b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isinf.src @@ -0,0 +1,20 @@ + .ref __frameset0 + .def _isinf + .assume adl=1 + +; int isinf(double n); + +_isinf: + call __frameset0 + ld hl,(ix+6) + adc hl,hl + jr nz,l_1 + ld hl,(ix+8) + add hl,hl + inc h +l_1: ld hl,0 + jr nz,l_2 + inc hl +l_2: ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/islower.src b/frontends/calculator/CEdev/lib/shared/islower.src new file mode 100644 index 0000000..3f72f9c --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/islower.src @@ -0,0 +1,29 @@ + .def _islower + .ref ___maptab + .assume adl=1 + +; original source +; int islower(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(LC)); +; } + +_islower: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + ld a,e + and a,128 + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,4 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/isnan.src b/frontends/calculator/CEdev/lib/shared/isnan.src new file mode 100644 index 0000000..129bf69 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isnan.src @@ -0,0 +1,20 @@ + .ref __frameset0 + .def _isnan + .assume adl=1 + +; int isnan(double n); + +_isnan: + call __frameset0 + ld hl,(ix+6) + adc hl,hl + jr z,l_1 + ld hl,(ix+8) + add hl,hl +l_1: inc h + ld hl,0 + jr nz,l_2 + inc hl +l_2: ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/isprint.src b/frontends/calculator/CEdev/lib/shared/isprint.src new file mode 100644 index 0000000..79b7bbf --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isprint.src @@ -0,0 +1,28 @@ + .def _isprint + .ref ___maptab + .assume adl=1 + +; original source +; int isprint(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(UC|LC|DIG|PUN|SP)); +; } + +_isprint: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,47 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/ispunct.src b/frontends/calculator/CEdev/lib/shared/ispunct.src new file mode 100644 index 0000000..52a2e79 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ispunct.src @@ -0,0 +1,28 @@ + .def _ispunct + .ref ___maptab + .assume adl=1 + +; original source +; int ispunct(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(PUN)); +; } + +_ispunct: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,2 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/isspace.src b/frontends/calculator/CEdev/lib/shared/isspace.src new file mode 100644 index 0000000..4e670f2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isspace.src @@ -0,0 +1,28 @@ + .def _isspace + .ref ___maptab + .assume adl=1 + +; original source +; int isspace(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(WS)); +; } + +_isspace: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,64 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/istix.src b/frontends/calculator/CEdev/lib/shared/istix.src new file mode 100644 index 0000000..8570366 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/istix.src @@ -0,0 +1,18 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer store (ix+nnnnnn),HL +; Input: +; Operand1: +; BC : 24-bit offset from ix +; HL : 24-bit integer to store +; +; Output: +; +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __istix + .assume adl=1 + +__istix equ 00018Ch diff --git a/frontends/calculator/CEdev/lib/shared/istiy.src b/frontends/calculator/CEdev/lib/shared/istiy.src new file mode 100644 index 0000000..7ca71ea --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/istiy.src @@ -0,0 +1,18 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer store (iy+nnnnnn),HL +; Input: +; Operand1: +; BC : 24-bit offset from iy +; HL : 24-bit integer to store +; +; Output: +; +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __istiy + .assume adl=1 + +__istiy equ 000190h diff --git a/frontends/calculator/CEdev/lib/shared/isupper.src b/frontends/calculator/CEdev/lib/shared/isupper.src new file mode 100644 index 0000000..300474e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isupper.src @@ -0,0 +1,28 @@ + .def _isupper + .ref ___maptab + .assume adl=1 + +; original source +; int isupper(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(UC)); +; } + +_isupper: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,8 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/isxdigit.src b/frontends/calculator/CEdev/lib/shared/isxdigit.src new file mode 100644 index 0000000..9db54a4 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isxdigit.src @@ -0,0 +1,28 @@ + .def _isxdigit + .ref ___maptab + .assume adl=1 + +; original source +; int isxdigit(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(DIG|HEX)); +; } + +_isxdigit: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,17 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/itol.src b/frontends/calculator/CEdev/lib/shared/itol.src new file mode 100644 index 0000000..8efd34d --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/itol.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Signed Integer to Long conversion +; Input: +; Operand1: +; BC : 24 bit +; +; Output: +; Result: A:BC : 32 bit +; Registers Used: +; +;------------------------------------------------------------------------- + .def __itol + .assume adl=1 + +__itol equ 000194h diff --git a/frontends/calculator/CEdev/lib/shared/ixor.src b/frontends/calculator/CEdev/lib/shared/ixor.src new file mode 100644 index 0000000..75299dd --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ixor.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer XOR. +; Input: +; Operand1: +; hl : 24 bit +; +; Operand2: +; bc : 24 bit +; +; Output: +; Result: hl : 24 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __ixor + .assume adl=1 + +__ixor equ 000198h diff --git a/frontends/calculator/CEdev/lib/shared/labs.src b/frontends/calculator/CEdev/lib/shared/labs.src new file mode 100644 index 0000000..38cd6dc --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/labs.src @@ -0,0 +1,24 @@ + .ref __frameset0 + .ref __lcmpzero + .ref __setflag + .ref __lneg + .def _labs + .assume adl=1 + +; long labs(long j); + +_labs: + call __frameset0 + ld hl,(ix+6) + ld e,(ix+9) + push hl + push de + call __lcmpzero + call __setflag + pop de + pop hl + jp p,l_1 + call __lneg +l_1: ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/ladd.src b/frontends/calculator/CEdev/lib/shared/ladd.src new file mode 100644 index 0000000..c678a1e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ladd.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long ADD. +; Input: +; Operand1: +; ehl : 32 bit +; +; Operand2: +; abc : 32 bit +; +; Output: +; Result: ehl : 32 bit +; Registers Used: + +;------------------------------------------------------------------------- + .def __ladd, __ladd_b + .assume adl=1 + +__ladd_b equ 0001A0h +__ladd equ 00019Ch diff --git a/frontends/calculator/CEdev/lib/shared/land.src b/frontends/calculator/CEdev/lib/shared/land.src new file mode 100644 index 0000000..6db554a --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/land.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long AND. +; Input: +; Operand1: +; ehl : 32 bit +; +; Operand2: +; abc : 32 bit +; +; Output: +; Result: ehl : 32 bit +; Registers Used: + +;------------------------------------------------------------------------- + .def __land + .assume adl=1 + +__land equ 0001A4h diff --git a/frontends/calculator/CEdev/lib/shared/lcmps.src b/frontends/calculator/CEdev/lib/shared/lcmps.src new file mode 100644 index 0000000..495cadd --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lcmps.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Comparison +; Input: +; Operand1: +; EHL : 32 bits +; +; Operand2: +; ABC : 32 bits +; +; Output: +; Result: F : S,V flags from EHL - ABC +; Registers Used: +; None +;------------------------------------------------------------------------- + .def __lcmps + .assume adl=1 + +__lcmps equ 0001A8h diff --git a/frontends/calculator/CEdev/lib/shared/lcmpu.src b/frontends/calculator/CEdev/lib/shared/lcmpu.src new file mode 100644 index 0000000..5d7db79 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lcmpu.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Unsigned Comparison +; Input: +; Operand1: +; EHL : 32 bits +; +; Operand2: +; ABC : 32 bits +; +; Output: +; Result: F : S,V flags from EHL - ABC +; Registers Used: +; None +;------------------------------------------------------------------------- + .def __lcmpu + .assume adl=1 + +__lcmpu equ 0001ACh diff --git a/frontends/calculator/CEdev/lib/shared/lcmpzero.src b/frontends/calculator/CEdev/lib/shared/lcmpzero.src new file mode 100644 index 0000000..518c58a --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lcmpzero.src @@ -0,0 +1,16 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Set flag for comparison of 32-bit scalar with constant value zero +; Input: +; Operand1: E:HL register +; +; Output: +; Result: f register +; +; Registers Used: +; None +;------------------------------------------------------------------------- + .def __lcmpzero + .assume adl=1 + +__lcmpzero equ 0001B0h diff --git a/frontends/calculator/CEdev/lib/shared/ldiv.src b/frontends/calculator/CEdev/lib/shared/ldiv.src new file mode 100644 index 0000000..8da316b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ldiv.src @@ -0,0 +1,79 @@ +; Copyright (C) 1999-2008 Zilog, Inc, All Rights Reserved +;------------------------------------------------------------------------- +; ldiv function +; +; ldiv_t ldiv(long numer, long denom); +; +;------------------------------------------------------------------------- + .def _ldiv + .ref __ldivs + .ref __lrems + .assume adl=1 + +_ldiv: + + push bc + push af + push de + push hl + + ld hl,27 + add hl,sp + ld a,(hl) + dec hl + dec hl + dec hl + ld bc,(hl) ; aBC : denominator + dec hl + dec hl + dec hl + ld e,(hl) + dec hl + dec hl + dec hl + ld hl,(hl) ; eHL: Numerator + call __ldivs + push de + push hl ; eHL : quotient + + ld hl,27 + add hl,sp + ld e,(hl) + dec hl + dec hl + dec hl + ld hl,(hl) + call __lrems + ld a,e + ex de,hl ;aDE :remainder + + ld hl,21 + add hl,sp + ld hl,(hl) + push hl + + ld bc, 7 + add hl, bc + ld (hl),a + dec hl + dec hl + dec hl + ld (hl),de ; aDE : remainder + + pop hl + pop bc + ld (hl),bc ; bc : 3 LSB of quotient + pop bc + push hl + inc hl + inc hl + inc hl + ld (hl),c ; c : MSB of quotient + pop hl + + pop de + pop de + pop af + pop bc + + ret diff --git a/frontends/calculator/CEdev/lib/shared/ldivs.src b/frontends/calculator/CEdev/lib/shared/ldivs.src new file mode 100644 index 0000000..950209e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ldivs.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Division Signed +; Input: +; Operand1: +; eHL : 32 bits +; +; Operand2: +; aBC : 32 bits +; Output: +; Result: eHL : 24 bits +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __ldivs + .assume adl=1 + +__ldivs equ 0001B4h diff --git a/frontends/calculator/CEdev/lib/shared/ldivu.src b/frontends/calculator/CEdev/lib/shared/ldivu.src new file mode 100644 index 0000000..c570423 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ldivu.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Division Unsigned +; Input: +; Operand1: +; EuHL : 32 bits +; +; Operand2: +; AuBC : 32 bits +; Output: +; Result: EuHL : 32 bits +; +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __ldivu, __ldvrmu + .assume adl=1 + +__ldivu equ 0001B8h +__ldvrmu equ 0001BCh diff --git a/frontends/calculator/CEdev/lib/shared/lldix.src b/frontends/calculator/CEdev/lib/shared/lldix.src new file mode 100644 index 0000000..379c4e7 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lldix.src @@ -0,0 +1,17 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; long load e:hl,(ix+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from ix +; +; Output: +; Result: E:HL : 32 bit +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __lldix + .assume adl=1 + +__lldix equ 0001C0h diff --git a/frontends/calculator/CEdev/lib/shared/lldiy.src b/frontends/calculator/CEdev/lib/shared/lldiy.src new file mode 100644 index 0000000..8e308fd --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lldiy.src @@ -0,0 +1,17 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; long load e:hl,(iy+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from iy +; +; Output: +; Result: E:HL : 32 bit +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __lldiy + .assume adl=1 + +__lldiy equ 0001C4h diff --git a/frontends/calculator/CEdev/lib/shared/lmuls.src b/frontends/calculator/CEdev/lib/shared/lmuls.src new file mode 100644 index 0000000..8f75c0b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lmuls.src @@ -0,0 +1,19 @@ +; (c) Copyright 1999-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Multiplication Signed. +; Input: +; Operand1: +; ABC : 32 bits +; +; Operand2: +; EHL : 32 bits +; +; Output: +; Result: ABC : 32 bit +; Registers Used: +; de,af +;------------------------------------------------------------------------- + .def __lmuls + .assume adl=1 + +__lmuls equ 0001C8h diff --git a/frontends/calculator/CEdev/lib/shared/lmulu.src b/frontends/calculator/CEdev/lib/shared/lmulu.src new file mode 100644 index 0000000..f84fe24 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lmulu.src @@ -0,0 +1,22 @@ +; (c) Copyright 1999-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Multiplication Signed/Unsigned. +; Note: When multipying two n-bit values, the low-order n-bits +; of the product are the same, whether or not the values +; are considered signed or unsigned. +; Input: +; Operand1: +; EuHL : 32 bits +; +; Operand2: +; AuBC : 32 bits +; +; Output: +; Result: EuHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __lmulu + .assume adl=1 + +__lmulu equ 0001CCh diff --git a/frontends/calculator/CEdev/lib/shared/lneg.src b/frontends/calculator/CEdev/lib/shared/lneg.src new file mode 100644 index 0000000..3e8b407 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lneg.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long NEG. +; Input: +; Operand1: +; EuHL : 32 bit +; +; Output: +; Result: EuHL : 32 bit +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __lneg + .assume adl=1 + +__lneg equ 0001D0h diff --git a/frontends/calculator/CEdev/lib/shared/lnot.src b/frontends/calculator/CEdev/lib/shared/lnot.src new file mode 100644 index 0000000..774b304 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lnot.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long NOT. +; Input: +; Operand1: +; eHL : 32 bit +; +; Output: +; Result: eHL : 32 bit +; Registers Used: +; None +;------------------------------------------------------------------------- + .def __lnot + .assume adl=1 + +__lnot equ 0001D4h diff --git a/frontends/calculator/CEdev/lib/shared/log2.src b/frontends/calculator/CEdev/lib/shared/log2.src new file mode 100644 index 0000000..5630503 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/log2.src @@ -0,0 +1,27 @@ + .def _log2 + .ref _log + .ref __fdiv + .ref __frameset0 + .assume adl=1 + +_log2: + call __frameset0 + ld c,(ix+9) + ld b,0 + push bc + ld bc,(ix+6) + push bc + call _log + push hl + pop bc + ld a,e + ld hl,3240472 + ld e,63 + call __fdiv + ld e,a + push bc + pop hl + ld sp,ix + pop ix + ret + diff --git a/frontends/calculator/CEdev/lib/shared/longjmp.src b/frontends/calculator/CEdev/lib/shared/longjmp.src new file mode 100644 index 0000000..0399ff0 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/longjmp.src @@ -0,0 +1,4 @@ + .def _longjmp + .assume adl=1 + +_longjmp equ 000098h \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/lor.src b/frontends/calculator/CEdev/lib/shared/lor.src new file mode 100644 index 0000000..b9a3c95 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lor.src @@ -0,0 +1,19 @@ +; (c) Copyright 1999-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long OR. +; Input: +; Operand1: +; ehl : 32 bit +; +; Operand2: +; abc : 32 bit +; +; Output: +; Result: ehl : 32 bit +; Registers Used: +; +;------------------------------------------------------------------------- + .def __lor + .assume adl=1 + +__lor equ 0001D8h diff --git a/frontends/calculator/CEdev/lib/shared/lrems.src b/frontends/calculator/CEdev/lib/shared/lrems.src new file mode 100644 index 0000000..958404b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lrems.src @@ -0,0 +1,19 @@ +; (c) Copyright 1999-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Modulus Signed. +; Input: +; Operand1: +; EHL : 32 bits (dividend) +; +; Operand2: +; ABC : 32 bits (divisor) +; +; Output: +; Result: EHL : 32 bit +; Registers Used: +; de,af +;------------------------------------------------------------------------- + .def __lrems + .assume adl=1 + +__lrems equ 0001DCh diff --git a/frontends/calculator/CEdev/lib/shared/lremu.src b/frontends/calculator/CEdev/lib/shared/lremu.src new file mode 100644 index 0000000..6ed28b1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lremu.src @@ -0,0 +1,19 @@ +; (c) Copyright 1999-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Modulus Unsigned. +; Input: +; Operand1: +; EuHL : 32 bits (dividend x) +; +; Operand2: +; AuBC : 32 bits (divisor y) +; +; Output: +; Result: EuHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __lremu + .assume adl=1 + +__lremu equ 0001E0h diff --git a/frontends/calculator/CEdev/lib/shared/lshl.src b/frontends/calculator/CEdev/lib/shared/lshl.src new file mode 100644 index 0000000..3038a0d --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lshl.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Shift Left +; Input: +; Operand1: +; AuBC : 32 bit value to be shifted +; +; Operand2: +; L : number of bits to shift +; +; Output: +; Result: AuBC : 32 bit result +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __lshl + .assume adl=1 + +__lshl equ 0001E4h diff --git a/frontends/calculator/CEdev/lib/shared/lshrs.src b/frontends/calculator/CEdev/lib/shared/lshrs.src new file mode 100644 index 0000000..a8a35d1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lshrs.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Shift Right Signed +; Input: +; Operand1: +; AuBC : 32 bit value to be shifted by L +; +; Operand2: +; L : number of bits to shift +; +; Output: +; Result: AuBC : 32 bit +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __lshrs + .assume adl=1 + +__lshrs equ 0001E8h diff --git a/frontends/calculator/CEdev/lib/shared/lshru.src b/frontends/calculator/CEdev/lib/shared/lshru.src new file mode 100644 index 0000000..5334d7f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lshru.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Shift Right Unsigned +; Input: +; Operand1: +; AuBC : 32 bit value to be shifted by L +; +; Operand2: +; L : number of bits to shift +; +; Output: +; Result: AuBC : 32 bit +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __lshru + .assume adl=1 + +__lshru equ 0001ECh diff --git a/frontends/calculator/CEdev/lib/shared/lstix.src b/frontends/calculator/CEdev/lib/shared/lstix.src new file mode 100644 index 0000000..22c014e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lstix.src @@ -0,0 +1,17 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; long store (ix+nnnnnn),H:HL +; Input: +; Operand1: +; BC : 24-bit offset from ix +; E:HL : 32-bit value +; +; Output: +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __lstix + .assume adl=1 + +__lstix equ 0001F0h diff --git a/frontends/calculator/CEdev/lib/shared/lstiy.src b/frontends/calculator/CEdev/lib/shared/lstiy.src new file mode 100644 index 0000000..e141502 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lstiy.src @@ -0,0 +1,17 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; long store (iy+nnnnnn),E:HL +; Input: +; Operand1: +; BC : 24-bit offset from iy +; E:HL : 32-bit value +; +; Output: +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __lstiy + .assume adl=1 + +__lstiy equ 0001F4h diff --git a/frontends/calculator/CEdev/lib/shared/lsub.src b/frontends/calculator/CEdev/lib/shared/lsub.src new file mode 100644 index 0000000..ef51463 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lsub.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Subtract Op1 - Op2 +; Input: +; Operand1: +; EHL : 32 bits +; +; Operand2: +; ABC : 32 bits +; +; Output: +; Result: EHL : 32 bits +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __lsub + .assume adl=1 + +__lsub equ 0001F8h diff --git a/frontends/calculator/CEdev/lib/shared/lxor.src b/frontends/calculator/CEdev/lib/shared/lxor.src new file mode 100644 index 0000000..c14d3cc --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lxor.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long XOR. +; Input: +; Operand1: +; ehl : 32 bit +; +; Operand2: +; abc : 32 bit +; +; Output: +; Result: ehl : 32 bit +; Registers Used: +; +;------------------------------------------------------------------------- + .def __lxor + .assume adl=1 + +__lxor equ 0001FCh diff --git a/frontends/calculator/CEdev/lib/shared/malloc.src b/frontends/calculator/CEdev/lib/shared/malloc.src new file mode 100644 index 0000000..2e6d2d9 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/malloc.src @@ -0,0 +1,225 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\MALLOC.C" + .assume ADL=1 + SEGMENT BSS +__alloc_base: + DS 6 +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2011 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /* This implements a straight forward version of malloc, allocating */ +; 9 /* memory between the first unused address in RAM (__heapbot) and */ +; 10 /* the current stack pointer; the stack pointer being initialized to */ +; 11 /* the top of RAM (__heaptop). */ +; 12 /* The Zilog real time kernel, RZK, implements an entirely */ +; 13 /* different version of malloc. */ +; 14 /* */ +; 15 /* ZDS arranges that this malloc does not get linked into RZK */ +; 16 /* applications by placing the C runtime library, crt.lib or */ +; 17 /* crtD.lib, after the RZK libraries in the linker command file. */ +; 18 /* */ +; 19 /************************************************************************/ +; 20 #include +; 21 #include +; 22 +; 23 HEADER _alloc_base; /* empty list to get started */ + SEGMENT CODE +; 24 extern void *_s_sbrk(size_t); +; 25 +; 26 /************************************************* +; 27 * +; 28 * morecore - get more memory for heap +; 29 * +; 30 * Inputs: +; 31 * nu - number of units +; 32 * +; 33 * Returns: +; 34 * the address of the new memory +; 35 * +; 36 *************************************************/ +; 37 +; 38 static void* morecore(size_t nbytes) +; 39 { +_morecore: + LD HL,-3 + CALL __frameset +; 40 register void *cp; +; 41 if(cp = _s_sbrk(nbytes)) + LD BC,(IX+6) + PUSH BC + CALL __s_sbrk + POP BC + LD (IX+-3),HL + CALL __icmpzero + JR Z,L_1 +; 42 { +; 43 ((HEADER*)cp)->s.size=nbytes; + LD BC,(IX+6) + LD IY,(IX+-3) + LD (IY+3),BC +; 44 cp = ((HEADER*)cp) + 1; + LEA IY,IY+6 + LD (IX+-3),IY +; 45 } +L_1: +; 46 return(cp); + LD HL,(IX+-3) +; 47 } + LD SP,IX + POP IX + RET + + +;**************************** _morecore *************************** +;Name Addr/Register Size Type +;__s_sbrk IMPORT ----- function +;cp IX-3 3 variable +;nbytes IX+6 3 parameter + + +; Stack Frame Size: 12 (bytes) +; Spill Code: 0 (instruction) + + +; 48 +; 49 /************************************************* +; 50 * +; 51 * malloc - allocate heap storage +; 52 * +; 53 * Inputs: +; 54 * nbytes - number of bytes to allocate +; 55 * +; 56 * Returns: +; 57 * the address of the memory or NULL +; 58 * +; 59 *************************************************/ +; 60 +; 61 void *malloc(size_t nbytes) +; 62 { +_malloc: + LD HL,-9 + CALL __frameset +; 63 HEADER *p,*q; +; 64 size_t size = nbytes + sizeof(HEADER); + LD IY,(IX+6) + LEA IY,IY+6 + LD (IX+-6),IY +; 65 +; 66 if (size < nbytes) + LD BC,(IX+6) + LD HL,(IX+-6) + OR A,A + SBC HL,BC + JR NC,L_11 + OR A,A +; 67 return NULL; // Happens on malloc(-1) or like stupidity + SBC HL,HL + JR L_13 +L_11: +; 68 +; 69 for(p=&_alloc_base; q=p->s.ptr; p=q) + LD BC,__alloc_base + LD (IX+-9),BC + JR L_10 +L_8: +; 70 { +; 71 if (q->s.size >= size) + LD BC,(IX+-6) + LD IY,(IX+-3) + LD HL,(IY+3) + OR A,A + SBC HL,BC + JR C,L_9 +; 72 { +; 73 /* big enough */ +; 74 if (q->s.size <= size+sizeof(HEADER)) + LD IY,(IX+-6) + LEA HL,IY+6 + LD IY,(IX+-3) + LD BC,(IY+3) + OR A,A + SBC HL,BC + JR C,L_5 +; 75 { +; 76 /* exactly enough */ +; 77 p->s.ptr = q->s.ptr; + LD IY,(IX+-3) + LD BC,(IY+0) + LD IY,(IX+-9) + LD (IY+0),BC +; 78 } +; 79 else + JR L_6 +L_5: +; 80 { +; 81 q->s.size -= size; + LD IY,(IX+-3) + LD HL,(IY+3) + LD BC,(IX+-6) + OR A,A + SBC HL,BC + LD (IY+3),HL +; 82 q = (HEADER*)(((char*)q) + q->s.size); + LD BC,(IY+3) + LD HL,(IX+-3) + ADD HL,BC + LD (IX+-3),HL +; 83 q->s.size = size; + LD BC,(IX+-6) + LD IY,(IX+-3) + LD (IY+3),BC +; 84 } +L_6: +; 85 return((void*)(q+1)); + LD IY,(IX+-3) + LEA HL,IY+6 + JR L_13 +; 86 } +; 87 } +L_9: + LD BC,(IX+-3) + LD (IX+-9),BC +L_10: + LD IY,(IX+-9) + LD BC,(IY+0) + LD (IX+-3),BC + LD HL,BC + CALL __icmpzero + JR NZ,L_8 +; 88 return(morecore(size)); + LD BC,(IX+-6) + PUSH BC + CALL _morecore + POP BC +; 89 } +L_13: + LD SP,IX + POP IX + RET + + +;**************************** _malloc *************************** +;Name Addr/Register Size Type +;__alloc_base STATIC 6 variable +;p IX-9 3 variable +;size IX-6 3 variable +;q IX-3 3 variable +;nbytes IX+6 3 parameter + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + + XREF __s_sbrk:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _malloc + XDEF __alloc_base + END diff --git a/frontends/calculator/CEdev/lib/shared/maptab.src b/frontends/calculator/CEdev/lib/shared/maptab.src new file mode 100644 index 0000000..8ec2d12 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/maptab.src @@ -0,0 +1,158 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\MAPTAB.C" + .assume ADL=1 + SEGMENT DATA +___maptab: + DB 128 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 96 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 24 + DB 24 + DB 24 + DB 24 + DB 24 + DB 24 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 20 + DB 20 + DB 20 + DB 20 + DB 20 + DB 20 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + XDEF ___maptab +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 +; 10 /* Mapping table for isxxx functions */ +; 11 +; 12 #define CTL 0x80 /* control character */ +; 13 #define WS 0x40 /* whitespace character */ +; 14 #define SP 0x20 /* space character */ +; 15 #define HEX 0x10 /* hex digit (A-Z,a-z) */ +; 16 #define UC 0x08 /* uppercase letter */ +; 17 #define LC 0x04 /* lowercase letter */ +; 18 #define PUN 0x02 /* punctuation */ +; 19 #define DIG 0x01 /* decimal digit (0-9) */ +; 20 +; 21 __rom unsigned char __maptab[128] = { + END diff --git a/frontends/calculator/CEdev/lib/shared/memchr.src b/frontends/calculator/CEdev/lib/shared/memchr.src new file mode 100644 index 0000000..1dec0c8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/memchr.src @@ -0,0 +1,6 @@ + .def _memchr + .assume adl=1 + +; void *memchr(const void *buf, int c, size_t count); + +_memchr equ 00009Ch diff --git a/frontends/calculator/CEdev/lib/shared/memcmp.src b/frontends/calculator/CEdev/lib/shared/memcmp.src new file mode 100644 index 0000000..4658030 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/memcmp.src @@ -0,0 +1,6 @@ + .def _memcmp + .assume adl=1 + +; int memcmp(const void *buf1, const void *buf2, size_t count); + +_memcmp equ 0000A0h diff --git a/frontends/calculator/CEdev/lib/shared/memcpy.src b/frontends/calculator/CEdev/lib/shared/memcpy.src new file mode 100644 index 0000000..9ecc289 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/memcpy.src @@ -0,0 +1,6 @@ + .def _memcpy + .assume adl=1 + +; void *memcpy( void *dest, const void *src, size_t count ); + +_memcpy equ 0000A4h diff --git a/frontends/calculator/CEdev/lib/shared/memmove.src b/frontends/calculator/CEdev/lib/shared/memmove.src new file mode 100644 index 0000000..4a219cd --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/memmove.src @@ -0,0 +1,6 @@ + .def _memmove + .assume adl=1 + +; void *memmove(void *dest, const void *src, size_t count); + +_memmove equ 0000A8h diff --git a/frontends/calculator/CEdev/lib/shared/memset.src b/frontends/calculator/CEdev/lib/shared/memset.src new file mode 100644 index 0000000..2ff1317 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/memset.src @@ -0,0 +1,26 @@ + .def _memset + .assume adl=1 + +; void *memset(void *dest, int c, size_t count); + +_memset: + pop iy + pop hl + pop de + pop bc + push bc + push de + push hl + push iy + cpi + add hl,bc + ret c + dec hl + ld (hl),e + ret po + push hl + pop de + dec de + lddr + ret + diff --git a/frontends/calculator/CEdev/lib/shared/os.src b/frontends/calculator/CEdev/lib/shared/os.src new file mode 100644 index 0000000..23e0852 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/os.src @@ -0,0 +1,14 @@ +; --- +; call an os or bootcode routine +; --- + + .def __OS + .assume adl=1 + +__OS: + pop de + pop hl + push hl + push de + ld iy,13631616 + jp (hl) diff --git a/frontends/calculator/CEdev/lib/shared/os_textbuffer.src b/frontends/calculator/CEdev/lib/shared/os_textbuffer.src new file mode 100644 index 0000000..0f3c106 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/os_textbuffer.src @@ -0,0 +1,22 @@ +; --- +; enables / disables homescreen text buffering which can destroy bss / heap +; --- + + .def _os_DisableHomeTextBuffer + .def _os_EnableHomeTextBuffer + .assume adl=1 + +_os_DisableHomeTextBuffer: + ld iy,$d00080 + res 1,(iy + $0d) ; no text buffer + res 3,(iy + $4a) ; use first shadow buffer + set 5,(iy + $4c) ; only display + ret + +_os_EnableHomeTextBuffer: + ld iy,$d00080 + set 1,(iy + $0d) ; use text buffer + res 3,(iy + $4a) ; use first shadow buffer + res 5,(iy + $4c) ; use shadow buffer + ret + diff --git a/frontends/calculator/CEdev/lib/shared/print_globals.src b/frontends/calculator/CEdev/lib/shared/print_globals.src new file mode 100644 index 0000000..fa4f532 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/print_globals.src @@ -0,0 +1,47 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\PRINT_GLOBALS.C" + .assume ADL=1 + SEGMENT BSS +___print_buff: + DS 14 +___print_fmt: + DS 19 +___print_len: + DS 1 +___print_leading_char: + DS 1 +___print_out: + DS 3 + SEGMENT DATA +___print_xputch: + DW24 ___print_sputch + XREF ___print_sputch:ROM + XDEF ___print_xputch + XDEF ___print_out + XDEF ___print_leading_char + XDEF ___print_len + XDEF ___print_fmt + XDEF ___print_buff +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 #include +; 6 +; 7 void __print_sputch(char ch); +; 8 +; 9 /* Global data used by the printf support functions. */ +; 10 /* The compiler may manipulate this data directly to bypass the runtime */ +; 11 /* parsing of (s)printf formats. */ +; 12 char __print_buff[14]; +; 13 struct fmt_type __print_fmt; +; 14 unsigned char __print_len; +; 15 char __print_leading_char; // Initial +, -, or space for number +; 16 char *__print_out; +; 17 +; 18 // This points to __print_sputch except when printf is active. +; 19 // This is so that the more commonly used function does not need to set it. +; 20 void (*__print_xputch)(char) = __print_sputch; + END diff --git a/frontends/calculator/CEdev/lib/shared/print_putch.src b/frontends/calculator/CEdev/lib/shared/print_putch.src new file mode 100644 index 0000000..d4ea5c2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/print_putch.src @@ -0,0 +1,51 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\PRINT_PUTCH.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 #include +; 6 #include +; 7 #include +; 8 +; 9 extern void (*__print_xputch)(char); +; 10 +; 11 /* Send a character to the printf/sprintf destination */ +; 12 /* The compiler may generate direct calls to this to bypass the runtime */ +; 13 /* parsing of printf formats. */ +; 14 +; 15 void __print_putch(char ch) { +___print_putch: + CALL __frameset0 +; 16 (*__print_xputch)(ch); + LD C,(IX+6) + LD B,0 + PUSH BC + LD IY,(___print_xputch) + CALL __indcall + POP BC +; 17 } + LD SP,IX + POP IX + RET + + +;**************************** ___print_putch *************************** +;Name Addr/Register Size Type +;___print_xputch IMPORT 3 variable +;ch IX+6 1 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF ___print_xputch:ROM + XREF __indcall:ROM + XREF __frameset0:ROM + XDEF ___print_putch + END diff --git a/frontends/calculator/CEdev/lib/shared/print_putstring.src b/frontends/calculator/CEdev/lib/shared/print_putstring.src new file mode 100644 index 0000000..011e001 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/print_putstring.src @@ -0,0 +1,246 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\PRINT_PUTSTRING.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 #include +; 6 #include +; 7 #include +; 8 +; 9 /* Send a string to the printf/sprintf destination */ +; 10 /* The compiler may generate direct calls to this to bypass the runtime */ +; 11 /* parsing of printf formats. */ +; 12 +; 13 void __print_putch(char ch); +; 14 +; 15 void __print_sendstring(char *sp) +; 16 { +___print_sendstring: + LD HL,-16 + CALL __frameset +; 17 unsigned char i = 0; + LD (IX+-1),0 +; 18 unsigned short j, jmax; +; 19 char* s = sp; + LD BC,(IX+6) + LD (IX+-8),BC +; 20 char padRight = 0; + LD (IX+-5),0 +; 21 if (__print_fmt.field_width != 0) + LD A,(___print_fmt+5) + OR A,A + JR Z,L_16 +; 22 { +; 23 padRight = ((__print_fmt.flags & FMT_FLAG_MINUS) || __print_fmt.field_width < 0); + LD A,(___print_fmt+1) + AND A,1 + JR NZ,L_1 + LD A,(___print_fmt+5) + OR A,A + JP P,L_2 +L_1: + LD BC,1 + LD (IX+-13),BC + JR L_3 +L_2: + LD BC,0 + LD (IX+-13),BC +L_3: + LD A,(IX+-13) + LD (IX+-5),A +; 24 if (!padRight) + OR A,A + JR NZ,L_16 +; 25 { +; 26 char pad = strlen(s); + LD BC,(IX+6) + PUSH BC + CALL _strlen + POP BC + LD (IX+-2),L +; 27 if (__print_fmt.flags & FMT_FLAG_PRECISION && pad > __print_fmt.precision) + LD A,(___print_fmt+1) + AND A,16 + JR Z,L_7 + LD A,(___print_fmt+6) + CP A,(IX+-2) + JP P,L_7 +; 28 pad = __print_fmt.precision; + LD A,(___print_fmt+6) + LD (IX+-2),A +L_7: +; 29 +; 30 pad = __print_fmt.field_width-pad; + LD A,(___print_fmt+5) + SUB A,(IX+-2) + LD (IX+-2),A +; 31 while(pad > 0) + JR L_10 +L_11: +; 32 { +; 33 __print_putch(' '); + LD BC,32 + PUSH BC + CALL ___print_putch + POP BC +; 34 i++; + INC (IX+-1) +; 35 pad--; + DEC (IX+-2) +; 36 } +L_10: + XOR A,A + CP A,(IX+-2) + CALL __setflag + JP M,L_11 +; 37 } +; 38 } +L_16: +; 39 /* If precision not specified, make it 127 */ +; 40 if (!(__print_fmt.flags & FMT_FLAG_PRECISION)) + LD A,(___print_fmt+1) + AND A,16 + JR NZ,L_15 +; 41 jmax = 0xffff; + LD (IX+-10),255 + LD (IX+-9),255 +; 42 else + JR L_23 +L_15: +; 43 jmax = (unsigned)__print_fmt.precision; + LD A,(___print_fmt+6) + LD B,A + SEXT HL + LD (IX+-10),B + LD (IX+-9),H +L_23: +; 44 +; 45 for (j=0;j +; 6 +; 7 /* Send a character to the sprintf destination */ +; 8 +; 9 extern char *__print_out; +; 10 +; 11 void __print_sputch(char ch) { +___print_sputch: + CALL __frameset0 +; 12 *__print_out++ = ch; + LD HL,(___print_out) + LD A,(IX+6) + LD (HL),A + LD BC,(___print_out) + INC BC + LD (___print_out),BC +; 13 } + LD SP,IX + POP IX + RET + + +;**************************** ___print_sputch *************************** +;Name Addr/Register Size Type +;___print_out IMPORT 3 variable +;ch IX+6 1 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF ___print_out:ROM + XREF __frameset0:ROM + XDEF ___print_sputch + END diff --git a/frontends/calculator/CEdev/lib/shared/qsort.src b/frontends/calculator/CEdev/lib/shared/qsort.src new file mode 100644 index 0000000..675dff9 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/qsort.src @@ -0,0 +1,378 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\QSORT.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 #include +; 10 #include +; 11 +; 12 /************************************************* +; 13 * +; 14 * qsort - Quick sort +; 15 * +; 16 * Inputs: +; 17 * base - base of array to be sorted +; 18 * nel - number of elements +; 19 * size - size of each element +; 20 * compar - pointer to function for comparison +; 21 * +; 22 * Returns: +; 23 * nothing +; 24 * +; 25 *************************************************/ +; 26 static void swapmem(char *a,char *b,size_t size) +; 27 { +_swapmem: + LD HL,-4 + CALL __frameset +; 28 register char t; +; 29 register size_t i; +; 30 +; 31 for (i=0;il = i; + LD BC,(IX+-3) + LD IY,(IX+-9) + LD (IY+0),BC +; 82 sp->r = r; + LD BC,(IX+-12) + LD (IY+3),BC +; 83 ++sp; + LEA IY,IY+6 + LD (IX+-9),IY +; 84 } +L_19: +; 85 r = j; /* continue sorting left partition */ + LD BC,(IX+-6) + LD (IX+-12),BC +; 86 } +; 87 else { + JR L_26 +L_23: +; 88 if (base < j) { /* stack request for left partition */ + LD BC,(IX+-6) + LD HL,(IX+6) + OR A,A + SBC HL,BC + JR NC,L_21 +; 89 sp->l = base; + LD BC,(IX+6) + LD IY,(IX+-9) + LD (IY+0),BC +; 90 sp->r = j; + LD BC,(IX+-6) + LD (IY+3),BC +; 91 ++sp; + LEA IY,IY+6 + LD (IX+-9),IY +; 92 } +L_21: +; 93 base = i; /* continue sorting right partition */ + LD BC,(IX+-3) + LD (IX+6),BC +; 94 } +; 95 } while (base < r); +L_26: + LD BC,(IX+-12) + LD HL,(IX+6) + OR A,A + SBC HL,BC + JR C,L_25 +; 96 +; 97 if (sp <= stack) + LD BC,(IX+-9) + LEA HL,IX+-111 + OR A,A + SBC HL,BC + JR NC,L_32 +; 98 break; +; 99 --sp; + LD IY,(IX+-9) + LEA BC,IY+-6 + LD (IX+-9),BC +; 100 base = sp->l; + LD IY,(IX+-9) + LD BC,(IY+0) + LD (IX+6),BC +; 101 r = sp->r; + LD BC,(IY+3) + LD (IX+-12),BC +; 102 } + JR L_25 +; 103 } +L_32: + LD SP,IX + POP IX + RET + + +;**************************** _qsort *************************** +;Name Addr/Register Size Type +;stack IX-111 96 variable +;x IX-15 3 variable +;r IX-12 3 variable +;sp IX-9 3 variable +;j IX-6 3 variable +;i IX-3 3 variable +;compar IX+15 3 parameter +;size IX+12 3 parameter +;nel IX+9 3 parameter +;base IX+6 3 parameter + + +; Stack Frame Size: 129 (bytes) +; Spill Code: 0 (instruction) + + + XREF __indcall:ROM + XREF __idivu:ROM + XREF __imulu:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XREF __ishru_b:ROM + XDEF _qsort + END diff --git a/frontends/calculator/CEdev/lib/shared/rand.src b/frontends/calculator/CEdev/lib/shared/rand.src new file mode 100644 index 0000000..ea569cf --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/rand.src @@ -0,0 +1,13 @@ + .ref _random + .def _rand + .assume adl=1 + +; int rand(void); + +_rand: + call _random + ld de,8388608 + sbc hl,de + ret p + add hl,de + ret diff --git a/frontends/calculator/CEdev/lib/shared/random.src b/frontends/calculator/CEdev/lib/shared/random.src new file mode 100644 index 0000000..ede9051 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/random.src @@ -0,0 +1,110 @@ +; --- +; uint32_t random(void) +; --- + + .def _random + .def __state + .assume adl=1 + +; https://github.com/MersenneTwister-Lab/XSadd/blob/master/xsadd.h#L75 +; using shift parameters (19, 21, 8) instead of (15, 18, 11) + +; uint32_t xsadd(uint32_t state[static 4]) +; { +; uint32_t s0, s1, s2, t0, t1, t2, t3, z, result; +; t0 = state[0]; +; state[0] = state[1]; state[1] = state[2]; state[2] = state[3]; +; s0 = t0 << 19; +; t1 = t0 ^ s0; +; s1 = t1 >> 21; +; t2 = t1 ^ s1; +; z = state[3]; +; s2 = z << 8; +; t3 = t2 ^ s2; +; state[3] = t3; +; result = t3 + state[2]; +; return result; +; } + + segment data +__state: + dl 0d0e0f10h,090a0b0ch,05060708h,01020304h + + segment code +_random: +; Read state[0] and perform state shifting. + ld iy,__state ; iy = &state[0] + ld hl,(iy+0*4+0) ; hl = hl(state[0]) + push hl + ld hl,(iy+0*4+2) ; hl = eu(state[0]) + push hl + lea hl,iy+1*4 ; hl = &state[1] + lea de,iy+0*4 ; de = &state[0] + ld bc,3*4 + ldir ; state[0] = state[1] + ; state[1] = state[2] + ; state[2] = state[3] + pop bc + pop de ; bcde = state[0] == t0 +; +; s0 = t0 << 19 ==> s0h == 0 ==> t1h = t0h +; s0l == 0 ==> t1l = t0l +; +; s1 = t1 >> 21 ==> s1e == 0 ==> t2e = t1e +; s1u == 0 ==> t2u = t1u +; +; s2 = z << 8 ==> s2e == zu ==> t3e == t2e ^ s2e == t1e ^ s2e == t0e ^ s0e ^ s2e +; s2u == zh ==> t3u == t2u ^ s2u == t1u ^ s2u == t0u ^ s0u ^ s2u +; s2h == zl ==> t3h == t2h ^ s2h == t1h ^ s1h ^ s2h == t0h ^ s1h ^ s2h +; s2l == 0 ==> t3l == t2l == t1l ^ s1l == t0l ^ s1l +; +; Calculate s0. + ld h,d + ld l,e ; hl = t0hl == t0 << 16 + add hl,hl + add hl,hl + add hl,hl ; hl = t0 << 19 = s0eu + ; h = s0e + ; l = s0u +; Calculate t1e and t3e. + ld a,b ; a = t0e + xor a,h ; a = t0e ^ s0e == t1e + ld h,a ; h = t1e + xor a,(iy+3*4+2) ; a = t1e ^ zu == t2e ^ s2e == t3e + ld (iy+3*4+3),a ; e(state[3]) = t3e + ld b,a ; b = t3e +; Calculate t1u and t3u. + ld a,c ; a = t0u + xor a,l ; a = t0u ^ s0u == t1u + ld l,a ; l = t1u + ; hl = t1eu == t1 >> 16 + xor a,(iy+3*4+1) ; a = t1u ^ zh == t2u ^ s2u == t3u + ld (iy+3*4+2),a ; u(state[3]) = t3u +; Calculate s1. + xor a,a ; a = 0 + add.s hl,hl + adc a,a + add.s hl,hl + adc a,a + add.s hl,hl + adc a,a ; ahl = (t1 >> 16) << 3 + ; ah = ((t1 >> 16) << 3) >> 8 == t1 >> 21 == s1hl + ; a = s1h + ; h = s1l +; Calculate t3h. + xor a,d ; a = s1h ^ t0h === s1h ^ t1h == t2h + xor a,(iy+3*4+0) ; a = t2h ^ zl == t2h ^ s2h == t3h + ld (iy+3*4+1),a ; h(state[3]) = t3h +; Calculate t3l. + ld a,e ; a = t0l == t1l + xor a,h ; a = t1l ^ s1l == t2l == t3l + ld (iy+3*4+0),a ; l(state[3]) = t3l +; Calculate result. + ld hl,(iy+3*4) + ld a,b ; auhl = t3 + ld de,(iy+2*4) + ld c,(iy+2*4+3) ; cude = state[2] + add hl,de + adc a,c ; auhl = t3 + state[2] = result + ld e,a ; euhl = result + ret diff --git a/frontends/calculator/CEdev/lib/shared/realloc.src b/frontends/calculator/CEdev/lib/shared/realloc.src new file mode 100644 index 0000000..a3d26fd --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/realloc.src @@ -0,0 +1,125 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\REALLOC.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 #include +; 10 #include +; 11 #include +; 12 #include +; 13 +; 14 /************************************************* +; 15 * +; 16 * realloc - change the size of an allocated block +; 17 * +; 18 * Inputs: +; 19 * ptr - pointer to allocated memory +; 20 * size - new size of memory +; 21 * +; 22 * Returns: +; 23 * pointer to block - may have changed +; 24 * +; 25 *************************************************/ +; 26 void *realloc(void *ptr,size_t size) { +_realloc: + LD HL,-6 + CALL __frameset +; 27 HEADER *h; +; 28 void *p; +; 29 +; 30 if (ptr) { + LD HL,(IX+6) + CALL __icmpzero + JR Z,L_5 +; 31 h = (HEADER *)((char *)ptr - sizeof(HEADER)); + LD IY,(IX+6) + LEA BC,IY+-6 + LD (IX+-6),BC +; 32 if (h->s.size >= (size+sizeof(HEADER))) { + LD IY,(IX+9) + LEA BC,IY+6 + LD IY,(IX+-6) + LD HL,(IY+3) + OR A,A + SBC HL,BC + JR C,L_2 +; 33 return(ptr); + LD HL,(IX+6) + JR L_6 +; 34 } +L_2: +; 35 +; 36 if (p = malloc(size)) { + LD BC,(IX+9) + PUSH BC + CALL _malloc + POP BC + LD (IX+-3),HL + CALL __icmpzero + JR Z,L_3 +; 37 memcpy(p,ptr,size); + LD BC,(IX+9) + PUSH BC + LD BC,(IX+6) + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _memcpy + POP BC + POP BC + POP BC +; 38 free(ptr); + LD BC,(IX+6) + PUSH BC + CALL _free + POP BC +; 39 } +L_3: +; 40 return(p); + LD HL,(IX+-3) + JR L_6 +; 41 } +L_5: +; 42 return(malloc(size)); + LD BC,(IX+9) + PUSH BC + CALL _malloc + POP BC +; 43 } +L_6: + LD SP,IX + POP IX + RET + + +;**************************** _realloc *************************** +;Name Addr/Register Size Type +;_free IMPORT ----- function +;_memcpy IMPORT ----- function +;_malloc IMPORT ----- function +;h IX-6 3 variable +;p IX-3 3 variable +;size IX+9 3 parameter +;ptr IX+6 3 parameter + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + + XREF _free:ROM + XREF _malloc:ROM + XREF _memcpy:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _realloc + END diff --git a/frontends/calculator/CEdev/lib/shared/removeallbreakpoints.src b/frontends/calculator/CEdev/lib/shared/removeallbreakpoints.src new file mode 100644 index 0000000..ddae792 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/removeallbreakpoints.src @@ -0,0 +1,12 @@ +; --- +; remove all breakpoints +; --- + + .def _dbg_RemoveAllBreakpoints + .assume adl=1 + +_dbg_RemoveAllBreakpoints: + scf + sbc hl,hl + ld (hl),9 + ret diff --git a/frontends/calculator/CEdev/lib/shared/removeallwatchpoints.src b/frontends/calculator/CEdev/lib/shared/removeallwatchpoints.src new file mode 100644 index 0000000..7171ba4 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/removeallwatchpoints.src @@ -0,0 +1,12 @@ +; --- +; remove all watchpoints +; --- + + .def _dbg_RemoveAllWatchpoints + .assume adl=1 + +_dbg_RemoveAllWatchpoints: + scf + sbc hl,hl + ld (hl),10 + ret diff --git a/frontends/calculator/CEdev/lib/shared/removebreakpoint.src b/frontends/calculator/CEdev/lib/shared/removebreakpoint.src new file mode 100644 index 0000000..d2c4b9b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/removebreakpoint.src @@ -0,0 +1,16 @@ +; --- +; remove breakpoint +; --- + + .def _dbg_RemoveBreakpoint + .assume adl=1 + +_dbg_RemoveBreakpoint: + pop hl + pop de + push de + push hl + scf + sbc hl,hl + ld (hl),4 + ret diff --git a/frontends/calculator/CEdev/lib/shared/removewatchpoint.src b/frontends/calculator/CEdev/lib/shared/removewatchpoint.src new file mode 100644 index 0000000..a096d15 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/removewatchpoint.src @@ -0,0 +1,16 @@ +; --- +; remove watchpoint +; --- + + .def _dbg_RemoveWatchpoint + .assume adl=1 + +_dbg_RemoveWatchpoint: + pop hl + pop de + push de + push hl + scf + sbc hl,hl + ld (hl),8 + ret diff --git a/frontends/calculator/CEdev/lib/shared/round.src b/frontends/calculator/CEdev/lib/shared/round.src new file mode 100644 index 0000000..e78e237 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/round.src @@ -0,0 +1,44 @@ + .def _round + .ref __frameset0 + .ref __fcmp + .ref __fadd + .ref __fsub + .ref _floor + .ref _ceil + .assume adl=1 + +_round: + call __frameset0 + ld hl,(ix+6) + ld e,(ix+9) + ld bc,0 + xor a,a + call __fcmp + push af + or a,a + sbc hl,hl + ld e,63 + ld bc,(ix+6) + pop af + ld a,(ix+9) + jp m,IsLessZero + call __fadd + or a,a + sbc hl,hl + ld l,a + push bc + push hl + call _floor + jr Finish +IsLessZero: + call __fsub + or a,a + sbc hl,hl + ld l,a + push bc + push hl + call _ceil +Finish: + ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/sand.src b/frontends/calculator/CEdev/lib/shared/sand.src new file mode 100644 index 0000000..a39e220 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sand.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short AND. +; Input: +; Operand1: +; hl : 16 bit +; +; Operand2: +; bc : 16 bit +; +; Output: +; Result: hl : 16 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __sand + .assume adl=1 + +__sand equ 000200h diff --git a/frontends/calculator/CEdev/lib/shared/sbrk.src b/frontends/calculator/CEdev/lib/shared/sbrk.src new file mode 100644 index 0000000..ab1cf1b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sbrk.src @@ -0,0 +1,49 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Heap allocation routine s_sbrk +; Input: +; argument : 24 bit - number of bytes requested +; +; Output: +; Result: HL: 24 bit address of memory allocated +; HL = 0 if no memory available + +; Registers Used: +; +;------------------------------------------------------------------------- + .assume adl=1 + .ref __heapbot + .ref __heaptop + .def __s_sbrk + + SEGMENT DATA +__sbrkbase: + .trio __heapbot + + SEGMENT CODE +__s_sbrk: + ld hl,3 + add hl,sp + ld hl,(hl) ;nbytes + ld de,(__sbrkbase) + add hl,de + jr c,_fail + + ; fail if hl >= sp. + ; hl is now, or will be, the next un-allocated address = minimal value + ; for sp that will not corrupt allocated data or that writing to + ; allocated data may corrupt the stack. + ; Actually, if hl is anywhere close to sp we're probably in trouble :( + + push hl + sbc hl,sp + pop hl + jr nc,_fail +_ok: + ex hl,de + ld (__sbrkbase),de + ret +_fail: + or a,a + sbc hl,hl + ret diff --git a/frontends/calculator/CEdev/lib/shared/scmpzero.src b/frontends/calculator/CEdev/lib/shared/scmpzero.src new file mode 100644 index 0000000..5c62a13 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/scmpzero.src @@ -0,0 +1,16 @@ +; (c) Copyright 2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Set flag for comparison of 16-bit scalar with constant value zero +; Input: +; Operand1: HL register +; +; Output: +; Result: f register +; +; Registers Used: +; None +;------------------------------------------------------------------------- + .def __scmpzero + .assume adl=1 + +__scmpzero equ 000204h diff --git a/frontends/calculator/CEdev/lib/shared/sdivs.src b/frontends/calculator/CEdev/lib/shared/sdivs.src new file mode 100644 index 0000000..75cda77 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sdivs.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Division Signed +; Input: +; Operand1: +; hl : 16 bits x +; +; Operand2: +; bc : 16 bits y +; +; Output: +; Result: hl : 16 bits +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __sdivs + .assume adl=1 + +__sdivs equ 000208h diff --git a/frontends/calculator/CEdev/lib/shared/sdivu.src b/frontends/calculator/CEdev/lib/shared/sdivu.src new file mode 100644 index 0000000..2002728 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sdivu.src @@ -0,0 +1,21 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Division Unsigned +; Input: +; Operand1: +; hl : 16 bits +; +; Operand2: +; bc : 16 bits +; +; Output: +; Result: hl : 16 bits +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __sdivu + .assume adl=1 + +__sdivu equ 00020Ch + diff --git a/frontends/calculator/CEdev/lib/shared/seqcase.src b/frontends/calculator/CEdev/lib/shared/seqcase.src new file mode 100644 index 0000000..5c4a084 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/seqcase.src @@ -0,0 +1,25 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; Returns to case label +; Data at Return Address: +; DW numCases 0 +; DW24 startValue 2 +; DW24 Lab1 5 +; DW24 Lab2 8 +; ... +; DW24 defaultLab 5+3*numCases +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __seqcase + .assume adl=1 + +__seqcase equ 000210h \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/seqcased.src b/frontends/calculator/CEdev/lib/shared/seqcased.src new file mode 100644 index 0000000..d6dcea1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/seqcased.src @@ -0,0 +1,26 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; Result: hl : 24 bit address of case jp to take +; Registers Used: +; +; Data at Return Address: +; JP (HL) 0 +; DW numCases 1 +; DW24 startValue 3 +; DW24 Lab1 6 +; DW24 Lab2 9 +; ... +; DW24 defaultLab 6+3*numCases +; +;------------------------------------------------------------------------- + .def __seqcaseD + .assume adl=1 + +__seqcaseD equ 000214h diff --git a/frontends/calculator/CEdev/lib/shared/setbreakpoint.src b/frontends/calculator/CEdev/lib/shared/setbreakpoint.src new file mode 100644 index 0000000..5a1e929 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/setbreakpoint.src @@ -0,0 +1,16 @@ +; --- +; set breakpoint +; --- + + .def _dbg_SetBreakpoint + .assume adl=1 + +_dbg_SetBreakpoint: + pop hl + pop de + push de + push hl + scf + sbc hl,hl + ld (hl),3 + ret diff --git a/frontends/calculator/CEdev/lib/shared/setflag.src b/frontends/calculator/CEdev/lib/shared/setflag.src new file mode 100644 index 0000000..b710b95 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/setflag.src @@ -0,0 +1,22 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Set Sign flag for signed comparison +; s <-- s xor v +; Input: +; Operand1: f register +; +; Output: +; Result: updated f register +; +; Registers Used: +; None +;------------------------------------------------------------------------- +; if ( V == 0) +; S = S xor 0 -> S = S +; if ( V != 0) +; S = S xor V +;------------------------------------------------------------------------- + .def __setflag + .assume adl=1 + +__setflag equ 000218h diff --git a/frontends/calculator/CEdev/lib/shared/setjmp.src b/frontends/calculator/CEdev/lib/shared/setjmp.src new file mode 100644 index 0000000..9bc7c37 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/setjmp.src @@ -0,0 +1,6 @@ + .def _setjmp + .assume adl=1 + +; int setjmp(jmp_buf env); + +_setjmp equ 0000B8h diff --git a/frontends/calculator/CEdev/lib/shared/setreadwatchpoint.src b/frontends/calculator/CEdev/lib/shared/setreadwatchpoint.src new file mode 100644 index 0000000..7ada983 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/setreadwatchpoint.src @@ -0,0 +1,18 @@ +; --- +; set read watchpoint +; --- + + .def _dbg_SetReadWatchpoint + .assume adl=1 + +_dbg_SetReadWatchpoint: + pop hl + pop de + pop bc + push bc + push de + push hl + scf + sbc hl,hl + ld (hl),5 + ret diff --git a/frontends/calculator/CEdev/lib/shared/setreadwritewatchpoint.src b/frontends/calculator/CEdev/lib/shared/setreadwritewatchpoint.src new file mode 100644 index 0000000..f303929 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/setreadwritewatchpoint.src @@ -0,0 +1,18 @@ +; --- +; set write watchpoint +; --- + + .def _dbg_SetReadWriteWatchpoint + .assume adl=1 + +_dbg_SetReadWriteWatchpoint: + pop hl + pop de + pop bc + push bc + push de + push hl + scf + sbc hl,hl + ld (hl),7 + ret diff --git a/frontends/calculator/CEdev/lib/shared/setwatchpoint.src b/frontends/calculator/CEdev/lib/shared/setwatchpoint.src new file mode 100644 index 0000000..bf148d4 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/setwatchpoint.src @@ -0,0 +1,18 @@ +; --- +; set watchpoint +; --- + + .def _dbg_SetWatchpoint + .assume adl=1 + +_dbg_SetWatchpoint: + pop hl + pop de + pop bc + push bc + push de + push hl + scf + sbc hl,hl + ld (hl),11 + ret diff --git a/frontends/calculator/CEdev/lib/shared/setwritewatchpoint.src b/frontends/calculator/CEdev/lib/shared/setwritewatchpoint.src new file mode 100644 index 0000000..62bb06f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/setwritewatchpoint.src @@ -0,0 +1,18 @@ +; --- +; set write watchpoint +; --- + + .def _dbg_SetWriteWatchpoint + .assume adl=1 + +_dbg_SetWriteWatchpoint: + pop hl + pop de + pop bc + push bc + push de + push hl + scf + sbc hl,hl + ld (hl),6 + ret diff --git a/frontends/calculator/CEdev/lib/shared/sldix.src b/frontends/calculator/CEdev/lib/shared/sldix.src new file mode 100644 index 0000000..45c8006 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sldix.src @@ -0,0 +1,17 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; short load hl,(ix+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from ix +; +; Output: +; Result: hl : 16 bit +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __sldix + .assume adl=1 + +__sldix equ 00021Ch diff --git a/frontends/calculator/CEdev/lib/shared/sldiy.src b/frontends/calculator/CEdev/lib/shared/sldiy.src new file mode 100644 index 0000000..2a820ce --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sldiy.src @@ -0,0 +1,18 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; short load hl,(iy+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from iy +; +; Output: +; Result: hl : 16-bit +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __sldiy + .assume adl=1 + +__sldiy equ 000220h + diff --git a/frontends/calculator/CEdev/lib/shared/smuls.src b/frontends/calculator/CEdev/lib/shared/smuls.src new file mode 100644 index 0000000..4ac0260 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/smuls.src @@ -0,0 +1,21 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Multiply Signed +; Input: +; Operand1: +; bc : 16 bits +; +; Operand2: +; hl : 16 bits +; +; Output: +; Result: hl : 16 bits +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __smuls + .assume adl=1 + +__smuls equ 000224h + diff --git a/frontends/calculator/CEdev/lib/shared/smulu.src b/frontends/calculator/CEdev/lib/shared/smulu.src new file mode 100644 index 0000000..4433a62 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/smulu.src @@ -0,0 +1,21 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Multiply Unsigned +; Input: +; Operand1: +; BC : 16 bits +; +; Operand2: +; HL : 16 bits +; +; Output: +; Result: HL : 16 bits +; +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __smulu + .assume adl=1 + +__smulu equ 000228h + diff --git a/frontends/calculator/CEdev/lib/shared/sneg.src b/frontends/calculator/CEdev/lib/shared/sneg.src new file mode 100644 index 0000000..4a3fb47 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sneg.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short NEG. +; Input: +; Operand1: +; hl : 16 bit +; +; Output: +; Result: hl : 16 bit +; Registers Used: +; None +;------------------------------------------------------------------------- + .def __sneg + .assume adl=1 + +__sneg equ 00022Ch \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/snot.src b/frontends/calculator/CEdev/lib/shared/snot.src new file mode 100644 index 0000000..307da76 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/snot.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short NOT. +; Input: +; Operand1: +; hl : 16 bit +; +; Output: +; Result: hl : 16 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __snot + .assume adl=1 + +__snot equ 000230h diff --git a/frontends/calculator/CEdev/lib/shared/sor.src b/frontends/calculator/CEdev/lib/shared/sor.src new file mode 100644 index 0000000..119a003 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sor.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short OR. +; Input: +; Operand1: +; hl : 16 bit +; +; Operand2: +; bc : 16 bit +; +; Output: +; Result: hl : 16 bit +; hl OR bc +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __sor + .assume adl=1 + +__sor equ 000234h diff --git a/frontends/calculator/CEdev/lib/shared/sprintf.src b/frontends/calculator/CEdev/lib/shared/sprintf.src new file mode 100644 index 0000000..7c09553 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sprintf.src @@ -0,0 +1,7 @@ + .def _sprintf + .assume adl=1 + +; int sprintf (char * str, const char * format, ...); + +_sprintf equ 0000BCh + diff --git a/frontends/calculator/CEdev/lib/shared/sqrtf.src b/frontends/calculator/CEdev/lib/shared/sqrtf.src new file mode 100644 index 0000000..563d151 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sqrtf.src @@ -0,0 +1,37 @@ +;-------------------------------------------------------------- +; +; IEEE Single precision square root +; Copyright 2003-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +; +; INPUTS: +; Operand1: +; (stack) : 32 bit IEEE format +; +; OUTPUTS: +; Result: +; EuHL : 32 bit IEEE format result +; +; ALGORITHM: +; This algorithm is very similar to that used for binary +; division; readers should be familiar with that +; algorithm of repetitive compare/subtract, and shift. +; This algorithm uses the same concepts, except that the +; number compared/subtracted is 2*x+1, where 'x' is the +; developing result. Briefly, if 'y' is the input parameter, +; and 'x' is the result developed (and subtracted out) so +; far, then 'y - x^2' is the residual value. If the residual +; is greater than '2*x + 1', then we subtract that out, +; and add one to x; this means that the new residual is +; 'y - (x+1)^2'. Repetitively applied with shifting, 'x^2' +; approaches the value of 'y'. +; +; Registers Used: +; AF,BC,D +; +;-------------------------------------------------------------- + .def _sqrtf + .assume adl=1 + +_sqrtf equ 000298h diff --git a/frontends/calculator/CEdev/lib/shared/srand.src b/frontends/calculator/CEdev/lib/shared/srand.src new file mode 100644 index 0000000..bbcf8f2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/srand.src @@ -0,0 +1,12 @@ + .ref __setstate + .def _srand + .assume adl=1 + +; void srand(unsigned int seed); + +_srand: + pop bc + ex (sp),hl + push bc + xor a,a + jp __setstate diff --git a/frontends/calculator/CEdev/lib/shared/srandom.src b/frontends/calculator/CEdev/lib/shared/srandom.src new file mode 100644 index 0000000..0aa5189 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/srandom.src @@ -0,0 +1,29 @@ +; --- +; void srandom(uint32_t seed) +; --- + + .ref __state + .def _srandom + .def __setstate + .assume adl=1 + +_MemClear equ 00210E0h + +_srandom: + pop bc + pop de + ex (sp),hl ; lude = seed + push de + push bc + ex de,hl + ld a,e ; auhl = seed +__setstate: + ld (__state),hl + ld hl,__state+3 + ld (hl),a + ld b,12 +__setstateloop: + inc hl + ld (hl),b + djnz __setstateloop + ret diff --git a/frontends/calculator/CEdev/lib/shared/srems.src b/frontends/calculator/CEdev/lib/shared/srems.src new file mode 100644 index 0000000..54b2907 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/srems.src @@ -0,0 +1,21 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Modulus Signed +; Input: +; Operand1: +; hl : 16 bits +; +; Operand2: +; bc : 16 bits +; +; Output: +; Result: hl : 16 bits +; +; Registers Used: +; +;------------------------------------------------------------------------- + .ref __irems + .def __srems + .assume adl=1 + +__srems equ 000238h diff --git a/frontends/calculator/CEdev/lib/shared/sremu.src b/frontends/calculator/CEdev/lib/shared/sremu.src new file mode 100644 index 0000000..6ecd4aa --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sremu.src @@ -0,0 +1,21 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Modulus Unsigned +; Input: +; Operand1: +; hl : 16 bits +; +; Operand2: +; bc : 16 bits +; +; Output: +; Result: hl : 16 bits +; +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __sremu + .ref __iremu + .assume adl=1 + +__sremu equ 00023Ch diff --git a/frontends/calculator/CEdev/lib/shared/sshl.src b/frontends/calculator/CEdev/lib/shared/sshl.src new file mode 100644 index 0000000..cf5034d --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sshl.src @@ -0,0 +1,22 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Shift Left +; Input: +; Operand1: +; BC : 16 bit number of bits to shift +; Assume B=0 C=shift count +; Operand2: +; HL : 16 bit value to be shifted by C +; +; Output: +; Result: HL : 16 bit +; Registers Used: +; none +; Comments: +; Created 12/2001: G.Loegel +;------------------------------------------------------------------------- + .def __sshl, __sshl_b + .assume adl=1 + +__sshl_b equ 000244h +__sshl equ 000240h diff --git a/frontends/calculator/CEdev/lib/shared/sshrs.src b/frontends/calculator/CEdev/lib/shared/sshrs.src new file mode 100644 index 0000000..a997ae1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sshrs.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Shift Right Signed +; Input: +; Operand1: +; BC : 16 bit number of bits to shift +; Assume B=0 C=shift count +; Operand2: +; HL : 16 bit value to be shifted by C +; +; Output: +; Result: HL : 16 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __sshrs, __sshrs_b + .assume adl=1 + +__sshrs_b equ 00024Ch +__sshrs equ 000248h diff --git a/frontends/calculator/CEdev/lib/shared/sshru.src b/frontends/calculator/CEdev/lib/shared/sshru.src new file mode 100644 index 0000000..796f776 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sshru.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Shift Right Unsigned +; Input: +; Operand1: +; BC : 16 bit number of bits to shift +; Assume B=0 C=shift count +; Operand2: +; HL : 16 bit value to be shifted by C +; +; Output: +; Result: HL : 16 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __sshru, __sshru_b + .assume adl=1 + +__sshru_b equ 000254h +__sshru equ 000250h diff --git a/frontends/calculator/CEdev/lib/shared/sstix.src b/frontends/calculator/CEdev/lib/shared/sstix.src new file mode 100644 index 0000000..6f0a11b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sstix.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer store (ix+nnnnnn),HL +; Input: +; Operand1: +; BC : 24-bit offset from ix +; HL : 16-bit integer to store +; +; Output: +; +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __sstix + .assume adl=1 + +__sstix equ 000258h + diff --git a/frontends/calculator/CEdev/lib/shared/sstiy.src b/frontends/calculator/CEdev/lib/shared/sstiy.src new file mode 100644 index 0000000..504133c --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sstiy.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; short store (iy+nnnnnn),HL +; Input: +; Operand1: +; BC : 24-bit offset from iy +; HL : 16-bit integer to store +; +; Output: +; +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __sstiy + .assume adl=1 + +__sstiy equ 00025Ch + diff --git a/frontends/calculator/CEdev/lib/shared/stoi.src b/frontends/calculator/CEdev/lib/shared/stoi.src new file mode 100644 index 0000000..9ad6430 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/stoi.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Signed Short to Integer Conversion +; Input: +; Operand1: +; BC : 16 bit number to convert +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __stoi + .assume adl=1 + +__stoi equ 000260h diff --git a/frontends/calculator/CEdev/lib/shared/stoiu.src b/frontends/calculator/CEdev/lib/shared/stoiu.src new file mode 100644 index 0000000..db0d59e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/stoiu.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Unsigned Short to Integer Conversion +; Input: +; Operand1: +; BC : 16 bit number to convert +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __stoiu + .assume adl=1 + +__stoiu equ 000264h diff --git a/frontends/calculator/CEdev/lib/shared/strcasecmp.src b/frontends/calculator/CEdev/lib/shared/strcasecmp.src new file mode 100644 index 0000000..2808f5b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strcasecmp.src @@ -0,0 +1,6 @@ + .def _strcasecmp + .assume adl=1 + +; int strcasecmp(const char *f1, const char *f2); + +_strcasecmp equ 021E3Ch \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/strcat.src b/frontends/calculator/CEdev/lib/shared/strcat.src new file mode 100644 index 0000000..297e5da --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strcat.src @@ -0,0 +1,6 @@ + .def _strcat + .assume adl=1 + +; char *strcat(char *s1, char *s2); + +_strcat equ 0000C0h diff --git a/frontends/calculator/CEdev/lib/shared/strchr.src b/frontends/calculator/CEdev/lib/shared/strchr.src new file mode 100644 index 0000000..103602b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strchr.src @@ -0,0 +1,6 @@ + .def _strchr + .assume adl=1 + +; char *strchr(char *s, int c); + +_strchr equ 0000C4h diff --git a/frontends/calculator/CEdev/lib/shared/strcmp.src b/frontends/calculator/CEdev/lib/shared/strcmp.src new file mode 100644 index 0000000..9eb4f6e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strcmp.src @@ -0,0 +1,6 @@ + .def _strcmp + .assume adl=1 + +; int strcmp(register char *s1, register char *s2) + +_strcmp equ 0000C8h diff --git a/frontends/calculator/CEdev/lib/shared/strcpy.src b/frontends/calculator/CEdev/lib/shared/strcpy.src new file mode 100644 index 0000000..38c0eb0 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strcpy.src @@ -0,0 +1,6 @@ + .def _strcpy + .assume adl=1 + +; char *strcpy(void *d, void *s); + +_strcpy equ 0000CCh diff --git a/frontends/calculator/CEdev/lib/shared/strcspn.src b/frontends/calculator/CEdev/lib/shared/strcspn.src new file mode 100644 index 0000000..1d83171 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strcspn.src @@ -0,0 +1,6 @@ + .def _strcspn + .assume adl=1 + +; size_t strcspn(char *s1, char *s2); + +_strcspn equ 0000D0h diff --git a/frontends/calculator/CEdev/lib/shared/strdup.src b/frontends/calculator/CEdev/lib/shared/strdup.src new file mode 100644 index 0000000..2debaa3 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strdup.src @@ -0,0 +1,35 @@ + .ref __frameset + .ref _malloc + .ref _strlen + .ref _strcpy + .def _strdup + .assume adl=1 + +_strdup: + ld hl,-3 + call __frameset + ld bc,(ix+6) + push bc + call _strlen + pop bc + inc hl + push hl + call _malloc + pop bc + ld (ix+-3),hl + add hl,de + or a,a + sbc hl,de + jr z,MallocFail + ld bc,(ix+6) + push bc + ld bc,(ix+-3) + push bc + call _strcpy + pop bc + pop bc +MallocFail: + ld hl,(ix+-3) + ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/strlen.src b/frontends/calculator/CEdev/lib/shared/strlen.src new file mode 100644 index 0000000..5ef9fad --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strlen.src @@ -0,0 +1,6 @@ + .def _strlen + .assume adl=1 + +; size_t strlen(char *s); + +_strlen equ 0000D4h diff --git a/frontends/calculator/CEdev/lib/shared/strncasecmp.src b/frontends/calculator/CEdev/lib/shared/strncasecmp.src new file mode 100644 index 0000000..fdc603e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strncasecmp.src @@ -0,0 +1,6 @@ + .def _strncasecmp + .assume adl=1 + +; int strncasecmp ( const char *str1 , const char *str2 , int len ); + +_strncasecmp equ 021E3Ch diff --git a/frontends/calculator/CEdev/lib/shared/strncat.src b/frontends/calculator/CEdev/lib/shared/strncat.src new file mode 100644 index 0000000..5f6a532 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strncat.src @@ -0,0 +1,6 @@ + .def _strncat + .assume adl=1 + +; char *strncat(char *s1, char *s2, size_t n) + +_strncat equ 0000D8h diff --git a/frontends/calculator/CEdev/lib/shared/strncmp.src b/frontends/calculator/CEdev/lib/shared/strncmp.src new file mode 100644 index 0000000..08f2750 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strncmp.src @@ -0,0 +1,6 @@ + .def _strncmp + .assume adl=1 + +; int strncmp(char *s1, char *s2, size_t n) + +_strncmp equ 0000DCh diff --git a/frontends/calculator/CEdev/lib/shared/strncpy.src b/frontends/calculator/CEdev/lib/shared/strncpy.src new file mode 100644 index 0000000..b46a72e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strncpy.src @@ -0,0 +1,6 @@ + .def _strncpy + .assume adl=1 + +; char *strncpy(char *dst, char *src, size_t n) + +_strncpy equ 0000E0h diff --git a/frontends/calculator/CEdev/lib/shared/strndup.src b/frontends/calculator/CEdev/lib/shared/strndup.src new file mode 100644 index 0000000..26c656c --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strndup.src @@ -0,0 +1,46 @@ + .def _strndup + .ref __frameset + .ref _strlen + .ref _malloc + .ref _memcpy + .assume adl=1 + +_strndup: + ld hl,-6 + call __frameset + ld bc,(ix+6) + push bc + call _strlen + ld (ix+-3),hl + ex de,hl + ld hl,(ix+9) + or a,a + sbc hl,de + jr nc,Greater + ld hl,(ix+9) + ld (ix+-3),hl +Greater: + ld bc,(ix+-3) + inc bc + push bc + call _malloc + ld (ix+-6),hl + add hl,bc + or a,a + sbc hl,bc + jr z,MallocFail + ld bc,(ix+-3) + ld hl,(ix+-6) + add hl,bc + ld (hl),0 + or a,a + sbc hl,bc + push bc + ld bc,(ix+6) + push bc + push hl + call _memcpy +MallocFail: + ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/strnlen.src b/frontends/calculator/CEdev/lib/shared/strnlen.src new file mode 100644 index 0000000..823ea49 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strnlen.src @@ -0,0 +1,27 @@ + .def _strnlen + .ref __frameset0 + .assume adl=1 + +_strnlen: + call __frameset0 + ld de,(ix+6) + ld bc,(ix+9) + or a,a + sbc hl,hl + jr StartFor +ForLoop: + inc hl + inc de +StartFor: + push hl + or a,a + sbc hl,bc + pop hl + jr nc,ReachedMax + ld a,(de) + or a,a + jr nz,ForLoop +ReachedMax: + ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/strpbrk.src b/frontends/calculator/CEdev/lib/shared/strpbrk.src new file mode 100644 index 0000000..f9ff01f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strpbrk.src @@ -0,0 +1,6 @@ + .def _strpbrk + .assume adl=1 + +; char *strpbrk(char *s1, char *s2) + +_strpbrk equ 0000E4h diff --git a/frontends/calculator/CEdev/lib/shared/strrchr.src b/frontends/calculator/CEdev/lib/shared/strrchr.src new file mode 100644 index 0000000..80fab4a --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strrchr.src @@ -0,0 +1,6 @@ + .def _strrchr + .assume adl=1 + +; char *strrchr(char *s, int c) + +_strrchr equ 0000E8h diff --git a/frontends/calculator/CEdev/lib/shared/strspn.src b/frontends/calculator/CEdev/lib/shared/strspn.src new file mode 100644 index 0000000..bb5ad3e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strspn.src @@ -0,0 +1,5 @@ + .def _strspn + .assume adl=1 + +; size_t strspn(char *s1,char *s2) +_strspn equ 0000ECh diff --git a/frontends/calculator/CEdev/lib/shared/strstr.src b/frontends/calculator/CEdev/lib/shared/strstr.src new file mode 100644 index 0000000..585c5c0 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strstr.src @@ -0,0 +1,6 @@ + .def _strstr + .assume adl=1 + +; char *strstr(char *s1, char *s2); + +_strstr equ 0000F0h diff --git a/frontends/calculator/CEdev/lib/shared/strtok.src b/frontends/calculator/CEdev/lib/shared/strtok.src new file mode 100644 index 0000000..14f3ef6 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strtok.src @@ -0,0 +1,5 @@ + .def _strtok + .assume adl=1 + +_strtok equ 0000F4h + \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/strtol.src b/frontends/calculator/CEdev/lib/shared/strtol.src new file mode 100644 index 0000000..fff8564 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strtol.src @@ -0,0 +1,370 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\STRTOL.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 #include +; 10 #include +; 11 #include +; 12 #include +; 13 #include +; 14 #include +; 15 +; 16 /************************************************* +; 17 * +; 18 * strtol - string to long conversion +; 19 * +; 20 * Inputs: +; 21 * cp - pointer to the character string +; 22 * endptr - place to put ptr to first invalid character +; 23 * base - radix +; 24 * +; 25 * Returns: +; 26 * the value of the number +; 27 * +; 28 *************************************************/ +; 29 long strtol(char *cp,char **endptr,int base) +; 30 { +_strtol: + LD HL,-30 + CALL __frameset +; 31 register long sum,psum; +; 32 register char sign; +; 33 register int radix = base; + LD BC,(IX+12) + LD (IX+-8),BC +; 34 char digit; +; 35 +; 36 while (isspace(*cp)) + JR L_0 +L_1: +; 37 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_0: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_1 +; 38 +; 39 sign = 0; + LD (IX+-9),0 +; 40 if ( *cp == (char)'-' ) { + LD HL,(IX+6) + LD A,(HL) + CP A,45 + JR NZ,L_5 +; 41 sign = 1; + LD (IX+-9),1 +; 42 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 43 } +; 44 else if ( *cp == (char)'+' ) + JR L_11 +L_5: + LD HL,(IX+6) + LD A,(HL) + CP A,43 + JR NZ,L_11 +; 45 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_11: +; 46 +; 47 if (base == 0) { + LD HL,(IX+12) + CALL __icmpzero + JR NZ,L_16 +; 48 radix = 10; + LD BC,10 + LD (IX+-8),BC +; 49 if (*cp == (char)'0') + LD HL,(IX+6) + LD A,(HL) + CP A,48 + JR NZ,L_16 +; 50 if (cp[1] == (char)'x' || cp[1] == (char)'X') + LD BC,(IX+6) + INC BC + LD (IX+-12),BC + LD HL,BC + LD A,(HL) + CP A,120 + JR Z,L_7 + LD HL,(IX+-12) + LD A,(HL) + CP A,88 + JR NZ,L_8 +L_7: +; 51 radix = 16; + LD BC,16 + LD (IX+-8),BC +; 52 else + JR L_16 +L_8: +; 53 radix = 8; + LD BC,8 + LD (IX+-8),BC +; 54 } +L_16: +; 55 +; 56 if (base == 16 && *cp == (char)'0' && (cp[1] == (char)'x' || cp[1] == (char)'X')) + LD BC,16 + LD HL,(IX+12) + OR A,A + SBC HL,BC + JR NZ,L_17 + LD HL,(IX+6) + LD A,(HL) + CP A,48 + JR NZ,L_17 + LD BC,(IX+6) + INC BC + LD (IX+-15),BC + LD HL,BC + LD A,(HL) + CP A,120 + JR Z,L_15 + LD HL,(IX+-15) + LD A,(HL) + CP A,88 + JR NZ,L_17 +L_15: +; 57 cp += 2; + LD IY,(IX+6) + LEA IY,IY+2 + LD (IX+6),IY +L_17: +; 58 +; 59 sum = 0; + LD BC,0 + LD (IX+-5),BC + XOR A,A + LD (IX+-2),A +; 60 for (;;) { +L_30: +; 61 digit = toupper(*(cp++)); + LD BC,(IX+6) + LD (IX+-30),BC + LD BC,(IX+6) + INC BC + LD (IX+6),BC + LD HL,(IX+-30) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + PUSH HL + CALL _toupper + POP BC + LD (IX+-1),L +; 62 if (digit >= (char)'A') + LD A,(IX+-1) + CP A,65 + CALL __setflag + JP M,L_20 +; 63 digit = (digit - (char)'A') + (char)10; + LD A,(IX+-1) + ADD A,-55 + LD (IX+-1),A +; 64 else + JR L_23 +L_20: +; 65 digit -= (char)'0'; + LD A,(IX+-1) + ADD A,-48 + LD (IX+-1),A +L_23: +; 66 if (digit < (char)0 || digit >= (char)radix) + LD A,(IX+-1) + OR A,A + JP M,L_40 + LD B,(IX+-8) + LD A,(IX+-1) + CP A,B + CALL __setflag + JP P,L_40 +; 67 break; +; 68 psum = sum; + LD BC,(IX+-5) + LD A,(IX+-2) + LD (IX+-27),BC + LD (IX+-24),A +; 69 sum *= radix; + LD BC,(IX+-8) + CALL __itol + LD HL,(IX+-5) + LD E,(IX+-2) + CALL __lmuls + LD (IX+-5),HL + LD (IX+-2),E +; 70 sum += digit; + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + LD BC,HL + LD A,H + LD HL,(IX+-5) + LD E,(IX+-2) + CALL __ladd + LD (IX+-5),HL + LD (IX+-2),E +; 71 if (sum < psum) { /* overflow */ + LD HL,(IX+-5) + LD E,(IX+-2) + LD BC,(IX+-27) + LD A,(IX+-24) + CALL __lcmps + CALL __setflag + JP P,L_30 +; 72 sum = sign ? LONG_MIN : LONG_MAX; + LD A,(IX+-9) + OR A,A + JR Z,L_27 + LD BC,0 + LD (IX+-19),BC + LD A,128 + LD (IX+-16),A + JR L_28 +L_27: + LD BC,16777215 + LD (IX+-19),BC + LD A,127 + LD (IX+-16),A +L_28: + LD BC,(IX+-19) + LD A,(IX+-16) + LD (IX+-5),BC + LD (IX+-2),A +; 73 errno=ERANGE; + LD BC,5 + LD (_errno),BC +; 74 break; +; 75 } +; 76 } +L_40: +; 77 +; 78 if (endptr) { + LD HL,(IX+9) + CALL __icmpzero + JR Z,L_45 +; 79 --cp; + LD IY,(IX+6) + LEA IY,IY+-1 + LD (IX+6),IY +; 80 if (base == 0) { + LD HL,(IX+12) + CALL __icmpzero + JR Z,L_35 + JR L_38 +; 81 while (*cp == (char)'h' || *cp == (char)'u' || +L_36: +; 82 *cp == (char)'l' || *cp == (char)'L') +; 83 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_35: + LD HL,(IX+6) + LD A,(HL) + CP A,104 + JR Z,L_36 + LD HL,(IX+6) + LD A,(HL) + CP A,117 + JR Z,L_36 + LD HL,(IX+6) + LD A,(HL) + CP A,108 + JR Z,L_36 + LD HL,(IX+6) + LD A,(HL) + CP A,76 + JR Z,L_36 +; 84 } +L_38: +; 85 *endptr = cp; + LD HL,(IX+9) + LD BC,(IX+6) + LD (HL),BC +; 86 } +L_45: +; 87 return(sign ? -sum : sum); + LD A,(IX+-9) + OR A,A + JR Z,L_43 + LD HL,(IX+-5) + LD E,(IX+-2) + CALL __lneg + LD (IX+-23),HL + LD (IX+-20),E + JR L_44 +L_43: + LD BC,(IX+-5) + LD A,(IX+-2) + LD (IX+-23),BC + LD (IX+-20),A +L_44: + LD HL,(IX+-23) + LD E,(IX+-20) +; 88 } + LD SP,IX + POP IX + RET + + +;**************************** _strtol *************************** +;Name Addr/Register Size Type +;_errno IMPORT 3 variable +;_toupper IMPORT ----- function +;_isspace IMPORT ----- function +;psum IX-27 4 variable +;temp41 IX-23 4 variable +;temp25 IX-19 4 variable +;G_1 IX-15 3 variable +;G_0 IX-12 3 variable +;sign IX-9 1 variable +;radix IX-8 3 variable +;sum IX-5 4 variable +;digit IX-1 1 variable +;base IX+12 3 parameter +;endptr IX+9 3 parameter +;cp IX+6 3 parameter + + +; Stack Frame Size: 45 (bytes) +; Spill Code: 0 (instruction) + + + XREF _errno:ROM + XREF _toupper:ROM + XREF _isspace:ROM + XREF __lcmps:ROM + XREF __ladd:ROM + XREF __lmuls:ROM + XREF __lneg:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XDEF _strtol + END diff --git a/frontends/calculator/CEdev/lib/shared/strtoul.src b/frontends/calculator/CEdev/lib/shared/strtoul.src new file mode 100644 index 0000000..557d691 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strtoul.src @@ -0,0 +1,403 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\STRTOUL.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 2006-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 #include +; 10 #include +; 11 #include +; 12 +; 13 /************************************************* +; 14 * +; 15 * strtoul - string to unsigned long conversion +; 16 * +; 17 * Inputs: +; 18 * cp - pointer to the character string +; 19 * endptr - place to put ptr to first invalid character +; 20 * base - radix +; 21 * +; 22 * Returns: +; 23 * the value of the number +; 24 * +; 25 *************************************************/ +; 26 unsigned long strtoul(char * cp,char ** endptr,int base) +; 27 { +_strtoul: + LD HL,-23 + CALL __frameset +; 28 register unsigned long sum,psum; +; 29 register unsigned char sign; +; 30 register unsigned char radix = base; + LD A,(IX+12) + LD (IX+-2),A +; 31 register unsigned char digit; +; 32 +; 33 while (isspace(*cp)) + JR L_0 +L_1: +; 34 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_0: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_1 +; 35 +; 36 sign = 0; + LD (IX+-7),0 +; 37 +; 38 if ( *cp == '+' ) { + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,43 + SBC HL,BC + JR NZ,L_5 +; 39 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 40 } +; 41 else if ( *cp == '-' ) { + JR L_12 +L_5: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,45 + SBC HL,BC + JR NZ,L_12 +; 42 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 43 sign = 1; + LD (IX+-7),1 +; 44 } +L_12: +; 45 +; 46 if (base == 0) { + LD HL,(IX+12) + CALL __icmpzero + JR NZ,L_17 +; 47 if (*cp == '0') + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,48 + SBC HL,BC + JR NZ,L_10 +; 48 if (cp[1] == 'x' || cp[1] == 'X') + LD BC,(IX+6) + INC BC + LD (IX+-10),BC + LD HL,BC + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,120 + SBC HL,BC + JR Z,L_7 + LD HL,(IX+-10) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,88 + SBC HL,BC + JR NZ,L_8 +L_7: +; 49 radix = 16; + LD (IX+-2),16 +; 50 else + JR L_17 +L_8: +; 51 radix = 8; + LD (IX+-2),8 +; 52 else + JR L_17 +L_10: +; 53 radix = 10; + LD (IX+-2),10 +; 54 } +L_17: +; 55 +; 56 /* If the base is declared as 16, the "0x" prefix may be ignored. */ +; 57 if (base == 16 && *cp == '0' && (cp[1] == 'x' || cp[1] == 'X')) + LD BC,16 + LD HL,(IX+12) + OR A,A + SBC HL,BC + JR NZ,L_18 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,48 + SBC HL,BC + JR NZ,L_18 + LD BC,(IX+6) + INC BC + LD (IX+-13),BC + LD HL,BC + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,120 + SBC HL,BC + JR Z,L_16 + LD HL,(IX+-13) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,88 + SBC HL,BC + JR NZ,L_18 +L_16: +; 58 cp += 2; + LD IY,(IX+6) + LEA IY,IY+2 + LD (IX+6),IY +L_18: +; 59 +; 60 sum = 0; + LD BC,0 + LD (IX+-6),BC + XOR A,A + LD (IX+-3),A +; 61 for (;;) { +L_26: +; 62 digit = toupper(*(cp++)); + LD BC,(IX+6) + LD (IX+-20),BC + LD BC,(IX+6) + INC BC + LD (IX+6),BC + LD HL,(IX+-20) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + PUSH HL + CALL _toupper + POP BC + LD (IX+-1),L +; 63 if (digit >= 'A') + LD A,(IX+-1) + CP A,65 + JR C,L_21 +; 64 digit = digit - ('A' - 10); + LD A,(IX+-1) + SUB A,55 + LD (IX+-1),A +; 65 else + JR L_23 +L_21: +; 66 digit -= '0'; + LD A,(IX+-1) + SUB A,48 + LD (IX+-1),A +L_23: +; 67 if (digit >= radix) + LD A,(IX+-1) + CP A,(IX+-2) + JR NC,L_29 +; 68 break; +; 69 psum = sum; + LD BC,(IX+-6) + LD D,(IX+-3) + LD (IX+-17),BC + LD (IX+-14),D +; 70 sum = sum * radix + digit; + UEXT HL + LD L,(IX+-2) + LD BC,HL + LD A,H + LD HL,(IX+-6) + LD E,(IX+-3) + CALL __lmulu + LD (IX+-23),HL + UEXT HL + LD L,(IX+-1) + LD BC,HL + LD A,H + LD HL,(IX+-23) + CALL __ladd + LD (IX+-6),HL + LD (IX+-3),E +; 71 if (sum < psum) { /* overflow */ + LD HL,(IX+-6) + LD E,(IX+-3) + LD BC,(IX+-17) + LD A,(IX+-14) + CALL __lcmpu + JR NC,L_26 +; 72 errno = ERANGE; + LD BC,5 + LD (_errno),BC +; 73 sum = ULONG_MAX; + LD BC,16777215 + LD (IX+-6),BC + LD A,255 + LD (IX+-3),A +; 74 } +; 75 } + JR L_26 +L_29: +; 76 +; 77 if (sign) { + LD A,(IX+-7) + OR A,A + JR Z,L_38 +; 78 // errno = ERANGE; +; 79 // sum = 0; +; 80 sum = -sum; + LD HL,(IX+-6) + LD E,(IX+-3) + CALL __lneg + LD (IX+-6),HL + LD (IX+-3),E +; 81 } +L_38: +; 82 +; 83 if (endptr) { + LD HL,(IX+9) + CALL __icmpzero + JR Z,L_39 +; 84 --cp; + LD IY,(IX+6) + LEA IY,IY+-1 + LD (IX+6),IY +; 85 if (base == 0) { + LD HL,(IX+12) + CALL __icmpzero + JR Z,L_33 + JR L_36 +; 86 while (*cp == 'h' || *cp == 'u' || +L_34: +; 87 *cp == 'l' || *cp == 'L') +; 88 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_33: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,104 + SBC HL,BC + JR Z,L_34 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,117 + SBC HL,BC + JR Z,L_34 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,108 + SBC HL,BC + JR Z,L_34 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,76 + SBC HL,BC + JR Z,L_34 +; 89 } +L_36: +; 90 *endptr = (char*)cp; + LD HL,(IX+9) + LD BC,(IX+6) + LD (HL),BC +; 91 } +L_39: +; 92 return(sum); + LD HL,(IX+-6) + LD E,(IX+-3) +; 93 } + LD SP,IX + POP IX + RET + + +;**************************** _strtoul *************************** +;Name Addr/Register Size Type +;_errno IMPORT 3 variable +;_toupper IMPORT ----- function +;_isspace IMPORT ----- function +;psum IX-17 4 variable +;G_1 IX-13 3 variable +;G_0 IX-10 3 variable +;sign IX-7 1 variable +;sum IX-6 4 variable +;radix IX-2 1 variable +;digit IX-1 1 variable +;base IX+12 3 parameter +;endptr IX+9 3 parameter +;cp IX+6 3 parameter + + +; Stack Frame Size: 38 (bytes) +; Spill Code: 0 (instruction) + + + XREF _errno:ROM + XREF _toupper:ROM + XREF _isspace:ROM + XREF __lcmpu:ROM + XREF __ladd:ROM + XREF __lmulu:ROM + XREF __lneg:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _strtoul + END diff --git a/frontends/calculator/CEdev/lib/shared/sxor.src b/frontends/calculator/CEdev/lib/shared/sxor.src new file mode 100644 index 0000000..2771ff2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sxor.src @@ -0,0 +1,18 @@ +;------------------------------------------------------------------------- +; Short XOR. +; Input: +; Operand1: +; bc : 16 bit +; +; Operand2: +; hl : 16 bit +; +; Output: +; Result: hl : 16 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __sxor + .assume adl=1 + +__sxor equ 000268h diff --git a/frontends/calculator/CEdev/lib/shared/tice.src b/frontends/calculator/CEdev/lib/shared/tice.src new file mode 100644 index 0000000..5467be1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/tice.src @@ -0,0 +1,241 @@ +; --- +; external definitions +; --- + .def _boot_GetBootMajorVer + .def _boot_GetHardwareVer + .def _boot_GetBootMinorVer + .def _boot_DebugPrintf + .def _boot_ClearVRAM + .def _boot_TurnOff + .def _boot_NewLine + .def _boot_Set6MHzMode + .def _boot_Set48MHzMode + .def _boot_Set6MHzModeI + .def _boot_Set48MHzModeI + .def _boot_GetBatteryStatus + .def _boot_WaitShort + .def _boot_CheckOnPressed + .def _boot_SetDate + .def _boot_GetDate + .def _boot_GetTime + .def _boot_SetTime + .def _boot_IsAfterNoon + + .def _os_NewLine + .def _os_PushErrorHandler + .def _os_PopErrorHandler + .def _os_ThrowError + .def _os_RealCopy + .def _os_RealAsinRad + .def _os_RealAcosRad + .def _os_RealAtanRad + .def _os_RealAdd + .def _os_CplxSquare + .def _os_RealCompare + .def _os_RealCosRad + .def _os_RealRadToDeg + .def _os_RealDiv + .def _os_RealExp + .def _os_RealFloor + .def _os_RealToStr + .def _os_RealFrac + .def _os_RealGcd + .def _os_RealRoundInt + .def _os_RealLcm + .def _os_RealLog + .def _os_RealMax + .def _os_RealMin + .def _os_RealMul + .def _os_RealNcr + .def _os_RealNeg + .def _os_RealNpr + .def _os_RealPow + .def _os_RealDegToRad + .def _os_RealRandInt + .def _os_RealInv + .def _os_RealMod + .def _os_RealRound + .def _os_RealSinRad + .def _os_RealSqrt + .def _os_RealSub + .def _os_RealTanRad + .def _os_StrToReal + .def _os_RealInt + .def _os_SetFlagBits + .def _os_ResetFlagBits + .def _os_TestFlagBits + .def _os_SetFlagByte + .def _os_GetFlagByte + .def _os_GetCursorPos + .def _os_PutStrFull + .def _os_PutStrLine + .def _os_SetCursorPos + .def _os_AppInit + .def _os_GetKey + .def _os_GetCSC + .def _os_DisableCursor + .def _os_EnableCursor + .def _os_FontDrawText + .def _os_FontGetHeight + .def _os_FontGetWidth + .def _os_InitDrawing + .def _os_SetDrawBGColor + .def _os_SetDrawFGColor + .def _os_FontSelect + .def _os_RclAns + .def _os_SetTimer1 + .def _os_DisableTimer1 + .def _os_GetSystemStats + .def _os_GetDrawBGColor + .def _os_GetDrawFGColor + .def _os_FontGetID + .def _os_RealToInt24 + .def _os_Int24ToReal + .def _os_ForceCmdNoChar + .def _os_GetSymTablePtr + .def _os_NextSymEntry + .def _os_ChkFindSym + .def _os_MemChk + .def _os_SetTimer2 + .def _os_DisableTimer2 + .def _os_FloatToReal + .def _os_RealToFloat + .def _os_FontDrawTransText + .def _os_CreateAppVar + + .def _asm_MoveDown + .def _asm_MoveUp + .def _asm_ClrLCDFull + .def _asm_ClrLCD + .def _asm_ClrTxtShd + .def _asm_HomeUp + .def _asm_RunIndicOn + .def _asm_RunIndicOff + .def _asm_DelRes + .def _asm_DisableAPD + .def _asm_EnableAPD + .def _asm_DrawStatusBar + .def _asm_ArcChk + .assume adl=1 + +; --- +; locations +; --- +_boot_GetBootMajorVer equ 000080h +_boot_GetHardwareVer equ 000084h +_boot_GetBootMinorVer equ 00008Ch +_boot_DebugPrintf equ 0000B4h +_boot_ClearVRAM equ 000374h +_boot_TurnOff equ 000388h +_boot_NewLine equ 000390h +_boot_Set6MHzMode equ 00039Ch +_boot_Set48MHzMode equ 0003A0h +_boot_Set6MHzModeI equ 0003A4h +_boot_Set48MHzModeI equ 0003A8h +_boot_GetBatteryStatus equ 0003B0h +_boot_WaitShort equ 0003B4h +_boot_CheckOnPressed equ 00057Ch +_boot_SetDate equ 000598h +_boot_GetDate equ 0005A8h +_boot_GetTime equ 0005B0h +_boot_SetTime equ 0005B4h +_boot_IsAfterNoon equ 0005C8h + +_os_NewLine equ 0207F0h +_os_PushErrorHandler equ 021C78h +_os_PopErrorHandler equ 021C7Ch +_os_ThrowError equ 021C80h +_os_RealCopy equ 021C84h +_os_RealAsinRad equ 021C88h +_os_RealAcosRad equ 021C8Ch +_os_RealAtanRad equ 021C90h +_os_RealAdd equ 021C94h +_os_CplxSquare equ 021C98h +_os_RealCompare equ 021C9Ch +_os_RealCosRad equ 021CA0h +_os_RealRadToDeg equ 021CA4h +_os_RealDiv equ 021CA8h +_os_RealExp equ 021CACh +_os_RealFloor equ 021CB0h +_os_RealToStr equ 021CB4h +_os_RealFrac equ 021CB8h +_os_RealGcd equ 021CBCh +_os_RealRoundInt equ 021CC0h +_os_RealLcm equ 021CC4h +_os_RealLog equ 021CC8h +_os_RealMax equ 021CCCh +_os_RealMin equ 021CD0h +_os_RealMul equ 021CD4h +_os_RealNcr equ 021CD8h +_os_RealNeg equ 021CDCh +_os_RealNpr equ 021CE0h +_os_RealPow equ 021CE4h +_os_RealDegToRad equ 021CE8h +_os_RealRandInt equ 021CECh +_os_RealInv equ 021CF0h +_os_RealMod equ 021CF4h +_os_RealRound equ 021CF8h +_os_RealSinRad equ 021CFCh +_os_RealSqrt equ 021D00h +_os_RealSub equ 021D04h +_os_RealTanRad equ 021D08h +_os_StrToReal equ 021D0Ch +_os_RealInt equ 021D10h +_os_SetFlagBits equ 021D14h +_os_ResetFlagBits equ 021D18h +_os_TestFlagBits equ 021D1Ch +_os_SetFlagByte equ 021D20h +_os_GetFlagByte equ 021D24h +_os_GetCursorPos equ 021D28h +_os_PutStrFull equ 021D2Ch +_os_PutStrLine equ 021D30h +_os_SetCursorPos equ 021D34h +_os_AppInit equ 021D40h +_os_GetKey equ 021D38h +_os_GetCSC equ 021D3Ch +_os_DisableCursor equ 021DE4h +_os_EnableCursor equ 021DE8h +_os_FontDrawText equ 021E00h +_os_FontGetHeight equ 021E14h +_os_FontGetWidth equ 021E18h +_os_InitDrawing equ 021E1Ch +_os_SetDrawBGColor equ 021E20h +_os_SetDrawFGColor equ 021E24h +_os_FontSelect equ 021E28h +_os_RclAns equ 021E70h +_os_SetTimer1 equ 021EC8h +_os_DisableTimer1 equ 021ECCh +_os_GetSystemStats equ 021ED4h +_os_GetDrawBGColor equ 021EE4h +_os_GetDrawFGColor equ 021EE8h +_os_FontGetID equ 021EECh +_os_RealToInt24 equ 021EF4h +_os_Int24ToReal equ 021EF8h +_os_ForceCmdNoChar equ 021FA8h +_os_GetSymTablePtr equ 021FB0h +_os_NextSymEntry equ 021FB4h +_os_ChkFindSym equ 021FB8h +_os_MemChk equ 021FF0h +_os_SetTimer2 equ 022080h +_os_DisableTimer2 equ 022084h +_os_FloatToReal equ 022170h +_os_RealToFloat equ 022174h +_os_FontDrawTransText equ 022178h +_os_CreateAppVar equ 022184h + +; --- +; directly callable asm functions +; --- +_asm_MoveDown equ 0207F4h +_asm_MoveUp equ 020800h +_asm_ClrLCDFull equ 020808h +_asm_ClrLCD equ 02080Ch +_asm_ClrTxtShd equ 020818h +_asm_HomeUp equ 020828h +_asm_RunIndicOn equ 020844h +_asm_RunIndicOff equ 020848h +_asm_DelRes equ 020E5Ch +_asm_DisableAPD equ 021134h +_asm_EnableAPD equ 021138h +_asm_DrawStatusBar equ 021A3Ch +_asm_ArcChk equ 022040h diff --git a/frontends/calculator/CEdev/lib/shared/tolower.src b/frontends/calculator/CEdev/lib/shared/tolower.src new file mode 100644 index 0000000..db6c58d --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/tolower.src @@ -0,0 +1,4 @@ + .assume adl=1 + .def _tolower + +_tolower equ 021E34h diff --git a/frontends/calculator/CEdev/lib/shared/toupper.src b/frontends/calculator/CEdev/lib/shared/toupper.src new file mode 100644 index 0000000..eb5dcea --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/toupper.src @@ -0,0 +1,4 @@ + .assume adl=1 + .def _toupper + +_toupper equ 021E38h diff --git a/frontends/calculator/CEdev/lib/shared/udtoe.src b/frontends/calculator/CEdev/lib/shared/udtoe.src new file mode 100644 index 0000000..c19cf68 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/udtoe.src @@ -0,0 +1,411 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UDTOE.C" + .assume ADL=1 + SEGMENT BSS +__info: + DS 12 +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 //#include +; 10 #include +; 11 +; 12 +; 13 struct flt_info _info; + SEGMENT CODE +; 14 typedef long reg_t; +; 15 typedef unsigned long ureg_t; +; 16 +; 17 /************************************************* +; 18 * +; 19 * _u_dtoe - convert a double float to ASCII in e format +; 20 * +; 21 * Inputs: +; 22 * n - value to be converted +; 23 * s - target char array +; 24 * __print_fmt - format structure with conversion info +; 25 * +; 26 * Locals: +; 27 * ndig - The number of significant digits in the output. This is +; 28 * assumed to be less than 128! +; 29 * +; 30 * Returns: +; 31 * next address past the end of the string +; 32 * +; 33 *************************************************/ +; 34 char * _u_dtoe(double n) +; 35 { +__u_dtoe: + LD HL,-36 + CALL __frameset +; 36 register ureg_t i; +; 37 register ureg_t ndig; +; 38 register reg_t exp; +; 39 char * s = __print_buff; + LD BC,___print_buff + LD (IX+-3),BC +; 40 +; 41 /* One digit to the left of the decimal point, and precision after. */ +; 42 ndig = __print_fmt.precision + 1; + LD A,(___print_fmt+6) + LD B,A + SEXT HL + LD L,B + LD E,H + LD A,1 + CALL __ladd_b + LD (IX+-15),HL + LD (IX+-12),E +; 43 _u_flt_info(n,&_info); + LD BC,__info + PUSH BC + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL __u_flt_info + POP BC + POP BC + POP BC +; 44 if (ndig > FLT_DIG) + LD BC,(IX+-15) + LD A,(IX+-12) + LD HL,6 + LD E,0 + CALL __lcmpu + JR NC,L_1 +; 45 _u_flt_rnd(&_info,FLT_DIG); + LD BC,6 + PUSH BC + LD BC,__info + PUSH BC + CALL __u_flt_rnd + POP BC + POP BC +; 46 else + JR L_10 +L_1: +; 47 _u_flt_rnd(&_info,ndig); + LD C,(IX+-15) + LD B,0 + PUSH BC + LD BC,__info + PUSH BC + CALL __u_flt_rnd + POP BC + POP BC +L_10: +; 48 +; 49 if (_info.flags == FLT_INFO_SIGN) + LD A,(__info) + CP A,1 + JR NZ,L_9 +; 50 *(s++) = '-'; + LD HL,(IX+-3) + LD (HL),45 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 51 else if (__print_fmt.flags & FMT_FLAG_PLUS) + JR L_12 +L_9: + LD A,(___print_fmt+1) + AND A,2 + JR Z,L_7 +; 52 *(s++) = '+'; + LD HL,(IX+-3) + LD (HL),43 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 53 else if (__print_fmt.flags & FMT_FLAG_POUND) + JR L_12 +L_7: + LD A,(___print_fmt+1) + AND A,8 + JR Z,L_12 +; 54 *(s++) = ' '; + LD HL,(IX+-3) + LD (HL),32 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +L_12: +; 55 +; 56 *(s++) = _info.digits[0] + '0'; + LD BC,(IX+-3) + LD (IX+-30),BC + LD BC,__info+2 + LD (IX+-18),BC + LD HL,BC + LD A,(HL) + ADD A,48 + LD HL,(IX+-30) + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 57 if (__print_fmt.precision != 0) + LD A,(___print_fmt+6) + OR A,A + JR Z,L_20 +; 58 *(s++) = '.'; + LD HL,(IX+-3) + LD (HL),46 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +L_20: +; 59 for (i=1; i < ndig; i++) + LD BC,1 + LD (IX+-11),BC + XOR A,A + LD (IX+-8),A + JR L_19 +L_17: +; 60 *(s++) = _info.digits[(unsigned char) i] + '0'; + LD BC,(IX+-3) + LD (IX+-33),BC + LD A,(IX+-11) + UEXT HL + LD L,A + LD BC,(IX+-18) + ADD HL,BC + LD A,(HL) + ADD A,48 + LD HL,(IX+-33) + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC + LD HL,(IX+-11) + LD E,(IX+-8) + LD A,1 + CALL __ladd_b + LD (IX+-11),HL + LD (IX+-8),E +L_19: + LD HL,(IX+-11) + LD E,(IX+-8) + LD BC,(IX+-15) + LD A,(IX+-12) + CALL __lcmpu + JR C,L_17 +; 61 +; 62 if (!(__print_fmt.flags & FMT_FLAG_POUND) && + LD A,(___print_fmt+1) + AND A,8 + JR NZ,L_30 +; 63 (__print_fmt.type == 'g' || __print_fmt.type == 'G')) { + LD A,(___print_fmt+4) + CP A,103 + JR Z,L_23 + LD A,(___print_fmt+4) + CP A,71 + JR Z,L_23 + JR L_30 +; 64 while (s[-1] == '0') /* strip off trailing zero's */ +L_24: +; 65 --s; + LD IY,(IX+-3) + LEA IY,IY+-1 + LD (IX+-3),IY +L_23: + LD BC,16777215 + LD HL,(IX+-3) + ADD HL,BC + LD (IX+-21),HL + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,48 + SBC HL,BC + JR Z,L_24 +; 66 if (s[-1] == '.') + LD HL,(IX+-21) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,46 + SBC HL,BC + JR NZ,L_37 +; 67 --s; /* strip off . */ + LD IY,(IX+-3) + LEA IY,IY+-1 + LD (IX+-3),IY +; 68 } +; 69 else if (ndig == 1 && !(__print_fmt.flags & FMT_FLAG_POUND)) + JR L_37 +L_30: + LD HL,(IX+-15) + LD E,(IX+-12) + LD BC,1 + XOR A,A + CALL __lcmpu + JR NZ,L_37 + LD A,(___print_fmt+1) + AND A,8 + JR NZ,L_37 +; 70 --s; /* remove decimal point */ + LD IY,(IX+-3) + LEA IY,IY+-1 + LD (IX+-3),IY +L_37: +; 71 *(s++) = isupper(__print_fmt.type) ? 'E' : 'e'; + LD A,(___print_fmt+4) + LD B,A + SEXT HL + LD L,B + PUSH HL + CALL _isupper + POP BC + CALL __icmpzero + JR Z,L_35 + LD BC,69 + LD (IX+-24),BC + JR L_36 +L_35: + LD BC,101 + LD (IX+-24),BC +L_36: + LD BC,(IX+-3) + LD (IX+-27),BC + LD A,(IX+-24) + LD HL,BC + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 72 +; 73 exp = _info.exp; + LD A,(__info+1) + LD B,A + SEXT HL + LD L,B + LD (IX+-7),HL + LD (IX+-4),H +; 74 if (exp < 0) { + LD HL,(IX+-7) + LD E,(IX+-4) + CALL __lcmpzero + JP P,L_41 +; 75 *(s++) = '-'; + LD HL,(IX+-3) + LD (HL),45 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 76 exp = -exp; + LD HL,(IX+-7) + LD E,(IX+-4) + CALL __lneg + LD (IX+-7),HL + LD (IX+-4),E +; 77 } +; 78 else + JR L_43 +L_41: +; 79 *(s++) = '+'; + LD HL,(IX+-3) + LD (HL),43 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +L_43: +; 80 +; 81 /* For 4-byte floats, the exponent is between -37 and +38, or simply 0 +; 82 to 38 after folding. */ +; 83 /* e format always prints two digits in the exponent. */ +; 84 *(s++) = exp / 10 + '0'; + LD BC,(IX+-3) + LD (IX+-36),BC + LD HL,(IX+-7) + LD E,(IX+-4) + LD BC,10 + XOR A,A + CALL __ldivs + LD A,48 + CALL __ladd_b + LD BC,HL + LD HL,(IX+-36) + LD (HL),C + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 85 *(s++) = exp % 10 + '0'; + LD HL,(IX+-7) + LD E,(IX+-4) + LD BC,10 + XOR A,A + CALL __lrems + LD A,48 + CALL __ladd_b + LD BC,HL + LD HL,(IX+-3) + LD (HL),C + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 86 +; 87 *s = '\0'; + LD HL,BC + LD (HL),0 +; 88 return(s); + LD HL,(IX+-3) +; 89 } + LD SP,IX + POP IX + RET + + +;**************************** __u_dtoe *************************** +;Name Addr/Register Size Type +;_isupper IMPORT ----- function +;__u_flt_rnd IMPORT ----- function +;__info STATIC 12 variable +;__u_flt_info IMPORT ----- function +;___print_fmt IMPORT 19 variable +;___print_buff IMPORT unknown variable +;temp32 IX-27 3 variable +;temp33 IX-24 3 variable +;G_1 IX-21 3 variable +;G_0 IX-18 3 variable +;ndig IX-15 4 variable +;i IX-11 4 variable +;exp IX-7 4 variable +;s IX-3 3 variable +;n IX+6 4 parameter + + +; Stack Frame Size: 48 (bytes) +; Spill Code: 0 (instruction) + + + XREF _isupper:ROM + XREF __u_flt_rnd:ROM + XREF __u_flt_info:ROM + XREF ___print_buff:ROM + XREF ___print_fmt:ROM + XREF __lcmpu:ROM + XREF __ldivs:ROM + XREF __lneg:ROM + XREF __lrems:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XREF __lcmpzero:ROM + XREF __ladd_b:ROM + XDEF __u_dtoe + XDEF __info + END diff --git a/frontends/calculator/CEdev/lib/shared/udtof.src b/frontends/calculator/CEdev/lib/shared/udtof.src new file mode 100644 index 0000000..81a40a8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/udtof.src @@ -0,0 +1,982 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UDTOF.C" + .assume ADL=1 + SEGMENT BSS +__info: + DS 12 +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 #include +; 10 #include +; 11 +; 12 #ifndef _MULTI_THREAD +; 13 struct flt_info _info; + SEGMENT CODE +; 14 +; 15 static char * write_f_digits(char * s, signed char exp, signed char ndig); +; 16 static char * write_e_digits(char * s, signed char ndig); +; 17 static char * write_exponent(char * s, char e, signed char exp); +; 18 +; 19 #else +; 20 static char * write_f_digits(char * s, struct fmt_type* pfmt,struct flt_info* pinfo,signed char exp, signed char ndig); +; 21 static char * write_e_digits(char * s, struct flt_info* pinfo,signed char ndig); +; 22 static char * write_exponent(char * s, char e, signed char exp); +; 23 #define __print_fmt (*fmt) +; 24 #endif +; 25 +; 26 typedef long reg_t; +; 27 typedef unsigned long ureg_t; +; 28 +; 29 +; 30 /************************************************* +; 31 * +; 32 * _u_dtof - convert a double float to ASCII in f format +; 33 * +; 34 * Inputs: +; 35 * n - value to be converted +; 36 * s - target char array +; 37 * fmt - format structure with conversion info +; 38 * +; 39 * Locals: +; 40 * ndig - The number of significant digits to print. +; 41 * Assumed to lie in the range [0,127]. +; 42 * For e format, this is 1 + precision. +; 43 * For f format, this is 1 + precision + exp. +; 44 * +; 45 * Returns: +; 46 * next address past the end of the string +; 47 * +; 48 *************************************************/ +; 49 #ifndef _MULTI_THREAD +; 50 void _u_dtof(double n) +; 51 #else +; 52 char _mt_dtof(double n,char* __print_buff,struct fmt_type* fmt) +; 53 #endif +; 54 { +__u_dtof: + LD HL,-21 + CALL __frameset +; 55 register reg_t ndig; +; 56 register reg_t rdig; +; 57 register reg_t e; +; 58 char * s = __print_buff; + LD BC,___print_buff + LD (IX+-3),BC +; 59 #ifdef _MULTI_THREAD +; 60 struct flt_info _info; +; 61 char __print_leading_char = '\0'; +; 62 #endif +; 63 +; 64 if (__print_fmt.precision < 0) + LD A,(___print_fmt+6) + OR A,A + JP P,L_2 +; 65 __print_fmt.precision = DEFAULT_PRECISION; + LD A,6 + LD (___print_fmt+6),A +L_2: +; 66 +; 67 if (__print_fmt.field_width < 0) + LD A,(___print_fmt+5) + OR A,A + JP P,L_3 +; 68 { +; 69 __print_fmt.flags |= FMT_FLAG_MINUS; + LD A,(___print_fmt+1) + SET 0,A + LD (___print_fmt+1),A +; 70 __print_fmt.field_width = -__print_fmt.field_width; + LD A,(___print_fmt+5) + NEG + LD (___print_fmt+5),A +; 71 } +L_3: +; 72 rdig = ndig = __print_fmt.precision + 1; + LD A,(___print_fmt+6) + LD B,A + SEXT HL + LD L,B + LD BC,HL + CALL __itol + LD E,A + LD A,1 + LD HL,BC + CALL __ladd_b + LD (IX+-11),HL + LD (IX+-8),E + LD A,(IX+-8) + LD (IX+-21),HL + LD (IX+-18),A +; 73 _u_flt_info(n,&_info); + LD BC,__info + PUSH BC + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL __u_flt_info + POP BC + POP BC + POP BC +; 74 if ((__print_fmt.type == 'f') && (_info.exp > 0)) + LD A,(___print_fmt+4) + CP A,102 + JR NZ,L_8 + XOR A,A + LD HL,__info+1 + CP A,(HL) + CALL __setflag + JP P,L_8 +; 75 rdig += _info.exp; // May be <0. + LD A,(__info+1) + LD B,A + SEXT HL + LD L,B + LD E,H + LD A,(IX+-8) + LD BC,(IX+-11) + CALL __ladd + LD (IX+-21),HL + LD (IX+-18),E +L_8: +; 76 +; 77 if (rdig > FLT_DIG) + LD HL,6 + LD E,0 + LD BC,(IX+-21) + LD A,(IX+-18) + CALL __lcmps + CALL __setflag + JP P,L_7 +; 78 _u_flt_rnd(&_info, FLT_DIG+1); // Round to the last significant digit. + LD BC,7 + PUSH BC + LD BC,__info + PUSH BC + CALL __u_flt_rnd + POP BC + POP BC +; 79 else + JR L_11 +L_7: +; 80 _u_flt_rnd(&_info, rdig); // Round into the last digit printed. + LD C,(IX+-21) + LD B,0 + PUSH BC + LD BC,__info + PUSH BC + CALL __u_flt_rnd + POP BC + POP BC +L_11: +; 81 +; 82 if (__print_fmt.type == 'f' && (_info.exp > 0)) + LD A,(___print_fmt+4) + CP A,102 + JR NZ,L_18 + XOR A,A + LD HL,__info+1 + CP A,(HL) + CALL __setflag + JP P,L_18 +; 83 { +; 84 ndig += _info.exp; + LD A,(__info+1) + LD B,A + SEXT HL + LD L,B + LD E,H + LD A,(IX+-8) + LD BC,(IX+-11) + CALL __ladd + LD (IX+-11),HL + LD (IX+-8),E +; 85 } +L_18: +; 86 +; 87 if (_info.flags & FLT_INFO_SIGN) + LD A,(__info) + AND A,1 + JR Z,L_17 +; 88 e = '-'; + LD BC,45 + LD (IX+-7),BC + XOR A,A + LD (IX+-4),A +; 89 else if (__print_fmt.flags & FMT_FLAG_PLUS) + JR L_23 +L_17: + LD A,(___print_fmt+1) + AND A,2 + JR Z,L_15 +; 90 e = '+'; + LD BC,43 + LD (IX+-7),BC + XOR A,A + LD (IX+-4),A +; 91 else if (__print_fmt.flags & FMT_FLAG_SPACE) + JR L_23 +L_15: + LD A,(___print_fmt+1) + AND A,4 + JR Z,L_13 +; 92 e = ' '; + LD BC,32 + LD (IX+-7),BC + XOR A,A + LD (IX+-4),A +; 93 else + JR L_23 +L_13: +; 94 e = '\0'; + LD BC,0 + LD (IX+-7),BC + XOR A,A + LD (IX+-4),A +L_23: +; 95 if (__print_fmt.flags & FMT_FLAG_PAD_ZERO) + LD A,(___print_fmt+1) + AND A,64 + JR Z,L_22 +; 96 __print_leading_char = e; + LD A,(IX+-7) + LD (___print_leading_char),A +; 97 else if (e) + JR L_29 +L_22: + LD HL,(IX+-7) + LD E,(IX+-4) + CALL __lcmpzero + JR Z,L_29 +; 98 *(s++) = e; + LD A,(IX+-7) + LD HL,(IX+-3) + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +L_29: +; 99 +; 100 if (_info.flags & FLT_INFO_INF) + LD A,(__info) + AND A,2 + JR Z,L_34 +; 101 { +; 102 /* This is infinity (+ or -). */ +; 103 if (__print_fmt.flags & FMT_FLAG_UPPERCASE) + LD A,(___print_fmt+1) + AND A,32 + JR Z,L_25 +; 104 strcpy(s,"INF"); + LD BC,L__14 + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _strcpy + POP BC + POP BC +; 105 else + JR L_26 +L_25: +; 106 strcpy(s,"inf"); + LD BC,L__15 + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _strcpy + POP BC + POP BC +; 107 goto out; + JR L_26 +; 108 } +L_34: +; 109 +; 110 if (_info.flags & FLT_INFO_NAN) + LD A,(__info) + AND A,4 + JR Z,L_36 +; 111 { +; 112 /* This is not a number (+ or -). */ +; 113 if (__print_fmt.flags & FMT_FLAG_UPPERCASE) + LD A,(___print_fmt+1) + AND A,32 + JR Z,L_31 +; 114 strcpy(s,"NAN"); + LD BC,L__18 + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _strcpy + POP BC + POP BC +; 115 else + JR L_26 +L_31: +; 116 strcpy(s,"nan"); + LD BC,L__19 + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _strcpy + POP BC + POP BC +; 117 goto out; + JR L_26 +; 118 } +L_36: +; 119 +; 120 if (__print_fmt.type == 'e') + LD A,(___print_fmt+4) + CP A,101 + JR NZ,L_38 +; 121 #ifndef _MULTI_THREAD +; 122 s = write_e_digits(s, ndig); + LD C,(IX+-11) + LD B,0 + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _write_e_digits + POP BC + POP BC + LD (IX+-3),HL +L_38: +; 123 #else +; 124 s = write_e_digits(s,&_info,ndig); +; 125 #endif +; 126 if (__print_fmt.type == 'f') + LD A,(___print_fmt+4) + CP A,102 + JR NZ,L_44 +; 127 #ifndef _MULTI_THREAD +; 128 s = write_f_digits(s, _info.exp, ndig); + LD C,(IX+-11) + LD A,(__info+1) + LD B,0 + PUSH BC + LD C,A + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _write_f_digits + POP BC + POP BC + POP BC + LD (IX+-3),HL +L_44: +; 129 #else +; 130 s = write_f_digits(s,fmt,&_info,_info.exp,ndig); +; 131 #endif +; 132 +; 133 /* If g format and not #, strip of trailing zeros. */ +; 134 if (__print_fmt.flags & FMT_FLAG_STRIP) + LD A,(___print_fmt+1) + AND A,128 + JR Z,L_48 +; 135 { +; 136 __print_fmt.pad_post_fract = 0; + XOR A,A + LD (___print_fmt+15),A +; 137 while (s[-1] == '0') /* strip off trailing zero's */ + JR L_39 +L_40: +; 138 --s; + LD IY,(IX+-3) + LEA IY,IY+-1 + LD (IX+-3),IY +L_39: + LD BC,16777215 + LD HL,(IX+-3) + ADD HL,BC + LD (IX+-17),HL + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,48 + SBC HL,BC + JR Z,L_40 +; 139 if (s[-1] == '.') + LD HL,(IX+-17) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,46 + SBC HL,BC + JR NZ,L_48 +; 140 __print_fmt.pad_pre_fract = 0; + XOR A,A + LD (___print_fmt+14),A +; 141 } +L_48: +; 142 /* Strip off the trailing decimal point, unless prevented by #. */ +; 143 if (s[-1] == '.' && + LD BC,16777215 + LD HL,(IX+-3) + ADD HL,BC + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,46 + SBC HL,BC + JR NZ,L_54 +; 144 ((__print_fmt.pad_pre_fract+__print_fmt.pad_post_fract) == 0) && + LD A,(___print_fmt+14) + UEXT HL + LD L,A + LD BC,HL + LD A,(___print_fmt+15) + UEXT HL + LD L,A + ADD HL,BC + CALL __icmpzero + JR NZ,L_54 +; 145 !(__print_fmt.flags & FMT_FLAG_POUND)) + LD A,(___print_fmt+1) + AND A,8 + JR NZ,L_54 +; 146 --s; + LD IY,(IX+-3) + LEA IY,IY+-1 + LD (IX+-3),IY +L_54: +; 147 +; 148 if (__print_fmt.type == 'e') + LD A,(___print_fmt+4) + CP A,101 + JR NZ,L_55 +; 149 { +; 150 e = __print_fmt.flags & FMT_FLAG_UPPERCASE ? 'E' : 'e'; + LD A,(___print_fmt+1) + AND A,32 + JR Z,L_51 + LD BC,69 + LD (IX+-14),BC + JR L_52 +L_51: + LD BC,101 + LD (IX+-14),BC +L_52: + LD BC,(IX+-14) + CALL __itol + LD (IX+-7),BC + LD (IX+-4),A +; 151 s = write_exponent(s, e, _info.exp); + LD A,(__info+1) + LD C,A + LD B,0 + PUSH BC + LD C,(IX+-7) + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _write_exponent + POP BC + POP BC + POP BC + LD (IX+-3),HL +; 152 } +L_55: +; 153 +; 154 *s = '\0'; + LD HL,(IX+-3) + LD (HL),0 +L_26: +; 155 out:; +; 156 #ifdef _MULTI_THREAD +; 157 return __print_leading_char; +; 158 #endif +; 159 } + LD SP,IX + POP IX + RET + + +;**************************** __u_dtof *************************** +;Name Addr/Register Size Type +;_write_exponent STATIC ----- function +;_write_f_digits STATIC ----- function +;_write_e_digits STATIC ----- function +;_strcpy IMPORT ----- function +;___print_leading_char IMPORT 1 variable +;__u_flt_rnd IMPORT ----- function +;__info STATIC 12 variable +;__u_flt_info IMPORT ----- function +;___print_fmt IMPORT 19 variable +;___print_buff IMPORT unknown variable +;rdig IX-21 4 variable +;G_0 IX-17 3 variable +;temp49 IX-14 3 variable +;ndig IX-11 4 variable +;e IX-7 4 variable +;s IX-3 3 variable +;n IX+6 4 parameter + + +; Stack Frame Size: 33 (bytes) +; Spill Code: 0 (instruction) + + + SEGMENT STRSECT +L__14: + DB "INF" + DB 0 +L__15: + DB "inf" + DB 0 +L__18: + DB "NAN" + DB 0 +L__19: + DB "nan" + DB 0 + SEGMENT CODE +; 160 +; 161 #ifdef _MULTI_THREAD +; 162 #define _info (*pinfo) +; 163 #endif +; 164 +; 165 /* +; 166 * exp+1- counts the number of digits to the left of the decimal point +; 167 * ndig - counts the number of significant digits to print. +; 168 */ +; 169 #ifndef _MULTI_THREAD +; 170 static char * write_f_digits(char * s, signed char exp, signed char ndig) +; 171 #else +; 172 static char * write_f_digits(char * s, struct fmt_type* fmt,struct flt_info* pinfo,signed char exp, signed char ndig) +; 173 #endif +; 174 { +_write_f_digits: + LD HL,-13 + CALL __frameset +; 175 ureg_t i = 0; + LD BC,0 + LD (IX+-4),BC + XOR A,A + LD (IX+-1),A +; 176 +; 177 /* Emit a leading zero, if needed. */ +; 178 if (exp < 0) { + LD A,(IX+9) + OR A,A + JP P,L_62 +; 179 *(s++) = '0'; + LD HL,(IX+6) + LD (HL),48 + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 180 --ndig; + DEC (IX+12) +; 181 } +; 182 +; 183 while (exp >= 0 && i < MAXDIGITS) + JR L_62 +L_63: +; 184 { +; 185 *(s++) = _info.digits[i++] + '0'; + LD HL,(IX+-4) + LD BC,(IX+6) + LD (IX+-7),BC + LD IY,(IX+-7) + LD BC,__info+2 + ADD HL,BC + LD A,(HL) + ADD A,48 + LD (IY),A + LD HL,(IX+-4) + LD E,(IX+-1) + LD A,1 + CALL __ladd_b + LD (IX+-4),HL + LD (IX+-1),E + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 186 --ndig; --exp; + DEC (IX+12) + DEC (IX+9) +; 187 } +L_62: + LD A,(IX+9) + OR A,A + JP M,L_65 + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,10 + XOR A,A + CALL __lcmpu + JR C,L_63 +L_65: +; 188 __print_fmt.pad_at = s; + LD BC,(IX+6) + LD (___print_fmt+16),BC +; 189 if (exp >= 0) { + LD A,(IX+9) + OR A,A + JP M,L_68 +; 190 __print_fmt.pad_whole = exp+1; + LD A,(IX+9) + INC A + LD (___print_fmt+13),A +; 191 ndig -= (exp+1); + LD B,(IX+9) + LD A,(IX+12) + INC B + SUB A,B + LD (IX+12),A +; 192 exp = -1; + LD (IX+9),255 +; 193 } +L_68: +; 194 +; 195 *(s++) = '.'; + LD BC,(IX+6) + LD (IX+-10),BC + LD HL,BC + LD (HL),46 + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 196 +; 197 +; 198 if (exp < -1) { + LD A,(IX+9) + CP A,-1 + CALL __setflag + JP P,L_75 +; 199 if (ndig > (-exp-1)) { + LD A,(IX+9) + SEXT HL + LD L,(IX+9) + CALL __ineg + LD BC,HL + DEC BC + LD A,(IX+12) + SEXT HL + LD L,(IX+12) + LD DE,HL + LD HL,BC + OR A,A + SBC HL,DE + CALL __setflag + JP P,L_70 +; 200 __print_fmt.pad_pre_fract = -(exp+1); + LD A,(IX+9) + INC A + NEG + LD (___print_fmt+14),A +; 201 ndig -= -(exp+1); + LD A,(IX+9) + INC A + NEG + LD B,A + LD A,(IX+12) + SUB A,B + LD (IX+12),A +; 202 exp = -1; +; 203 } +; 204 else { + JR L_75 +L_70: +; 205 __print_fmt.pad_pre_fract = ndig; + LD A,(IX+12) + LD (___print_fmt+14),A +; 206 ndig = 0; + LD (IX+12),0 +; 207 } +; 208 } +; 209 while (ndig > 0 && i < MAXDIGITS) + JR L_75 +L_76: +; 210 { +; 211 *(s++) = _info.digits[i++] + '0'; + LD HL,(IX+-4) + LD BC,(IX+6) + LD (IX+-13),BC + LD IY,(IX+-13) + LD BC,__info+2 + ADD HL,BC + LD A,(HL) + ADD A,48 + LD (IY),A + LD HL,(IX+-4) + LD E,(IX+-1) + LD A,1 + CALL __ladd_b + LD (IX+-4),HL + LD (IX+-1),E + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 212 --ndig; + DEC (IX+12) +; 213 } +L_75: + XOR A,A + CP A,(IX+12) + CALL __setflag + JP P,L_79 + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,10 + XOR A,A + CALL __lcmpu + JR C,L_76 +L_79: +; 214 if (ndig > 0) { + XOR A,A + CP A,(IX+12) + CALL __setflag + JP P,L_80 +; 215 __print_fmt.pad_post_fract =ndig; + LD A,(IX+12) + LD (___print_fmt+15),A +; 216 ndig = 0; +; 217 } +L_80: +; 218 +; 219 return s; + LD HL,(IX+6) +; 220 } + LD SP,IX + POP IX + RET + + +;**************************** _write_f_digits *************************** +;Name Addr/Register Size Type +;___print_fmt IMPORT 19 variable +;__info STATIC 12 variable +;i IX-4 4 variable +;ndig IX+12 1 parameter +;exp IX+9 1 parameter +;s IX+6 3 parameter + + +; Stack Frame Size: 28 (bytes) +; Spill Code: 0 (instruction) + + +; 221 +; 222 #ifndef _MULTI_THREAD +; 223 static char * write_e_digits(char * s, signed char ndig) +; 224 #else +; 225 static char * write_e_digits(char * s,struct flt_info* pinfo, signed char ndig) +; 226 #endif +; 227 { +_write_e_digits: + LD HL,-7 + CALL __frameset +; 228 ureg_t i = 0; +; 229 +; 230 /* Emit the single digit to the left of the decimal point. */ +; 231 *(s++) = _info.digits[i++] + '0'; + LD A,(__info+2) + ADD A,48 + LD HL,(IX+6) + LD (HL),A + LD BC,1 + LD (IX+-4),BC + XOR A,A + LD (IX+-1),A + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 232 --ndig; + DEC (IX+9) +; 233 +; 234 /* Emit the decimal point. */ +; 235 *(s++) = '.'; + LD HL,BC + LD (HL),46 + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 236 +; 237 /* Emit the digits. */ +; 238 while (ndig-- > 0 && i < MAXDIGITS) + JR L_89 +L_90: +; 239 *(s++) = _info.digits[i++] + '0'; + LD HL,(IX+-4) + LD BC,(IX+6) + LD DE,__info+2 + ADD HL,DE + LD (IX+-7),BC + LD A,(HL) + ADD A,48 + LD HL,BC + LD (HL),A + LD HL,(IX+-4) + LD E,(IX+-1) + LD A,1 + CALL __ladd_b + LD (IX+-4),HL + LD (IX+-1),E + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_89: + LD B,(IX+9) + DEC (IX+9) + XOR A,A + CP A,B + CALL __setflag + JP P,L_91 + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,10 + XOR A,A + CALL __lcmpu + JR C,L_90 +L_91: +; 240 +; 241 return s; + LD HL,(IX+6) +; 242 } + LD SP,IX + POP IX + RET + + +;**************************** _write_e_digits *************************** +;Name Addr/Register Size Type +;__info STATIC 12 variable +;i IX-4 4 variable +;ndig IX+9 1 parameter +;s IX+6 3 parameter + + +; Stack Frame Size: 19 (bytes) +; Spill Code: 0 (instruction) + + +; 243 +; 244 static char * write_exponent(char * s, char e, signed char exp) +; 245 { +_write_exponent: + LD HL,-3 + CALL __frameset +; 246 /* Emit the exponent specifier. */ +; 247 *(s++) = e; + LD HL,(IX+6) + LD A,(IX+9) + LD (HL),A + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 248 +; 249 /* Emit the exponent sign. */ +; 250 if (exp < 0) { + LD A,(IX+12) + OR A,A + JP P,L_97 +; 251 *(s++) = '-'; + LD HL,(IX+6) + LD (HL),45 + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 252 exp = -exp; + LD A,(IX+12) + NEG + LD (IX+12),A +; 253 } +; 254 else + JR L_99 +L_97: +; 255 *(s++) = '+'; + LD HL,(IX+6) + LD (HL),43 + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_99: +; 256 +; 257 /* Emit the two-digit exponent. */ +; 258 /* For 4-byte floats, the exponent is between -37 and +38, or simply 0 +; 259 to 38 after folding. */ +; 260 *(s++) = exp / 10 + '0'; + LD BC,(IX+6) + LD (IX+-3),BC + LD A,(IX+12) + SEXT HL + LD L,(IX+12) + LD BC,10 + CALL __idivs + LD IY,HL + LEA HL,IY+48 + LD IY,(IX+-3) + LD (IY),L + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 261 *(s++) = exp % 10 + '0'; + LD A,(IX+12) + SEXT HL + LD L,(IX+12) + LD BC,10 + CALL __irems + LD IY,HL + LEA HL,IY+48 + LD IY,(IX+6) + LD (IY),L + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 262 +; 263 return s; + LD HL,BC +; 264 } + LD SP,IX + POP IX + RET + + +;**************************** _write_exponent *************************** +;Name Addr/Register Size Type +;exp IX+12 1 parameter +;e IX+9 1 parameter +;s IX+6 3 parameter + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + + XREF _strcpy:ROM + XREF __u_flt_rnd:ROM + XREF __u_flt_info:ROM + XREF ___print_leading_char:ROM + XREF ___print_buff:ROM + XREF ___print_fmt:ROM + XREF __lcmps:ROM + XREF __lcmpu:ROM + XREF __ladd:ROM + XREF __idivs:ROM + XREF __ineg:ROM + XREF __irems:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XREF __lcmpzero:ROM + XREF __ladd_b:ROM + XDEF __u_dtof + XDEF __info + END diff --git a/frontends/calculator/CEdev/lib/shared/udtog.src b/frontends/calculator/CEdev/lib/shared/udtog.src new file mode 100644 index 0000000..cd584be --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/udtog.src @@ -0,0 +1,173 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UDTOG.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 /************************************************* +; 10 * +; 11 * _u_dtog - convert a double float to ASCII in g format +; 12 * +; 13 * Inputs: +; 14 * n - value to be converted +; 15 * s - target char array +; 16 * fmt - format structure with conversion info +; 17 * +; 18 * Returns: +; 19 * next address past the end of the string +; 20 * +; 21 *************************************************/ +; 22 #ifndef _MULTI_THREAD +; 23 void _u_dtog(double n) +; 24 #else +; 25 char _mt_dtog(double n,char* __print_buff,struct fmt_type* fmt) +; 26 #define __print_fmt (*fmt) +; 27 #define _u_dtof(n) _mt_dtof(n,__print_buff,fmt) +; 28 #endif +; 29 { +__u_dtog: + LD HL,-12 + CALL __frameset +; 30 struct flt_info _info; +; 31 +; 32 _u_flt_info(n, &_info); + PEA IX+-12 + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL __u_flt_info + POP BC + POP BC + POP BC +; 33 +; 34 if (__print_fmt.precision < 0) + LD A,(___print_fmt+6) + OR A,A + JP P,L_2 +; 35 __print_fmt.precision = 0; + XOR A,A + LD (___print_fmt+6),A +L_2: +; 36 +; 37 if (__print_fmt.field_width < 0) + LD A,(___print_fmt+5) + OR A,A + JP P,L_4 +; 38 { +; 39 __print_fmt.flags |= FMT_FLAG_MINUS; + LD A,(___print_fmt+1) + SET 0,A + LD (___print_fmt+1),A +; 40 __print_fmt.field_width = -__print_fmt.field_width; + LD A,(___print_fmt+5) + NEG + LD (___print_fmt+5),A +; 41 } +L_4: +; 42 +; 43 if (!(__print_fmt.flags & FMT_FLAG_POUND)) + LD A,(___print_fmt+1) + AND A,8 + JR NZ,L_6 +; 44 __print_fmt.flags |= FMT_FLAG_STRIP; + LD A,(___print_fmt+1) + SET 7,A + LD (___print_fmt+1),A +L_6: +; 45 +; 46 // ISO Spec: The precision is the maximal number of significant digits +; 47 // if the precision is zero it is taken as one. +; 48 if (!__print_fmt.precision) + LD A,(___print_fmt+6) + OR A,A + JR NZ,L_10 +; 49 __print_fmt.precision=1; + LD A,1 + LD (___print_fmt+6),A +L_10: +; 50 +; 51 if ( _info.exp < MINEXP +; 52 || _info.exp >= __print_fmt.precision) + LD A,(IX+-11) + CP A,-4 + JP M,L_8 + LD A,(IX+-11) + LD HL,___print_fmt+6 + CP A,(HL) + CALL __setflag + JP M,L_9 +L_8: +; 53 { +; 54 --__print_fmt.precision; + LD A,(___print_fmt+6) + DEC A + LD (___print_fmt+6),A +; 55 __print_fmt.type = 'e'; + LD A,101 + LD (___print_fmt+4),A +; 56 } +; 57 else + JR L_11 +L_9: +; 58 { +; 59 __print_fmt.precision -= (1 + _info.exp); + LD B,(IX+-11) + INC B + LD A,(___print_fmt+6) + SUB A,B + LD (___print_fmt+6),A +; 60 __print_fmt.type = 'f'; + LD A,102 + LD (___print_fmt+4),A +; 61 } +L_11: +; 62 +; 63 #ifndef _MULTI_THREAD +; 64 _u_dtof(n); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL __u_dtof + POP BC + POP BC +; 65 #else +; 66 return(_u_dtof(n)); +; 67 #endif +; 68 } + LD SP,IX + POP IX + RET + + +;**************************** __u_dtog *************************** +;Name Addr/Register Size Type +;__u_dtof IMPORT ----- function +;___print_fmt IMPORT 19 variable +;__u_flt_info IMPORT ----- function +;_info IX-12 12 variable +;n IX+6 4 parameter + + +; Stack Frame Size: 24 (bytes) +; Spill Code: 0 (instruction) + + + XREF __u_flt_info:ROM + XREF __u_dtof:ROM + XREF ___print_fmt:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XDEF __u_dtog + END diff --git a/frontends/calculator/CEdev/lib/shared/uitoa.src b/frontends/calculator/CEdev/lib/shared/uitoa.src new file mode 100644 index 0000000..4399172 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/uitoa.src @@ -0,0 +1,65 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UITOA.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 /************************************************* +; 10 * +; 11 * _u_itoa - convert an integer to a number of base rad +; 12 * +; 13 * Inputs: +; 14 * int - int to be converted +; 15 * str - target char array +; 16 * rad - radix +; 17 * fmt - format structure with conversion info +; 18 * +; 19 * Returns: +; 20 * next address past the end of the string +; 21 * +; 22 *************************************************/ +; 23 #ifndef _MULTI_THREAD +; 24 void _u_itoa(int n) +; 25 { +__u_itoa: + CALL __frameset0 +; 26 _u_ltoa((long)n); + LD BC,(IX+6) + CALL __itol + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL __u_ltoa + POP BC + POP BC +; 27 } + LD SP,IX + POP IX + RET + + +;**************************** __u_itoa *************************** +;Name Addr/Register Size Type +;__u_ltoa IMPORT ----- function +;n IX+6 3 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF __u_ltoa:ROM + XREF __itol:ROM + XREF __frameset0:ROM + XDEF __u_itoa + END diff --git a/frontends/calculator/CEdev/lib/shared/uldiv.src b/frontends/calculator/CEdev/lib/shared/uldiv.src new file mode 100644 index 0000000..6acdeac --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/uldiv.src @@ -0,0 +1,128 @@ +; (c) Copyright 1999-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Unsigned Long Division. +; Input: +; Operand1: +; (ix+9) : high word,high byte +; (ix+8) : high word,low byte +; (ix+7) : low word,high byte +; (ix+6) : low word,low byte +; +; Operand2: +; (ix+15) : high word,high byte +; (ix+14) : high word,low byte +; (ix+13) : low word,high byte +; (ix+12) : low word,low byte +; +; Output: +; Result: b : high byte +; de : low byte +; Registers Used: +; a,b,c,d,e,h,l,iy +;------------------------------------------------------------------------- + .assume adl=1 + .def .uldiv + +.uldiv: + push ix + ld ix,0 + add ix,sp + + ld de,0 ;res = 0; + ld b,0 + + ld hl,0 ;num = 0 + ld c,0 + + ld iy,32 ;i = 32; + +loop: + ;res = res << 1 + ex de,hl + add hl,hl + ld a,b + adc a,b + ld b,a + ex de,hl + + ;num = num << 1 + add hl,hl + ld a,c + adc a,c + ld c,a + + ;x = x << 1 + ld a,(ix+6) + add a,(ix+6) + ld (ix+6),a + ld a,(ix+7) + adc a,(ix+7) + ld (ix+7),a + ld a,(ix+8) + adc a,(ix+8) + ld (ix+8),a + ld a,(ix+9) + adc a,(ix+9) + ld (ix+9),a + + + push de + + ;num = num + carry + + ld de,0 + adc hl,de + ld a,c + adc a,d + ld c,a + + + ;num = num - y + ld de,(ix+12) + or a,a + sbc hl,de + ld a,c + ld d,(ix+15) + sbc a,d + ld c,a + + pop de + jr c, out ;if (num < y) goto out + + inc de ;res = res | 1 + + jr done ;goto done + +out: + push de + ;num = num + y + ld de,(ix+12) + add hl,de + ld a,c + ld d,(ix+15) + adc a,d + ld c,a + + pop de + +done: + ;i--, if (i != 0) go to loop + dec iyl + jr nz,loop + + + pop ix + ret + + .def .uldivbdechl +.uldivbdechl: + push bc + push hl + ld c,b + push bc + push de + call .uldiv + ld iy,12 + add iy,sp + ld sp,iy + ret diff --git a/frontends/calculator/CEdev/lib/shared/ultoa.src b/frontends/calculator/CEdev/lib/shared/ultoa.src new file mode 100644 index 0000000..d57f344 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ultoa.src @@ -0,0 +1,472 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\ULTOA.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 #ifndef _PTR_ +; 10 #define _PTR_ * +; 11 #endif +; 12 +; 13 +; 14 /************************************************* +; 15 * +; 16 * _u_ltoa - convert a long to a number of base rad +; 17 * +; 18 * Inputs: +; 19 * lng - long to be converted +; 20 * str - target char array +; 21 * rad - radix +; 22 * fmt - format structure with conversion info +; 23 * +; 24 * Returns: +; 25 * next address past the end of the string +; 26 * +; 27 *************************************************/ +; 28 +; 29 void __print_sendstring(char *sp); +; 30 +; 31 #ifndef _MULTI_THREAD +; 32 void _u_ltoa(long val) +; 33 #else +; 34 char _mt_ltoa(long val,char* __print_buff,struct fmt_type* print_fmt) +; 35 #define __print_fmt (*print_fmt) +; 36 #endif +; 37 { +__u_ltoa: + LD HL,-37 + CALL __frameset +; 38 unsigned char a; +; 39 unsigned char t; +; 40 unsigned char sign; +; 41 char _PTR_ s = __print_buff; + LD BC,___print_buff + LD (IX+-3),BC +; 42 unsigned char nonzero; +; 43 unsigned long uval; +; 44 char rad; +; 45 #ifdef _MULTI_THREAD +; 46 char __print_leading_char = '\0'; +; 47 #endif +; 48 +; 49 sign = val < 0; + LD HL,(IX+6) + LD E,(IX+9) + CALL __lcmpzero + CALL __setflag + JP P,L__1 + LD A,1 + JR L__2 +L__1: + XOR A,A +L__2: + LD (IX+-11),A +; 50 uval = sign ? -val : val; + OR A,A + JR Z,L_2 + LD HL,(IX+6) + LD E,(IX+9) + CALL __lneg + LD (IX+-16),HL + LD (IX+-13),E + JR L_3 +L_2: + LD BC,(IX+6) + LD A,(IX+9) + LD (IX+-16),BC + LD (IX+-13),A +L_3: + LD BC,(IX+-16) + LD A,(IX+-13) + LD (IX+-10),BC + LD (IX+-7),A + OR A,A +; 51 nonzero = (uval > 0); + SBC HL,HL + LD E,0 + CALL __lcmpu + JR NC,L__5 + LD A,1 + JR L__6 +L__5: + XOR A,A +L__6: + LD (IX+-12),A +; 52 +; 53 if (__print_fmt.precision < 0) + LD A,(___print_fmt+6) + OR A,A + JP P,L_6 +; 54 __print_fmt.precision = 1; + LD A,1 + LD (___print_fmt+6),A +L_6: +; 55 +; 56 if (__print_fmt.field_width < 0) + LD A,(___print_fmt+5) + OR A,A + JP P,L_7 +; 57 { +; 58 __print_fmt.flags |= FMT_FLAG_MINUS; + LD A,(___print_fmt+1) + SET 0,A + LD (___print_fmt+1),A +; 59 __print_fmt.field_width = -__print_fmt.field_width; + LD A,(___print_fmt+5) + NEG + LD (___print_fmt+5),A +; 60 } +L_7: +; 61 +; 62 a = 'A'; + LD (IX+-4),65 +; 63 switch (__print_fmt.type) + LD A,(___print_fmt+4) + LD B,A + SEXT HL + LD L,B + CALL __case8 +L__9: + DW 7 + DB 88 + DW24 L_16 + + DB 100 + DW24 L_9 + + DB 105 + DW24 L_10 + + DB 111 + DW24 L_12 + + DB 112 + DW24 L_14 + + DB 117 + DW24 L_11 + + DB 120 + DW24 L_13 + + DW24 L_8 + +; 64 { +; 65 default: +L_8: +; 66 case 'd': +L_9: +; 67 case 'i': +L_10: +; 68 case 'u': +L_11: +; 69 rad = 10; + LD (IX+-5),10 +; 70 break; + JR L_22 +; 71 case 'o': +L_12: +; 72 rad = 0; + LD (IX+-5),0 +; 73 break; + JR L_22 +; 74 case 'x': +L_13: +; 75 case 'p': +L_14: +; 76 if ( !(__print_fmt.flags&FMT_FLAG_UPPERCASE)) + LD A,(___print_fmt+1) + AND A,32 + JR NZ,L_16 +; 77 a = 'a'; + LD (IX+-4),97 +; 78 // Fall into next case +; 79 case 'X': +L_16: +; 80 rad = 16; + LD (IX+-5),16 +; 81 break; +; 82 } +; 83 do +L_22: +; 84 { /* generate digits in reverse order */ +; 85 t = uval % rad; + LD A,(IX+-5) + SEXT HL + LD L,(IX+-5) + LD BC,HL + LD A,H + LD HL,(IX+-10) + LD E,(IX+-7) + CALL __lremu + LD BC,HL + LD (IX+-6),C +; 86 if (t > 9) + LD A,9 + CP A,(IX+-6) + JR NC,L_21 +; 87 *(s++) = (t - 10) + a; + LD BC,(IX+-3) + LD (IX+-19),BC + LD A,(IX+-6) + ADD A,-10 + ADD A,(IX+-4) + LD HL,BC + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 88 else + JR L_23 +L_21: +; 89 *(s++) = t + '0'; + LD BC,(IX+-3) + LD (IX+-22),BC + LD A,(IX+-6) + ADD A,48 + LD HL,BC + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 90 } while (uval /= rad); +L_23: + LD A,(IX+-5) + SEXT HL + LD L,(IX+-5) + LD BC,HL + LD A,H + LD HL,(IX+-10) + LD E,(IX+-7) + CALL __ldivu + LD (IX+-10),HL + LD (IX+-7),E + LD HL,(IX+-10) + LD E,(IX+-7) + CALL __lcmpzero + JR NZ,L_22 +; 91 +; 92 while (s - __print_buff < (unsigned char) __print_fmt.precision) { + JR L_26 +L_27: +; 93 *(s++) = '0'; + LD BC,(IX+-3) + LD (IX+-25),BC + LD HL,BC + LD (HL),48 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 94 } +L_26: + LD A,(___print_fmt+6) + UEXT HL + LD L,A + LD DE,HL + LD HL,(IX+-3) + OR A,A + LD BC,___print_buff + SBC HL,BC + OR A,A + SBC HL,DE + JP M,L_27 +; 95 if (__print_fmt.flags & FMT_FLAG_POUND) { + LD A,(___print_fmt+1) + AND A,8 + JR Z,L_48 +; 96 if (nonzero) { + LD A,(IX+-12) + OR A,A + JR Z,L_48 +; 97 if (rad == 16) { + LD A,(IX+-5) + CP A,16 + JR NZ,L_38 +; 98 *(s++) = 'X'; + LD BC,(IX+-3) + LD (IX+-28),BC + LD HL,BC + LD (HL),88 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 99 *(s++) = '0'; + LD HL,BC + LD (HL),48 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 100 } +; 101 else if (rad == 116) { + JR L_48 +L_38: + LD A,(IX+-5) + CP A,116 + JR NZ,L_36 +; 102 *(s++) = 'x'; + LD BC,(IX+-3) + LD (IX+-31),BC + LD HL,BC + LD (HL),120 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 103 *(s++) = '0'; + LD HL,BC + LD (HL),48 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 104 } +; 105 else if (rad == 8) { + JR L_48 +L_36: + LD A,(IX+-5) + CP A,8 + JR NZ,L_48 +; 106 *(s++) = '0'; + LD BC,(IX+-3) + LD (IX+-34),BC + LD HL,BC + LD (HL),48 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 107 } +; 108 } +; 109 } +L_48: +; 110 +; 111 if (sign) + LD A,(IX+-11) + OR A,A + JR Z,L_47 +; 112 a = '-'; + LD (IX+-4),45 +; 113 else if (__print_fmt.flags & FMT_FLAG_PLUS) + JR L_50 +L_47: + LD A,(___print_fmt+1) + AND A,2 + JR Z,L_45 +; 114 a = '+'; + LD (IX+-4),43 +; 115 else if (__print_fmt.flags & FMT_FLAG_SPACE) + JR L_50 +L_45: + LD A,(___print_fmt+1) + AND A,4 + JR Z,L_43 +; 116 a = ' '; + LD (IX+-4),32 +; 117 else + JR L_50 +L_43: +; 118 a = '\0'; + LD (IX+-4),0 +L_50: +; 119 +; 120 // ISO Spec: If a precision is specified the zero flag is ignored +; 121 if (__print_fmt.precision ) + LD A,(___print_fmt+6) + OR A,A + JR Z,L_55 +; 122 __print_fmt.flags &= ~FMT_FLAG_PAD_ZERO; + LD A,(___print_fmt+1) + RES 6,A + LD (___print_fmt+1),A +L_55: +; 123 +; 124 if ( __print_fmt.flags & FMT_FLAG_PAD_ZERO) + LD A,(___print_fmt+1) + AND A,64 + JR Z,L_54 +; 125 __print_leading_char = a; + LD A,(IX+-4) + LD (___print_leading_char),A +; 126 else if (a) + JR L_56 +L_54: + LD A,(IX+-4) + OR A,A + JR Z,L_56 +; 127 *(s++) = a; + LD BC,(IX+-3) + LD (IX+-37),BC + LD HL,BC + LD A,(IX+-4) + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +L_56: +; 128 +; 129 *s = '\0'; + LD HL,(IX+-3) +; 130 +; 131 _u_reverse(__print_buff); + LD BC,___print_buff + PUSH BC + LD (HL),0 + CALL __u_reverse + POP BC +; 132 #ifndef _MULTI_THREAD +; 133 __print_sendstring(__print_buff); + LD BC,___print_buff + PUSH BC + CALL ___print_sendstring + POP BC +; 134 #else +; 135 return __print_leading_char; +; 136 #endif +; 137 } + LD SP,IX + POP IX + RET + + +;**************************** __u_ltoa *************************** +;Name Addr/Register Size Type +;___print_sendstring IMPORT ----- function +;__u_reverse IMPORT ----- function +;___print_leading_char IMPORT 1 variable +;___print_fmt IMPORT 19 variable +;___print_buff IMPORT unknown variable +;temp0 IX-16 4 variable +;nonzero IX-12 1 variable +;sign IX-11 1 variable +;uval IX-10 4 variable +;t IX-6 1 variable +;rad IX-5 1 variable +;a IX-4 1 variable +;s IX-3 3 variable +;val IX+6 4 parameter + + +; Stack Frame Size: 49 (bytes) +; Spill Code: 0 (instruction) + + + XREF ___print_sendstring:ROM + XREF __u_reverse:ROM + XREF ___print_leading_char:ROM + XREF ___print_buff:ROM + XREF ___print_fmt:ROM + XREF __lcmpu:ROM + XREF __ldivu:ROM + XREF __lneg:ROM + XREF __lremu:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __lcmpzero:ROM + XREF __case8:ROM + XDEF __u_ltoa + END diff --git a/frontends/calculator/CEdev/lib/shared/uprint.src b/frontends/calculator/CEdev/lib/shared/uprint.src new file mode 100644 index 0000000..2cb1281 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/uprint.src @@ -0,0 +1,516 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UPRINT.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 #include +; 4 #include +; 5 #include +; 6 +; 7 extern struct fmt_type __print_fmt; +; 8 extern unsigned char __print_len; +; 9 extern char __print_leading_char; // Initial +, -, or space for number +; 10 extern char *__print_out; +; 11 +; 12 extern void (*__print_xputch)(char); +; 13 +; 14 void __print_sendstring(char *sp); +; 15 void __print_putch(char ch); +; 16 +; 17 int _u_print(char *dest, char *fmt, va_list argp) { +__u_print: + LD HL,-14 + CALL __frameset +; 18 char *sp; +; 19 double d; +; 20 +; 21 __print_len = 0; + XOR A,A + LD (___print_len),A +; 22 __print_out = dest; + LD BC,(IX+6) + LD (___print_out),BC +; 23 while (*fmt) { + JR L_45 +; 24 while (*fmt && *fmt != (char)'%') { +L_3: +; 25 __print_putch(*fmt++); + LD BC,(IX+9) + LD (IX+-11),BC + LD BC,(IX+9) + INC BC + LD (IX+9),BC + LD HL,(IX+-11) + LD C,(HL) + LD B,0 + PUSH BC + CALL ___print_putch + POP BC +; 26 ++__print_len; + LD A,(___print_len) + INC A + LD (___print_len),A +; 27 } +L_2: + LD HL,(IX+9) + LD A,(HL) + OR A,A + JR NZ,L__1 + LD A,1 + JR L__2 +L__1: + XOR A,A +L__2: + LD (IX+-4),A + OR A,A + JR NZ,L_44 + LD HL,(IX+9) + LD A,(HL) + CP A,37 + JR NZ,L_3 +L_44: +; 28 if (*fmt) { /* we found a % in format string */ + LD A,(IX+-4) + OR A,A + JR NZ,L_45 +; 29 fmt = _u_pscan(sp = fmt, &__print_fmt,&argp); + LD BC,(IX+9) + LD (IX+-3),BC + PEA IX+12 + LD BC,___print_fmt + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL __u_pscan + POP BC + POP BC + POP BC + LD (IX+9),HL +; 30 if (__print_fmt.status == (unsigned char)FMT_ERR) { + LD A,(___print_fmt) + CP A,1 + JR Z,L_7 + JR L_42 +; 31 +; 32 /* error in format string, just dump out from p to fmt */ +; 33 +; 34 for (;sp < fmt;++__print_len,++sp) { +L_5: +; 35 __print_putch(*sp++); + LD BC,(IX+-3) + LD (IX+-14),BC + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC + LD HL,(IX+-14) + LD C,(HL) + LD B,0 + PUSH BC + CALL ___print_putch + POP BC + LD A,(___print_len) + INC A + LD (___print_len),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 36 } +L_7: + LD BC,(IX+9) + LD HL,(IX+-3) + OR A,A + SBC HL,BC + JR C,L_5 +; 37 return -1; + LD HL,16777215 + JR L_50 +; 38 } else if (__print_fmt.status == (unsigned char)FMT_PASS_THRU) { +L_42: + LD A,(___print_fmt) + CP A,2 + JR NZ,L_40 +; 39 __print_putch(__print_fmt.chr); + LD A,(___print_fmt+3) + LD C,A + LD B,0 + PUSH BC + CALL ___print_putch + POP BC +; 40 ++__print_len; + LD A,(___print_len) + INC A + LD (___print_len),A +; 41 } else { + JR L_45 +L_40: +; 42 switch (__print_fmt.type) { + LD A,(___print_fmt+4) + LD B,A + SEXT HL + LD L,B + CALL __case8 +L__9: + DW 15 + DB 69 + DW24 L_25 + + DB 71 + DW24 L_27 + + DB 88 + DW24 L_16 + + DB 99 + DW24 L_31 + + DB 100 + DW24 L_9 + + DB 101 + DW24 L_24 + + DB 102 + DW24 L_23 + + DB 103 + DW24 L_26 + + DB 105 + DW24 L_10 + + DB 110 + DW24 L_34 + + DB 111 + DW24 L_18 + + DB 112 + DW24 L_33 + + DB 115 + DW24 L_32 + + DB 117 + DW24 L_17 + + DB 120 + DW24 L_15 + + DW24 L_45 + +; 43 case 'd': +L_9: +; 44 case 'i': +L_10: +; 45 if (__print_fmt.size == (char)'l' || __print_fmt.size == (char)'L') { + LD A,(___print_fmt+2) + CP A,108 + JR Z,L_12 + LD A,(___print_fmt+2) + CP A,76 + JR NZ,L_13 +L_12: +; 46 _u_ltoa(va_arg(argp, long)); + LD IY,(IX+12) + LEA BC,IY+6 + LD (IX+12),BC + LD IY,(IX+12) + LD BC,(IY+-6) + LD A,(IY+-3) + LD H,0 + LD L,A + PUSH HL + PUSH BC + CALL __u_ltoa + POP BC + POP BC +; 47 } else { + JR L_45 +L_13: +; 48 _u_ltoa((long)va_arg(argp, int)); + LD IY,(IX+12) + LEA BC,IY+3 + LD (IX+12),BC + LD IY,(IX+12) + LD BC,(IY+-3) + CALL __itol + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL __u_ltoa + POP BC + POP BC +; 49 } +; 50 break; + JR L_45 +; 51 case 'x': +L_15: +; 52 case 'X': +L_16: +; 53 case 'u': +L_17: +; 54 case 'o': +L_18: +; 55 if (__print_fmt.size == (char)'l' || __print_fmt.size == (char)'L') { + LD A,(___print_fmt+2) + CP A,108 + JR Z,L_20 + LD A,(___print_fmt+2) + CP A,76 + JR NZ,L_21 +L_20: +; 56 _u_ultoa(va_arg(argp,long)); + LD IY,(IX+12) + LEA BC,IY+6 + LD (IX+12),BC + LD IY,(IX+12) + LD BC,(IY+-6) + LD A,(IY+-3) + LD H,0 + LD L,A + PUSH HL + PUSH BC + CALL __u_ultoa + POP BC + POP BC +; 57 } else { + JR L_45 +L_21: +; 58 _u_ultoa((unsigned long)va_arg(argp,unsigned int)); + LD IY,(IX+12) + LEA BC,IY+3 + LD (IX+12),BC + LD IY,(IX+12) + LD BC,(IY+-3) + LD DE,BC + XOR A,A + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL __u_ultoa + POP BC + POP BC +; 59 } +; 60 break; + JR L_45 +; 61 case 'f': +L_23: +; 62 case 'e': +L_24: +; 63 case 'E': +L_25: +; 64 case 'g': +L_26: +; 65 case 'G': +L_27: +; 66 d = va_arg(argp,double); + LD IY,(IX+12) + LEA BC,IY+6 + LD (IX+12),BC + LD IY,(IX+12) + LEA HL,IY+-6 + LD BC,(HL) + INC HL + INC HL + INC HL + LD A,(HL) + LD (IX+-8),BC + LD (IX+-5),A +; 67 if (__print_fmt.type == (char)'g') { + LD A,(___print_fmt+4) + CP A,103 + JR NZ,L_29 +; 68 _u_dtog(d); + LD C,(IX+-5) + LD B,0 + PUSH BC + LD BC,(IX+-8) + PUSH BC + CALL __u_dtog + POP BC + POP BC +; 69 } else { + JR L_45 +L_29: +; 70 _u_dtof(d); + LD C,(IX+-5) + LD B,0 + PUSH BC + LD BC,(IX+-8) + PUSH BC + CALL __u_dtof + POP BC + POP BC +; 71 } +; 72 break; + JR L_45 +; 73 case 'c': +L_31: +; 74 __print_buff[0] = va_arg(argp,int); + LD IY,(IX+12) + LEA BC,IY+3 + LD (IX+12),BC + LD IY,(IX+12) +; 75 __print_buff[1] = '\0'; +; 76 __print_sendstring(__print_buff); + LD BC,___print_buff + PUSH BC + LEA HL,IY+-3 + LD A,(HL) + LD (___print_buff),A + LD HL,___print_buff + INC HL + LD (HL),0 + CALL ___print_sendstring + POP BC +; 77 break; + JR L_45 +; 78 case 's': +L_32: +; 79 sp = va_arg(argp, char*); + LD IY,(IX+12) + LEA BC,IY+3 + LD (IX+12),BC + LD IY,(IX+12) + LEA HL,IY+-3 + LD BC,(HL) + LD (IX+-3),BC +; 80 __print_sendstring(sp); + PUSH BC + CALL ___print_sendstring + POP BC +; 81 break; + JR L_45 +; 82 case 'p': +L_33: +; 83 _u_ultoa((long)va_arg(argp,void*)); + LD IY,(IX+12) + LEA BC,IY+3 + LD (IX+12),BC + LD IY,(IX+12) + LD BC,(IY+-3) + LD DE,BC + XOR A,A + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL __u_ultoa + POP BC + POP BC +; 84 break; + JR L_45 +; 85 case 'n': +L_34: +; 86 sp = va_arg(argp, char*); + LD IY,(IX+12) + LEA BC,IY+3 + LD (IX+12),BC + LD IY,(IX+12) + LEA HL,IY+-3 + LD BC,(HL) + LD (IX+-3),BC +; 87 if (__print_fmt.size == (char)'l' || __print_fmt.size == (char)'L') { + LD A,(___print_fmt+2) + CP A,108 + JR Z,L_36 + LD A,(___print_fmt+2) + CP A,76 + JR NZ,L_37 +L_36: +; 88 *((long*)sp) = __print_len; + UEXT HL + LD A,(___print_len) + LD L,A + LD IY,(IX+-3) + LD (IY),HL + LD (IY+3),H +; 89 } else { + JR L_45 +L_37: +; 90 *((int*)sp) = __print_len; + LD A,(___print_len) + UEXT HL + LD L,A + LD IY,(IX+-3) + LD (IY),HL +; 91 } +; 92 break; +; 93 } +; 94 } +; 95 } +; 96 } +L_45: + LD HL,(IX+9) + LD A,(HL) + OR A,A + JR NZ,L_2 +; 97 +; 98 if (__print_out) { + LD HL,(___print_out) + CALL __icmpzero + JR Z,L_49 +; 99 *__print_out = '\0'; + LD HL,(___print_out) + LD (HL),0 +; 100 } +L_49: +; 101 return __print_len; + LD A,(___print_len) + UEXT HL + LD L,A +; 102 } +L_50: + LD SP,IX + POP IX + RET + + +;**************************** __u_print *************************** +;Name Addr/Register Size Type +;___print_sendstring IMPORT ----- function +;___print_buff IMPORT unknown variable +;__u_dtof IMPORT ----- function +;__u_dtog IMPORT ----- function +;__u_ultoa IMPORT ----- function +;__u_ltoa IMPORT ----- function +;___print_fmt IMPORT 19 variable +;__u_pscan IMPORT ----- function +;___print_putch IMPORT ----- function +;___print_out IMPORT 3 variable +;___print_len IMPORT 1 variable +;d IX-8 4 variable +;G_0 IX-4 1 variable +;sp IX-3 3 variable +;argp IX+12 3 parameter +;fmt IX+9 3 parameter +;dest IX+6 3 parameter + + +; Stack Frame Size: 29 (bytes) +; Spill Code: 0 (instruction) + + + XREF ___print_putch:ROM + XREF ___print_sendstring:ROM + XREF ___print_out:ROM + XREF __u_pscan:ROM + XREF __u_dtog:ROM + XREF __u_dtof:ROM + XREF __u_ultoa:ROM + XREF __u_ltoa:ROM + XREF ___print_len:ROM + XREF ___print_buff:ROM + XREF ___print_fmt:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XREF __case8:ROM + XDEF __u_print + END diff --git a/frontends/calculator/CEdev/lib/shared/upscan.src b/frontends/calculator/CEdev/lib/shared/upscan.src new file mode 100644 index 0000000..829431f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/upscan.src @@ -0,0 +1,802 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UPSCAN.C" + .assume ADL=1 + SEGMENT TEXT +_pscan_fsa: + DB 254 + DB 254 + DB 254 + DB 254 + DB 254 + DB 1 + DB 254 + DB 254 + DB 2 + DB 3 + DB 6 + DB 4 + DB 7 + DB 8 + DB 3 + DB 254 + DB 2 + DB 3 + DB 6 + DB 4 + DB 7 + DB 254 + DB 3 + DB 254 + DB 254 + DB 3 + DB 6 + DB 4 + DB 7 + DB 254 + DB 3 + DB 254 + DB 254 + DB 5 + DB 254 + DB 254 + DB 7 + DB 254 + DB 5 + DB 254 + DB 254 + DB 5 + DB 6 + DB 254 + DB 7 + DB 254 + DB 5 + DB 254 + DB 254 + DB 254 + DB 254 + DB 254 + DB 7 + DB 254 + DB 254 + DB 254 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 #include +; 10 +; 11 #define rom // ez8 keyword +; 12 +; 13 /* NOTE: */ +; 14 /* This code is duplicated in the optimizer to implement the GENPRINTF */ +; 15 /* feature. If you change this, merge the changes in to the optimizer */ +; 16 /* file genprintf.c too.! */ +; 17 +; 18 /* classes */ +; 19 +; 20 #define FLAGS 0 +; 21 #define DIGIT 1 +; 22 #define SIZE 2 +; 23 #define DOT 3 +; 24 #define TYPES 4 +; 25 #define PERCENT 5 +; 26 #define AST 6 +; 27 #define OTHER 7 +; 28 +; 29 /* actions */ +; 30 +; 31 #define ACC -1 +; 32 #define ERR -2 +; 33 +; 34 #define CR 13 +; 35 #define LF 10 +; 36 +; 37 #define TRUE 1 +; 38 #define FALSE 0 +; 39 +; 40 /* +; 41 P +; 42 E +; 43 F D T R O +; 44 L I S Y C T +; 45 A G I D P E A H +; 46 G I Z O E N S E +; 47 S T E T S T T R */ +; 48 static rom const char pscan_fsa[9][8] = { + SEGMENT CODE +; 49 /* 0 */ {ERR,ERR,ERR,ERR,ERR, 1,ERR,ERR}, +; 50 /* 1 */ { 2, 3, 6, 4, 7, 8, 3,ERR}, +; 51 /* 2 */ { 2, 3, 6, 4, 7,ERR, 3,ERR}, +; 52 /* 3 */ {ERR, 3, 6, 4, 7,ERR, 3,ERR}, +; 53 /* 4 */ {ERR, 5,ERR,ERR, 7,ERR, 5,ERR}, +; 54 /* 5 */ {ERR, 5, 6,ERR, 7,ERR, 5,ERR}, +; 55 /* 6 */ {ERR,ERR,ERR,ERR, 7,ERR,ERR,ERR}, +; 56 /* 7 */ {ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC}, +; 57 /* 8 */ {ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC}, +; 58 }; +; 59 +; 60 /************************************************* +; 61 * +; 62 * _u_pscan - scan a printf format string +; 63 * +; 64 * Adopted from funtion of same name in target rtl +; 65 * pfmt - pointer to format string to parse, advanced to a '%' +; 66 * - on return is advanced to first char past format spec +; 67 * +; 68 * node- pointer to the FCALL node, used for args +; 69 * +; 70 * p_argnum - pointer to the index in node->sons[] of the next arg. +; 71 * (These count downward!) +; 72 +; 73 * +; 74 *************************************************/ +; 75 char _PTR_ _u_pscan (char _PTR_ fmt,struct fmt_type _PTR_ str,va_list _PTR_ argp) +; 76 { +__u_pscan: + LD HL,-11 + CALL __frameset +; 77 int pstate; +; 78 int state = 0; + LD BC,0 + LD (IX+-7),BC +; 79 int class; +; 80 char ch; +; 81 unsigned char precision_given = FALSE; + LD (IX+-8),0 +; 82 +; 83 str->flags = 0; + LD IY,(IX+9) + LD (IY+1),0 +; 84 str->field_width = 0; + LD (IY+5),0 +; 85 str->precision = 0; + LD (IY+6),0 +; 86 str->size = 0; + LD (IY+2),0 +; 87 str->type = '\0'; + LD (IY+4),0 +; 88 +; 89 for(;;) { +L_77: +; 90 ch = *(fmt++); + LD HL,(IX+6) + LD A,(HL) + LD (IX+-1),A + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 91 switch (ch) { + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + CALL __case8 +L__0: + DW 35 + DB 32 + DW24 L_3 + + DB 35 + DW24 L_4 + + DB 37 + DW24 L_35 + + DB 42 + DW24 L_16 + + DB 43 + DW24 L_2 + + DB 45 + DW24 L_1 + + DB 46 + DW24 L_15 + + DB 48 + DW24 L_5 + + DB 49 + DW24 L_6 + + DB 50 + DW24 L_7 + + DB 51 + DW24 L_8 + + DB 52 + DW24 L_9 + + DB 53 + DW24 L_10 + + DB 54 + DW24 L_11 + + DB 55 + DW24 L_12 + + DB 56 + DW24 L_13 + + DB 57 + DW24 L_14 + + DB 69 + DW24 L_28 + + DB 71 + DW24 L_30 + + DB 76 + DW24 L_19 + + DB 88 + DW24 L_25 + + DB 99 + DW24 L_31 + + DB 100 + DW24 L_20 + + DB 101 + DW24 L_27 + + DB 102 + DW24 L_26 + + DB 103 + DW24 L_29 + + DB 104 + DW24 L_17 + + DB 105 + DW24 L_21 + + DB 108 + DW24 L_18 + + DB 110 + DW24 L_34 + + DB 111 + DW24 L_22 + + DB 112 + DW24 L_33 + + DB 115 + DW24 L_32 + + DB 117 + DW24 L_23 + + DB 120 + DW24 L_24 + + DW24 L_36 + +; 92 case '-': +L_1: +; 93 case '+': +L_2: +; 94 case ' ': +L_3: +; 95 case '#': +L_4: +; 96 class = FLAGS; + LD BC,0 + LD (IX+-4),BC +; 97 break; + JR L_37 +; 98 case '0': +L_5: +; 99 case '1': +L_6: +; 100 case '2': +L_7: +; 101 case '3': +L_8: +; 102 case '4': +L_9: +; 103 case '5': +L_10: +; 104 case '6': +L_11: +; 105 case '7': +L_12: +; 106 case '8': +L_13: +; 107 case '9': +L_14: +; 108 class = DIGIT; + LD BC,1 + LD (IX+-4),BC +; 109 break; + JR L_37 +; 110 case '.': +L_15: +; 111 class = DOT; + LD BC,3 + LD (IX+-4),BC +; 112 break; + JR L_37 +; 113 case '*': +L_16: +; 114 class = AST; + LD BC,6 + LD (IX+-4),BC +; 115 break; + JR L_37 +; 116 case 'h': +L_17: +; 117 case 'l': +L_18: +; 118 case 'L': +L_19: +; 119 class = SIZE; + LD BC,2 + LD (IX+-4),BC +; 120 break; + JR L_37 +; 121 case 'd': +L_20: +; 122 case 'i': +L_21: +; 123 case 'o': +L_22: +; 124 case 'u': +L_23: +; 125 case 'x': +L_24: +; 126 case 'X': +L_25: +; 127 case 'f': +L_26: +; 128 case 'e': +L_27: +; 129 case 'E': +L_28: +; 130 case 'g': +L_29: +; 131 case 'G': +L_30: +; 132 case 'c': +L_31: +; 133 case 's': +L_32: +; 134 case 'p': +L_33: +; 135 case 'n': +L_34: +; 136 class = TYPES; + LD BC,4 + LD (IX+-4),BC +; 137 break; + JR L_37 +; 138 case '%': +L_35: +; 139 class = PERCENT; + LD BC,5 + LD (IX+-4),BC +; 140 break; + JR L_37 +; 141 +; 142 default: +L_36: +; 143 class = OTHER; + LD BC,7 + LD (IX+-4),BC +; 144 break; +; 145 } +L_37: +; 146 +; 147 pstate = state; + LD BC,(IX+-7) + LD (IX+-11),BC +; 148 state = pscan_fsa[state][class]; + LD HL,(IX+-7) + ADD HL,HL + ADD HL,HL + ADD HL,HL + LD BC,_pscan_fsa + ADD HL,BC + LD BC,(IX+-4) + ADD HL,BC + LD A,(HL) + LD B,A + SEXT HL + LD L,B + LD (IX+-7),HL +; 149 +; 150 switch (state) { + CALL __case24 +L__1: + DW 9 + DW 2 + DB 0 + DW24 L_40 + + DW 3 + DB 0 + DW24 L_46 + + DW 4 + DB 0 + DW24 L_53 + + DW 5 + DB 0 + DW24 L_54 + + DW 6 + DB 0 + DW24 L_58 + + DW 7 + DB 0 + DW24 L_59 + + DW 8 + DB 0 + DW24 L_76 + + DW 65534 + DB 255 + DW24 L_39 + + DW 65535 + DB 255 + DW24 L_38 + + DW24 L_77 + +; 151 case ACC: +L_38: +; 152 str->status = FMT_OK; + LD IY,(IX+9) + LD (IY+0),0 +; 153 return(fmt-1); + LD IY,(IX+6) + LEA HL,IY+-1 + JR L_79 +; 154 case ERR: +L_39: +; 155 str->status = FMT_ERR; + LD IY,(IX+9) + LD (IY+0),1 +; 156 return(fmt-1); + LD IY,(IX+6) + LEA HL,IY+-1 + JR L_79 +; 157 +; 158 case 2: +L_40: +; 159 switch (ch) { + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + CALL __case8 +L__2: + DW 4 + DB 32 + DW24 L_43 + + DB 35 + DW24 L_44 + + DB 43 + DW24 L_42 + + DB 45 + DW24 L_41 + + DW24 L_77 + +; 160 +; 161 case '-': +L_41: +; 162 str->flags |= FMT_FLAG_MINUS; + LD IY,(IX+9) + LD A,(IY+1) + SET 0,A + LD (IY+1),A +; 163 break; + JR L_77 +; 164 case '+': +L_42: +; 165 str->flags |= FMT_FLAG_PLUS; + LD IY,(IX+9) + LD A,(IY+1) + SET 1,A + LD (IY+1),A +; 166 break; + JR L_77 +; 167 case ' ': +L_43: +; 168 str->flags |= FMT_FLAG_SPACE; + LD IY,(IX+9) + LD A,(IY+1) + SET 2,A + LD (IY+1),A +; 169 break; + JR L_77 +; 170 case '#': +L_44: +; 171 str->flags |= FMT_FLAG_POUND; + LD IY,(IX+9) + LD A,(IY+1) + SET 3,A + LD (IY+1),A +; 172 break; + JR L_77 +; 173 } +; 174 break; +; 175 +; 176 case 3: +L_46: +; 177 if (ch == '*') + LD A,(IX+-1) + CP A,42 + JR NZ,L_51 +; 178 str->field_width = va_arg(*argp,int); + LD HL,(IX+12) + LD IY,(HL) + LEA BC,IY+3 + LD HL,(IX+12) + LD (HL),BC + LD HL,(IX+12) + LD IY,(HL) + LD A,(IY+-3) + LD IY,(IX+9) + LD (IY+5),A +; 179 else { + JR L_77 +L_51: +; 180 if (pstate != state && + LD BC,(IX+-7) + LD HL,(IX+-11) + OR A,A + SBC HL,BC + JR Z,L_49 +; 181 ch == '0') + LD A,(IX+-1) + CP A,48 + JR NZ,L_49 +; 182 str->flags |= FMT_FLAG_PAD_ZERO; + LD IY,(IX+9) + LD A,(IY+1) + SET 6,A + LD (IY+1),A +L_49: +; 183 str->field_width = str->field_width * 10 + (ch - '0'); + LD IY,(IX+9) + LD B,(IY+5) + LD C,10 + MLT BC + LD A,(IX+-1) + ADD A,-48 + LD B,A + LD A,C + ADD A,B + LD (IY+5),A +; 184 } +; 185 break; + JR L_77 +; 186 case 4: +L_53: +; 187 precision_given = TRUE; + LD (IX+-8),1 +; 188 break; + JR L_77 +; 189 case 5: +L_54: +; 190 if (ch == '*') + LD A,(IX+-1) + CP A,42 + JR NZ,L_56 +; 191 str->precision = va_arg(*argp,int); + LD HL,(IX+12) + LD IY,(HL) + LEA BC,IY+3 + LD HL,(IX+12) + LD (HL),BC + LD HL,(IX+12) + LD IY,(HL) + LD A,(IY+-3) + LD IY,(IX+9) + LD (IY+6),A +; 192 else + JR L_77 +L_56: +; 193 str->precision = str->precision * 10 + (ch - '0'); + LD IY,(IX+9) + LD B,(IY+6) + LD C,10 + MLT BC + LD A,(IX+-1) + ADD A,-48 + LD B,A + LD A,C + ADD A,B + LD (IY+6),A +; 194 break; + JR L_77 +; 195 case 6: +L_58: +; 196 str->size = ch; + LD A,(IX+-1) + LD IY,(IX+9) + LD (IY+2),A +; 197 break; + JR L_77 +; 198 case 7: +L_59: +; 199 str->type = tolower(ch); + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _tolower + POP BC + LD IY,(IX+9) + LD (IY+4),L +; 200 if (isupper(ch)) + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isupper + POP BC + CALL __icmpzero + JR Z,L_62 +; 201 str->flags |= FMT_FLAG_UPPERCASE; + LD IY,(IX+9) + LD A,(IY+1) + SET 5,A + LD (IY+1),A +L_62: +; 202 if (str->field_width < 0) + LD IY,(IX+9) + LD A,(IY+5) + OR A,A + JP P,L_71 +; 203 { +; 204 str->flags |= FMT_FLAG_MINUS; + LD IY,(IX+9) + LD A,(IY+1) + SET 0,A + LD (IY+1),A +; 205 str->field_width = -str->field_width; + LD A,(IY+5) + NEG + LD (IY+5),A +; 206 } +L_71: +; 207 if (!precision_given || str->precision < 0) + LD A,(IX+-8) + OR A,A + JR Z,L_70 + LD IY,(IX+9) + LD A,(IY+6) + OR A,A + JP P,L_74 +L_70: +; 208 { +; 209 if (ch == 'e' || + LD A,(IX+-1) + CP A,101 + JR Z,L_68 +; 210 ch == 'E' || + LD A,(IX+-1) + CP A,69 + JR Z,L_68 +; 211 ch == 'g' || + LD A,(IX+-1) + CP A,103 + JR Z,L_68 +; 212 ch == 'G' || + LD A,(IX+-1) + CP A,71 + JR Z,L_68 +; 213 ch == 'f') + LD A,(IX+-1) + CP A,102 + JR NZ,L_69 +L_68: +; 214 str->precision = DEFAULT_PRECISION; + LD IY,(IX+9) + LD (IY+6),6 +; 215 else + JR L_74 +L_69: +; 216 str->precision = 0; + LD IY,(IX+9) + LD (IY+6),0 +; 217 } +L_74: +; 218 if (ch == 's' && precision_given) + LD A,(IX+-1) + CP A,115 + JR NZ,L_77 + LD A,(IX+-8) + OR A,A + JR Z,L_77 +; 219 str->flags |= FMT_FLAG_PRECISION; + LD IY,(IX+9) + LD A,(IY+1) + SET 4,A + LD (IY+1),A +; 220 break; + JR L_77 +; 221 case 8: +L_76: +; 222 str->status = FMT_PASS_THRU; + LD IY,(IX+9) + LD (IY+0),2 +; 223 str->chr = ch; + LD A,(IX+-1) + LD (IY+3),A +; 224 return(fmt); + LD HL,(IX+6) +; 225 } +; 226 } +; 227 } +L_79: + LD SP,IX + POP IX + RET + + +;**************************** __u_pscan *************************** +;Name Addr/Register Size Type +;_isupper IMPORT ----- function +;_tolower IMPORT ----- function +;_pscan_fsa STATIC 72 variable +;pstate IX-11 3 variable +;precision_given IX-8 1 variable +;state IX-7 3 variable +;class IX-4 3 variable +;ch IX-1 1 variable +;argp IX+12 3 parameter +;str IX+9 3 parameter +;fmt IX+6 3 parameter + + +; Stack Frame Size: 26 (bytes) +; Spill Code: 0 (instruction) + + + XREF _tolower:ROM + XREF _isupper:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XREF __case24:ROM + XREF __case8:ROM + XDEF __u_pscan + END diff --git a/frontends/calculator/CEdev/lib/shared/ureverse.src b/frontends/calculator/CEdev/lib/shared/ureverse.src new file mode 100644 index 0000000..058a429 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ureverse.src @@ -0,0 +1,112 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UREVERSE.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 #include +; 10 #include +; 11 +; 12 /************************************************* +; 13 * +; 14 * _u_reverse - reverse a string leaving the end +; 15 * of string indicator at the end +; 16 * of the string +; 17 * +; 18 * Inputs: +; 19 * str - string to be reversed +; 20 * +; 21 * Returns: +; 22 * str - string reversed +; 23 * +; 24 *************************************************/ +; 25 void _u_reverse(char *s) +; 26 { +__u_reverse: + LD HL,-16 + CALL __frameset +; 27 register char *ss = s; + LD BC,(IX+6) + LD (IX+-3),BC +; 28 register size_t len = strlen(s); + LD BC,(IX+6) + PUSH BC + CALL _strlen + POP BC + LD (IX+-6),HL +; 29 register char *pp = s + len - 1; + LD BC,(IX+6) + ADD HL,BC + DEC HL + LD (IX+-9),HL +; 30 register char c; +; 31 +; 32 while (len > 1) { + JR L_2 +L_3: +; 33 c = *pp; + LD HL,(IX+-9) + LD A,(HL) + LD (IX+-10),A +; 34 *pp-- = *ss; + LD BC,(IX+-9) + LD (IX+-13),BC + LD HL,(IX+-3) + LD A,(HL) + LD HL,(IX+-13) + LD (HL),A + LD IY,(IX+-9) + LEA BC,IY+-1 + LD (IX+-9),BC +; 35 *ss++ = c; + LD BC,(IX+-3) + LD (IX+-16),BC + LD HL,BC + LD A,(IX+-10) + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 36 len -= 2; + LD IY,(IX+-6) + LEA IY,IY+-2 + LD (IX+-6),IY +; 37 } +L_2: + LD BC,(IX+-6) + LD HL,1 + OR A,A + SBC HL,BC + JR C,L_3 +; 38 } + LD SP,IX + POP IX + RET + + +;**************************** __u_reverse *************************** +;Name Addr/Register Size Type +;_strlen IMPORT ----- function +;c IX-10 1 variable +;pp IX-9 3 variable +;len IX-6 3 variable +;ss IX-3 3 variable +;s IX+6 3 parameter + + +; Stack Frame Size: 25 (bytes) +; Spill Code: 0 (instruction) + + + XREF _strlen:ROM + XREF __frameset:ROM + XDEF __u_reverse + END diff --git a/frontends/calculator/CEdev/lib/shared/usb.src b/frontends/calculator/CEdev/lib/shared/usb.src new file mode 100644 index 0000000..91cc310 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/usb.src @@ -0,0 +1,21 @@ +; --- +; External Definitions +; --- + .def _usb_BusPowered + .def _usb_SelfPowered + .def _usb_ResetChip + .def _usb_DisableTimers + .def _usb_EnableTimers + .def _usb_ResetTimers + .assume adl=1 + +; --- +; Location Equates +; --- +_usb_BusPowered equ 0003E4h +_usb_SelfPowered equ 0003E8h +_usb_ResetChip equ 0003F4h +_usb_DisableTimers equ 0004F4h +_usb_EnableTimers equ 0004F8h +_usb_ResetTimers equ 0004F0h +; --- diff --git a/frontends/calculator/CEdev/lib/shared/uscan.src b/frontends/calculator/CEdev/lib/shared/uscan.src new file mode 100644 index 0000000..793c980 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/uscan.src @@ -0,0 +1,1822 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\USCAN.C" + .assume ADL=1 + SEGMENT BSS +_bptr: + DS 3 +_argp: + DS 3 +_len: + DS 3 +_fields: + DS 1 +_fmt_str: + DS 19 +_prev_ch: + DS 3 +_isunget: + DS 1 +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 /************************************************************************* +; 7 * We now assume that the maximum number of fields processed in a format +; 8 * string is 255. Then, we can fit the field count into a char, for a +; 9 * slight saving in space and time. +; 10 *************************************************************************/ +; 11 +; 12 #include +; 13 #include +; 14 #include +; 15 #include +; 16 #include +; 17 #include +; 18 #include +; 19 #include +; 20 +; 21 /* Sizes allowed for various data */ +; 22 #define FLT_CHARS 127 +; 23 #define PTR_CHARS 127 +; 24 #define INT_CHARS 127 +; 25 +; 26 static char *bptr; +; 27 static va_list argp; +; 28 static int len; +; 29 static unsigned char fields; +; 30 static struct fmt_type fmt_str; +; 31 static int prev_ch; +; 32 static char isunget; + SEGMENT CODE +; 33 +; 34 int getchar(void); +; 35 +; 36 /****************************************/ +; 37 /* get a character +; 38 /****************************************/ +; 39 static int get(void) +; 40 { +_get: + LD HL,-3 + CALL __frameset +; 41 ++len; + LD BC,(_len) + INC BC + LD (_len),BC +; 42 if (bptr) + LD HL,(_bptr) + CALL __icmpzero + JR Z,L_3 +; 43 return(*(bptr++)); + LD BC,(_bptr) + LD (IX+-3),BC + LD BC,(_bptr) + INC BC + LD (_bptr),BC + LD HL,(IX+-3) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + JR L_5 +; 44 else if (isunget==1) { +L_3: + LD A,(_isunget) + CP A,1 + JR NZ,L_4 +; 45 isunget = 0; + XOR A,A + LD (_isunget),A +; 46 return prev_ch; + LD HL,(_prev_ch) + JR L_5 +; 47 } +L_4: +; 48 return(prev_ch = getchar()); + CALL _getchar + LD (_prev_ch),HL +; 49 } +L_5: + LD SP,IX + POP IX + RET + + +;**************************** _get *************************** +;Name Addr/Register Size Type +;_getchar IMPORT ----- function +;_prev_ch STATIC 3 variable +;_isunget STATIC 1 variable +;_bptr STATIC 3 variable +;_len STATIC 3 variable + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + +; 50 +; 51 /****************************************/ +; 52 /* unget a character +; 53 /****************************************/ +; 54 static void unget(void) { +_unget: +; 55 --len; + LD BC,(_len) + DEC BC + LD (_len),BC +; 56 isunget = 1; + LD A,1 + LD (_isunget),A +; 57 if (bptr) + LD HL,(_bptr) + CALL __icmpzero + JR Z,L_7 +; 58 --bptr; + LD IY,(_bptr) + LEA BC,IY+-1 + LD (_bptr),BC +; 59 } +L_7: + RET + + +;**************************** _unget *************************** +;Name Addr/Register Size Type +;_bptr STATIC 3 variable +;_isunget STATIC 1 variable +;_len STATIC 3 variable + + +; Stack Frame Size: 6 (bytes) +; Spill Code: 0 (instruction) + + +; 60 +; 61 /****************************************/ +; 62 /* Handle pointer conversions +; 63 /****************************************/ +; 64 static unsigned char pointer(void) +; 65 { +_pointer: + LD HL,-138 + CALL __frameset +; 66 unsigned char i; +; 67 char ch; +; 68 char buffer[PTR_CHARS]; +; 69 char *bp = buffer; + LD HL,IX + LD BC,-135 + ADD HL,BC + LD (IX+-5),HL +; 70 unsigned int addr; +; 71 +; 72 if (fmt_str.field_width == 0 || fmt_str.field_width > sizeof(buffer)-1) + LD A,(_fmt_str+5) + OR A,A + JR Z,L_9 + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD HL,126 + OR A,A + SBC HL,BC + JR NC,L_11 +L_9: +; 73 fmt_str.field_width = sizeof(buffer)-1; + LD A,126 + LD (_fmt_str+5),A +L_11: +; 74 if ((ch = get()) == EOF) + CALL _get + LD (IX+-2),L + LD A,(IX+-2) + CP A,-1 + JR NZ,L_20 +; 75 return FALSE; + XOR A,A + JR L_28 +L_20: +; 76 for (i=0;isxdigit(ch);) { + LD (IX+-1),0 + JR L_19 +L_17: +; 77 *(bp++) = ch; + LD BC,(IX+-5) + LEA IY,IX+-128 + LD (IY+-10),BC + LD HL,(IY+-10) + LD A,(IX+-2) + LD (HL),A + LD BC,(IX+-5) + INC BC + LD (IX+-5),BC +; 78 i++; + INC (IX+-1) +; 79 if (i >= fmt_str.field_width) + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-1) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + JP P,L_22 +; 80 break; +; 81 if ((ch = get()) == EOF) + CALL _get + LD (IX+-2),L + LD A,(IX+-2) + CP A,-1 + JR NZ,L_19 +; 82 return FALSE; + XOR A,A + JR L_28 +; 83 } +L_19: + LD A,(IX+-2) + SEXT HL + LD L,(IX+-2) + PUSH HL + CALL _isxdigit + POP BC + CALL __icmpzero + JR NZ,L_17 +L_22: +; 84 if (bp == buffer) + LD HL,IX + LD BC,-135 + ADD HL,BC + OR A,A + LD BC,(IX+-5) + SBC HL,BC + JR NZ,L_24 +; 85 return FALSE; + XOR A,A + JR L_28 +L_24: +; 86 if (i < fmt_str.field_width) + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-1) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_25 +; 87 unget(); + CALL _unget +L_25: +; 88 *bp = '\0'; + LD IY,(IX+-5) +; 89 addr = strtoul(buffer,(void *)NULL,16); + LD BC,16 + PUSH BC + LD BC,0 + PUSH BC + LD HL,IX + LD BC,-135 + ADD HL,BC + LD BC,HL + PUSH BC + LD (IY),0 + CALL _strtoul + POP BC + POP BC + POP BC + LD (IX+-8),HL +; 90 +; 91 if (!(fmt_str.flags & FMT_FLAG_IGNORE)) + LD A,(_fmt_str+1) + AND A,16 + JR NZ,L_27 +; 92 { +; 93 *(va_arg(argp, int**)) = (int*)addr; + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD HL,(HL) + LD BC,(IX+-8) + LD (HL),BC +; 94 ++fields; + LD A,(_fields) + INC A + LD (_fields),A +; 95 } +L_27: +; 96 +; 97 return TRUE; + LD A,1 +; 98 } +L_28: + LD SP,IX + POP IX + RET + + +;**************************** _pointer *************************** +;Name Addr/Register Size Type +;_fields STATIC 1 variable +;_argp STATIC 3 variable +;_strtoul IMPORT ----- function +;_isxdigit IMPORT ----- function +;_fmt_str STATIC 19 variable +;buffer IX-135 127 variable +;addr IX-8 3 variable +;bp IX-5 3 variable +;ch IX-2 1 variable +;i IX-1 1 variable + + +; Stack Frame Size: 144 (bytes) +; Spill Code: 0 (instruction) + + +; 99 +; 100 /****************************************/ +; 101 /* Handle string conversions +; 102 /****************************************/ +; 103 static unsigned char string(void) +; 104 { +_string: + LD HL,-8 + CALL __frameset +; 105 unsigned char i; +; 106 char ch; +; 107 char *p = NULL; + LD BC,0 + LD (IX+-5),BC +; 108 +; 109 if (!(fmt_str.flags & FMT_FLAG_IGNORE)) + LD A,(_fmt_str+1) + AND A,16 + JR NZ,L_31 +; 110 p = va_arg(argp, char*); + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD BC,(HL) + LD (IX+-5),BC +L_31: +; 111 if (fmt_str.field_width == 0) + LD A,(_fmt_str+5) + OR A,A + JR NZ,L_33 +; 112 fmt_str.field_width = 127; + LD A,127 + LD (_fmt_str+5),A +; 113 do { +L_33: +; 114 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_34 +; 115 return FALSE; + XOR A,A + JR L_55 +; 116 } while (isspace(ch)); +L_34: + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_33 +; 117 unget(); + CALL _unget +; 118 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_49 +; 119 return FALSE; + XOR A,A + JR L_55 +L_49: +; 120 for (i=0; !isspace(ch) && ch;) { + LD (IX+-2),0 + JR L_48 +L_46: +; 121 if (p) + LD HL,(IX+-5) + CALL __icmpzero + JR Z,L_42 +; 122 *(p++) = ch; + LD BC,(IX+-5) + LD (IX+-8),BC + LD HL,BC + LD A,(IX+-1) + LD (HL),A + LD BC,(IX+-5) + INC BC + LD (IX+-5),BC +L_42: +; 123 i++; + INC (IX+-2) +; 124 if (i >= fmt_str.field_width) + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-2) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + JP P,L_51 +; 125 break; +; 126 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_48 +; 127 return FALSE; + XOR A,A + JR L_55 +; 128 } +L_48: + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_51 + LD A,(IX+-1) + OR A,A + JR NZ,L_46 +L_51: +; 129 if (i < fmt_str.field_width) + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-2) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + JP P,L_53 +; 130 unget(); + CALL _unget +L_53: +; 131 if (p) + LD HL,(IX+-5) + CALL __icmpzero + JR Z,L_54 +; 132 { +; 133 *p = '\0'; + LD HL,(IX+-5) + LD (HL),0 +; 134 ++fields; + LD A,(_fields) + INC A + LD (_fields),A +; 135 } +L_54: +; 136 return TRUE; + LD A,1 +; 137 } +L_55: + LD SP,IX + POP IX + RET + + +;**************************** _string *************************** +;Name Addr/Register Size Type +;_fields STATIC 1 variable +;_isspace IMPORT ----- function +;_argp STATIC 3 variable +;_fmt_str STATIC 19 variable +;p IX-5 3 variable +;i IX-2 1 variable +;ch IX-1 1 variable + + +; Stack Frame Size: 14 (bytes) +; Spill Code: 0 (instruction) + + +; 138 +; 139 /****************************************/ +; 140 /* Handle character conversions +; 141 /****************************************/ +; 142 static unsigned char character(void) +; 143 { +_character: + LD HL,-8 + CALL __frameset +; 144 unsigned char i; +; 145 char ch; +; 146 char *p=NULL; + LD BC,0 + LD (IX+-4),BC +; 147 +; 148 if (!(fmt_str.flags & FMT_FLAG_IGNORE)) + LD A,(_fmt_str+1) + AND A,16 + JR NZ,L_58 +; 149 p = va_arg(argp,char*); + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD BC,(HL) + LD (IX+-4),BC +L_58: +; 150 if (fmt_str.field_width == 0) + LD A,(_fmt_str+5) + OR A,A + JR NZ,L_67 +; 151 fmt_str.field_width = 1; + LD A,1 + LD (_fmt_str+5),A +L_67: +; 152 for (i=0;i sizeof(buffer)-1) + LD A,(_fmt_str+5) + OR A,A + JR Z,L_71 + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD HL,126 + OR A,A + SBC HL,BC + JR NC,L_73 +L_71: +; 178 fmt_str.field_width = sizeof(buffer)-1; + LD A,126 + LD (_fmt_str+5),A +; 179 do { +L_73: +; 180 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_74 +; 181 return FALSE; + XOR A,A + JR L_102 +; 182 } while (isspace(ch)); +L_74: + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_73 +; 183 +; 184 for (i=0; i < fmt_str.field_width; ++i) + LD (IX+-2),0 + JR L_93 +L_91: +; 185 { +; 186 if (takeEe && (ch == 'e' || ch == 'E')) + LD A,(IX+-8) + OR A,A + JR Z,L_87 + LD A,(IX+-1) + CP A,101 + JR Z,L_86 + LD A,(IX+-1) + CP A,69 + JR NZ,L_87 +L_86: +; 187 { +; 188 takeEe = FALSE; + LD (IX+-8),0 +; 189 takeSign=TRUE; + LD (IX+-7),1 +; 190 takeDot=FALSE; + LD (IX+-6),0 +; 191 } else + JR L_89 +L_87: +; 192 if (takeDot && ch=='.') + LD A,(IX+-6) + OR A,A + JR Z,L_85 + LD A,(IX+-1) + CP A,46 + JR NZ,L_85 +; 193 { +; 194 takeDot=FALSE; + LD (IX+-6),0 +; 195 } else + JR L_89 +L_85: +; 196 if ( (takeSign && (ch == '-' || ch == '+')) + LD A,(IX+-7) + OR A,A + JR Z,L_81 + LD A,(IX+-1) + CP A,45 + JR Z,L_82 + LD A,(IX+-1) + CP A,43 + JR Z,L_82 +; 197 || isdigit(ch) ) +L_81: + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isdigit + POP BC + CALL __icmpzero + JR Z,L_96 +L_82: +; 198 { +; 199 takeSign = FALSE; + LD (IX+-7),0 +; 200 } else +; 201 { +; 202 break; +; 203 } +L_89: +; 204 *(bp++) = ch; + LD BC,(IX+-5) + LEA IY,IX+-128 + LD (IY+-14),BC + LD HL,(IY+-14) + LD A,(IX+-1) + LD (HL),A + LD BC,(IX+-5) + INC BC + LD (IX+-5),BC +; 205 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_92 +; 206 return FALSE; + XOR A,A + JR L_102 +; 207 } +L_92: + INC (IX+-2) +L_93: + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-2) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + JP M,L_91 +L_96: +; 208 if (bp == buffer) + LD HL,IX + LD BC,-139 + ADD HL,BC + OR A,A + LD BC,(IX+-5) + SBC HL,BC + JR NZ,L_98 +; 209 return(fields); + LD A,(_fields) + JR L_102 +L_98: +; 210 if (i < fmt_str.field_width) + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-2) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_99 +; 211 unget(); + CALL _unget +L_99: +; 212 *bp = '\0'; + LD IY,(IX+-5) +; 213 dval = strtod(buffer,NULL); + LD BC,0 + PUSH BC + LD HL,IX + LD BC,-139 + ADD HL,BC + LD BC,HL + PUSH BC + LD (IY),0 + CALL _strtod + POP BC + POP BC + LD (IX+-12),HL + LD (IX+-9),E +; 214 +; 215 if (!(fmt_str.flags & FMT_FLAG_IGNORE)) { + LD A,(_fmt_str+1) + AND A,16 + JR NZ,L_101 +; 216 *(va_arg(argp, float*)) = dval; + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD HL,(HL) + LD BC,(IX+-12) + LD A,(IX+-9) + LD (HL),BC + INC HL + INC HL + INC HL + LD (HL),A +; 217 ++fields; + LD A,(_fields) + INC A + LD (_fields),A +; 218 } +L_101: +; 219 +; 220 return TRUE; + LD A,1 +; 221 } +L_102: + LD SP,IX + POP IX + RET + + +;**************************** _fpoint *************************** +;Name Addr/Register Size Type +;_argp STATIC 3 variable +;_strtod IMPORT ----- function +;_fields STATIC 1 variable +;_isdigit IMPORT ----- function +;_isspace IMPORT ----- function +;_fmt_str STATIC 19 variable +;buffer IX-139 127 variable +;dval IX-12 4 variable +;takeEe IX-8 1 variable +;takeSign IX-7 1 variable +;takeDot IX-6 1 variable +;bp IX-5 3 variable +;i IX-2 1 variable +;ch IX-1 1 variable + + +; Stack Frame Size: 148 (bytes) +; Spill Code: 0 (instruction) + + +; 222 +; 223 /****************************************/ +; 224 /* Handle scalar conversions +; 225 /****************************************/ +; 226 #ifndef _MULTI_THREAD +; 227 static unsigned char scalar(int radix) +; 228 #else +; 229 static unsigned char scalar(va_list argp,int len,unsigned char fields,struct fmt_type fmt_str,int prev_ch,char isunget,int radix) +; 230 #endif +; 231 { +_scalar: + LD HL,-139 + CALL __frameset +; 232 unsigned char i; +; 233 char ch; +; 234 char buffer[INT_CHARS]; +; 235 char *bp = buffer; + LD HL,IX + LD BC,-136 + ADD HL,BC + LD (IX+-5),HL +; 236 long val; +; 237 +; 238 if (fmt_str.field_width == 0 || fmt_str.field_width > sizeof(buffer)-1) + LD A,(_fmt_str+5) + OR A,A + JR Z,L_104 + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD HL,126 + OR A,A + SBC HL,BC + JR NC,L_106 +L_104: +; 239 fmt_str.field_width = sizeof(buffer)-1; + LD A,126 + LD (_fmt_str+5),A +; 240 do { +L_106: +; 241 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_107 +; 242 return FALSE; + XOR A,A + JR L_146 +; 243 } while (isspace(ch)); +L_107: + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_106 +; 244 unget(); + CALL _unget +; 245 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_127 +; 246 return FALSE; + XOR A,A + JR L_146 +L_127: +; 247 for (i=0;radix == 10 && isdigit(ch) || + LD (IX+-2),0 + JR L_126 +; 248 radix == 16 && isxdigit(ch) || +; 249 radix == 8 && ch >= '0' && ch <= '7' || +; 250 ch == '-' || +; 251 ch == '+';) { +L_124: +; 252 *(bp++) = ch; + LD BC,(IX+-5) + LEA IY,IX+-128 + LD (IY+-11),BC + LD HL,(IY+-11) + LD A,(IX+-1) + LD (HL),A + LD BC,(IX+-5) + INC BC + LD (IX+-5),BC +; 253 i++; + INC (IX+-2) +; 254 if (i >= fmt_str.field_width) + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-2) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + JP P,L_129 +; 255 break; +; 256 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_126 +; 257 return FALSE; + XOR A,A + JR L_146 +; 258 } +L_126: + LD BC,10 + LD HL,(IX+6) + OR A,A + SBC HL,BC + JR NZ,L_113 + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isdigit + POP BC + CALL __icmpzero + JR NZ,L_124 +L_113: + LD BC,16 + LD HL,(IX+6) + OR A,A + SBC HL,BC + JR NZ,L_116 + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isxdigit + POP BC + CALL __icmpzero + JR NZ,L_124 +L_116: + LD BC,8 + LD HL,(IX+6) + OR A,A + SBC HL,BC + JR NZ,L_117 + LD A,(IX+-1) + CP A,48 + CALL __setflag + JP M,L_117 + LD A,55 + CP A,(IX+-1) + CALL __setflag + JP P,L_124 +L_117: + LD A,(IX+-1) + CP A,45 + JR Z,L_124 + LD A,(IX+-1) + CP A,43 + JR Z,L_124 +L_129: +; 259 if (bp == buffer) + LD HL,IX + LD BC,-136 + ADD HL,BC + OR A,A + LD BC,(IX+-5) + SBC HL,BC + JR NZ,L_131 +; 260 return(fields); + LD A,(_fields) + JR L_146 +L_131: +; 261 if (i < fmt_str.field_width) + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-2) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_132 +; 262 unget(); + CALL _unget +L_132: +; 263 *bp = '\0'; + LD HL,(IX+-5) + LD (HL),0 +; 264 if ((fmt_str.type == 'u') || (radix == 8) || (radix == 16)) + LD A,(_fmt_str+4) + CP A,117 + JR Z,L_135 + LD BC,8 + LD HL,(IX+6) + OR A,A + SBC HL,BC + JR Z,L_135 + LD BC,16 + LD HL,(IX+6) + OR A,A + SBC HL,BC + JR NZ,L_136 +L_135: +; 265 val = strtoul(buffer,(void*)NULL,radix); + LD BC,(IX+6) + PUSH BC + LD BC,0 + PUSH BC + LD HL,IX + LD BC,-136 + ADD HL,BC + LD BC,HL + PUSH BC + CALL _strtoul + POP BC + POP BC + POP BC + LD (IX+-9),HL + LD (IX+-6),E +; 266 else + JR L_144 +L_136: +; 267 val = strtol(buffer,(void*)NULL,radix); + LD BC,(IX+6) + PUSH BC + LD BC,0 + PUSH BC + LD HL,IX + LD BC,-136 + ADD HL,BC + LD BC,HL + PUSH BC + CALL _strtol + POP BC + POP BC + POP BC + LD (IX+-9),HL + LD (IX+-6),E +L_144: +; 268 +; 269 if (!(fmt_str.flags & FMT_FLAG_IGNORE)) { + LD A,(_fmt_str+1) + AND A,16 + JR NZ,L_145 +; 270 if (fmt_str.size == 'h') + LD A,(_fmt_str+2) + CP A,104 + JR NZ,L_141 +; 271 *(va_arg(argp,short*)) = val; + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD HL,(HL) + LD BC,(IX+-9) + LD (HL),C + INC HL + LD (HL),B +; 272 else if (fmt_str.size == 'l' || fmt_str.size == 'L') + JR L_142 +L_141: + LD A,(_fmt_str+2) + CP A,108 + JR Z,L_138 + LD A,(_fmt_str+2) + CP A,76 + JR NZ,L_139 +L_138: +; 273 *(va_arg(argp,long*)) = val; + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD HL,(HL) + LD BC,(IX+-9) + LD A,(IX+-6) + LD (HL),BC + INC HL + INC HL + INC HL + LD (HL),A +; 274 else + JR L_142 +L_139: +; 275 *(va_arg(argp,int*)) = val; + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD HL,(HL) + LD BC,(IX+-9) + LD (HL),BC +L_142: +; 276 ++fields; + LD A,(_fields) + INC A + LD (_fields),A +; 277 } +L_145: +; 278 +; 279 return TRUE; + LD A,1 +; 280 } +L_146: + LD SP,IX + POP IX + RET + + +;**************************** _scalar *************************** +;Name Addr/Register Size Type +;_argp STATIC 3 variable +;_strtol IMPORT ----- function +;_strtoul IMPORT ----- function +;_fields STATIC 1 variable +;_isxdigit IMPORT ----- function +;_isdigit IMPORT ----- function +;_isspace IMPORT ----- function +;_fmt_str STATIC 19 variable +;buffer IX-136 127 variable +;val IX-9 4 variable +;bp IX-5 3 variable +;i IX-2 1 variable +;ch IX-1 1 variable +;radix IX+6 3 parameter + + +; Stack Frame Size: 148 (bytes) +; Spill Code: 0 (instruction) + + +; 281 +; 282 /****************************************/ +; 283 /* Handle set conversions +; 284 /****************************************/ +; 285 static unsigned char set(void) +; 286 { +_set: + LD HL,-12 + CALL __frameset +; 287 char *p2; +; 288 char neg,ch; +; 289 char *p = 0; + LD BC,0 + LD (IX+-4),BC +; 290 char width; +; 291 +; 292 /* Use (p == 0) to signal the case that we are skipping this input +; 293 string. */ +; 294 if (!(fmt_str.flags & FMT_FLAG_IGNORE)) + LD A,(_fmt_str+1) + AND A,16 + JR NZ,L_150 +; 295 p = va_arg(argp,char*); + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD BC,(HL) + LD (IX+-4),BC +L_150: +; 296 +; 297 if (neg = (*fmt_str.set_begin == '^')) + LD HL,(_fmt_str+7) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,94 + SBC HL,BC + JR NZ,L__81 + LD A,1 + JR L__82 +L__81: + XOR A,A +L__82: + LD (IX+-9),A + OR A,A + JR Z,L_151 +; 298 fmt_str.set_begin++; + LD BC,(_fmt_str+7) + INC BC + LD (_fmt_str+7),BC +L_151: +; 299 +; 300 width = fmt_str.field_width; + LD A,(_fmt_str+5) + LD (IX+-1),A +; 301 if (width == 0) + OR A,A + JR NZ,L_169 +; 302 width = 127; + LD (IX+-1),127 +; 303 +; 304 while (width--) + JR L_169 +L_170: +; 305 { +; 306 if ((ch = get()) == EOF) + CALL _get + LD (IX+-8),L + LD A,(IX+-8) + CP A,-1 + JR NZ,L_159 +; 307 return FALSE; + XOR A,A + JR L_177 +L_159: +; 308 +; 309 /* Look for a match in the set. */ +; 310 for(p2 = fmt_str.set_begin; p2 < fmt_str.set_end; ++p2) + LD BC,(_fmt_str+7) + LD (IX+-7),BC + JR L_158 +L_156: +; 311 if (*p2 == ch) + LD HL,(IX+-7) + LD A,(HL) + CP A,(IX+-8) + JR Z,L_165 + LD BC,(IX+-7) + INC BC + LD (IX+-7),BC +; 312 break; /* Matched one in the set. */ +L_158: + LD BC,(_fmt_str+10) + LD HL,(IX+-7) + OR A,A + SBC HL,BC + JR C,L_156 +L_165: +; 313 +; 314 if (p2 < fmt_str.set_end && *p2 == ch) + LD BC,(_fmt_str+10) + LD HL,(IX+-7) + OR A,A + SBC HL,BC + JR NC,L_164 + LD HL,(IX+-7) + LD A,(HL) + CP A,(IX+-8) + JR NZ,L_164 +; 315 { +; 316 /* We stop scanning if we match a character in the negative set. */ +; 317 if (neg) + LD A,(IX+-9) + OR A,A + JR NZ,L_173 + JR L_168 +; 318 break; +; 319 } +; 320 else +L_164: +; 321 { +; 322 /* Likewise, we stop scanning if we fail to match a character in +; 323 the positive set. */ +; 324 if (!neg) + LD A,(IX+-9) + OR A,A + JR Z,L_173 +; 325 break; +; 326 } +L_168: +; 327 +; 328 /* Store the valid character. */ +; 329 if (p) + LD HL,(IX+-4) + CALL __icmpzero + JR Z,L_169 +; 330 *(p++) = ch; + LD BC,(IX+-4) + LD (IX+-12),BC + LD HL,BC + LD A,(IX+-8) + LD (HL),A + LD BC,(IX+-4) + INC BC + LD (IX+-4),BC +; 331 } +L_169: + LD A,(IX+-1) + DEC (IX+-1) + OR A,A + JR NZ,L_170 +L_173: +; 332 +; 333 if (width > 0) + XOR A,A + CP A,(IX+-1) + JP P,L_175 +; 334 unget(); + CALL _unget +L_175: +; 335 +; 336 if (p) + LD HL,(IX+-4) + CALL __icmpzero + JR Z,L_176 +; 337 *p = '\0'; + LD HL,(IX+-4) + LD (HL),0 +L_176: +; 338 +; 339 return TRUE; + LD A,1 +; 340 } +L_177: + LD SP,IX + POP IX + RET + + +;**************************** _set *************************** +;Name Addr/Register Size Type +;_argp STATIC 3 variable +;_fmt_str STATIC 19 variable +;neg IX-9 1 variable +;ch IX-8 1 variable +;p2 IX-7 3 variable +;p IX-4 3 variable +;width IX-1 1 variable + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + +; 341 +; 342 /************************************************* +; 343 * +; 344 * _u_scan - scan formated string from a file or string +; 345 * +; 346 * Inputs: +; 347 * src - NULL = input from keyboard, else input from string +; 348 * fmt - format string +; 349 * argp - argument list pointer +; 350 * +; 351 * Returns: +; 352 * Number of characters transmitted, or +; 353 * -1 if an error occured. +; 354 * +; 355 *************************************************/ +; 356 int _u_scan(char *src,char *fmt,va_list ap) +; 357 { +__u_scan: + LD HL,-7 + CALL __frameset +; 358 int i; +; 359 int ch; +; 360 unsigned char ok=TRUE; + LD (IX+-1),1 +; 361 +; 362 argp = ap; + LD BC,(IX+12) + LD (_argp),BC +; 363 fields = 0; + XOR A,A + LD (_fields),A +; 364 len = 0; + LD BC,0 + LD (_len),BC +; 365 prev_ch = 0; + LD (_prev_ch),BC +; 366 isunget = 0; + XOR A,A + LD (_isunget),A +; 367 bptr = NULL; + LD (_bptr),BC +; 368 +; 369 if (src) + LD HL,(IX+6) + CALL __icmpzero + JR Z,L_215 +; 370 bptr = src; + LD BC,(IX+6) + LD (_bptr),BC +; 371 +; 372 while ( ok && prev_ch!=EOF && *fmt) { + JR L_215 +L_216: +; 373 fmt = _u_sscan(fmt,&fmt_str); + LD BC,_fmt_str + PUSH BC + LD BC,(IX+9) + PUSH BC + CALL __u_sscan + POP BC + POP BC + LD (IX+9),HL +; 374 if (fmt_str.status == FMT_ERR) + LD A,(_fmt_str) + CP A,1 + JR NZ,L_214 +; 375 return(fields); + LD A,(_fields) + UEXT HL + LD L,A + JR L_222 +; 376 else if (fmt_str.status == FMT_PASS_THRU) { +L_214: + LD A,(_fmt_str) + CP A,2 + JR NZ,L_212 +; 377 if (isspace(fmt_str.chr)) + LD A,(_fmt_str+3) + LD B,A + SEXT HL + LD L,B + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR Z,L_187 +; 378 { +; 379 do ch=get(); +L_181: + CALL _get + LD (IX+-4),HL +; 380 while(isspace(ch)); + LD BC,HL + PUSH BC + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_181 +; 381 unget(); + CALL _unget +; 382 } else + JR L_215 +L_187: +; 383 { +; 384 ch = get(); + CALL _get + LD (IX+-4),HL +; 385 if (ch && ch != fmt_str.chr) + CALL __icmpzero + JR Z,L_215 + LD A,(_fmt_str+3) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,(IX+-4) + SBC HL,BC + JR NZ,L_220 + JR L_215 +; 386 break; +; 387 } +; 388 } +; 389 else if (fmt_str.flags & FMT_FLAG_SET) { +L_212: + LD A,(_fmt_str+1) + AND A,128 + JR Z,L_210 +; 390 ok = set(); + CALL _set + LD (IX+-1),A +; 391 } +; 392 else { + JR L_215 +L_210: +; 393 switch (fmt_str.type) { + LD A,(_fmt_str+4) + LD B,A + SEXT HL + LD L,B + CALL __case8 +L__105: + DW 18 + DB 65 + DW24 L_195 + + DB 69 + DW24 L_196 + + DB 70 + DW24 L_197 + + DB 71 + DW24 L_198 + + DB 88 + DW24 L_193 + + DB 97 + DW24 L_199 + + DB 99 + DW24 L_203 + + DB 100 + DW24 L_188 + + DB 101 + DW24 L_200 + + DB 102 + DW24 L_201 + + DB 103 + DW24 L_202 + + DB 105 + DW24 L_189 + + DB 110 + DW24 L_206 + + DB 111 + DW24 L_194 + + DB 112 + DW24 L_205 + + DB 115 + DW24 L_204 + + DB 117 + DW24 L_190 + + DB 120 + DW24 L_192 + + DW24 L_215 + +; 394 register int radix; +; 395 case 'd': +L_188: +; 396 case 'i': +L_189: +; 397 case 'u': +L_190: +; 398 radix=10; + LD BC,10 + LD (IX+-7),BC +; 399 goto _sclr; + JR L_191 +; 400 case 'x': +L_192: +; 401 case 'X': +L_193: +; 402 radix=16; + LD BC,16 + LD (IX+-7),BC +; 403 goto _sclr; + JR L_191 +; 404 case 'o': +L_194: +; 405 radix=8; + LD BC,8 + LD (IX+-7),BC +L_191: +; 406 _sclr: +; 407 ok = scalar(radix); + LD BC,(IX+-7) + PUSH BC + CALL _scalar + POP BC + LD (IX+-1),A +; 408 +; 409 break; + JR L_215 +; 410 case 'A': +L_195: +; 411 case 'E': +L_196: +; 412 case 'F': +L_197: +; 413 case 'G': +L_198: +; 414 case 'a': +L_199: +; 415 case 'e': +L_200: +; 416 case 'f': +L_201: +; 417 case 'g': +L_202: +; 418 ok = fpoint(); + CALL _fpoint + LD (IX+-1),A +; 419 break; + JR L_215 +; 420 case 'c': +L_203: +; 421 ok = character(); + CALL _character + LD (IX+-1),A +; 422 break; + JR L_215 +; 423 case 's': +L_204: +; 424 ok = string(); + CALL _string + LD (IX+-1),A +; 425 break; + JR L_215 +; 426 case 'p': +L_205: +; 427 ok = pointer(); + CALL _pointer + LD (IX+-1),A +; 428 break; + JR L_215 +; 429 case 'n': +L_206: +; 430 if (!(fmt_str.flags & FMT_FLAG_IGNORE)) { + LD A,(_fmt_str+1) + AND A,16 + JR NZ,L_215 +; 431 *(va_arg(argp,int*)) = len; + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD HL,(HL) + LD BC,(_len) + LD (HL),BC +; 432 ++fields; + LD A,(_fields) + INC A + LD (_fields),A +; 433 } +; 434 break; +; 435 } +; 436 } +; 437 } +L_215: + LD A,(IX+-1) + OR A,A + JR Z,L_220 + LD BC,16777215 + LD HL,(_prev_ch) + OR A,A + SBC HL,BC + JR Z,L_220 + LD HL,(IX+9) + LD A,(HL) + OR A,A + JR NZ,L_216 +L_220: +; 438 // ISO Spec: Return EOF if an input error occurs before any conversion. +; 439 // Otherwise return the number of input items assigned. +; 440 // A sucessfull passthrough counts as a conversion, so we look at len, +; 441 // which will be 1 for a unsucessfull call to get on the first try. +; 442 if (prev_ch == EOF && len<=1) + LD BC,16777215 + LD HL,(_prev_ch) + OR A,A + SBC HL,BC + JR NZ,L_221 + LD BC,(_len) + LD HL,1 + OR A,A + SBC HL,BC + JP M,L_221 +; 443 return EOF; + LD HL,16777215 + JR L_222 +L_221: +; 444 return fields; + LD A,(_fields) + UEXT HL + LD L,A +; 445 } +L_222: + LD SP,IX + POP IX + RET + + +;**************************** __u_scan *************************** +;Name Addr/Register Size Type +;_isspace IMPORT ----- function +;_fmt_str STATIC 19 variable +;__u_sscan IMPORT ----- function +;_bptr STATIC 3 variable +;_isunget STATIC 1 variable +;_prev_ch STATIC 3 variable +;_len STATIC 3 variable +;_fields STATIC 1 variable +;_argp STATIC 3 variable +;radix IX-7 3 variable +;ch IX-4 3 variable +;ok IX-1 1 variable +;ap IX+12 3 parameter +;fmt IX+9 3 parameter +;src IX+6 3 parameter + + +; Stack Frame Size: 22 (bytes) +; Spill Code: 0 (instruction) + + + XREF _getchar:ROM + XREF _isxdigit:ROM + XREF _isspace:ROM + XREF _isdigit:ROM + XREF __u_sscan:ROM + XREF _strtoul:ROM + XREF _strtol:ROM + XREF _strtod:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XREF __case8:ROM + XDEF __u_scan + END diff --git a/frontends/calculator/CEdev/lib/shared/usscan.src b/frontends/calculator/CEdev/lib/shared/usscan.src new file mode 100644 index 0000000..ab1a994 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/usscan.src @@ -0,0 +1,630 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\USSCAN.C" + .assume ADL=1 + SEGMENT DATA +_sscan_fsa: + DB 2 + DB 0 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 8 + DB 254 + DB 3 + DB 5 + DB 4 + DB 9 + DB 6 + DB 254 + DB 254 + DB 254 + DB 254 + DB 254 + DB 5 + DB 4 + DB 9 + DB 6 + DB 254 + DB 254 + DB 254 + DB 254 + DB 254 + DB 5 + DB 4 + DB 9 + DB 6 + DB 254 + DB 254 + DB 254 + DB 254 + DB 254 + DB 254 + DB 254 + DB 9 + DB 6 + DB 254 + DB 254 + DB 6 + DB 6 + DB 6 + DB 6 + DB 6 + DB 6 + DB 6 + DB 7 + DB 6 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 +; 10 /* actions */ +; 11 +; 12 #define ACC -1 +; 13 #define ERR -2 +; 14 +; 15 #define CR 13 +; 16 #define LF 10 +; 17 +; 18 /* +-{0..9} +; 19 {sp,tab,nl}{h,l,L}| +-{d,i,o,u,x,e,f,g,s,c,p,n} +; 20 | | | | {others} +; 21 % | * | | | [ ] | +; 22 +-----------------------------------+ */ +; 23 static char sscan_fsa[10][9] = { + SEGMENT CODE +; 24 /* 0 */ { 2, 0, 1, 1, 1, 1, 1, 1, 1}, +; 25 /* 1 */ {ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC}, +; 26 /* 2 */ { 8,ERR, 3, 5, 4, 9, 6,ERR,ERR}, +; 27 /* 3 */ {ERR,ERR,ERR, 5, 4, 9, 6,ERR,ERR}, +; 28 /* 4 */ {ERR,ERR,ERR, 5, 4, 9, 6,ERR,ERR}, +; 29 /* 5 */ {ERR,ERR,ERR,ERR,ERR, 9, 6,ERR,ERR}, +; 30 /* 6 */ { 6, 6, 6, 6, 6, 6, 6, 7, 6}, +; 31 /* 7 */ {ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC}, +; 32 /* 8 */ {ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC}, +; 33 /* 9 */ {ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC}, +; 34 }; +; 35 +; 36 /************************************************* +; 37 * +; 38 * _u_sscan - scan a scanf format string +; 39 * +; 40 * Inputs: +; 41 * fmt - pointer to format string +; 42 * str - pointer to fmt_type structure +; 43 * where the results are put +; 44 * +; 45 * Returns: +; 46 * new pointer to format string +; 47 * +; 48 *************************************************/ +; 49 char *_u_sscan(char *fmt, struct fmt_type *str) { +__u_sscan: + LD HL,-7 + CALL __frameset +; 50 char pstate; +; 51 char state = 0; + LD (IX+-2),0 +; 52 unsigned char class; +; 53 char ch; +; 54 +; 55 str->flags = 0; + LD IY,(IX+9) + LD (IY+1),0 +; 56 str->field_width = 0; + LD (IY+5),0 +; 57 str->precision = 0; + LD (IY+6),0 +; 58 str->size = 0; + LD (IY+2),0 +; 59 str->type = '\0'; + LD (IY+4),0 +; 60 +; 61 for (;;) { +L_55: +; 62 ch = *(fmt++); + LD BC,(IX+6) + LD (IX+-7),BC + LD HL,BC + LD A,(HL) + LD (IX+-3),A + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 63 switch(ch) { + LD A,(IX+-3) + SEXT HL + LD L,(IX+-3) + CALL __case8 +L__0: + DW 35 + DB 37 + DW24 L_1 + + DB 42 + DW24 L_2 + + DB 48 + DW24 L_6 + + DB 49 + DW24 L_7 + + DB 50 + DW24 L_8 + + DB 51 + DW24 L_9 + + DB 52 + DW24 L_10 + + DB 53 + DW24 L_11 + + DB 54 + DW24 L_12 + + DB 55 + DW24 L_13 + + DB 56 + DW24 L_14 + + DB 57 + DW24 L_15 + + DB 65 + DW24 L_16 + + DB 69 + DW24 L_17 + + DB 70 + DW24 L_18 + + DB 71 + DW24 L_19 + + DB 76 + DW24 L_5 + + DB 88 + DW24 L_20 + + DB 91 + DW24 L_34 + + DB 93 + DW24 L_35 + + DB 97 + DW24 L_21 + + DB 99 + DW24 L_22 + + DB 100 + DW24 L_23 + + DB 101 + DW24 L_24 + + DB 102 + DW24 L_25 + + DB 103 + DW24 L_26 + + DB 104 + DW24 L_3 + + DB 105 + DW24 L_27 + + DB 108 + DW24 L_4 + + DB 110 + DW24 L_28 + + DB 111 + DW24 L_29 + + DB 112 + DW24 L_30 + + DB 115 + DW24 L_31 + + DB 117 + DW24 L_32 + + DB 120 + DW24 L_33 + + DW24 L_36 + +; 64 case '%': +L_1: +; 65 class = 0; + LD (IX+-1),0 +; 66 break; + JR L_37 +; 67 /***** Treat these as pass through: +; 68 case ' ': +; 69 case '\t': +; 70 case '\n': +; 71 class = 1; +; 72 break; +; 73 ****/ +; 74 case '*': +L_2: +; 75 class = 2; + LD (IX+-1),2 +; 76 break; + JR L_37 +; 77 case 'h': +L_3: +; 78 case 'l': +L_4: +; 79 case 'L': +L_5: +; 80 class = 3; + LD (IX+-1),3 +; 81 break; + JR L_37 +; 82 case '0': +L_6: +; 83 case '1': +L_7: +; 84 case '2': +L_8: +; 85 case '3': +L_9: +; 86 case '4': +L_10: +; 87 case '5': +L_11: +; 88 case '6': +L_12: +; 89 case '7': +L_13: +; 90 case '8': +L_14: +; 91 case '9': +L_15: +; 92 class = 4; + LD (IX+-1),4 +; 93 break; + JR L_37 +; 94 case 'A': +L_16: +; 95 case 'E': +L_17: +; 96 case 'F': +L_18: +; 97 case 'G': +L_19: +; 98 case 'X': +L_20: +; 99 case 'a': +L_21: +; 100 case 'c': +L_22: +; 101 case 'd': +L_23: +; 102 case 'e': +L_24: +; 103 case 'f': +L_25: +; 104 case 'g': +L_26: +; 105 case 'i': +L_27: +; 106 case 'n': +L_28: +; 107 case 'o': +L_29: +; 108 case 'p': +L_30: +; 109 case 's': +L_31: +; 110 case 'u': +L_32: +; 111 case 'x': +L_33: +; 112 class = 5; + LD (IX+-1),5 +; 113 break; + JR L_37 +; 114 case '[': +L_34: +; 115 class = 6; + LD (IX+-1),6 +; 116 break; + JR L_37 +; 117 case ']': +L_35: +; 118 class = 7; + LD (IX+-1),7 +; 119 break; + JR L_37 +; 120 default: +L_36: +; 121 class = 8; + LD (IX+-1),8 +; 122 } +L_37: +; 123 +; 124 pstate = state; + LD A,(IX+-2) + LD (IX+-4),A +; 125 state = sscan_fsa[state][class]; + LD A,(IX+-2) + SEXT HL + LD L,(IX+-2) + LD A,9 + CALL __imul_b + LD A,(IX+-1) + LD BC,_sscan_fsa + ADD HL,BC + LD BC,HL + UEXT HL + LD L,A + ADD HL,BC + LD A,(HL) + LD (IX+-2),A +; 126 +; 127 switch (state) { + SEXT HL + LD L,(IX+-2) + CALL __case24 +L__1: + DW 10 + DW 1 + DB 0 + DW24 L_40 + + DW 3 + DB 0 + DW24 L_42 + + DW 4 + DB 0 + DW24 L_43 + + DW 5 + DB 0 + DW24 L_44 + + DW 6 + DB 0 + DW24 L_45 + + DW 7 + DB 0 + DW24 L_53 + + DW 8 + DB 0 + DW24 L_41 + + DW 9 + DB 0 + DW24 L_54 + + DW 65534 + DB 255 + DW24 L_39 + + DW 65535 + DB 255 + DW24 L_38 + + DW24 L_55 + +; 128 case ACC: +L_38: +; 129 str->status = FMT_OK; + LD IY,(IX+9) + LD (IY+0),0 +; 130 return(fmt-1); + LD IY,(IX+6) + LEA HL,IY+-1 + JR L_57 +; 131 case ERR: +L_39: +; 132 str->status = FMT_ERR; + LD IY,(IX+9) + LD (IY+0),1 +; 133 return(fmt-1); + LD IY,(IX+6) + LEA HL,IY+-1 + JR L_57 +; 134 case 1: +L_40: +; 135 case 8: +L_41: +; 136 str->status = FMT_PASS_THRU; + LD IY,(IX+9) + LD (IY+0),2 +; 137 str->chr = ch; + LD A,(IX+-3) + LD (IY+3),A +; 138 return(fmt); + LD HL,(IX+6) + JR L_57 +; 139 case 3: +L_42: +; 140 str->flags |= FMT_FLAG_IGNORE; + LD IY,(IX+9) + LD A,(IY+1) + SET 4,A + LD (IY+1),A +; 141 break; + JR L_55 +; 142 case 4: +L_43: +; 143 str->field_width = str->field_width * 10 + (ch - '0'); + LD IY,(IX+9) + LD B,(IY+5) + LD C,10 + MLT BC + LD A,(IX+-3) + ADD A,-48 + LD B,A + LD A,C + ADD A,B + LD (IY+5),A +; 144 break; + JR L_55 +; 145 case 5: +L_44: +; 146 str->size = ch; + LD A,(IX+-3) + LD IY,(IX+9) + LD (IY+2),A +; 147 break; + JR L_55 +; 148 case 6: +L_45: +; 149 if (pstate != state) { + LD A,(IX+-4) + CP A,(IX+-2) + JR Z,L_55 +; 150 str->flags |= FMT_FLAG_SET; + LD IY,(IX+9) + LD A,(IY+1) + SET 7,A + LD (IY+1),A +; 151 str->set_begin = fmt; + LD BC,(IX+6) + LD (IY+7),BC +; 152 // Check for sets that start with [] or [^] +; 153 if (*fmt == '^') + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,94 + SBC HL,BC + JR NZ,L_50 +; 154 fmt++; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_50: +; 155 if (*fmt == ']') + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,93 + SBC HL,BC + JR NZ,L_55 +; 156 fmt++; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 157 +; 158 } +; 159 break; + JR L_55 +; 160 case 7: +L_53: +; 161 str->set_end = fmt-1; + LD IY,(IX+6) + LEA BC,IY+-1 + LD IY,(IX+9) + LD (IY+10),BC +; 162 break; + JR L_55 +; 163 case 9: +L_54: +; 164 str->type = ch; + LD A,(IX+-3) + LD IY,(IX+9) + LD (IY+4),A +; 165 break; + JR L_55 +; 166 } +; 167 } +; 168 } +L_57: + LD SP,IX + POP IX + RET + + +;**************************** __u_sscan *************************** +;Name Addr/Register Size Type +;_sscan_fsa STATIC 90 variable +;pstate IX-4 1 variable +;ch IX-3 1 variable +;state IX-2 1 variable +;class IX-1 1 variable +;str IX+9 3 parameter +;fmt IX+6 3 parameter + + +; Stack Frame Size: 19 (bytes) +; Spill Code: 0 (instruction) + + + XREF __frameset:ROM + XREF __case24:ROM + XREF __case8:ROM + XREF __imul_b:ROM + XDEF __u_sscan + END diff --git a/frontends/calculator/CEdev/lib/shared/ustoa.src b/frontends/calculator/CEdev/lib/shared/ustoa.src new file mode 100644 index 0000000..792c27a --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ustoa.src @@ -0,0 +1,71 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\USTOA.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 #ifndef _PTR_ +; 10 #define _PTR_ * +; 11 #endif +; 12 +; 13 /************************************************* +; 14 * +; 15 * _u_stoa - convert a short to a number of base rad +; 16 * +; 17 * Inputs: +; 18 * int - int to be converted +; 19 * str - target char array +; 20 * rad - radix +; 21 * fmt - format structure with conversion info +; 22 * +; 23 * Returns: +; 24 * next address past the end of the string +; 25 * +; 26 *************************************************/ +; 27 #ifndef _MULTI_THREAD +; 28 void _u_stoa(short n) +; 29 { +__u_stoa: + CALL __frameset0 +; 30 _u_ltoa((long)n); + LD A,(IX+7) + RLA + SBC A,A + LD BC,(IX+6) + CALL __stoi + LD C,A + LD B,0 + PUSH BC + PUSH HL + CALL __u_ltoa + POP BC + POP BC +; 31 } + LD SP,IX + POP IX + RET + + +;**************************** __u_stoa *************************** +;Name Addr/Register Size Type +;__u_ltoa IMPORT ----- function +;n IX+6 2 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF __u_ltoa:ROM + XREF __stoi:ROM + XREF __frameset0:ROM + XDEF __u_stoa + END diff --git a/frontends/calculator/CEdev/lib/shared/uuitoa.src b/frontends/calculator/CEdev/lib/shared/uuitoa.src new file mode 100644 index 0000000..79a7db4 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/uuitoa.src @@ -0,0 +1,64 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UUITOA.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 /************************************************* +; 10 * +; 11 * _u_uitoa - convert an unsigned int to a number of base rad +; 12 * +; 13 * Inputs: +; 14 * int - int to be converted +; 15 * str - target char array +; 16 * rad - radix +; 17 * fmt - format structure with conversion info +; 18 * +; 19 * Returns: +; 20 * next address past the end of the string +; 21 * +; 22 *************************************************/ +; 23 #ifndef _MULTI_THREAD +; 24 void _u_uitoa(unsigned int n) +; 25 { +__u_uitoa: + CALL __frameset0 +; 26 _u_ultoa((unsigned long)n); + LD BC,(IX+6) + LD DE,BC + XOR A,A + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL __u_ultoa + POP BC + POP BC +; 27 } + LD SP,IX + POP IX + RET + + +;**************************** __u_uitoa *************************** +;Name Addr/Register Size Type +;__u_ultoa IMPORT ----- function +;n IX+6 3 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF __u_ultoa:ROM + XREF __frameset0:ROM + XDEF __u_uitoa + END diff --git a/frontends/calculator/CEdev/lib/shared/uultoa.src b/frontends/calculator/CEdev/lib/shared/uultoa.src new file mode 100644 index 0000000..e86e130 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/uultoa.src @@ -0,0 +1,326 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UULTOA.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 #ifndef _PTR_ +; 10 #define _PTR_ * +; 11 #endif +; 12 +; 13 /************************************************* +; 14 * +; 15 * _u_ultoa - convert an unsigned long to a number +; 16 * of base rad +; 17 * +; 18 * Inputs: +; 19 * ulg - unsigned long to be converted +; 20 * str - target char array +; 21 * rad - radix +; 22 * fmt - format structure with conversion info +; 23 * +; 24 * Returns: +; 25 * next address past the end of the string +; 26 * +; 27 *************************************************/ +; 28 +; 29 void __print_sendstring(char *sp); +; 30 +; 31 #ifndef _MULTI_THREAD +; 32 void _u_ultoa(unsigned long n) +; 33 #else +; 34 void _mt_ultoa(unsigned long n,char* __print_buff,struct fmt_type* print_fmt) +; 35 #define __print_fmt (*print_fmt) +; 36 #endif +; 37 { +__u_ultoa: + LD HL,-22 + CALL __frameset +; 38 unsigned char a; +; 39 unsigned char t; +; 40 char _PTR_ s = __print_buff; + LD BC,___print_buff + LD (IX+-3),BC +; 41 unsigned char nz = (n != 0); + LD HL,(IX+6) + LD E,(IX+9) + CALL __lcmpzero + JR Z,L__1 + LD A,1 + JR L__2 +L__1: + XOR A,A +L__2: + LD (IX+-7),A +; 42 char rad; +; 43 +; 44 a = 'A'; + LD (IX+-5),65 +; 45 switch (__print_fmt.type) + LD A,(___print_fmt+4) + LD B,A + SEXT HL + LD L,B + CALL __case8 +L__3: + DW 7 + DB 88 + DW24 L_8 + + DB 100 + DW24 L_1 + + DB 105 + DW24 L_2 + + DB 111 + DW24 L_4 + + DB 112 + DW24 L_6 + + DB 117 + DW24 L_3 + + DB 120 + DW24 L_5 + + DW24 L_0 + +; 46 { +; 47 default: +L_0: +; 48 case 'd': +L_1: +; 49 case 'i': +L_2: +; 50 case 'u': +L_3: +; 51 rad = 10; + LD (IX+-4),10 +; 52 break; + JR L_14 +; 53 case 'o': +L_4: +; 54 rad = 8; + LD (IX+-4),8 +; 55 break; + JR L_14 +; 56 case 'x': +L_5: +; 57 case 'p': +L_6: +; 58 if ( !(__print_fmt.flags&FMT_FLAG_UPPERCASE)) + LD A,(___print_fmt+1) + AND A,32 + JR NZ,L_8 +; 59 a = 'a'; + LD (IX+-5),97 +; 60 // Fall into next case +; 61 case 'X': +L_8: +; 62 rad = 16; + LD (IX+-4),16 +; 63 break; +; 64 } +; 65 +; 66 do +L_14: +; 67 { /* generate digits in reverse order */ +; 68 t = n % (unsigned char)rad; + UEXT HL + LD L,(IX+-4) + LD BC,HL + LD A,H + LD HL,(IX+6) + LD E,(IX+9) + CALL __lremu + LD BC,HL + LD (IX+-6),C +; 69 if (t > 9) + LD A,9 + CP A,(IX+-6) + JR NC,L_13 +; 70 *(s++) = (t - (unsigned char)10) + a; + LD BC,(IX+-3) + LD (IX+-10),BC + LD A,(IX+-6) + ADD A,-10 + ADD A,(IX+-5) + LD HL,BC + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 71 else + JR L_15 +L_13: +; 72 *(s++) = t + (unsigned char)'0'; + LD BC,(IX+-3) + LD (IX+-13),BC + LD A,(IX+-6) + ADD A,48 + LD HL,BC + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 73 } while (n /= rad); +L_15: + LD A,(IX+-4) + SEXT HL + LD L,(IX+-4) + LD BC,HL + LD A,H + LD HL,(IX+6) + LD E,(IX+9) + CALL __ldivu + LD (IX+6),HL + LD (IX+9),E + LD HL,(IX+6) + LD E,(IX+9) + CALL __lcmpzero + JR NZ,L_14 +; 74 +; 75 while (s - __print_buff < (unsigned char) __print_fmt.precision) { + JR L_18 +L_19: +; 76 *(s++) = '0'; + LD BC,(IX+-3) + LD (IX+-16),BC + LD HL,BC + LD (HL),48 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 77 } +L_18: + LD A,(___print_fmt+6) + UEXT HL + LD L,A + LD DE,HL + LD HL,(IX+-3) + OR A,A + LD BC,___print_buff + SBC HL,BC + OR A,A + SBC HL,DE + JP M,L_19 +; 78 if (__print_fmt.flags & FMT_FLAG_POUND) { + LD A,(___print_fmt+1) + AND A,8 + JR Z,L_31 +; 79 if (nz) { + LD A,(IX+-7) + OR A,A + JR Z,L_31 +; 80 if (rad == (char)16) { + LD A,(IX+-4) + CP A,16 + JR NZ,L_26 +; 81 *(s++) = ('X'-'A')+a; + LD BC,(IX+-3) + LD (IX+-19),BC + LD A,(IX+-5) + ADD A,23 + LD HL,BC + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 82 *(s++) = '0'; + LD HL,BC + LD (HL),48 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 83 } +; 84 else if (rad == (char)8) { + JR L_31 +L_26: + LD A,(IX+-4) + CP A,8 + JR NZ,L_31 +; 85 *(s++) = '0'; + LD BC,(IX+-3) + LD (IX+-22),BC + LD HL,BC + LD (HL),48 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 86 } +; 87 } +; 88 } +L_31: +; 89 +; 90 // ISO Spec: If a precision is specified the zero flag is ignored +; 91 if (__print_fmt.precision ) + LD A,(___print_fmt+6) + OR A,A + JR Z,L_32 +; 92 __print_fmt.flags &= ~FMT_FLAG_PAD_ZERO; + LD A,(___print_fmt+1) + RES 6,A + LD (___print_fmt+1),A +L_32: +; 93 +; 94 *s = '\0'; + LD HL,(IX+-3) +; 95 +; 96 _u_reverse(__print_buff); + LD BC,___print_buff + PUSH BC + LD (HL),0 + CALL __u_reverse + POP BC +; 97 #ifndef _MULTI_THREAD +; 98 __print_sendstring(__print_buff); + LD BC,___print_buff + PUSH BC + CALL ___print_sendstring + POP BC +; 99 #endif +; 100 } + LD SP,IX + POP IX + RET + + +;**************************** __u_ultoa *************************** +;Name Addr/Register Size Type +;___print_sendstring IMPORT ----- function +;__u_reverse IMPORT ----- function +;___print_fmt IMPORT 19 variable +;___print_buff IMPORT unknown variable +;nz IX-7 1 variable +;t IX-6 1 variable +;a IX-5 1 variable +;rad IX-4 1 variable +;s IX-3 3 variable +;n IX+6 4 parameter + + +; Stack Frame Size: 34 (bytes) +; Spill Code: 0 (instruction) + + + XREF ___print_sendstring:ROM + XREF __u_reverse:ROM + XREF ___print_buff:ROM + XREF ___print_fmt:ROM + XREF __ldivu:ROM + XREF __lremu:ROM + XREF __frameset:ROM + XREF __lcmpzero:ROM + XREF __case8:ROM + XDEF __u_ultoa + END diff --git a/frontends/calculator/CEdev/lib/shared/uustoa.src b/frontends/calculator/CEdev/lib/shared/uustoa.src new file mode 100644 index 0000000..18041e9 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/uustoa.src @@ -0,0 +1,64 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UUSTOA.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 /************************************************* +; 10 * +; 11 * _u_ustoa - convert an unsigned short to a number of base rad +; 12 * +; 13 * Inputs: +; 14 * int - int to be converted +; 15 * str - target char array +; 16 * rad - radix +; 17 * fmt - format structure with conversion info +; 18 * +; 19 * Returns: +; 20 * next address past the end of the string +; 21 * +; 22 *************************************************/ +; 23 #ifndef _MULTI_THREAD +; 24 void _u_ustoa(unsigned short n) +; 25 { +__u_ustoa: + CALL __frameset0 +; 26 _u_ultoa((unsigned long)n); + LD BC,(IX+6) + CALL __stoiu + LD C,0 + LD B,0 + PUSH BC + PUSH HL + CALL __u_ultoa + POP BC + POP BC +; 27 } + LD SP,IX + POP IX + RET + + +;**************************** __u_ustoa *************************** +;Name Addr/Register Size Type +;__u_ultoa IMPORT ----- function +;n IX+6 2 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF __u_ultoa:ROM + XREF __stoiu:ROM + XREF __frameset0:ROM + XDEF __u_ustoa + END diff --git a/frontends/calculator/CEdev/lib/shared/vsprintf.src b/frontends/calculator/CEdev/lib/shared/vsprintf.src new file mode 100644 index 0000000..d940239 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/vsprintf.src @@ -0,0 +1,64 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\VSPRINTF.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 #include +; 6 #include +; 7 #include +; 8 +; 9 /************************************************* +; 10 * +; 11 * vsprintf - print to a string (variable args) +; 12 * +; 13 * Inputs: +; 14 * string - pointer to string to write to +; 15 * fmt - format string +; 16 * args - argument list +; 17 * +; 18 * Returns: +; 19 * Number of characters transmitted, or +; 20 * -1 if an error occured. +; 21 * +; 22 *************************************************/ +; 23 int vsprintf(char *string,char *fmt,va_list args) { +_vsprintf: + CALL __frameset0 +; 24 return(_u_print(string, fmt, args)); + LD BC,(IX+12) + PUSH BC + LD BC,(IX+9) + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL __u_print + POP BC + POP BC + POP BC +; 25 } + LD SP,IX + POP IX + RET + + +;**************************** _vsprintf *************************** +;Name Addr/Register Size Type +;__u_print IMPORT ----- function +;args IX+12 3 parameter +;fmt IX+9 3 parameter +;string IX+6 3 parameter + + +; Stack Frame Size: 15 (bytes) +; Spill Code: 0 (instruction) + + + XREF __u_print:ROM + XREF __frameset0:ROM + XDEF _vsprintf + END diff --git a/frontends/calculator/CEdev/lib/shared/zx7_Decompress.src b/frontends/calculator/CEdev/lib/shared/zx7_Decompress.src new file mode 100644 index 0000000..e45c146 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/zx7_Decompress.src @@ -0,0 +1,117 @@ +; --- +; void zx7_Decompress(void *dest, void *src) +; --- +; Dec 2012 by Einar Saukas & Urusergi +; "Turbo" version (89 bytes, 25% faster) +; --- + + .def _zx7_Decompress + .assume adl=1 + +; enter : hl = void *src +; de = void *dst +; +; exit : hl = & following uncompressed block +; +; uses : af, bc, de, hl + +_zx7_Decompress: + pop bc + pop de + pop hl + push hl + push de + push bc + + ld a, 128 + +zx7t_copy_byte_loop: + + ldi ; copy literal byte + +zx7t_main_loop: + + add a, a ; check next bit + call z, zx7t_load_bits ; no more bits left? + jr nc, zx7t_copy_byte_loop ; next bit indicates either literal or sequence + +; determine number of bits used for length (Elias gamma coding) + + push de + ld de, 0 + ld bc, 1 + +zx7t_len_size_loop: + + inc d + add a, a ; check next bit + call z, zx7t_load_bits ; no more bits left? + jr nc, zx7t_len_size_loop + jp zx7t_len_value_start + +; determine length + +zx7t_len_value_loop: + + add a, a ; check next bit + call z, zx7t_load_bits ; no more bits left? + rl c + rl b + jr c, zx7t_exit ; check end marker + +zx7t_len_value_start: + + dec d + jr nz, zx7t_len_value_loop + inc bc ; adjust length + +; determine offset + + ld e, (hl) ; load offset flag (1 bit) + offset value (7 bits) + inc hl + + sla e + inc e + + jr nc, zx7t_offset_end ; if offset flag is set, load 4 extra bits + add a, a ; check next bit + call z, zx7t_load_bits ; no more bits left? + rl d ; insert first bit into D + add a, a ; check next bit + call z, zx7t_load_bits ; no more bits left? + rl d ; insert second bit into D + add a, a ; check next bit + call z, zx7t_load_bits ; no more bits left? + rl d ; insert third bit into D + add a, a ; check next bit + call z, zx7t_load_bits ; no more bits left? + ccf + jr c, zx7t_offset_end + inc d ; equivalent to adding 128 to DE + +zx7t_offset_end: + + rr e ; insert inverted fourth bit into E + +; copy previous sequence + + ex (sp), hl ; store source, restore destination + push hl ; store destination + sbc hl, de ; HL = destination - offset - 1 + pop de ; DE = destination + ldir + +zx7t_exit: + + pop hl ; restore source address (compressed data) + jp nc, zx7t_main_loop + +zx7t_load_bits: + + ld a, (hl) ; load another group of 8 bits + inc hl + rla + ret + + + end diff --git a/frontends/calculator/CEdev/lib/static/acos.src b/frontends/calculator/CEdev/lib/static/acos.src new file mode 100644 index 0000000..7136ebe --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/acos.src @@ -0,0 +1,54 @@ + .ref __frameset0 + .ref __fcmp + .ref __fsub + .ref _asin + .ref _errno + .def _acos + .assume adl=1 + +; #define pio2 1.57079632679490 +; +; double acos(double arg) { +; if((arg > 1.) || (arg < -1.)) { +; errno = EDOM; +; return(0.); +; } +; return(pio2 - asin(arg)); +; } + +_acos: + pop hl + pop de + pop bc + push bc + push de + push hl + ld a,e + ld hl,8388608 + ld e,63 + push bc + push hl + call __fcmp + pop bc + pop hl + jp m,l_1 + ld e,a + ld a,191 + call __fcmp + jp p,l_2 + +l_1: ld hl,4 + ld (_errno),hl + ld l,h + ld e,h + ret + +l_2: push de + push hl + call _asin + ld bc,13176795 + ld a,63 + call __fsub + ld hl,bc + ld e,a + ret diff --git a/frontends/calculator/CEdev/lib/static/asin.src b/frontends/calculator/CEdev/lib/static/asin.src new file mode 100644 index 0000000..0ea0c03 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/asin.src @@ -0,0 +1,178 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\ASIN.C" + .assume ADL=1 + SEGMENT CODE +; 1 /* Copyright (c) 2000-2008 Zilog, Inc. */ +; 2 +; 3 /** +; 4 * asin(arg) return the arcsin of arg. +; 5 * arctan is called after appropriate range reduction. +; 6 */ +; 7 +; 8 #include +; 9 #include +; 10 +; 11 #define pio2 1.57079632679490 +; 12 +; 13 double asin(double arg) { +_asin: + LD HL,-8 + CALL __frameset +; 14 +; 15 double sign, temp; +; 16 +; 17 sign = 1.; + LD BC,8388608 + LD (IX+-8),BC + LD A,63 + LD (IX+-5),A +; 18 if(arg < 0) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_2 +; 19 arg = -arg; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+6),BC + LD (IX+9),A +; 20 sign = -1.; + LD BC,8388608 + LD (IX+-8),BC + LD A,191 + LD (IX+-5),A +; 21 } +L_2: +; 22 +; 23 if(arg > 1.) { + LD HL,8388608 + LD E,63 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_3 +; 24 errno = EDOM; + LD BC,4 + LD (_errno),BC + OR A,A +; 25 return(0.); + SBC HL,HL + LD E,0 + JR L_7 +; 26 } +L_3: +; 27 +; 28 temp = sqrt(1. - arg*arg); + LD HL,(IX+6) + LD E,(IX+9) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fmul + LD E,A + LD HL,BC + LD BC,8388608 + LD A,63 + CALL __fsub + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _sqrt + POP BC + POP BC + LD (IX+-4),HL + LD (IX+-1),E +; 29 if(arg > 0.7) { + LD E,63 + LD BC,(IX+6) + LD A,(IX+9) + LD HL,3355443 + CALL __fcmp + JP P,L_5 +; 30 temp = pio2 - atan(temp/arg); + LD HL,(IX+6) + LD E,(IX+9) + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _atan + POP BC + POP BC + LD BC,13176795 + LD A,63 + CALL __fsub + LD (IX+-4),BC + LD (IX+-1),A +; 31 } else { + JR L_6 +L_5: +; 32 temp = atan(arg/temp); + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _atan + POP BC + POP BC + LD (IX+-4),HL + LD (IX+-1),E +; 33 } +L_6: +; 34 +; 35 return(sign*temp); + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __fmul + LD E,A + LD HL,BC +; 36 } +L_7: + LD SP,IX + POP IX + RET + + +;**************************** _asin *************************** +;Name Addr/Register Size Type +;_atan IMPORT ----- function +;_sqrt IMPORT ----- function +;_errno IMPORT 3 variable +;sign IX-8 4 variable +;temp IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 20 (bytes) +; Spill Code: 0 (instruction) + + + XREF _sqrt:ROM + XREF _atan:ROM + XREF _errno:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __frameset:ROM + XDEF _asin + END diff --git a/frontends/calculator/CEdev/lib/static/atan.src b/frontends/calculator/CEdev/lib/static/atan.src new file mode 100644 index 0000000..e84ad82 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/atan.src @@ -0,0 +1,341 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\ATAN.C" + .assume ADL=1 + SEGMENT CODE +; 1 /* Copyright (c) 2000-2008 Zilog, Inc. */ +; 2 +; 3 /** +; 4 * floating-point arctangent +; 5 * +; 6 * atan returns the value of the arctangent of its +; 7 * argument in the range [-pi/2,pi/2]. +; 8 * +; 9 * atan2 returns the arctangent of arg1/arg2 +; 10 * in the range [-pi,pi]. +; 11 * +; 12 * there are no error returns. +; 13 * +; 14 * coefficients are #5077 from Hart & Cheney. (19.56D) +; 15 */ +; 16 +; 17 +; 18 #define sq2p1 2.41421356237309e0 +; 19 #define sq2m1 0.414213562373095e0 +; 20 #define pio2 1.57079632679489e0 +; 21 #define pio4 0.785398163397448e0 +; 22 #define p4 0.161536412982230e2 +; 23 #define p3 0.268425481955040e3 +; 24 #define p2 0.115302935154049e4 +; 25 #define p1 0.178040631643320e4 +; 26 #define p0 0.896785974036639e3 +; 27 #define q4 0.589569705084446e2 +; 28 #define q3 0.536265374031215e3 +; 29 #define q2 0.166678381488163e4 +; 30 #define q1 0.207933497444541e4 +; 31 #define q0 0.896785974036639e3 +; 32 +; 33 +; 34 /** +; 35 * atan makes its argument positive and +; 36 * calls the inner routine satan. +; 37 */ +; 38 +; 39 double atan(double arg) { +_atan: + CALL __frameset0 + OR A,A +; 40 double satan(double); +; 41 +; 42 if(arg>0) { + SBC HL,HL + LD E,0 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_1 +; 43 return(satan(arg)); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _satan + POP BC + POP BC + JR L_2 +; 44 } else { +L_1: +; 45 return(-satan(-arg)); + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _satan + POP BC + POP BC + LD BC,HL + LD A,E + CALL __fneg + LD E,A + LD HL,BC +; 46 } +; 47 } +L_2: + LD SP,IX + POP IX + RET + + +;**************************** _atan *************************** +;Name Addr/Register Size Type +;_satan IMPORT ----- function +;arg IX+6 4 parameter + + +; Stack Frame Size: 12 (bytes) +; Spill Code: 0 (instruction) + + +; 48 +; 49 +; 50 /** +; 51 * atan2 discovers what quadrant the angle +; 52 * is in and calls atan. +; 53 */ +; 54 +; 55 +; 56 /** +; 57 * satan reduces its argument (known to be positive) +; 58 * to the range [0,0.414...] and calls xatan. +; 59 */ +; 60 +; 61 double satan(double arg) { +_satan: + LD HL,-4 + CALL __frameset +; 62 double xatan(double); +; 63 +; 64 if(arg < sq2m1) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,13898701 + LD A,62 + CALL __fcmp + JP P,L_6 +; 65 return(xatan(arg)); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _xatan + POP BC + POP BC + JR L_7 +; 66 } else if(arg > sq2p1) { +L_6: + LD HL,1737338 + LD E,64 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_4 +; 67 return(pio2 - xatan(1.0/arg)); + LD HL,(IX+6) + LD E,(IX+9) + LD BC,8388608 + LD A,63 + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _xatan + POP BC + POP BC + LD BC,13176795 + LD A,63 + CALL __fsub + LD E,A + LD HL,BC + JR L_7 +; 68 } else { +L_4: +; 69 return(pio4 + xatan((arg-1.0)/(arg+1.0))); + LD HL,8388608 + LD E,63 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fsub + LD (IX+-4),BC + LD (IX+-1),A + LD A,(IX+9) + LD BC,(IX+6) + LD HL,8388608 + LD E,63 + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _xatan + POP BC + POP BC + LD BC,HL + LD HL,4788187 + LD A,E + LD E,63 + CALL __fadd + LD E,A + LD HL,BC +; 70 } +; 71 } +L_7: + LD SP,IX + POP IX + RET + + +;**************************** _satan *************************** +;Name Addr/Register Size Type +;_xatan IMPORT ----- function +;arg IX+6 4 parameter + + +; Stack Frame Size: 16 (bytes) +; Spill Code: 0 (instruction) + + +; 72 +; 73 /** +; 74 * xatan evaluates a series valid in the +; 75 * range [-0.414...,+0.414...]. +; 76 */ +; 77 +; 78 static double xatan(double arg) { +_xatan: + LD HL,-8 + CALL __frameset +; 79 double argsq; +; 80 double value; +; 81 +; 82 argsq = arg*arg; + LD HL,(IX+6) + LD E,(IX+9) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fmul + LD (IX+-4),BC + LD (IX+-1),A +; 83 value = ((((p4*argsq + p3)*argsq + p2)*argsq + p1)*argsq + p0); + LD HL,8469160 + LD E,65 + CALL __fmul + LD HL,8795766 + LD E,67 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,9445616 + LD E,68 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,14585089 + LD E,68 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,6304333 + LD E,68 + CALL __fadd + LD (IX+-8),BC + LD (IX+-5),A +; 84 value = value/(((((argsq + q4)*argsq + q3)*argsq + q2)*argsq + q1)*argsq + q0); + LD BC,(IX+-4) + LD A,(IX+-1) + LD HL,7066608 + LD E,66 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,397564 + LD E,68 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,13654293 + LD E,68 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,128348 + LD E,69 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,6304333 + LD E,68 + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __fdiv + LD (IX+-8),BC + LD (IX+-5),A +; 85 return(value*arg); + LD HL,(IX+6) + LD E,(IX+9) + LD A,(IX+-5) + CALL __fmul + LD E,A + LD HL,BC +; 86 } + LD SP,IX + POP IX + RET + + +;**************************** _xatan *************************** +;Name Addr/Register Size Type +;value IX-8 4 variable +;argsq IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 20 (bytes) +; Spill Code: 0 (instruction) + + + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __frameset0:ROM + XREF __frameset:ROM + XDEF _satan + XDEF _atan + END diff --git a/frontends/calculator/CEdev/lib/static/atan2.src b/frontends/calculator/CEdev/lib/static/atan2.src new file mode 100644 index 0000000..f6840d2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/atan2.src @@ -0,0 +1,179 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\ATAN2.C" + .assume ADL=1 + SEGMENT CODE +; 1 /* Copyright (c) 2000-2008 Zilog, Inc. */ +; 2 +; 3 #define pio2 1.57079632679489e0 +; 4 +; 5 double atan2(double arg1,double arg2) { +_atan2: + CALL __frameset0 +; 6 double satan(double); +; 7 +; 8 if((arg1+arg2)==arg1) { + LD HL,(IX+12) + LD E,(IX+15) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JR NZ,L_9 +; 9 if(arg1 >= 0.) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP M,L_1 +; 10 return(pio2); + LD HL,13176795 + LD E,63 + JR L_10 +; 11 } else { +L_1: +; 12 return(-pio2); + LD HL,13176795 + LD E,191 + JR L_10 +; 13 } +; 14 } else if(arg2 < 0.) { +L_9: + LD HL,(IX+12) + LD E,(IX+15) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_7 +; 15 if(arg1 >= 0.) { + LD HL,(IX+6) + LD E,(IX+9) + XOR A,A + CALL __fcmp + JP M,L_3 +; 16 return(pio2+pio2 - satan(-arg1/arg2)); + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD HL,(IX+12) + LD E,(IX+15) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _satan + POP BC + POP BC + LD BC,4788187 + LD A,64 + CALL __fsub + LD E,A + LD HL,BC + JR L_10 +; 17 } else { +L_3: +; 18 return(-pio2-pio2 + satan(arg1/arg2)); + LD HL,(IX+12) + LD E,(IX+15) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _satan + POP BC + POP BC + LD BC,HL + LD HL,4788187 + LD A,E + LD E,192 + CALL __fadd + LD E,A + LD HL,BC + JR L_10 +; 19 } +; 20 } else if(arg1 > 0) { +L_7: + OR A,A + SBC HL,HL + LD E,0 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_5 +; 21 return(satan(arg1/arg2)); + LD HL,(IX+12) + LD E,(IX+15) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _satan + POP BC + POP BC + JR L_10 +; 22 } else { +L_5: +; 23 return(-satan(-arg1/arg2)); + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD HL,(IX+12) + LD E,(IX+15) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _satan + POP BC + POP BC + LD BC,HL + LD A,E + CALL __fneg + LD E,A + LD HL,BC +; 24 } +; 25 } +L_10: + LD SP,IX + POP IX + RET + + +;**************************** _atan2 *************************** +;Name Addr/Register Size Type +;_satan IMPORT ----- function +;arg2 IX+12 4 parameter +;arg1 IX+6 4 parameter + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + + XREF _satan:ROM + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __frameset0:ROM + XDEF _atan2 + END diff --git a/frontends/calculator/CEdev/lib/static/atof.src b/frontends/calculator/CEdev/lib/static/atof.src new file mode 100644 index 0000000..bfabf06 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/atof.src @@ -0,0 +1,20 @@ + .ref __frameset0 + .ref _strtod + .def _atof + .assume adl=1 + +; double atof(char *str); + +_atof: + pop hl + pop bc + push bc + push hl + or a,a + sbc hl,hl + push hl + push bc + call _strtod + pop bc + pop hl + ret diff --git a/frontends/calculator/CEdev/lib/static/ceil.src b/frontends/calculator/CEdev/lib/static/ceil.src new file mode 100644 index 0000000..591da78 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/ceil.src @@ -0,0 +1,31 @@ + .ref __frameset0 + .ref __fneg + .ref _floor + .def _ceil + .assume adl=1 + +; double ceil(double d); + +_ceil: + call __frameset0 + ld bc,(ix+6) + ld a,(ix+9) + call __fneg + ld l,a + ld h,0 + push hl + push bc + call _floor + pop bc + pop bc + push hl + pop bc + ld a,e + call __fneg + ld e,a + push bc + pop hl + ld sp,ix + pop ix + ret + \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/static/cos.src b/frontends/calculator/CEdev/lib/static/cos.src new file mode 100644 index 0000000..3145df8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/cos.src @@ -0,0 +1,33 @@ + .ref _sinus + .ref __frameset0 + .ref __fcmp + .ref __fneg + .def _cos + .assume adl=1 + +; double cos(double arg); + +_cos: + call __frameset0 + ld hl,(ix+6) + ld e,(ix+9) + ld bc,0 + xor a,a + push de + push hl + call __fcmp + pop bc + pop de + ld a,e + jp p,l_1 + call __fneg + +l_1: ld hl,1 + push hl + ld l,a + push hl + push bc + call _sinus + ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/static/exp.src b/frontends/calculator/CEdev/lib/static/exp.src new file mode 100644 index 0000000..ccae75e --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/exp.src @@ -0,0 +1,234 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\EXP.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C) 2000-2008 Zilog, Inc. */ +; 4 /* */ +; 5 /************************************************************************/ +; 6 /* +; 7 exp returns the exponential function of its +; 8 floating-point argument. +; 9 +; 10 The coefficients are #1069 from Hart and Cheney. (22.35D) +; 11 */ +; 12 +; 13 #include +; 14 #include +; 15 +; 16 #define p0 0.20803843466947e7 +; 17 #define p1 0.30286971697440e5 +; 18 #define p2 0.60614853300611e2 +; 19 #define q0 0.60027203602388e7 +; 20 #define q1 0.32772515180829e6 +; 21 #define q2 0.17492876890931e4 +; 22 #define log2e 1.44269504088896 +; 23 #define sqrt2 1.41421356237310 +; 24 #define maxf 10000 +; 25 +; 26 double exp(double arg) { +_exp: + LD HL,-23 + CALL __frameset +; 27 double fraction; +; 28 double temp1, temp2, xsq; +; 29 int ent; +; 30 +; 31 if ( arg == 0.0 ){ + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JR NZ,L_2 +; 32 return 1.0; + LD HL,8388608 + LD E,63 + JR L_6 +; 33 } +L_2: +; 34 if ( arg < -maxf ){ + LD HL,(IX+6) + LD E,(IX+9) + LD BC,1851392 + LD A,198 + CALL __fcmp + JP P,L_4 + OR A,A +; 35 return 0.0; + SBC HL,HL + LD E,0 + JR L_6 +; 36 } +L_4: +; 37 if ( arg > maxf ){ + LD HL,1851392 + LD E,70 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_5 +; 38 errno = ERANGE; + LD BC,5 + LD (_errno),BC +; 39 return HUGE_VAL ; + LD HL,(__huge_val) + LD A,(__huge_val+3) + LD E,A + JR L_6 +; 40 } +L_5: +; 41 arg *= log2e; + LD HL,12102203 + LD E,63 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fmul + LD (IX+6),BC + LD (IX+9),A +; 42 ent = floor( arg ); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _floor + POP BC + POP BC + LD A,E + LD BC,HL + CALL __ftol + LD (IX+-11),BC +; 43 fraction = arg - ent - 0.5; + CALL __itol + CALL __ltof + OR A,A + SBC HL,HL + LD E,63 + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+6) + LD A,(IX+9) + CALL __fsub + LD (IX+-8),BC + LD (IX+-5),A +; 44 xsq = fraction * fraction; + LD E,(IX+-5) + LD A,(IX+-5) + LD HL,BC + CALL __fmul + LD (IX+-4),BC + LD (IX+-1),A +; 45 temp1 = ((p2 * xsq + p1) * xsq + p0) * fraction; + LD HL,7501212 + LD E,66 + CALL __fmul + LD HL,15506930 + LD E,70 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,16643075 + LD E,73 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD (IX+-15),BC + LD (IX+-12),A +; 46 temp2 = ((1.0 * xsq + q2) * xsq + q1) * xsq + q0; + LD BC,(IX+-4) + LD A,(IX+-1) + LD HL,14330165 + LD E,68 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,10487205 + LD E,72 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,12005441 + LD E,74 + CALL __fadd + LD (IX+-19),BC + LD (IX+-16),A +; 47 return ldexp( sqrt2 * (temp2+temp1) / (temp2-temp1), ent ); + LD DE,(IX+-11) + PUSH DE + LD HL,(IX+-15) + LD E,(IX+-12) + LD A,(IX+-16) + CALL __fadd + LD HL,11863283 + LD E,63 + CALL __fmul + LD (IX+-22),BC + LD (IX+-23),A + LD A,(IX+-16) + LD BC,(IX+-19) + LD HL,(IX+-15) + LD E,(IX+-12) + CALL __fsub + LD E,A + LD HL,BC + LD BC,(IX+-22) + LD A,(IX+-23) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _ldexp + POP BC + POP BC + POP BC +; 48 } +L_6: + LD SP,IX + POP IX + RET + + +;**************************** _exp *************************** +;Name Addr/Register Size Type +;_ldexp IMPORT ----- function +;_floor IMPORT ----- function +;__huge_val IMPORT 4 variable +;_errno IMPORT 3 variable +;temp2 IX-19 4 variable +;temp1 IX-15 4 variable +;ent IX-11 3 variable +;fraction IX-8 4 variable +;xsq IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 35 (bytes) +; Spill Code: 0 (instruction) + + + XREF _floor:ROM + XREF _ldexp:ROM + XREF __huge_val:ROM + XREF _errno:ROM + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fcmp:ROM + XREF __ftol:ROM + XREF __ltof:ROM + XREF __itol:ROM + XREF __frameset:ROM + XDEF _exp + END diff --git a/frontends/calculator/CEdev/lib/static/fabs.src b/frontends/calculator/CEdev/lib/static/fabs.src new file mode 100644 index 0000000..36bbacd --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/fabs.src @@ -0,0 +1,14 @@ + .def _fabs + .assume adl=1 + +; double fabs(double j); + +_fabs: + pop bc + pop hl + pop de + push de + push hl + push bc + res 7,e + ret diff --git a/frontends/calculator/CEdev/lib/static/floor.src b/frontends/calculator/CEdev/lib/static/floor.src new file mode 100644 index 0000000..7a2dd34 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/floor.src @@ -0,0 +1,114 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FLOOR.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C) 2000-2008 Zilog, Inc. */ +; 4 /* */ +; 5 /* San Jose, California */ +; 6 /* */ +; 7 /************************************************************************/ +; 8 #include +; 9 +; 10 double floor(double d) { +_floor: + LD HL,-4 + CALL __frameset +; 11 double fraction; +; 12 +; 13 if (d<0.0) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_3 +; 14 d = -d; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+6),BC + LD (IX+9),A +; 15 fraction = modf(d, (double *)&d); + PEA IX+6 + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _modf + POP BC + POP BC + POP BC + LD (IX+-4),HL + LD (IX+-1),E +; 16 if (fraction != 0.0) + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,0 + XOR A,A + CALL __fcmp + JR Z,L_1 +; 17 d += 1; + LD HL,8388608 + LD E,63 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fadd + LD (IX+6),BC + LD (IX+9),A +L_1: +; 18 d = -d; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+6),BC + LD (IX+9),A +; 19 } else { + JR L_4 +L_3: +; 20 fraction = modf(d, (double *)&d); + PEA IX+6 + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _modf + POP BC + POP BC + POP BC + LD (IX+-4),HL + LD (IX+-1),E +; 21 } +L_4: +; 22 return(d); + LD HL,(IX+6) + LD E,(IX+9) +; 23 } + LD SP,IX + POP IX + RET + + +;**************************** _floor *************************** +;Name Addr/Register Size Type +;_modf IMPORT ----- function +;fraction IX-4 4 variable +;d IX+6 4 parameter + + +; Stack Frame Size: 16 (bytes) +; Spill Code: 0 (instruction) + + + XREF _modf:ROM + XREF __fadd:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __frameset:ROM + XDEF _floor + END diff --git a/frontends/calculator/CEdev/lib/static/fmod.src b/frontends/calculator/CEdev/lib/static/fmod.src new file mode 100644 index 0000000..0073ef7 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/fmod.src @@ -0,0 +1,135 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FMOD.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C) 2000-2008 Zilog, Inc. */ +; 4 /* */ +; 5 /* San Jose, California */ +; 6 /* */ +; 7 /************************************************************************/ +; 8 #include +; 9 +; 10 /************************************************* +; 11 * +; 12 * fmod - modulo +; 13 * +; 14 * Inputs: +; 15 * x - dividend +; 16 * y - divisor +; 17 * +; 18 * Returns: +; 19 * x mod y +; 20 * +; 21 *************************************************/ +; 22 +; 23 double fmod(double x, double y) { +_fmod: + LD HL,-8 + CALL __frameset +; 24 double z; +; 25 double result; +; 26 +; 27 if (y == 0.0) { + LD HL,(IX+12) + LD E,(IX+15) + LD BC,0 + XOR A,A + CALL __fcmp + JR NZ,L_1 + OR A,A +; 28 return 0; + SBC HL,HL + LD E,0 + JR L_5 +; 29 } +L_1: +; 30 +; 31 modf(x/y,&z); + PEA IX+-8 + LD HL,(IX+12) + LD E,(IX+15) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _modf + POP BC + POP BC + POP BC +; 32 result = x - z*y; + LD HL,(IX+12) + LD E,(IX+15) + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __fmul + LD E,A + LD HL,BC + LD BC,(IX+6) + LD A,(IX+9) + CALL __fsub + LD (IX+-4),BC + LD (IX+-1),A +; 33 +; 34 if ((x < 0) && (result > 0)) { + LD HL,(IX+6) + LD E,(IX+9) + XOR A,A + LD BC,0 + CALL __fcmp + JP P,L_4 + OR A,A + SBC HL,HL + LD E,0 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fcmp + JP P,L_4 +; 35 result = -result; + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fneg + LD (IX+-4),BC + LD (IX+-1),A +; 36 } +L_4: +; 37 +; 38 return(result); + LD HL,(IX+-4) + LD E,(IX+-1) +; 39 } +L_5: + LD SP,IX + POP IX + RET + + +;**************************** _fmod *************************** +;Name Addr/Register Size Type +;_modf IMPORT ----- function +;z IX-8 4 variable +;result IX-4 4 variable +;y IX+12 4 parameter +;x IX+6 4 parameter + + +; Stack Frame Size: 26 (bytes) +; Spill Code: 0 (instruction) + + + XREF _modf:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __frameset:ROM + XDEF _fmod + END diff --git a/frontends/calculator/CEdev/lib/static/frexp.src b/frontends/calculator/CEdev/lib/static/frexp.src new file mode 100644 index 0000000..77df2d8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/frexp.src @@ -0,0 +1,141 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FREXP.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C) 2000-2008 Zilog, Inc. */ +; 4 /* */ +; 5 /* San Jose, California */ +; 6 /* */ +; 7 /************************************************************************/ +; 8 +; 9 #include +; 10 +; 11 typedef union +; 12 { +; 13 float value; +; 14 unsigned long bits; +; 15 } Ieee754; +; 16 +; 17 enum +; 18 { // The IEEE 754 format is: +; 19 // SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM +; 20 // (with an implicit mantissa high-order 1-bit.) +; 21 mastissa_shift = 0, +; 22 mastissa_bits = 23, +; 23 exponent_bits = 8, +; 24 exponent_shift = mastissa_shift + mastissa_bits, +; 25 sign_shift = exponent_shift + exponent_bits, +; 26 exponent_mask = (1 << exponent_bits) -1, // shifted = 0x7F800000 +; 27 exponent_max = (1 << exponent_bits) -1, +; 28 exponent_base = 127, +; 29 exponent_min = 0 +; 30 }; +; 31 +; 32 // frexp - Standard C library routine +; 33 // frexp returns the exponent and mantissa of its floating point +; 34 // argument. +; 35 // +; 36 // Arguments: +; 37 // value - the floating point argument +; 38 // pExponent - pointer to the returned exponent +; 39 // +; 40 // Returns: +; 41 // - a floating point number between 0.5 and 1.0 (or zero if +; 42 // the input argument is zero) +; 43 // +; 44 double frexp( double value, int *pExponent ) +; 45 { +_frexp: + LD HL,-8 + CALL __frameset +; 46 Ieee754 floating; +; 47 long exponentBits = 0; + LD BC,0 + LD (IX+-8),BC + XOR A,A + LD (IX+-5),A +; 48 +; 49 floating.value = value; + LD BC,(IX+6) + LD A,(IX+9) + LD (IX+-4),BC + LD (IX+-1),A +; 50 if ( value != 0.0 ) + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JR Z,L_2 +; 51 { +; 52 exponentBits = (floating.bits +; 53 & ((unsigned long) exponent_mask << exponent_shift)) +; 54 - ((exponent_base - 1L) << exponent_shift); + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,8388608 + LD A,127 + CALL __land + LD BC,0 + LD A,193 + CALL __ladd + LD (IX+-8),HL + LD (IX+-5),E +; 55 floating.bits -= exponentBits; // adjust exponent + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __lsub + LD (IX+-4),HL + LD (IX+-1),E +; 56 } +L_2: +; 57 if ( pExponent != 0 ) + LD HL,(IX+12) + CALL __icmpzero + JR Z,L_3 +; 58 { +; 59 *pExponent = exponentBits >> exponent_shift; + LD BC,(IX+-8) + LD A,(IX+-5) + LD L,23 + CALL __lshrs + LD HL,(IX+12) + LD (HL),BC +; 60 } +L_3: +; 61 return floating.value; + LD HL,(IX+-4) + LD E,(IX+-1) +; 62 } + LD SP,IX + POP IX + RET + + +;**************************** _frexp *************************** +;Name Addr/Register Size Type +;exponentBits IX-8 4 variable +;floating IX-4 4 variable +;pExponent IX+12 3 parameter +;value IX+6 4 parameter + + +; Stack Frame Size: 23 (bytes) +; Spill Code: 0 (instruction) + + + XREF __ladd:ROM + XREF __lsub:ROM + XREF __land:ROM + XREF __lshrs:ROM + XREF __fcmp:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _frexp + END diff --git a/frontends/calculator/CEdev/lib/static/ldexp.src b/frontends/calculator/CEdev/lib/static/ldexp.src new file mode 100644 index 0000000..a656d62 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/ldexp.src @@ -0,0 +1,194 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\LDEXP.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 #include +; 10 #include +; 11 +; 12 typedef union +; 13 { +; 14 float value; +; 15 unsigned long bits; +; 16 } Ieee754; +; 17 +; 18 enum +; 19 { // The IEEE 754 format is: +; 20 // SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM +; 21 // (with an implicit mantissa high-order 1-bit.) +; 22 mastissa_shift = 0, +; 23 mastissa_bits = 23, +; 24 exponent_bits = 8, +; 25 exponent_shift = mastissa_shift + mastissa_bits, +; 26 sign_shift = exponent_shift + exponent_bits, +; 27 exponent_mask = (1 << exponent_bits) -1, // shifted = 0x7F800000 +; 28 exponent_max = (1 << exponent_bits) -1, +; 29 exponent_base = 127, +; 30 exponent_min = 0 +; 31 }; +; 32 +; 33 // ldexp - Standard C library routine +; 34 // ldexp returns the argument multiplied by an integral (positive or +; 35 // negative) power of two. +; 36 // +; 37 // Arguments: +; 38 // value - the floating point argument +; 39 // power - the power of two to be used +; 40 // +; 41 // Returns: +; 42 // - the argument multiplied by an integral power of two +; 43 // +; 44 double ldexp( double value, int power ) +; 45 { +_ldexp: + LD HL,-14 + CALL __frameset +; 46 Ieee754 floating; +; 47 int exponent; +; 48 int powerplusexponent; +; 49 +; 50 if ( value == 0.0 ) return 0; + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JR NZ,L_1 + OR A,A + SBC HL,HL + LD E,0 + JR L_10 +L_1: +; 51 +; 52 floating.value = value; + LD BC,(IX+6) + LD A,(IX+9) + LD (IX+-4),BC + LD (IX+-1),A +; 53 exponent = (floating.bits >> exponent_shift) & exponent_mask; + LD L,23 + CALL __lshru + LD HL,BC + LD A,L + UEXT HL + LD L,A + LD (IX+-10),HL +; 54 powerplusexponent = power + exponent; + LD BC,(IX+12) + ADD HL,BC + LD (IX+-7),HL +; 55 +; 56 if ( powerplusexponent > exponent_max ) + LD BC,HL + LD HL,255 + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_8 +; 57 { +; 58 errno = ERANGE; + LD BC,5 + LD (_errno),BC +; 59 return (floating.bits & (1L << sign_shift)) == 0 ? HUGE_VAL : - HUGE_VAL; + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,0 + LD A,128 + CALL __land + CALL __lcmpzero + JR NZ,L_4 + LD BC,(__huge_val) + LD A,(__huge_val+3) + LD (IX+-14),BC + LD (IX+-11),A + JR L_5 +L_4: + LD BC,(__huge_val) + LD A,(__huge_val+3) + CALL __fneg + LD (IX+-14),BC + LD (IX+-11),A +L_5: + LD HL,(IX+-14) + LD E,(IX+-11) + JR L_10 +; 60 } +L_8: +; 61 if ( powerplusexponent <= exponent_min ) // CR 3964 + LD BC,(IX+-7) + OR A,A + SBC HL,HL + OR A,A + SBC HL,BC + CALL __setflag + JP M,L_9 +; 62 { +; 63 errno = ERANGE; + LD BC,5 + LD (_errno),BC + OR A,A +; 64 return 0.0; + SBC HL,HL + LD E,0 + JR L_10 +; 65 } +L_9: +; 66 floating.bits += (long) power << exponent_shift; // adjust exponent + LD BC,(IX+12) + CALL __itol + LD L,23 + CALL __lshl + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __ladd + LD (IX+-4),HL + LD (IX+-1),E +; 67 return floating.value; + LD HL,(IX+-4) + LD E,(IX+-1) +; 68 } +L_10: + LD SP,IX + POP IX + RET + + +;**************************** _ldexp *************************** +;Name Addr/Register Size Type +;__huge_val IMPORT 4 variable +;_errno IMPORT 3 variable +;temp2 IX-14 4 variable +;exponent IX-10 3 variable +;powerplusexponent IX-7 3 variable +;floating IX-4 4 variable +;power IX+12 3 parameter +;value IX+6 4 parameter + + +; Stack Frame Size: 29 (bytes) +; Spill Code: 0 (instruction) + + + XREF __huge_val:ROM + XREF _errno:ROM + XREF __ladd:ROM + XREF __land:ROM + XREF __lshl:ROM + XREF __lshru:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __lcmpzero:ROM + XDEF _ldexp + END diff --git a/frontends/calculator/CEdev/lib/static/log.src b/frontends/calculator/CEdev/lib/static/log.src new file mode 100644 index 0000000..e84217b --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/log.src @@ -0,0 +1,233 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\LOG.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1999-2008 by Zilog, Inc. */ +; 4 /* */ +; 5 /************************************************************************/ +; 6 /* +; 7 log returns the natural logarithm of its floating +; 8 point argument. +; 9 +; 10 The coefficients are #2705 from Hart & Cheney. (19.38D) +; 11 +; 12 It calls frexp. +; 13 */ +; 14 +; 15 #include +; 16 #include +; 17 +; 18 #define log2 0.693147180559945e0 +; 19 #define ln10 2.30258509299404 +; 20 #define sqrto2 0.707106781186548e0 +; 21 #define p0 -0.240139179559211e2 +; 22 #define p1 0.309572928215377e2 +; 23 #define p2 -0.963769093368687e1 +; 24 #define p3 0.421087371217980e0 +; 25 #define q0 -0.120069589779605e2 +; 26 #define q1 0.194809660700890e2 +; 27 #define q2 -0.891110902798312e1 +; 28 +; 29 double log( double arg ) +; 30 { +_log: + LD HL,-27 + CALL __frameset + OR A,A +; 31 double x,z, zsq, temp; +; 32 int exp; +; 33 +; 34 if ( arg <= 0.0 ){ + SBC HL,HL + LD E,0 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP M,L_1 +; 35 errno = EDOM; + LD BC,4 + LD (_errno),BC +; 36 return -HUGE_VAL; + LD BC,(__huge_val) + LD A,(__huge_val+3) + CALL __fneg + LD E,A + LD HL,BC + JR L_5 +; 37 } +L_1: +; 38 x = frexp( arg, & exp ); + PEA IX+-15 + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _frexp + POP BC + POP BC + POP BC + LD (IX+-8),HL + LD (IX+-5),E +; 39 if ( x < sqrto2 ){ + LD HL,(IX+-8) + LD E,(IX+-5) + LD BC,3474675 + LD A,63 + CALL __fcmp + JP P,L_4 + OR A,A +; 40 x *= 2; + SBC HL,HL + LD E,64 + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __fmul + LD (IX+-8),BC + LD (IX+-5),A +; 41 exp--; + LD BC,(IX+-15) + DEC BC + LD (IX+-15),BC +; 42 } +L_4: +; 43 +; 44 z = (x-1)/(x+1); + LD HL,8388608 + LD E,63 + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __fsub + LD (IX+-27),BC + LD (IX+-24),A + LD A,(IX+-5) + LD BC,(IX+-8) + LD HL,8388608 + LD E,63 + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+-27) + LD A,(IX+-24) + CALL __fdiv + LD (IX+-19),BC + LD (IX+-16),A +; 45 zsq = z*z; + LD E,(IX+-16) + LD A,(IX+-16) + LD HL,BC + CALL __fmul + LD (IX+-4),BC + LD (IX+-1),A +; 46 +; 47 temp = ((p3*zsq + p2)*zsq + p1)*zsq + p0; + LD HL,14129348 + LD E,62 + CALL __fmul + LD HL,1717243 + LD E,193 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,16230537 + LD E,65 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,12590209 + LD E,193 + CALL __fadd + LD (IX+-12),BC + LD (IX+-9),A +; 48 temp = temp/(((1.0*zsq + q2)*zsq + q1)*zsq + q0); + LD BC,(IX+-4) + LD A,(IX+-1) + LD HL,955367 + LD E,193 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,10213637 + LD E,65 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,4201601 + LD E,193 + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+-12) + LD A,(IX+-9) + CALL __fdiv + LD (IX+-12),BC + LD (IX+-9),A +; 49 temp = temp*z + exp*log2; + LD HL,(IX+-19) + LD E,(IX+-16) + LD A,(IX+-9) + CALL __fmul + LD (IX+-23),BC + LD BC,(IX+-15) + LD (IX+-20),A + CALL __itol + CALL __ltof + LD HL,3240472 + LD E,63 + CALL __fmul + LD E,A + LD HL,BC + LD BC,(IX+-23) + LD A,(IX+-20) + CALL __fadd + LD (IX+-12),BC + LD (IX+-9),A +; 50 return temp; + LD E,(IX+-9) + LD HL,BC +; 51 } +L_5: + LD SP,IX + POP IX + RET + + +;**************************** _log *************************** +;Name Addr/Register Size Type +;_frexp IMPORT ----- function +;__huge_val IMPORT 4 variable +;_errno IMPORT 3 variable +;z IX-19 4 variable +;exp IX-15 3 variable +;temp IX-12 4 variable +;x IX-8 4 variable +;zsq IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 39 (bytes) +; Spill Code: 0 (instruction) + + + XREF _frexp:ROM + XREF __huge_val:ROM + XREF _errno:ROM + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __ltof:ROM + XREF __itol:ROM + XREF __frameset:ROM + XDEF _log + END diff --git a/frontends/calculator/CEdev/lib/static/log10.src b/frontends/calculator/CEdev/lib/static/log10.src new file mode 100644 index 0000000..e0f7265 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/log10.src @@ -0,0 +1,48 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\LOG10.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 +; 3 double log10(double x) { +_log10: + CALL __frameset0 +; 4 return log(x) / M_LN10; + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _log + POP BC + POP BC + LD BC,HL + LD HL,1269134 + LD A,E + LD E,64 + CALL __fdiv + LD E,A + LD HL,BC +; 5 } + LD SP,IX + POP IX + RET + + +;**************************** _log10 *************************** +;Name Addr/Register Size Type +;_log IMPORT ----- function +;x IX+6 4 parameter + + +; Stack Frame Size: 12 (bytes) +; Spill Code: 0 (instruction) + + + XREF _log:ROM + XREF __fdiv:ROM + XREF __frameset0:ROM + XDEF _log10 + END diff --git a/frontends/calculator/CEdev/lib/static/modf.src b/frontends/calculator/CEdev/lib/static/modf.src new file mode 100644 index 0000000..6172da4 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/modf.src @@ -0,0 +1,166 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\MODF.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 +; 10 #include +; 11 +; 12 typedef union { +; 13 float value; +; 14 unsigned long bits; +; 15 } Ieee754; +; 16 +; 17 enum +; 18 { // The IEEE 754 format is: +; 19 // SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM +; 20 // (with an implicit mantissa high-order 1-bit.) +; 21 mastissa_shift = 0, +; 22 mastissa_bits = 23, +; 23 exponent_bits = 8, +; 24 exponent_shift = mastissa_shift + mastissa_bits, +; 25 sign_shift = exponent_shift + exponent_bits, +; 26 exponent_mask = (1 << exponent_bits) -1, // shifted = 0x7F800000 +; 27 exponent_max = (1 << exponent_bits) -1, +; 28 exponent_base = 127, +; 29 exponent_min = 0 +; 30 }; +; 31 +; 32 /* modf - Standard C library routine +; 33 * modf returns the integral and fractional components of its +; 34 * floating point argument. +; 35 * +; 36 * Arguments: +; 37 * value - the floating point argument +; 38 * pIntegral - pointer to the returned integral component +; 39 * +; 40 * Returns: +; 41 * - the fractional component +; 42 */ +; 43 double modf( double value, double *pIntegral ) { +_modf: + LD HL,-7 + CALL __frameset +; 44 Ieee754 integral; +; 45 int exponent; +; 46 +; 47 integral.value = value; + LD BC,(IX+6) + LD A,(IX+9) + LD (IX+-4),BC + LD (IX+-1),A +; 48 frexp( value, &exponent); + PEA IX+-7 + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _frexp + POP BC + POP BC + POP BC +; 49 if ( exponent <= 0 ) { // set integral portion to zero + LD BC,(IX+-7) + OR A,A + SBC HL,HL + OR A,A + SBC HL,BC + CALL __setflag + JP M,L_2 +; 50 integral.bits = 0; + LD BC,0 + LD (IX+-4),BC + XOR A,A + LD (IX+-1),A +; 51 } else if ( exponent <= mastissa_bits ) { // mask out fractional portion + JR L_4 +L_2: + LD BC,(IX+-7) + LD HL,23 + OR A,A + SBC HL,BC + CALL __setflag + JP M,L_4 +; 52 integral.bits &= -1L << (mastissa_bits - exponent + 1); + LD HL,23 + LD BC,(IX+-7) + OR A,A + SBC HL,BC + INC HL + LD BC,HL + CALL __itol + LD HL,BC + LD BC,16777215 + LD A,255 + CALL __lshl + LD E,A + LD HL,BC + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __land + LD (IX+-4),HL + LD (IX+-1),E +; 53 } +L_4: +; 54 if ( pIntegral != 0 ) { + LD HL,(IX+12) + CALL __icmpzero + JR Z,L_5 +; 55 *pIntegral = integral.value; + LD HL,(IX+12) + LD BC,(IX+-4) + LD A,(IX+-1) + LD (HL),BC + INC HL + INC HL + INC HL + LD (HL),A +; 56 } +L_5: +; 57 return value - integral.value; + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fsub + LD E,A + LD HL,BC +; 58 } + LD SP,IX + POP IX + RET + + +;**************************** _modf *************************** +;Name Addr/Register Size Type +;_frexp IMPORT ----- function +;exponent IX-7 3 variable +;integral IX-4 4 variable +;pIntegral IX+12 3 parameter +;value IX+6 4 parameter + + +; Stack Frame Size: 22 (bytes) +; Spill Code: 0 (instruction) + + + XREF _frexp:ROM + XREF __land:ROM + XREF __lshl:ROM + XREF __fsub:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XDEF _modf + END diff --git a/frontends/calculator/CEdev/lib/static/pow.src b/frontends/calculator/CEdev/lib/static/pow.src new file mode 100644 index 0000000..b9a8c19 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/pow.src @@ -0,0 +1,187 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\POW.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 +; 10 #include +; 11 #include +; 12 +; 13 double pow( double arg1, double arg2 ) { +_pow: + LD HL,-8 + CALL __frameset + OR A,A +; 14 double result; +; 15 long temp; +; 16 +; 17 if ( arg1 > 0.0 ){ + SBC HL,HL + LD E,0 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_8 +; 18 return exp( arg2 * log( arg1 ) ); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _log + POP BC + POP BC + LD A,E + LD BC,HL + LD HL,(IX+12) + LD E,(IX+15) + CALL __fmul + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _exp + POP BC + POP BC + JR L_12 +; 19 } +L_8: +; 20 if ( arg1 < 0.0 ){ + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_10 +; 21 temp = arg2; +; 22 if ( temp == arg2 ){ + LD BC,(IX+12) + LD A,(IX+15) + CALL __ftol + CALL __ltof + LD E,A + LD HL,BC + LD BC,(IX+12) + LD A,(IX+15) + CALL __fcmp + JR NZ,L_6 +; 23 result = exp( arg2 * log( -arg1 ) ); + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _log + POP BC + POP BC + LD A,E + LD BC,HL + LD HL,(IX+12) + LD E,(IX+15) + CALL __fmul + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _exp + POP BC + POP BC + LD (IX+-4),HL + LD (IX+-1),E +; 24 return temp & 1 ? -result : result; + LD BC,(IX+12) + LD A,(IX+15) + CALL __ftol + LD A,C + AND A,1 + UEXT HL + LD L,A + LD E,H + CALL __lcmpzero + JR Z,L_3 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fneg + LD (IX+-8),BC + LD (IX+-5),A + JR L_4 +L_3: + LD BC,(IX+-4) + LD A,(IX+-1) + LD (IX+-8),BC + LD (IX+-5),A +L_4: + LD HL,(IX+-8) + LD E,(IX+-5) + JR L_12 +; 25 } +L_6: +; 26 errno = EDOM; + LD BC,4 + LD (_errno),BC +; 27 } +L_10: + OR A,A +; 28 if ( arg2 <= 0.0 ){ + SBC HL,HL + LD E,0 + LD BC,(IX+12) + LD A,(IX+15) + CALL __fcmp + JP M,L_11 +; 29 errno = EDOM; + LD BC,4 + LD (_errno),BC +; 30 } +L_11: + OR A,A +; 31 return 0.0; + SBC HL,HL +; 32 } +L_12: + LD SP,IX + POP IX + RET + + +;**************************** _pow *************************** +;Name Addr/Register Size Type +;_errno IMPORT 3 variable +;_log IMPORT ----- function +;_exp IMPORT ----- function +;temp1 IX-8 4 variable +;result IX-4 4 variable +;arg2 IX+12 4 parameter +;arg1 IX+6 4 parameter + + +; Stack Frame Size: 26 (bytes) +; Spill Code: 0 (instruction) + + + XREF _log:ROM + XREF _exp:ROM + XREF _errno:ROM + XREF __fmul:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __ftol:ROM + XREF __ltof:ROM + XREF __frameset:ROM + XREF __lcmpzero:ROM + XDEF _pow + END diff --git a/frontends/calculator/CEdev/lib/static/sin.src b/frontends/calculator/CEdev/lib/static/sin.src new file mode 100644 index 0000000..8929126 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/sin.src @@ -0,0 +1,340 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\SIN.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C) 1999-2008 by Zilog, Inc. */ +; 4 /* */ +; 5 /************************************************************************/ +; 6 /* +; 7 C program for floating point sin/cos. +; 8 Calls modf. +; 9 There are no error exits. +; 10 Coefficients are #3370 from Hart & Cheney (18.80D). +; 11 */ +; 12 #include +; 13 +; 14 +; 15 #define twoopi 0.636619772367581 +; 16 #define p0 0.135788409787738e8 +; 17 #define p1 -0.494290810090284e7 +; 18 #define p2 0.440103053537527e6 +; 19 #define p3 -0.138472724998245e5 +; 20 #define p4 0.145968840666577e3 +; 21 #define q0 0.864455865292253e7 +; 22 #define q1 0.408179225234330e6 +; 23 #define q2 0.946309610153821e4 +; 24 #define q3 0.132653490878614e3 +; 25 +; 26 double sinus(double,int); +; 27 +; 28 double sin(double arg) { +_sin: + CALL __frameset0 +; 29 return(sinus(arg, 0)); + LD BC,0 + PUSH BC + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _sinus + POP BC + POP BC + POP BC +; 30 } + LD SP,IX + POP IX + RET + + +;**************************** _sin *************************** +;Name Addr/Register Size Type +;_sinus IMPORT ----- function +;arg IX+6 4 parameter + + +; Stack Frame Size: 12 (bytes) +; Spill Code: 0 (instruction) + + +; 31 +; 32 double sinus(double arg, int quad) +; 33 { +_sinus: + LD HL,-28 + CALL __frameset +; 34 double e, f; +; 35 int k; +; 36 double ysq; +; 37 double x,y; +; 38 double temp1, temp2; +; 39 +; 40 x = arg; + LD BC,(IX+6) + LD A,(IX+9) + LD (IX+-4),BC + LD (IX+-1),A +; 41 if(x<0) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_2 +; 42 x = -x; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+-4),BC + LD (IX+-1),A +; 43 quad = quad + 2; + LD IY,(IX+12) + LEA IY,IY+2 + LD (IX+12),IY +; 44 } +L_2: +; 45 x = x*twoopi; /*underflow?*/ + LD HL,2292099 + LD E,63 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fmul + LD (IX+-4),BC + LD (IX+-1),A +; 46 if(x>32764){ + LD HL,16775168 + LD E,70 + CALL __fcmp + JP P,L_4 +; 47 y = modf(x,&e); + PEA IX+-16 + LD C,(IX+-1) + LD B,0 + PUSH BC + LD BC,(IX+-4) + PUSH BC + CALL _modf + POP BC + POP BC + POP BC + LD (IX+-12),HL + LD (IX+-9),E +; 48 e = e + quad; + LD BC,(IX+12) + CALL __itol + CALL __ltof + LD E,A + LD HL,BC + LD BC,(IX+-16) + LD A,(IX+-13) + CALL __fadd + LD (IX+-16),BC + LD (IX+-13),A +; 49 modf(0.25*e,&f); + PEA IX+-20 + LD A,(IX+-13) + LD HL,8388608 + LD E,62 + CALL __fmul + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _modf + POP BC + POP BC + POP BC +; 50 quad = e - 4*f; + LD BC,(IX+-20) + LD A,(IX+-17) + LD HL,8388608 + LD E,64 + CALL __fmul + LD E,A + LD HL,BC + LD BC,(IX+-16) + LD A,(IX+-13) + CALL __fsub + CALL __ftol + LD (IX+12),BC +; 51 }else{ + JR L_6 +L_4: +; 52 k = x; +; 53 y = x - k; + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __ftol + CALL __itol + CALL __ltof + LD E,A + LD HL,BC + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fsub + LD (IX+-12),BC + LD (IX+-9),A +; 54 quad = (quad + k) & 03; + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __ftol + LD HL,BC + LD BC,(IX+12) + ADD HL,BC + LD A,L + AND A,3 + UEXT HL + LD L,A + LD (IX+12),HL +; 55 } +L_6: +; 56 if (quad & 01) + LD A,(IX+12) + AND A,1 + UEXT HL + LD L,A + CALL __icmpzero + JR Z,L_8 +; 57 y = 1-y; + LD HL,(IX+-12) + LD E,(IX+-9) + LD BC,8388608 + LD A,63 + CALL __fsub + LD (IX+-12),BC + LD (IX+-9),A +L_8: +; 58 if(quad > 1) + LD BC,(IX+12) + LD HL,1 + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_9 +; 59 y = -y; + LD BC,(IX+-12) + LD A,(IX+-9) + CALL __fneg + LD (IX+-12),BC + LD (IX+-9),A +L_9: +; 60 +; 61 ysq = y*y; + LD HL,(IX+-12) + LD E,(IX+-9) + LD BC,(IX+-12) + LD A,(IX+-9) + CALL __fmul + LD (IX+-8),BC + LD (IX+-5),A +; 62 temp1 = ((((p4*ysq+p3)*ysq+p2)*ysq+p1)*ysq+p0)*y; + LD HL,1177606 + LD E,67 + CALL __fmul + LD HL,5790999 + LD E,198 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,14083298 + LD E,72 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,9885816 + LD E,202 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,5190233 + LD E,75 + CALL __fadd + LD HL,(IX+-12) + LD E,(IX+-9) + CALL __fmul + LD (IX+-24),BC + LD (IX+-21),A +; 63 temp2 = ((((ysq+q3)*ysq+q2)*ysq+q1)*ysq+q0); + LD BC,(IX+-8) + LD A,(IX+-5) + LD HL,304971 + LD E,67 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,1301602 + LD E,70 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,13061735 + LD E,72 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,255951 + LD E,75 + CALL __fadd + LD (IX+-28),BC + LD (IX+-25),A +; 64 return(temp1/temp2); + LD HL,BC + LD BC,(IX+-24) + LD E,(IX+-25) + LD A,(IX+-21) + CALL __fdiv + LD E,A + LD HL,BC +; 65 } + LD SP,IX + POP IX + RET + + +;**************************** _sinus *************************** +;Name Addr/Register Size Type +;_modf IMPORT ----- function +;temp2 IX-28 4 variable +;temp1 IX-24 4 variable +;f IX-20 4 variable +;e IX-16 4 variable +;y IX-12 4 variable +;ysq IX-8 4 variable +;x IX-4 4 variable +;quad IX+12 3 parameter +;arg IX+6 4 parameter + + +; Stack Frame Size: 43 (bytes) +; Spill Code: 0 (instruction) + + + XREF _modf:ROM + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __ftol:ROM + XREF __ltof:ROM + XREF __itol:ROM + XREF __frameset0:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XDEF _sinus + XDEF _sin + END diff --git a/frontends/calculator/CEdev/lib/static/sinh.src b/frontends/calculator/CEdev/lib/static/sinh.src new file mode 100644 index 0000000..79f6da9 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/sinh.src @@ -0,0 +1,377 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\SINH.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 /* +; 10 sinh(arg) returns the hyperbolic sine of its floating- +; 11 point argument. +; 12 +; 13 The exponential function is called for arguments +; 14 greater in magnitude than 0.5. +; 15 +; 16 A series is used for arguments smaller in magnitude than 0.5. +; 17 The coefficients are #2029 from Hart & Cheney. (20.36D) +; 18 +; 19 cosh(arg) is computed from the exponential function for +; 20 all arguments. +; 21 */ +; 22 +; 23 #include +; 24 +; 25 #define p0 -0.630767364049772e+6 +; 26 #define p1 -0.899127202203951e+5 +; 27 #define p2 -0.289421135598956e+4 +; 28 #define p3 -0.263056321339750e+2 +; 29 #define q0 -0.630767364049772e+6 +; 30 #define q1 0.152151737879002e+5 +; 31 #define q2 -0.173678953558234e+3 +; 32 +; 33 double sinh(double arg) { +_sinh: + LD HL,-24 + CALL __frameset +; 34 double temp, argsq; +; 35 register int sign; +; 36 +; 37 sign = 1; + LD BC,1 + LD (IX+-11),BC +; 38 if(arg < 0) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_4 +; 39 arg = -arg; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+6),BC + LD (IX+9),A +; 40 sign = -1; + LD BC,16777215 + LD (IX+-11),BC +; 41 } +L_4: +; 42 +; 43 if(arg > 21.) { + LD HL,11010048 + LD E,65 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_6 +; 44 temp = exp(arg)/2; + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _exp + POP BC + POP BC + LD A,E + LD BC,HL + OR A,A + SBC HL,HL + LD E,64 + CALL __fdiv + LD (IX+-4),BC + LD (IX+-1),A +; 45 if (sign>0) + LD BC,(IX+-11) + OR A,A + SBC HL,HL + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_2 +; 46 return(temp); + LD HL,(IX+-4) + LD E,(IX+-1) + JR L_8 +; 47 else +L_2: +; 48 return(-temp); + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fneg + LD E,A + LD HL,BC + JR L_8 +; 49 } +L_6: + OR A,A +; 50 +; 51 if(arg > 0.5) { + SBC HL,HL + LD E,63 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_7 +; 52 return(sign*(exp(arg) - exp(-arg))/2); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _exp + POP BC + POP BC + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+-14),HL ; spill + LD (IX+-17),BC ; spill + LD HL,(IX+-14) ; unspill + LD C,A + LD B,0 + PUSH BC + LD (IX+-14),HL ; spill + LD HL,(IX+-17) ; unspill + PUSH HL + LD HL,(IX+-14) ; unspill + LD BC,HL + LD A,E + LD (IX+-23),BC + LD (IX+-24),A + CALL _exp + LD BC,(IX+-23) + LD A,(IX+-24) + POP IY + POP IY + CALL __fsub + LD (IX+-20),BC + LD BC,(IX+-11) + LD H,A + CALL __itol + CALL __ltof + LD E,A + LD A,H + LD HL,BC + LD BC,(IX+-20) + CALL __fmul + OR A,A + SBC HL,HL + LD E,64 + CALL __fdiv + LD E,A + LD HL,BC + JR L_8 +; 53 } +L_7: +; 54 +; 55 argsq = arg*arg; + LD HL,(IX+6) + LD E,(IX+9) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fmul + LD (IX+-8),BC + LD (IX+-5),A +; 56 temp = (((p3*argsq+p2)*argsq+p1)*argsq+p0)*arg; + LD HL,13791727 + LD E,193 + CALL __fmul + LD HL,3466082 + LD E,197 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,11508828 + LD E,199 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,1703670 + LD E,201 + CALL __fadd + LD HL,(IX+6) + LD E,(IX+9) + CALL __fmul + LD (IX+-4),BC + LD (IX+-1),A +; 57 temp /= (((argsq+q2)*argsq+q1)*argsq+q0); + LD BC,(IX+-8) + LD A,(IX+-5) + LD HL,2993616 + LD E,195 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,7191730 + LD E,70 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,1703670 + LD E,201 + CALL __fadd + LD E,A + LD A,(IX+-1) + LD HL,BC + LD BC,(IX+-4) + CALL __fdiv + LD (IX+-4),BC + LD (IX+-1),A +; 58 return(sign*temp); + LD BC,(IX+-11) + CALL __itol + CALL __ltof + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD E,A + LD HL,BC +; 59 } +L_8: + LD SP,IX + POP IX + RET + + +;**************************** _sinh *************************** +;Name Addr/Register Size Type +;_exp IMPORT ----- function +;sign IX-11 3 variable +;argsq IX-8 4 variable +;temp IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 36 (bytes) +; Spill Code: 0 (instruction) + + +; 60 +; 61 double cosh(double arg) { +_cosh: + LD HL,-4 + CALL __frameset +; 62 double val; +; 63 +; 64 if(arg < 0) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_10 +; 65 arg = -arg; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+6),BC + LD (IX+9),A +; 66 } +L_10: +; 67 +; 68 val = exp(arg); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _exp + POP BC + POP BC + LD (IX+-4),HL + LD (IX+-1),E +; 69 +; 70 if(arg > 21.) { + LD E,65 + LD BC,(IX+6) + LD A,(IX+9) + LD HL,11010048 + CALL __fcmp + JP P,L_12 + OR A,A +; 71 return(val/2); + SBC HL,HL + LD E,64 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fdiv + LD E,A + LD HL,BC + JR L_13 +; 72 } +L_12: +; 73 +; 74 val += exp(-arg); + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _exp + POP BC + POP BC + LD A,E + LD BC,HL + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fadd + LD (IX+-4),BC + LD (IX+-1),A + OR A,A +; 75 val /= 2; + SBC HL,HL + LD E,64 + CALL __fdiv + LD (IX+-4),BC + LD (IX+-1),A +; 76 return(val); + LD E,(IX+-1) + LD HL,BC +; 77 } +L_13: + LD SP,IX + POP IX + RET + + +;**************************** _cosh *************************** +;Name Addr/Register Size Type +;_exp IMPORT ----- function +;val IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 16 (bytes) +; Spill Code: 0 (instruction) + + + XREF _exp:ROM + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __ltof:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XDEF _cosh + XDEF _sinh + END diff --git a/frontends/calculator/CEdev/lib/static/sqrt.src b/frontends/calculator/CEdev/lib/static/sqrt.src new file mode 100644 index 0000000..7a20210 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/sqrt.src @@ -0,0 +1,83 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\SQRT.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 +; 10 #include +; 11 #include +; 12 +; 13 extern double sqrtf( double value ); +; 14 +; 15 // sqrt - Standard C library routine +; 16 // sqrt returns the square root of its floating point argument. +; 17 // +; 18 // Arguments: +; 19 // value - the floating point argument +; 20 // +; 21 // Returns: +; 22 // - the square root (or zero if the argument is negative) +; 23 // +; 24 +; 25 double sqrt( double value ) { +_sqrt: + CALL __frameset0 +; 26 if ( value < 0.0 ) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_1 +; 27 errno = EDOM; + LD BC,4 + LD (_errno),BC + OR A,A +; 28 return 0.0; + SBC HL,HL + LD E,0 + JR L_2 +; 29 } +L_1: +; 30 return sqrtf( value ); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _sqrtf + POP BC + POP BC +; 31 } +L_2: + LD SP,IX + POP IX + RET + + +;**************************** _sqrt *************************** +;Name Addr/Register Size Type +;_sqrtf IMPORT ----- function +;_errno IMPORT 3 variable +;value IX+6 4 parameter + + +; Stack Frame Size: 12 (bytes) +; Spill Code: 0 (instruction) + + + XREF _sqrtf:ROM + XREF _errno:ROM + XREF __fcmp:ROM + XREF __frameset0:ROM + XDEF _sqrt + END diff --git a/frontends/calculator/CEdev/lib/static/strtod.src b/frontends/calculator/CEdev/lib/static/strtod.src new file mode 100644 index 0000000..c879f1d --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/strtod.src @@ -0,0 +1,534 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\STRTOD.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 #include +; 10 #include +; 11 #include +; 12 #include +; 13 #include +; 14 #include +; 15 #include +; 16 //#include +; 17 +; 18 +; 19 /************************************************* +; 20 * +; 21 * strtod - string to double conversion +; 22 * +; 23 * Inputs: +; 24 * str - pointer to the character string +; 25 * endptr - pointer to pointer to char to +; 26 * put address of first char past +; 27 * the end of the string -- or NULL +; 28 * Returns: +; 29 * the value of the number +; 30 * +; 31 *************************************************/ +; 32 double strtod(char * str,char ** endptr) +; 33 { +_strtod: + LD HL,-23 + CALL __frameset +; 34 union +; 35 { +; 36 double d; +; 37 unsigned short s[2]; +; 38 }val; +; 39 int frac = 0; + LD BC,0 + LD (IX+-12),BC +; 40 int exp = 0; + LD (IX+-7),BC +; 41 signed char sign = 1; + LD (IX+-9),1 +; 42 signed char exp_sign = 1; + LD (IX+-8),1 +; 43 double temp; +; 44 +; 45 while (isspace(*str)) + JR L_0 +L_1: +; 46 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_0: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_1 +; 47 +; 48 if (*str == '-') { + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,45 + SBC HL,BC + JR NZ,L_4 +; 49 sign = -1; + LD (IX+-9),255 +; 50 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 51 } +; 52 else if (*str == '+') + JR L_6 +L_4: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,43 + SBC HL,BC + JR NZ,L_6 +; 53 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_6: +; 54 +; 55 val.d = 0; + LD BC,0 + LD (IX+-4),BC + XOR A,A + LD (IX+-1),A +; 56 while (*str >= '0' && *str <= '9') { + JR L_8 +L_9: +; 57 val.d = val.d * 10 + (*str - '0'); + LD HL,2097152 + LD E,65 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fmul + LD (IX+-20),A + LD HL,(IX+6) + LD A,(HL) + LD D,A + SEXT HL + LD L,D + LD IY,HL + LD (IX+-23),BC + LEA BC,IY+-48 + CALL __itol + CALL __ltof + LD E,A + LD HL,BC + LD BC,(IX+-23) + LD A,(IX+-20) + CALL __fadd + LD (IX+-4),BC + LD (IX+-1),A +; 58 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 59 } +L_8: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,48 + SBC HL,BC + CALL __setflag + JP M,L_14 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD HL,57 + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_9 +L_14: +; 60 +; 61 if (*str == '.') { + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,46 + SBC HL,BC + JR NZ,L_24 +; 62 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 63 while (*str >= '0' && *str <= '9') { + JR L_11 +L_12: +; 64 val.d = val.d * 10 + (*str - '0'); + LD HL,2097152 + LD E,65 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fmul + LD (IX+-16),A + LD HL,(IX+6) + LD A,(HL) + LD D,A + SEXT HL + LD L,D + LD IY,HL + LD (IX+-19),BC + LEA BC,IY+-48 + CALL __itol + CALL __ltof + LD E,A + LD HL,BC + LD BC,(IX+-19) + LD A,(IX+-16) + CALL __fadd + LD (IX+-4),BC + LD (IX+-1),A +; 65 ++frac; + LD BC,(IX+-12) + INC BC + LD (IX+-12),BC +; 66 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 67 } +L_11: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,48 + SBC HL,BC + CALL __setflag + JP M,L_24 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD HL,57 + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_12 +; 68 } +L_24: +; 69 +; 70 if (*str == 'e' || *str == 'E') { + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,101 + SBC HL,BC + JR Z,L_23 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,69 + SBC HL,BC + JR NZ,L_26 +L_23: +; 71 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 72 if (*str == '-') { + LD HL,BC + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,45 + SBC HL,BC + JR NZ,L_18 +; 73 exp_sign = -1; + LD (IX+-8),255 +; 74 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 75 } +; 76 else if (*str == '+') { + JR L_20 +L_18: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,43 + SBC HL,BC + JR NZ,L_20 +; 77 exp_sign = 1; + LD (IX+-8),1 +; 78 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 79 } +; 80 while (*str >= '0' && *str <= '9') { + JR L_20 +L_21: +; 81 exp = exp * 10 + (*str - '0'); + LD HL,(IX+-7) + LD A,10 + CALL __imul_b + LD IY,(IX+6) + LD A,(IY) + LD B,A + LD DE,HL + SEXT HL + LD L,B + LD IY,HL + LEA BC,IY+-48 + LD HL,DE + ADD HL,BC + LD (IX+-7),HL +; 82 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 83 } +L_20: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,48 + SBC HL,BC + CALL __setflag + JP M,L_26 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD HL,57 + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_21 +; 84 } +L_26: +; 85 +; 86 if (endptr) + LD HL,(IX+9) + CALL __icmpzero + JR Z,L_28 +; 87 *endptr = str; + LD HL,(IX+9) + LD BC,(IX+6) + LD (HL),BC +L_28: +; 88 +; 89 if (exp_sign < 0 ) + LD A,(IX+-8) + OR A,A + JP P,L_29 +; 90 exp = -exp; + LD HL,(IX+-7) + CALL __ineg + LD (IX+-7),HL +L_29: +; 91 exp -= frac; + LD BC,(IX+-12) + LD HL,(IX+-7) + OR A,A + SBC HL,BC + LD (IX+-7),HL +; 92 if (val.d != 0) + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,0 + XOR A,A + CALL __fcmp + JR NZ,L_32 + JR L_42 +; 93 { +; 94 while (exp > 0 ) +L_33: +; 95 { +; 96 val.d *= 10.0; + LD HL,2097152 + LD E,65 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fmul + LD (IX+-4),BC +; 97 if (val.s[1] == 0x7f80) + LEA HL,IX+-2 + LD (IX+-1),A + LD BC,(HL) + CALL __stoiu + OR A,A + LD BC,32640 + SBC HL,BC + JR NZ,L_31 +; 98 { +; 99 errno = ERANGE; + LD BC,5 + LD (_errno),BC +; 100 val.d = HUGE_VAL; + LD BC,(__huge_val) + LD A,(__huge_val+3) + LD (IX+-4),BC + LD (IX+-1),A +; 101 break; + JR L_36 +; 102 } +L_31: +; 103 --exp; + LD BC,(IX+-7) + DEC BC + LD (IX+-7),BC +; 104 } +L_32: + LD BC,(IX+-7) + OR A,A + SBC HL,HL + OR A,A + SBC HL,BC + CALL __setflag + JP M,L_33 +; 105 while (exp < 0 ) + JR L_36 +L_37: +; 106 { +; 107 val.d *= .1; + LD HL,13421773 + LD E,61 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fmul + LD (IX+-4),BC +; 108 if (val.s[1] == 0) + LEA HL,IX+-2 + LD (IX+-1),A + LD HL,(HL) + CALL __scmpzero + JR NZ,L_35 +; 109 { +; 110 errno = ERANGE; + LD BC,5 + LD (_errno),BC +; 111 break; + JR L_40 +; 112 } +L_35: +; 113 ++exp; + LD BC,(IX+-7) + INC BC + LD (IX+-7),BC +; 114 } +L_36: + LD HL,(IX+-7) + CALL __icmpzero + CALL __setflag + JP M,L_37 +L_40: +; 115 if (sign < 0 ) + LD A,(IX+-9) + OR A,A + JP P,L_42 +; 116 val.s[1] |= 0x8000; + LEA IY,IX+-2 + LD (IX+-15),IY + LD HL,(IX+-15) + LD HL,(HL) + LD.LIS BC,32768 + CALL __sor + LD BC,HL + LD HL,(IX+-15) + LD (HL),C + INC HL + LD (HL),B +; 117 } +L_42: +; 118 return val.d; + LD HL,(IX+-4) + LD E,(IX+-1) +; 119 } + LD SP,IX + POP IX + RET + + +;**************************** _strtod *************************** +;Name Addr/Register Size Type +;__huge_val IMPORT 4 variable +;_errno IMPORT 3 variable +;_isspace IMPORT ----- function +;frac IX-12 3 variable +;sign IX-9 1 variable +;exp_sign IX-8 1 variable +;exp IX-7 3 variable +;val IX-4 4 variable +;endptr IX+9 3 parameter +;str IX+6 3 parameter + + +; Stack Frame Size: 35 (bytes) +; Spill Code: 0 (instruction) + + + XREF _errno:ROM + XREF _isspace:ROM + XREF __huge_val:ROM + XREF __ineg:ROM + XREF __sor:ROM + XREF __fadd:ROM + XREF __fmul:ROM + XREF __fcmp:ROM + XREF __ltof:ROM + XREF __stoiu:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __scmpzero:ROM + XREF __icmpzero:ROM + XREF __imul_b:ROM + XDEF _strtod + END diff --git a/frontends/calculator/CEdev/lib/static/tan.src b/frontends/calculator/CEdev/lib/static/tan.src new file mode 100644 index 0000000..e921da1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/tan.src @@ -0,0 +1,330 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\TAN.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 /* +; 10 floating point tangent +; 11 +; 12 A series is used after range reduction. +; 13 Coefficients are #4285 from Hart & Cheney. (19.74D) +; 14 */ +; 15 +; 16 #include +; 17 #include +; 18 +; 19 #define invpi 1.27323954473516 +; 20 #define p0 -0.130682026475483e+5 +; 21 #define p1 0.105597090171495e+4 +; 22 #define p2 -0.155068565348327e+2 +; 23 #define p3 0.342255438724100e-1 +; 24 #define p4 0.338663864267717e-4 +; 25 #define q0 -0.166389523894712e+5 +; 26 #define q1 0.476575136291648e+4 +; 27 #define q2 -0.155503316403171e+3 +; 28 +; 29 double tan(double arg) +; 30 { +_tan: + LD HL,-26 + CALL __frameset +; 31 double sign, temp, e, x, xsq; +; 32 int flag, i; +; 33 +; 34 flag = 0; + LD BC,0 + LD (IX+-19),BC +; 35 sign = 1.; + LD BC,8388608 + LD (IX+-4),BC + LD A,63 + LD (IX+-1),A +; 36 if(arg < 0.){ + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_1 +; 37 arg = -arg; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+6),BC + LD (IX+9),A +; 38 sign = -1.; + LD BC,8388608 + LD (IX+-4),BC + LD A,191 + LD (IX+-1),A +; 39 } +L_1: +; 40 arg = arg*invpi; /*overflow?*/ + LD HL,10680707 + LD E,63 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fmul + LD (IX+6),BC + LD (IX+9),A +; 41 x = modf(arg,(double *)&e); + PEA IX+-26 + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _modf + POP BC + POP BC + POP BC + LD (IX+-8),HL + LD (IX+-5),E +; 42 i = e; + LD BC,(IX+-26) + LD A,(IX+-23) + CALL __ftol + LD (IX+-22),BC +; 43 switch(i%4) { + LD BC,4 + LD HL,(IX+-22) + CALL __irems + CALL __seqcase +L__1: + DW 4 + DW 0 + DB 0 + DW24 L_6 + + DW24 L_2 + + DW24 L_3 + + DW24 L_4 + + DW24 L_6 + +; 44 case 1: +L_2: +; 45 x = 1. - x; + LD HL,(IX+-8) + LD E,(IX+-5) + LD BC,8388608 + LD A,63 + CALL __fsub + LD (IX+-8),BC + LD (IX+-5),A +; 46 flag = 1; + LD BC,1 + LD (IX+-19),BC +; 47 break; + JR L_6 +; 48 +; 49 case 2: +L_3: +; 50 sign = - sign; + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fneg + LD (IX+-4),BC + LD (IX+-1),A +; 51 flag = 1; + LD BC,1 + LD (IX+-19),BC +; 52 break; + JR L_6 +; 53 +; 54 case 3: +L_4: +; 55 x = 1. - x; + LD HL,(IX+-8) + LD E,(IX+-5) + LD BC,8388608 + LD A,63 + CALL __fsub + LD (IX+-8),BC + LD (IX+-5),A +; 56 sign = - sign; + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fneg + LD (IX+-4),BC + LD (IX+-1),A +; 57 break; +; 58 +; 59 case 0: +; 60 break; +; 61 } +L_6: +; 62 +; 63 xsq = x*x; + LD HL,(IX+-8) + LD E,(IX+-5) + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __fmul + LD (IX+-12),BC + LD (IX+-9),A +; 64 temp = ((((p4*xsq+p3)*xsq+p2)*xsq+p1)*xsq+p0)*x; + LD HL,920513 + LD E,56 + CALL __fmul + LD HL,798741 + LD E,61 + CALL __fadd + LD HL,(IX+-12) + LD E,(IX+-9) + CALL __fmul + LD HL,7871510 + LD E,193 + CALL __fadd + LD HL,(IX+-12) + LD E,(IX+-9) + CALL __fmul + LD HL,8650514 + LD E,68 + CALL __fadd + LD HL,(IX+-12) + LD E,(IX+-9) + CALL __fmul + LD HL,4993232 + LD E,198 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD (IX+-16),BC + LD (IX+-13),A +; 65 temp = temp/(((1.0*xsq+q2)*xsq+q1)*xsq+q0); + LD BC,(IX+-12) + LD A,(IX+-9) + LD HL,1802457 + LD E,195 + CALL __fadd + LD HL,(IX+-12) + LD E,(IX+-9) + CALL __fmul + LD HL,9760259 + LD E,69 + CALL __fadd + LD HL,(IX+-12) + LD E,(IX+-9) + CALL __fmul + LD HL,8519144 + LD E,198 + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+-16) + LD A,(IX+-13) + CALL __fdiv + LD (IX+-16),BC + LD (IX+-13),A +; 66 +; 67 if(flag == 1) { + LD HL,(IX+-19) + OR A,A + LD BC,1 + SBC HL,BC + JR NZ,L_12 +; 68 if(temp == 0.) { + LD HL,(IX+-16) + LD E,(IX+-13) + LD BC,0 + XOR A,A + CALL __fcmp + JR NZ,L_10 +; 69 errno = ERANGE; + LD BC,5 + LD (_errno),BC +; 70 if (sign>0) + LD BC,(IX+-4) + LD A,(IX+-1) + OR A,A + SBC HL,HL + LD E,0 + CALL __fcmp + JP P,L_8 +; 71 return(HUGE_VAL); + LD HL,(__huge_val) + LD A,(__huge_val+3) + LD E,A + JR L_13 +L_8: +; 72 return(-HUGE_VAL); + LD BC,(__huge_val) + LD A,(__huge_val+3) + CALL __fneg + LD E,A + LD HL,BC + JR L_13 +; 73 } +L_10: +; 74 temp = 1./temp; + LD HL,(IX+-16) + LD E,(IX+-13) + LD BC,8388608 + LD A,63 + CALL __fdiv + LD (IX+-16),BC + LD (IX+-13),A +; 75 } +L_12: +; 76 return(sign*temp); + LD HL,(IX+-16) + LD E,(IX+-13) + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fmul + LD E,A + LD HL,BC +; 77 } +L_13: + LD SP,IX + POP IX + RET + + +;**************************** _tan *************************** +;Name Addr/Register Size Type +;__huge_val IMPORT 4 variable +;_errno IMPORT 3 variable +;_modf IMPORT ----- function +;e IX-26 4 variable +;i IX-22 3 variable +;flag IX-19 3 variable +;temp IX-16 4 variable +;xsq IX-12 4 variable +;x IX-8 4 variable +;sign IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 38 (bytes) +; Spill Code: 0 (instruction) + + + XREF _modf:ROM + XREF __huge_val:ROM + XREF _errno:ROM + XREF __irems:ROM + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __ftol:ROM + XREF __frameset:ROM + XREF __seqcase:ROM + XDEF _tan + END diff --git a/frontends/calculator/CEdev/lib/static/tanh.src b/frontends/calculator/CEdev/lib/static/tanh.src new file mode 100644 index 0000000..ca81134 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/tanh.src @@ -0,0 +1,129 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\TANH.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 /* +; 10 tanh(arg) computes the hyperbolic tangent of its floating +; 11 point argument. +; 12 +; 13 sinh and cosh are called except for large arguments, which +; 14 would cause overflow improperly. +; 15 */ +; 16 +; 17 #include +; 18 +; 19 double tanh(double arg) +; 20 { +_tanh: + LD HL,-10 + CALL __frameset +; 21 double sign; +; 22 +; 23 sign = 1.; + LD BC,8388608 + LD (IX+-4),BC + LD A,63 + LD (IX+-1),A +; 24 if(arg < 0.){ + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_2 +; 25 arg = -arg; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+6),BC + LD (IX+9),A +; 26 sign = -1.; + LD BC,8388608 + LD (IX+-4),BC + LD A,191 + LD (IX+-1),A +; 27 } +L_2: +; 28 +; 29 if(arg > 21.) + LD HL,11010048 + LD E,65 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_3 +; 30 return(sign); + LD HL,(IX+-4) + LD E,(IX+-1) + JR L_4 +L_3: +; 31 +; 32 return(sign*sinh(arg)/cosh(arg)); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _sinh + POP BC + POP BC + LD A,E + LD BC,HL + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD (IX+-7),BC + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + LD B,A + LD (IX+-10),BC + CALL _cosh + LD BC,(IX+-10) + POP IY + POP IY + LD A,B + LD BC,(IX+-7) + CALL __fdiv + LD E,A + LD HL,BC +; 33 } +L_4: + LD SP,IX + POP IX + RET + + +;**************************** _tanh *************************** +;Name Addr/Register Size Type +;_cosh IMPORT ----- function +;_sinh IMPORT ----- function +;sign IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 22 (bytes) +; Spill Code: 0 (instruction) + + + XREF _sinh:ROM + XREF _cosh:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __frameset:ROM + XDEF _tanh + END diff --git a/frontends/calculator/CEdev/lib/static/ufltinfo.src b/frontends/calculator/CEdev/lib/static/ufltinfo.src new file mode 100644 index 0000000..8d15a7d --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/ufltinfo.src @@ -0,0 +1,511 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UFLTINFO.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 +; 10 #define BIT_PACKING 0 +; 11 #if (BIT_PACKING == 1) +; 12 typedef union +; 13 { +; 14 float f; +; 15 struct { +; 16 unsigned long sign:1, +; 17 exponent:8, +; 18 mantissa:23; +; 19 } s; +; 20 long l; +; 21 } ieee_795_float; +; 22 #else +; 23 typedef union { +; 24 float f; +; 25 unsigned long l; +; 26 struct { +; 27 unsigned int exponent1:1; +; 28 unsigned int mantissa:23; +; 29 unsigned int dummy:16; +; 30 unsigned int sign:1, exponent2:7; +; 31 } s; +; 32 }ieee_795_float; +; 33 #define EXP(e) ((e##2 << 1) | (e##1)) +; 34 #endif +; 35 +; 36 +; 37 typedef long reg_t; +; 38 typedef unsigned long ureg_t; +; 39 /************************************************* +; 40 * +; 41 * _u_flt_info - Fills flt_info structure +; 42 * +; 43 * Inputs: +; 44 * val - value to be converted +; 45 * info - flt_info structure to be filled in. +; 46 * +; 47 * Outputs: +; 48 * info->sign - TRUE if val is negative; FALSE otherwise. +; 49 * info->exp - The power of ten in scientific notation. +; 50 * info->digits[] - The first digit is the ones place, the rest are +; 51 * decimal digits. +; 52 * +; 53 * Returns: +; 54 * nothing +; 55 * +; 56 * Notes: +; 57 * I moved the rounding out to the calling routine (which does it +; 58 * anyway). As a space optimization, we compute all the digits out +; 59 * to MAXDIGITS, so we no longer pay attention to ndig. +; 60 * This only works for floating-point numbers having the format as +; 61 * specified in the above structure. +; 62 * Algorithm: +; 63 * Too much precision is lost working in the floating-point domain, so we +; 64 * unpack the fields of the floating-point number, force the base-2 +; 65 * exponent to zero and then convert the normalized mantissa to decimal +; 66 * digits. +; 67 *************************************************/ +; 68 void _u_flt_info(float val,struct flt_info * info) +; 69 { +__u_flt_info: + LD HL,-25 + CALL __frameset +; 70 ieee_795_float rep; +; 71 register reg_t exp; // The base-2 exponent as a signed value. +; 72 register reg_t exp10 = 0; // The base-10 exponent. + LD BC,0 + LD (IX+-12),BC + XOR A,A + LD (IX+-9),A +; 73 register ureg_t mant; // The mantissa, as an unsigned value. +; 74 register ureg_t i; +; 75 +; 76 // Clear the info structure (represents +0.000000000). +; 77 memset(info,0,sizeof(struct flt_info)); + LD BC,12 + PUSH BC + LD BC,0 + PUSH BC + LD BC,(IX+12) + PUSH BC + CALL _memset + POP BC + POP BC + POP BC +; 78 +; 79 rep.f = val; + LD BC,(IX+6) + LD A,(IX+9) + LD (IX+-18),BC + LD (IX+-15),A +; 80 +; 81 // All zero means zero! +; 82 if (rep.l == 0) return; + LD HL,BC + LD E,(IX+-15) + CALL __lcmpzero + JR Z,L_26 +; 83 +; 84 if (rep.s.sign) + LD HL,(IX+-15) + LD A,16 + CALL __ishl_b + LD A,23 + CALL __ishru_b + CALL __icmpzero + JR Z,L_3 +; 85 info->flags = FLT_INFO_SIGN; + LD IY,(IX+12) + LD (IY+0),1 +L_3: +; 86 +; 87 // OK, unpack some fields. +; 88 +; 89 exp = EXP(rep.s.exponent); + LEA BC,IX+-18 + LD (IX+-25),BC + LD IY,(IX+-25) + LD HL,(IY+3) + LD A,17 + CALL __ishl_b + LD A,17 + CALL __ishru_b + ADD HL,HL + LD DE,HL + LD HL,(IY+0) + LD A,23 + CALL __ishru_b + LD BC,HL + LD HL,DE + CALL __ior + LD BC,HL + CALL __itol + LD (IX+-8),BC + LD (IX+-5),A +; 90 +; 91 mant = rep.s.mantissa; + LD HL,(IY+0) + ADD HL,HL + LD A,1 + CALL __ishru_b + LD BC,HL + CALL __itol + LD (IX+-4),BC + LD (IX+-1),A +; 92 +; 93 // If the exponent is 0xff, it is a special representation (Inf or NaN). +; 94 if (exp == 0xff) + LD HL,(IX+-8) + LD E,(IX+-5) + XOR A,A + LD BC,255 + CALL __lcmps + JR NZ,L_9 +; 95 { +; 96 // If the mantissa is zero, it's Inf; otherwise, NaN. +; 97 if (rep.s.mantissa == 0) + LD HL,(IX+-18) + ADD HL,HL + LD A,1 + CALL __ishru_b + CALL __icmpzero + JR NZ,L_5 +; 98 info->flags |= FLT_INFO_INF; + LD IY,(IX+12) + LD A,(IY+0) + SET 1,A + LD (IY+0),A +; 99 else + JR L_26 +L_5: +; 100 info->flags |= FLT_INFO_NAN; + LD IY,(IX+12) + LD A,(IY+0) + SET 2,A + LD (IY+0),A +; 101 return; + JR L_26 +; 102 } +L_9: +; 103 +; 104 // If the exponent is zero, this is a denormalized number. +; 105 if (exp != 0) + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __lcmpzero + JR Z,L_10 +; 106 { +; 107 mant |= 0x800000uL; // Or in the implicit bit. + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,8388608 + XOR A,A + CALL __lor + LD (IX+-4),HL + LD (IX+-1),E +; 108 --exp; // And decrement the exponent. + LD HL,(IX+-8) + LD E,(IX+-5) + LD BC,16777215 + LD A,255 + CALL __ladd + LD (IX+-8),HL + LD (IX+-5),E +; 109 // (denormalized numbers are offset 126, not offset 127. +; 110 // In the assembly realm, we could handle this in one step by shifting the 1 +; 111 // into the msb of a left-adjusted 23-bit mantissa. +; 112 } +L_10: +; 113 +; 114 // Now, we have something that looks like +; 115 // 0000 0000 x.xxx xxxx xxxx xxxx xxxx xxxx +; 116 // in mant, and the binary exponent -- offset by +126 -- in exp. +; 117 // +; 118 // Now, we want to shift the mantissa left so we leave a few guard bits at the +; 119 // right end of the word, but we also want to leave four bits to the left of +; 120 // the decimal point so we can pick off the decimal digits later. +; 121 // +; 122 // If we move the decimal point from where it is to the right end of the first +; 123 // nibble, we essentially subtract 5 bits from the offset. But shifting the +; 124 // mantissa left by the same number of bits cancels the difference. +; 125 // Let's do the shift and subtract the remaining offset. +; 126 mant <<= 5; + LD BC,(IX+-4) + LD A,(IX+-1) + LD L,5 + CALL __lshl + LD (IX+-4),BC + LD (IX+-1),A +; 127 exp -= 126; + LD HL,(IX+-8) + LD E,(IX+-5) + LD A,255 + LD BC,16777090 + CALL __ladd + LD (IX+-8),HL + LD (IX+-5),E +; 128 +; 129 // Now the picture is +; 130 // 000x.xxxx xxxx xxxx xxxx xxxx xxx0 0000 +; 131 +; 132 // We want to drive the base-2 exponent to zero, and accumulate multiplication +; 133 // or division by 10 in the base-10 exponent. +; 134 // We start by decrementing the exponent while shifting the bits in the +; 135 // mantissa left by 1 each time. This changes the representation, but not its +; 136 // value. +; 137 // If the msb becomes true, a shift would cause us to lose information, so in +; 138 // that case, we divide the mantissa by 10 and increment the base-10 +; 139 // exponent. Once again, this changes the bits in the representation, but not +; 140 // the value that is represented -- at least not very much. Division by 10 +; 141 // may cause bits to fall of the end of the 32-bit word, and some precision is +; 142 // lost. But we always have a whole nibble, plus about 2/3 of a bit as guard +; 143 // bits. +; 144 +; 145 +; 146 // At most one of the following while loops will execute. +; 147 +; 148 // If the base-2 exponent is positive, this while loop drives it to zero by +; 149 // repeatedly shifting the mantissa left by one bit and decrementing the exponent. +; 150 // This changes the representation, but leaves unchanged the value +; 151 // it represents. +; 152 while (exp > 0) + JR L_14 +L_15: +; 153 { +; 154 if ((mant >> 27) > 9) + LD BC,(IX+-4) + LD A,(IX+-1) + LD L,27 + CALL __lshru + LD HL,9 + CALL __lcmpu + JR NC,L_12 +; 155 { +; 156 // If a left shift would cause something greater than 9 to appear in the +; 157 // first nibble, normalize right. +; 158 mant /= 5; + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,5 + XOR A,A + CALL __ldivu + LD (IX+-4),HL + LD (IX+-1),E +; 159 ++exp10; + LD HL,(IX+-12) + LD E,(IX+-9) + LD A,1 + CALL __ladd_b + LD (IX+-12),HL + LD (IX+-9),E +; 160 } +; 161 else + JR L_13 +L_12: +; 162 mant <<= 1; + LD BC,(IX+-4) + LD A,(IX+-1) + LD L,1 + CALL __lshl + LD (IX+-4),BC + LD (IX+-1),A +L_13: +; 163 // Dividing by 5 and adding one to the base-10 exponent is the same as +; 164 // shifting left by one bit: They both multiply the representation by two. +; 165 // Decrementing the base-2 exponent leaves the entire representation unchanged. +; 166 --exp; + LD HL,(IX+-8) + LD E,(IX+-5) + LD BC,16777215 + LD A,255 + CALL __ladd + LD (IX+-8),HL + LD (IX+-5),E +; 167 } +L_14: + OR A,A + SBC HL,HL + LD E,0 + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __lcmps + CALL __setflag + JP M,L_15 +; 168 +; 169 // If the base-2 exponent is negative, this while loop drives it to zero by +; 170 // repeatedly shifting the mantissa right by one bit and incrementing the exponent. +; 171 while (exp < 0) + JR L_19 +L_20: +; 172 { +; 173 if ((mant >> 28) < 2) + LD BC,(IX+-4) + LD A,(IX+-1) + LD L,28 + CALL __lshru + LD E,A + LD HL,BC + LD BC,2 + XOR A,A + CALL __lcmpu + JR NC,L_17 +; 174 { +; 175 // If a right shift would cause the first nibble to go to zero, normalize left. +; 176 mant *= 5; + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,5 + XOR A,A + CALL __lmulu + LD (IX+-4),HL + LD (IX+-1),E +; 177 --exp10; + LD HL,(IX+-12) + LD E,(IX+-9) + LD BC,16777215 + LD A,255 + CALL __ladd + LD (IX+-12),HL + LD (IX+-9),E +; 178 } +; 179 else + JR L_18 +L_17: +; 180 mant >>= 1; + LD BC,(IX+-4) + LD A,(IX+-1) + LD L,1 + CALL __lshru + LD (IX+-4),BC + LD (IX+-1),A +L_18: +; 181 // Multiplying by 5 and subtracting one from the base-10 exponent is the +; 182 // same as shifting right by one bit: They both divide the representation by 2. +; 183 // Incrementing the base-2 exponent leaves the entire representation unchanged. +; 184 ++exp; + LD HL,(IX+-8) + LD E,(IX+-5) + LD A,1 + CALL __ladd_b + LD (IX+-8),HL + LD (IX+-5),E +; 185 } +L_19: + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __lcmpzero + CALL __setflag + JP M,L_20 +; 186 +; 187 // Now, that we have driven the base-2 exponent to zero, the base-10 exponent +; 188 // is ready. +; 189 info->exp = exp10; + LD A,(IX+-12) + LD IY,(IX+12) + LD (IY+1),A +; 190 +; 191 // Finally, we can pick off the digits. +; 192 // This is done by picking off the first nibble (which must be a decimal digit +; 193 // between 1 and 9 inclusive) and then multiplying the remaining 28 bits by +; 194 // 10. That leaves another decimal digit (in [0,9]) in the top nibble, so we +; 195 // just loop for as many digits as we want. +; 196 for (i=0; i < MAXDIGITS; ++i) + LD BC,0 + LD (IX+-22),BC + XOR A,A + LD (IX+-19),A + JR L_25 +L_23: +; 197 { +; 198 info->digits[i] = mant >> 28; + LD BC,(IX+-4) + LD A,(IX+-1) + LD L,28 + CALL __lshru + LD IY,(IX+12) + LEA HL,IY+2 + LD DE,(IX+-22) + ADD HL,DE + LD (HL),C +; 199 mant &= 0xfffffffuL; + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,16777215 + LD A,15 + CALL __land + LD (IX+-4),HL + LD (IX+-1),E +; 200 mant *= 10; + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,10 + XOR A,A + CALL __lmulu + LD (IX+-4),HL + LD (IX+-1),E + LD HL,(IX+-22) + LD E,(IX+-19) + LD A,1 + CALL __ladd_b + LD (IX+-22),HL + LD (IX+-19),E +; 201 } +L_25: + LD HL,(IX+-22) + LD E,(IX+-19) + LD BC,10 + XOR A,A + CALL __lcmpu + JR C,L_23 +; 202 +; 203 /* Rounding moved out to callers of _u_flt_info(). */ +; 204 } +L_26: + LD SP,IX + POP IX + RET + + +;**************************** __u_flt_info *************************** +;Name Addr/Register Size Type +;_memset IMPORT ----- function +;i IX-22 4 variable +;rep IX-18 6 variable +;exp10 IX-12 4 variable +;exp IX-8 4 variable +;mant IX-4 4 variable +;info IX+12 3 parameter +;val IX+6 4 parameter + + +; Stack Frame Size: 40 (bytes) +; Spill Code: 0 (instruction) + + + XREF _memset:ROM + XREF __lcmps:ROM + XREF __lcmpu:ROM + XREF __ladd:ROM + XREF __ldivu:ROM + XREF __lmulu:ROM + XREF __ior:ROM + XREF __lor:ROM + XREF __land:ROM + XREF __lshl:ROM + XREF __lshru:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XREF __lcmpzero:ROM + XREF __ladd_b:ROM + XREF __ishl_b:ROM + XREF __ishru_b:ROM + XDEF __u_flt_info + END diff --git a/frontends/calculator/CEdev/lib/static/ufltrnd.src b/frontends/calculator/CEdev/lib/static/ufltrnd.src new file mode 100644 index 0000000..2c1a2be --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/ufltrnd.src @@ -0,0 +1,210 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UFLTRND.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 /************************************************* +; 10 * +; 11 * _u_flt_rnd - Round to specified number of digits +; 12 * +; 13 * Inputs: +; 14 * info - flt_info structure +; 15 * digits - number of digits of precision +; 16 * +; 17 * Returns: +; 18 * nothing +; 19 * +; 20 *************************************************/ +; 21 void _u_flt_rnd(struct flt_info *info, char digits) +; 22 { +__u_flt_rnd: + LD HL,-18 + CALL __frameset +; 23 register unsigned char i; +; 24 register unsigned char carry,any; +; 25 +; 26 if (digits <= 0) + XOR A,A + CP A,(IX+9) + CALL __setflag + JP P,L_14 +; 27 return; +; 28 +; 29 carry = any = 0; + LD (IX+-3),0 + LD (IX+-2),0 +; 30 for (i = MAXDIGITS-1; i >= digits; -- i) { + LD (IX+-1),9 + JR L_4 +L_2: +; 31 carry = info->digits[i] >= 5; + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,HL + LD IY,(IX+6) + LEA HL,IY+2 + ADD HL,BC + LD (IX+-9),HL + LD A,(HL) + UEXT HL + LD L,A + OR A,A + LD BC,5 + SBC HL,BC + CALL __setflag + JP M,L__2 + LD A,1 + JR L__3 +L__2: + XOR A,A +L__3: + LD (IX+-2),A +; 32 any |= info->digits[i]; + LD HL,(IX+-9) + LD A,(HL) + OR A,(IX+-3) + LD (IX+-3),A +; 33 info->digits[i] = 0; + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,HL + LD IY,(IX+6) + LEA HL,IY+2 + ADD HL,BC + LD (HL),0 + DEC (IX+-1) +; 34 } +L_4: + LD A,(IX+-1) + CP A,(IX+9) + JR NC,L_2 +; 35 +; 36 if (carry) + LD A,(IX+-2) + OR A,A + JR Z,L_9 +; 37 ++info->digits[i]; + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,HL + LD IY,(IX+6) + LEA HL,IY+2 + ADD HL,BC + LD (IX+-18),HL ; spill + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,HL + LEA HL,IY+2 + ADD HL,BC + LD (IX+-15),HL ; spill + LD HL,(IX+-18) ; unspill + LD A,(HL) + LD HL,(IX+-15) ; unspill + INC A + LD (HL),A +; 38 while (i > 0 && info->digits[i] == 10) { + JR L_9 +L_10: +; 39 info->digits[i] = 0; + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,(IX+-6) + ADD HL,BC + LD (HL),0 +; 40 --i; + DEC (IX+-1) +; 41 info->digits[i]++; + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,(IX+-6) + ADD HL,BC + LD (IX+-12),HL + LD A,(IX+-1) + UEXT HL + LD L,A + LD IY,(IX+-12) + LD BC,(IX+-6) + ADD HL,BC + LD A,(IY) + INC A + LD (HL),A +; 42 } +L_9: + XOR A,A + CP A,(IX+-1) + JR NC,L_13 + LD IY,(IX+6) + LEA BC,IY+2 + LD (IX+-6),BC + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,HL + LEA HL,IY+2 + ADD HL,BC + LD A,(HL) + UEXT HL + LD L,A + OR A,A + LD BC,10 + SBC HL,BC + JR Z,L_10 +L_13: +; 43 +; 44 if (info->digits[0] == 10) { + LD IY,(IX+6) + LD A,(IY+2) + UEXT HL + LD L,A + OR A,A + LD BC,10 + SBC HL,BC + JR NZ,L_14 +; 45 ++info->exp; + LD IY,(IX+6) + LD A,(IY+1) + INC A + LD (IY+1),A +; 46 info->digits[0] = 1; + LD (IY+2),1 +; 47 } +; 48 } +L_14: + LD SP,IX + POP IX + RET + + +;**************************** __u_flt_rnd *************************** +;Name Addr/Register Size Type +;G_0 IX-6 3 variable +;any IX-3 1 variable +;carry IX-2 1 variable +;i IX-1 1 variable +;digits IX+9 1 parameter +;info IX+6 3 parameter + + +; Stack Frame Size: 30 (bytes) +; Spill Code: 0 (instruction) + + + XREF __frameset:ROM + XREF __setflag:ROM + XDEF __u_flt_rnd + END -- cgit v1.2.3-101-g0448