summaryrefslogtreecommitdiff
path: root/frontends/calculator/CEdev
diff options
context:
space:
mode:
Diffstat (limited to 'frontends/calculator/CEdev')
-rw-r--r--frontends/calculator/CEdev/bin/C1ERRORS.DAT181
-rw-r--r--frontends/calculator/CEdev/bin/License120
-rwxr-xr-xfrontends/calculator/CEdev/bin/PLCError.dllbin0 -> 29184 bytes
-rwxr-xr-xfrontends/calculator/CEdev/bin/convhexbin0 -> 22664 bytes
-rwxr-xr-xfrontends/calculator/CEdev/bin/convpngbin0 -> 158920 bytes
-rwxr-xr-xfrontends/calculator/CEdev/bin/convtilebin0 -> 28040 bytes
-rw-r--r--frontends/calculator/CEdev/bin/eZ80.ini18
-rwxr-xr-xfrontends/calculator/CEdev/bin/ez80cc.con23
-rwxr-xr-xfrontends/calculator/CEdev/bin/ez80cc.exebin0 -> 77824 bytes
-rwxr-xr-xfrontends/calculator/CEdev/bin/fasmgbin0 -> 52454 bytes
-rwxr-xr-xfrontends/calculator/CEdev/bin/make.exebin0 -> 208896 bytes
-rwxr-xr-xfrontends/calculator/CEdev/bin/p1.exebin0 -> 294912 bytes
-rwxr-xr-xfrontends/calculator/CEdev/bin/p2.exebin0 -> 188416 bytes
-rwxr-xr-xfrontends/calculator/CEdev/bin/p3.exebin0 -> 835584 bytes
-rw-r--r--frontends/calculator/CEdev/bin/zds2.version7
-rw-r--r--frontends/calculator/CEdev/examples/debugging/bin/DEMO.8xpbin0 -> 584 bytes
-rw-r--r--frontends/calculator/CEdev/examples/debugging/bin/DEMO.binbin0 -> 508 bytes
-rw-r--r--frontends/calculator/CEdev/examples/debugging/bin/DEMO.dbgbin0 -> 971 bytes
-rw-r--r--frontends/calculator/CEdev/examples/debugging/bin/DEMO.map35
-rw-r--r--frontends/calculator/CEdev/examples/debugging/makefile18
-rw-r--r--frontends/calculator/CEdev/examples/debugging/obj/main.src484
-rw-r--r--frontends/calculator/CEdev/examples/debugging/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/debugging/screenshot.pngbin0 -> 139570 bytes
-rw-r--r--frontends/calculator/CEdev/examples/debugging/src/main.c47
-rw-r--r--frontends/calculator/CEdev/examples/delay/autotester.json39
-rw-r--r--frontends/calculator/CEdev/examples/delay/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/delay/readme.md9
-rw-r--r--frontends/calculator/CEdev/examples/delay/src/main.c16
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detect/autotester.json33
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.8xpbin0 -> 557 bytes
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.binbin0 -> 481 bytes
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.map148
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detect/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detect/obj/main.src182
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detect/readme.md11
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detect/screenshot.pngbin0 -> 1369 bytes
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detect/src/main.c47
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detectany/autotester.json33
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.8xpbin0 -> 568 bytes
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.binbin0 -> 492 bytes
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.map148
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detectany/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detectany/obj/main.src190
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detectany/readme.md11
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detectany/screenshot.pngbin0 -> 1369 bytes
-rw-r--r--frontends/calculator/CEdev/examples/fileio_detectany/src/main.c49
-rw-r--r--frontends/calculator/CEdev/examples/fileio_factorize/autotester.badjson37
-rw-r--r--frontends/calculator/CEdev/examples/fileio_factorize/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/fileio_factorize/readme.md12
-rw-r--r--frontends/calculator/CEdev/examples/fileio_factorize/screenshot.pngbin0 -> 2335 bytes
-rw-r--r--frontends/calculator/CEdev/examples/fileio_factorize/src/main.c75
-rw-r--r--frontends/calculator/CEdev/examples/fileio_os_vars/autotester.badjson65
-rw-r--r--frontends/calculator/CEdev/examples/fileio_os_vars/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/fileio_os_vars/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/fileio_os_vars/screenshot.pngbin0 -> 3032 bytes
-rw-r--r--frontends/calculator/CEdev/examples/fileio_os_vars/src/main.c101
-rw-r--r--frontends/calculator/CEdev/examples/fileio_read_write/autotester.json33
-rw-r--r--frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.8xpbin0 -> 827 bytes
-rw-r--r--frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.binbin0 -> 751 bytes
-rw-r--r--frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.map154
-rw-r--r--frontends/calculator/CEdev/examples/fileio_read_write/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/fileio_read_write/obj/main.src343
-rw-r--r--frontends/calculator/CEdev/examples/fileio_read_write/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/fileio_read_write/screenshot.pngbin0 -> 54385 bytes
-rw-r--r--frontends/calculator/CEdev/examples/fileio_read_write/src/main.c88
-rw-r--r--frontends/calculator/CEdev/examples/fileio_rename/autotester.json33
-rw-r--r--frontends/calculator/CEdev/examples/fileio_rename/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/fileio_rename/readme.md8
-rw-r--r--frontends/calculator/CEdev/examples/fileio_rename/src/main.c77
-rw-r--r--frontends/calculator/CEdev/examples/fileio_tokens/autotester.json33
-rw-r--r--frontends/calculator/CEdev/examples/fileio_tokens/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/fileio_tokens/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/fileio_tokens/screenshot.pngbin0 -> 1702 bytes
-rw-r--r--frontends/calculator/CEdev/examples/fileio_tokens/src/main.c59
-rw-r--r--frontends/calculator/CEdev/examples/gfx_blitting/autotester.json46
-rw-r--r--frontends/calculator/CEdev/examples/gfx_blitting/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_blitting/readme.md7
-rw-r--r--frontends/calculator/CEdev/examples/gfx_blitting/src/main.c47
-rw-r--r--frontends/calculator/CEdev/examples/gfx_buffered_cube/autotester.json40
-rw-r--r--frontends/calculator/CEdev/examples/gfx_buffered_cube/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_buffered_cube/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_buffered_cube/screenshot.gifbin0 -> 103190 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_buffered_cube/src/main.c113
-rw-r--r--frontends/calculator/CEdev/examples/gfx_char/autotester.json30
-rw-r--r--frontends/calculator/CEdev/examples/gfx_char/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_char/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_char/screenshot.pngbin0 -> 967 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_char/src/main.c52
-rw-r--r--frontends/calculator/CEdev/examples/gfx_clipping/autotester.json52
-rw-r--r--frontends/calculator/CEdev/examples/gfx_clipping/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_clipping/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_clipping/screenshot.gifbin0 -> 94716 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_clipping/src/main.c85
-rw-r--r--frontends/calculator/CEdev/examples/gfx_floodfill/autotester.json36
-rw-r--r--frontends/calculator/CEdev/examples/gfx_floodfill/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_floodfill/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_floodfill/screenshot.gifbin0 -> 8036 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_floodfill/src/main.c50
-rw-r--r--frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/autotester.json31
-rw-r--r--frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/readme.md9
-rw-r--r--frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/screenshot.pngbin0 -> 143527 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/convpng.ini15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tiles_gfx.c4
-rw-r--r--frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tiles_gfx.h8
-rw-r--r--frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tileset.c18
-rw-r--r--frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tileset.pngbin0 -> 182649 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.8xvbin0 -> 56118 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.c31
-rw-r--r--frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.h31
-rw-r--r--frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/main.c66
-rw-r--r--frontends/calculator/CEdev/examples/gfx_hello_world/autotester.json40
-rw-r--r--frontends/calculator/CEdev/examples/gfx_hello_world/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_hello_world/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_hello_world/screenshot.pngbin0 -> 856 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_hello_world/src/main.c46
-rw-r--r--frontends/calculator/CEdev/examples/gfx_light_dark/autotester.json63
-rw-r--r--frontends/calculator/CEdev/examples/gfx_light_dark/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_light_dark/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_light_dark/screenshot.gifbin0 -> 67785 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_light_dark/src/main.c59
-rw-r--r--frontends/calculator/CEdev/examples/gfx_rletsprite/autotester.json30
-rw-r--r--frontends/calculator/CEdev/examples/gfx_rletsprite/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_rletsprite/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_rletsprite/screenshot.pngbin0 -> 6999 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/convpng.ini5
-rw-r--r--frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/logo_gfx.c203
-rw-r--r--frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/logo_gfx.h17
-rw-r--r--frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/ubuntu.c25
-rw-r--r--frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/ubuntu.pngbin0 -> 1427 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_rletsprite/src/main.c109
-rw-r--r--frontends/calculator/CEdev/examples/gfx_shapes_shift/autotester.json63
-rw-r--r--frontends/calculator/CEdev/examples/gfx_shapes_shift/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_shapes_shift/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_shapes_shift/screenshot.gifbin0 -> 14726 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_shapes_shift/src/main.c112
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite/autotester.json31
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite/screenshot.pngbin0 -> 6597 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/convpng.ini4
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/logo_gfx.c195
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/logo_gfx.h17
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/ubuntu.c40
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/ubuntu.pngbin0 -> 1404 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite/src/main.c39
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_compress/autotester.json33
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_compress/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_compress/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_compress/screenshot.pngbin0 -> 29221 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/all_gfx.c262
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/all_gfx.h13
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/apple.c667
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/apple.pngbin0 -> 59927 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/convpng.ini5
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_compress/src/main.c45
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_keys/autotester.json31
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_keys/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_keys/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_keys/screenshot.gifbin0 -> 57679 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/convpng.ini4
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/logo_gfx.c195
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/logo_gfx.h17
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/ubuntu.c40
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/ubuntu.pngbin0 -> 1404 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_keys/src/main.c89
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate/autotester.json33
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate/screenshot.pngbin0 -> 5159 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/convpng.ini4
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/logo_gfx.c196
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/logo_gfx.h15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/ubuntu.c40
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/ubuntu.pngbin0 -> 1404 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/main.c37
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/autotester.json33
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/readme.md9
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/screenshot.gifbin0 -> 238242 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/convpng.ini4
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/logo_gfx.c196
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/logo_gfx.h15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/ubuntu.c40
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/ubuntu.pngbin0 -> 1404 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/main.c44
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprites_appvar/autotester.json31
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprites_appvar/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprites_appvar/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprites_appvar/screenshot.pngbin0 -> 2839 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/all_gfx.c4
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/all_gfx.h8
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/convpng.ini16
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/mint.c4
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/mint.pngbin0 -> 1809 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/ubuntu.c4
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/ubuntu.pngbin0 -> 1404 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.8xvbin0 -> 2640 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.c27
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.h18
-rw-r--r--frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/main.c42
-rw-r--r--frontends/calculator/CEdev/examples/gfx_template/iconc.pngbin0 -> 910 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_template/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_template/readme.md12
-rw-r--r--frontends/calculator/CEdev/examples/gfx_template/src/main.c64
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap/autotester.json43
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap/screenshot.gifbin0 -> 360772 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/convpng.ini5
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tiles_gfx.c82
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tiles_gfx.h271
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tileset.c2694
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tileset.pngbin0 -> 12899 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap/src/main.c102
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap/src/tilemapdata.c30
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_appvar/autotester.json43
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_appvar/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_appvar/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_appvar/screenshot.gifbin0 -> 360772 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/convpng.ini14
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tiles_gfx.c4
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tiles_gfx.h10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tileset.c134
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tileset.pngbin0 -> 12899 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.8xvbin0 -> 33252 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.c31
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.h148
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/main.c106
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/tilemapdata.c30
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_compress/autotester.json43
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_compress/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_compress/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/convpng.ini6
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tiles_gfx.c82
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tiles_gfx.h142
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tileset.c726
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tileset.pngbin0 -> 12899 bytes
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/main.c119
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/tilemapdata.c16
-rw-r--r--frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/tilemapdata.h9
-rw-r--r--frontends/calculator/CEdev/examples/hello_world/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/hello_world/readme.md9
-rw-r--r--frontends/calculator/CEdev/examples/hello_world/screenshot.pngbin0 -> 1701 bytes
-rw-r--r--frontends/calculator/CEdev/examples/hello_world/src/main.c48
-rw-r--r--frontends/calculator/CEdev/examples/keypad_arrows/autotester.json61
-rw-r--r--frontends/calculator/CEdev/examples/keypad_arrows/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/keypad_arrows/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/keypad_arrows/screenshot.gifbin0 -> 6859 bytes
-rw-r--r--frontends/calculator/CEdev/examples/keypad_arrows/src/main.c49
-rw-r--r--frontends/calculator/CEdev/examples/keypad_multiple_keys/autotester.json62
-rw-r--r--frontends/calculator/CEdev/examples/keypad_multiple_keys/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/keypad_multiple_keys/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/keypad_multiple_keys/screenshot.gifbin0 -> 5495 bytes
-rw-r--r--frontends/calculator/CEdev/examples/keypad_multiple_keys/src/main.c60
-rw-r--r--frontends/calculator/CEdev/examples/lcd_fade/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/lcd_fade/readme.md8
-rw-r--r--frontends/calculator/CEdev/examples/lcd_fade/src/main.c29
-rw-r--r--frontends/calculator/CEdev/examples/lcd_fill/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/lcd_fill/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/lcd_fill/screenshot.gifbin0 -> 6473 bytes
-rw-r--r--frontends/calculator/CEdev/examples/lcd_fill/src/main.c30
-rw-r--r--frontends/calculator/CEdev/examples/makefile12
-rw-r--r--frontends/calculator/CEdev/examples/os_input/autotester.json38
-rw-r--r--frontends/calculator/CEdev/examples/os_input/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/os_input/readme.md9
-rw-r--r--frontends/calculator/CEdev/examples/os_input/screenshot.pngbin0 -> 7676 bytes
-rw-r--r--frontends/calculator/CEdev/examples/os_input/src/main.c36
-rw-r--r--frontends/calculator/CEdev/examples/random/autotester.json30
-rw-r--r--frontends/calculator/CEdev/examples/random/bin/DEMO.8xpbin0 -> 381 bytes
-rw-r--r--frontends/calculator/CEdev/examples/random/bin/DEMO.binbin0 -> 305 bytes
-rw-r--r--frontends/calculator/CEdev/examples/random/bin/DEMO.map143
-rw-r--r--frontends/calculator/CEdev/examples/random/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/random/obj/main.src69
-rw-r--r--frontends/calculator/CEdev/examples/random/readme.md9
-rw-r--r--frontends/calculator/CEdev/examples/random/screenshot.pngbin0 -> 213249 bytes
-rw-r--r--frontends/calculator/CEdev/examples/random/src/main.c19
-rw-r--r--frontends/calculator/CEdev/examples/random/test/expected.binbin0 -> 153600 bytes
-rw-r--r--frontends/calculator/CEdev/examples/real_time_clock/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/real_time_clock/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/real_time_clock/screenshot.gifbin0 -> 9251 bytes
-rw-r--r--frontends/calculator/CEdev/examples/real_time_clock/src/main.c39
-rw-r--r--frontends/calculator/CEdev/examples/second_counter/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/second_counter/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/second_counter/screenshot.gifbin0 -> 5999 bytes
-rw-r--r--frontends/calculator/CEdev/examples/second_counter/src/main.c43
-rw-r--r--frontends/calculator/CEdev/examples/second_counter2/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/second_counter2/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/second_counter2/screenshot.gifbin0 -> 4146 bytes
-rw-r--r--frontends/calculator/CEdev/examples/second_counter2/src/main.c57
-rw-r--r--frontends/calculator/CEdev/examples/stopwatch/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/stopwatch/readme.md10
-rw-r--r--frontends/calculator/CEdev/examples/stopwatch/screenshot.pngbin0 -> 40879 bytes
-rw-r--r--frontends/calculator/CEdev/examples/stopwatch/src/main.c60
-rw-r--r--frontends/calculator/CEdev/examples/template/iconc.pngbin0 -> 910 bytes
-rw-r--r--frontends/calculator/CEdev/examples/template/makefile15
-rw-r--r--frontends/calculator/CEdev/examples/template/readme.md14
-rw-r--r--frontends/calculator/CEdev/examples/template/src/main.c30
-rw-r--r--frontends/calculator/CEdev/include/.linker_script305
-rw-r--r--frontends/calculator/CEdev/include/.makefile213
-rw-r--r--frontends/calculator/CEdev/include/assert.h19
-rw-r--r--frontends/calculator/CEdev/include/compression.h27
-rw-r--r--frontends/calculator/CEdev/include/ctype.h30
-rw-r--r--frontends/calculator/CEdev/include/debug.h124
-rw-r--r--frontends/calculator/CEdev/include/decompress.h23
-rw-r--r--frontends/calculator/CEdev/include/errno.h15
-rw-r--r--frontends/calculator/CEdev/include/fasmg-ez80/ez80.inc862
-rw-r--r--frontends/calculator/CEdev/include/fasmg-ez80/ld.fasmg759
-rw-r--r--frontends/calculator/CEdev/include/fasmg-ez80/ti84pceg.inc61
-rw-r--r--frontends/calculator/CEdev/include/fasmg-ez80/tiformat.inc105
-rw-r--r--frontends/calculator/CEdev/include/fileioc.h509
-rw-r--r--frontends/calculator/CEdev/include/float.h75
-rw-r--r--frontends/calculator/CEdev/include/format.h109
-rw-r--r--frontends/calculator/CEdev/include/graphx.h1514
-rw-r--r--frontends/calculator/CEdev/include/intce.h93
-rw-r--r--frontends/calculator/CEdev/include/iso646.h18
-rw-r--r--frontends/calculator/CEdev/include/keypadc.h255
-rw-r--r--frontends/calculator/CEdev/include/lib/ce/fileioc.h2
-rw-r--r--frontends/calculator/CEdev/include/lib/ce/graphx.h2
-rw-r--r--frontends/calculator/CEdev/include/lib/ce/keypadc.h2
-rw-r--r--frontends/calculator/CEdev/include/limits.h35
-rw-r--r--frontends/calculator/CEdev/include/math.h67
-rw-r--r--frontends/calculator/CEdev/include/setjmp.h21
-rw-r--r--frontends/calculator/CEdev/include/stdarg.h15
-rw-r--r--frontends/calculator/CEdev/include/stdbool.h23
-rw-r--r--frontends/calculator/CEdev/include/stddef.h28
-rw-r--r--frontends/calculator/CEdev/include/stdint.h19
-rw-r--r--frontends/calculator/CEdev/include/stdio.h66
-rw-r--r--frontends/calculator/CEdev/include/stdlib.h102
-rw-r--r--frontends/calculator/CEdev/include/string.h49
-rw-r--r--frontends/calculator/CEdev/include/tice.h2082
-rw-r--r--frontends/calculator/CEdev/include/usb.h52
-rw-r--r--frontends/calculator/CEdev/lib/ccleanup.src14
-rw-r--r--frontends/calculator/CEdev/lib/cstartup.src75
-rw-r--r--frontends/calculator/CEdev/lib/fileio/fclose.src53
-rw-r--r--frontends/calculator/CEdev/lib/fileio/feof.src88
-rw-r--r--frontends/calculator/CEdev/lib/fileio/fgetc.src39
-rw-r--r--frontends/calculator/CEdev/lib/fileio/fgets.src121
-rw-r--r--frontends/calculator/CEdev/lib/fileio/files.src13
-rw-r--r--frontends/calculator/CEdev/lib/fileio/fopen.src71
-rw-r--r--frontends/calculator/CEdev/lib/fileio/fputc.src43
-rw-r--r--frontends/calculator/CEdev/lib/fileio/fputs.src101
-rw-r--r--frontends/calculator/CEdev/lib/fileio/fread.src51
-rw-r--r--frontends/calculator/CEdev/lib/fileio/fseek.src47
-rw-r--r--frontends/calculator/CEdev/lib/fileio/ftell.src43
-rw-r--r--frontends/calculator/CEdev/lib/fileio/fwrite.src51
-rw-r--r--frontends/calculator/CEdev/lib/fileio/remove.src50
-rw-r--r--frontends/calculator/CEdev/lib/libheader.src55
-rw-r--r--frontends/calculator/CEdev/lib/libload.lib1
-rw-r--r--frontends/calculator/CEdev/lib/libload/fileioc.lib35
-rw-r--r--frontends/calculator/CEdev/lib/libload/graphx.lib95
-rw-r--r--frontends/calculator/CEdev/lib/libload/keypadc.lib5
-rw-r--r--frontends/calculator/CEdev/lib/linked/acos.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/asin.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/atan.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/atan2.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/atof.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/ceil.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/cos.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/cosh.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/exp.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/fabs.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/floor.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/fmod.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/frexp.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/ldexp.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/log.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/log10.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/modf.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/pow.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/sin.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/sinh.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/sqrt.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/strtod.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/tan.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/tanh.src6
-rw-r--r--frontends/calculator/CEdev/lib/linked/ufltinfo.src7
-rw-r--r--frontends/calculator/CEdev/lib/linked/ufltrnd.src7
-rw-r--r--frontends/calculator/CEdev/lib/shared/abort.src13
-rw-r--r--frontends/calculator/CEdev/lib/shared/abs.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/atoi.src22
-rw-r--r--frontends/calculator/CEdev/lib/shared/atol.src8
-rw-r--r--frontends/calculator/CEdev/lib/shared/atomic_load_32.src61
-rw-r--r--frontends/calculator/CEdev/lib/shared/atomic_load_decreasing_32.src89
-rw-r--r--frontends/calculator/CEdev/lib/shared/atomic_load_increasing_32.src88
-rw-r--r--frontends/calculator/CEdev/lib/shared/atos.src8
-rw-r--r--frontends/calculator/CEdev/lib/shared/bdivs.src44
-rw-r--r--frontends/calculator/CEdev/lib/shared/bdivu.src41
-rw-r--r--frontends/calculator/CEdev/lib/shared/bldix.src25
-rw-r--r--frontends/calculator/CEdev/lib/shared/bldiy.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/bmuls.src25
-rw-r--r--frontends/calculator/CEdev/lib/shared/bmulu.src24
-rw-r--r--frontends/calculator/CEdev/lib/shared/brems.src40
-rw-r--r--frontends/calculator/CEdev/lib/shared/bremu.src39
-rw-r--r--frontends/calculator/CEdev/lib/shared/bsearch.src195
-rw-r--r--frontends/calculator/CEdev/lib/shared/bshl.src18
-rw-r--r--frontends/calculator/CEdev/lib/shared/bshrs.src29
-rw-r--r--frontends/calculator/CEdev/lib/shared/bshru.src18
-rw-r--r--frontends/calculator/CEdev/lib/shared/bstix.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/bstiy.src18
-rw-r--r--frontends/calculator/CEdev/lib/shared/calloc.src27
-rw-r--r--frontends/calculator/CEdev/lib/shared/case.src27
-rw-r--r--frontends/calculator/CEdev/lib/shared/case16.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/case16d.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/case24.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/case24d.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/case8.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/case8d.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/debugger.src12
-rw-r--r--frontends/calculator/CEdev/lib/shared/delay.src92
-rw-r--r--frontends/calculator/CEdev/lib/shared/div.src54
-rw-r--r--frontends/calculator/CEdev/lib/shared/dzx7_standard.src106
-rw-r--r--frontends/calculator/CEdev/lib/shared/dzx7_turbo.src117
-rw-r--r--frontends/calculator/CEdev/lib/shared/finite.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/fpadd.src25
-rw-r--r--frontends/calculator/CEdev/lib/shared/fpcmp.src27
-rw-r--r--frontends/calculator/CEdev/lib/shared/fpdata.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/fpdiv.src28
-rw-r--r--frontends/calculator/CEdev/lib/shared/fpftol.src20
-rw-r--r--frontends/calculator/CEdev/lib/shared/fpltof.src20
-rw-r--r--frontends/calculator/CEdev/lib/shared/fpmul.src26
-rw-r--r--frontends/calculator/CEdev/lib/shared/fpneg.src32
-rw-r--r--frontends/calculator/CEdev/lib/shared/fppack.src28
-rw-r--r--frontends/calculator/CEdev/lib/shared/fpsub.src27
-rw-r--r--frontends/calculator/CEdev/lib/shared/fpultof.src22
-rw-r--r--frontends/calculator/CEdev/lib/shared/fpupop1.src48
-rw-r--r--frontends/calculator/CEdev/lib/shared/fpupop2.src47
-rw-r--r--frontends/calculator/CEdev/lib/shared/frameset.src12
-rw-r--r--frontends/calculator/CEdev/lib/shared/frameset0.src9
-rw-r--r--frontends/calculator/CEdev/lib/shared/frbmuls.src53
-rw-r--r--frontends/calculator/CEdev/lib/shared/frbtof.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/free.src180
-rw-r--r--frontends/calculator/CEdev/lib/shared/frftob.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/frftoi.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/frftos.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/frftoub.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/frftoui.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/frftous.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/frimuls.src81
-rw-r--r--frontends/calculator/CEdev/lib/shared/frimulu.src112
-rw-r--r--frontends/calculator/CEdev/lib/shared/fritof.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/frsmuls.src61
-rw-r--r--frontends/calculator/CEdev/lib/shared/frsmulu.src51
-rw-r--r--frontends/calculator/CEdev/lib/shared/frstof.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/frubtof.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/fruitof.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/frustof.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/gamma.src439
-rw-r--r--frontends/calculator/CEdev/lib/shared/getstringinput.src136
-rw-r--r--frontends/calculator/CEdev/lib/shared/iand.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/icmpzero.src20
-rw-r--r--frontends/calculator/CEdev/lib/shared/idivs.src20
-rw-r--r--frontends/calculator/CEdev/lib/shared/idivu.src21
-rw-r--r--frontends/calculator/CEdev/lib/shared/ildix.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/ildiy.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/imuls.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/imulu.src24
-rw-r--r--frontends/calculator/CEdev/lib/shared/indcall.src14
-rw-r--r--frontends/calculator/CEdev/lib/shared/ineg.src16
-rw-r--r--frontends/calculator/CEdev/lib/shared/inot.src15
-rw-r--r--frontends/calculator/CEdev/lib/shared/interrupts.src142
-rw-r--r--frontends/calculator/CEdev/lib/shared/ior.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/irems.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/iremu.src21
-rw-r--r--frontends/calculator/CEdev/lib/shared/isalnum.src28
-rw-r--r--frontends/calculator/CEdev/lib/shared/isalpha.src27
-rw-r--r--frontends/calculator/CEdev/lib/shared/isascii.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/iscntrl.src27
-rw-r--r--frontends/calculator/CEdev/lib/shared/isdigit.src27
-rw-r--r--frontends/calculator/CEdev/lib/shared/isgraph.src28
-rw-r--r--frontends/calculator/CEdev/lib/shared/ishl.src20
-rw-r--r--frontends/calculator/CEdev/lib/shared/ishrs.src20
-rw-r--r--frontends/calculator/CEdev/lib/shared/ishru.src20
-rw-r--r--frontends/calculator/CEdev/lib/shared/isinf.src20
-rw-r--r--frontends/calculator/CEdev/lib/shared/islower.src29
-rw-r--r--frontends/calculator/CEdev/lib/shared/isnan.src20
-rw-r--r--frontends/calculator/CEdev/lib/shared/isprint.src28
-rw-r--r--frontends/calculator/CEdev/lib/shared/ispunct.src28
-rw-r--r--frontends/calculator/CEdev/lib/shared/isspace.src28
-rw-r--r--frontends/calculator/CEdev/lib/shared/istix.src18
-rw-r--r--frontends/calculator/CEdev/lib/shared/istiy.src18
-rw-r--r--frontends/calculator/CEdev/lib/shared/isupper.src28
-rw-r--r--frontends/calculator/CEdev/lib/shared/isxdigit.src28
-rw-r--r--frontends/calculator/CEdev/lib/shared/itol.src16
-rw-r--r--frontends/calculator/CEdev/lib/shared/ixor.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/labs.src24
-rw-r--r--frontends/calculator/CEdev/lib/shared/ladd.src20
-rw-r--r--frontends/calculator/CEdev/lib/shared/land.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/lcmps.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/lcmpu.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/lcmpzero.src16
-rw-r--r--frontends/calculator/CEdev/lib/shared/ldiv.src79
-rw-r--r--frontends/calculator/CEdev/lib/shared/ldivs.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/ldivu.src20
-rw-r--r--frontends/calculator/CEdev/lib/shared/lldix.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/lldiy.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/lmuls.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/lmulu.src22
-rw-r--r--frontends/calculator/CEdev/lib/shared/lneg.src16
-rw-r--r--frontends/calculator/CEdev/lib/shared/lnot.src16
-rw-r--r--frontends/calculator/CEdev/lib/shared/log2.src27
-rw-r--r--frontends/calculator/CEdev/lib/shared/longjmp.src4
-rw-r--r--frontends/calculator/CEdev/lib/shared/lor.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/lrems.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/lremu.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/lshl.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/lshrs.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/lshru.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/lstix.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/lstiy.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/lsub.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/lxor.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/malloc.src225
-rw-r--r--frontends/calculator/CEdev/lib/shared/maptab.src158
-rw-r--r--frontends/calculator/CEdev/lib/shared/memchr.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/memcmp.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/memcpy.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/memmove.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/memset.src26
-rw-r--r--frontends/calculator/CEdev/lib/shared/os.src14
-rw-r--r--frontends/calculator/CEdev/lib/shared/os_textbuffer.src22
-rw-r--r--frontends/calculator/CEdev/lib/shared/print_globals.src47
-rw-r--r--frontends/calculator/CEdev/lib/shared/print_putch.src51
-rw-r--r--frontends/calculator/CEdev/lib/shared/print_putstring.src246
-rw-r--r--frontends/calculator/CEdev/lib/shared/print_sputch.src46
-rw-r--r--frontends/calculator/CEdev/lib/shared/qsort.src378
-rw-r--r--frontends/calculator/CEdev/lib/shared/rand.src13
-rw-r--r--frontends/calculator/CEdev/lib/shared/random.src110
-rw-r--r--frontends/calculator/CEdev/lib/shared/realloc.src125
-rw-r--r--frontends/calculator/CEdev/lib/shared/removeallbreakpoints.src12
-rw-r--r--frontends/calculator/CEdev/lib/shared/removeallwatchpoints.src12
-rw-r--r--frontends/calculator/CEdev/lib/shared/removebreakpoint.src16
-rw-r--r--frontends/calculator/CEdev/lib/shared/removewatchpoint.src16
-rw-r--r--frontends/calculator/CEdev/lib/shared/round.src44
-rw-r--r--frontends/calculator/CEdev/lib/shared/sand.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/sbrk.src49
-rw-r--r--frontends/calculator/CEdev/lib/shared/scmpzero.src16
-rw-r--r--frontends/calculator/CEdev/lib/shared/sdivs.src20
-rw-r--r--frontends/calculator/CEdev/lib/shared/sdivu.src21
-rw-r--r--frontends/calculator/CEdev/lib/shared/seqcase.src25
-rw-r--r--frontends/calculator/CEdev/lib/shared/seqcased.src26
-rw-r--r--frontends/calculator/CEdev/lib/shared/setbreakpoint.src16
-rw-r--r--frontends/calculator/CEdev/lib/shared/setflag.src22
-rw-r--r--frontends/calculator/CEdev/lib/shared/setjmp.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/setreadwatchpoint.src18
-rw-r--r--frontends/calculator/CEdev/lib/shared/setreadwritewatchpoint.src18
-rw-r--r--frontends/calculator/CEdev/lib/shared/setwatchpoint.src18
-rw-r--r--frontends/calculator/CEdev/lib/shared/setwritewatchpoint.src18
-rw-r--r--frontends/calculator/CEdev/lib/shared/sldix.src17
-rw-r--r--frontends/calculator/CEdev/lib/shared/sldiy.src18
-rw-r--r--frontends/calculator/CEdev/lib/shared/smuls.src21
-rw-r--r--frontends/calculator/CEdev/lib/shared/smulu.src21
-rw-r--r--frontends/calculator/CEdev/lib/shared/sneg.src16
-rw-r--r--frontends/calculator/CEdev/lib/shared/snot.src16
-rw-r--r--frontends/calculator/CEdev/lib/shared/sor.src20
-rw-r--r--frontends/calculator/CEdev/lib/shared/sprintf.src7
-rw-r--r--frontends/calculator/CEdev/lib/shared/sqrtf.src37
-rw-r--r--frontends/calculator/CEdev/lib/shared/srand.src12
-rw-r--r--frontends/calculator/CEdev/lib/shared/srandom.src29
-rw-r--r--frontends/calculator/CEdev/lib/shared/srems.src21
-rw-r--r--frontends/calculator/CEdev/lib/shared/sremu.src21
-rw-r--r--frontends/calculator/CEdev/lib/shared/sshl.src22
-rw-r--r--frontends/calculator/CEdev/lib/shared/sshrs.src20
-rw-r--r--frontends/calculator/CEdev/lib/shared/sshru.src20
-rw-r--r--frontends/calculator/CEdev/lib/shared/sstix.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/sstiy.src19
-rw-r--r--frontends/calculator/CEdev/lib/shared/stoi.src16
-rw-r--r--frontends/calculator/CEdev/lib/shared/stoiu.src16
-rw-r--r--frontends/calculator/CEdev/lib/shared/strcasecmp.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/strcat.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/strchr.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/strcmp.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/strcpy.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/strcspn.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/strdup.src35
-rw-r--r--frontends/calculator/CEdev/lib/shared/strlen.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/strncasecmp.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/strncat.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/strncmp.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/strncpy.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/strndup.src46
-rw-r--r--frontends/calculator/CEdev/lib/shared/strnlen.src27
-rw-r--r--frontends/calculator/CEdev/lib/shared/strpbrk.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/strrchr.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/strspn.src5
-rw-r--r--frontends/calculator/CEdev/lib/shared/strstr.src6
-rw-r--r--frontends/calculator/CEdev/lib/shared/strtok.src5
-rw-r--r--frontends/calculator/CEdev/lib/shared/strtol.src370
-rw-r--r--frontends/calculator/CEdev/lib/shared/strtoul.src403
-rw-r--r--frontends/calculator/CEdev/lib/shared/sxor.src18
-rw-r--r--frontends/calculator/CEdev/lib/shared/tice.src241
-rw-r--r--frontends/calculator/CEdev/lib/shared/tolower.src4
-rw-r--r--frontends/calculator/CEdev/lib/shared/toupper.src4
-rw-r--r--frontends/calculator/CEdev/lib/shared/udtoe.src411
-rw-r--r--frontends/calculator/CEdev/lib/shared/udtof.src982
-rw-r--r--frontends/calculator/CEdev/lib/shared/udtog.src173
-rw-r--r--frontends/calculator/CEdev/lib/shared/uitoa.src65
-rw-r--r--frontends/calculator/CEdev/lib/shared/uldiv.src128
-rw-r--r--frontends/calculator/CEdev/lib/shared/ultoa.src472
-rw-r--r--frontends/calculator/CEdev/lib/shared/uprint.src516
-rw-r--r--frontends/calculator/CEdev/lib/shared/upscan.src802
-rw-r--r--frontends/calculator/CEdev/lib/shared/ureverse.src112
-rw-r--r--frontends/calculator/CEdev/lib/shared/usb.src21
-rw-r--r--frontends/calculator/CEdev/lib/shared/uscan.src1822
-rw-r--r--frontends/calculator/CEdev/lib/shared/usscan.src630
-rw-r--r--frontends/calculator/CEdev/lib/shared/ustoa.src71
-rw-r--r--frontends/calculator/CEdev/lib/shared/uuitoa.src64
-rw-r--r--frontends/calculator/CEdev/lib/shared/uultoa.src326
-rw-r--r--frontends/calculator/CEdev/lib/shared/uustoa.src64
-rw-r--r--frontends/calculator/CEdev/lib/shared/vsprintf.src64
-rw-r--r--frontends/calculator/CEdev/lib/shared/zx7_Decompress.src117
-rw-r--r--frontends/calculator/CEdev/lib/static/acos.src54
-rw-r--r--frontends/calculator/CEdev/lib/static/asin.src178
-rw-r--r--frontends/calculator/CEdev/lib/static/atan.src341
-rw-r--r--frontends/calculator/CEdev/lib/static/atan2.src179
-rw-r--r--frontends/calculator/CEdev/lib/static/atof.src20
-rw-r--r--frontends/calculator/CEdev/lib/static/ceil.src31
-rw-r--r--frontends/calculator/CEdev/lib/static/cos.src33
-rw-r--r--frontends/calculator/CEdev/lib/static/exp.src234
-rw-r--r--frontends/calculator/CEdev/lib/static/fabs.src14
-rw-r--r--frontends/calculator/CEdev/lib/static/floor.src114
-rw-r--r--frontends/calculator/CEdev/lib/static/fmod.src135
-rw-r--r--frontends/calculator/CEdev/lib/static/frexp.src141
-rw-r--r--frontends/calculator/CEdev/lib/static/ldexp.src194
-rw-r--r--frontends/calculator/CEdev/lib/static/log.src233
-rw-r--r--frontends/calculator/CEdev/lib/static/log10.src48
-rw-r--r--frontends/calculator/CEdev/lib/static/modf.src166
-rw-r--r--frontends/calculator/CEdev/lib/static/pow.src187
-rw-r--r--frontends/calculator/CEdev/lib/static/sin.src340
-rw-r--r--frontends/calculator/CEdev/lib/static/sinh.src377
-rw-r--r--frontends/calculator/CEdev/lib/static/sqrt.src83
-rw-r--r--frontends/calculator/CEdev/lib/static/strtod.src534
-rw-r--r--frontends/calculator/CEdev/lib/static/tan.src330
-rw-r--r--frontends/calculator/CEdev/lib/static/tanh.src129
-rw-r--r--frontends/calculator/CEdev/lib/static/ufltinfo.src511
-rw-r--r--frontends/calculator/CEdev/lib/static/ufltrnd.src210
636 files changed, 42487 insertions, 0 deletions
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
--- /dev/null
+++ b/frontends/calculator/CEdev/bin/PLCError.dll
Binary files differ
diff --git a/frontends/calculator/CEdev/bin/convhex b/frontends/calculator/CEdev/bin/convhex
new file mode 100755
index 0000000..fd67fe7
--- /dev/null
+++ b/frontends/calculator/CEdev/bin/convhex
Binary files differ
diff --git a/frontends/calculator/CEdev/bin/convpng b/frontends/calculator/CEdev/bin/convpng
new file mode 100755
index 0000000..88c811a
--- /dev/null
+++ b/frontends/calculator/CEdev/bin/convpng
Binary files differ
diff --git a/frontends/calculator/CEdev/bin/convtile b/frontends/calculator/CEdev/bin/convtile
new file mode 100755
index 0000000..8944851
--- /dev/null
+++ b/frontends/calculator/CEdev/bin/convtile
Binary files 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
--- /dev/null
+++ b/frontends/calculator/CEdev/bin/ez80cc.exe
Binary files differ
diff --git a/frontends/calculator/CEdev/bin/fasmg b/frontends/calculator/CEdev/bin/fasmg
new file mode 100755
index 0000000..64f8526
--- /dev/null
+++ b/frontends/calculator/CEdev/bin/fasmg
Binary files differ
diff --git a/frontends/calculator/CEdev/bin/make.exe b/frontends/calculator/CEdev/bin/make.exe
new file mode 100755
index 0000000..61ce9e9
--- /dev/null
+++ b/frontends/calculator/CEdev/bin/make.exe
Binary files differ
diff --git a/frontends/calculator/CEdev/bin/p1.exe b/frontends/calculator/CEdev/bin/p1.exe
new file mode 100755
index 0000000..ac3a6a3
--- /dev/null
+++ b/frontends/calculator/CEdev/bin/p1.exe
Binary files differ
diff --git a/frontends/calculator/CEdev/bin/p2.exe b/frontends/calculator/CEdev/bin/p2.exe
new file mode 100755
index 0000000..4e97a26
--- /dev/null
+++ b/frontends/calculator/CEdev/bin/p2.exe
Binary files differ
diff --git a/frontends/calculator/CEdev/bin/p3.exe b/frontends/calculator/CEdev/bin/p3.exe
new file mode 100755
index 0000000..cd95b52
--- /dev/null
+++ b/frontends/calculator/CEdev/bin/p3.exe
Binary files 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.8xp
Binary files 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.bin
Binary files 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.dbg
Binary files 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 <stdbool.h>
+; 2 #include <stddef.h>
+; 3 #include <stdint.h>
+; 4 #include <tice.h>
+; 5
+; 6 #include <assert.h>
+; 7 #include <debug.h>
+; 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/debugging/screenshot.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <assert.h>
+#include <debug.h>
+
+/*
+ * 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.8xp
Binary files 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.bin
Binary files 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 <stdbool.h>
+; 2 #include <stddef.h>
+; 3 #include <stdint.h>
+; 4 #include <tice.h>
+; 5
+; 6 #include <stdio.h>
+; 7 #include <stdlib.h>
+; 8 #include <string.h>
+; 9
+; 10 #include <fileioc.h>
+; 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/fileio_detect/screenshot.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <fileioc.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.8xp
Binary files 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.bin
Binary files 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 <stdbool.h>
+; 2 #include <stddef.h>
+; 3 #include <stdint.h>
+; 4 #include <tice.h>
+; 5
+; 6 #include <stdio.h>
+; 7 #include <stdlib.h>
+; 8 #include <string.h>
+; 9
+; 10 #include <fileioc.h>
+; 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/fileio_detectany/screenshot.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <fileioc.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/fileio_factorize/screenshot.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <fileioc.h>
+
+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; i<total_primes; i++) {
+ list_out->items[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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/fileio_os_vars/screenshot.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <fileioc.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.8xp
Binary files 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.bin
Binary files 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 <stdbool.h>
+; 2 #include <stddef.h>
+; 3 #include <stdint.h>
+; 4 #include <tice.h>
+; 5
+; 6 #include <stdio.h>
+; 7 #include <stdlib.h>
+; 8 #include <string.h>
+; 9
+; 10 #include <fileioc.h>
+; 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/fileio_read_write/screenshot.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <fileioc.h>
+
+/* 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <fileioc.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/fileio_tokens/screenshot.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <fileioc.h>
+
+/* 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_buffered_cube/screenshot.gif
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_char/screenshot.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_clipping/screenshot.gif
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_floodfill/screenshot.gif
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+
+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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/screenshot.png
Binary files 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 <stdint.h>
+#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 <stdint.h>
+
+
+#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 <stdint.h>
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tileset.png
Binary files 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.8xv
Binary files 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 <stdint.h>
+#include "var_gfx.h"
+
+#include <fileioc.h>
+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 <stdint.h>
+
+#include <stdbool.h>
+
+#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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <compression.h>
+#include <graphx.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_hello_world/screenshot.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_light_dark/screenshot.gif
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_rletsprite/screenshot.png
Binary files 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 <stdint.h>
+#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 <stdint.h>
+
+#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 <stdint.h>
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/ubuntu.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#include <graphx.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_shapes_shift/screenshot.gif
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+
+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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_sprite/screenshot.png
Binary files 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 <stdint.h>
+#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 <stdint.h>
+
+#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 <stdint.h>
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/ubuntu.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_sprite_compress/screenshot.png
Binary files 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 <stdint.h>
+#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 <stdint.h>
+
+#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 <stdint.h>
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/apple.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <compression.h>
+#include <graphx.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_sprite_keys/screenshot.gif
Binary files 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 <stdint.h>
+#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 <stdint.h>
+
+#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 <stdint.h>
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/ubuntu.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+#include <keypadc.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/screenshot.png
Binary files 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 <stdint.h>
+#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 <stdint.h>
+
+#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 <stdint.h>
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/ubuntu.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/screenshot.gif
Binary files 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 <stdint.h>
+#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 <stdint.h>
+
+#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 <stdint.h>
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/ubuntu.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/screenshot.png
Binary files 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 <stdint.h>
+#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 <stdint.h>
+
+
+#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 <stdint.h>
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/mint.png
Binary files 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 <stdint.h>
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/ubuntu.png
Binary files 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.8xv
Binary files 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 <stdint.h>
+#include "var_gfx.h"
+
+#include <fileioc.h>
+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 <stdint.h>
+
+#include <stdbool.h>
+
+#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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+#include <fileioc.h>
+
+/* 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 <appvar name>_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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_template/iconc.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+/* Standard headers (recommended) */
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_tilemap/screenshot.gif
Binary files 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 <stdint.h>
+#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 <stdint.h>
+
+#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 <stdint.h>
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tileset.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+
+/* 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 <stdint.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/screenshot.gif
Binary files 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 <stdint.h>
+#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 <stdint.h>
+
+#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 <stdint.h>
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tileset.png
Binary files 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.8xv
Binary files 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 <stdint.h>
+#include "var_gfx.h"
+
+#include <fileioc.h>
+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 <stdint.h>
+
+#include <stdbool.h>
+
+#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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <graphx.h>
+
+/* 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 <stdint.h>
+
+/* 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 <stdint.h>
+#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 <stdint.h>
+
+#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 <stdint.h>
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tileset.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <compression.h>
+#include <graphx.h>
+
+/* 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 <stdint.h>
+
+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 <stdint.h>
+
+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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/hello_world/screenshot.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+/* Standard headers */
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/keypad_arrows/screenshot.gif
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <keypadc.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/keypad_multiple_keys/screenshot.gif
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <keypadc.h>
+
+/* 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/lcd_fill/screenshot.gif
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/os_input/screenshot.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <tice.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/random/bin/DEMO.8xp
Binary files 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/random/bin/DEMO.bin
Binary files 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 <stdbool.h>
+; 2 #include <stddef.h>
+; 3 #include <stdint.h>
+; 4 #include <tice.h>
+; 5
+; 6 #include <stdio.h>
+; 7 #include <stdlib.h>
+; 8 #include <string.h>
+; 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/random/screenshot.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/random/test/expected.bin
Binary files 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/real_time_clock/screenshot.gif
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/second_counter/screenshot.gif
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/second_counter2/screenshot.gif
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/stopwatch/screenshot.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* 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
--- /dev/null
+++ b/frontends/calculator/CEdev/examples/template/iconc.png
Binary files 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 <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <tice.h>
+
+/* Standard headers (recommended) */
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* 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 <debug.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#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 <stdio.h>
+
+#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 <byte @opc>
+ 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 <byte 355o, opc>
+ 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 <byte 355o, src metadata 1 scale 0 or 103o>, 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 <byte 355o, opc>
+ 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 <byte 355o, dst metadata 1 scale 0 or 113o>, 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 <idxpre dst, src>, \
+ 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 <byte 355o, src metadata 1 scale 0>
+ 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 <byte 355o, 327o>
+ 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 <byte 355o, dst metadata 1 scale 1>
+ else if dst eq i? & src eq hl?
+ @ez80.emit <byte 355o, 307o>
+ 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 <byte 306o, arg2>
+ 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 <byte 276o + % shl 4, arg2>
+ 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 <byte 355o, arg2 metadata 1 scale 0 + 122o - % shl 3>
+ 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 <byte @opc or 106o, arg1>
+ 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 <byte 355o, 064o>
+ end if
+ else if arg1 eq arg1 element 1 & arg1 @ez80.is_reg @ez80.breg \
+ & arg1 metadata 1 scale 1 = 003o
+ @ez80.emit <byte 355o, \
+ arg1 metadata 1 scale 0 shl 3 and 070o or 004o>
+ else
+ @ez80.emit <byte 355o, 144o, arg1>
+ 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 <byte 313o, reg metadata 1 scale 0 and 007o or @opc>
+ 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 <byte 313o, reg metadata 1 scale 0 and 007o \
+ or % shl 6 or bit shl 3>
+ else if reg @ez80.is_reg @ez80.wreg \
+ & reg metadata 1 scale 1 = 007o & bit = bit and 017o
+ @ez80.emit <byte 313o, bit shl 3 and 070o or % shl 6 \
+ or reg metadata 1 scale 0 shr 3 \
+ or 001o and not bit shr 3>
+ 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 <byte 355o, reg metadata 1 scale 0 shl 3 and 070o \
+ or 101o>
+ else if ~reg
+ @ez80.emit <byte 355o, 161o>
+ end if
+ else if reg eq a?
+ @ez80.emit <byte 323o, port>
+ 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 <byte 355o, reg metadata 1 scale 0 shl 3 and 070o \
+ or 100o>
+ else if reg eq a?
+ @ez80.emit <byte 333o, port>
+ 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 <byte 355o, reg metadata 1 scale 0 shl 3 and 070o \
+ or 000o, port>
+ 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 <byte 355o, reg metadata 1 scale 0 shl 3 and 070o \
+ or 001o, port>
+ end if
+end inst
+inst tstio, @src*
+ if srcind
+ err 'invalid indirection'
+ else
+ @ez80.emit <byte 355o, 164o, src>
+ 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 <byte 355o, opc>, 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 <byte 355o, src metadata 1 scale 1 shr 5 and 001o + 145o>, \
+ offset src scale 0
+ end if
+end inst
+
+inst im, @mode*
+ if modeind
+ err 'invalid indirection'
+ else if mode = 0
+ @ez80.emit <byte 355o, 106o>
+ else if mode = 1
+ @ez80.emit <byte 355o, 126o>
+ else if mode = 2
+ @ez80.emit <byte 355o, 136o>
+ 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 <byte 355o, reg metadata 1 scale 0 or 114o>
+ 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 <def,blk,size*>, 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 <name,alias*>, 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 <name,carry>, UEXT,<OR? A?,A>, 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 <name,signed>, 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 <stdint.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <tice.h>
+
+#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. <br>
+ * "w" - Creates an empty file for writing. Overwrites file if already exists. <br>
+ * "a" - Appends to a file. Writing operations, append data at the end of the file. The file is created if it does not exist. <br>
+ * "r+" - Opens a file to update both reading and writing. The file must exist. Moves file from archive to RAM if in archive. <br>
+ * "w+" - Creates an empty file for both reading and writing. Overwrites file if already exists. <br>
+ * "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. <br>
+ * "w" - Creates an empty file for writing. Overwrites file if already exists. <br>
+ * "a" - Appends to a file. Writing operations, append data at the end of the file. The file is created if it does not exist. <br>
+ * "r+" - Opens a file to update both reading and writing. The file must exist. Moves file from archive to RAM if in archive. <br>
+ * "w+" - Creates an empty file for both reading and writing. Overwrites file if already exists. <br>
+ * "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 <br>
+ * SEEK_CUR (1) - Seek from current offset in file <br>
+ * 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 <br>
+ * 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 <stdarg.h>
+#include <stdio.h>
+
+#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. <THH> */
+#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. <THH>
+#define FMT_FLAG_PAD_ZERO 0x40
+#define FMT_FLAG_STRIP 0x80 // Output only. <THH>
+#define FMT_FLAG_SET 0x80 // Input only; maybe not needed if
+ // set_begin != 0 is used instead. <THH>
+
+/* 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. <THH> */
+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 <stdint.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+#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
+ * <a href="https://github.com/MattWaltz/convpng" target="_blank">convpng</a>.
+ * 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
+ * <a href="https://github.com/MattWaltz/convpng" target="_blank">convpng</a>.
+ */
+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 <tt>gfx_sprite_t *</tt> 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 <tt>gfx_sprite_t *</tt>
+ * @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 <tt>gfx_sprite_t *</tt> 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 <tt>gfx_sprite_t *</tt>
+ * @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 <tt>(width + 1) * height * 3 / 2</tt>
+ * 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 <tt>(width + 1) * height</tt>
+ * bytes. The exact data size necessary is <tt>2 *
+ * num_horizontal_transparent_runs + num_non_transparent_pixels +
+ * num_rows_beginning_with_non_transparent_pixel -
+ * num_rows_ending_with_transparent_pixel</tt> 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 <tt>gfx_rletsprite_t *</tt> 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 <tt>gfx_rletsprite_t *</tt>
+ * @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 <tt>width * height</tt>
+ * 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 <stdint.h>
+
+#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<<ON_IVECT /**< [on] key interrupt source mask */
+#define INT_TIMER1 1<<TIMER1_IVECT /**< Timer 1 interrupt source mask */
+#define INT_TIMER2 1<<TIMER2_IVECT /**< Timer 2 interrupt source mask */
+#define INT_TIMER3 1<<TIMER3_IVECT /**< Timer 3 interrupt source mask */
+#define INT_TIMEROS 1<<TIMEROS_IVECT /**< Timer OS interrupt source mask */
+#define INT_KEYBOARD 1<<KEYBOARD_IVECT /**< Keyboard interrupt source mask */
+#define INT_LCD 1<<LCD_IVECT /**< LCD interrupt source mask */
+#define INT_RTC 1<<RTC_IVECT /**< Real Time Clock interrupt source mask */
+#define INT_USB 1<<USB_IVECT /**< USB interrupt source mask */
+
+#define int_RawStatus (*(volatile uint24_t*)0x0F00000) /**< State of interrupt signals */
+#define int_MaskedStatus (*(volatile uint24_t*)0x0F00014) /**< Masked state of interrupt signals */
+#define int_EnableConfig (*(uint24_t*)0x0F00004) /**< Enabled interrupt signals */
+#define int_LatchConfig (*(uint24_t*)0x0F0000C) /**< Latchable interrupt signals */
+#define int_InvertConfig (*(uint24_t*)0x0F00010) /**< Invertable interrupt signals */
+#define int_Acknowledge (*(uint24_t*)0x0F00008) /**< Acknowledge interrupt signals */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/frontends/calculator/CEdev/include/iso646.h b/frontends/calculator/CEdev/include/iso646.h
new file mode 100644
index 0000000..d8e83a5
--- /dev/null
+++ b/frontends/calculator/CEdev/include/iso646.h
@@ -0,0 +1,18 @@
+#ifndef __ISO646_H
+#define __ISO646_H
+
+#ifndef __cplusplus
+#define and &&
+#define and_eq &=
+#define bitand &
+#define bitor |
+#define compl ~
+#define not !
+#define not_eq !=
+#define or ||
+#define or_eq |=
+#define xor ^
+#define xor_eq ^=
+#endif
+
+#endif \ No newline at end of file
diff --git a/frontends/calculator/CEdev/include/keypadc.h b/frontends/calculator/CEdev/include/keypadc.h
new file mode 100644
index 0000000..1b92f1c
--- /dev/null
+++ b/frontends/calculator/CEdev/include/keypadc.h
@@ -0,0 +1,255 @@
+/**
+ * @file
+ * @authors Matt "MateoConLechuga" Waltz
+ * @authors Shaun "Methsoft" McFall
+ * @brief Simple direct input keypad library
+ */
+
+#ifndef H_KEYPADC
+#define H_KEYPADC
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#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 <fileioc.h> instead
+#include <fileioc.h>
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 <graphx.h> instead
+#include <graphx.h>
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 <keypadc.h> instead
+#include <keypadc.h>
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 <stdarg.h>
+#include <format.h>
+#include <fileioc.h>
+
+#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 <stdbool.h>
+#include <stdint.h>
+#include <stddef.h>
+
+#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.
+ * <p>
+ * 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 <br>
+ * 1: large monospace font
+ */
+void os_FontSelect(char id);
+
+/**
+ * Gets the font to use when drawing on the graphscreen
+ *
+ * @returns
+ * 0: small font <br>
+ * 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 <br>
+ * [12-13] - Boot Version Major <br>
+ * [14] - Boot Version Minor <br>
+ * [15-16] - Boot Version Build <br>
+ * [28-37] - Calc ID (From certificate if exists) <br>
+ * [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) <br>
+ * >0: max length of result, minimum of 6
+ * @param mode:
+ * 0: Use current mode for everything (digits ignored) <br>
+ * 1: Normal mode <br>
+ * 2: Sci mode <br>
+ * 3: Eng mode <br>
+ * >4: Use current Normal/Sci/Eng mode (digits still used) <br>
+ * @param digits
+ * -1: Float mode <br>
+ * 0-9: Fix # mode <br>
+ * @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 <stdint.h>
+#include <stdbool.h>
+
+#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 <stdio.h>
+; 2 #include <fileioc.h>
+; 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 <stdio.h>
+; 2 #include <fileioc.h>
+; 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 <stdio.h>
+; 2 #include <fileioc.h>
+; 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 <stdio.h>
+; 2 #include <fileioc.h>
+; 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 <stdio.h>
+; 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 <stdio.h>
+; 2 #include <fileioc.h>
+; 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 <stdio.h>
+; 2 #include <fileioc.h>
+; 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 <stdio.h>
+; 2 #include <fileioc.h>
+; 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 <stdio.h>
+; 2 #include <fileioc.h>
+; 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 <stdio.h>
+; 2 #include <fileioc.h>
+; 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 <stdio.h>
+; 2 #include <fileioc.h>
+; 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 <stdio.h>
+; 2 #include <fileioc.h>
+; 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 <stdio.h>
+; 2 #include <fileioc.h>
+; 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 <stddef.h>
+; 10 #include <stdlib.h>
+; 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 <float.h>
+; 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 <stdlib.h>
+; 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 <math.h>
+; 9 #include <errno.h>
+; 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 <stddef.h>
+; 21 #include <stdlib.h>
+; 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 <format.h>
+; 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 <format.h>
+; 6 #include <string.h>
+; 7 #include <stdlib.h>
+; 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 <format.h>
+; 6 #include <string.h>
+; 7 #include <stdlib.h>
+; 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<jmax && *s;j++)
+ LD (IX+-4),0
+ LD (IX+-3),0
+ JR L_22
+L_20:
+; 46 __print_putch(*s++);
+ LD BC,(IX+-8)
+ LD (IX+-16),BC
+ LD BC,(IX+-8)
+ INC BC
+ LD (IX+-8),BC
+ LD HL,(IX+-16)
+ LD C,(HL)
+ LD B,0
+ PUSH BC
+ CALL ___print_putch
+ POP BC
+ LD HL,(IX+-4)
+ INC HL
+ LD (IX+-4),L
+ LD (IX+-3),H
+L_22:
+ LD BC,(IX+-10)
+ LD HL,(IX+-4)
+ OR A,A
+ SBC.SIS HL,BC
+ JR NC,L_24
+ LD HL,(IX+-8)
+ LD A,(HL)
+ OR A,A
+ JR NZ,L_20
+L_24:
+; 47 i += j;
+ LD A,(IX+-4)
+ ADD A,(IX+-1)
+ LD (IX+-1),A
+; 48 if (padRight)
+ LD A,(IX+-5)
+ OR A,A
+ JR Z,L_29
+; 49 {
+; 50 __print_fmt.field_width = abs(__print_fmt.field_width);
+ LD A,(___print_fmt+5)
+ LD B,A
+ SEXT HL
+ LD L,B
+ PUSH HL
+ CALL _abs
+ POP BC
+ LD A,L
+ LD (___print_fmt+5),A
+; 51 while (i < __print_fmt.field_width)
+ JR L_26
+L_27:
+; 52 {
+; 53 __print_putch(' ');
+ LD BC,32
+ PUSH BC
+ CALL ___print_putch
+ POP BC
+; 54 i++;
+ INC (IX+-1)
+; 55 }
+L_26:
+ LD A,(___print_fmt+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 M,L_27
+; 56 }
+L_29:
+; 57 __print_len += i;
+ LD A,(___print_len)
+ ADD A,(IX+-1)
+ LD (___print_len),A
+; 58 /* Reset the data manipulated by the compiler, so that no code is needed */
+; 59 /* to set default values. */
+; 60 __print_fmt.field_width= __print_fmt.precision= __print_fmt.flags= 0;
+ XOR A,A
+ LD (___print_fmt+1),A
+ LD (___print_fmt+6),A
+ LD (___print_fmt+5),A
+; 61 }
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** ___print_sendstring ***************************
+;Name Addr/Register Size Type
+;___print_len IMPORT 1 variable
+;_abs IMPORT ----- function
+;___print_putch IMPORT ----- function
+;_strlen IMPORT ----- function
+;___print_fmt IMPORT 19 variable
+;temp4 IX-13 3 variable
+;jmax IX-10 2 variable
+;s IX-8 3 variable
+;padRight IX-5 1 variable
+;j IX-4 2 variable
+;pad IX-2 1 variable
+;i IX-1 1 variable
+;sp IX+6 3 parameter
+
+
+; Stack Frame Size: 25 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF ___print_putch:ROM
+ XREF _strlen:ROM
+ XREF ___print_len:ROM
+ XREF ___print_fmt:ROM
+ XREF _abs:ROM
+ XREF __frameset:ROM
+ XREF __setflag:ROM
+ XDEF ___print_sendstring
+ END
diff --git a/frontends/calculator/CEdev/lib/shared/print_sputch.src b/frontends/calculator/CEdev/lib/shared/print_sputch.src
new file mode 100644
index 0000000..4622bb4
--- /dev/null
+++ b/frontends/calculator/CEdev/lib/shared/print_sputch.src
@@ -0,0 +1,46 @@
+; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\PRINT_SPUTCH.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /*************************************************
+; 2 * Copyright (C) 1999-2008 by Zilog, Inc.
+; 3 * All Rights Reserved
+; 4 *************************************************/
+; 5 #include <format.h>
+; 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 <stddef.h>
+; 10 #include <stdlib.h>
+; 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;i<size;++i,++b,++a) {
+ LD BC,0
+ LD (IX+-4),BC
+ JR L_2
+L_0:
+; 32 t = *a;
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD (IX+-1),A
+; 33 *a = *b;
+ LD HL,(IX+9)
+ LD A,(HL)
+ LD HL,(IX+6)
+ LD (HL),A
+; 34 *b = t;
+ LD HL,(IX+9)
+ LD A,(IX+-1)
+ LD (HL),A
+ LD BC,(IX+-4)
+ INC BC
+ LD (IX+-4),BC
+ LD BC,(IX+9)
+ INC BC
+ LD (IX+9),BC
+ LD BC,(IX+6)
+ INC BC
+ LD (IX+6),BC
+; 35 }
+L_2:
+ LD BC,(IX+12)
+ LD HL,(IX+-4)
+ OR A,A
+ SBC HL,BC
+ JR C,L_0
+; 36 }
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _swapmem ***************************
+;Name Addr/Register Size Type
+;i IX-4 3 variable
+;t IX-1 1 variable
+;size IX+12 3 parameter
+;b IX+9 3 parameter
+;a IX+6 3 parameter
+
+
+; Stack Frame Size: 19 (bytes)
+; Spill Code: 0 (instruction)
+
+
+; 37
+; 38 struct stk {
+; 39 char *l;
+; 40 char *r;
+; 41 };
+; 42
+; 43 void qsort( char *base,
+; 44 size_t nel,
+; 45 size_t size,
+; 46 int (*compar)(void *,void *))
+; 47 {
+_qsort:
+ LD HL,-111
+ CALL __frameset
+; 48 char *i;
+; 49 char *j;
+; 50 char *x;
+; 51 char *r;
+; 52 struct stk *sp;
+; 53 struct stk stack[16];
+; 54
+; 55 sp = stack;
+ LEA BC,IX+-111
+ LD (IX+-9),BC
+; 56 r = base + (nel-1)*size;
+ LD IY,(IX+9)
+ LD BC,(IX+12)
+ LD DE,(IX+6)
+ LEA HL,IY+-1
+ CALL __imulu
+ ADD HL,DE
+ LD (IX+-12),HL
+; 57 for (;;) {
+; 58 do {
+L_25:
+; 59 x = base + (r-base)/size/2 * size;
+ LD BC,(IX+6)
+ LD HL,(IX+-12)
+ OR A,A
+ SBC HL,BC
+ LD BC,(IX+12)
+ CALL __idivu
+ LD A,1
+ CALL __ishru_b
+ LD BC,(IX+12)
+ CALL __imulu
+ LD BC,(IX+6)
+ ADD HL,BC
+ LD (IX+-15),HL
+; 60 i = base;
+ LD BC,(IX+6)
+ LD (IX+-3),BC
+; 61 j = r;
+ LD BC,(IX+-12)
+ LD (IX+-6),BC
+; 62 do {
+; 63 while ((*compar)(i,x) < 0)
+ JR L_4
+L_5:
+; 64 i += size;
+ LD BC,(IX+12)
+ LD HL,(IX+-3)
+ ADD HL,BC
+ LD (IX+-3),HL
+L_4:
+ LD IY,(IX+15)
+ LD BC,(IX+-15)
+ PUSH BC
+ LD BC,(IX+-3)
+ PUSH BC
+ CALL __indcall
+ POP BC
+ POP BC
+ CALL __icmpzero
+ CALL __setflag
+ JP M,L_5
+; 65 while ((*compar)(x,j) < 0)
+ JR L_6
+L_7:
+; 66 j -= size;
+ LD BC,(IX+12)
+ LD HL,(IX+-6)
+ OR A,A
+ SBC HL,BC
+ LD (IX+-6),HL
+L_6:
+ LD IY,(IX+15)
+ LD BC,(IX+-6)
+ PUSH BC
+ LD BC,(IX+-15)
+ PUSH BC
+ CALL __indcall
+ POP BC
+ POP BC
+ CALL __icmpzero
+ CALL __setflag
+ JP M,L_7
+; 67 if (i < j) {
+ LD BC,(IX+-6)
+ LD HL,(IX+-3)
+ OR A,A
+ SBC HL,BC
+ JR NC,L_15
+; 68 swapmem(i, j, size);
+ LD BC,(IX+12)
+ PUSH BC
+ LD BC,(IX+-6)
+ PUSH BC
+ LD BC,(IX+-3)
+ PUSH BC
+ CALL _swapmem
+ POP BC
+ POP BC
+ POP BC
+; 69 if (i == x)
+ LD BC,(IX+-15)
+ LD HL,(IX+-3)
+ OR A,A
+ SBC HL,BC
+ JR NZ,L_11
+; 70 x = j;
+ LD BC,(IX+-6)
+ LD (IX+-15),BC
+; 71 else if (j == x)
+ JR L_15
+L_11:
+ LD BC,(IX+-15)
+ LD HL,(IX+-6)
+ OR A,A
+ SBC HL,BC
+ JR NZ,L_15
+; 72 x = i;
+ LD BC,(IX+-3)
+ LD (IX+-15),BC
+; 73 }
+L_15:
+; 74 if (i <= j) {
+ LD BC,(IX+-3)
+ LD HL,(IX+-6)
+ OR A,A
+ SBC HL,BC
+ JR C,L_17
+; 75 i += size;
+ LD BC,(IX+12)
+ LD HL,(IX+-3)
+ ADD HL,BC
+ LD (IX+-3),HL
+; 76 j -= size;
+ LD BC,(IX+12)
+ LD HL,(IX+-6)
+ OR A,A
+ SBC HL,BC
+ LD (IX+-6),HL
+; 77 }
+; 78 } while (i <= j);
+L_17:
+ LD BC,(IX+-3)
+ LD HL,(IX+-6)
+ OR A,A
+ SBC HL,BC
+ JR NC,L_4
+; 79 if (j-base < r-i) {
+ LD BC,(IX+6)
+ LD HL,(IX+-6)
+ OR A,A
+ SBC HL,BC
+ LD DE,HL
+ LD HL,(IX+-12)
+ OR A,A
+ LD BC,(IX+-3)
+ SBC HL,BC
+ LD BC,HL
+ LD HL,DE
+ OR A,A
+ SBC HL,BC
+ CALL __setflag
+ JP P,L_23
+; 80 if (i < r) { /* stack request for right partition */
+ LD BC,(IX+-12)
+ LD HL,(IX+-3)
+ OR A,A
+ SBC HL,BC
+ JR NC,L_19
+; 81 sp->l = 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 <stddef.h>
+; 10 #include <string.h>
+; 11 #include <stdlib.h>
+; 12 #include <format.h>
+; 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 <stdio.h>
+; 10 #include <stdlib.h>
+; 11 #include <limits.h>
+; 12 #include <stddef.h>
+; 13 #include <ctype.h>
+; 14 #include <errno.h>
+; 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 <stdio.h>
+; 7 #include <stdlib.h>
+; 8 #include <limits.h>
+; 9 #include <stddef.h>
+; 10 #include <ctype.h>
+; 11 #include <errno.h>
+; 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 <stddef.h>
+; 7 #include <format.h>
+; 8 #include <ctype.h>
+; 9 //#include <sio.h>
+; 10 #include <float.h>
+; 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 <stddef.h>
+; 7 #include <format.h>
+; 8 #include <ctype.h>
+; 9 #include <string.h>
+; 10 #include <float.h>
+; 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 <stddef.h>
+; 7 #include <format.h>
+; 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 <stddef.h>
+; 7 #include <format.h>
+; 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 <stddef.h>
+; 7 #include <format.h>
+; 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 <format.h>
+; 2 #include <stddef.h>
+; 3 #include <stdarg.h>
+; 4 #include <string.h>
+; 5 #include <stdlib.h>
+; 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 <stdarg.h>
+; 7 #include <format.h>
+; 8 #include <ctype.h>
+; 9 #include <string.h>
+; 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 <string.h>
+; 10 #include <format.h>
+; 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. <THH>
+; 10 *************************************************************************/
+; 11
+; 12 #include <stdlib.h>
+; 13 #include <stdio.h>
+; 14 #include <stddef.h>
+; 15 #include <ctype.h>
+; 16 #include <stdarg.h>
+; 17 #include <format.h>
+; 18 #include <float.h>
+; 19 #include <string.h>
+; 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<fmt_str.field_width;++i)
+ LD (IX+-1),0
+ JR L_66
+L_64:
+; 153 {
+; 154 if ((ch = get()) == EOF)
+ CALL _get
+ LD (IX+-5),L
+ LD A,(IX+-5)
+ CP A,-1
+ JR NZ,L_62
+; 155 return FALSE;
+ XOR A,A
+ JR L_69
+L_62:
+; 156 if (p)
+ LD HL,(IX+-4)
+ CALL __icmpzero
+ JR Z,L_63
+; 157 *(p++) = ch;
+ LD BC,(IX+-4)
+ LD (IX+-8),BC
+ LD HL,BC
+ LD A,(IX+-5)
+ LD (HL),A
+ LD BC,(IX+-4)
+ INC BC
+ LD (IX+-4),BC
+L_63:
+; 158 ++fields;
+ LD A,(_fields)
+ INC A
+ LD (_fields),A
+ INC (IX+-1)
+; 159 }
+L_66:
+ 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 M,L_64
+; 160 return TRUE;
+ LD A,1
+; 161 }
+L_69:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _character ***************************
+;Name Addr/Register Size Type
+;_fields STATIC 1 variable
+;_argp STATIC 3 variable
+;_fmt_str STATIC 19 variable
+;ch IX-5 1 variable
+;p IX-4 3 variable
+;i IX-1 1 variable
+
+
+; Stack Frame Size: 14 (bytes)
+; Spill Code: 0 (instruction)
+
+
+; 162
+; 163 /****************************************/
+; 164 /* Floating point conversions
+; 165 /****************************************/
+; 166 static unsigned char fpoint(void)
+; 167 {
+_fpoint:
+ LD HL,-142
+ CALL __frameset
+; 168 unsigned char i;
+; 169 char ch;
+; 170 char buffer[FLT_CHARS];
+; 171 char *bp = buffer;
+ LD HL,IX
+ LD BC,-139
+ ADD HL,BC
+ LD (IX+-5),HL
+; 172 double dval;
+; 173 unsigned char takeEe=TRUE;
+ LD (IX+-8),1
+; 174 unsigned char takeDot=TRUE;
+ LD (IX+-6),1
+; 175 unsigned char takeSign=TRUE;
+ LD (IX+-7),1
+; 176
+; 177 if (fmt_str.field_width == 0 || fmt_str.field_width > 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. <THH> */
+; 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. <THH> */
+; 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 <format.h>
+; 7 #include <stddef.h>
+; 8 #include <stdarg.h>
+; 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 <stddef.h>
+; 7 #include <format.h>
+; 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 <stddef.h>
+; 7 #include <format.h>
+; 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 <stddef.h>
+; 7 #include <format.h>
+; 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 <stddef.h>
+; 7 #include <format.h>
+; 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 <format.h>
+; 6 #include <stdio.h>
+; 7 #include <stdarg.h>
+; 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 <errno.h>
+; 9 #include <math.h>
+; 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 <errno.h>
+; 14 #include <math.h>
+; 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 <math.h>
+; 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 <math.h>
+; 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 <math.h>
+; 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 <errno.h>
+; 10 #include <math.h>
+; 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 <errno.h>
+; 16 #include <math.h>
+; 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 <math.h>
+; 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 <math.h>
+; 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 <errno.h>
+; 11 #include <math.h>
+; 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 <math.h>
+; 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 <math.h>
+; 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 <errno.h>
+; 11 #include <math.h>
+; 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 <stdlib.h>
+; 10 #include <ctype.h>
+; 11 #include <stdio.h>
+; 12 #include <limits.h>
+; 13 #include <stddef.h>
+; 14 #include <math.h>
+; 15 #include <errno.h>
+; 16 //#include <float.h>
+; 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 <errno.h>
+; 17 #include <math.h>
+; 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 <math.h>
+; 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 <stddef.h>
+; 7 #include <format.h>
+; 8 #include <string.h>
+; 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.<THH>
+; 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 <stddef.h>
+; 7 #include <format.h>
+; 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