diff options
| author | 2019-04-10 15:14:00 -0400 | |
|---|---|---|
| committer | 2019-04-10 15:14:00 -0400 | |
| commit | 60699af63f92f43cc4b4b9e3050fcdd2a8468281 (patch) | |
| tree | 20a18af2774daa43ae7f4352dd032a24f7e06075 /frontends/calculator | |
| parent | 4527bc20241068731c62101d0467d416119ec0c4 (diff) | |
| download | cetris-60699af63f92f43cc4b4b9e3050fcdd2a8468281.tar.gz cetris-60699af63f92f43cc4b4b9e3050fcdd2a8468281.tar.bz2 cetris-60699af63f92f43cc4b4b9e3050fcdd2a8468281.zip | |
add opengl fronend, remove sdl frontend, refactor build system
Diffstat (limited to 'frontends/calculator')
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 Binary files differnew file mode 100755 index 0000000..8bd2f8d --- /dev/null +++ b/frontends/calculator/CEdev/bin/PLCError.dll diff --git a/frontends/calculator/CEdev/bin/convhex b/frontends/calculator/CEdev/bin/convhex Binary files differnew file mode 100755 index 0000000..fd67fe7 --- /dev/null +++ b/frontends/calculator/CEdev/bin/convhex diff --git a/frontends/calculator/CEdev/bin/convpng b/frontends/calculator/CEdev/bin/convpng Binary files differnew file mode 100755 index 0000000..88c811a --- /dev/null +++ b/frontends/calculator/CEdev/bin/convpng diff --git a/frontends/calculator/CEdev/bin/convtile b/frontends/calculator/CEdev/bin/convtile Binary files differnew file mode 100755 index 0000000..8944851 --- /dev/null +++ b/frontends/calculator/CEdev/bin/convtile 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 Binary files differnew file mode 100755 index 0000000..102d096 --- /dev/null +++ b/frontends/calculator/CEdev/bin/ez80cc.exe diff --git a/frontends/calculator/CEdev/bin/fasmg b/frontends/calculator/CEdev/bin/fasmg Binary files differnew file mode 100755 index 0000000..64f8526 --- /dev/null +++ b/frontends/calculator/CEdev/bin/fasmg diff --git a/frontends/calculator/CEdev/bin/make.exe b/frontends/calculator/CEdev/bin/make.exe Binary files differnew file mode 100755 index 0000000..61ce9e9 --- /dev/null +++ b/frontends/calculator/CEdev/bin/make.exe diff --git a/frontends/calculator/CEdev/bin/p1.exe b/frontends/calculator/CEdev/bin/p1.exe Binary files differnew file mode 100755 index 0000000..ac3a6a3 --- /dev/null +++ b/frontends/calculator/CEdev/bin/p1.exe diff --git a/frontends/calculator/CEdev/bin/p2.exe b/frontends/calculator/CEdev/bin/p2.exe Binary files differnew file mode 100755 index 0000000..4e97a26 --- /dev/null +++ b/frontends/calculator/CEdev/bin/p2.exe diff --git a/frontends/calculator/CEdev/bin/p3.exe b/frontends/calculator/CEdev/bin/p3.exe Binary files differnew file mode 100755 index 0000000..cd95b52 --- /dev/null +++ b/frontends/calculator/CEdev/bin/p3.exe 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 Binary files differnew file mode 100644 index 0000000..477a3d0 --- /dev/null +++ b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.8xp diff --git a/frontends/calculator/CEdev/examples/debugging/bin/DEMO.bin b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.bin Binary files differnew file mode 100644 index 0000000..10c5c3c --- /dev/null +++ b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.bin diff --git a/frontends/calculator/CEdev/examples/debugging/bin/DEMO.dbg b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.dbg Binary files differnew file mode 100644 index 0000000..8430b95 --- /dev/null +++ b/frontends/calculator/CEdev/examples/debugging/bin/DEMO.dbg 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 + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..7c7ab17 --- /dev/null +++ b/frontends/calculator/CEdev/examples/debugging/screenshot.png 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..d4fc967 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.8xp diff --git a/frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.bin b/frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.bin Binary files differnew file mode 100644 index 0000000..a2a9ac4 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detect/bin/DEMO.bin 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..d5c9e73 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detect/screenshot.png 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 Binary files differnew file mode 100644 index 0000000..9bd4645 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.8xp diff --git a/frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.bin b/frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.bin Binary files differnew file mode 100644 index 0000000..36a8f64 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detectany/bin/DEMO.bin 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..d5c9e73 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_detectany/screenshot.png 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 + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..924c14d --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_factorize/screenshot.png 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..8bcb253 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_os_vars/screenshot.png 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 Binary files differnew file mode 100644 index 0000000..8c3e091 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.8xp diff --git a/frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.bin b/frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.bin Binary files differnew file mode 100644 index 0000000..0b69716 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_read_write/bin/DEMO.bin 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 + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..8f22d44 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_read_write/screenshot.png 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..928b693 --- /dev/null +++ b/frontends/calculator/CEdev/examples/fileio_tokens/screenshot.png 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 + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..73c97a0 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_buffered_cube/screenshot.gif 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..6eefa42 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_char/screenshot.png 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..1c1e5e3 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_clipping/screenshot.gif 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 + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..f6408ab --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_floodfill/screenshot.gif 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..68c625a --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/screenshot.png 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 Binary files differnew file mode 100644 index 0000000..4baee35 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/tileset.png 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 Binary files differnew file mode 100644 index 0000000..b4981a2 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_fullscreen_tiled_image/src/gfx/var_gfx.8xv 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..1a3f070 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_hello_world/screenshot.png 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..8470736 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_light_dark/screenshot.gif 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..9235010 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_rletsprite/screenshot.png 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 Binary files differnew file mode 100644 index 0000000..55b8ab5 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_rletsprite/src/gfx/ubuntu.png 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..e6bf77b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_shapes_shift/screenshot.gif 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..b115cbe --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite/screenshot.png 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 Binary files differnew file mode 100644 index 0000000..d041515 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite/src/gfx/ubuntu.png 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..baeabbd --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_compress/screenshot.png 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 Binary files differnew file mode 100644 index 0000000..fc30924 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_compress/src/gfx/apple.png 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 + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..41a7b4b --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_keys/screenshot.gif 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 Binary files differnew file mode 100644 index 0000000..d041515 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_keys/src/gfx/ubuntu.png 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..fdcbe14 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/screenshot.png 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 Binary files differnew file mode 100644 index 0000000..d041515 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate/src/gfx/ubuntu.png 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..e1fca96 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/screenshot.gif 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 Binary files differnew file mode 100644 index 0000000..d041515 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprite_rotate_scale/src/gfx/ubuntu.png 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 + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..dcbcdf7 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/screenshot.png 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 Binary files differnew file mode 100644 index 0000000..f626cd0 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/mint.png 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 Binary files differnew file mode 100644 index 0000000..d041515 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/ubuntu.png 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 Binary files differnew file mode 100644 index 0000000..e6bb018 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_sprites_appvar/src/gfx/var_gfx.8xv 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 Binary files differnew file mode 100644 index 0000000..125ca62 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_template/iconc.png 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..741067c --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap/screenshot.gif 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 Binary files differnew file mode 100644 index 0000000..c20a947 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap/src/gfx/tileset.png 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..741067c --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/screenshot.gif 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 Binary files differnew file mode 100644 index 0000000..c20a947 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/tileset.png 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 Binary files differnew file mode 100644 index 0000000..20f2b3e --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_appvar/src/gfx/var_gfx.8xv 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..c20a947 --- /dev/null +++ b/frontends/calculator/CEdev/examples/gfx_tilemap_compress/src/gfx/tileset.png 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..bc51f39 --- /dev/null +++ b/frontends/calculator/CEdev/examples/hello_world/screenshot.png 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..7d1886c --- /dev/null +++ b/frontends/calculator/CEdev/examples/keypad_arrows/screenshot.gif 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 + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..65ca1f8 --- /dev/null +++ b/frontends/calculator/CEdev/examples/keypad_multiple_keys/screenshot.gif 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..ac2fcfa --- /dev/null +++ b/frontends/calculator/CEdev/examples/lcd_fill/screenshot.gif 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..546ce05 --- /dev/null +++ b/frontends/calculator/CEdev/examples/os_input/screenshot.png 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 Binary files differnew file mode 100644 index 0000000..fabdb82 --- /dev/null +++ b/frontends/calculator/CEdev/examples/random/bin/DEMO.8xp diff --git a/frontends/calculator/CEdev/examples/random/bin/DEMO.bin b/frontends/calculator/CEdev/examples/random/bin/DEMO.bin Binary files differnew file mode 100644 index 0000000..fa7ca25 --- /dev/null +++ b/frontends/calculator/CEdev/examples/random/bin/DEMO.bin 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..409044e --- /dev/null +++ b/frontends/calculator/CEdev/examples/random/screenshot.png 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 Binary files differnew file mode 100644 index 0000000..4e42d97 --- /dev/null +++ b/frontends/calculator/CEdev/examples/random/test/expected.bin 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) + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..3e81f11 --- /dev/null +++ b/frontends/calculator/CEdev/examples/real_time_clock/screenshot.gif 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 + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..7175ab5 --- /dev/null +++ b/frontends/calculator/CEdev/examples/second_counter/screenshot.gif 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 + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..dd167ab --- /dev/null +++ b/frontends/calculator/CEdev/examples/second_counter2/screenshot.gif 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. + + + +--- + +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 Binary files differnew file mode 100644 index 0000000..3642282 --- /dev/null +++ b/frontends/calculator/CEdev/examples/stopwatch/screenshot.png 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 Binary files differnew file mode 100644 index 0000000..125ca62 --- /dev/null +++ b/frontends/calculator/CEdev/examples/template/iconc.png 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
|